www.rexcontrols.cz www.contlab.eu www.pidlab.com
Ovladač pro komunikaci Modbus (modul MbDrv řídicího systému REX)
Uživatelská příručka REX Controls s.r.o. Verze 2.10.7 (revize 2) Plzeň 18.9.2015
Obsah 1 Ovladač MbDrv a systém REX 1.1 Úvod . . . . . . . . . . . . . . . . . . . 1.2 Požadavky na systém . . . . . . . . . . 1.3 Instalace ovladače . . . . . . . . . . . 1.4 Instalace ovladače na cílovém zařízení 1.4.1 Zařízení s Windows . . . . . . . 1.4.2 Zařízení s Windows CE . . . . 1.4.3 Zařízení s Linuxem . . . . . . .
. . . . . . .
2 2 2 3 3 3 3 3
2 Zařazení ovladače do projektu aplikace 2.1 Přidání ovladače MbDrv do projektu . . . . . . . . . . . . . . . . . . . . . . 2.2 Připojení vstupů a výstupů do řídicího algoritmu . . . . . . . . . . . . . .
5 5 7
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
3 Konfigurace ovladače 3.1 Konfigurační dialogové okno . . . . . . . . . . . . . . . . 3.1.1 Konfigurace globálních parametrů – sériová linka 3.1.2 Konfigurace globálních parametrů – TCP/IP . . 3.1.3 Zobrazení zkonfigurovaných signálů . . . . . . . . 3.1.4 Ovládací tlačítka . . . . . . . . . . . . . . . . . . 3.1.5 Konfigurace vstupů a výstupů . . . . . . . . . . . 3.2 Speciální signály . . . . . . . . . . . . . . . . . . . . . . 3.3 Konfigurace zařízení Slave . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . . .
9 9 9 11 11 12 13 14 15
4 Poznámky k implementaci
17
5 Co dělat při problémech
20
Literatura
22
1
Kapitola 1
Ovladač MbDrv a systém REX 1.1
Úvod
V této příručce je popsáno používání ovladače MbDrv pro připojení technických prostředků využívajících protokol Modbus [1] k řídicímu systému REX pro Windows, Windows CE a Phar Lap ETS. Je podporována varianta RTU pro sériovou linku RS232 nebo RS485 a varianta pro TCP/IP. Ovladač byl vyvinut firmou REX Controls. Ovladač umožňuje získávat vstupy a nastavovat výstupy a to jak v režimu Master tak i Slave. MbDrv jsou 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, režim Slave po TCP/IP. Protože všechny tyto ovladače mají společné součásti, instalují se vždy všechny najednou.
1.2
Požadavky na systém
Obecně lze říci, že pro použití ovladače MbDrv musí být dodrženy minimální požadavky nutné k provozování řídicího systému REX. Pro konfiguraci ovladače postačuje běžný počítač PC (případně v průmyslovém provedení). Pro provozování ovladače na cílovém zařízení zabere ovladač MbDrv ve variantě RTU jeden sériový port, který používá pro komunikaci se vzdáleným zařízením. Ve variantě TCP/IP je vyžadován TCP/IP stack (tj. obvykle ethernethová karta pro připojení do LAN popř. modem, WiFi a pod.) 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í (počítači) nainstalováno programové vybavení: Vývojový počítač Operační systém Řídicí systém REX
jeden ze systémů: Windows 2000, XP, Vista nebo 7 verze pro operační systémy Windows
Cílové zařízení
2
Řídicí systém REX
verze pro zvolené cílové zařízení s jedním z podporovaných operačních systémů: Windows 2000/XP/Vista/7, Windows CE, Phar Lap ETS nebo linux
V případě, že vývojový počítač je přímo cílovým zařízením (řídicí systém REX bude provozován v jedné z variant Windows), instaluje se pouze jedna kopie řídicího systému REX.
1.3
Instalace ovladače
Ovladač MbDrv se instaluje jako součást instalace řídicího systému REX. Pro nainstalování ovladače je nutné v instalačním programu systému REX zaškrtnout volbu Ovladač protokolu Modbus Master i Slave. Po typické instalaci se řídicí systém REX nainstaluje do cílového adresáře C:\Program Files\REX Controls\REX_
, kde označuje verzi systému REX. Po úspěšné instalaci se do cílového adresáře zkopírují soubory: MbDrv_H.dll – Konfigurační část ovladače MbDrv. 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 2000/XP/Vista/7. Pro jinou cílovou platformu je na ni třeba nainstalovat příslušnou verzi systému REX. DOC\CZECH\MbDrv_CZ.pdf – Tato uživatelská příručka.
1.4 1.4.1
Instalace ovladače na cílovém zařízení Zařízení s Windows
Část ovladače pro cílové zařízení, která se používá pro běh REX Modbus Master nebo Slave na Windows XP, Vista, 7 nebo 8, je součástí instalace Vývojových nástrojů řídicího systému REX, který již byl zmíněn výše.
1.4.2
Zařízení s Windows CE
Část ovladače pro cílové zařízení, která se používá pro běh REX Modbus Master nebo Slave na zařízeních s Windows CE je součástí instalačního balíčku (soubor .cab) runtime jádra systému REX.
1.4.3
Zařízení s Linuxem
Pokud na cílovém zařízení dosud není instalováno runtime jádro RexCore systému REX, nejdříve jej nainstalujte podle návodu v příručce Začínáme se systémem REX [2].
3
Pro umožnění komunikace Modbus v řídicím systému REX je potřeba nainstalovat ovladač. To se provede z příkazové řádky pomocí příkazu Debian: sudo apt-get install rex-mbdrvt OpenWrt: opkg install rex-mbdrvt
4
Kapitola 2
Zařazení ovladače do projektu aplikace 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.
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 sériové lince. Přidání ovladače v jiné roli má jen jiné jméno třídy (viz dále). Modules
prev
next
MbDrv
prev
next
SimDrv
Drivers prev Archives
next
prev
MBM
next
SIM
QTask Level0
prev
next
Task1
prev
next
Task2
Level1 Level2 Level3
EXEC
Obrázek 2.1: Příklad zařazení ovladače MbDrv do projektu aplikace Pro zařazení ovladače do projektu slouží dva zvýrazněné bloky. Nejprve je na výstup Modules bloku exekutivy EXEC připojen blok typu MODULE s názvem MbDrv, který nemá žádné další parametry. 5
Druhý blok MBM typu IODRV, připojený na výstup Drivers exekutivy má dva parametry: classname – jméno třídy ovladače, které se pro tento ovladač zadává: 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 POZOR! Jméno rozlišuje velká a malá písmena! 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 (Rex Input Output) byla zavedena pro tento účel. Jménem tohoto bloku, na obr. 2.1 zadaným jako MBM, začínají názvy všech vstupních a výstupních signálů připojených k tomuto ovladači. Právě popsané parametry bloku IODRV se konfigurují v programu RexDraw v dialogovém okně, jak je patrno z obr. 2.2 a). Konfigurační dialog ovladače MbDrv, popsaný v kapitole 3, se aktivuje po stisku tlačítka Special Edit.
a)
b)
Obrázek 2.2: Konfigurace parametrů ovladače V programovém systému Matlab Simulink se parametry bloku IODRV zadávají v parametrickém dialogu znázorněném na obrázku 2.2 b). Poslední parametr slouží k volání konfiguračního dialogu ovladače přímo z prostředí programu Matlab Simulink. Pokud při editaci parametrů je invertováno zaškrtnutí tohoto parametru, bude po stisku tlačítek OK nebo Apply zavolán konfigurační dialog ovladače MbDrv, popsaný v kap. 3.
6
2.2
Připojení vstupů a výstupů do řídicího algoritmu
Vstupy a výstupy z ovladačů se připojují do souborů s příponou .mdl jednotlivých úloh. 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 REX lze použít bloky, znázorněné na obr. 2.3.
MTM__OUTHEXD
val0 val1 val2 val3 val4 val5 val6 val7 val8 val9 val10 val11 val12 val13 val14 val15
[MTM__OUT]
val0 val1 val2 val3 val4 val5 val6 val7 val8 val9 val10 val11 val12 val13 val14 val15
[MTM__IN]
MTM__INHEXD
val0 val1 val2 val3
val0 val1 val2 val3 val4 val5 val6 val7
MTM__OUTQUAD
MTM__OUTOCT
val0 val1 val2 val3
val0 val1 val2 val3 val4 val5 val6 val7
MTM__INQUAD
MTM__INOCT
Obrázek 2.3: Příklady použití vstupně-výstupních bloků s ovladačem MbDrv Blok typu From sloužící pro připojení jednoho vstupu má parametr Goto tag roven MBM__IN, blok typu Goto používaný pro připojení jednoho výstupu má hodnotu parametru Tag (v programu RexDraw parametru GotoTag) rovnu MBM__OUT. Ostatní bloky mají přímo na začátku svého jména prefix MBM následovaný dvěma znaky _ (podtržítko). Přesněji řečeno, daný vstupně výstupní blok je považován systémem REX za blok připojený k ovladači MbDrv, pokud jeho jméno (či, v případě bloků typu From a Goto, parametry Goto tag a Tag) začíná jménem bloku typu IODRV popisujícího daný ovladač (na obr. 2.1 to byl právě blok MBM). Začátek jména vstupního nebo výstupního bloku je od zbytku jména vždy oddělen dvěma znaky _ . Zbytek jména vstupně výstupního bloku je uživatelským jménem signálu, zadávaným v konfiguraci ovladače, popsané v následující kapitole. Kdyby byl např. blok MBM z obr. 2.1 přejmenován na XY, začínala by jména všech vstupně výstupních bloků připojených k ovladači MbDrv znaky XY__ . Z praktických dů7
vodů je však rozumnější volit prefix mnemotechnicky blízký názvu ovladače. Použití bloků From a Goto pro vstup a výstup jednoho signálu do/z řídicího algoritmu umožňuje snadno přecházet ze simulační verze algoritmu testované v systému Matlab Simulink do systému reálného času REX. V systému Simulink je možno k blokům From a Goto přiřadit „protikusy“ , kterými bude připojen simulační model procesu, po otestování může být model procesu z projektu odstraněn. Při překladu modelu nahradí díky zavedené a právě popsané konvenci systém REX zbylé bloky From a Goto vstupními a výstupními bloky. 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.3. 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].
8
Kapitola 3
Konfigurace ovladače V této kapitole je popsána konfigurace jednotlivých vstupních a výstupních hodnot 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. Obecný popis konfiguračního dialogového okna a postup při konfiguraci jednotlivých typů vstupů a výstupů je popsán v této kapitole.
3.1
Konfigurační dialogové okno
Konfigurační dialogové okno znázorněné na obr. 3.1 je obsaženo v souboru MbDrv_H.dll a aktivuje se v programu RexDraw stisknutím tlačítka Special Edit v parametrickém dialogu bloku typu IODRV s parametry ovladače MbDrv (viz kap. 2). Při vytváření konfigurace řídicího systému z editoru programu Matlab Simulink lze aktivovat konfigurační okno přímo z parametrického dialogu bloku typu IODRV, postupem popsaným v sekci 2.1, viz obr. 2.2.
3.1.1
Konfigurace globálních parametrů – sériová linka
V levé horní části dialogu jsou v rámečku s názvem Bus parameters parametry platné pro všechny signály resp. pro celou komunikační linku. Jsou to: Port – Jméno sériové linky použité pro komunikaci. Na Windows je to obvykle COM1: nebo COM2:. Poznamenejme, že ve Windows CE je dvojtečka za názvem sériového portu povinná, jinak se port nepodaří otevřít. Porty s číslem vyšším než 9 se musí zapisovat např. \\.\COM12:. V Linuxu se sériové linky označují např. /dev/ttyS1 nebo /dev/ttyUSB0. 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.
9
Obrázek 3.1: Konfigurační dialog vstupů a výstupů Sync. time – Synchronizační čas. Protokol Modbus definuje konec rámce jako klid na lince po dobu potřebnou k vyslání tří znaků. Pokud je tento parametr 0, pak je synchronizační mezera podle normy. V opačném případě je to zadané číslo (v sekundách). 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. Reconnect – Perioda v sekundách. S touto periodou jsou testovány nefunkční stanice, jestli už fungují. 10
3.1.2
Konfigurace globálních parametrů – TCP/IP
V případě použití TCP/IP varianty jsou to parametry: Name – Jméno konfigurace pro lepší přehled uživatele. Interně se nijak nepoužívá. Local port – port/adresa TCP protokolu. V případě stanice Slave je nutno nastavit port na kterém „poslouchá“ . Pro Modbus je implicitní (tzv. well known port) 502. V případě Master obvykle nastavíme 0 a TCP/IP stack vybere nějaký volný. Local IP – lokální IP adresa adaptéru (ethernetové zásuvky), který chceme použít pro spojení. Obvykle nastavujeme 0.0.0.0 a TCP/IP stack vybere sám vhodný adaptér podle směrovací tabulky a v případě Slave „poslouchá“ na všech adaptérech. 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í celého paketu, takže je nutno přidat čas na přijetí celého . V režimu Slave ovladač odpovídá vždy okamžitě po přijetí telegramu a tento parametr nemá význam. V případě nefunkční stanice se po dobu čekání na odpověď komunikuje s ostatními stanicemi po jiných soketech, takže v tomto případě není nastavení timeoutu tak kritické. Reconnect – Perioda v sekundách. S touto periodou jsou testovány nefunkční stanice, jestli už fungují.
3.1.3
Zobrazení zkonfigurovaných signálů
V dolní části dialogového okna (obr. 3.1) jsou v tabulkové formě zobrazeny zkonfigurované signály. Každý řádek odpovídá jednomu nebo několika signálům, jimž je přiřazen jeden symbolický název (viz sekci 3.1.5). Signálem budeme v dalším textu rozumět jeden signál nebo skupinu několika signálů, která odpovídá jedinému řádku v této tabulce. V případě většího počtu řádků než se vejde do vymezeného prostoru se v pravé části objeví posouvací pruh (scroll bar), pomocí kterého lze standardním způsobem pro Windows zobrazovat požadovanou část seznamu signálů. Jednotlivé sloupce tabulky mají následující význam: Name – Jméno signálu, které musí být zadáno jednoznačně. Slave – Adresa zařízení Slave. Na jedné lince může být až 32 zařízení Slave (při použití opakovačů i více). Každé takové zařízení má pro rozlišení svoji adresu. Tato adresa je právě v tomto sloupci. Může nabývat hodnot 0 až 254, 255 je vyhrazeno pro broadcast. V případě varianty TCP/IP je zde jméno stanice Slave (viz dále). V případě stanice Slave je zde její vlastní adresa. POZOR není podpořena situace, že by se ovladač tvářil jako více stanic Slave a adresa musí být všude stejná. Address – Adresa objektu v zařízení. Všechny přenášené objekty (hodnoty) mají v rámci připojeného zařízení přiděleno identifikační číslo – adresu. Adresa může nabývat hodnot 0 až 65535. 11
Type – Typ signálu, např. Reg (registr slave zařízení) nebo BinOut (logický výstup). Všechny typy signálů včetně jejich zadávání jsou popsány v sekci 3.1.5. Flags – Příznaky. Zde je shluk písmen, přičemž každé písmeno odpovídá nějaké vlastnosti, kterou signál má. Mohou se zde objevit písmena: R . . . signál lze číst systémem REX, tj. může být užit jako vstup W . . . signál lze zapisovat systémem REX, tj. může být užit jako výstup I . . . signálu je nastavena počáteční hodnota při inicializaci ovladače S . . . signál je celé číslo se znaménkem (Modbus standardně předpokládá registry šestnáctibitové bez znaménka) a . . . příznak Swap words (viz níže) b . . . příznak Swap bytes (viz níže) P . . . příznak Passive (viz níže) J . . . příznak Join next (viz níže) m . . . příznak Multi command (viz níže) Count – Počet hodnot. Jak už bylo uvedeno, jednomu signálu může odpovídat více hodnot, které se pak přečtou/zapíšou všechny najednou blokem pro vícenásobný vstup/výstup. Toto číslo udává, kolik hodnot se má číst/zapisovat. Hodnota nemusí odpovídat počtu vývodů na bloku. Nepoužité vývody se pak neaktualizují. Period – Perioda aktualizace v sekundách. Pokud je zde 0, aktualizuje se signál s periodou zadanou v bloku IODRV příslušejícím driveru a konfiguračnímu souboru.
3.1.4
Ovládací tlačítka
V dialogu jsou umístěny dvě skupiny ovládacích tlačítek. V první skupině jsou tlačítka s globálním významem: OK – Ukončení editace signálů a uložení konfiguračního souboru. Cancel – Ukončení editace signálů bez uložení konfiguračního souboru, takže všechny provedené změny od posledního uložení konfiguračního souboru se nenávratně ztratí. Druhá skupina obsahuje tlačítka pro manipulaci se signály: AddItem – Vložení nového signálu. Signály jsou zobrazeny v abecedním pořadí. SetItem – Změní označenému signálu parametry. Při označení signálu v seznamu se jeho parametry přenesou do editačních polí, kde je lze měnit. Změny provedené v editačních polích se projeví až po stisknutí tohoto tlačítka. DelItem – Odstraní označený signál ze seznamu signálů. 12
MoveUp – Posune označený signál v seznamu signálů nahoru. MoveDown – Posune označený signál v seznamu signálů dolů. Slave – tlačítko je aktivní jen pro Master přes TCP/IP. V tomto případě je pro stanice Slave potřeba nastavit více parametrů a je proto použit zvláštní dialog. Podrobnější popis je v kapitole 3.3. Import – import konfigurací ze systému VARIO
3.1.5
Konfigurace vstupů a výstupů
Ostatní prvky dialogu (tj. v rámečku Items) z obr. 3.1 slouží pro konfiguraci vstupních a výstupních signálů. Jsou to tyto políčka: Name – Jméno signálu, které musí být zadáno jednoznačné. Slave address – Adresa zařízení Slave. Může nabývat hodnot 0 až 255, ale 255 je vyhrazeno pro broadcast. V případě varianty TCP/IP je zde jméno stanice Slave (viz dále). V případě stanice Slave je zde její vlastní adresa. POZOR není podpořena situace, že by se ovladač tvářil jako více stanic Slave a adresa musí být všude stejná. Item address – Adresa objektu v zařízení Slave. Může nabývat hodnot 0 až 65535. Item type – Typ signálu. Může být (názvy vycházejí ze specifikace Modbus): Input Coil Register(16bit) Register(32bit) Register(float) Register(double)
logický vstup, logický výstup, celé číslo v rozsahu 0. . . 65535, celé číslo v rozsahu 0. . . 4294967296, číslo v pohyblivé čárce s velikostí 4 bajty číslo v pohyblivé čárce s velikostí 8 bajtů
Count – Počet hodnot, které signál zpracovává najednou. Readable – Políčko se zaškrtne, pokud chceme dovolit čtení hodnoty z algoritmu řídicího systému REX. Writable – Políčko se zaškrtne, pokud chceme dovolit zápis hodnoty z algoritmu systému REX. Initial value – Zde se napíše počáteční hodnota, pokud ji chceme nastavit do zařízení Slave při inicializaci driveru MbDrv, tj. dříve, než se začne provádět algoritmus systému REX. Pokud je hodnot více než jedna, musí být v hranatých závorkách a jednotlivá čísla oddělena mezerou. Refresh rate – Perioda aktualizace v sekundách. Pokud je zde 0, aktualizuje se signál s periodou zadanou v bloku IODRV příslušejícím driveru a konfiguračnímu souboru.
13
Swap word – Modbus nepodporuje 32bitová čísla, ale je přirozeným rozšířením považovat dvě po sobě následující 16bitová čísla za jedno 32bitové. Podle architektury procesoru se může přenášet významnějších 16bitů v registru s nižší nebo vyšší adresou. Pokud se tedy 16bitová čísla přenášejí dobře a 32bitová čísla „nějak divně“ , tak může pomoci toto pole zaškrtnout. Stejné pravidlo platí pro desetinná čísla, protože ty se také přenášejí ve 2 (float) nebo 4 (double) po sobě následujících 16bitových registrech. Swap byte – Modbus požaduje přenášet 16bitové registry tak, že nejdříve je v telegramu významnější byte a jako druhý méně významný byte (tzv. big endian formát). Občas se vyskytuje implementace, která má pořadí obráceně (v little endian formátu). Pak se místo čísla 1 zobrazuje 256 a podobně. Pak je potřeba zatrhnout tento příznak. Passive – Políčko se zaškrtne, pokud nechceme hodnotu přímo přenášet. Někdy může být výhodné přenášet prostředky Modbus velké pole registrů (maximum je 125) a do úlohy v systému REXje přenášet (pojmenovávat) po jednom nebo nějakých menších celcích. V takovém případě zaškrtneme v kratších položkách políčko Passive, a nadefinujeme ještě jedno delší pole, které nebude mít zatrženo Passive a bude se adresami překrývat s pasivními položkami. Políčko má význam jen v režimu Master. Join next – Políčko se zaškrtne, pokud chceme použít příkaz současného čtení a zápisu. Pole se zaškrtne u položky, která se má přečíst, přičemž následující položka v konfiguraci (o řádku níže) musí být zapisovatelná a zapíše se v rámci jednoho příkazu. Multi command – Políčko se zaškrtne, pokud chceme použít příkaz pro zápis více registrů i když jde jen o jeden registr. Možnost byla zařazena poté, co se objevila zařízení, která podporují jen omezenou množinu funkcí protokolu Modbus. Signed – Políčko se zaškrtne, pokud chceme pracovat se zápornými čísly.
3.2
Speciální signály
V některých speciálních případech se ukazuje jako užitečné/nutné mít přístup k stavovým nebo konfiguračním proměnným driveru. Vlastní ovladač má 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 Dále ke každému signálu lze přidat za jméno speciální text, který značí, že se nečte vlastní hodnota, ale atribut. Texty jsou následující (všechny začínají dvěma znaky _ (podtržítko)): 14
__ReadEnable __WriteEnable __Address __Slave __Fresh __Period __Send
konfigurační parametr Readable konfigurační parametr Writable konfigurační parametr Item address konfigurační parametr Slave address čas, který uplynul od poslední aktualizace v sekundách konfigurační parametr Refresh rate příznak, že signál čeká na zapsání do zařízení Slave
Atribut Fresh lze pouze číst systémem REX, ostatní lze číst i zapisovat. Pozor 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. Případě režimu Slavese atribut Fresh aktualizuje u víceprvkových položek, pokud Masterpřistoupil ke kterékoliv z nich. 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 existuje speciální implicitní signál, který se jmenuje stejně jako Slave (resp. jeho adresa). Pokud například použijeme blok From s parametrem MBM__3, tak hodnota bude stav spojení se zařízení Slave na adrese 3 (hodnota TRUE odpovídá stavu „Slave připojen“ ).
3.3
Konfigurace zařízení Slave
V případě, že ovladač konfigurujeme jako Master přes TCP/IP, musíme pomocí tlačítka Slave nastavit parametry jednotlivých slave stanic. Po stisku tohoto tlačítka se objeví dialogové okno jako na obr. 3.2.
Obrázek 3.2: Konfigurační dialog stanic Slave 15
Ve spodní části je tabulka s již nastavenými stanicemi Slave, v horní části jsou zadávací pole a tlačítka. Výběrem/označením řádky v tabulce se hodnoty přesunou do editačních polí a je možné je upravit. Význam jednotlivých polí je následující: Name – Název stanice, který musí být zadán jednoznačně. IP – IP adresa stanice Slave. Port – port (TCP adresa) stanice Slave. Implicitní port pro Modbus je 502, který je předvyplněn. Max requests – maximální počet požadavků (Modbus telegramů), které mohou být ve frontě ke zpracování. Zejména malá zařízení (s malou operační pamětí) mají omezenou velikost bufferu pro TCP/IP stack. Stanice Master se nesmí dostat do stavu, že vyslala více požadavků pro danou stanici Slave, ze které nemá dosud odpověď. Pokud by to mělo nastat, musí se další požadavek pozdržet. Subaddress – další adresní pole, které může nabývat hodnot číslo 1 až 255, přičemž 255 je broadcast. Často se subadresa nevyužívá a používá se 255 (je to zavedeno hlavně kvůli koncentrátorům, NAT routerům, apod.). Add – tlačítko pro přidání další slave stanice (s parametry, které jsou aktuálně v zadávacích polích). Set – tlačítko pro nastavení parametrů aktuálně vybrané stanice Slave (nastaví se parametry, které jsou aktuálně v zadávacích polích). Del – tlačítko pro vyřazení aktuálně vybrané stanice Slave. OK – tlačítko pro návrat do hlavního dialogu. Tlačítko Cancel zde není, protože vzhledem k interní implementaci návrat bez uložení změn není možný.
16
Kapitola 4
Poznámky k implementaci V této kapitole jsou soustředěny poznatky, které vznikly z dosavadních zkušeností. Některé položky v konfiguraci jsou často nesprávně pochopeny, ale podrobný popis výše by zhoršoval čitelnost textu. Proto jsou tyto postřehy uvedeny ve zvláštní kapitole. Je zde také podrobně popsán způsob přenosu hodnot. • Parametr Sync. time 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 lince více stanic Slave a potřebujeme, aby i při výpadku jedné stanice ostatní komunikovaly nezměněnou rychlostí. Pokud totiž stanice neodpovídá, trvá cyklus dotaz - odpověď (odpověď nepřijde, tj. doba je určena timeoutem) mnohem déle a po dobu tohoto cyklu nemůže komunikovat jiná stanice. Komunikace s neživou stanicí proběhne jen jednou za dobu Reconnect, takže čím větší je tato doba, tím méně jsou ostatní stanice bržděny. Na druhou stranu při opětovném zprovoznění neživé stanice trvá až dobu Reconnect, než systém REX zjistí její zprovoznění a začne si s ní vyměňovat data. • 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 (32bit) a Register (float), které oba představují dva po sobě následující 16-bitové registry. Pokud tedy použijeme adresu 100 pro Registr(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 nebo použít přepínání směru z algoritmu. Použít signál pro čtení i zápis se používá v případě užití výstupního bloku s výstupem skutečně zapsané hodnoty. 17
• Význam příznaků Readable nebo Writable platí ve vztahu k algoritmu systému REX. To znamená, že na signál, který je readable lze připojit blok From (popř. libovolný vstupní blok). Na signál, který je writable lze připojit blok Goto (popř. libovolný výstupní blok). 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 Refresh rate 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 RexView. Toto políčko slouží pro případ, že nějaká proměnná nemusí být obsluhována stejně často jako ostatní, čímž se v důsledku zkrátí obnovovací perioda ostatních hodnot. • Hodnoty se čtou/zapisují v pořadí v jakém jsou uvedeny v konfiguračním souboru, které je stejné jako pořadí, 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 REX 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 spolupracujícího zařízení). • Komunikace se po lince Modbus probíhá asynchronně k předávání dat algoritmem řídícího systému REX. 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 z konfiguračního souboru. 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:
18
čtení
zápis
zápis se čtením
Master přečte se hodnota z cache (získaná v minulém cyklu Modbus sběrnice) hodnota se zapíše do cache (pokud se liší od minulé hodnoty v cache, zapíše se v dalším cyklu Modbus sběrnice) přečte se hodnota z cache, pak normální zápis
Slave přečte se hodnota z cache (získaná při posledním zápisu Modbus sběrnicí) hodnota se zapíše do cache (na sběrnici se aktualizuje dalším dotazem od Modbus Master) přečte se hodnota z cache, pak normální zápis
• v případě Modbus Slave program RexView ukazuje někdy podivné hodnoty doby trvání. Je to způsobeno tím, že algoritmus skončí, když nemá co obsluhovat a čeká na další spuštění systémem REX. Pokud jsou neustále dotazy, nikdy k dokončení nedojde. To není na závadu funkčnosti, ale je lepší snížit ovladači prioritu.
19
Kapitola 5
Co dělat při problémech V případě, že v diagnostických prostředcích systému REX, např. v programu RexView 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 REX. 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žívá se jiný sériový kaná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 Sync. time Špatná adresa Slave nebo signálu nebo příznaky readable a writable. Pozor také, pokud používáte více sériových linek pro Modbus, zda je signál ve správném konfiguračním souboru. Parametry se mohou měnit z algoritmu. Zejména při startu se mohou změnit nevhodně a pak se to již „nespraví“ .
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 ovladači MbDrv 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 by 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. 20
• Co možná nejvíc zjednodušenou konfiguraci řídicího systému REX, ve které se problém ještě vyskytuje (ve formátu souboru s příponou .mdl). • Konfigurační soubor ovladače MbDrv.
21
Literatura [1] Modbus Application Protocol Specification V1.1b. 2006.
http://www.Modbus-IDA.org,
[2] REX Controls s.r.o.. Začínáme se systémem REX na platformě Raspberry Pi, 2013. [3] REX Controls s.r.o.. Funkční bloky systému REX – Referenční příručka, 2013.
Referenční číslo dokumentace: 5460
22