Dinamikus objektumok (1. rész)

WinCC Flexible

A HMI képernyőjén bizonyos folyamatok vagy állapotok visszajelzéséhez gyakran van szükség szöveges üzenetekre vagy grafikus ábrákra. Ezek megjelenése, helyzete, színe a PLC változók tartalmától függően változik.
Ilyen dinamikus objektumokkal ki lehet jelezni a HMI-n, (akár szövegesen, akár grafikus szimbólumokkal) hogy egy folyamat hol tart, vagy a gép egyes részei milyen helyzetben vannak (a vezérlés szerint) lent, fönt, elöl hátul, stb.
Számtalan módja van ilyen jelzések megjelenítésének. Pl. egy bit állapotától tehetjük függővé egy szöveges vagy grafikus objektum megjelenítését vagy elrejtését. A dinamikus objektumok tehát olyan objektumok, amelyek bizonyos tulajdonságai változnak.

Animation/Visibility

Ezt a dinamikus tulajdonságot a jelzőlámpához tudnám hasonlítani. A lényege az, hogy a PLC belső változójának egy bitjének az állapota (vagy egy nem boolean típusú változó értéke) szerint az objektum látható legyen a kijelzőn vagy ne. Ez az objektum amit ilyen módon eltüntetünk vagy megjelenítünk lehet egy szöveg mező (text field) nyomógomb, vonal, beviteli mező (IO field), szinte bármi.
Működtetésének két típusa van:



Integer:
A PLC változónak, amivel az objektum megjelenítését befolyásolni akarjuk, olyan típusúnak kell lennie, ami alkalmas egész szám ábrázolására.
Tehát nem kell szigorúan int-nek lennie (16 bites egésznek), az alábbi típusokat elfogadja:
Bool, Byte, Word, DWord, Int, DInt, Counter, Time, Char
A Range from és to mezőkben egy értéktartományt lehet megadni, amin belül érvényes lesz a megjelenítés vagy elrejtés. Ha mindkét mezőbe ugyanazt írjuk, akkor annál az egy konkrét értéknél lesz érvényes (vagyis nem csak tartományt, hanem konkrét értéket is megadhatunk így).
A típusfelsorolásban kicsit kakukk tojás a bool, de hát az is képes egész számok ábrázolására, még ha más nem is lehet csak 0 és 1.
A Char viszont nagyon kakukk tojás, mert karakterek ábrázolására használják. Itt viszont érdekes módon úgy működik, mint egy byte-ban ábrázolt egész szám, ami -128...+127 értékeket vehet fel.
Ha a tag Time típusú, akkor a range mezőben ezred másodperces (ms) lépésekben időt lehet megadni
Ha viszont Counter, akkor a tag-ből kiolvasott értéket 16 bites előjeles pozitív (3 digit +előjel) BCD számként fogja értelmezni. Így ilyenkor a 0-999 tartományt fogadja el a range mezőkben.

Bit
Amikor az objektum megjelenését logikai (boolean) változó állapotával akarjuk vezérelni, ezt a típust kell kiválasztani.
Itt további két lehetőségünk van:
  1. Boolean típusú tag-et adunk meg a Tag mezőben. Ez egyértelműen eldönti, hogy az objektum megjelenése ennek a boolean változónak a lehetséges két állapotától függ majd.
  2. Ha a Tag mezőben nem boolean típusú tag van megadva, akkor a Bit position mezőben be kell állítani melyik bit állapota vezérelje az objektum megjelenését. Amennyiben a tag boolean, ez csak 0 lehet, hiszen a boolean csak 1 bit információt hordoz.
    Byte és Char típusnál ez 0-7 lehet (8 bites adattípusok), Word, Int, Counter-nél 0-15 (16 bites típusok) és DWord, DInt, Time esetén 0-31 (32 bites típusok).
Az Object state beállítás dönti el, hogy a fentebb megadott kritérium teljesülése esetén az objektum el legyen rejtve (Hidden) vagy akkor legyen látható (Visible):


.
Példa:
Ha azt akarjuk, hogy egy byte típusú változónk 4-es bitje =1 (true) akkor legyen látható az objektum, akkor a szükséges beállítás:
Type: bit, Bit position: 4 Object state: Visible.

Példa

Az alábbi példában három variációt láthatunk az objektumok eltüntetésére és láthatóvá tételére.
A bal oldalon két szöveg (A zöld szöveg 1 és a piros szöveg 2) megjelenése egy-egy bool típusú merker bithez van hozzárendelelve.
A jobb oldalon 10 darab text objektum látható, amik a megjelenése vagy eltűnése szintén bitek állapotától függ, de egy merker byte (MB2) adott bitjeitől és nem egy boolean változó állapotától.
Végül alul négy fekete hátterű text objektum van, amik akkor jelennek meg, ha az MW3 integer értéke egy meghatározott tartományon belül van.



 Egy video szemlélteti a z Animation/Visible működését: symbol1.avi (1.8M)

Természetesen Animation/Visible tulajdonsága nem csak szöveges (text) objektumnak lehet, hanem a legtöbb fajta objektumnak (szinte mindegyiknek).
Csoportnak (group) nem adhatunk ilyen tulajdonságot, de ha több objektum van kijelölve, akkor azok mindegyikéhez hozzárendelhetünk visible tulajdonságot (az összes kijelölt elemre fog vonatkozni).

Animation/Appearance

Itt az objektum megjelenését lehet változó tartalomtól függővé tenni. Mit is jelent a "megjelenés"? Nem többet, mint a színét és azt hogy villogjon-e vagy sem.
Ha megnézzük egy objektum Animation/Appearance tulajdonságát, egy táblázatot látunk és néhány kapcsolót:

Bool, Byte, Word, DWord, Int, DInt, Counter, Time, Char

Alapértelmezés szerint az objektumok dinamikus tulajdonságai tiltva vannak. Nem csak az appearance, hanem a visibility és a többi is. Ezért a beállítást mindig az Enabled kapcsoló bekapcsolásával kell kezdeni.
Itt is meg kell adni egy változót a Tag mezőben. Ennek tartalma fogja vezérelni az objektum megjelenését.
Ugyanazok a szabályok és változó típusok használhatók, mint a Visibility-nél (Bool, Byte, Word, DWord, Int, DInt, Counter, Time, Char).
A Type mezőben a vezérlés típusát kell meghatározni:

Integer
Ennél konkrét értékekhez, vagy értéktartományokhoz lehet színeket rendelni.
A különböző értékekhez tartozó színeket a táblázatban kell megadni:



Ha a változó tartalma beleesik a tartományba (vagy egyenlő a konkrét értékkel), akkor az objektum felveszi a mellette megadott színeket.
Mivel egyszerre csak egy előtér és háttér színt vehet fel az objektum, a Value oszlopba beírt tartományok nem fedhetik át egymást és két azonos érték sem adható meg. Ilyen probléma esetén a flexible azonnal narancssárgára színezi a problémás beállítást.

 Amennyiben a változó tartalma egyik tartománynak és értéknek sem felel meg, akkor az "eredeti" színekkel fog megjelenni, vagyis azokkal, amiket a Properties/Appearance tulajdonság Fill mezőiben állítottunk be.
Ha olyan értékt/tartományt adunk meg, amit a változó soha nem vehet fel (mert kívül esik az ábrázolási tartományán) akkor az objektum az ehhez rendelt színekkel soha nem jelenik meg. Erre nézve a flexible nem végez vizsgálatot a szerkesztés során.

Binary

Amikor az Animation/Appearance Type beállítása binary, akor a táblázat Value oszlopa bit numberré változik.
Ennek megfelelően a táblázatban kitöltött előtér és háttér színt a változónak nem a számszerű értéke, hanem a Bit number oszlopban megadott számú bitje fogja aktiválni, amikor a bit 1 (true) állapotban van.



Mivel egy változó több bitje is lehet egyszerre 1 állapotban (kivéve a boolean típusút), de az objektum nem vehet fel egyszerre több előtér vagy háttér színt, az adott színt csak akkor veszi fel, ha csak az az egy bit 1 és a többi 0 állapotban van.
Ha egynél több olyan bit is 1 állapotban van, amelyik szerepel a táblázatban, akkor az objektum "eredeti" színű lesz. Azokat a biteket nem figyeli, amelyikhez nincs szín rendelve.
Tehát az az objektum ami a képen látható beállítással bír, akkor lesz sötétkék előterű, amikor az MB2 byte 5-ös bitje 1 állapotban van és a többi bit 0 állapotú. A színre a byte 6-os és 7-es bitje nincs hatással, mert azok nem szerepelnek a táblázatban.

Nyilván akkor van értelme ilyen binary típusú appearance beállításnak, ha a PLC programban gondoskodunk arról, hogy mindig csak egy olyan bit legyen aktív, amelyik színt határoz meg.
A táblázatban megadhatunk olyan biteket is, amilyenekkel a Tag nem is rendelkezik. Az ezekhez rendelt színeket az objektum soha nem fogja felvenni.
Pl ha a tag típusa boolean, akkor a táblázatban nincs értelme egynél több sort felvenni, mert a boolean típusnak csak nullás bitje van.

Bit
Ezzel a Tag-nek egy bizonyos bitjét lehet kipécézni, minek az állapotától függ majd a szín.
A táblázat első oszlopa ismét Value, de most csak a 0 és az 1 értékeket fogadja el, mivel egy bit csak ezt a két állapotot veheti fel. Nem kötelező a bit mindkét állapotát felvenni a táblázatba. Ha a bit állapota nem felel meg a Value oszlopban adottnakl, akkor az objektum "eredeti" színű marad (nem változik meg a színe).



Itt is lehet boolean változó, de olyankor a bit számát mindig 0-ra kell beállítani.

Fontos megjegyezni, hogy amennyiben a fill style beállítás nem Solid, hanem Transparent (vagyis az objektum háttere nem kitöltött, hanem átlátszó) akkor a táblázat Background Color oszlopában végzett színbeállítás hatástalan lesz, egyetlen kivétellel:
Ha a Flashing oszlopban egy értékhez Yes (vagyis villogtatás) van beállítva, akkor a háttér színe hatásos átlátszóra állított háttér mellett is, mivel a villogtatást a flexible az előtér és háttér színként megadott színek felcserélgetésével végzi. 

Animation / Appearance Video file Appearance.avi (3.4MB)

Symbolic IO field és text list

Ez az objektum egy olyan ki és beviteli lehetőség, aminél egy változó (tag) értékeihez, vagy bitjeihez szöveg van hozzárendelve. Az objektum azt a szöveget jeleníti meg, ami a hozzárendelt változó értékétől függ.
A megjelenített szöveg és az érték, tartomány, vagy a változó bitje közötti összefüggést az ún. szöveglistában (Text list) kell deklarálni.



Három lehetőségünk van a változó tartalom és megjelenített szöveget tartalmazó lista közötti összefüggés megadására:



Bit (0, 1)
Boolean változóhoz lett kitalálva. A bit false és true értékéhez lehet szöveget hozzárendelni. Más típusú változó is megadható, de olyankor annak csak a nullás bitjét veszi figyelembe.


Bit number (0-31)
A változó bitjeihez rendelhetjük hozzá a szöveglista elemeit. Ha a listában az adott szövegelem mellett megadott bit true állapotú lesz, akkor a szöveget a symbolic IO field megjeleníti. He egszerre több olyan bit állapota is true, amihez a listában szöveg van rendelve, vagy minden bit false, akkor a symbolic IO field nem jelenít meg szöveget, vagy a default-ként jelölt szöveget mutatja, amennyiben van ilyen.
Nem kötelező minden bitet felsorolni a szöveglistában. A fel nem sorolt bitek állapotát figyelmen kívül hagyja.


Range (...-...)
Ezzel a  szövegeket értékhez vagy tartományhoz rendelhetjük. A listában vegyesen is megadható érték és tartomány is. De ahogy azt az Animation / Appearance lehetőségnél is láttuk, a tartományok és értékek a listán belül nem fedhetik át egymást.
Ha a változó olyan értéket vesz fel, amelyik egyik értéknek és tartománynak sem felel meg, akkor a symbolic IO field, üres marad. Ha van default sor a listában, akkor az üres helyett annak a szövegét fogja kijelezni.


A szöveglista, a változó és a symbolic IO field egymáshoz kapcsolása a symbolic IO field General beállításainál lehetséges:



A Mode beállításnál négy lehetőségünk van az objektum viselkedésének befolyásolására: Input, Input/output, Output és Two states.

Input:
A felhasználó választhat egy legördülő listából, ami felsorolja a szöveglista összes elemét (kivéve a Default elemet). A választás után a választott szöveghez rendelt értéket a runtime beleírja a változóba. Ha a választott szöveghez tartomány van rendelve, akkor annak legkisebb értékét írja bele a változóba.
Az input típusú beviteli mezők és objektumok csak írják a változó tartalmát, de nem olvassák ki. Ezért az ilyen mezőben mindig az látható, amit a kezelő utoljára választott, vagyis a kijelzett szöveg nem követi a változó értékének módosulását, ha az nem az objektum segítségével változott meg.

Input / output
Azonos az Input móddal azzal a különbséggel, hogy olvassa is a változó tartalmát, ezért a kijelzés követi a változó módosulását akkor is, ha annak tartalmát más objektum vagy a PLC program változtatja meg.

Output
Csak olvassa a változó tartalmát és annak megfelelő szöveget jelenít meg, de a kezelőnek nincs lehetősége az érték megváltoztatására. Csak kijelzésre szolgáló mód. Input és Input /output módban kapunk egy Number of visible items beállítást is. Ezzel korlátozhatjuk, hogy amikor RT-ben a kezelő lenyitja a listát, egyszerre hány elemet lehessen benne látni (a lista mérete). Rendszerint nincs értelme itt nagyobb számot megadni, mint ahány elemből áll az objektumhoz hozzárendelt text lista.

Two states
Két állapotú megjelenítésre való mód. Eltér a többitől, mert itt nem kell szöveglistát is megadni a Symbolic IO field-nek. A boolean változó két állapotához közvetlenül a General beállításnál írhatunk szöveget.
Nagyon hasonló tehát ahhoz, mint amikor  Bit (0,1) típusú szöveglistával dolgozunk, de itt mind a két állapothoz kötelezően meg kell adni egy-egy szöveget:


Amennyiben a Tag típusa nem boolean, a Value at ON state mezőbe be kell írnunk a változó azon értékét, amit ON (bekapcsolt) állapotnak kell vennie. Ilyenkor a Text ON mellett beírt szöveget jeleníti meg és a Text OFF melletit ha az érték ettől eltér.

Mint a legtöbb objektumnak, a Symbolic IO field-nek is van Animation/Visibility és Appearance tulajdonsága, tehát az ott leírtak alkalmazhatók rá (változhat a színe, és láthatósága).

 Symbolic IO field video file symbolio.avi (6.1MB)

A második rész itt olvasható!



Szirty