Előző 14.1 Mérő szerver típusok specifikumai Következő

14.1.31 Snap7 mérő szerverek

A 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:

,('OrderCode', ctypes.c_uint8*116)

2.      site-packages/snap7/client.py: egy új hívásra van szükség:

    def get_plc_info(self):
        """
        Retrieves plc info from client
        """
        info = snap7.snap7types.S7PlcInfo()
        result = self.library.Cli_GetOrderCode(self.pointer, byref(info))
        check_error(result, context="client")
        return info

 

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.