MODBUS Client
Protokol MODBUS Client
Podporované typy a verzie zariadení
Konfigurácia komunikačnej linky
Parametre protokolu linky
Konfigurácia komunikačnej stanice
Konfigurácia meraných bodov
Poznámka k zariadeniu FloBoss 103
Poznámka k regulátorom Honeywell
Literatúra
Zmeny a úpravy
Revízie dokumentu
Podporované typy a verzie zariadení
Protokol realizuje klientsku (master) komunikáciu s ľubovoľnými zariadeniami podporujúcimi štandard MODBUS RTU a MODBUS ASCII vo verziách sériovej komunikácie a štandard MODBUS TCP alebo variantu MODBUS over TCP v prípade TCP/IP komunikácie. Navyše podporuje rozšírenia:
Bytový mód umožňujúci pracovať so zariadeniami, ktoré vracajú hodnoty registrov ako 1 bajt (na rozdiel od MODBUS štandardu, v ktorom je hodnota registra 2-bajtová).
Variabilný mód umožňujúci pracovať so zariadeniami, ktoré vracajú hodnoty registrov s inou veľkosťou ako sú štandardné 2 bajty. Implementovaný bol kvôli podpore prietokomera FloBoss 103 od firmy Fisher Controls International (v súčasnosti súčasť Emerson Process Management): 1-bajtové premenné, 4-bajtové unsigned/signed integery, textové reťazce dĺžky 10,12,20,40 znakov, 6-bajtová časová značka a iné.
Konfigurácia komunikačnej linky
Kategória linky Serial (sériová komunikácia)
Kategória linky SerialOverUDP Device Redundant (sériová komunikácia).
Kategória linky RFC2217 Client (sériová komunikácia).
Kategória linky TCP/IP-TCP a TCP/IP-TCP Redundant (MODBUS TCP, MODBUS over TCP). Bežne sa používa rezervovaný TCP port číslo 502, ale je možné použiť akýkoľvek iný podľa nastavenia komunikujúceho zariadenia. Číslo linky je nepoužité, nastavte napr. hodnotu 1.
Pozn: V prípade redundantných systémov je možné zadávať aj viacero mien/adries oddelených čiarkami.
Pozn: V prípade PLC typu WAGO 750-8100 a komunikácie cez MODBUS TCP bolo nutné nastaviť v časových parametroch stanice malú periódu dotazovania (napr. 1 sekunda). V prípade väčšej periódy (5 sekúnd) dochádzalo pomerne často k zatváraniu spojenia zo strany PLC.
Parametre protokolu linky
Dialóg konfigurácia linky - záložka Parametre protokolu.
Ovplyvňujú niektoré voliteľné parametre protokolu. Môžu byť zadané nasledovné parametre protokolu linky:
Tab. č. 1
Parameter | Popis | Jednotka / rozmer | Náhradná hodnota |
|---|---|---|---|
Immediate Disconnect | Parameter je implementovaný iba pre kategórie linky TCP/IP-TCP a TCP/IP-TCP Redundant. Parameter aktivuje rozpájanie sa TCP spojenia po vykonaní každého čítacieho cyklu, prípadne po zápise hodnoty. Parameter bol implementovaný kvôli problémom so stabilitou spojenia na mobilných GPRS sieťach. | YES/NO | NO |
Tcp No Delay | Nastavenie "Tcp No Delay"=True parametra spôsobí nastavenie nízkoúrovňového parametra socketov TCP_NODELAY, čím sa vypne prednastavené spájanie paketov. | YES/NO | NO |
Konfigurácia stanice
Komunikačný protokol "Modbus Client".
Adresa stanice je dekadické číslo zvyčajne v rozsahu 1 až 247. Adresa 0 je rezervovaná ako broadcast.
Parametre protokolu stanice
Dialóg konfigurácia stanice - záložka Parametre protokolu.
Ovplyvňujú niektoré voliteľné parametre protokolu. Môžu byť zadané nasledovné parametre protokolu stanice:
Tab. č. 1
Parameter | Popis | Jednotka | Náhradná hodnota |
|---|---|---|---|
Retry Count | Maximálny počet opakovaní výzvy. Ak po poslaní tohto počtu výziev nedôjde odpoveď, stanica prechádza do stavu komunikačnej chyby. | s | 2 |
Retry Timeout | Timeout pred opakovaním výzvy, pokiaľ neprišla odpoveď. | s | 0.1 |
Wait First Timeout | Timeout medzi poslaním výzvy a prvým čítaním odpovede. | s | 0.1 |
Wait Timeout | Timeout medzi čítaniami odpovede. | s | 0.1 |
Max. Wait Retry | Maximálny počet opakovaní čítania odpovede. | - | 20 |
Start Silent Interval | "Start silent interval" pred štartom vysielania v RTU móde. | ms | 50 |
Stop Silent Interval | "Stop silent interval" po ukončení vysielania v RTU móde. | ms | 50 |
Little Endian Mode | Poradie bajtov v Little-endian móde pre 4-bajtové premenné. Jednotlivé možnosti udávajú, do ktorých bajtov (1-najnižší, 4-najvyšší) pôjdu jednotlivé bajty z komunikácie:
| - | 2143 |
Byte mode | Špeciálny bajtový mód prenosu, v ktorom majú hodnoty registrov dĺžku 1 bajt a nie 2 byty ako je definované v špecifikácii protokolu MODBUS. | YES/NO | NO |
Variable mode | Špeciálny variabilný mód prenosu, v ktorom majú hodnoty registrov variabilnú dĺžku. Podľa toho, či je Variable mode nastavený na hodnotu little-endian alebo big-endian sa aplikuje príslušné dátové kódovanie t.j. tzv. endianness (little-endian=prvý je odosielaný menej významný byte, big endian=prvý je odosielaný významnejší byte). Hodnota OFF vypína variabilný mód. | OFF | OFF |
Full debug | Výpis dodatočných ladiacich informácií o komunikácii na linke. | YES/NO | NO |
Protocol mode | Mód protokolu: RTU alebo ASCII. Nastavenie sa aplikuje iba v prípade sériovej komunikácie. | "RTU " "ASCII" | "RTU" |
Addressing model | Nastavenie adresného modelu protokolu MODBUS: Poznámka: Implicitná hodnota je MODBUS PDU, v prípade nastavenia MODBUS data Model je objekt s adresou X adresovaný v MODBUS PDU ako X-1. | "MODBUS PDU" | "MODBUS PDU" |
TCP/IP protocol variant | Výber varianty protokolu v prípade TCP/IP komunikácie: | "MODBUS TCP" | "MODBUS TCP" |
Max. Registers | Maximálny počet registrov žiadaný v jednej výzve. | - | 100 |
Max. Bytes | Maximálny počet bytov žiadaný v jednej výzve (iba v "Byte mode"). | - | 100 |
Skip Unconfigured | Nikdy nežiadaj hodnoty z adries, ktoré nie sú nakonfigurované. | YES/NO | NO |
Check Receive Length | Ak je parameter nastavený na YES, tak pri prijatí odpovede na čítanie dát sa kontroluje, či dĺžka dát v odpovedi zodpovedá množstvu registrov v požiadavke na čítanie:
Kontrola má zmysel na linkách s vysokými (a variabilnými) latenciami - napr. GPRS siete - na detekciu a vyhnutie sa situácii, keď dôjde k opakovaniu výzvy (#1) v dôsledku timeoutu a následne k príjmu odpovede na opakovanú výzvu, pričom táto je už považovaná za odpoveď na ďalšiu výzvu (#2). To spôsobí, že merané body adresované výzvou #2 získajú chybné hodnoty. | YES/NO | NO |
Konfigurácia meraných bodov
Možné typy hodnôt bodov pre nevariabilný mód: Ai, Ao, Di, Do, Ci, Co, TxtI.
Možné typy hodnôt bodov pre variabilný mód: Ai,Ao,Di,Do,Ci,Cout,TxtI,TxtO,TiA.
Adresa meraného bodu:
V protokole MODBUS je základný adresný priestor rozdelený na objekty typov:
Coils (čítanie/zápis) - binárne stavy.
Discrete Inputs (čítanie) - binárne vstupy.
Holding Registers (čítanie/zápis) - stavové registre.
Input Registers (čítanie) - vstupné registre.
V každom adresnom priestore daného typu registra je nezávislá adresácia s veľkosťou adresy 2 bajty, to znamená fyzicky adresy od 0 do 65535 (tzv. MODBUS PDU addressing model). Niektoré zariadenia pracujú s adresáciou od 1 (tzv. MODBUS data Model), v takom prípade treba pri konfigurácii meraných bodov v systéme D2000 odčítať v adrese -1 alebo zmeniť nastavenie parametra protokolu Addressing model na MODBUS data Model.
Adresa meraného bodu môže mať základný alebo rozšírený tvar (pre variabilný mód).
Základný tvar adresy meraného bodu:
Tvar adresy je [I|U|Uu|Ul|f|F|L|Ll|S|Sl|B|X|sn.|an.|An.][d|D][b][s]RdFn[-WrFn[d]].Address[.BitNr] kde:
Prvé písmeno (písmená) udáva typ meraného bodu:
I - Integer16 (implicitná hodnota, keď nie je uvedené inak) - jeden register znamienkovo.
U - Unsigned16 - jeden register neznamienkovo.
Uu - Unsigned16 - jeden register neznamienkovo, pričom sa z neho berie do úvahy iba vyšší bajt (1. v poradí)
Ul - Unsigned16 - jeden register neznamienkovo, pričom sa z neho berie do úvahy iba nižší bajt (2. v poradí)
f - Float (4 byty = 2 registre) - čítajú sa 2 registre s adresou Address a Address+1, prenášané v big-endian poradí (viď Poznámku).
F - Float (4 byty = 2 registre) - čítajú sa 2 registre s adresou Address a Address+1, prenášané v little-endian poradí (tzv. Modicon formát) (viď Poznámku).
L - Unsigned long (4 byty = 2 registre) - čítajú sa 2 registre s adresou Address a Address+1, neznamienkovo, prenášané v big-endian poradí (viď Poznámku).
Ll - Unsigned long (4 byty = 2 registre) -čítajú sa 2 registre s adresou Address a Address+1, neznamienkovo, prenášané v little-endian poradí (viď Poznámku).
S - Signed long (4 byty = 2 registre) - čítajú sa 2 registre s adresou Address a Address+1, znamienkovo, prenášané v big-endian poradí (viď Poznámku).
Sl - Signed long (4 byty = 2 registre) - čítajú sa 2 registre s adresou Address a Address+1, znamienkovo, prenášané v little-endian poradí (viď Poznámku).
B - Byte neznamienkovo, iba horných 8 bitov hodnoty registra.
X - Byte neznamienkovo, iba dolných 8 bitov hodnoty registra.
sn. - Textový string s dĺžkou n znakov, jeden register je jeden znak, číta sa n registrov s adresou Address až Address+n-1.
an. - Textový string s dĺžkou 2*n znakov, jeden register sú dva ASCII znaky, znaky sú prenášané v poradí v akom sú v reťazci, číta sa n registrov s adresou Address až Address+n-1.
An. - Textový string s dĺžkou 2*n znakov, jeden register sú dva ASCII znaky, znaky sú prenášané v big-endian poradí (tj. "1234" sa prenáša ako "2143"), číta sa n registrov s adresou Address až Address+n-1.
Modifikátor d hovorí, že číslo je 8-bajtové číslo (4 za sebou idúce registre). Je použiteľný pri typoch L, Ll, S, Sl, F,f a pomocou neho je možné zadefinovať 8 bajtový integer bez znamienka/so znamienkom ako aj 8-bajtový float (varianty big endian <B8>..<B1> a little endian <B1>..<B8>).
Modifikátor D hovorí, že číslo je 8-bajtové číslo (4 za sebou idúce registre). Je použiteľný pri typoch Ll, Sl, F a pomocou neho je možné zadefinovať 8 bajtový integer bez znamienka/so znamienkom ako aj 8-bajtový float (vo formáte little endian <B2><B1><B4><B3><B6><B5><B8><B7>).
Poznámka: pri použití modifikátorov d a D, musí byť meraný bod Analógového typu (Ai), pretože celočíselný typ (Ci) v D2000 je implementovaný ako 4-bajtová premenná a mohlo by dôjsť k pretečeniu. Zápis celočíselnej hodnoty (Co) ako 8-bajtového typu je podporený.Modifikátor b hovorí, že číslo je BCD kódované. Je použiteľný pri meraných bodoch typu I, U, B, L, Ll.
Modifikátor s hovorí, že sa číta register so stavom premennej (Unsigned16) na adrese Address a za ním Float hodnota v big endian formáte na adrese Address+1 .. Address+2. Je použiteľný pri meraných bodoch typu f a implementovaný kvôli kalorimetru Endress+Hauser RMS621. Tabuľka uvádza hodnoty Status a prevod na D2000 príznaky.
Status register
D2000 príznaky
0 : Invalid value
Weak
1 : Measured value valid
Valid
2 : Overflow warning
3 : Overflow error
4 : Underflow warning
5 : Underflow error
6 : Saturated steam alarm
7 : Error in differential pressure calculation
8 : Wrong medium for DP calculation
9 : Wrong value range - DP calculation inaccurate
10 : Differential pressure - general error
11 : Range overshoot (Tsat > 350 etc.) on
12 : Change in state of aggregation
26 : Differential pressure --> general error
99 : No measured value is assigned to the register in the setup of the ModBusWeak
Parameter RdFn je funkcia Modbus protokolu pre čítanie údajov. Implementované sú nasledovné funkcie:
1 - Read Coils: čítanie binárnych stavov.
2 - Read Discrete Inputs: čítanie binárnych vstupov.
3 - Read Holding Registers: čítanie stavových registrov (Integer16/Unsigned16 a Float32 - číta 2 za sebou nasledujúce registre).
4 - Read Input Registers: čítanie vstupných registrov (Integer16/Unsigned16 a Float32 - číta 2 za sebou nasledujúce registre).
0 - V tomto prípade nebude vykonávané čítanie hodnoty ale iba zápis, je nutné aby bola nastavená funkcia pre zápis WrFn.
Parameter WrFn je funkcia Modbus protokolu pre zápis údajov. Implementované sú nasledovné funkcie:
5 - Write Single Coil: zápis binárnych stavov (implicitne pre Read Coils).
6 - Write Single Register: zápis stavových registrov (implicitne pre Read Holding Registers).
16 - Write Multiple Registers: zápis viacerých stavových registrov, táto funkcia musí byť použitá pri zápise dvojregistrových typov (ako Float, Unsigned long atď.).
Pozn: funkciu je možné použiť aj na zápis viac ako dvoch registrov naraz, pokiaľ sa použije textový string. Príklad:
ak do textového meraného bodu s adresou a3.0-16.#8A00 (t.j. textový reťazec pokrývajúci 3 registre, t.j. majúci dĺžku 6 znakov) zapíšeme reťazec '123456', tak sa zapíšu do registrov 0x8A00 až 0x8A02 hexadecimálne hodnoty 0x3132, 0x3334 a 0x3536 (ASCII kód '1' je 0x31, '2' je 0x32 atď).22 - Mask Write Register: zápis ovplyvňujúci iba hodnotu konkrétneho bitu BitNr stavového registra. Možné použiť iba pre hodnoty typu Do s nastaveným parametrom adresy BitNr.
Parameter d aktivuje funkciu "delayed write". Odoslanie hodnoty sa oneskorí až do príchodu požiadavky na zápis hodnoty objektu bez tohto parametra d. Všetky naakumulované požiadavky na zápis sa následne odošlú a ak je nastavená funkcia na zápis WrFn na "Write Multiple Registers" tak sa snaží odoslať hodnoty v jednom pakete.
Parameter Address je dvojbajtová adresa registra (0-65536), viď tiež parameter protokolu Addressing model.
Pozn: adresu je možné zadávať aj v hexadecimálnom tvare za použitia mriežky (#), napr. #50CEParameter BitNr je číslo bitu v slove. Pre binárne stavy a vstupy sú prípustné hodnoty 0-7, pre vyčítanie bitu zo 16-bitových stavových alebo vstupných registrov sú prípustné hodnoty sú 0-15.
Poznámka ku poradiu prenášaných bytov a registrov
1. Protokol MODBUS používa štandardne tzv. big-endian, čiže významnejší byte registra (MSB) je prenášaný ako prvý. Príklady:
Prijaté byty registra MSB-LSB | Typ meraného bodu | Hodnota |
|---|---|---|
0x00 0x01 | I, U | 1 |
0xFF 0xFE | I | -2 |
0xFF 0xFE | U | 65534 |
0x01 0x02 | B | 1 |
0x01 0x02 | X | 2 |
2. V prípade čítania hodnôt z dvoch registrov v poradí big-endian sú prijaté byty analyzované takto:
Most significant register (Adresa ADR) | Least significant register (Adresa ADR+1) | ||
MSB | LSB | MSB | LSB |
Príklady pre dvojregistrové hodnoty v big-endian poradí:
O protokole Modbus Client si môžete prečítať aj blogy:
Komunikácia – Modbus protokol
Komunikácia – Modbus protokol, časť 2
Komunikácia - HART, Modbus a papagáj