Kontaktné údaje
- info@ipesoft.com
- +421 907 703 854
- Obchodná 9076/3D
010 08 Žilina
Slovensko
© Copyright IPESOFT 2023
Protokol Modbus navrhli v r. 1979 vo firme Modicon na komunikáciu s ich PLC ako jednoduchý a robustný sériový protokol typu master-slave. V súčasnosti je za jeho rozvoj zodpovedná organizácia Modbus (http://www.modbus.org/) a aktuálna verzia štandardu je V1.1b3.
Modbus pozná iba 4 typy objektov:
Každý typ objektu je adresovaný 16-bitovou adresou (0-65535). Dáta sú 16-bitové, posielané ako big endian (najskôr vyšší bajt , potom nižší). V prípade binárov sa posiela v 16 bitoch šestnásť hodnôt za sebou nasledujúcich objektov (napr. s adresou 16, 17, 18..31)
Na čítanie každého typu objektu a zápis typov, ktoré nie sú read-only, má protokol definované funkcie:
Pri čítaní sa špecifikuje adresa počiatočného objektu a počet čítaných objektov (1-2000 pre binárne, 1-125 pre analógové) tak, aby celková dĺžka vrátených dát nepresiahla 250 bajtov. Existuje aj funkcia Write Multiple Registers (16) na zápis viacerých registrov naraz.
Odpoveďou na čítanie alebo zápis je paket s dátami alebo chybový kód s číslom výnimky popisujúcim, prečo čítanie alebo zápis zlyhalo. Paket s dátami obsahuje informáciu o veľkosti dát v bajtoch.
Protokol definuje aj chuťovky typu Read/Write File Record a rôznu diagnostiku, ale tie bežné implementácie neobsahujú. Takže klient sa periodicky dotazuje na hodnoty všetkých objektov rôznych typov (čím viac ich dokáže dať do jednej výzvy, tým kratšie trvá celkové obvolanie) a server posiela odpovede. Žiadna podpora zmenových dát ako má napr. IEC 60870-5-101, IEC 60870-5-104, asynchrónny mód OPC, TG809 a iné protokoly. Žiadna podpora pre príznaky (validita, weak a pod). Žiadna podpora pre časové značky alebo pre vyčítavanie histórie.
Protokol používa jednobajtovú adresáciu slave zariadenia (štandardne 1-247, vyššie adresy sú rezervované), adresa 0 je broadcast. Na sériovej linke teda môže byť viacero zariadení, každé z nich musí mať unikátnu adresu.
Existuje RTU variant protokolu (binárne kódovanie) a ASCII variant (BCD kódovanie, takže je síce ‚čitateľný’ v textovom výpise, ale dvakrát pomalší, keďže každý bajt sa BCD kóduje dvoma bajtami).
Existuje aj RTU varianta pre TCP spojenia (TCP port 502) – a to dokonca dve:
Takže toľko teória. Aké komplikácie môžu vzniknúť v praxi?
Jednoduchá odpoveď je, že všetky :)
Kvôli niektorým zariadeniam boli zavedené 2 módy adresácie:
"MODBUS PDU" - dáta sú adresované od 0 do 65535
Adresu meraného bodu je možné v konfiguračnom nástroji D2000 CNF zadávať v decimálnom alebo v hexadecimálnom tvare za použitia mriežky (#), napr. #50CE. Uľahčuje to konfiguráciu a kontrolu adries, pokiaľ dokumentácia konkrétneho zariadenia používa hexadecimálny tvar.
D2000 KOM sa snaží posielať výzvy na čítanie čo najväčšieho počtu registrov (ktorý je možné obmedziť parametrom “Max. Registers“). Niektoré zariadenia ale vracajú chyby, pokiaľ výzva obsahuje aj adresy, ktoré neobsahujú dáta. Napr. ak výzva obsahuje adresu počiatočného objektu 100 a počet čítaných objektov 4 a zariadenie má definované objekty pre adresy 100, 101, 103 (ale nie 102), tak môže vrátiť chybu. Pre tento prípad existuje parameter protokolu “Skip Unconfigured“, ktorý spôsobí, že KOM proces nebude žiadať hodnoty pre adresy, na ktorých nemá definované merané body. Vyššie uvedená požiadavka by bola po aktivácii parametra “Skip Unconfigured“ rozdelená na dve: adresa 100, dĺžka 2 (t.j. adresy 100 a 101) a adresa 103, dĺžka 1.
Keďže Modbus definuje iba bináry a 16-bitové unsigned premenné (posielané ako big endian, t.j. vyšší bajt prvý, potom nižší bajt), rôzne implementácie si podľa potreby zadefinovali zvyšok pomocou reinterpretovania dát:
Celočíselné premené môžu byť navyše kódované binárne (v jednom bajte hodnota 256 hodnôt) alebo BCD (v jednom bajte 100 hodnôt).
Všetky horeuvedené typy sú podporené v adresácii meraných bodov v D2000-ke v protokole Modbus IDA Client.
Na pokračovanie článku sa môžete tešiť zase o týždeň ..
14.7.2017, Ing. Peter Humaj, www.ipesoft.com