14.1.31 Snap7 mérő szerverekA Snap7 PVSR mérő szerver aktív, de discovery-re nem képes modul, amellyel a TCP alapú Snap7 protokoll használatával lehet a Siemens Simatic PLC eszközöket monitorozni. A modul helyes működéséhez további lépésekre van szükség a mérő szerveren. Installálás A snap7-iot-quark-1.4.2 modult kell felinstallálni a gépre. 1. Letöltendő modul: snap7-iot-quark-1.4.2.tar.gz 2. tar xzf snap7-iot-quark-1.4.2.tar.gz 3. cd snap7-iot-quark-1.4.2/build/unix 4. make -f i586_linux.mk 5. cd ../bin/i586-linux 6. cp libsnap7.so /usr/lib 7. ldconfig 8. pip3 install python-snap7 Patch-elés A letöltött modul nem támogatja az OrderCode hívást, ezért két file-t is módosítani kell ahhoz, hogy az eszköz felderítés helyesen működjön: 1. site-packages/snap7/snap7types.py: a S7PlcInfo osztályban a _fields_ tömbben van szükség egy új bejegyzésre:
2. site-packages/snap7/client.py: egy új hívásra van szükség:
Retrieves plc info from client """
Az eszköznek az alap attribútumaikon kívül az alábbi paramétereik vannak (zárójelben megadva az adott paraméter név kódját), amelyek kötelezően megadandó: · IP cím (SNAP7 EQ 1 IP): A mérendő Snap7 PLC eszköz kommunikációs IP címe · Port (SNAP7 EQ 2 PORT): A mérendő Snap7 PLC eszköz TCP kommunikációs portja · Rack (SNAP7 EQ 3 RACK): A mérendő Snap7 PLC eszköz modul helye · Slot (SNAP7 EQ 4 SLOT): A mérendő Snap7 PLC eszköz kártya helye Fontos megjegyezni, hogy maga a Snap7 protokoll nem tér ki arra, hogy melyik kiolvasható regiszteren milyen érték található, így külön-külön mérés template-ek kerültek kialakításra PVSR rendszeren belül az egyes Snap7 adatformátumoknak megfelelően. A kifejlesztett mérőszerver a Snap7 eszköz adattárolási rendszerének működéséhez igazodva lett kialakítva. A Simatic PLC több féle memória blokkal rendelkezik, amelyek közvetlenül címezhető távolról ethernet hálózaton keresztül a Siemens által kifejlesztett Snap7 protokoll segítségével. Az alábbi memória területek érhetőek el: · Data Block (DB) · Digital Input (PE) · Digital Output (PA) · Merkers (MK) · Timers (TM) · Counter (CT) Ezeken belül a protokoll byte blokkokat tud letölteni a kezdő cím és a byte darabszám megadásával. Így a kialakított mérőszerver ezekről a területekről paraméterezett módon tud leolvasni mérendő adatokat. Értelemszerűen a PLC programjától függ, hogy mely adatterületeken tárol olyan értékeket, amelyeket a mérőszerver monitorozni tud. Az alkalmazott PLC programok az alábbi adattípusokat tudják kezelni: A fenti adattípusok közül BOOL, BYTE, INT, DINT, CHAR, WORD és DWORD adatok hasonló módon kezelhetőek, a REAL IEEE szabvány szerint tárolt lebegőpontos valamint az S5TIME BCD kódolással tárol ezredmásodperces felbontásban tárolt adatokat jelentenek, amelyet a megfelelő módon kell dekódolni a PVSR rendszer felé. A többi adattípus (DATE, TOD, DT) mérés szempontjából nem relevánsak. A mérőszerver úgy lett kialakítva, hogy a Python mérő modul a Snap7 protokoll segítségével bejelentkezik a PLC rendszerbe, amihez bemenő paraméterként megkapja a PLC IP címét, rack és slot számát, valamint a TCP port adatot. A sikeres kapcsolat felvétel után a mérés definícióban szereplő változó neve valamint a mérés index paramétere alapján a megfelelő adat blokk területről beolvassa a kívánt mennyiségű byte-okat, és ezekből egy integer számot továbbít a PVSR felé. Például a „DB 1 Area olvasás” típusú mérés képletben a „READ_DB_1.PORT” változó szerepel, amit hogyha a „4-2” mérési index-szel veszünk fel az eszközhöz, akkor az adatgyűjtő a „READ_DB_1.4-2” változót akarja lemérni. Ezt a következő képpen értelmezi az adatgyűjtő: a DB az adatblokk rövidített neve, 1 a DB adatblokk sorszáma (a többi adatterületnél is meg kell adni egy tetszőleges pozitív egész számot, de ezeknél az adatterületeknél nincsen figyelembevéve ez a sorszám, mert ezeknél ez nem értelmezhető), továbbá 4-2 index a kiolvasandó byte-ok kezdő címét és darabszámát jelöli. A Snap7 mérőszerver által visszaadott Integer szám az alábbi Perl scripttel kerül lebegő pontos számmá alakítva, ha ilyen típusú mérést kell végezni a PVSR-nek a Snap7 berendezésben: A fenti kódrészletből jó látható, hogy a mérőszerver által átadott 4 byte-os integer hogyan lesz átalakítva lebegőpontos számmá, amit a PVSR fog megkapni mint mért adat. A SIMATIC menedzselő által a DB2 0 című területre 4 byte hosszúságban beírt „1.234618e+022” lebegőpontos számot a mérőszerver „1680298603” integer számként adja tovább a fenti scriptbe. Erre a script ellenőrzése során a 1.23461804033725e+22 lebegőpontos számot adja vissza, ami kerekítve megegyezik a SIMATIC rendszerben tárolt lebegőpontos számmal. |