Jste zde

TEST - Poseidon2 a HMI MQTT přenos dat

V minulém článku "Test - Jak na Poseidon2 a MQTT ?" jsem si ukázali jaké možnosti nabízí IoT měřící jednotka Poseidon2 z pohledu MQTT vysílání naměřených hodnot ze senzorů. Dnes na to navážeme ukázkou, jak lze tyto hodnoty v MQTT zprávách přijmout do průmyslových HMI jednotek Weintek, které MQTT komunikaci také podporují.

Stále více výrobců již ve svých HMI panelech nebo PLC implementovala možnost snadno zprovoznit MQTT komunikaci, obvykle jak v režimu Publisher pro vysílání, tak i v režimu Subscriber pro příjem dat ze vzdálených senzorů. V případě HMI panelů asi hlavně důležitá ona funkce příjmu pro následné zobrazení na panelu a případně ukládání do databáze a dalšího zpracování či prezentace naměřených hodnot v podobě dlouhodobých grafů.

Konkrétně si ukážeme příjem dat ze senzorů připojených na jednotku Poseidon2 a opět přes testovací MQTT broker (MQTT cloudový server) HiveMQ jejich přenesení do jednotky Weintek a jejich následné zobrazení. Konkrétně jsem použil Weintek jednotku cMT-SVR200, ale MQTT podporuje už většina HMI a vizualizačních jednotek Weintek. Při realizaci přenosu a příjmu naměřených hodnot senzorů je nutné mít na paměti několik zásadních informací, bez kterých se komunikaci nepodaří zrealizovat.

Dnes si ukážeme přenos hodnot senzorů s měřící jednotky Poseidon2 do HMI jednotek Weintek a jejich základní vizualizaci.

RAW vs. JSON formát MQTT zprávy

Jak již jsem již popsal v druhé polovině článku "Test - Jak na Poseidon2 a MQTT ?", tak z jednotky Poseidon2 se v základním režimu vysílají naměřené hodnoty senzorů v podobě tzv. RAW dat, tedy hodnoty i s jednotkami jsou vysílán jako ASCII znakové řetězce, tedy ve formátu, který v HMI panelech Weintek je označován jako "RAW". Jde o obecný formát, který netvoří žádnou přesně definovanou strukturu (syntaxi), a který lze na straně HMI panelu přijmout pouze z pohledu HMI jako blíže nespecifikovaný textový řetězec ASCII znaků datového typu "String" a pak je i jen jako ASCII znakový řetězec na panelu zobrazovat. Případně je nutné si jako Makro naprogramovat nějaký převod z ASCII hodnoty typu "String" na číselný datový "Integer" v případě čísel bez desetinné tečky či "Float" pro čísla s desetinnou tečkou, ale již to vyžaduje tedy určitou práci navíc. Nevýhoda hodnot typu "String" je nemožnost dalšího matematického zpracování či jednoduchého ukládání do číselné databáze. Navíc jedna taková textová hodnota zabírá v pamětí tři až čtyři 16-bitová místa, zatímco číselná hodnota typu Integer" jen v případě HMI Weintek jen jedno 16-bitové místo, resp. dvě paměťová místa u typu "Float".

Výhodnější tedy je z jednotky Poseidon2 přes MQTT vysílat již hodnotu v typizovaném formátu, který již příjemce HMI panel je schopen přímo dekódovat jako číslo, přesněji řečeno, umí podle struktury rozlišit, co je jen text (označení hodnoty) a co již samotná hodnota (číslo). V případě MQTT komunikace k tomuto slouží strukturovaný formát JSON. Ten lze si lze v jednotce dle vlastní potřeby vytvořit v sekci "User Topic". V článku "Test - Jak na Poseidon2 a MQTT ?" jsem již ukázal jako vysílat v JSON formátu jen hodnotu koncentrace CO2, ale protože máme připojených více senzorů, jejichž hodnotu chceme odesílat, budeme chtít uvedený zápis rozšířit. V mém případě jsem přidal hodnotu tlaku vzduchu.

Poseidon JSON formát pro 2 senzory

Pro rozšíření JSON zápisu na více hodnot jen stačí za čtení první hodnoty (tedy uvnitř stejných složených závorek {....}) vložit znak čárky a pak pokračovat stejnou strukturou zápisu čtení hodnoty, pouze s jiným popisem hodnoty a jiným ID číslem senzoru. V JSON formátu znak čárky slouží k oddělení hodnot mezi sebou v rámci jednoho přenášeného Topic kanálu. Tedy nově při příjmu již nebude zpráva obsahovat již jen jednu hodnotu, ale již více hodnot.

Konkrétně tedy v mém případě jsem původní JSON formát zprávy:

{"CO2":%ID_SENSOR_31745%[%VAL_VALUE%]%ID_SENSOR_END%}

rozšířil o čtení a vložení aktuální hodnoty na Poseidon2 připojené senzoru tlaku s ID číslem 768:

{"CO2":%ID_SENSOR_31745%[%VAL_VALUE%]%ID_SENSOR_END%,"tlak":%ID_SENSOR_768%[%VAL_VALUE%]%ID_SENSOR_END%}

Jak bude celý přenášený JSON formát zprávy pak bude vypadat si pak lze prohlédnout kliknutím na tlačítko "Test User Topic". Ten také uvidíme například v HiveMQ klientovi, pokud do něj vložíme příjem TOPIC kanálu (v mém případě tedy "vojacekatest22"). Zde je nutné jen upozornit, že v definici v jednotce Poseidon2 je nutné se vyvarovat odřádkování první položky, tedy je nutné vložit hned za první sekci čtení hodnoty koncentrace CO2 senzoru s ID 31745.

Tlačítkem "Test User Topic" se zobrazí JSON formát skutečně přenášený v MQTT zprávě.

Příjem MQTT hodnot v HMI Weintek

Tedy vysílání hodnot přes volný testovací MQTT broker HiveMQ na straně jednotky Poseidon2 máme zprovozněné a i otestované jejich vysílání pokusným příjmem v MQTT klientovi HiveMQ. Teď si tedy ukážeme jako zprovoznit příjem hodnot v RAW ASCII textovém formátu i JSON formátu na straně HMI panelu - v mém případě cMT-SVR200. Ale k vyzkoušení níže uvedeného si nemusíte hned pořizovat fyzický HMI Weintek, ale stačí si jen stáhnout a nainstalovat bezplatné programovací prostředí / software Weintek EasyBuilder PRO a celý proces příjmu vyzkoušet v tzv. on-line simulaci "Project->Online Simulation", kdy se samotný počítač se softwarem EasyBuilder chová jako fyzické HMI zařízení s IP adresou počítače. Tedy stačí mít takový počítač normálně napojený na internet, aby bylo možné MQTT zprávy přijímat a případně i vysílat.  

Pro realizaci MQTT komunikace v  programovacím prostředí Weintek EasyBuilder PRO slouží ikona "MQTT" v sekci "IIoT/Energy". Na tu stačí kliknout a pak jen hned MQTT režim povolit zatržením položky "Enable" . Pak se již objeví položky nastavení celé MQTT komunikace, tedy jak napojení na MQTT broker, tak přihlášení příjmu či vysílání - Publisher / Subscriber.

Funkce MQTT komunikace je integrována přímo v konfiguračním / programovacím softwaru Weintek EasyBuilder PRO.

Nastavení napojení na MQTT broker (internetový MQTT cloud) slouží položky zobrazené po kliknutí na tlačítko "Server->Settings..." V záložce "General" se nastavují komunikační parametry MQTT brokeru, v záložce "Address" pak interní parametry ovládání MQTT komunikace z pohledu HMI Weintek (přiřazení paměťových registrů pro vizualizaci ovládání: zapnutí/vypnutí komunikace, zobrazení stavu komunikace apod.). V záložce "System Topic" je možné nastavit TOPIC kanál vysílání "Status" informací běhu MQTT komunikace HMI panelu. Ale není to nijak povinné a nijak to neovlivňuje funkci příjmu MQTT data v režimu příjemce Subscriber.

Nejdříve je nutné v HMI Weintek programovací softwaru správně nastavit parametry MQTT brokeru - zde v mém případě HiveMQ.

Z pohledu realizaci příjmu naměřených hodnotu z Poseidon2 senzorů je nutné v okně "MQTT" zvolit/kliknout na záložku "MQTT Topic->Topic Subscriber" správně "vyplnit" záložku "Subscriber". V mém případě jsem si pro testování jak přijmu hodnot v základním RAW textovém formátu, tak připraveného JSON formátu realizoval následující položky příjmu:

  • Položku č. 1 označenou "Poseidon2_teplota" = příjem hodnoty teploty Poseidon2 senzoru s ID 1024 v základním textovém RAW formátu.

  • Položku č. 2 označenou "Poseidon2_vlhkost" = příjem hodnoty vlhkosti Poseidon2 senzoru s ID 512 v základním textovém RAW formátu.

  • Položka č. 3 označenou "Poseidon2_CO2_tlak" = současný příjem hodnot koncentrace CO2 senzoru s ID 31745 a senzoru tlaku vzduchu s ID 768 vysílaného ve vytvořeném JSON formátu.

Příjem RAW zpráv

Textový RAW formát pro hodnoty teploty a vlhkosti se vysílají ve dvou odlišných TOPIC kanálech a tedy se musí založit jako dvě samostatné nastavení - v mém případě položky "Poseidon2_teplota" a "Poseidon2_vlhkost".  V každé z nich se po jejich otevření nejdříve v okně "MQTT Topic Subscriber Object's Properties" v záložce ""General" vyplňuje právě označení TOPIC kanálu a formátu zprávy. Zde se tedy název TOPIC kanálu se zkopíruje z nastavení v jednotce Poseidon2. V mém případě tedy pro senzor teploty ID 1024 je to Topic kanál "Poseidontest22/1024/Value" a pro senzor vlhkosti s ID 512  pak Topic kanál  "Poseidontest22/512/Value". V obou případech pak je nutné zvolit formát zprávy "Content format" jako "RAW".

 

V první fázi je pro příjem MQTT zprávy do HMI Weintek nutné nastavit správný Topic kanál a typ dat ve zprávě v položce "Content format" . Zde tedy "RAW".

Následně je nutné v záložce "Address" nutné přiřadit ASCII znaky přijímané zprávy paměťovým místům v HMI panelu Weintek. Každá dvojce ASCII znaků vyžaduje jedno 16-bitové slovo datového typu String. Aby však zapsání MQTT zprávy do paměti HMI bylo správně provedeno, musí se přiřadit správný počet paměťových míst "Address element count / No. of word:". V případě zprávy teploty ve formátu "xx.x C" je nutné přiřadit 3 slova datového typu "String" a pro zprávu vlhkosti vzduchu ve formátu "xx.x %RH" pak je nutné přiřadit 4 slova datového typu "String". Jako jeden ASCII znak se počítá i mezera mezi hodnotou a jednotkou. Pokud se přiřadí nesprávný počet slov, tak k příjmu / zaznamenání obsahu zprávy do paměti HMI vůbec nenastane!! Tedy potřeba si na toto dát pozor.

V mém případě ukládám data/text zprávy o teplotě do paměťového místa LW-200 až LW-203 a data/text zprávy o vlhkosti do paměťového místa LW-210 až LW-214.

Následně je nutné správně přiřadit RAW zprávě paměťové místo v HMI, kam se budou po příjmu data ukládat. Protože zde jde o data ve formě ASCII znaků, je nutné zvolit datový typ "String" a nastavit správný počet "elementů" = celkový počet ASCII znaků ve zprávě dělený 2.

Příjem JSON zpráv

Příjem JSON formátu zpráv se nastavuje také poměrně jednoduše. V okně "MQTT Topic Subscriber Object's Properties" v záložce "Topic Subscriber" stačí vložit opět novou položku, stejně jako v případě RAW formátu, tedy v mém případě  "Poseidon2_CO2_tlak".  Po jejím rozkliknutí v záložce "General"  opět po vyplnění Topic kanálu definované v jednotce Poseidon2 (v mém případě tedy "vojacekatest22")  pak je nutné v položce "Content format" místo "RAW" zvolit "JSON (Advanced)".

Příjem JSON MQTT zpráv v HMI Weintek se nastavuje podobně jako příjem RAW zpráv - jen je nutné změnit položku "Content format".

Pak v záložce "Address"  kliknout na tlačítko "Template..." a do zobrazeného volného okna jednoduše zkopírovat JSON formát vytvořený v nastavovacím webu jednotky Poseidon2. Z něho se pak již automaticky vytvoří struktura přijímaného JSON formátu, kde texty uvedené v uvozovkách, tedy "CO2" a "tlak", se přiřadí jako tagy a hodnoty uvedené v hranatých závorkách se budou číst jako čísla "number".

Definování JSON struktury MQTT zprávy pro HMI Weintek pomocí funkce "Template...": Nejdříve se zkopíruje v nastavení jednotky Poseidon2 vytvořený formát a vloží se do "Template" funkce softwaru EasyBuilder. Ten si podle něj již sám vytvoří strukturu pro HMI program.

Pak je jen nutné obou číselným hodnotám přijímané MQTT zprávy nastavit adresy v paměti HMI, v mém případě LW-300 a LW-302 a pak také správný typ čísla. V případě hodnoty koncetrace CO2 jde vždy celočíselnou hodnotu v rozsahu cca 380 až 10 000, takže ji lze přiřadit datová typ "16-bit Unsigned Integer", zatímco po hodnotu tlaku vzduchu obsahující desetinné číslo je nutné přiřadit datový typ "32-bit Float". Zde je opět důležité se nesplést, protože pokud například omylem místo "Float" také zvolíte "Integer", opět se hodnota ve MQTT zprávě vůbec od paměti HMI neuloží. Prostě ve výběru datové typu přijímaných hodnot v MQTT zprávách je nutné postupovat s rozmyslem.

Přiřazení paměťového místa v HMI a volby datového typu čísla Integer a Float.

Vizualizace MQTT hodnoty z Poseidonu2 na HMI

Když už máme hodnoty u MQTT přijímaných zpráv v paměti HMI, pak už jen stačí  tyto paměťová místa zobrazovat.

V případě RAW dat objektem zobrazování ASCII textu "Object->ASCII". Tedy jeden ASCII zobrazovací objekt pro hodnotu od LW-200 a druhý ASCII zobrazovací objekt pro hodnotu od LW-210.

V případě Integer a Float hodnot je lze zobrazovat  jako klasická čísla objektem "Object-> Numeric" s paměťovým registrem LW-300, resp. LW-302. Také je lze snadno dále zpracovávat nebo je například logovat (ukládat postupně hodnoty v čase do paměti HMI) a následně jejich průběh vykreslovat v grafu jako časovou závislost či je exportovat jako tabulku do USB Flash nebo SD kartu apod.

Příklad vizualizace příjmu MQTT hodnot teploty, vlhkosti, koncentrace CO2 a tlaku vzduchu.

Závěr

Z výše uvedeného je patrné, že realizace MQTT přenosu hodnot ze senzorů jednotky Poseidon2 do HMI panelu Weintek není složitá záležitost. Proti přenosu hodnot například LAN protokolem Modbus-TCP je zde hlavně výhoda ve snadnosti realizace přenosu dat přes internet, tedy prakticky z libovolného místa  měření na libovolné místo zobrazení v rámci celého světa. Zatímco pro MODBUS-TCP přenos by bylo nutné realizovat / sestavovat nějaký VPN přenosový kanál, s MQTT toto řeší svojí cloudovou službou externí MQTT broker. 

Odkazy:

Hodnocení článku: