- „Be tudsz illeszteni egy új mérleget a KFR-be?”

- „Mikorra kell?”

- „Ha most lenne kész, az is késő lenne.”

Bizonyára nem én vagyok az egyetlen, akinek már volt része hasonló párbeszédben. Még ha a KFR (Központi Felügyeleti Rendszer) nem is egy általános rövidítés, a szűkre szabott határidő mindenképpen ismerős helyzet sokak számára. Ez a cikk az iparban (is) használatos beágyazott számítógépek hatékony és gyors fejlesztéséhez kíván egy lehetséges alternatívát nyújtani.

 

A fent említett feladat megvalósítása a számítástechnika paleolit korszakában (értsd: 15 éve) körülbelül a következőképpen zajlott (legrosszabb forgatókönyv):

Valahogy ki kellett deríteni a mérleg kommunikációs protokollját, ami a fizikai réteget tekintve RS232 vagy RS485 volt (az esetek 95%-ában), a logikai réteg pedig valamilyen ASCII protokoll. Az egyszerűség kedvéért most tételezzük fel, hogy a mérleg kommunikációja tökéletesen dokumentált.

Mivel a mérleg protokollját ismerjük, ezért „csak” egy drivert kell írni a felügyeleti rendszerbe. Időközben kiderült, hogy a mérleg még messze is van a KFR-t futtató számítógéptől (PC), tehát a soros illesztés nem jöhet szóba, kizárólag ethernet, meg már amúgy is 10 mérleg van sorosan csatlakoztatva a géphez, nem fér bele több kártya.

Ekkor a következő lehetőségek közül lehetett választani: PLC-t telepítünk a mérleg mellé, azzal vesszük át az adatokat és továbbítjuk a  PC felé vagy egy beágyazott számítógépet (EC) használunk ugyanerre. Harmadik eshetőség egy helyi PC telepítése, de ez valószínűleg a legkevésbé megfelelő megoldás.

Válasszuk a beágyazott számítógépes megoldást, mivel az olcsóbb, a feladatot tekintve inkább ehhez az eszközhöz áll közelebb és amúgy is ő az egyik főszereplője a cikknek.

Beágyazott számítógépre C/C++ nyelven vagy egyéb alacsonyabb szintű nyelven szokás fejleszteni, mivel ezeken a nyelveken lehet optimálisan fejleszteni tárhely, memória és processzor tekintetében.

unnamed

Régebben a kódot egy fordítás után az eszközre kellett tölteni, és a kód volt az egyetlen futó program a beágyazott gépen. Újabban a linux operációs rendszert futtató eszközhöz járó kereszt fordítóval lehet a programot lefordítani, vagy ha kicsit nagyobb gépről van szó, akár magán az EC-n is el lehet végezni a fejlesztést és fordítást - amennyiben nem áll távol tőlünk a szöveges fejlesztői környezet használata.

Bármelyik opciót is választjuk, az egész alkalmazást nekünk kell megírni az első karaktertől az utolsóig. Természetesen több hasonló feladat esetén már rendelkezésünkre állhat egy „funkció gyűjtemény” és ott van az internet is, ahonnan nagyon sok, mások által megírt kódrészletből válogathatunk; a példa hatékonyabb szemléltetése érdekében azonban ezektől most tekintsünk el kicsit és tételezzük fel, hogy nincs az eszköztárunkban más, csak a tudásunk. Ebben az esetben meg kell írni a soros protokollhoz és a TCP protokollhoz is a port nyitásokat, csatlakozásokat, újracsatlakozásokat és a hibakezelést is úgy, hogy magát a protokollt még nem is alakítottuk ki - ezek csak a járulékos tényezők. Ha mindent megírtunk, lementek a tesztek, hibátlanul futott a protokoll-konverzió, akkor be lehetett illeszteni az eszközt a rendszerbe. Jó esetben a tervezés és a véglegesen működő eszköz termelésbe állítása között csak pár nap telt el (egyszerűbb protokollt feltételezve). Mindenképpen időigényes folyamat, de hát ez ilyen, mindig is ilyen volt.

Eddig.

A folyamat-alapú fejlesztés elterjedésével az iparban is egyre inkább kezd feltűnni a Node.js-re épülő Node-red. A Node-red web-alapú fejlesztői keretrendszerével és könnyen bővíthető „fekete-dobozos” eszköztárával nagyon hatékony alkalmazásfejlesztést tesz lehetővé.

A fentebb részletezett probléma megoldása Node-reddel lényegesen gyorsabb (itt is feltételezve azt, hogy a tudás rendelkezésre áll, de üres lappal indulunk), hiszen a soros porton érkező adatok fogadásával, a konverzió utáni adatok etherneten keresztül PC felé küldésével nem kell foglalkoznunk, csak egy-egy megfelelő Node-ot (funkció blokk vagy fekete-doboz) kell a szerkesztő képre feldobnunk és a konverziós függvényre kell koncentrálnunk.

A mérleges példánál maradva, a mérleg a következő adatot küldi 10 másodpercenként:

UNIT1,TARE:100KG,NET:24KG. Minden üzenet egy „új sor” karakterrel zárul. Az üzenetből ki kell venni a nettó súlyt (24KG) és REST API segítségével kell a KFR-be juttatni.

Node-redben a feladat megoldása a következőképp néz ki:

nodered

Ha jól megnézzük a Node-red folyamatábra gyakorlatilag a logikai működést is szemlélteti, tehát öndokumentáló: a bejött adatsort feldarabolja (a „ , ” karakterek mentén), majd kiválasztja belőle a „NET:”-et tartalmazó elemet, eltávolítja a felesleges részeket, így csak a súly és a mértékegység marad, majd ezt továbbítja REST API segítségével a KFR-t futtató gép felé. A zöld node a debug ablakban megjeleníti a bejövő üzenetet.

nodered

Mivel nem állt rendelkezésemre egy KFR-t futtató gép, ezért a REST szervert is Node-redben írtam meg:

nodered

Ez a rész csak fogadja a REST adatokat és egy rövid szöveget illeszt a súly érték elé, majd azt megjeleníti a fejlesztő rendszer debug ablakában:

nodered

Fontos megjegyezni, hogy a „Teszt üzenet” blokk-ot leszámítva egyetlen programsort sem kellett írni, tehát gyakorlatilag paraméterezéssel megoldható volt a feladat, körülbelül 15 percen belül.

Egy hasonló megoldás C/C++ nyelven biztos, hogy több időt vett volna igénybe, hisz a soros porton érkező adatok fogadását és a REST API-val küldést is meg kellett volna írni az adatszűrés mellett.

A Node-red nyílt forráskódú, ingyenes keretrendszer, minden pozitívumával és negatívumával együtt egy hatékony fejlesztői segédeszköz. Létezik fizetős alternatívája is vNode néven – fizetős termék lévén a támogatás valószínűleg személyre szabottabb.

A keretrendszer és az alkalmazás teljes képe:

nodered

A fenti példa tökéletesen fut Windowson és Linuxon is, így olyan beágyazott gépeken is, amelyek linuxos operációs rendszert futtatnak (pl. Debian 8), mint pl. a Moxa UC-2100 szériája.

Ezzel az eszközzel a feladat – tekintve az idő ráfordítást is – megoldható a Magyar Mérnöki Kamara által javasolt „Beosztott Mérnök” 1 napi díjából.

Az eszköz árát is beleértve.

Node-RED

Írta: Kovács Gergely

Kovács Gergely, senior szoftverfejlesztő. Ő egy igazi kreatív coder, aki 2004 óta a legkülönbözőbb alkalmazásokat fejlesztette már a Com-Forth színeiben. A Moxa beágyazott gépeken alapuló protokollkonverziós alkalmazásoktól kezdve a komplex gyógyszergyári gépfelügyeleti SCADA projekteken át a napi kapacitástervező rendszer frontendjének megalkotója. Ő az, aki rutinosan mozog a hőskori VBA és a leginnovatívabb Angular 7 keretein belül is. Melegh György mellett ő a másik Moxa support mérnökünk, elsősorban a beágyazott programozós projektekkel kapcsolatban segít partnereinknek.