Ovladač systému REXYGEN pro komunikaci Modbus
(modul MbDrv)
Uživatelská příručka
Plzeň
15.12.2023
Obsah
1.1 Úvod
1.2 Požadavky na systém
1.3 Instalace ovladače na vývojový počítač
1.4 Instalace ovladače na cílové zařízení
1.4.1 Zařízení s operačním systémem Windows
1.4.2 Zařízení s operačním systémem Linux
2 Zařazení ovladače do projektu
2.1 Přidání ovladače MbDrv do projektu
2.2 Připojení vstupů a výstupů do řídicího algoritmu
3 Konfigurace ovladače
3.1 Modbus Master – konfigurační dialogové okno
3.1.1 Konfigurace Modbus TCP/IP Master
3.1.2 Konfigurace Modbus RTU Master
3.2 Modbus Slave – konfigurační dialog
3.2.1 Konfigurace Modbus TCP/IP Slave
3.2.2 Konfigurace Modbus RTU Slave
3.3 Konfigurace dat protokolu Modbus
3.4 Speciální signály
4 Poznámky k implementaci
5 Co dělat při problémech
Kapitola 1
Ovladač MbDrv a systém REXYGEN
1.1 Úvod
V této příručce je popsáno používání ovladače MbDrv pro výměnu dat mezi systémem REXYGEN a různými zařízeními podporujícími protokol Modbus [1]. Ovladač podporuje jak verzi RTU pro sériové linky RS-232 nebo RS-485, tak verzi TCP/IP.
Ovladač umožňuje získávat vstupy a nastavovat výstupy a to jak v režimu Master tak i Slave. MbDrv jsou tedy ve skutečnosti čtyři ovladače – pro režim Master po sériové lince, režim Slave po sériové lince, režim Master po TCP/IP a režim Slave po TCP/IP. Protože mají všechny tyto ovladače společné součásti, instalují se vždy všechny najednou.
1.2 Požadavky na systém
Ovladač MbDrv lze používat na zařízeních s operačními systémy Windows a Linux. Pro provozování ovladače na cílovém zařízení zabere ovladač MbDrv ve variantě RTU jeden sériový port, ve variantě TCP/IP je vyžadován TCP/IP stack (tj. obvykle ethernetová karta, popř. modem, WiFi apod.)
Aby bylo možno ovladač využívat, musí být na vývojovém (konfiguračním) počítači a na cílovém zařízení nainstalováno programové vybavení:
Vývojový počítač |
|
Operační systém |
jeden ze systémů: Windows 10/11, GNU/Linux |
Vývojové nástroje |
verze REXYGEN pro daný operační systém |
Cílové zařízení |
|
Řídicí systém REXYGEN |
výkonné jádro pro korespondující operační systém |
I/O ovladač |
verze pro korespondující operační systém |
|
|
|
|
V případě, že vývojový počítač je přímo cílovým zařízením (řídicí systém REXYGEN bude provozován v jedné z variant Windows), instaluje se pouze jedna kopie řídicího systému REXYGEN.
1.3 Instalace ovladače na vývojový počítač
Ovladač MbDrv se instaluje jako součást instalace řídicího systému REXYGEN. Je obsažen v instalátoru vývojových nástrojů systému REXYGEN a pro jeho nainstalování je nutné ho v instalačním programu systému REXYGEN zaškrtnout. Při typické instalaci se řídicí systém REXYGEN nainstaluje do cílového adresáře C:\Program Files\REX Controls\REXYGEN <verze>.
Po úspěšné instalaci se do cílového adresáře zkopírují soubory:
- Bin/MbDrv_H.dll – Konfigurační část ovladače MbDrv.
- Bin/MbDrv_T.dll – Cílová část ovladače MbDrv spouštěná exekutivou RexCore. Tato verze se používá, pokud na cílovém zařízení běží operační systém Windows 10/11. Pro jinou cílovou platformu je na ni třeba nainstalovat příslušnou verzi systému REXYGEN.
- DOC\PDF\CZECH\MbDrv_CZ.pdf – Tato uživatelská příručka.
1.4 Instalace ovladače na cílové zařízení
1.4.1 Zařízení s operačním systémem Windows
Cílová část ovladače, využitá pro REXYGEN Modbus Master nebo Slave na Windows 10/11, je zahrnuta mezi nástroji pro vývoj systému REXYGEN.
1.4.2 Zařízení s operačním systémem Linux
Pokud ještě nemáte nainstalovaný runtime modul RexCore řídicího systému REXYGEN, nainstalujte jej nejdříve podle příručky Začínáme se systémem REXYGEN [2]. Instalace obsahuje všechny nezbytné ovladače včetně MbDrv.
Pokud chcete nainstalovat MbDrv samostatně, můžete tak učinit z příkazové
řádky Raspberry Pi pomocí příkazu
Debian:
sudo apt-get install rex-mbdrvt
WAGO:
Ovladač MbDrv je již pro distribuci WAGO obsažen v obrazu systému REXYGEN a není
potřeba provádět další kroky.
Kapitola 2
Zařazení ovladače do projektu
Zařazení ovladače do projektu aplikace spočívá v přidání ovladače do hlavního souboru projektu a z připojení vstupů a výstupů ovladače v řídicích algoritmech. Vstupy a výstupy ovladače jsou připojeny v řídicích algoritmech pomocí funkčních bloků From, Goto, INQUAD, OUTQUAD, INOCT, OUTOCT, INHEXD a OUTHEXD.
2.1 Přidání ovladače MbDrv do projektu
Přidání ovladače MbDrv do hlavního souboru projektu je znázorněno na obr. 2.1. Obrázek znázorňuje přidání ovladače v roli Master po protokolu TCP/IP.
Pro zařazení ovladače do projektu slouží blok IODRV přejmenovaný na MTM, který je připojený k výstupu Drivers hlavního bloku EXEC. Jménem tohoto bloku MTM (viz obr. 2.1) začínají všechny vstupní a výstupní signály tohoto ovladače. Blok IODRV má tři základní parametry:
- module – jméno modulu, ve kterém je ovladač implementován, v tomto případě MbDrv
- classname – jméno třídy ovladače, určující variantu protokolu Modbus:
- MbmDrv – pro režim Master po sériové lince
- MbsDrv – pro režim Slave po sériové lince
- MtmDrv – pro režim Master po TCP/IP
- MtsDrv – pro režim Slave po TCP/IP
- cfgname – jméno konfiguračního souboru ovladače. Vytváření konfiguračního souboru je popsáno v kapitole 3. Doporučeno je zadávat jej ve tvaru <jméno_třídy>.rio, kde přípona *.rio (REXYGEN Input/Output) byla zavedena pro tento účel.
POZOR! Nastavení těchto tří parametrů rozlišuje velká a malá písmena!
Krom MTM se podle typu driveru využívají jako jména IODRV bloku také MTS, MBM a MBS v závislosti na tom, zda jde o TCP/IP Slave, RTU Master nebo RTU Slave. Jménem tohoto bloku začínají názvy všech vstupních a výstupních signálů připojených k tomuto ovladači.
Parametry bloku IODRV se konfigurují v programu REXYGEN Studio v dialogovém okně, jak je patrno z obr. 2.1. Konfigurační dialog ovladače MbDrv, popsaný v kapitole 3, se aktivuje po stisku tlačítka Configure.
2.2 Připojení vstupů a výstupů do řídicího algoritmu
Vstupy a výstupy z ovladačů se připojují do algoritmu v jednotlivých úlohách pomocí funkčních bloků From a Goto. V hlavním souboru projektu jsou soubory úloh uvedeny pouze odkazem v blocích typu QTASK nebo TASK připojovaných na výstupy QTask, Level0,…, Level3 exekutivy. Pro připojení vstupů a výstupů z ovladače MbDrv do řídicího systému REXYGEN lze použít bloky, znázorněné na obr. 2.2.
Obr. 2.3 zobrazuje příklad kontrolní smyčky PID s jedním vstupním signálem (teplota) a jedním výstupním signálem (výkon), které jsou poskytované ovladačem MbDrv.
Blok typu From sloužící pro připojení jednoho vstupu má parametr Goto tag nastaven na MTM__temperature, blok typu Goto používaný pro připojení jednoho výstupu má hodnotu parametru Goto tag nastavenou MTM__power. Ostatní bloky mají na začátku svého jména prefix MTM následovaný dvěma znaky „_“ (podtržítko).
Protože ovladač umožňuje pod jedním symbolickým jménem získávat několik vstupů či nastavovat několik výstupů, lze s výhodou používat bloky čtyřnásobných, osminásobných a šestnáctinásobných vstupů a výstupů (INQUAD, OUTQUAD, INOCT, OUTOCT a INHEXD, OUTHEXD), viz obr. 2.2. Výhodou takového užití je zvýšení rychlosti a částečně i přehlednosti algoritmů. Přechod od simulační verze je však v takovém případě trochu pracnější. Podrobný popis vícenásobných vstupů a výstupů lze nalézt v příručce [3].
Kapitola 3
Konfigurace ovladače
V této kapitole je popsána konfigurace jednotlivých vstupních a výstupních signálů připojených zařízení, tj. symbolické pojmenování a připojení jednotlivých vstupů a výstupů na stanice a adresy v protokolu Modbus. Konfigurační dialogové okno je součástí souboru MbDrv_H.dll. Lze ho aktivovat prostřednictvím programu REXYGEN Studio kliknutím na tlačítko Configure v dialogovém okně parametrů bloku IODRV (viz kapitola 2).
3.1 Modbus Master – konfigurační dialogové okno
3.1.1 Konfigurace Modbus TCP/IP Master
Konfigurační dialog je zobrazen na obr. 3.1
Levá horní část rámečku obsahuje parametry Connection. Jsou to:
- Response timeout – Maximální doba v sekundách, kterou se čeká na odpověď stanice Slave. Pokud stanice do této doby neodpoví, považuje se za nefunkční.
- Retry time – Perioda v sekundách. S touto periodou jsou testovány nefunkční stanice, jestli už fungují.
- IP Address – Adresa konfigurované stanice Master. Vyplňujte jen pokud na jednom zařízení běží více stanic Master. Speciální hodnota 0.0.0.0 slouží pro aktivaci protokolu na všech lokálních IP adresách. Toto pole je dostupné pouze v Advanced módu.
Pokud se systém REXYGEN chová jako TCP/IP Master, je nutné definovat stanice Slave. Prostřední část okna vyobrazeného na obr. 3.1 zobrazuje definované stanice Slave. Nové stanice Slave mohou být přidány stiskem tlačítka Add slave v pravém sloupci. Existující stanice Slave mohou být upraveny přímo v jejich seznamu nebo stisknutím tlačítka Edit slave.
Následující parametry definují stanici Slave:
- Name – Unikátní název stanice.
- Adress – IP adresa stanice.
- Port – Port (TCP adresa) stanice. Výchozí port pro Modbus je 502.
- Max requests – Maximální množství Modbus telegramů ve frontě. Zejména vestavěné systémy mají obvykle malý TCP/IP zásobník. Stanice Master sleduje požadavky a odpovědi každé stanice Slave a odloží požadavek, pokud stanice Slave neodpoví včas.
- Subadress – Dodatečné pole pro adresu je dostupné s hodnotami od 1 do 255. Hodnota 0 je zachována pro účely vysílání tj. stanice Slave mohou přijmout data, avšak nemají odpovídat. Pokud není důvod, je doporučeno nevyužívat tuto hodnotu. Hodnota 255 indikuje, že stanice nevyužívá podadresování.
3.1.2 Konfigurace Modbus RTU Master
Konfigurační dialog je zobrazen na obr. 3.2
Levá horní část rámečku obsahuje parametry Connection. Jsou to:
- Port – Jméno sériové linky použité pro komunikaci. Obvykle je to COM* pro zařízení Windows nebo /dev/ttyS* pro zařízení Linux. Symbol "*"nahraďte zvoleným sériovým portem. Od REXYGEN verze 3.0 je možné používat i virtuální porty. Více informací o virtuálních portech můžete najít v manuálu v popisu bloku UART.
- Baud rate – Přenosová rychlost v bitech za sekundu. Všechny zařízení na jedné lince musí mít nastavenou stejnou přenosovou rychlost.
- Parity – Parita, kontrolní mechanismus při přenosu dat. Všechna zařízení na jedné lince musí mít nastavenou stejnou paritu.
- Stopbit – Počet stop bitů na konci každého znaku. Všechna zařízení na jedné lince musí mít nastavenou stejnou hodnotu.
- Response timeout – Maximální doba v sekundách, kterou se čeká na odpověď stanice Slave. Pokud stanice do této doby neodpoví, považuje se za nefunkční. Čas se počítá do přijetí prvního znaku, takže není nutno přidávat čas na přijetí celého telegramu. V režimu Slave ovladač odpovídá vždy okamžitě po přijetí telegramu a tento parametr nemá význam. Doporučujeme nenastavovat timeout příliš velký, zejména pokud se komunikuje s více stanicemi Slave. V případě nefunkční stanice se totiž musí čekat na odpověď po celou dobu timeout a po tuto dobu není možné přenášet data do/z ostatních stanic Slave.
- Retry time – Perioda v sekundách. S touto periodou jsou testovány nefunkční stanice, jestli už fungují.
- Frame end time – Určuje, jak dlouhá neaktivita spojení je považována za konec rámce. Pokud je nastaveno na hodnotu 0, znamená to automatické nastavení v závislosti na přenosové rychlosti podle specifikace protokolu Modbus. Doporučujeme zvýšit tuto hodnotu až na hodnotu parametru Response timeout, pokud se vyskytnou chyby Read serial device timed out v záznamu systému.
3.2 Modbus Slave – konfigurační dialog
3.2.1 Konfigurace Modbus TCP/IP Slave
Konfigurační dialog je zobrazen na obr. 3.3
Levá horní část rámečku obsahuje parametry Connection. Jsou to:
- Slave adress – Adresa zařízení slave. Těch může být na jedné IP adrese až 254 různých. Hodnota 0 je zachována pro účely vysílání. Pokud není důvod, je doporučeno nevyužívat tuto hodnotu. Hodnota 255 indikuje, že podadresování je ignorováno.
- IP Address – Definuje síťový adaptér využívaný stanicí Slave. Nechte prázdné nebo nastavte hodnotu 0.0.0.0 pro využití všech síťových adaptérů nebo specifikujte IP adresu vámi vybraného síťového adaptéru.
- Port – Port (TCP adresa) stanice Slave. Výchozí port pro Modbus je 502.
3.2.2 Konfigurace Modbus RTU Slave
Levá horní část rámečku obsahuje parametry Connection. Jsou to:
- Slave address – Pro určení zařízení slave. Připojeno může být až 254 stanic Slave, avšak bez opakovače jich může být akomodováno pouze 32. Hodnota 0 je zachována pro účely vysílání. Pokud není důvod, je doporučeno nevyužívat tuto hodnotu. Hodnota 255 má specifický význam a nemělo by se s ní operovat.
- Port – Jméno sériové linky použité pro komunikaci. Obvykle je to COM* pro zařízení Windows nebo /dev/ttyS* pro zařízení Linux. Symbol "*"nahraďte zvoleným sériovým portem. Od REXYGEN verze 3.0 je možné používat i virtuální porty. Více informací o virtuálních portech můžete najít v manuálu v popisu bloku UART.
- Baud rate – Přenosová rychlost v bitech za sekundu. Všechny zařízení na jedné lince musí mít nastavenou stejnou přenosovou rychlost.
- Parity – Parita, kontrolní mechanismus při přenosu dat. Všechna zařízení na jedné lince musí mít nastavenou stejnou paritu.
- Stopbit – Počet stop bitů přenášených na konci každého znaku. Všechna zařízení na jedné lince musí mít nastavenou stejnou hodnotu.
- Frame end time – jak dlouhá neaktivita spojení je považována za konec rámce. Pokud nastaveno na hodnotu 0, znamená automatické nastavení v závislosti na přenosové rychlosti podle specifikace Modbusu (s určitou volností). Doporučujeme zvýšit tuto hodnotu až na hodnotu parametru Response timeout, pokud se vyskytnou chyby Read serial device timed out v záznamu systému.
3.3 Konfigurace dat protokolu Modbus
Konfigurační dialog je zobrazen na obr. 3.5.
Spodní část dialogu zobrazuje konfigurované signály. Každý řádek má svůj název a je přiřazen ke konkrétnímu signálu. Nový signál může být přidán stiskem tlačítka Add item v pravém sloupci dialogu. Podobně lze již existující signál upravit pomocí tlačítka Edit item. Některé parametry (Name, Item Address, Type a Count) mohou být upraveny přímo v seznamu signálů. V Advanced módu jsou k úpravě přímo v seznamu signálů dostupné i další parametry.
Jednotlivé sloupce mají následující význam:
- Name – Unikátní název signálu.
- Slave – Zvolené zařízení slave. Dostupné pouze v konfiguraci signálů Modbus TCP/IP Master.
- Slave Address – Adresa zařízení slave. Dostupné pouze v konfiguraci signálů Modbus RTU Master.
- Item Address – Adresa objektu v zařízení. Všechny objekty (hodnoty) uvnitř jedné stanice mají ID číslo (adresu) v rozmezí 0 až 65535.
- Type – Typ signálu. Názvy respektují specifikaci Modbus:
Input Digitální vstup Output Digitální výstup InReg 16 16-bitové celé číslo 0…65536 nebo -32768…32767 (závisí na indikátoru Is Signed), InReg 32 32-bitové celé číslo 0…4294967296 nebo -2147483648…2147483647 (závisí na indikátoru Is Signed), InReg 64 64-bitové celé číslo -9223372036854775808…9223372036854775807 (není podporována varianta s nezápornými hodnotami), InReg float 4-bytové desetinné číslo (ignorován indikátor Is Signed), InReg double 8-bytové desetinné číslo (ignorován indikátor Is Signed), Register 16 16-bitové celé číslo 0…65536 nebo -32768…32767 (závisí na indikátoru Is Signed), Register 32 32-bitové celé číslo 0…4294967296 nebo -2147483648…2147483647 (závisí na indikátoru Is Signed), Regsiter 64 64-bitové celé číslo -9223372036854775808…9223372036854775807 (není podporována varianta s nezápornými hodnotami), Register float 4-bytové desetinné číslo (ignorován indikátor Is Signed), Register double 8-bytové desetinné číslo (ignorován indikátor Is Signed), Register string textová proměnná (Count je v tomto případě počet bytů textu) Poznámka: REGISTER je některými prodejci nazýván Holding Register, podobně INREG může být nazýván Input Register.
- Count – Počet hodnot. Jeden signál může reprezentovat skupinu hodnot, které jsou zpracované náraz za použití bloku s více vstupy/výstupy. Tato hodnota definuje, kolik hodnot přečíst, a nemusí nutně souviset s počtem vstupů/výstupů bloku. V takovém případě se nepoužité vstupy/výstupy neaktualizují.
- Inhibit Time – Pouze pro signály Writable (W). Určuje minimální dobu mezi přenosem signálů.
- Period – Obnovovací perioda v sekundách. Nenulové hodnoty periodu definují, hodnota 0 respektuje hodnotu nastavenou daným IODRV blokem.
- Initial Value – Výchozí hodnota, na kterou nastavit signál při inicializaci ovladače. Užijte hranaté závorky pro skupinu hodnot a jednotlivé hodnoty oddělte mezerou.
- Readable (R) – Zaškrtněte pro povolení čtení hodnoty v REXYGEN algoritmu. V konfiguraci Slave budou takové signály zapisovatelné stanicí Master.
- Writable (W) – Zaškrtněte pro povolení zapisování hodnoty z REXYGEN algoritmu. V konfiguraci Slave budou takové signály čitelné stanicí Master.
- Passive (P) – V některých případech je efektivnější přenést větší množství signálů naráz (maximálně 125), ale stále chceme pracovat s jednotlivými signály, případně menšími skupinami. V takovém případě definujeme jedno velké pole a několik menších skupin v registru. Aktivní je pouze velké pole a ostatní signály jsou zaškrtnutím nastaveny jako pasivní. Dostupné pouze v konfiguraci Master.
- Join next (J) – Zaškrtněte pro použití příkazu read-write. Signál ke čtení je následován zapisovatelným signálem na dalším řádku a k výměně dat dochází prostřednictvím jediného příkazu. Dostupné pouze v konfiguraci Master.
- Multi command (m) – Zaškrtněte pro využití příkazů multi-read a multi-write i pokud je přenášena pouze jedna hodnota. Toto je užitečné pro Modbus stanice, které podporují pouze část příkazů. Dostupné pouze v konfiguraci Master.
- Swap word (a) – 32-bitová čísla jsou v protokolu Modbus reprezentována dvěma za sebou jdoucími 16-bitovými čísly. Tento indikátor určuje pořadí. To samé platí pro reálná čísla, která jsou reprezentována dvěma nebo čtyřmi 16-bitovými registry.
- Swap byte (b) – Významnější byte 16-bitového čísla se obvykle přenáší jako první (tzv. big-endian). Některá zařízení však pracují s formátem little-endian (první se přenáší méně významný byte). Pro takové případy je užitečný tento indikátor.
- Is Signed (S) – Zaškrtněte, pokud může signál nabývat záporných hodnot.
- As Array (V) – Hodnoty jsou přenášeny do algoritmu ve formě pole. Pokud je polí více, je využit blok From pro propojení signálu pole z ovladače s jedním nebo více VTOR bloky.
3.4 Speciální signály
V některých speciálních případech se ukazuje jako užitečné nebo nutné mít přístup k stavovým nebo konfiguračním proměnným driveru. Existují tyto speciální signály:
ErrorFrame | kolikrát došlo k přijetí nekorektního rámce |
ErrorTimeout | kolikrát došlo k timeoutu při čekání na odpověď |
ErrorData | kolikrát přišel korektní rámec, ale s nečekanými daty nebo chybovým kódem |
ErrorReset | hodnotou 1 dojde k vynulování výše uvedených počítadel chyb |
ComName | konfigurační parametr Port (pouze sériové linky) |
BaudRate | konfigurační parametr BaudRate (pouze sériové linky) |
Parity | konfigurační parametr Parity (pouze sériové linky) |
SpaceTime | přidané zpoždění mezi posíláním paketů v milisekundách (pouze sériová linka Master) |
SyncTime | přidaný timeout čas mezi přijatými byty v telegramu (pouze sériové linky) |
Timeout | konfigurační parametr Response timeout v milisekundách |
Gap | konfigurační parametr Retry time v milisekundách |
Browse | nenulové hodnoty přepnou ovladač do módu vyhledávání adres. Výstup je v systémovém logu. |
Dále lze ke každému signálu přidat za jméno speciální text, který značí, že se nečte vlastní hodnota, ale atribut. Všechny atributy začínají znakem „_“ (podtržítko). Existují následující atributy:
_Value | hodnota signálu (tj. stejná hodnota, jako samotný název signálu) |
_ReadEnable | konfigurační parametr Readable |
_RE | stejné jako _ReadEnable |
_WriteEnable | konfigurační parametr Writable |
_WE | stejné jako _WriteEnable |
_Address | konfigurační parametr Item address |
_Slave | konfigurační parametr Slave address |
_Fresh | čas, který uplynul od poslední aktualizace v sekundách |
_Period | konfigurační parametr Refresh rate |
_Send | příznak, že signál čeká na zapsání do zařízení Slave |
_WF | stejné jako _Send |
Atribut Fresh lze pouze číst, ostatní atributy lze číst i zapisovat. Atribut Fresh se aktualizuje i při neúspěšném pokusu o čtení/zápis. V takovém případě má pak vlastní hodnota kvalitu BAD nebo UNCERTAIN.
Pokud tedy chceme například zjistit, kdy byla naposledy přečtena hodnota MBM__IN, použijeme blok From s parametrem MBM__IN_Fresh
Dále existují další signály, které reprezentují stav a atributy zařízení Slave. Tyto mají předponu obsahující názvem ovladače a zařízení (např. MTM__SlaveName). Dostupné atributy pro zařízení Slave jsou:
_Connected | Připojení k zařízení Slave je zajištěno. Nucené připojení nebo odpojení, pokud použito jako výstup. |
_Connecting | Zaslán požadavek k připojení nebo bylo připojení zajištěno. |
_Status | Detailnější status připojení. Pouze pro vnitřní ladění. |
_Address | konfigurační parametr Address |
_Port | konfigurační parametr Port |
_SubAddr | konfigurační parametr Subaddress |
Kapitola 4
Poznámky k implementaci
V této kapitole jsou uvedeny informace k implementaci Modbusu do systému REXYGEN.
- Parametr SyncTime ponechte nastaven na 0. Existují totiž zařízení, která mají pomalý procesor a nesprávně detekují začátek paketu. Projevuje se to tak, že Slave neodpovídá vůbec nebo jen někdy, ačkoliv vše je nastaveno správně. Pouze v těchto případech zvětšete synchronizační mezeru.
- Parametr Timeout se měří od konce dotazu do konce odpovědi, ale čas potřebný k vyslání telegramu se k timeoutu přičítá. Telegram Modbus je 10 až 16 bajtů plus přenášené hodnoty. Maximální délka telegramu je 256 bajtů.
- Parametr Reconnect je důležitý, jen pokud je na sběrnici více stanic.
- Protokol Modbus umožňuje přenášet jen 16-bitové registry nebo několik 16-bitových registrů jdoucích za sebou. Toho se využívá při typu REGISTER_32 a REGISTER_FLOAT, které oba představují dva po sobě následující 16-bitové registry. Pokud tedy použijeme adresu 100 pro REGISTER_FLOAT, nemůžeme již použít adresu 101, protože je zabraná tímto float registrem.
- Doporučuje se používat jen signály „pouze pro čtení“ nebo „pouze pro zápis“. Pokud je třeba jeden registr číst i zapisovat, je lépe použít dva signály se stejnou adresou.
- Význam atributů Readable nebo Writable platí ve vztahu k algoritmu systému REXYGEN. V případě ovladače emulujícího Modbus Master nevzniká problém, ale v případě ovladače emulujícího Modbus Slave se signály readable musí zapisovat protokolem Modbus ze stanice Master do stanice Slave.
- Pokud použijeme parametr Count větší než jedna, volí se pouze adresa první hodnoty a ostatní po řadě následují.
- Perioda aktualizace Period nemůže být menší než doba potřebná k přečtení všech hodnot, které lze číst a zapsání všech hodnot, které se změnily a lze je zapisovat. Pokud k tomu dojde, ovladač nehlásí žádnou chybu, ale perioda obnovování se prodlouží. Skutečnou periodu lze zjistit programem REXYGEN Studio v Diagnostics.
- Hodnoty se čtou nebo zapisují v pořadí, v jakém jsou uvedeny v seznamu signálů.
- Některé konfigurační nástroje pro Modbus používají pro registry adresy od 40001 (popřípadě od 400001 pro zařízení série 984). Je to z důvodu, že je na první pohled odlišen vstupní a stavový registr. V systému REXYGEN se vždy používá fyzická adresa od 0 (tj. je potřeba odečíst 40000 nebo 40001, popř. 400000 nebo 400001 od adresy uvedené v konfiguraci nebo dokumentaci připojeného zařízení).
- Komunikace po lince Modbus probíhá asynchronně s algoritmem řídícího systému REXYGEN. Ovladač má pro všechny hodnoty mezipaměť (tzv. cache) přes kterou se všechny hodnoty předávají. Ovladač v roli Modbus Master postupně prochází všechny signály ze seznamu signálů. Pokud je obsluha signálu blokována periodou (ještě nenastal čas pro další obsloužení) nebo „odpojením“ stanice Slave, ve které je uložen, signál se přeskočí. V opačném případě je odeslán dotaz na čtení hodnoty (pokud je signál Readable) nebo zápis hodnoty (pokud je signál Writable a změnila se hodnota). Pokud nepřijde odpověď do času určeného parametrem Timeout, přejde příslušná stanice do stavu odpojena. Ovladač v roli Modbus Slave pouze čeká na dotazy stanice Modbus Master a vrací hodnoty z cache nebo cache aktualizuje. Situace je shrnuta v následující tabulce:
- Pokud není zaškrtnutý indikátor SwapWord, pořadí je ve formátu
big-endian pro REGISTER_32, INREG_32 a ve formátu
little-endian pro REGISTER_FLOAT, REGISTER_64, REGISTER_DOUBLE,
INREG_FLOAT, INREG_64, INREG_DOUBLE. Žádné jiné typy nejsou
ovlivněny. Pokud indikátor zaškrtnut není, pořadí je vždy ve formátu
big-endian.
Master
Slave
čtení
přečte hodnotu uloženou v mezipaměti (získanou v předchozím cyklu na sběrnici Modbus)
přečte hodnotu uloženou v mezipaměti (aktualizovanou posledním příkazem zápisu na sběrnici Modbus)
zápis
zapíše hodnotu do mezipaměti (pokud se liší od předchozí hodnoty, je přenesena během nejbližšího cyklu Modbus)
zapíše hodnotu do mezipaměti (Modbus Master obdrží hodnotu, jakmile vydá příkaz read)
zápis se čtením
přečte se hodnota z cache, pak proběhne standardní zápis
přečte se hodnota z cache, pak proběhne standardní zápis
Kapitola 5
Co dělat při problémech
!!!VAROVÁNÍ!!! Do verze 2.51.0.13636 má typ REGISTER32 opačné pořadí bytů pro pasivní a aktivní položku. Problém je vyřešen od verze 2.51.0.13637 a dále. Pokud konvertujete projekt z verze 2.51.0.13636 nebo starší do verze 2.51.0.13637 nebo novější, je nutno u všech položek typu REGISTER32 se zaškrtnutým indikátorem Passive zaškrtnout indikátor SwapWord.
Ze všeho nejdříve je vhodné prozkoumat knihovnu příkladů, zejména sekce 0401_Modbus_RTU and 0402_Modbus_TCP, které se týkaji použití MbDrv.
V případě, že v diagnostických prostředcích systému REXYGEN jsou neočekávané nebo nesprávné hodnoty vstupů nebo výstupů, je vhodné nejdříve ověřit jejich funkci nezávisle na systému REXYGEN. Dále je nutné překontrolovat konfiguraci. Nejčastější chyby jsou:
- Chyba v hardware - špatně zapojený kabel (překřížený vs. nepřekřížený, neobvyklé konektory, TTL vs. RS232 úrovně signálů, polarita signálů, …).
- Použitý (nakonfigurovaný) sériový kanál je obsazen jiným programem.
- Zařízení používá odlišnou mutaci protokolu Modbus (zejména pořadí bajtů ve wordu popř. ve floatu).
- Zařízení je „pomalé“ a vyžaduje zvětšit SyncTime.
- Špatná adresa Slave nebo signálu nebo atributy Readable a Writable.
- Signál je definován v jiném konfiguračním souboru (při použití více linek Modbus).
- Parametry mohou být nastaveny z algoritmu. Zkontrolujte algoritmus a zaměřte se na fázi startu.
- ADAM 5000 TCP nefunguje správně, pokud síťová vrstva spojí 2 Modbus
zprávy do jedné zprávy na ethernetu. V logu jsou v tomto případě vidět
zprávy bez odpovědi po timeoutu. Problém lze obejít nastavením Max.
requests = 1 pro tuto slave stanici, nicméně sníží se tím propustnost
komunikace.
Nastavit Max. requests = 1 je ostatně dobrá volba i v případě podivných problémů při komunikaci.
- Čísla float a double musí být podle specifikací IEEE 754 (binary32, respektive binary64). Některé PLC používají jiné kódování, které nemohlo být použito.
V případě, že daný vstup funguje pomocí testovacího programu nebo uvedených testovacích příkladů správně a při shodné konfiguraci v systému REXYGEN nefunguje, prosíme o zaslání informace o problému (nejlépe elektronickou cestou) na adresu dodavatele. Pro co nejrychlejší vyřešení problému by informace měla obsahovat:
- Identifikační údaje Vaší instalace – verzi, číslo sestavení (build), datum vytvoření instalace, licenční číslo.
- Stručný a výstižný popis problému.
- Co možná nejvíc zjednodušenou konfiguraci řídicího systému REXYGEN, ve které se problém vyskytuje (ve formátu souboru s příponou .mdl).
- Konfigurační soubor ovladače MbDrv.
Literatura
[1] Modbus Application Protocol Specification V1.1b. http://www.Modbus-IDA.org, 2006.
[2] REX Controls s.r.o.. Začínáme se systémem REXYGEN na Debian, 2020. .
[3] REX Controls s.r.o.. Funkční bloky systému REXYGEN – Referenční příručka, 2020. .
Referenční číslo dokumentace: 15831
2023 © REX Controls s.r.o., www.rexygen.com