Kontaktné údaje
- info@ipesoft.com
- +421 907 703 854
- Obchodná 9076/3D
010 08 Žilina
Slovensko
© Copyright IPESOFT 2023
Sotva som v pondelok ráno zavesil na blog prvú časť článku o komunikačnom protokole Modbus a naplánoval uverejnenie druhej (už napísanej) časti o týždeň, prišiel kolega s tým, že u zákazníka je potrebné sfunkčniť komunikáciu s prietokomerom Endress+Hauser Proline t-mass A 150. A že komunikuje cez HART protokol a je tam nejaký HART/Modbus prevodník. Tento článok popisuje skúsenosti s rozbehávaním komunikácie v tejto konfigurácii.
U zákazníka sa nacházal prevodník HART na Modbus TCP (HART ETH) od firmy Papouch. Na jednej strane pripojený k ethernet sieti (inštaláciu, konfiguráciu a nastavenie IP adresy realizoval zákazník), na druhej strane 4-20 mA prúdovou slučkou k prietokomeru E+H.
Protokol HART (Highway Addressable Remote Transducer) je digitálny protokol, ktorý na prenos digitálnych údajov využíva existujúcu 4-20mA prúdovú slučku. Digitálne dáta sú modulované s amplitúdou 0,5 mA pomocou frekvenčnej modulácie FSK (frequency shift keyed). Binárna nula zodpovedá 2200 Hz, binárna jednotka 1200 Hz. Zariadenia, ktoré podporujú iba čítanie analógového 4-20mA signálu, vnímajú HART komunikáciu iba ako drobné rušenie.
HART protokol vyvinula v 80. rokoch firma Rosemount ako proprietárny protokol pre ich inteligentné zariadenia. V roku 1986 sa vo verzii 2.1 stal otvoreným protokolom. V súčasnosti väčšina zariadení podporuje verziu 5 (štandard z roku 1989), menej novšiu 6 (rok 2001 - podporovanie dlhých identifikátorov) a aktuálnu 7 (rok 2007 - Wireless HART).
Od marca 2011 platí, že všetky nové zariadenia musia podporovať verziu protokolu 6 alebo 7 a byť zaregistrované u HART Communications Foundation (http://www.hartcomm2.org).
Nakomunikovaný prietokomer podporuje podľa dokumentácie verziu protokolu 6.
Prevodník HART ETH od firmy Papouch funguje zaujímavým spôsobom:
Takže už vieme, ako presvedčiť papagája, aby vyslal a prijal HART paket, ale ešte netušíme, ako taký paket vyzerá a čo vlastne HART vie. Týmto chcem pochváliť pánov (či dámy?) z firmy Papouch - ich návod obsahuje aj príklady pre dva dôležité HART príkazy:
HART príkaz 0 - čítanie unikátneho identifikátora - je jednoduchý 5-znakový príkaz, ktorého jediným parametrom je krátky identifikátor zariadenia (0-15). Odpoveď zariadenia obsahuje okrem iného údaje o podporovanej verzii HART protokolu, ID výrobcu (Manufacturer ID), typ zariadenia (Manufacturer Device Type) a trojbajtové ID zariadenia (Device Identification Number). Kombináciou ID výrobcu + typ zariadenia + ID zariadenia vznikne 5-bajtový unikátny identifikátor (Unique Identifier), ktorý sa vo verzii protokolu 5 a vyššej používa pri všetkých ostatných príkazoch. Použitie unikátneho identifikátora chráni voči chybe komunikácie z nesprávnym zariadením (čo môže nastať pri prepájaní a reťazení HART slučiek).
HART príkaz 1 - čítanie primárnej premennej - vyčíta zo zariadenia jednu hodnotu (reálne číslo). Na adresáciu zariadenia je nutné použiť unikátny identifikátor získaný v predchádzajúcom bode. Tu síce Papouch takisto udáva príklad príkazu aj odpovede, ale už nerozoberá vnútornú štruktúru 7-bajtovej odpovede. Zrejme predpokladajú, že čitateľ má tieto informácie k dispozícii - čo nebol môj prípad. Takže nejaký čas padol na zisťovanie štruktúry dát (čítaním neoficiálnych zdrojov a analýzou dát prijatých od zariadenia).
Nakoniec pomohla kombinácia dvoch informačných zdrojov. Prvým bol dokument s HART príkazmi, z ktorého je nasledovná tabuľka:
Druhým zdrojom bol iný dokument udávajúci, že v odpoveď vždy obsahuje na začiatku dvojbajtový Response code. Takže výsledný tvar odpovede na príkaz 1 je tento:
Vo finále sme u zákazníka nepoužili HART príkaz 1 ale HART príkaz 3, ktorý umožňuje vyčítať 4 hodnoty ako aj hodnotu prúdu v prúdovej slučke. Príkaz vyzerá prakticky rovnako ako príkaz 1 (líši sa iba bajtom udávajúcim číslo príkazu), odpoveď je rozsiahlejšia:
Tento príkaz má podobné parsovanie odpovede ako HART príkaz 1:
Polia 1u .. 4u sú jednotky (units code) pre premenné 1 až 4.
Na nakomunikovanie HART ETH prevodníka bola použitá jedna linka (typu TCP/IP) a tri stanice. Prečo až tri?
Prvá stanica (B.HART_ETH_Write) obsahuje tri výstupné body na zápis príkazov 0, 3 a spustenie komunikácie - na obrázku nižšie M.HART_Write52_6B, M.HART_Write52_10B a M.HART_Write50. Prvé dva body sú textové a líšia iba dĺžkou zapisovaného reťazca - 6 bajtov pre príkaz 0, 10 bajtov pre príkaz 3 (alternatívou by bolo vytvorenie 5 jednoregistrových premenných a zapisovanie do nich, ale jeden textový zápis je elegantnejšie riešenie). Tretí bod je celočíselný a zápis hodnoty 0x0100 doň spôsobí spustenie HART komunikácie a odoslanie výzvy z HART ETH prevodníka HART zariadeniu.
Druhá stanica (B.HART_ETH_ReadStatus) obsahuje bod M.HART_Read50 slúžiaci na zistenie, či HART komunikácia už skončila a s akým výsledkom. Štandardne má stanica vypnutý stav (StOff) a zapína sa až po spustení komunikácie. Akonáhle je načítaná hodnota bodu M.HART_Read5 rovná 0x0200 (OK) alebo 0x0000 (chyba/timeout), stanica je znovu vypnutá, aby periodické vyčítavanie bodu nespomaľovalo ostatnú komunikáciu.
Tretia stanica (B.HART_ETH_ReadReplyValue) obsahuje bod M.HART_Read308 na vyčítanie HART odpovede z prevodníka. Tento textový meraný bod má špecifikovanú dĺžku 18 registrov (36 znakov), čo stačí na načítanie odpovede na HART príkaz 0 aj príkaz 3 (viď Obr 10). Stanica je podobne ako druhá stanica stále vypnutá a zapína sa iba na načítanie odpovede.
Skladanie HART príkazov aj parsovanie HART odpovedí bolo robené v ESL skripte. V priebehu implementácie som zistil, že potrebujem funkciu %XOR na implementáciu CRC ako aj funkciu %B4ToReal32, ktorá skonvertuje štyri bajty na 32-bitové reálne číslo. Tu sa prejavila výhoda, keď používate softvérovú technológiu reálneho času D2000 - v pondelok podvečer som poprosil šéfa vývoja o funkciu %XOR a druhý deň o trištvrte na deväť som mal k dispozícii patche pre verziu 11!
Implementácia funkcie %B4ToReal32 bola komplikovanejšia (požiadavka išla v utorok poobede a patche boli “až” v stredu 10:10) ale treba uznať vyššiu náročnosť implementácie aj vzhľadom na potrebu otestovania na neplatné vstupy. Navyše prebehla na vývoji intenzívna diskusia o názve požadovanej funkcie :)
Boris, vďaka .. a otázka na čitateľa - skúste porozmýšľať, ako dlho by trvalo splnenie podobnej požiadavky pri použití nejakého konkurenčného softvéru?
Komunikácia s prietokomerom E+H je už od včera funkčná a bezproblémová (včítane odolnosti voči reštartom KOM procesu). Na základe informácií pozháňaných od pána Gúgla sme doplnili aj identifikáciu kódu jednotiek meraných veličín.
Tento príklad z reálneho života ukazuje, ako obľúbený a rozšírený je Modbus protokol a na čo všetko sa dá v praxi použiť. Záleží samozrejme aj od konkrétneho aplikačného servera (a jeho komunikačného, prípadne skriptovacieho subsystému), či a s akou prácnosťou si dokáže poradiť aj s takýmto neštandardným využitím protokolu Modbus.
17.8.2017, Ing. Peter Humaj, www.ipesoft.com