Driver protokolu Modbus je jedním z nejčastěji používaných driverů. V Mervis IDE jsou možnosti nastavení parametrů modbusových proměnných velmi široké, a proto se podíváme na definici proměnné podrobně.
Datový bod, definovaný v modbusovém zařízení, není sám od sebe dostupný v programu. Je to pouze definice komunikace. V programu ovšem potřebujeme proměnnou, s níž můžeme pracovat. Je tedy nutné namapovat (přiřadit) definici datového bodu nějaké globální proměnné. Tato abstrakce umožňuje programátorovi snadno přepojit proměnnou z jednoho HW datového bodu na jiný, například v případě fyzického poškození vstupu nebo I/O modulu. Globální proměnné mohou být tvořeny a přiřazovány k datovým bodům také automaticky, s využitím funkce Autogen.
Nejprve je třeba založit komunikační kanál. Ten určuje, na jakém fyzickém portu bude PLC komunikovat s Modbus serverem - můžeme použít jeden ze sériových portů (pro Modbus RTU) nebo rozhraní Ethernet (pro Modbus TCP).
Následující parametry musejí být stejné pro kanál i pro všechna modbusová zařízení, na kanál připojená. Řiďte se podle dokumentace k cizím zařízením. Pokud jsou na nich parametry nastavitelné, zkontrolujte, zda nastavení na nich odpovídá nastavení v kanálu PLC.
Při komunikaci Modbus TCP tyto parametry sériové linky nejsou uvedeny, nemají zde význam.
Pravým kliknutím na kanál přidáme zařízení (device). Zařízení představuje modbusový server (jednu linkovou adresu) a obsahuje modbusové proměnné. Na sběrnici může být až 255 zařízení, v praxi se používá nejvýše cca. 60 až 80 zařízení. Nastavíme parametry zařízení:
Vlastnosti zařízení
Parametry Modbusu
Definice prototypu
Informace o zařízení
Dvojitým kliknutím na zařízení se otevře pracovní plocha pro definování skupin a proměnných v zařízení. Komunikace protokolem Modbus probíhá ve skupinách datových bodů, v rámci jedné skupiny (jednoho Modbusového dotazu pro čtení nebo zápis) se přenáší více registrů, které následují za sebou. Komunikace po skupinách optimalizuje provoz na sběrnici a zvyšuje rychlost přenosu dat. Proměnné se proto vždy definují jako členy určité skupiny.
Nejprve tedy definujeme skupinu registrů pro čtení. To je nutné i v případě, že čteme pouze jeden registr.
Parametry skupiny Modbus
Příklad: skupina má ze zařízení číst Modbusové registry 11 až 15. Hodnoty skupiny nastavíme takto: Počáteční prvek bude 11, Počet prvků bude 5.
V další části definujeme datové body, do nichž bude driver načítat hodnoty z registrů, vyčtených při komunikaci skupiny.
* BuiltIn - vybereme, pokud chceme číst hodnotu jakéhokoli jiného typu. Typ upřesníme v poli Typ ST. * Array - vybereme, pokud chceme číst pole hodnot do proměnné typu pole (array).
Předdefinované transformace jsou tyto
Autogen
Mapování
Parametry datového bodu Modbus
Definice toho, z kterého registru a jak se bude proměnná číst. Základní vlastnosti, jako Modbusová funkce a počáteční číslo registru, jsou zadány ve skupině, do níž je proměnná přiřazena. Veškerá další nastavení se vztahují relativně k počátečnímu registru skupiny. Jako příklad je uvedena skupina registrů, která začíná Modbusovým registrem 2064 a obsahuje celkem 8 registrů:
Pořadí bytů (MSB, LSB) odpovídá pozici v Modbusovém telegramu. Driver tato data Skupiny takto načítá a při rozebírání Skupiny do proměnných musíme toto pořadí respektovat.
Mezera offsetu pro zápis
Číslo rozhraní offsetu, kam až se zapisuje (pokud proměnná je určena pro zápis). Počítá se v bytech. Příklad: pro zápis do registru 2068 by Mezera offsetu pro zápis byla 10. Musí platit, že Mezera offsetu pro zápis = Offset dat + Délka multibyte.
Offset dat (Parser)
Číslováno od 0; určuje, na kolikátém bytu (ne registru!) začínají data proměnné. Příklad: při čtení z registru 2068 by Offset dat byl 8. Maximální hodnota je dvojnásobek počtu registrů skupiny snížený o 1, čímž by se četl poslední byte ve skupině. Všimněme si, že v Modbusovém telegramu se nejprve přenáší vyšší byte (MSB) a pak nižší byte (LSB); při mapování do proměnných bytového typu (BYTE, SINT, USINT) má pak vyšší (významnější) byte Modbusového registru nižší hodnotu Offsetu dat.
Bitový offset (Parser)
Posouvání v bytu mezi jednotlivými bity - pro čtení bitových proměnných funkcemi F01 Read Coils, F02 Read Discrete Inputs, F03 Read Holding Registers, F04 Read Input Registers a zápis F05 Write Single Coil, F06 Write Single Register, F15 Write Multiple Coils a F16 Write Multiple Registers. Pro čtení nebo zápis 3. bitu v bajtu (pozor, ne vždy v registru!). Počítá se od 0, tedy pro čtení 4. bitu (bit 3) bude Bitový offset = 3. Nastavuje se v intervalu 0 až 7.
Délka Multibyte (Parser)
Kolik bytů (ne registrů!) se má číst do proměnné nebo zapisovat do Modbusové tabulky. Obvykle je to 2, neboť jeden Modbusový registr má 16 bitů = 2 byty. Ve zvláštních případech, jako jsou kumulované hodnoty u elektroměrů, které využívají 4 byty, může být Délka Multibyte větší. U bitových proměnných je Délka Multibyte = 1 (stačí 1 byte, ten, který obsahuje požadovaný bit).
Pořadí Multibyte (Parser)
V tomto řetězci je možné zvolit pořadí bytů, v jakém se budou z telegramu mapovat na datový typ proměnné. Řeší se tím různé varianty formátů typu „rotate“, „non-rotate“, „byte swap“, „word swap“, „Intel byte order“ atd. Výchozí hodnota je „12345678“, obvykle ji není nutné měnit.
Výše uvedená pravidla můžeme shrnout do čtyř odstavců:
1. Čtení vstupních / uchovávacích (holding) registrů
Pokud se čtou vstupní nebo uchovávací registry, musíme určit, kde má v rámci skupiny čtení začít a kolik bytů se má číst. Skupina je vždy definována počátečním registrem a počtem prvků. Tyto hodnoty představují Modbusové registry a délku telegramu.
Když vytvoříme nový datový bod, musíme ho přiřadit do skupiny a určit mu datový typ. Datový typ musí odpovídat formátu čtené hodnoty a je důležité, aby měl stejný počet bitů jako tato čtená hodnota. Popisy datových typů najdete v tabulce základních datových typů.
Nastavení datového bodu určuje, která a jak velká část telegramu načteného skupinou přísluší tomuto datovému bodu. Zadává se počet bitů a bytů, ne registrů. Registr má 2 byty = 16 bitů.
Délka multibyte určuje, kolik bytů přísluší datovému bodu. Tato hodnota musí odpovídat vybranému typu datového bodu. Například pro typ INT, který má 16 bitů, je hodnota multibyte = 2.
Dále musíme specifikovat, ve které části telegramu má čtení začít. Pro čtení registrů se tento parametr nastavuje v položce Offset dat.
První čtený byte má Data Offset = 0, druhý byte má Data Offset = 1, atd. Takže pokud datový typ je INT a má se číst hodnota z třetího registru v rámci skupiny, což je 5.-6. byte v telegramu, Data Offset bude 4.
Pomocí funkce pro čtení registrů lze také číst bity. Registr se rozebere některou z funkcí pro bitovou dekompozici, viz bloky FUPLA.
Pomocí data offsetu se posuňte na byte, který se má číst, a bitovým ofsetem se pohybujte v bytu mezi bity. Pro tento typ datového bodu musí být proměnná typu bit nebo bool.
Pozor také na to, že pořadí bytů v telegramu na obrázku výše je MSB –> LSB. Pokud se má číst LSB prvního registru, data ofset musí být 1. Pokud je datový bod typu 8bit a má se číst MSB, data ofset je sudé číslo. Pokud se má číst LSB, data ofset je liché číslo.
2. Zápis holding registrů
Parametry pro zápis do registrů jsou definovány podobně jako u definice čtení z registrů. Jediný rozdíl je v tom, že u zápisu se definuje také poslední byte, do něhož se má zapisovat.
Pokud mají být zapsány první 2 byty telegramu, délka multibyte je 2, data offset je 0 a mezera ofsetu pro zápis je 2. Znamená to, že do intervalu mezi interface 0 a interface 2 jsou zapsány 2 byty.
Pokud se mají zapsat další 2 byty, data ofset je 2 a mezera ofsetu pro zápis je 4.
Stejně, jako se čtou jednotlivé bity, se jednotlivé bity zapisují. S využitím parametru data ofset se posuneme na příslušné místo v telegramu, a bitovým ofsetem se posuneme na požadovaný bit v tomto bytu. Je třeba si uvědomit, že se vždy zapisuje celý byte nebo registr. Pokud má tedy dojít k zápisu jen jednoho bitu, ostatní bity, které nejsou definovány jako datové body, budou vyplněny nulami.
Obecně řečeno, pokud má skupina více registrů, řada registrů musí být spojitá (bez mezer). Pokud například mají být zapsány registry 1,2,4 a 5 a registr 3 nesmí být přepsán, je nutné vytvořit dvě nezávislé skupiny pro zápis.
Pokud potřebujeme zapsat jen několik bitů, je jednodušší zapsat hodnotu jako číslo tvaru INT, kde se v programu složí bitová kompozice. Jestliže zařízení podporuje také bitově orientované funkce, je vhodné je využívat.
3. Čtení coilů a diskrétních vstupů
Při čtení coilů a diskrétních vstupů se parametry nedefinují pomocí čísla registru. Bitově orientovaná tabulka s šestnáctibitovými registry nepracuje. Místo toho je definováno číslo coilu. Pokud tedy chceme číst 10 coilů počínaje coilem 150, počáteční prvek skupiny je 150 a počet prvků je 10.
Datový typ datového bodu bude bit.
Délka multibyte se nastaví na 1. Posun v bytovém telegramu je zařízen kombinací bitového ofsetu a data ofsetu. Bitový ofset se zadává v rozsahu 0 až 7.
Pokud by byl bitový ofset větší než 7 bitů, je nutné zvýšit data ofset o 1 (byte) a bitový ofset začíná opět na 0. Příklad: pokud má být datový bod čten s posunem 35 bitů, bitový ofset je 2 a data ofset je 4.
Tyto parametry lze snadno spočítat:
4. Zápis coilů
Zápis coilů probíhá hodně podobně jako čtení coilů. Opět: jediný rozdíl je mezera ofsetu pro zápis.
Je-li data ofset = 0, mezera ofsetu pro zápis je 1.Pokud se datový bod posune v telegramu tak, že data ofset je větší než 0, mezera ofsetu pro zápis je vždy dat ofset + 1.
Bitový posun se nastavuje stejně jako u čtení coilů.
Pro rychlejší mapování modbusových parametrů je možné parametry mapovat přímo z editoru komunikačního kanálu, který zobrazíte dvojklikem na komunikační kanál nebo pravým klikem myši na komunikační kanál - Otevřít editor.
Záložky „Ofset dat“, „Bitový ofset“, „Délka MultiByte“ a „Mezera ofsetu pro zápis“ umožňují rychlejší zápis modbusových parametrů
Pro vyexportování modbusového zařízení do CSV formátu klikněte pravým tlačítkem myši na zařízení - Export zařízení.