Képernyő átváltása PLC-ből

Egy HMI (operátor panel, PC) előre megtervezett és elkészített képernyőtartalmak alapján működik. Általában ezek között a képernyők között gombokkal lehet választani attól függően, hogy a kezelő milyen funkciót akar végrehajtani. Egy gombnyomás átvált egy másik képernyőtartalomra.
Az éppen megjelenített képernyő számát a PLC programban le lehet kérdezni, a kijelzett képernyőt át is lehet váltani a PLC-ből. Ezzel a lehetőséggel a kezelést lehet egyszerűsíteni, információt lehet közölni a kezelővel. Pl. amikor egy olyan műveletet akar végrehajtani, amely végrehajtásához nincsenek meg a feltételek, a PLC-ből átválthatjuk a kijelzőt egy olyan képre, ahol látható milyen feltétel hiányzott, vagy információs szöveget jeleníthetünk meg.

A képernyő PLC-ből kezdeményezett átváltásának több módja is van.
A Windows alapú panelek, tehát a ProTool RT és WinCC Flexible RT rendelkezik olyan lehetőséggel, hogy egy változó (TAG) megváltozásához hozzárendelhető a képernyőváltás funkció. Ha a képernyőváltás funkció paramétereként (hogy melyik képernyőre kell váltani) saját magát adjuk meg, akkor a kijelző átvált arra a képernyőre amelyik számot a TAG tartalmazza.

A megvalósítás ProTool-al:



A megvalósítás WinCC-vel:



Itt tehát a képernyőváltásra használt TAG (a példában ez a DB1.DBW8) tulajdonságainál kiválasztjuk a "változás" eseményt (Change value) amihez hozzárendeljük a képváltás (Select_Screen_Variable ill. ActivateScreenByNumber).
Ha tehát a DB1.DBW8 tartalma bármilyen okból megváltozik, a HMI megpróbál azonnal átváltani arra a képernyőre, amelyiknek a számát a DB1.DBW8 a változás után tartalmazza.
Egy képernyőváltáshoz tehát csak annyit kell tenni, hogy a TAG értékébe beleírjuk a PLC programjából azt az értéket, amelyik számú képernyőre át akarunk váltani. Ha a TAG olyan értéket vesz fel, amilyen számú képernyő nincs a HMI-ben, akkor hibaüzenet keletkezik.

Fontos!

A képernyő váltására használt TAG (változó) beállításainál rá kell vennünk a runtime-ot, hogy a változó értékét a PLC-ből folyamatosan újra és újra olvassa ki. Alapértelmezés szerint ugyanis a runtime nem olvassa ciklikusan az összes változó tartalmát. Alapesetben csak akkor olvas, ha a kijelzőn pillanatnyilag olyan objektum van megjelenítve, amelyik használja a kérdéses változót.
Mivel valószínű, hogy a képernyőváltásra használt TAG tartalmát semmilyen objektumhoz nem fogjuk hozzárendelni, meg kell változtatnunk a TAG kiolvasására vonatkozó beállítást.
Ezt a TAG properties-ben tehetjük meg.

ProTool-nál kapcsoljuk be az Options fülnél szereplő Read Continuosly opciót.



WinCC Flexible használata esetén a TAG beállítások general szekciójánál az Acquistion mode lehetőséget állítsuk Cyclic continuous-ra



Ha ezt a beállítást nem tesszük meg a képernyő váltására használt változónál, a runtime nem fogja a PLC-ből kiolvasni annak értékét, ezért nem veszi észre hogy az megváltozott, így a change value esemény nem jön létre, ezért nem történik képernyő váltás.

A módszer hátránya

Ha a PLC programból ezen a módon akarunk képernyőt választani, akkor szembe kell néznünk egy problémával, ami a következő:
A váltás tehát csak az arra kijelöl TAG tartalmának a megváltozásakor történik meg. Ha a HMI-n ezen tag megváltoztatása nélkül is történik képernyőváltás (pl, a nyomógombokkal, menükkel) , akkor kialakul az a helyzet, hogy a TAG nem azt az értéket tartalmazza, amelyik képernyő éppen a kijelzőn van. Ha a TAG segítségévél ilyenkor éppen azt a képernyőt akarjuk láthatóvá tenni, amelyik száma azonos azzal az értékkel amit a TAG jelenleg tartalmaz, akkor a váltás nem lesz lehetséges, mert a PLC hiába írja be a kívánt értéket a változóba, mivel abban már korábban is a most beírt érték volt, az nem fog megváltozni, a HMI-ben ezért nem jön létre a "Change value" esemény, így a képernyőváltás sem történik meg.

Egy példa a fenti esetre:

Tegyük fel, hogy a 7-es képernyőn olyan információk vannak, amiket bizonyos esetekben meg szeretnénk jeleníteni a PLC programmal. Pl. amikor bizonyos hiba keletkezik, és erre a fenti módszert használjuk fel.
Tegyük fel,hogy a kijelzőn éppen a 100-as számú kép látható. Tegyük fel továbbá, hogy a panel bizonyos nyomógombjaival közvetlenül bizonyos képernyőkre lehet átváltani. Pl. F3 mindig a menüt tartalmazó képhez visz, aminek a száma legyen 120.
Miközben a 100-as kép látható a kijelzőn, bekövetkezik az az esemény, ami a PLC programból kiváltja a 7-es képre váltást. A program tehát ennek érdekében 7-es értéket ír a DB1.DBW8-as word-be.
A HMI panel átvált a 7-es képre.
A kezelő most megnyomja az F3-as gombot, ezért a kijelzőn megjelenik a menü, amit a 120-as számú kép tartalmaz (mivel a PLC program nem változtatott a DB1.DBW8 tartalmán, abban továbbra is a 7-es érték van).
Ha most újra bekövetkezik az az esemény aminek hatására a PLC a 7-es képre akar váltani, akkor a program újra 7-et ír a DB1.DBW8-as word-be. Azonban annak tartalma ettől nem fog megváltozni, hisz előtte is 7-et tartalmazott, a HMI nem vált át a 7-es képre, hiszen a DB1.DBW8-ra mutató TAG "change value" eseménye nem következik be.
Ahhoz, hogy a HMI "észrevegye" hogy megint a 7-es képet akarjuk kijelezni, előbb át kellene írni a TAG tartalmát 7-től eltérő értékre. Ha ezt megtesszük, akkor a HMI azonnal megpróbál arra a képre váltani amelyik értéket pusztán csak azért írunk bele, hogy a 7-et visszaírva az értéket megváltoztassuk.

Tehát ha ilyen módon akarjuk használni ezt a lehetőséget, a fenti problémával is számolnunk kell.

A képernyőváltásra van más mód is. A PLC JOB

A PLC JOB segítségével az operátor panelnek (HMI-nek) feladatokat adhatunk a PLC-ből. A sokféle feladat között van egy "select screen" nevű, ami pont megfelel a céljainknak.
Használatukhoz egy areapointerre lesz szükség a PLC-ben. Ez egy 4 word-ből álló terület, ahova beírjuk a JOB számát és paramétereit, a HMI pedig végrehajtja.
A PLC JOB-okról bővebben itt lehet olvasni: Siemens simatic operátorpanelek programozása (5. rész)

A JOB mailbox areapointer létrehozása:
ProTool-ban:




WinCC-ben:



Természetesen az areapointben beállított DB11.DBW54-nek és az azt követő 3 word-nek léteznie kell a PLC-ben, tehát ott is létre kell hozni őket.
Miután ez megtörtént, a PLC-ben erre a területre írva tudjuk az HMI-t arra kérni hogy hajtson végre bizonyos műveleteket.



A képernyőváltást az 51-es számú JOB-bal végezhető el. Célszerű egy FC blokkot létrehozni a képernyőváltás funkció számára. Így elég meghívni megfelelően paraméterezve. Az FC blokknak a következőket kell tennie:
  1. Ki kell olvasnia a Job No-t, (DB11.DBW54) hogy megvizsgálja nulla van-e benne. Ha nem nulla, az azt jelenti, hogy egy job végrehajtása még nem fejeződött be. Ilyenkor nem szabad újabb JOB-ot kiadni a HMI számára. Ha ez a word tehát nem 0, akkor kilép.
  2. Ha a Job No 0, akkor beleírja az 1-es JOB paraméterbe (DB11.DBW56) a képernyő számát, amire váltani kell. Fontos ugyanis, hogy először mindig a JOB mailbox paramétereit kell feltölteni és csak utolsó lépésként a Job No-t.
  3. Majd a Job No-ba beírja az 51-es értéket, ami a Select Screen JOB száma.
A szükséges STL kód csak néhány sor:



A blokkot az alábbi módon lehet meghívni:



Mivel a blokk igen egyszerű, két fontos szabályt kell betartani a hívásával kapcsolatban:
  1. Csak egyszer kell meghívni. A fenti létradiagramban ezért szerepel a ---(P)--- utasítás
  2. Ha olyankor hívjuk meg, amikor egy másik JOB éppen végrehajtás alatt van, akkor nem fog képet váltani
Ha ezek a megkötések alkalmatlanná teszik az adott feladatra, akkor a blokkot annak megfelelően kell módosítani, hogy ezektől a hiányosságoktól mentes legyen.

Megjegyzés:
Bánjunk óvatosan a PLC-ből kezdeményezett képernyőváltásokkal. Ilyenkor ugyanis a kezelő akarata ellenére, "váratlanul" történik képváltás. Ha ez gyakran történik meg, pl. épp akkor, amikor a menüből akar választani vagy éppen egy beállítást módosít, akkor a kezelő bosszankodni fog :) Csökken a kezelési komfort, és nehézkessé teszi a menüben a navigálást. Márpedig a HMI lényege éppen az, hogy a berendezés kezelését könnyebbé és hatékonyabbá tegye.

Köszönet Német Ferencnek, aki felhívta a figyelmem a Fontos részben tárgyalt információk hiányára!

Szirty