Protokol MODBUS ve standardní podobě obsahuje jednoho Mastera a skupinu Slave spojených sítí RS485. Slave může být max. 255 - jednobajtová adresa). Standardní Modbus má navíc omezení na max. adresu 247. Master cyklicky obvolává jednotlivé Slave a čte z nich data. Do toho se mísí povely, které Master podle potřeby vkládá mezi dotazy. Každý rámec od Mastera je buď povinně potvrzen nebo obsahuje data odpovídající funkci rámce. Na základě tohoto jednoduchého principu Master určuje životnost, potažmo nefunkčnost jednotlivých Slave. Pořadí obvolávání Slave není definováno. Master si může volací seznam sestavit jak je mu libo. Master nemá svoji vlastní adresu. Síť Modbus se sběrnicí RS485: master slave PLC PLC ______ | | | ___ | PLC |--------------+ | | addresses: |______| +-------------------|___| 01 | ___ |RS485 | | +-------------------|___| 02 | ___ | | | 03 +-------------------|___| | Na dalším schematu je síť Modbus propojená rádiovou sítí MORSE. Slave PLC jsou připojeny jednotlivě nebo po skupinách k MORSE CU (communication unit, modem, rádio), které místně zastupují funkci Master PLC: [A] [B] [C] [D] master slave master slave PLC CU CU PLC ______ \|/........... \|/ | |RS232 _|_ : _|_ ___ slave | PLC |-----| | : | | RS485 | | addresses: |______| |___| : |___|----+----|___| (0):01 (m)ode:SLAVE : (m)ode:MASTER| ___ FF 691122FF : 69112201 | | | : +----|___| (1):02 address : (d)est:FF :..... \|/ : _|_ ___ : | | RS485 | | (0):03 : |___|----+----|___| : 69112203 | ___ : | | | : +----|___| (1):04 :..... \|/ _|_ ___ | | RS232 | | |___|---------|___| (0):05 69112205 period m(i)rror (p)eriod Sběrnice Modbusu je přerušena vloženou rádiovou sítí, která zprostředkovává spojení ve třech dále popsaných režimech. Schema ilustruje použití pojmů Master a Slave v dalším výkladu. Značky [A],[B],[C],[D] jsou použity pro rozlišení stupňů v komunikační hierarchii. I když se CU [B] chová v rádiové síti současně jako Master vzhledem k CU [C], pro přehlednost se tomuto označení vyhneme. Znaky v závorkách jako m(i)rror se označují parametry protokolu, uveden je i příklad adres. Adresa master PLC [A] je shodná s dolním byte MORSE adresy CU slave [B]. Dolní byte adresy CU master[C] je shodná s jednou z adres připojených slave PLC [D], pro směrování ostatních PLC se použije funkce "zmnožení adres" v menu (N)odes (e)dit. 0.1 Popis protokolu Modbus Modbus je typický představitel rodiny protokolů určených pro sběrnici realizovanou na RS485. Používá 256bajtové rámce opatřené 16bitovým CRC. Protože Modbus rozlišuje typy přenášených dat (bitové, bajtové, wordové), jsou zavedny typy rámců pro odlišení těchto variant. Modbus typ rámce popisuje číslem funkce, kterou rámec realizuje. 0.1.1 Přehled nejčastějších funkcí protokolu Modbus Přehled povelů Modbusu pro čtení a zápis z různých částí paměti PLC. function/8 start/16 (hex) number/16 ___________ | | 02 1bit | OUT |-> 0F --> bits | |-> |___________|-> | Analog | 04 1words | | 03 words | Registers | 17 words | | |___________| Popis jednotlivých funkcí: - 01 (Read Output Status) čte z automatu Slave stavy vystupů (relé, tranistorové spínače, apod.). Zakladním jednotkou čtenou pomocí této funkce je jeden výstup - v našich poměrech je to jeden bit. Protože ovšem protokol umí přenést jako nejmenší element jeden bajt, jsou bity výstupů sdružovány do bajtů. Master může adresovat více bitů naráz, pak je obdrží naskládané do několika bajtů odpovědi. Typické tvary rámců pak vypadají takto: výzva | adr/8 | fce/8 | start/16 | number/16 | crc/16 | odpověď | adr/8 | fce/8 | cnt/8 | data/8 * cnt | crc/16 | adr - adresa automatu na sběrnici Modbus, tato adresa musí být jedinečná v rámci celé sběrnice. Adresa je stejná jak u dotazu tak i odpovědi. fce - funkce, kterou automat vykoná po přijetí rámce. start - počáteční adresa dat (výstupu), která budou zpracována. number - počet položek (bitů), které budou zpracovány. cnt - počet datových bajtů rámce. data - vlastní data dotazu zarovnaná na osm bitů. crc - zabezpečovací slovo Příklad: Mějme stav výstupů v našem automatu od nulté adresy 0x1480. Automat má adresu na Modbusu 0x10. Pomocí funkce 01 nejprve přečteme všechny naráz a pak postupně. Dotaz pro první případ: 1001 0000 0010 crc - chceme 16 výstupů od nulté pozice odpověď: 1001 0214 80 crc - vráceno všech 16 výstupů. Je potřeba upozornit, že data nejsou zarovnávána na sudý počet bajtů, jak je obvyklé v MORSE sítích. Dotaz pro druhý případ: 1001 0008 0008 crc - chceme 8 výstupů od osmé pozice odpověď: 1001 0180 crc - vráceno 8 výstupů. Jak je vidno, výstupy jsou organizovány ve formátu Intel (malý endian). - 02 (Read Input Status) je naprosto totožná s předcházející funkcí, ale čte ze Slave automatu vstupy. Tvary rámců jsou rovněž shodné. - 03 (Read Holding Registers) vrací z automatu 16bitové paměťové registry. Tyto registry jsou obecně použitelné (General purpose). V našem případě jsou použité pro cache a paketový režim. Rámce pak vypadají takto: výzva | adr/8 | fce/8 | start/16 | number/16 | crc/16 | odpověď | adr/8 | fce/8 | cnt/8 | data/8 * cnt | crc/16 | adr - adresa automatu na sběrnici Modbus fce - funkce, kterou automat vykoná po přijetí rámce. start - počáteční adresa dat (výstupu), která budou zpracována. number - počet položek (wordy), které budou zpracovány. cnt - počet datových bajtů rámce. data - obsah požadovaných registrů zarovnaný na 16 bitů. crc - zabezpečovací slovo . Příklad: V našem automatu z přecházejícího příkladu jsou obsahy tří registů od nulté adresy 0x1480, 0x3450 a 0x4054. Dotaz: 1003 0000 0003 crc odpověď: 1003 0614 8034 5040 54 crc - opět rámec není zarovnán na sudý počet bajtů. - 04 (Read Input Registers) je v principu shodná s funkcí pro čtení registrů. Na rozdíl od ní ovšem vrací stavy analogových vstupů. - 05 (Force Single Output) nastavuje jeden výstup, t.j. jeden bit. Protože binární výstup lze jen nastavit nebo smazat, jsou tvary povely velmi jednoduché. výzva | adr/8 | fce/8 | start/16 | 0xFF00 | crc/16 | pro nastavení 1 výstupu | adr/8 | fce/8 | start/16 | 0x0000 | crc/16 | pro smazání 1 výstupu odpověď | adr/8 | fce/8 | start/16 | 0xFF00 | crc/16 | nebo | adr/8 | fce/8 | start/16 | 0x0000 | crc/16 | je prostou kopií dotazu. adr - adresa automatu na sběrnici Modbus fce - funkce, kterou automat vykoná po přijetí rámce. start - počáteční adresa dat (výstupu), která budou zpracována. crc - zabezpečovací slovo. - 06 (Preset Single Register) nastaví obsah jednoho registru = 1 word. Je podobná funkci předcházející, jen místo stavu bitu se objevuje stav registru. výzva | adr/8 | fce/8 | start/16 | data/16 | crc/16 | odpověď | adr/8 | fce/8 | start/16 | data/16 | crc/16 | je opět prostou kopií dotazu. adr - adresa automatu na sběrnici Modbus fce - funkce, kterou automat vykoná po přijetí rámce. start - počáteční adresa dat, která budou zpracována. data - obsah zapisovaného registru. crc - zabezpečovací slovo. - 0F hex (Force Multiple Outputs) současné nastavení více výstupů. výzva | adr/8 | fce/8 | start/16 | number/16 | cnt/8 | data/8 * cnt | crc/16 | odpověď | adr/8 | fce/8 | start/16 | number/16 | crc/16 | adr - adresa automatu na sběrnici Modbus fce - funkce, kterou automat vykoná po přijetí rámce. start - počáteční adresa dat (výstupu), která budou zpracována. number - počet bitů pro zápis cnt - počet byte nutných pro přenos adresované skupiny bitů data - stavy zapisovaných výstupů, wordy obsahují prohozené bajty ve tvaru L,H, L,H, L,H, ... crc - zabezpečovací slovo. - 10 hex (Preset Multiple Regs) podobně jako předcházející funkce nastavuje více registrů naráz. výzva | adr/8 | fce/8 | start/16 | number/16 | cnt/8 | data/16 * numb | crc/16 | odpověď | adr/8 | fce/8 | start/16 | number/16 | crc/16 | adr - adresa automatu na sběrnici Modbus fce - funkce, kterou automat vykoná po přijetí rámce. start - počáteční adresa dat (výstupu), která budou zpracována. number - počet wordů pro zápis cnt - počet byte nutných pro přenos požadované skupiny wordů data - stavy zapisovaných registrů. crc - zabezpečovací slovo. - 17 hex (READ/WRITE HOLDING REGISTERS) spojuje funkci 03 čtení a 06.zápis. výzva | a/8 | f/8 | rst/16 | rno/16 | wst/16 | wno/16 | wcnt/8 | wdata/cnt*8 | |crc/16 | odpověď | a/8 | f/8 | cnt/8 | data/cnt*8 | crc/16 | a - adresa slave f - funkce READ/WRITE HOLDING REGISTERS rst - start čtené oblasti rno - počet registrů čtené oblasti wst - start zapisované oblasti wno - počet registrů zapisované oblasti wcnt - počet byte dat v rámci wdata - data, která mají být zapsána Pokud Slave automat čemukoliv v dotazu/povelu nerozumí je povinnen vrátit výjimku (exception). Výjimka by měla informovat Mastera o situaci, ve které se pokusil pracovat buď nedovolenou fukncí pro daný Slave nebo s daty mimo platný rozsah pro daný Slave automat. - odpověď na dotaz nebo na povel s chybným zadáním | adr/8 | 0x80+fce /8 | excode/8 | crc/16 | adr - adresa automatu na sběrnici Modbus fce - funkce, která výjimku vyvolala. excode - číslo výjimky, specifikuje kde přesně a jaká se stala chyba 1 - chybné číslo funkce 2 - chybná adresa dat 3 - chybný obsah dat 5 - potvrzené přijetí povelu, jehož provedení je pomalé 6 - odmítnutí, Slave je zaměstnán výkonem pomalého povelu crc - zabezpečovací slovo. 1. Funkce modemu v protokolu MODBUS. Modem připojený k Modbusu má několik možností funkce (podrobné popisy níže): - transparentní režim V tomto módu jsou data přenášena tak, jak byl generována u Mastera (nebo Slave v případě odpovědi). Jsou pouze zkontrolována na validní CRC a následně poslána na patřičnou MORSE adresu. Ta se zjistí prostým přímým mapováním Modbus adresy přes masku na adresu MORSE. Tento režim nikterak nekontroluje obsah přenášených dat. Tzn. lze přenášet prakticky cokoliv co vyhoví podmínce správného CRC a adresy. Tento režim lze doporučit pouze pro aplikace, u kterých není dopředu známo, kolik a jakých dat bude přenášeno. Další podstatnou nevýhodou je rychlost odezev Master Slave, které jsou přímo úměrné transportu paketu přes síť tam a zpátky. - režim cache Tento mód vychází z předpokladu, ze většina technologií potřebuje data shromažďovat v jednom místě (centrála / dispečink) a pouze čas od času poslat z centrály nějaký příkaz. Všechna data směrem na centrálu jsou zapamatována v cache centralního modemu a odtud na přání Mastera okamžitě vracena. Tj. centralní modem se pro Mastera jeví jako celá sít Slave. Přes síť se přenášejí pouze povely pro Slave, změny a čas od času aktualizace, aby se zajistila synchronost dat v cache a dat v odpovídajicím Slave. Takto se ušetří až 90% kapacity sítě, neboť se odbourají přenosy, které přenášejí data už v cache obsažená. Nespornou výhodou je fakt, že rychlost odezvy na dotaz do cache je řádově v jednotkách ms. Tudíž cyklus obvoláváni Slave je velmi rychlý. V tomto okamžiku se ovšem vynořuje drobná vada na kráse - některé automaty neumějí čekat na odpověď dostatečně dlouho - při jejich návrhu nebylo kalkulováno se sítěmi s velmi dlouhou (v porovnání s klasickým metalickým vedením) odezvou. Jedná se o případ, kdy Master právě posílá povel směrem ke Slave. Tehdy je odezva delší - kompletní transport přes síť tam a zpět. V okamžiku, kdy takovémuto automatu vyprší jeho čas, začne opakovat, přičemž povel se ani ještě nestihl doručit ke Slave. Po několika opakováních se sice dočká odpovědi, ale je to odpověď na první vyslání povelu. Automat sice přestane opakovat, nicméně sítí se hrnou teď uz zbytečná opakování povelů a zbytečné odpovědi na ně. Pro takovéto neštastné automaty existuje táhlo, jehož pomocí lze takovým situacím zamezit. Pomocí parametru "(r)epeat discard" lze nastavit, kolik opakovaní se má zahodit, než se znovu vpustí do sítě. Centralní modem umí rozpoznat uhynulého Slave. Udržuje si v paměti časy mezi jednotlivými aktualizacemi nebo změnovými pakety a pokud takovýto čas přeteče přes nastavenou hodnotu, je odpovidající Slave prohlášen za mrtvého a modem přestane na výzvy k tomuto Slave odpovídat. Režim cache lze doporučit pro většinu aplikací, kde objem přenášených dat nepřesáhne cca 50 bajtů a počet stanic Slave rovněž bude pod 100. (pomůcka: objem dat může být i větší, ale součin (objem_dat * pocet_stanic) by neměl přesáhnout cca 5000, což je maximální velikost cache). Z předcházejích řádků je zřejmé, že cacheovaný režim odstranil zbytečnou zátěž sítě při přenosu výzev od Mastera k Slave automatům, protože polling (obvolávání) automatů se děje lokálně mezi modemem a automatem. Přes síť se pak transferují jen povely a změny. - paketový režim. Tento režim využívá Modbus jen jako linkovou vrstvu. Mezi jednotlivými účastníky tohoto typu komunikace jsou přenášeny datové pakety (prakticky stejně jako v MORSE sítích), které obsahují v hlavičce informace pro korektní doručování v rámci MORSE sítě. V tomto režimu přestává existovat rozdíl mezi Masterem a Slave. Tudíž je jedno, zda je v rámci této komunikace Master modem nebo připojené zařízení. Všichni učastníci si mohou předávat pakety bez omezení. Pro Master vystupuje modem jako Slave a pro Slave modem naopak dělá Master. Lze naprosto bez problemů zrealizovat spojení mezi dvěma Master (Slave) automaty, což by v rámci běžného Modbusu nebylo možné. Adresace přechází z Modbus adres na MORSE adresy. Původní adresy jsou využívány pouze jako linkové a mohou se v rámci MORSE sítě i opakovat (dokonce to zjednoduší konfiguraci). Tento režim je silně doporučován do heterogeních sítí, kde je velké množství automatů různých druhů a kde jsou kladeny vysoké nároky na variabilitu (velikost a rychlost) přenášených dat. Při provozu v tomto režimu také dochází k mimovolné transformaci protokolů. Toho lze poměrně s výhodou využít při propojování různých technologií osazených automaty s odlišnými komunikačními protokoly. - Režim paket rovněž umožňuje např. v centru použít komunikaci s aplikací přes UDP/IP a Morse Aplikační Server a na podřízených stanicích kromě protokolu Modbus použít i jiné protokoly.Použití paketového režimu a Aplikačního serveru výrazně ušetří na investovaných prostředcích, protože odpadá potřeba osazení ve většině případů drahého Master automatu, který navíc obvykle funguje jen jako datový koncentrátor pro následně připojený SCADA systém. - časová synchronizace Tato záležitost sice není komunikací po síti, ale umožňuje sjednotit čas mezi jednotlivými automaty a sítí. Zde modem může být zdrojem časového údaje nebo naopak jeho příjemcem. Asi nejběžnější varianta bude tato: centrální modem bude zavěšen na čas Master systému. Pro ostatní modemy v síti bude zdrojem času a ostatní modemy budou pak zdrojem času pro Slave automaty. - watchdog Tento prvek vychází z faktu, že program v Slave automatu nemá možnost se dovědět zdali komunikace probíhá či nikoliv. Je to zapříčiněno stavbou automatu a jeho firmware (pozor! nezaměnovat s uživatelským software). Naparametrovaním tohoto režimu bude modem v režimu Master periodicky zapisovat na určenou adresu v automatu dohodnutou hodnotu (opět parametr). - fantom (phantom access) Fantomový přístup lze používat jen v režimu, kdy modem je Slave a pracuje se zapnutou cache. Za pomoci fantomového principu lze přistupovat do cache bez adres jednotlivých Slave. Celá cache se pro Master systém jeví jako jeden jediný Slave s velmi velkým balíkem dat. Tento princip je velmi výhodný pro konfiguraci s mnoha Slave automaty v síti, Odpadnou tak na straně Master systému zbytečné dotazy na malé balíčky dat z jednotlivých Slave. Celou cache může Master vyčíst za pomoci několika málo dotazů. Master ovšem při tomto principu činnosti musí znát organizaci v cache. Ta je dána strukturou dat přicházejcích od Slave automatů. - virtual (virtual station) Podobně jako fantom, i tento prvek je funkční jen pro cache a Slave režim modemu. Tato pomůcka poskytuje nadřízenému Master systému infomaci o právě došlých zprávách ze sítě. Na základě této informace může Master modifikovat posloupnost obvolávání tak aby vyčítal data z cache jen z adres stanic u nichž došlo ke změně (byl doručen změnový/aktualizační paket). Takto lze zminimalizovat obvolávku ze strany master systému a podstatně tak ušetřit režii sběrnice. Jako optimální se jeví kombinace cache, fantomu a virtuální stanice. Master na základě informace z virtuální stanice sestaví seznam Slave, u nichž došlo ke změnám a vypočítá potřebné adresy pro fantom. Pak za pomoci fantomu naráz vyčte potřebná data. Na místo mnoha postupných dotazů mu nyní budou stačit dotazy dva. Prvním vyčte obsah virtuální stanice a druhým už potřebná data z fantomu. 1.1 Modem jako MASTER Modem emuluje Master na straně Slave automatu (PLC). Zde je možno připojit max. 4 Slave. Jejich adresy na RS485 by měly být jedinečné v rámci celé MORSE-Modbus sítě, nebot je použité přímé mapování maskou MORSE -> Modbus a naopak (toto pravidlo neplatí pro paketový režim).Pro některé režimy je možné také použít Art tabulky, ale ty jsou primárně určeny pro retranslační provoz. Podle zvolených variant provozu může modem periodicky "olizovat" Slave automaty a číst z nich data v cache a paketovém režimu. Speciálním případem je transparentní režim, kdy výzvy ke Slave automatům jsou přijímány od cetrálního Master automatu beze změny přes síť a odpovědi na ně jsou rovněž beze změny transferovány přes síť zpět k centrálnímu automatu. Všechny zmíněné režimy lze zapnout naráz. 1.1.1 Modem MASTER v režimu cache Je-li modem zparametrován do tohoto režimu, tvoří pro několik připojených slave automatů Mastera. Režim cache je postaven na předpokladu, že běžné technologie data spíše koncentrují do jednoho místa (SCADA, Master automat), přičemž povely do technologie jsou spíše sporadické. Pro správnou činnost je nutná programová podpora i v připojených Slave automatech. Program v automatu vytvoří tzv. "komunikační zónu", do které vkládá údaje z technologie potřebné pro nadřízený řídící proces (SCADA, Master automat). Pořadí a typy dat nejsou rozhodující. Komunikační zóna je souvislá část paměti automatu pro tzv. Holding Registers (Modicon).Tyto registry jsou obecně použitelné buňky paměti, které jsou přístupné přes funkce protokolu Modbus (různí výrobci mají pro tuto část paměti různé pojmenování, nicméně asi nejběžnější název je právě Holding Registers). Tato zóna se cyklicky vyčítá modemem (perioda vyčítání je parametrizovatelná). Modem [C] (viz schema sítě) si vytváří kopii dat z této zóny a porovnává ji s aktuálně přijatými daty (data přijatá z dotazu na tuto "komunikační zónu"). Zjistí- li modem jakoukoliv diferenci mezi kopií a aktuálně přijatými daty, odesílá okamžitě tato data na centrální modem [B], kde jsou uložena do cache. Data jsou rovněž přenášena po uplynutí určité předem nastavené periody nucené aktualizace. Tento princip zajišťuje, že i když dojde k náhodné ztrátě paketu se změnovými daty, jsou všechna data po určitém čase stejně přenesena bez ohledu na jejich stav. Tudíž data v centrálním modemu jsou stará maximálně právě onu periodu nucené aktualizace. Pro optimální činnost cacheovaného režimu je nutné zajistit uživatelským programem v automatu to, aby změny v replikované (cacheované) oblasti paměti byly opodstatněné. Je tím hlavně míněno dobré ošetření např. analogových veličin. Mnohdy se stává, díky nejrůznějšímu rušení, že signál z čidla je plný indukovaných zákmitů a praskotů. Pokud by se tyto tyto rušivé elementy projevovaly i v komunikační zóně, modem by každou takovouto změnu - poruchu považoval za signál k odeslání na centrální stanici. Což o to, to by samo o sobě až tak moc nevadilo, ale fakt že takovýto přenos nenese žádná užitečná data je z hlediska zátěže sítě jistě nezanedbatelný. Programová podpora v automatu vyžaduje znalost struktury přenášených dat, neboť z hlediska modemu jsou všechna považována za binární. Protože Master [A] v protokolu Modbus nemá adresu, je nutné mu přidělit alespoň MORSE adresu. To se provádí parametrem v modemu. Jako další doplňky lze zapnout časovu synchronizaci a watchdog. Modem lze provozovat i se zapnutým paketovým režimem. 1.1.2 Modem MASTER v transparentním režimu Při nastevení modemu do tohoto módu, je modem pro připojenou sběrnici Master a určuje kdo bude mít na sběrnici prostor. Všechna ostatní zařízení musí být povinně Slave. Jinak by docházelo k nedefinovatelným stavům a kolizím. Protokol Modbus neumí multimaster režim. V transparentním režimu jsou pakety přenášeny přes síť ve tvaru stejném v jakém byla přijata od Slave automatu. Samozřejmě je kontrolováno CRC. Pokud kontrola CRC selže, je rámec bez náhrady zahozen. Je zde jen podmínka, že rámec přijatý ze sběrnice 485 (na ni jsou připojeny Slave automaty) musí být vyprovokován rámcem do sběrnice vyslaným. V praxi to znamená pouze tolik, že když modem nevyšle povel nebo dotaz a přesto něco přijme ze sběrnice i když kontrola CRC vyjde dobře, považuje to za náhodné rušení a přijatý rámec zlikviduje. Protože modem v transparentním režimu kromě kontroly CRC neprovádí s daty žádnou jinou akci, je možné posílat přes síť naprosto obskurní funkce a data. Typická záležitost je přeprogramovaní Slave automatu na dálku. Aby transparentní režim fungoval správně je potřeba zajistit shodu adres připojených Slave automatů a MORSE adres v modemu. Pochopitelně to vyžaduje mít zapnutý u modemu síťový multiaddressing a správně nastavené lokální retranslační tabulky. Mapování adres MORSE -> Modbus je provedeno osmibitovou maskou, která ořízne horní část MORSE adresy a zbude adresa Modbus, která se použije pro vyslání do sběrnice 485. Stejným způsobem je prováděno zpětné mapování z adres Modbus na MORSE. Podle masky se určí horní část MORSE adresy a prostou funkcí OR se spojí s adresou Modbus. Takto vzniklá kompletní MORSE adresa se použije pro odeslání do sítě (v názvosloví MORSE je to source address). Protože protokol Modbus nepoužívá adresu Master systému, je nutné ji modemu nějak sdělit. Jinak se nedá zajistit korektní doručování dat směrem na Master systém, MORSE síť bez adres obou směrů nemůže fungovat. To se zajišťuje nastavitelným parametrem, který tuto adresu určuje. Modem pak všechny oprávněné odpovědi od Slave automatů směřuje na tuto adresu. Je vhodné ji volit mimo projektovaný rozsah, aby nemohlo dojít k záměně. Např. projektovaná sít bude mít 34 účastníků situovaných od jedné, takže MORSE adresy budou v rozsahu např. 45230001 až 45230022 (34 je hexadecimálně 22). Tudíž adresa Master systému může ležet v rozsahu 45230023 až 452300FF. Je dobré s ohledem na případné budoucí rozšiřování volit adresu z druhého konce rozsahu - pokud to rozdělení síťových adres vůbec umožňuje. Tzn. Master systém by mohl v takovéto aplikaci mít MORSE adresu 452300FF. Zřejmě nejčastější případ aplikace bude záležitost modem + jeden Slave automat. Tato situace je pro konfiguraci velmi prostá, protože stačí jen zajistit aby se adresa automatu shodovala s posledním bajtem MORSE adresy, nastavit správný režim v modemu, adresu Master systému a je hotovo. 1.1.3 Modem MASTER v paketovém režimu Paketový režim předpokládá v Slave zařízení existenci dvou bufferů pro dočasné uložení paketů určených pro transport přes síť. Tyto buffery jsou zrealizovány jako oblasti obecné paměti, které jsou přímo přístupné přes Modbus. Funkce, které umožnují čtení a zápis paměťových oblastí, nazývají tuto oblast jako Holding Ragisters (Modicon). Jeden z těchto bufferů je určen pro vysílání do sítě, a druhý pro příjem ze sítě. Buffer, určený pro vysílání z Modbusu do MORSE sítě, se nazývá H2Nbuf (host to network buffer). Podobně buffer pro příjem z MORSE sítě do Modbusu je pojmenován N2Hbuf (network to host buffer). Oba směry jsou zcela nezávislé a mohou být provozovány asynchronně. Protože v popisované variantě je modem jako Master, určuje podle nastavených parametrů průběh komunikace na sběrnici RS485 právě on. Než se pustíme do podrobného popisu komunikace, je potřeba objasnit sturktury bufferů. Oba mají shodnou strukturu, ale nemusí mít shodnou délku. Minimální délka bufferu odpovídá maximální délce rámce Modbusu, tj. 250 bajtů (jsou odečteny délky hlaviček a CRC). Maximální délka není omezena, ale při použití MORSE systému stačí velikost 1600 bajtů, což je právě maximální přípustná délka paketu v MORSE sítích. Struktura bufferů: H2Nbuf: | H2Ndesc/16 | H2Nfr/modbusMRU | N2Hbuf: | N2Hdesc/16 | N2Hfr/modbusMTU | popis jednotlivých položek H2Ndesc znamená "host to net descriptor", a obsahuje potřebné informace pro přesun paketu přes Modbus: |ret/1|rep/1|No/2|res/1|rxsize/11| N2Hdesc (net to host descriptor) je shodný s H2Ndesc: |ret/1|rep/1|No/2|res/1|txsize/11| ret - 0 - user pseudorámec, 1 - retranslačni pseudorámec (vyhrazeno pro potřeby Racomu) rep - repeat bit No - číslo paketu res - reserved rxsize - velikost pseudorámce včetne adresy a typu v bajtech txsize - velikost pseudorámce včetne adresy a typu v bajtech N2Hfr - user pseudorámec H2Nfr - user pseudorámec modbusMRU - Maximum Receive Unit modbusMTU - Maximum Transmit Unit Pamětové adresy jednotlivých bloků (H2Nbuf, N2Hbuf), jsou v modemu volně konfigurovatelné podle potřeb připojeného zařízení. Pseudorámec obsahuje vlastní paket, určený pro tranfer z/do sítě. Uvnitř pseudorámce je ukryta hlavička obsahující síťové informace. Ty se skládají z adresy, délky a pořadového čísla. Hlavička je v bufferu umístěna hned na následující pozici za descriptorem. Struktura dat a hlavičky pseudorámce je následující: User pseudorámec: | T/8 | D/1 | R/4 | N/3 | A/32 | data | T - typ paketu D - bit DTE, je-li 0, je vysílající DCE, A je adresa source. naopak je-li 1, je vysílající DTE, A je adresa destination. R - rezervováno, musí být nula N - síťové číslo (přenáší se po síti). A - adresa v síti data - vlastní data pseudorámce Číslování paketů není povinné. Číslo je dodáno na cílovou adresu a může sloužit ke kontrole pořadí dodaných paketů (síť MORSE nezaručuje přesné dodržení pořadí).Adresa je buď adresou source (DTE přijímá paket) nebo adresou destination (DTE vysílá paket). Paket přichází do protokolu přes CNI (Channel to Node Interface), které může převádět uživatelský adresový prostor na adresový prostor MORSE, např. pomocí masky. Max. dovolená délka dat v síťové vrstvě MORSE je 1626 byte. Delší pakety nejsou v systému definovány. Optimální velikost paketu pro systém MORSE je 200-400byte. Typ paketu je shodný s pakety v MORSE systému. Jejich podrobný popis je možné nalézt v ostatních dokumentech (např. Mars-A). Nyní se můžeme podívat, jak bude probíhat komunikace. V případě, že Slave chce poslat paket, tak otestuje descriptor (H2Ndesc) v H2Nbuf. Je-li nulový, naplní H2Nbuf podle popisu. V prvním wordu je descriptor s délkou, od druhého wordu následuje vlastní předávaný paket (user pseudorámec) s hlavičkou následovanou vlastními daty. Master (modem) neustále (po nastavené periodě vyčítání) kontroluje descriptor v H2Nbuf a je-li nenulový, tak z H2Nbuf vyčte paket a následně nastaví descriptor v H2Nbuf na nulu. Tím sdělí zařízení Slave, že paket převzal a zařadil jej do Morse sítě k odeslání. Tehdy může Slave naplnit H2Nbuf dalším paketem atd. Opačný směr - příjem ze sítě - probíhá analogicky, pouze ten kdo kontroluje descriptor před zápisem je modem. Pokud modem zjistí, že descriptor je nenulový, tzn. Slave ještě nepřevzal předcházející doručený pseudorámec, zkouší to znovu a znovu po dobu než uplyne doba života tohoto rámce. Pak je tento rámec zahozen. Jestliže ale v průběhu pokusů o doručení je zjištěn nulový descriptor (Slave zpracoval rámec), rozběhne se normální procestransferu. Protože maximální velikost dat přenositelná v jednom rámci protokolu Modbus je 256 bajtů, je v případě potřeby přenosu delšího paketu přes buffery třeba tento paket vyčíst (zapsat) pomoci několika rámců (fragmentů). 1.1.4 Modem MASTER a časová synchronizace Mnohé technologie postavené na Modbusu vyžadují, aby Slave automaty byly časově synchronní (reálný čas). Modbus samotný nemá prostředky pro synchronizaci času a tak to obvykle bývá řešeno na programové úrovni. Tyto přenosy časových informací jsou z hlediska MORSE sítě zbytečné, protože sama MORSE síť umožňuje poměrně s nepatrnými nároky na kapacitu zajistit reálný čas v kterémkoliv svém bodě. Pro ušetření jednak práce programmátora aplikace Modbus a také kapacity sítě, byl zaveden režim synchronizace času mezi zařízením Slave a modem. Modem jako Master Modbus může pracovat ve dvou režimech: je schopen poskytovat reálný čas, nebo čas naopak přejímat a synchronizovat se na něj. V prvním případě, kdy je modem zdrojem času, v nastaveném intervalu zapisuje čas do určené oblasti paměti v Slave automatu. Používají se k tomu steně jako v případě cache a paketového režimu funkce pro práci s Holding registers. Program v Slave automatu testuje tuto oblast a v případě, kdy zjistí že obsahuje nějaká data, převezme je a použije pro synchronizaci času. Po úspěšném zpracovaní oblast smaže. Opačně, pokud je modem synchronizován časem ze Slave automatu, je tato oblast vyčítána a data v ní obsažená jsou použita pro synchronizaci modemu. Pro tento případ je vhodné, aby program v Slave automatu čas v této oblasti upravoval co nejčasteji. Jen tak se zamezí diferencím při synchronizaci. Pokud je modem synchronizován, stačí vyplnit v zóně jen údaj o GMT, letním/zimním čase a milisekundy. Ostatní položky jsou ignorovány. Struktura časového údaje poskytovaného modemem je poměrně obsáhlá a Slave automat si může vybrat z údajů, ty které mu vyhovují nejvíce. Formát časového údaje: | gmtsec/32 | R/1 | ts/1 | R/4 | msec/10 | sec/8 | min/8 | hour/8 | day/8 | | month/8 | year/8 | gmtsec - aktuální čas, je použit GMT udávaný v sekundách od 1.1.1970 (Unix time) msec - milisekundy v právě probíhající sekundě. ts - timesavings, přepínač letní/zimní čas (1 - letní, 0 - zimní čas) Další položky obsahují lokální čas včetně korekce časové zóny. sec - aktuální sekunda min - minuty hour - hodiny (0 - 23) mday - den v měsíci (1 - 31) mon - měsíc (0 - 11) year - rok (údaj je ve tvaru letopočet - 1900) R - rezerved 1.1.5 Modem MASTER a Watchdog Některé kritické řídící procesy potřebují informaci o korektní činnosti modemu. Protože většina automatů díky vnitřnímu firmware odstiňuje komunikaci na seriovém portu od uživatelského programu, nemá uživatel jak zjistit, že modem pracuje správně. Z tohoto důvodu byl zaveden režim, kdy modem pravidelně zapisuje do předem určené lokace definovaný údaj. Program v Slave automatu testuje tuto oblast a vyhodnocuje její stav. Pokud program zjistí, že do oblasti nebylo zapsáno déle než nastavenou dobu, může se přepnout do stavu nevyžadujícího komunikaci, popřípadě bezpečně odstavit technologii. Modem umí zapisovat do oblasti volné paměti (Holding Registers) nastavenou bitovou masku. Rovněž čas je nastavitelný v širokých mezích. Typicky probíhá režim watchdog následovně: modem např. jednou za pět sekund zapíše do Slave automatu např. na adresu 0x1000 hodnotu 0x8000 (tj. nahodí nejvyšší bit v daném slově). Tuto adresu rovněž testuje program v automatu. Zjisti-li zápis na správný bit, smaže tento bit a spustí časovač, který nastaví na dobu o něco málo větší než pět sekund. Při příštím zápisu se cyklus opakuje. Pokud časovač přeteče, je to neklamná známka toho, že nedošlo k zápisu správného bitu a lze to prohlásit za výpadek modemu. 1.2 Modem jako SLAVE Slave režim je nutný pro připojení k Master systému. Podle zvolených variant provozu se modem jeví jako celá 485 síť nebo komunikuje v paketovém režimu, kdy provoz typický pro 485 sítě mizí. Typické aplikace využívají Master jako datový koncentrátor a tudíž připojený modem je cesta k vzdáleným Slave automatům. Je nutné poznamenat, že v tomto režimu bude modem zatěžován několikanásobně více než kterýkoliv vzdálený modem u Slave automatu. Všechna data z/do sítě musí projít právě skrz něj. 1.2.1 Modem SLAVE v režimu cache Slave modem [B] je připojen k Master automatu [A]. Na jeho dotazy, které musí být v souladu s replikovanými oblastmi (jsou podporovány prakticky všechny čtecí funkce), modem vrací odpovědi stejně, jako kdyby byly Slave automaty přímo na stejném segmentu sběrnice. Jestliže není dotaz korektní, je vrácena výjimka. Protože modem neví, jaká data jsou v cache obsažena, vrací na různé typy (funkce) dotazů se shodnou adresou stejná data. Tzn. pokud program v Slave automatu umístil na určitou pozici v cache bitová data (vstupy/výstupy) a na tuto pozici se Master dotáže jako na registry, jsou tato data vrácena jako obsah registrů. Podobně je tomu i v případě bitového dotazu na pozici registru. Povely a ostatní zápisové funkce jdou mimo cache a jsou přímo transferovány přes síť k Slave automatu [D]. Odpověď na tyto povely je rovněž přenášena přímo. Z toho vyplývá požadavek na Master systém: musí umět čekat na odpověď delší dobu než na odpovědi z cache. Protože pamět pro cache v modemu [B] je limitovaná, je nutné předem vědět množství dat z jednoho Slave automatu a jejich počet. (Viz pomůcka výše). Je potřeba upozornit na fakt, že při startu modemu, at již z důvodu výpadku napájení nebo resetu software, dojde k inicializaci celé cache. Tím pádem se ztratí všechny údaje a musí se znovu aktualizovat z podřízených stanic Slave. Rovněž budou všechny stanice prohlášeny za mrtvé. Je to z důvodu potřeby jasně definovaných počátečních podmínek. S touto nevýhodou je potřeba počítat už při návrhu řešení. V režimu cache jsou k dispozici podpůrné prostředky pro ušetření režie na sběrnici. Jak bylo již zmíněno výše jedná se o fantomový přístup a virtuální stanici. Jsou rovněž k dispozici služby spojené s reálným časem a paketový režim. 1.2.1.1 Phantom Access Zapnutím fantomového přístupu se lze pohybovat po prostoru cache bez použití adres Slave automatů, které za běžných podmínek nutné. Princip vychází z faktu, že data v cache jsou uspořádána za sebou postupně podle adres jednotlivých Slave. Pokud není některý Slave osazen, je na jeho místě v cache mezera s nulovým obsahem o velikosti, kterou by tento Slave obsadil. Zrušením pravidla, že do oblasti v cache vyhrazené pro určitého Slave lze přistupovat jen přes jeho adresu a zavedením lineárního adresního prostoru přes celou cache docílíme téměř požadovaného efektu. Ještě je potřeba odlišit běžné dotazy od dotazů na fantom. Toho můžeme docílit dvěma způsoby. Prvním zavedeme novou adresu v rámci sítě, na které bude fantom poslouchat. Je zřejmé, že tato adresa nesmí nikde jinde v síti existovat. Druhým způsobem je odlišit dotazy na fantom pomocí start adresy dotazu (viz popis rámců Modbus). Tento princip je trošku složitější, protože Master systém musí počítat ofsety v rámci cache od počáteční adresy fantomu. Při použití prvního principu počítání ofsetu odpadá, protože cache je pak situována od nulté adresy. Master systém při použití fantomového přístupu může číst data bez ohledu na to, kterému Slave náležejí. Jejich třídění je pak již jen záležitostí chytrosti programu v Master systému. Za největší přínos tohoto přístupu do cache je markantní úspora režie sběrnice. Také se tím také podstatně zvýší rychlosti odezev celého systému. V současné době je podporován pouze princip jedinečné adresy fantomu, ostatní je ještě ve vývoji. 1.2.1.2 Virtual station Povolením této vlastnosti získá Master možnost mít neustalý přehled o nově příchozích zprávách ze sítě. Pochopitelně je tato možnost podporována pouze v režimu cache. Data virtualní stanice jsou vlastně bitové pole, jehož jednotlivé položky (bity) odpovídají vzdáleným stanicím. Tj. první bit odpovídá stanici číslo jedna, druhý bit číslu dvě, atd. Modem po příchodu paketu ze vzdálené stanice zjistí odesílatelovu adresu a v bitovém poli virtuální stanice nahodí příslušný bit do log. 1. Pokud Master vyčte cokoliv z cache z adresy stanice, která poslala data, je příslušný bit zase shozen zpět do log. 0. Například dorazily datové pakety ze stanic 5, 28 a 49. Data z paketů se uložila do cache a byly nahozeny bity odpovídající číslům stanic (5, 28, 49). Master v jednom z přístích dotazů zjistí stav virtualní stanice a může modifikovat obvolávací seznam tak, že zařadí čísla stanic 5, 28 a 49 na začátek celého cyklu. Tudíž data z těchto stanic jsou vyčtena nejdříve, bez zbytečného čekaní až ně na dojde řada v obvolávacím cyklu. Modem následně odpovídající bity poshazuje a celý děj se může opakovat. Virtuální stanice se pro Master systém jeví jako další člen sítě, tzn. má vlastní adresu v rámci Modbusu. Má rovněž specifickou strukturu dat (viz výše). Je zřejmé, že tímto způsobem lze ušetřit spoustu času, po který by data čekala v cache, než by Master je vyčetl a zpracoval. Opět se to kladně projeví na rychlejších odezvách systému. 1.2.2 Modem SLAVE v transparentním režimu Transparentní režim u SLAVE modemu se příliš neliší od MASTER modemu. Data jsou podrobována stejné kontrole na CRC. Rovněž adresa vzdáleného Slave automatu je zjištována stejným mechanismem. Protože modem nemůže předvídat stavy jednotlivých vzdálených systému, jsou pakety propoušteny ze sítě bez ohledu na to, zda byly vyvolány Master systémem nebo ne.Master systém by měl být proti takovýmto případům, kdy se ze sítě vynoří nevyžadaný paket, odolný. Příčinou takovýchto stavů může být ztráta potvrzení a následné zdvojení paketů. Tato skutečnost by se v dobře vyladěné síti neměla vyskytovat. 1.2.3 Modem SLAVE v paketovém režimu Paketový přenos v režimu SLAVE je založen na stejném principu jako v případě MASTER. Rozdíl je v tom, že modem nyní neurčuje běh na sběrnici, ale musí vyčkávat až jej Master osloví. Takže příchozí paket ze sítě si uloží do fronty a nastaví mu dobu předepsanou života. Master je povinen modem volat s takovou frakvencí, aby zvládl přijmout všechny příchozí pakety, jinak modem začne pakety zahazovat. Master vyčte N2Hdesc a zjištuje jeho stav. Pokud zjistí, že descriptor je nenulový, spočítá na kolikrát vyčte příchozí paket. Pak spustí vlastní mechanismus vyčtení paketu. Pokud je paket vyčten, potvrdí jeho korektní vyčtení zapisem nuly do descriptoru. Modem může nachystat další paket. Podobně postupuje Master, pokud potřebuje paket odeslat. Prvně přečte descriptor H2Ndesc a ujistí se, že nulový. Pak započne přesun paketu. Na závěr zapíše descriptor jako signál, že paket je celý a je nachystán k vyslání přes sít. Modem paket zpracuje a odešle do sítě. Poté smaže descriptor jako potvrzení pro Master, že je vše již hotovo. 1.2.4 Modem SLAVE a časová synchronizace V tomto režimu je modem opět schopen dvou variant provozu. Může fungovat jako zdroj reálného času, nebo může být synchronizován z Master systému. V prvním případě, kdy je modem zdrojem času, Master v nastaveném intervalu vyčítá informaci o času z určené oblasti paměti modemu. Opačně, pokud je modem synchronizován časem z Master systému, je tato oblast zapisována a data v ní obsažená jsou použita pro synchronizaci modemu. Stejně jako modemu MASTER stačí vyplnit jen údaje o GMT, letním čase a milisekundy. Pokud je zajištěno, že údaj bude zapsán právě na začátku nové sekundy, nemusí být milisekundy použity a mohou obsahovat nuly. Struktura časového údaje je shodná s případem modem MASTER. 2. Parametry protokolu Modbus MODBUS parameters: (m)ode:MASTER (c)ache:OFF (p)acket:ON (t)rans:ON (a)utomaster:OFF (s)ervices (C)ache params (M)aster params (S)lave params (P)acket params (A)utomaster params (q)uit >> (m)ode:MASTER (c)ache:OFF (p)acket:ON (t)rans:ON - volba režimů (a)utomaster:OFF - Slave může mít zapnutou funkci automaster, pak přebírá funkci Master při přerušení komunikace na RS458 >>C cache parameters: (v)irtual:0000 (p)hantom:0000 (l)ower address:0000h (h)igher address:0000h (q)uit >> Parametry pro režim cash: (v)irtual:0000 - adresa umístění paměťového bloku pro evidenci aktuálních hlášení od slave, 0000 = funkce vypnuta (p)hantom:0000 - adresa umístění paměťového bloku pro jednorázové čtení obrazu všech slave, 0000 = funkce vypnuta (l)ower address:0000h - začátek přenášeného úseku paměti v PLC (h)igher address:0000h - konec přenášeného úseku paměti v PLC >>M master parameters: (d)estination:69000031h m(i)rror:0s d(e)vice type:PLC slave addresses: (0):4h (1):5h (2):0h (3):0h (a)ddress mask:Fh (p)eriod:200ms (t)imeout:3000ms (q)uit >> Parametry pro stanici Master: (d)estination:69000031h - adresa centrály v MORSE síti, pro režimy cash a transparentní, 00000000 = zprávy jsou posílány zpět m(i)rror:60s - po této době Master CU pravidelně podává zprávu sítí MORSE do Slave CU d(e)vice type:PLC - volba mezi připojenou technologickou jednotkou SEP a obecným PLC slave addresses: (0):4h (1):5h (2):0h (3):0h - seznam stanic Slave zahrnutých do obvolávacího cyklu (a)ddress mask:Fh - maskovaná část adresy MORSE se použije jako adresa Modbus (p)eriod:200ms - perioda pro obvolávání stanis Slave (t)imeout:1000ms - max. doba čekání na odpověď >>S slave parameters: RS485 (a)ddress:0h m(i)rror:0s (r)epeat discard:0 d(e)vice type:PLC (q)uit >> Parametry pro stanici Slave: RS485 (a)ddress:0h - adresa stanice Slave v síti Modbus, 01 až FF m(i)rror:120s - do této doby čeká Slave CU hlášení od každé z Master CU, jinak ji vyřadí z obvolávacího seznamu (r)epeat discard:0 - počet repeatů od master PLC, které se zahodí, než se jeden odešle do rádiové sítě d(e)vice type:PLC - volba mezi připojenou technologickou jednotkou SEP a obecným PLC >>P packet parameters: (A)RT table No.:4 (N)2H buffer:1000 (H)2N buffer:2000 Warning! Both addresses should be nonzero. (q)uit >> Parametry pro paketový režim: (A)RT table No.:4 - volba Art tabulky pro převod adres MORSE na adr. Modbus (N)2H buffer:1000 - Net to Host, to je MORSE Net do Modbusu (H)2N buffer:2000 - Host to Net, to je Modbus do MORSE Net - adresy v paměti, na kterých začíná příslušný buffer pro ukládání dat posílaných Modbusem v paketovém režimu. Tyto adresy musí být zvoleny shodně u všech účastníků sítě Modbus. Pojem Net zde představuje navazující síť MORSE nebo také jedinou CU připojenou k RS485. >>A Modbus automaster: t(i)meout:0s master mode after switching: (c)ache:OFF (p)acket:OFF (t)rans:OFF (q)uit >> Parametry pro režim Automaster: t(i)meout:0s - po této době klidu na RS485 převezme Slave ze zapnutým parametrem (a)utomaster úlohu Mastera a pokračuje v režimu určeném třemi následujícími parametry. Po obnovení aktivity původního Mastera se vrátí do úlohy Slave. >>s Modbus services: (t)ime sync:ON (m)ode:SENDER (p)eriod:10s time (a)ddress :3000h time sync (b)it:0000h (w)dog bit:0000h wd(o)g address:0000h wdog p(e)riod:0s (d)ebug address:69000011h (q)uit >> (t)ime sync:ON - zapnutí funkce přenosu časového údaje mezi Masterem a Slavem definovaným ve "slave addresses (0)" (m)ode:SENDER - Master nebo Slave může být zvolen jako SENDER (vysílá čas), druhý z nich jako RECEIVER (přijímá) (p)eriod:10s - perioda předávání časového údaje se definuje pouze v Masterovi time (a)ddress :3000h - adresa pro ukládání času, Master i Slave time sync (b)it:0000h - speciální funkce (Toth) (w)dog bit:0000h - periodicky zapisované slovo do "slave addresses (0)" wd(o)g address:0000h - adresa zápisu do Holding Registers ve Slave (0) wdog p(e)riod:0s - perioda zápisu - parametry pro watchdog se vkládají pouze do Mastera (d)ebug address:69000011h - adresa pro ladicí účely; všechny user pakety, které přišly do CU se odesílají na tuto adresu, ke které je připojen např. Setr nebo async.linka 3. Příklady a vysvětlivky 3.1 Typy paketů Krátký popis typů paketů na uživatelském rozhraní. |U/1|B/1|R/1|subt/5| U - link security bit - 1 znamená zabezpečený přenos B - broadcast (multicast) bit - 1 označuje broadcastový paket R - rezerva subt - subtype - nabývá těchto základních hodnot: subt=0x09 - USER DATA - uživatelská data Základní typ paketu pro přenos dat od zdroje (source) do cíle destination). V kombinaci s nastaveným bitem U=1 vznikne nejčastější typ paketu 0x89, to je zabezpečený uživatelský paket. subt=0x0A - PROT DATA Tento typ dat je určen pro řízení toku dat v uživatelském protokolu. Zpracování obou uvedených typů paketů v síti MORSE je stejné. Pakety jsou odesílány na adresu destination podle routingu a priorit nastavených na zúčastněných adresách.V případě ztráty paketu je chybové hlášení doručeno k původnímu odesílateli. Paket, který nese toto chybové hlášení, se však také může ztratit, tentokrát již bez další zprávy. subt=0x0C - PACK ERROR REPORT - paket s chybovou zprávou Zpráva o chybách v sítí MORSE. První word je Error Number (číslo chyby), další část zprávy obsahuje podrobnější informace o chybě v síti. Generování těchto zpráv je možno zapnout nebo vypnout pro celou síť. Dále jsou uvedena některá čísla chyb: 1 - PACKET_NOT_CONFIRMED - paket není potvrzen 2 - STORE_TIMEOUT - vyčerpán store timeout 3 - NO_CHANNEL_ASSIGNED - není přiřazen kanál 4 - ACCESS_TIMEOUT_ERROR - vyčerpán access timeout 6 - WRONG_PACKET_FORMAT - špatný formát paketu 7 - DEST_PROT_MISSING - chybí protokol na adrese destination 8 - WRONG_PATH - špatná cesta 9 - WIRE_LINK_FAIL - chyba na drátové lince subt=0x10 - SERVICE REQUEST - servisní požadavek Požadavek o službu MORSE. subt=0x12 - SERVICE REPORT - servisní zpráva Zpráva služby MORSE. 3.2 Příklad čtení dat v režimu cache. MASTER PLC vysílá dotazy do připojené CU MR25 a dostává odpovědi s daty (levý sloupek). CU poskytuje údaje ze své paměti cache (pravý sloupek). [A] [B] MASTER PLC interpreter CU (MR25) cache cache 01 02 00 08 00 08 CRC --> 79h 01 02 01 01 CRC | +-- 78h 2.word 01 03 02 56 78 CRC +------ 01h 01 01 01 0F CRC >O.K. >> 15:28:10.018| |69000014 69000021|S00I IN 409 6serv AAAA AAAA = protokol Modbus Master dostal data k odeslání pro Slave 4 15:28:10.784 tx 8 | S00 0403 2000 0001 8F9F = Slave 4, máš volný buffer H2N ? 15:28:10.788 rx;i 7 | S00 0403 0200 0074 44 = ano 15:28:10.789 tx 21 | S00 0410 2000 0006 0C30 0A09 0669 0000 14AA AAAA AA4C A0 = zapiš si zprávu 15:28:10.794 rx;i 8 | S00 0410 2000 0006 4B9E = zapsal jsem 15:28:11.785 tx 8 | S00 0503 1000 0001 814E = Slave 5, máš pro mne data ? ... pokračuje obvolávání 15:28:11.788 rx;i 7 | S00 0503 0200 0049 84 = nemám 15:28:12.786 tx 8 | S00 0403 1000 0001 809F = 4, máš ? 15:28:12.790 rx;i 7 | S00 0403 0200 0074 44 = nemám Příklady formátu paketů viz článek Odesláni krátkého user paketu z Mastera do Modbusu. 3.5 Odesláni krátkého user paketu z Mastera do Modbusu. Zpráva AAAAAAAA je odesílána z Morse adresy 69000011 na adresu 69000014. V síti Modbus je jediný Slave s adresou 04. 17:51:31.528 tx 8 | S00 0403 1000 0001 809F = paket 1 17:51:31.532 rx;i 7 | S00 0403 0200 0074 44 = paket 2 17:51:32.529 tx 8 | S00 0403 1000 0001 809F 17:51:32.533 rx;i 7 | S00 0403 0200 0074 44O.K. >> 17:51:32.640| |69000014 69000011|S00I IN 409 0serv AAAA AAAA 17:51:33.530 tx 8 | S00 0403 2000 0001 8F9F 17:51:33.533 rx;i 7 | S00 0403 0200 0074 44 17:51:33.534 tx 21 | S00 0410 2000 0006 0C30 0A09 8069 0000 14AA AAAA AA06 C6 = paket 3 17:51:33.540 rx;i 8 | S00 0410 2000 0006 4B9E = paket 4 17:51:34.531 tx 8 | S00 0403 1000 0001 809F 17:51:34.534 rx;i 7 | S00 0403 0200 0074 44 paket 1 - čtení registru | 04 | 03 | 1000 | 0001 | 809F | | adr| fce | start adr | počet čtených | CRC | v registru wordů paket 2 - odpověď na čtení | 04 | 03 | 02 | 00 00 | 7444 | | adr| fce | počet | obsah | CRC | čtených čtených bajtů bajtů paket 3 - zápis do registru ve Slave 04 | 04 | 10 | 2000 | 0006 | 0C | 300A | 098069000014 | AAAAAAAA | 06C6| | adr| fce| start | počet | počet |H2Ndesc| hlavička | data | CRC | | adresa| zapis.| zapis.| | user pseudorámec | | v reg.| wordů | bajtů | obsah zapisovaného bufferu | H2Ndesc - descriptor bufferu Host to Net 300A = 0011 0000 0000 1010 0 - user pseudorámec 0 - repeat bit 11 - číslo paketu 0 - rezerva 000 0000 1010 - velikost user pseudorámce (10 bajtů) hlavička user pseudorámce 098069000014 = 09hex 1000 0000 69000014hex 09hex - typ paketu 1 - bit DTE > adresa je destination 0000 - rezerva 000 - síťové číslo 69000014hex - adresa, zde destination paket 4 - odpověď na zápis | 04 | 10 | 2000 | 0006 | 4B9E | | adr| fce| start | počet | CRC | | adresa| zapsaných| | v reg.| wordů | 3.6 Odeslání krátkého user paketu ze Slave do Modbusu. Zpráva BBBBBBBB je odesílána z Morse adresy 69000014 na adresu 69000004. V síti Modbus je jediný Slave s adresou 04. 18:07:33.650 rx;i 8 | S00 0403 1000 0001 809F 18:07:33.651 tx 7 | S00 0403 0200 0074 44 18:07:34.651 rx;i 8 | S00 0403 1000 0001 809F 18:07:34.652 tx 7 | S00 0403 0200 0074 44s >>O.K. >> 18:07:35.652 rx;i 8 | S00 0403 1000 0001 809F 18:07:35.653 tx 7 | S00 0403 0200 0074 44 18:07:35.739| |69000004 69000014|S01I OUT 489 0serv BBBB BBBB 18:07:35.740| |69000004 69000014|S00I IN 489 7serv BBBB BBBB 18:07:36.653 rx;i 8 | S00 0403 1000 0001 809F = máš data v N2Hbuf ? 18:07:36.654 tx 7 | S00 0403 0220 0AED 83 = ano, mám 10 bajtů 18:07:36.657 rx;i 8 | S00 0403 1000 0006 C15D = pošli 2+10=12 bajtů (včetně N2Hdesc) 18:07:36.658 tx 17 | S00 0403 0C20 0A09 8769 0000 04BB BBBB BB30 0D = posílám 12 bajtů 18:07:36.665 rx;i 11 | S00 0410 1000 0001 0200 0088 C1 = smaž N2Hdesc 18:07:36.667 tx 8 | S00 0410 1000 0001 055C = smazáno 18:07:37.654 rx;i 8 | S00 0403 1000 0001 809F = máš data v N2Hbuf ? 18:07:37.655 tx 7 | S00 0403 0200 0074 44 = nemám 18:07:38.655 rx;i 8 | S00 0403 1000 0001 809F 18:07:38.656 tx 7 | S00 0403 0200 0074 44 3.7 Odeslání dlouhého user paketu z Mastera do Modbusu. Zpráva dlouhá 404 bajtů je odesílána z Morse adresy 69000011 na adresu 69000014. V síti Modbus je jediný Slave s adresou 04. 17:50:19.456 tx 8 | S00 0403 1000 0001 809F 17:50:19.459 rx;i 7 | S00 0403 0200 0074 44s 17:50:20.457 tx 8 | S00 0403 1000 0001 809F 17:50:20.460 rx;i 7 | S00 0403 0200 0074 44 >> 17:50:20.834| |69000014 69000011|S00I IN 40409 0serv AAAA AAAA CFAC F1C2 1471 E0B5 EB8D 420F 0A6C 3CAB 5EC2 D591 6F5C 8501 7478 BF1A 2973 3B6F BC35 529F 3F99 9AD6 D4C8 73B7 0C3C 6020 F9F0 4FD2 D0DC 44D5 C0CE 8039 F652 877E 2F0C 4FC9 05E3 9DBA 18CB A06F 2708 EC21 714E AC63 ADFB 1FDC FA68 9F24 0701 8601 7EA5 C236 0A7B 7CAF 823B B99E 85AA D9EE 16AF 0C1A 8445 E443 3D47 F320 A6BC 3916 0433 2E9D 914A BCC5 4A7A 586A 3FBD 7084 D6A6 F38E CA05 C9FB 2C2E 3336 E57E E89D 4BA8 3575 2EFD C4C9 49AB 2DBB 099C 34A3 6885 BB17 9E46 62B1 20A2 662D 4801 1235 43B7 02F5 78FE CD4C 26B1 7238 E462 D8CB 7E61 FECB 78D2 89D5 5AE4 528A 77C1 593C 6DD3 BF14 B579 D09D 8730 5648 CDEA 2D3A F50B 0E82 DA36 5495 31F7 EE96 F2F8 76D2 0E30 FD88 8B58 7ACA 3F89 7211 70D0 0FEE 0418 5DD3 FBBB 01E2 43A0 D057 BCA2 29D5 5BC1 2DCA B246 19A2 82E1 357C D46D 5CA8 6DD9 F414 7F6D EA6A A460 9D94 0C79 26E5 B038 0B10 A2AF 8CB5 131A 582D 0CDD DCE6 AF62 DC5C 2017 709B 0F7A 7BD4 FEF9 0861 B808 0C51 45BC 3551 70D7 498E EAFB 37E7 3086 9583 6143 F0A5 16F3 805F 455D 3E67 A265 D444 A55A E685 0B7B A0C4 AC63 E2ABO.K. >> = odesílaná data vstupují do S00, kde je Modbus 17:50:21.458 tx 8 | S00 0403 2000 0001 8F9F = máš volný H2Nbuf ? 17:50:21.461 rx;i 7 | S00 0403 0200 0074 44 = mám 17:50:21.464 tx 255 | S00 0410 2053 007B F633 36E5 7EE8 9D4B A835 752E FDC4 C949 AB2D BB09 9C34 A368 85BB 179E 4662 B120 A266 2D48 0112 3543 B702 F578 FECD 4C26 B172 38E4 62D8 CB7E 61FE CB78 D289 D55A E452 8A77 C159 3C6D D3BF 14B5 79D0 9D87 3056 48CD EA2D 3AF5 0B0E 82DA 3654 9531 F7EE 96F2 F876 D20E 30FD 888B 587A CA3F 8972 1170 D00F EE04 185D D3FB BB01 E243 A0D0 57BC A229 D55B C12D CAB2 4619 A282 E135 7CD4 6D5C A86D D9F4 147F 6DEA 6AA4 609D 940C 7926 E5B0 380B 10A2 AF8C B513 1A58 2D0C DDDC E6AF 62DC 5C20 1770 9B0F 7A7B D4FE F908 61B8 080C 5145 BC35 5170 D749 8EEA FB37 E730 8695 8361 43F0 A516 F380 5F45 5D3E 67A2 65D4 44A5 5AE6 850B 7BA0 C4AC 63E2 ABA5 7A = zapiš do H2Nbuf poslední díl dat 17:50:21.492 rx;i 8 | S00 0410 2053 007B 7BAE = zapsal jsem 17:50:21.494 tx 175 | S00 0410 2000 0053 A611 9A09 8069 0000 14AA AAAA AACF ACF1 C214 71E0 B5EB 8D42 0F0A 6C3C AB5E C2D5 916F 5C85 0174 78BF 1A29 733B 6FBC 3552 9F3F 999A D6D4 C873 B70C 3C60 20F9 F04F D2D0 DC44 D5C0 CE80 39F6 5287 7E2F 0C4F C905 E39D BA18 CBA0 6F27 08EC 2171 4EAC 63AD FB1F DCFA 689F 2407 0186 017E A5C2 360A 7B7C AF82 3BB9 9E85 AAD9 EE16 AF0C 1A84 45E4 433D 47F3 20A6 BC39 1604 332E 9D91 4ABC C54A 7A58 6A3F BD70 84D6 A6F3 8ECA 05C9 FB2C 2EAD 9A = zapiš další díl dat od konce (zde začátek dat včetně hlavičky user pseudorámce) 17:50:21.514 rx;i 8 | S00 0410 2000 0053 8BA1 = zapsal jsem 17:50:22.459 tx 8 | S00 0403 1000 0001 809F 17:50:22.462 rx;i 7 | S00 0403 0200 0074 44 3.8 Odeslání dlouhého user paketu ze Slave do Modbusu. Zpráva je odesílána z Morse adresy 69000014 na adresu 69000004. V síti Modbus je jediný Slave s adresou 04. 18:17:30.241 rx;i 8 | S00 0403 1000 0001 809F 18:17:30.242 tx 7 | S00 0403 0200 0074 44s 18:17:31.243 rx;i 8 | S00 0403 1000 0001 809F 18:17:31.243 tx 7 | S00 0403 0200 0074 44 18:17:32.097| |69000004 69000014|S00I IN 40489 2serv AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA ABBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF = data vstupují do portu S00, kde je Modbus 18:17:32.243 rx;i 8 | S00 0403 1000 0001 809F = máš v N2Hbuf data pro Mastera ? 18:17:32.244 tx 7 | S00 0403 0211 9AF8 7F = ano, mám 0x19A bajtů 18:17:32.248 rx;i 8 | S00 0403 1051 007D D0AF = pošli 0x7D bajtů 18:17:32.250 tx 255 | S00 0403 FACC CCCC DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFE6 63 = odeslána první část dat (od konce) 18:17:32.278 rx;i 8 | S00 0403 1000 0051 80A3 = pošli 0x51 bajtů 18:17:32.280 tx 167 | S00 0403 A211 9A09 8269 0000 04AA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBB BBBC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CC59 3D = odeslána další část dat 18:17:32.303 rx;i 11 | S00 0410 1000 0001 0200 0088 C1 = smaž N2Hdesc 18:17:32.305 tx 8 | S00 0410 1000 0001 055C = N2Hdesc smazán 18:17:33.245 rx;i 8 | S00 0403 1000 0001 809F 18:17:33.245 tx 7 | S00 0403 0200 0074 44 18:17:34.245 rx;i 8 | S00 0403 1000 0001 809F 18:17:34.246 tx 7 | S00 0403 0200 0074 44 3.9 Automaster vysílá hermanův paket. Slave přepnutý do režimu automaster vysílá imitovaný "hermanův" paket generovaný z MORSE main menu povelem mth. V síti je jediný další Slave s adresou 04. 0403 1000 0001 809F 06:52:00.388 rx;i 7 | S00 0403 0200 0074 44h 06:52:01.373 tx 8 | S00 0403 1000 0001 809F 06:52:01.389 rx;i 7 | S00 0403 0200 0074 44 Send type :09 69000005h> 06:52:01.784| |69000005 69000025|S00I IN 25589 6serv 0410 2092 007B F600 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0022 93 = paket vstupuje do SCC0 kde je Modbus 06:52:02.374 tx 255 | S00 0410 2092 007B F600 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0022 93 = zapiš do paměti Slave 0xF6 bajtů dat 06:52:02.527 rx;i 8 | S00 0410 2092 007B 2A52 = zapsáno 06:52:02.528| |69000025 69000005|S00I OUT 8 89 0serv 0410 2092 007B 2A52 = potvrzení o předání paketu je odesláno na src adresu 69000025 06:52:03.375 tx 8 | S00 0403 1000 0001 809F 06:52:03.390 rx;i 7 | S00 0403 0200 0074 44 3.10 Automaster vysílá Hermanův broadcast. Slave přepnutý do režimu Automaster vysílá imitovaný "Hermanův" broadcast paket generovaný z MORSE main menu povelem mtH. Paket se šíří sítí MORSE jako broadcast, v Modbusu již jako adresný paket. Po potvrzení v Modbusu není generováno zpětné hlášení do sítě MORSE.V příkladu je jediný další Slave s adresou 04. 07:05:53.204 tx 8 | S00 0403 1000 0001 809F 07:05:53.220 rx;i 7 | S00 0403 0200 0074 44H 07:05:54.205 tx 8 | S00 0403 1000 0001 809F 07:05:54.221 rx;i 7 | S00 0403 0200 0074 44 Send type :49 69000005h> 07:05:55.206 tx 8 | S00 0403 1000 0001 809F 07:05:55.214| |F31E4335 69000025|S00I IN 25589 1serv brc 0410 2092 007B F600 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0022 93 = brc paket vložen do SCC0 07:05:55.222 rx;i 7 | S00 0403 0200 0074 44 07:05:56.207 tx 255 | S00 0410 2092 007B F600 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0022 93 = zapiš do paměti Slave, paket je vyslán do sítě Modbus 07:05:56.361 rx;i 8 | S00 0410 2092 007B 2A52 = zapsáno = není generováno potvrzovací hlášení pro src adresu 69000025 07:05:57.208 tx 8 | S00 0403 1000 0001 809F 07:05:57.224 rx;i 7 | S00 0403 0200 0074 44