Kontaktné údaje
- info@ipesoft.com
- +421 907 703 854
- Obchodná 9076/3D
010 08 Žilina
Slovensko
© Copyright IPESOFT 2023
Štandard síce definuje, že register má 16 bitov, ale existujú aj implementácie, ktoré ho nerešpektujú:
Sú aplikácie, ktoré vyžadujú, aby bolo zapísaných viacero registrov naraz funkciou Write Multiple Registers (16) . Príkladom je už spomenutá rada elektromerov ABB A4x, ktorá podporuje synchronizáciu času a dátumu zápisom do registrov. Tem musí prebehnúť jedným zápisom funkciou Write Multiple Registers (16), ktorý zapíše naraz 3 registre, t.j. 6 bajtov.
Niečo podobné je v D2000-ke možné nakonfigurovať dvoma spôsobmi.
Prvý spôsob používa zápis meraného bodu konfigurovaného ako textový reťazec s dĺžkou 3 registre resp. 6 znakov (8-bitových ). V skripte je možné vyskladať reťazec podľa aktuálneho dátumu a času a následne ho zapísať.
Druhý spôsob využíva tzv. oneskorený zápis.
Pokiaľ má výstupný meraný bod v D2000 nakonfigurovanú funkciu zápis Write Multiple Registers (16) a za ňou príznak ‘d’, zápis sa odloží a je vykonaný až vtedy, keď príde požiadavka na zápis pre bod, ktorá nemá nakonfigurovaný odložený zápis. Následne sa snaží KOM proces vykonať všetky naakumulované zápisy jediným zápisom Write Multiple Registers . Tento spôsob je výhodný pri zápisoch, ktoré nepracujú s bajtovo a textovo orientovanými hodnotami (ako čas a dátum vyššie) ale napr. s 16/32/64-bitovými integermi alebo 32/64 float hodnotami.
Najvýraznejším príkladom, ako sa dá Modbus využiť na prenos ‘skoro všetkého’, sú už spomenuté elektromery ABB A4x. Okrem už spomínaného zápisu času majú podporené nasledovné vlastnosti:
V konkrétnej aplikácii sme implementovali čítanie profilov (historických hodnôt), čítanie a zápis ich konfigurácie, čítanie a zápis konfigurácie alarmov a čítanie event logov (informácie o alarmoch a udalostiach, ktoré nastali a elektromer si ich udržuje v pamäti).
Všetky spomenuté špeciality boli implementované na aplikačnej úrovni, v ESL skripte. Využívali možnosť zo skriptu zastaviť a spustiť komunikáciu s konkrétnou stanicou (a čakať na načítanie hodnôt vstupných meraných bodov) ako aj možnosť zo skriptu dynamicky zmeniť adresu meraného bodu (a znovu čakať na načítanie hodnoty).
Pre jeden elektromer bolo vytvorených viacero staníc v D2000. Jedna slúžila na pravidelné čítanie hodnôt, ostatné boli štandardne vypnuté a v prípade potreby sa používali na vyššie spomenutú aplikačnú funkcionalitu. Napr. na čítanie profilov boli potrebné tri – jedna obsahovala body pre výber kanála (OBIS kód objektu) a nastavenie času a dátumu pre vyčítavaný profil, cez druhú sa následne načítavali informácie o profile (interval, mierka, či sa jedná o unsigned alebo signed dáta) a cez tretiu samotné historické hodnoty.
GSM siete a časové pomery v nich. V čom je problém? Na jednoduchej sériovej linke odpoveď buď príde (v definovanom čase) alebo nie. Na GSM sieti – v konfigurácii, že D2000 KOM posielal výzvy cez GSM sieť na Moxa OnCell modem, za ktorým boli zariadenia na sériovej linke – sme sa stretli s problémom, že odpoveď na výzvu prišla niekedy s takým oneskorením, že medzitým KOM proces poslal výzvu znovu. Takže na druhú výzvu spracoval odpoveď prvej výzvy, všetko bolo v poriadku. Následne poslal výzvu na čítanie iných dát a na ňu prijal odpoveď druhej výzvy. Keďže odpoveď obsahuje iba dĺžku dát, ale nie ich adresu, došlo k „domixovaniu“ dát.
Čo s tým? Jednou pomôckou je nastaviť „dostatočne veľké“ časové konštanty pre príjem odpovede, aby pokryli aj variabilné oneskorenia GSM siete. Druhou pomôckou je parameter „Check Receive Length“, ktorý porovnáva dĺžku dát v odpovedi s dĺžkou, ktorá bola poslaná vo výzve. Pokiaľ sa nezhodujú, paket je zahodený. Parameter je podporený pre štandardný a bajtový mód, zatiaľ nie pre variabilný mód.
D2000 KOM má implementovanú aj serverovú stranu protokolu Modbus, takže vie slúžiť aj ako Modbus server. Podporuje všetky štandardné funkcie na čítanie a zápis a výstupné merané body vie zverejňovať ako 16/32-bitové celočíselné hodnoty (tj. 1 a 2-registrové) a 32-bitové reálne hodnoty (2-registrové), voliteľne v little/big endian formáte. Na rozdiel od klientskej strany Modbus protokolu nikdy nevznikla potreba implementovať veci ako variabilný alebo bajtový mód, textové premenné a podobne, preto – asi aj preto, že v prípade potreby komunikácie D2000 s nadradeným systémom existuje viacero modernejších protokolov implementovaných v D2000 (OPC server, IEC104 server, IEC101 server, ICCP server), ktoré sú zmenovo orientované, podporujú časové značky, prípadne autentifikáciu a ďalšie možnosti. Preto je serverová časť Modbus protokolu relatívne jednoduchá a nemá zmysel písať o nej samostatný článok.
Cieľom tohto článku bolo ukázať na konkrétnych príkladoch, aké rôzne ‘nárečia’ môžu v praxi vzniknúť z jednoduchého protokolu typu Modbus. Zoznam výnimiek a špecialít určite nie je úplný – spomenuli sme iba niektoré z problémov, s ktorými sme sa v praxi stretli. Ako hovorí príslovie, šedivá je teória, zelený strom praxe .. a občas na ňom vyrastú listy (alebo priam haluze :), že laik žasne a odborník sa diví ..
21.8.2017, Ing. Peter Humaj, www.ipesoft.com