X és Y irányú nagyítás OP270 grafikonjain


Az OP270 egy szines WinCE alapú operátorpanel 640*480-as felbontással.
A módszer bármilyen grafikonhoz használható (real time vagy history trend, oszlop, vonal, pont, stb). A leírt példa alkalmazható minden olyan grafikus operátorpanelen, amelyik képes scriptek futtatására.
Az X irányú nagyítás és kicsinyítés egyszerűbb, mert erre maga az OP biztosít lehetöséget, csak elő kell csalogatni a funkciók közül.
A példában nyomógombokkal aktiváljuk a nagyítást és görgetést:
Pl. az F14 gomb növeli a grafikon X tengelyén megjelenített adatok mennyiségét ha a gombhoz hozzárendeljük a Trend_Display_Compress funkciót. Ezt az F14 nyomógomb beállításainál a Functions fülön lehet megtenni úgy, hogy a functions ablakból kiválasztjuk a Keyboard operation for screen objects funkciók közül Trend_Display_compress nevű funkciót.

Az F15 ennek ellenkezőjét teszi, csökkenti az X tengelyen látható adatok számát (azaz nagyít), ha a fenti módon hozzárendeljük a Trend_Display_Extend funkciót. Ha X tengely nagyítva van, akkor nem árt, ha lehet mozogni is, mert a nagyítás miatt az X tengelyen az összes adatnak csak egy részét lehet látni.
Erre a Screen_Display_Scroll_Forward (görgetés elöre) és a Screen_Display_Scroll_Back (görgetés hátra) funkciókat használhatjuk fel.
Mind a négy funkciónak kell egy paraméter, az objektum (jelen esetben a trend grafikon) neve.
Az objektum nevét a grafikon beállításai között a Name fülnél lehet megnézni:



Az Y (függőleges) tengely nagyítása kicsit nehezebb, mert erre nincs kész funkció.
A dolog úgy működik, hogy kihasználjuk a grafikon azon lehetőségét, hogy az Y tengely maximuma és minimuma nem csak konstans lehet, hanem változó értéke is.
Így futás közben lehet befolyásolni hogy az Y tengely milyen tartományt fogjon át. Ha az YMax vagy YMin változó értéke megváltozik, a grafikon azonnal követi a változást. A nagyítást úgy érdemes végezni, hogy a kinagyított Y szakaszban benne legyen a görbe, különben semmit nem lehetne látni.
Ezt úgy érhetjük el, hogy az YMax és YMin értékét a görbe változójának pillanatnyi értékéből számítjuk ki egyszerű összeadással és kivonással. A nagyítás mértéke pedig úgy állítható, hogy a felhasználó megad egy zoom faktort, vagyis egy értéket, amitől a nagyítás mértéke függ.
Legegyszerűbb esetben az Y tengely maximum értéke a zoom fakor feléhez hozzáadva a görbe változójához, az Y tengely minimuma pedig a zoom faktor fele kivonva a görbe változójából. Így a zoom faktor tulajdonképpen az az érték, ami nagyítás után az Y tengely teljes megjelenített értéktartománya.

Pl.: Tegyük fel, hogy grafikonunk Y tengelyének abszolút legnagyobb tartománya 0-100%. (tehát a görbe változója mindig ezen tartományon belül  marad.) Ha most megadunk 10-es zoom faktort amikor a görbe éppen a 47%-os értéket rajzolja és nagyítunk, akkor nagyítás után az Y tengely 42-52
tartományt fogja mutatni (a kezdeti 0-100 helyett). Ez tízszeres nagyításnak felel meg.

Szükség lesz három változóra (tag-ra). Ezeket a Tag-ok között lehet létrehozni:

Az egyik neve legyen Graph_YMin, a másik Graph_YMax a harmadik pedig Graph_Zoom_Faktor. Mindhármat állítsuk <No Controller>-re, mert ezeket a változókat nem akarjuk a PLC-ben tárolni.
Mindhárom legyen INT típusú.
A Graph_YMax tag beállításai között az Options fülnél Initial Value mellé írjunk 100-at (illetve azt az értéket amekkora a grafikon változója által felvett legnagyobb érték, azaz a grafikon abszolút maximuma).
A Graph_YMin Initial Value pedig legyen 0, illetve annyi, amekkora a grafikon változója által felvett legkisebb érték, azaz a grafikon abszolút minimuma.
Az initial value megfelelö beállításával lehet elérni, hogy alaphelyzetben (amikor még nem zoomoltunk) milyen értéktartományt vegyen fel az Y tengely. Ha nincs megadva initial value, akkor a grafikonon nem lesz látható a görbe amíg nem nagyítunk rajta.

Most a grafikon beállításai között válasszuk az Y Axis, Left fület:


Itt a Scale résznél a Max mellett a kék nyíl lenyomása után válasszuk a Dynamicize lehetöséget, minek eredményeképpen lehetövé válik egy tag megadása a max sorában. Állítsuk be a Graph_YMax nevű tag-unkat.
A Min mellett ismételjük meg a műveletet, de a Graph_YMin tag beállításával.
Most már a grafikon Y tengelyének értéktartománya Graph_YMin és a Graph_YMax különbsége lesz.
Ezuán gondoskodnunk kell e két változó értékének megfelelö feltöltéséröl futás közben. Ehhez a Zoom faktorra is szükség lesz.
Graph_Zoom_Faktor számára létre kell hozni valahol a grafikon képernyöjén egy input mezöt, hogy a felhasználó megadhassa rajta keresztül a nagyítás mértékét.
A Graph_Zoom_Faktor tag létrehozásakor a Limit values fülön érdemes a bevihető értéket ésszerű határok közé korlátozni, mert ha a kezelő nagyon vad értéket ír be, akkor a grafikonon semmi nem fog látszani.

Most már megvan a kívánt nagyítás mértéke is, most már csak az összefüggéseket kell megalkotni.
Ehhez két nagyon egszerű VB scriptre lesz szükség.
Az egyik neve legyen Zoom_YMax, ez számítja ki a grafikon Y tengelyének maximum értékét a görbe változójának pillanatnyi értékéböl:

 
A Script legyen function (függvény) típusú. Két paraméterre lesz szükség hozzá, az InVal és ZoomFaktor bemeneti paraméterekre.
Maga a script mindössze a kovetkezö képlet:
Zoom_YMax=InVal+(ZoomFaktor/2)
A Zoom_YMin script számolja ki a görbe változójából a grafikon Y tengelyének minimum értékét.
A beállítások azonosak a fentivel, de a függvény neve Zoom_YMin (paraméterek azonosak). A függvény törzse a következö:
Zoom_YMin=InVal-(ZoomFaktor/2)
Most már csak két beállítani való van. Az egyik, hogy a fenti scripteket megfelelöen paraméterezve nyomógombhoz rendeljük (ezzel a gombbal lehet majd nagyítani).
Legyen a nagyító gomb az F6. Az F6 gomb beállításai között a Functions fülön kell elvégezni az alábbi beállításokat:



A Scripts funkciók közül válasszuk a Zoom_YMin scriptet és végezzük el a következö beállításokat



Return Value-t állítsuk a Graph_YMin tag-ra. InVal-t a grafikon változójára (tehát arra ami a görbét rajzolja a grafikonon)
ZoomFaktor-t a Graph_Zoom_Faktor tag-ra. Ezután ugyanehez az F6 gombhoz rendeljük hozzá a Zoom_YMax scriptet is:
Return Value: Graph_YMax tag
InVal: a grafikon változója
ZoomFaktor: Graph_Zoom_Faktor tag

Hátra van még a nagyítás visszavonására szolgáló funkció megvalósítása. Kézenfekvő ezt egy másik gombra tenni.
Egyszerűen rendeljük hozzá a másik gombhoz (legyen F12) Set_Value funkciót és töltsük ki:

Y: Graph_YMax
X: A grafikon normál kijelzése mellett a legnagyobb Y érték (pl. 100 ha a grafikon %-ot mutat)
Most még egyszer rendeljük hozzá a Set_Value funkciót az alábbi paraméterekkel:
Y: Graph_YMin
X: A grafikon normál kijelzése mellett a legkisebb Y érték (pl. 0 ha a grafikon %-ot mutat)

Ezzel kész.
Ha működés közben megnyomjuk az F6 gombot, akkor a Zoomfaktor beállításnak megfelelöen az Y tengely értéktartománya leszűkül, de úgy, hogy a görbe pont a szűkített tartomány közepén lesz. Az F12 gombra pedig visszaáll a teljes nézet.
Ha a grafikon változója működés közben esetleg kimegy a nagyított grafikonból, akkor elég újra és újra megnyomni a nagyító (F6) gombot. Ha a Zoom faktor közben nem módosítottuk, akkor a nagyítás nem változik, de a az Y tengely értékei úgy módosulnak, hogy a görbe megint a grafikon közepére kerül...
Ha a grafikonon több görbe is van, akkor minden görbéhez külön nagyító gombot rendelhetünk, melyek mindegyike a megadott zoom faktor szerint nagyít, de a saját görbéjét hozza kép közepére a nagyítás mellett...
A nagyításhoz tartozó scripteket pedig bármely másik görbéhez vagy másik grafikonhoz is felhasználhatjuk.

Az eredmény:
zoom1 zoom2






Szirty