Dinamikus objektumok (3. rész)

WinCC Flexible

Az 1. rész itt olvasható
A 2. rész itt olvasható

Animation / ...movement

Mint az már korábban kiderült, a képernyőn elhelyezhető objektumok Animation tulajdonságainál érhetjük el, hogy az objektum valamilyen tulajdonságát a PLC meg tudja változtatni oly módon, hogy egy változó értékét módosítja. Ezt láthattuk a sorozat első részében az Animation / Visibility leírásánál.
Ezek között a változtatható tulajdonságok között nem csak az objektum színe vagy láthatósága szerepel, hanem a képernyőn való helyzete is. Más szóval a PLC programjából mozgathatunk dolgokat az OP/PC képernyőjén.
Vannak korlátai ennek a mozgatásnak, de azért nem is teljesen haszontalan.



Látható, hogy négyféle mozgatás lehetséges:
A diagonal, horizontal , vertical movement nagyon hasonlóan működik, ezért ezekre külön nem térek ki. A Direct movement működése azonban más.

Diagonal, horizontal, vertical movement

Egy tag-et kíván, ami megmondja az objektumnak, hogy vízszintes, függőleges vagy átlós irányban hol helyezkedjen el egy általunk meghatározott egyenes mentén.
Az egyenes meghatározása úgy történik, hogy az objektum elhelyezése után bekapcsoljuk a nekünk kellő properties / Animations / ...movement-et (amelyik irányban mozgatni akarjuk). A négy lehetséges mozgatási mód közül egy objektumnál egyszerre csak egy használható. Ha egyet aktiválunk, a többit már nem lehet (le lesz tiltva).

Az objektum mozgatásához meg kell határoznunk két fix koordinátát, amely kettő között mozgatni kívánjuk.
Start Position és End Position
A koordinátákat úgy kell meghatározni, hogy a koordináta a képernyőn belül legyen és az objektum széle sem lóghat ki a képmezőből (nincs vágás a kép szélén!). Ha a kezdő vagy a vég koordináta olyan hogy az objektum egy része vagy egésze kilóg a képből, akkor fordítás során az alábbi figyelmeztető üzenetet kapjuk:



A project ettől lefordul, de a mozgatás során az objektum megáll a képernyő szélén, nem fogja azt elhagyni.
A koordináta megadható pixelkoordinátákkal, vagy egérrel is. Ha az objektum tulajdonságai között az Animation alatt bekapcsoljuk (engedélyezzük) valamelyik movement-et, akkor megjelenik az objektum másolata, amit az eredeti példánnyal egy piros nyíl köt össze. A másolatot egérrel vontathatjuk a kívánt helyre, ez lesz az End Position.

A mozgatáshoz kell egy Tag, aminek az értéke szerint az objektum az imént megadott két pont között mozogni fog, és egy értéktartomány. Az értéktartomány (range) elejét a from, a végét a to mezőbe kell beírni.
A mozgás úgy fog működni, hogy a Flexible lineáris skálázást végez a megadott változótartomány és az objektumnál meghatározott két végpont koordináta érték között.
Tehát amikor a Tag értéke azonos vagy kisebb mint a from érték, akkor az objektum a Start position-al megadott helyen fog megjelenni. Amikor a Tag felveszi a to (vagy nagyobb) értéket, akkor az End Position-ban lesz. A változó from-to közötti köztes értékeire az objektum arányosan a Start és End Position koordinátákat összekötő egyenes mentén jelenik meg.

          

A példa szerint a zöld korongot az MW40_Int változó mozgatja a bal-alsó sarokból a jobb felső sarok felé a képen látható piros egyenes mentén úgy, hogy 0 értéknél az egyenes alján, 100-as érték esetén az egyenes tetején lesz. 50-nél az egyenes felénél, 25-nél az egyenes egynegyedénél, stb.

A horizontal és vertical movement beállításai azonosak a diagonal movement beállításaival, de természetesen horizontal movement-nél csak a vízszintes koordináta változik, vertical movement-nél pedig csak a függőleges.

A movement működése:


Direct movement

Ezzel egy objektumot tetszőlegesen mozgathatunk a képernyőn belül, nem csak egy irányban, hanem bármilyen irányban, itt azonban nincs skálázás. A Tag-ek, amikkel az objektumot mozgatjuk, pixel eltolást jelentenek.
Az objektum itt sem lóghat ki a képernyőterületről.
Az objektumnak itt is van kezdő koordinátája (Start X Position és Start Y Position). Ez a koordináta itt is azonos azzal, ahova az objektumot elhelyeztük a képernyőn.
Két változóra van szükség. Az egyik az X (vízszintes) eltolás lesz, a másik az Y (függőleges) eltolás.



A Tag által tartalmazott érték hozzáadódik a kezdőpozíció értékéhez mindkét koordinátánál, az objektum az eredmény szerinti X,Y pixelkoordinátákon fog megjelenni.
Példa:
Ha a fenti beállítást vesszük alapul, tehát az objektum a 100,100 koordinátákon van és az MW40_Int tag tartalma -70, az MW42_Int tartalma pedig 178, akkor az objektum a 30, 278 pixelkoordinátákon fog megjelenni.

A direct movement működése:


A runtime itt sem engedi az objektumot a képernyőn kívülre. Ha a tag értéke túl nagy vagy túl alacsony (negatív) és a számított koordináta kívül esik a képernyőn, vagy az adott koordinátával az objektum kilógna, akkor az objektum a képernyő szélén fog megjelenni.
A mozgatást végző tag-ek lehetnek logikai (boolean) típusúak is, de mivel azok csak két értéket vehetnek fel (0 és 1) a horizontal, vertical, diagonal movement használatakor az objektum vagy a start pozícióban vagy az end pozícióban lesz képes megjelenni, köztes helyen nem.
Ha a Direct movement-nél alkalmazunk boolean-t, akkor az objektum egyetlen képponttal fog elmozdulni amikor a tag megváltozik!

Természetesen a mozgatás kombinálható a többi animációs tulajdonsággal (pl. appearance, vagy visibility).
Sőt group-nak (csoportnak) is van movement tulajdonsága. Azonban ha a group-on belül van olyan objektum, amelyiket szintén mozgatni akarjuk, akkor fordításkor figyelmeztetést kapunk:


...ami szerint a csoporton belüli movement tulajdonságot figyelmen kívül fogja hagyni. Ha tehát egy group-ot mozgatunk, akkor a group-ot alkotó objektumoknál nem használhatjuk a movement-et.


Szirty