Ebben a blogposztban a WAGO MID hitelesített villamos fogyasztásmérők Modbus RTU-n történő kiolvasását ismertetjük. Egy rövid példaprogramon keresztül bemutatjuk, hogyan lehet Codesys 2.3, illetve e!COCKPIT szoftverkörnyezetben egyszerűen kiolvasni a modulok által mért fogyasztási adatokat. Két csoportba sorolhatjuk a WAGO fogyasztásmérőit. Vannak a direkt mérő műszerek – ezen belül is kétféle verzió érhető el, a különbség csak a mérendő vezetékek bekötésében van (879-3000 és 879-3020). A direkt mérő egyben egy áramváltó is, amivel egészen 65A-es méréshatárig képesek vagyunk a fogyasztási adatokat mérni. A másik csoportja a mérőknek pedig az áramváltós kivitel (879-3040). Az ilyen típusú mérők 65A feletti teljesítmények mérésére alkalmasak. A fogyasztásméréshez itt már kell használnunk 1A-es vagy 5A-es áramváltókat.
A mérési módszeren kívül a fizikai kialakításban van csak különbség a mérőkben, de működését, a velük való kommunikációt és a kiolvasást tekintve megegyeznek. Mindegyik verzió Modbus RTU és M-Bus kommunikáció képes. Blogcikkünkben Modbus RTU-t használva fogunk példát mutatni arra, hogyan lehet a mérőket kiolvasni. Amennyiben segítségre lenne szüksége a Modbus kommunikációt illetően, azt a korábbi cikkünkben részletesen bemutatjuk:
Modbus általánosan és WAGO PLC- vel (controlblog.hu)
e!COCKPIT fejlesztőkörnyezet esetén egyszerű dolgunk van, mivel a WAGO által előre megírt funkcióblokkot alkalmazhatjuk ehhez a feladathoz. A „Wago App Power Measurement” könyvtárban található az 1.7.4.0-ás könyvtár verziótól kezdve elérhető. A funkcióblokk neve pedig az „FbAC_Compact_MID”. Használata egyszerű, meg kell adni melyik soros kommunikációs porton vannak felfűzve az eszközök, illetve, hogy milyen címen érhetők el. Ezt követően a funkcióblokk már automatikusan elvégzi a kiolvasást, és az értékek átkonvertálását. A „bToken” változó pedig egy belső változó, amelynek értékét visszaadja a funkcióblokk.
1.ábra: e!COCKPIT funkcióblokk használata.
Tartozik hozzá egy előre elkészített vizualizáció is, amely az értékek kijelzését is lehetővé teszi számunkra. Az említett funkcióblokkhoz, a „tplStatusAC_Compact_MID” vizualizációs minta tartozik.
2.ábra: Vizualizáció minta
Ehhez hozzá kell rendelni az általunk létrehozott funkcióblokkot, és már ki is mutatja a mért értékeket. A bemutató ideje alatt csak egy fázist mértünk, ezért nem olvasható ki mérési adat az L1 és L2 fázison!
3.ábra: Mért értékek
Természetesen saját vizualizációt is készíthetünk, ekkor a funkcióblokk értékeit fel tudjuk használni a számunkra szükséges módon.
A régebbi fejlesztőkörnyezet esetén, már nincs ennyire egyszerű dolgunk. Jelen pillanatban nincs előre gyártott funkcióblokk, mint az újabb fejlesztőkörnyezet esetén. Javasoljuk az e!COCKPIT használatát, amennyiben ez lehetséges. Természetesen megoldható az adatok kiolvasása Codesys 2.3 esetén is, azonban ez bonyolultabb, egy példán keresztül bemutatjuk milyen lépésekre van szükség ehhez.
A „MODBUS_EXTENDED_MASTER” funkcióblokkot fogjuk használni. Ennek segítségével ki tudjuk olvasni az eszközből az értékeket, Modbus RTU-n keresztül. Az alábbi képek mutatnak egy mintapéldát arra, hogyan lehet az eszközt kiolvasni. Szükséges a megfelelő beállítások ellenőrzése, tehát a baud-rate, illetve a paritás ellenőrzése. Amennyiben ezek nem megfelelően vannak beállítva, az eszközökről nem fogjuk visszakapni az értékeket, mivel maga az olvasás nem tud végbemenni. Az olvasás minden „StartFunction” igazba változásakor történik.
4.ábra: Modbus kiolvasás programrész
Amennyiben sikeres a kiolvasás, a kapott értékeket át kell alakítanunk egy számunkra felhasználható formátumra. A mérők dokumentációját megnézve láthatjuk, hogy az egyes értékeket két WORD nagyságú regiszterbe tárolja az eszköz. Ahhoz, hogy ebből számunkra is olvasható értékeket kapjunk, át kell alakítanunk ezt REAL típusúvá. Ezt végzi el a következő programrész:
5.ábra: Olvasott értékek REAL konvertálása
De hogyan is kell a fentebb látható programrészt értelmezni? Ehhez először is nézzük meg milyen típusú változókkal dolgozunk.
6.ábra: Változók típusai
Az „aResponse” tömbben kerül majd véglegesen megjelenítésre az általunk beolvasott és már értelmezhető érték. Továbbá az is látható, hogy ebben a tömbben REAL értékek kerülnek eltárolásra. A REAL értékek 32 bites értékek, tehát 32-bitet azaz 4 bájtot foglalnak a memóriában. A WORD értékek 16 bitesek, azok pedig 2 bájtot foglalnak a memóriában. Ezt azért nagyon fontos megjegyezni, mivel ennek köszönhetően működik a programrész. A REAL érték memóriacímét az ADR() beépített funkcióval „megkeressük” majd ehhez kettőt hozzáadva (a megkeresett memóriacímhez még kettőt hozzáadva visszakapjuk azt a címet ahol a REAL változó 3. 4. bájtja kezdődik / található), így ezek helyére betöltve az általunk beolvasott WORD értékeket már lebegőpontosan kapjuk vissza, vagyis feszültség esetén PL. 233.5. A következő két képen vizuálisan is megmutatjuk a most leírtakat.
7.ábra: Még nem feldolgozott, kiolvasott értékek
8.ábra: Már feldolgozott, értelmezhető érték
Ebben a bejegyzésben röviden bemutattuk hogyan lehet a WAGO MID-es mérőkből Modbus RTU-t használva az értékeket kiolvasni. Javasoljuk az e!COCKPIT használatát, mivel az láthatóan egyszerűbb, és gyorsabb megoldást eredményez.