HTTP adatcsere WinCC flexible runtime HMI-k között

A WinCC flexible (2005) képességei közé tartozik, hogy más WinCC flexible HMI-kkel képes kommunikálni ethernet hálózaton keresztül.
A ProTool is képes volt erre ha OPC kliensként vagy OPC szerverként használtuk, a WinCC flexible ennél többre is képes.
A PC runtime csomag tartalmaz egy Miniweb http szervert, ami a WinCC flex képességeit tovább bővíti.
A Miniweb segítségével egyrészt egy közönséges web böngészővel is csatlakozhatunk a hálózaton keresztül. A böngésző segítségével meg lehet nézni az eszköz állapotát, a runtime leállítható és elindítható, lehetséges a jelszó lista import/export-ja, menedzselhetjük a recepteket és a web szerver hatásköre alá tartozó file-okat. Ha a Sm@access funkciót is használjuk, akkor java VNC-n keresztül át lehet venni böngészőben a panel kezelése távolról.

Ez a cikk nem erről szól, hanem arról, hogy http protokoll használatával egyik WinCC flexible HMI a másikkal adatokat cserélhet. Pl. kiolvashatja, vagy írhatja egyik HMI a másik változóit. Közvetett módon tehát a PLC-vel közvetlen kapcsolatban nem lévő HMI  is megjeleníthet PLC változókat.
A kapcsolat kliens-szerver alapú, a web szervert futtató HMI-nek kell közvetlen kapcsolatban lennie a PLC-vel (vagy PLC-kkel). Az alábbi ábra mutatja topológiát:



A http protokollon keresztül kapcsolódó WinCC flexible kliens a szerverhez kapcsolt PLC-nek csak azokat a változóit képes elérni, amelyek deklarálva vannak a WinCC szerveren.
Az ok az, hogy a kliens csak a szerverben létrehozott címkéket tudja írni vagy olvasni. Ha a http kapcsolatot arra használjuk, hogy a HMI-t megsokszorozzuk, akkor ez nem jelent problémát.
A HMI eszközöknek nem kell feltétlenül PC-nek lenniük, lehetnek panelek is, de nem mindegyik típus támogatja a web szerver futtatását.

A project felépítése

A szervernek szánt eszközre ugyanúgy kell felépíteni a projectet, ahogy az normál esetben is tennénk. Különbség csak az eszköz beállításoknál van:



A Runtime services résznél lehet a runtime szolgáltatásait ki és bekapcsolni. A SIMATIC HMI HTTP Server szolgáltatásra van szükségünk.
A szerveren más teendő nincs is.

A kliens oldali WinCC-nél már nagyobb különbségek vannak. először is a Connections alatt lére kell hozni egy kapcsolatot, de nem a szokásos PLC-s kapcsolatot, hanem olyat, amelyik a SIMATIC HMI HTTP protocol kommunikációs drivert használja:



Amint beállítjuk ezt a protokollt, a Station-nál megjelenik a kommunikációs partner, ahol meg kell adnunk a szerver elérhetőségét. Amennyiben nem állítottunk be jelszót, csak a szerver IP címét kell beírni (lásd a képen).

TAG mizéria

A másik változást a "megszokotthoz" képest a címkéknél találjuk:



Az address oszlopban, ami a változó címét tartalmazza, csak nevek vannak. HTTP kapcsolat esetén ugyanis a cím helyett a WinCC flexible szerveren lévő címkék pontos nevét kell megadnunk.
Mivel a kliens WinCC flexible nem képezi a Step7 project részét, ezért nincs módunk a váltózónevek szimbólum listából való kiválasztására, kézzel kell megadnunk azokat. Persze ha megnyitjuk a szerver WinCC projectet és a klienst is, akkor copy/paste módszerrel átmásolhatjuk a szükséges címkéket a tags listából. Ilyenkor azonban a címkékkel együtt jön a kapcsolat is (Connection) hiszen a tag-ek a kapcsolathoz vannak hozzárendelve.
Ha átállítjuk a másolt címkéknél a kapcsolat nevét a HTTP-s kapcsolat nevére, és a másolat eredményeképpen létrejött kapcsolatot töröljük, akkor valószínűleg felmerül egy újabb probléma, mégpedig az, hogy egyes adattípusokra hibát fog jelezni. Sajnos ugyanis a használható adattípusok kapcsolat függők. Látni fogjuk, hogy a SIMATIC HMI HTTP Protcol-hoz rendelt tag-eknél nem lehet beállítani pl. TIMER adattípust és WORD vagy REAL típus sincs. A Word-nek többé-kevésbé megfelel az uint (unsigned integer) a REAL-nak a FLOAT (lebegőpontos), a Timer értékeket pedig Integer-ben tárolhatjuk.
További különbség, hogy a boolean változóknál mindig meg kell adni a bit számát. Ha a változó a szerveren is boolean volt, akkor itt mindig nullát adjunk meg!



 

Ez gondolom ezért van így, mert a logikai értéket is 16 biten tárolja, de valószínű hogy nem egy biten. Ha egy ilyen boolean-nak nem a 0 bitet adjuk meg, akkor az a tag állapotként mindig False értéket fog visszaadni.
Ez a tulajdonság lehetővé teszi ugyanakkor, hogy a szerveren lévő Word típusú változót felboncoljunk bitekre és a kliensen mint boolean változókat jelenítsük meg:
Ehhez annyit kell tenni, hogy a szerveren létrehozzuk a Word típusú változót (a példa kedvéért ennek neve legyen MW1), majd annak bitjeire hivatkozó boolean változókat a HTTP kliensen a következőképpen deklaráljuk:



Itt megint van egy kis keveredés, ami a word-ön belüli fordított byte sorrendből adódik. Tegyük fel, hogy a PLC-ben az M1.1, M1.2, M1.3 és M1.4 változókat mint bináris változókat használjuk. A HMI szerverünkön keresztül akarjuk ezek állapotát a kliensen megjeleníteni. A szerverben Word típussal létrehozunk egy MW1 nevű címkét, ami az MW1-es merker word-re fog mutatni a PLC-ben. Az MW1 mint tudjuk, tartalmazni fogja a fent felsorolt biteket is, így azonban csak egy címkére lesz szükség az átviteléhez.
A kliensen nem hozzuk létre a word típusú címkét, hanem négy booleant deklarálunk (lásd a képen). A keveredés itt már látható: A PLC-ben lévő M1.1 itt az MW1 nevű címke 9-es bitje lesz, nem az egyes. Az M1.2 a 10-es bit, stb.



Ha szigorúan csak olyan TAG-eket csinálunk a kliens WinCC-ben amelyek a szerverben is vannak, akkor a fenti sakkozást el lehet kerülni.

A kliens azonosítása

A WinCC flexible HTTP Miniweb szerveren a kliensek kapcsolódását azonosításhoz köthetjük. Ez annyit jelent, hogy a szerver változóinak írása és olvasása (egyáltalán a kapcsolat felépítése) csak felhasználó név és jelszó megadásával történhet.
Alapértelmezés szerint a web szerver nem kér jelszót. ha ezen szeretnénk változtatni, akkor a szervert futtató gépen a vezérlőpulton kattintsunk a WinCC Internet Settings ikonra.



Váltsuk át az ablakot a Web Server fülre. A jelszavas védelem bekapcsolásához a Tag authenticate beállítást állítsuk Authentication required-re. Innentől kezdve felhasználó nevet és jelszót fog kérni. Hogy milyet?
Alapértelmezés az "Administrator" felhasználó név és a "100" mint jelszó. Ezen nem árt változtatni természetesen, amit az "User Administration" gomb megnyomásával tehetünk meg. Ekkor is kéri a jelszót, írjuk be a "100"-at. Ha ezt nem fogadja el, akkor valaki már megváltoztatta :) A következő ablakban módosítható a felhasználó neve és jelszava.
A TAG access beállításnál csak olvasható-ra állíthatjuk a változók elérését. Ha ezt tesszük, akkor a kliensek nem lesznek képesek megváltoztatni egy változó tartalmát akkor sem, ha a kliens projectben ezt lehetővé tettük.

A jelszót és a felhasználó nevet természetesen a kliensben is be kell állítani, különben nem lesz képes kapcsolódni a szerverhez.
A beállítást a kliens WinCC flexible projectben kell elvégezni, a Communication/Connections alatt.



A Station beállításaihoz beírjuk a szerver IP címét vagy domain nevét. Ha a port számát megváltoztattuk, akkor kettőspont után a port számát írjuk a cím végére (lásd a képen). A következő két sorban adjuk meg azt a felhasználó nevet és jelszót, amit a szerver gépen a WinCC Internet Settings beállításoknál adtunk meg.

Ha a szerver fut és elindítjuk a klienst, akkor az azonnal megpróbál kapcsolódni a szerverhez. Ha ez sikerül, akkor a system üzenetek között az alábbi üzenetsort találjuk:



Ezeknek az üzeneteknek a megjelenítéséhez a kliens projectben el kell helyezni egy képernyőn egy Alarm view objektumot és az alábbiak szerint kell beállítani:



Természetesen e nélkül is működik a kliens, de nem árt ha biztosítunk lehetőséget arra, hogy az üzeneteket meg lehessen jeleníteni. Hibakereséskor hasznos lehet.
Ha a kapcsolat nem jön létre, akkor ebben az üzenet naplóban hibaüzenetet találunk. Hibás felhasználó név vagy jelszó esetén ezt:



Ha a kliens egyáltalán nem is éri el a szervert, mert az pl. nincs bekapcsolva, vagy a hálózati kapcsolat hibás, esetleg rossz címet adtunk meg, akkor az alábbi üzenet kapjuk:



Vegyük figyelembe, hogy a WinCC flexible runtime az internet beállítások/kapcsolatok beállításainak megfelelően próbálja létrehozni a kapcsolatot.
A hibaüzenetek listája itt található (angol).

A Miniweb szerver TCP portja alapértelmezés szerint a szokásos HTTP port, a 80-as. Ezen is lehet változtatni, de kicsit nehezebben. A módszert egy tipp írja le itt: WinCC Runtime Miniweb HTTP server port beállítása


Kapcsolódó cikkek:
WinCC Flexible - PC runtime
WinCC Flexible jegyzetek




Szirty