Ovladač systému REXYGEN pro komunikaci Modbus
(modul MbDrv)
Uživatelská příručka

REX Controls s.r.o.

Verze 3.0.1
Plzeň
1.3.2024

Obsah

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.


PIC


Obrázek 2.1: Příklad zařazení ovladače MbDrv do projektu aplikace

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.


PIC


Obrázek 2.2: Příklady použití vstupně-výstupních bloků s ovladačem MbDrv

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.


PIC


Obrázek 2.3: Jednoduchá kontrolní smyčka PID

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


PIC


Obrázek 3.1: Konfigurační dialog pro Modbus TCP/IP Master

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


PIC


Obrázek 3.2: Konfigurační dialog pro Modbus RTU Master

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


PIC


Obrázek 3.3: Konfigurační dialog pro Modbus TCP/IP Slave

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


PIC


Obrázek 3.4: Konfigurační dialog pro 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.


PIC


Obrázek 3.5: Konfigurační dialog signálů po protokolu Modbus

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: 16076

2024 © REX Controls s.r.o., www.rexygen.com