WinCC Flexible

Információ töredékek, jegyzetek, tippek
módosítva: 2012. November 29

A témához tartozik, hogy kétféle WinCC létezik, amit nem mindenki tud. (Sőt a TIA portál megjelenése óta tulajdonképpen három. vagy inkább négy, most hogy a Siemens bevásárolt és lett egy olyan, hogy WinCC OA)
Az első kettőnél maradva: egyik a WinCC Flexible, a másik a WinCC. A Flexible alapvetően HMI szoftver, a ProTool utódja. Az új operátor panelek már szinte kizárólag WinCC Flex runtime-mal jönnek ki. Ezek típusjele a 7-es számra végződik, néhány kivételtől eltekintve (pl. OP7, OP17).
A WinCC egy SCADA szoftver. A WinCC Flexible verzióit a 2005, 2007, 2008 számokkal illetik, a WinCC verziói pedig 6.0, 6.2 7.0 stb...

Tartalom:
Képernyő szám átadása a PLC-nek
A fixpontos ábrázolás problémája HMI-ben
Soha be nem töltődő WinCC Flexible
Alapértelmezett tulajdonságok megváltoztatása
Képernyők közötti navigáció készítése gyorsan
Objektum tulajdonságainak megváltoztatása VB scriptből
Flashing
Internal warning
Access Point
Tab order megváltoztatása
A Polyline és a Template button esete
Több kapcsolat a WinCC Flexible RT-ben
Kommunikáció CP-vel
Nem használt tag-ek keresése
WinCC Runtime Miniweb HTTP server port beállítása
WinCC Flexible és Windows kompatibilitás
A bejelentkezett felhasználó csoport tagságának változóba helyezése
Nyomógomb event-ek
Radiobutton
Időtag idejének megváltoztatása HMI-ről

Képernyő szám átadása a PLC-nek
Előfordul, hogy a PLC programban szükség van arra az információra, hogy a kijelzőn melyik képernyő van éppen megjelenítve.
Erre egy példa: Egy összetettebb gép kézi működtetése úgy van megoldva, hogy a gép egyes részei funkcionálisan csoportosítva vannak, egy csoportban az egy művelethez vagy technológiai fázishoz tartozó beavatkozó szervek tartoznak. Egy-egy ilyen csoport minden egyes mozgatásához (munkahenger, motor, szelep) kijelölünk egy képernyőt és azon belül kiválasztó gombokat helyezünk el, amikkel ki lehet választani a csoporton belüli "hajtást". Másik képernyőn másik csoport, stb.
De hogy ne kelljen minden egyes csoport minden egyes tagjához egy külön kézi kiválasztó bitet hozzárendelni, a kiválasztást úgy oldjuk meg, hogy külön bitekkel választjuk a csoportot és külön bitekkel az azon belüli hajtást.
Ha 9 csoport van és csoportonként átlag 8 hajtás, akkor így csak 9+8=17 kiválasztó bitre van szükség. Ha minden hajtás kiválasztására külön bitet használnánk fel, akkor 9*8=72 bit kellene.

 

A kevesebb kiválasztó bitet igénylő megoldáshoz a PLC-nek tudnia kell melyik HMI képernyő van megjelenítve, hogy ki tudja találni melyik csoport van kiválasztva.
Több módon is megoldható a dolog, én egyet ismertetek ezek közül.

Szükség lesz egy 5 word (10 byte) méretű adatterületre. Célszerű egy DB blokkban létrehozni ezt a területet, természetesen nem kell neki külön blokk, bárhol lehet.
Az alábbi példában a DB10-ben kapott helyet a 10-es címtől kezdődően.



Ezután a HMI-ben beállítható néhány úgynevezett "areapointer". Ez a PLC-ben egy merker vagy DB adatterületet jelöl, amiben több elem is van. Mindegyik areapointernek egy meghatározott, fix szerepe van. Ezek között találunk egy olyat, aminek az a neve hogy Screen number. Funkciója az, hogy amennyiben deklarálunk hozzá egy PLC-beli memóriaterületet, ott olyan adatokat helyez el, ami az éppen kijelzett képernyőtartalomra utal.
A beállításához nyissuk meg a Communications / Connections-t és válasszuk ki az Areapointer fület. Az All connection szekcióban a Screen number nevű sornál állítsuk be az előkészített 5 integernyi terület kezdőcímét.



Ezután a PLC programban kiolvashatjuk az areapointer változóiból, hogy melyik képernyő van éppen kijelezve a HMI-n.
A HMI a Screen number területen 5 integer típusú adat van:
DB10.DBW10 SCR_Type A megjelenített képernyő típusa. Tartalma 1 amikor felhasználói képernyő aktív, 4 fix ablak esetén (?)
DB10.DBW12 SCR_Num A képernyő száma
DB10.DBW14 SCR_Res1 Fenntartott, nem tartalmaz értékes adatot, de a létrehozása szükséges!
DB10.DBW16 SCR_Field Az aktív mező száma a képernyőn. Ez minden olyan elemre vonatkozik ami kiválasztható (nyomógomb beviteli mező, stb). Az elemek egymás utáni sorrendje a tab order szerinti.
DB10.DBW18 SCR_Res2 Fenntartott, nem tartalmaz értékes adatot, de a létrehozása szükséges!
A képernyő számának megállapításához a programban két összehasonlításra van szükség:



A példa szerint ha a 202-es számú kép van kiválasztva, akkor az M5.2 merker bit TRUE állapotú lesz.


A fixpontos ábrázolás problémája HMI-ben
A fixpontos szám ábrázolás lényege, hogy a törtet egész számmal írjuk le, úgy, hogy megszorozzuk tízzel, százzal, ezerrel, stb. Így olyan számot kapunk, amit a programban egész számként kezelhetünk, de a HMI-n törtként jelenik meg, aminek a tizedes vesszője mindig ugyanott van (ugyanannál a helyiértéknél).
Ez olyankor hasznos,  amikor az értéket célszerűbb egész számként tárolni, vagy kezelni, mint 32 bites lebegőpontos számként (REAL ítpus). Pl. kis tartományt átfogó értéket legalább 1 vagy 2 tizedes pontossággal szeretnénk megjeleníteni, de a REAL típus pazarlóan fölösleges, vagy REAL használatával konvertálgatni kellene INT és REAL között.

A WinCC Flexible támogatja a fixpontos számok megjelenítését és bevitelét az IO Field objektum segítségével. A módszer igen egyszerű, az egész számot úgy jeleníti meg, hogy egy tizedes pontot tesz az általunk megadott helyiérték mellé:



Így ha INT vagy DINT típusú DB1.VAR2 tag értéke 1234, akkor az IO field 123.4-et fog megjeleníteni. A bevitelnél is támogatja a módszert, tehát a mezőnek input/output módot adunk, akkor a változóba a mezőbe beírt szám tizede kerül (a fenti példa szerint).
Ez így jól működik. A probléma az, hogy ha egy ilyen számot trenddel, vagy gauge objektummal szeretnénk megjeleníteni, akkor kiderül, hogy ezek az objektumok ezt nem támogatják.
Persze egy fix pontos szám is meg fog jelenni ezekkel az objektumokkal, csak éppen a tízszeresük, a százszorosuk, az ezerszeresük stb, attól függően, hogy a tizedes pontot hány helyiértékkel toltuk el balra.
Ez kényelmetlenséget okoz, mert ezeknek az objektumoknak van skálája, amiknél nem tolható el a tizedes pont, mert az objektumok beállításai erre nem adnak lehetőséget.

Lássunk egy példát:
A programban százalékot számolunk, amit meg akarunk jeleníteni HMI-n. Vagyis van egy változónk, ami 0-100 értéket tartalmazhat. Hogy a megjelenítés pontosabb legyen eltoljuk a tizedes egyel balra, így a változónk 0-1000 tartományba eső értéket vehet majd fel, ahol a százalék érték a változó tartalmának egytizede. 896=89.6%, 23=2.3% stb). A fent említett módon ennek kiírása IO field objektummal nem probléma.
Ha azonban gauge objektummal vagy trenddel szeretnénk látványosabb kijelzést is, akkor két (rossz) lehetőségünk van:

1. Az objektum skáláját 0-1000-re állítjuk be. Így a 0-100% tartományt átfogó skálát fogunk látni, de a skálafeliratok hibásan tízszeres értékeket fognak tartalmazni:
   
2. Az objektum skáláját 0-100-ra állítjuk be. Így a 0-100% tartományt átfogó helyes skálát fogunk látni, de az objektum 10% fölött túlcsordul, mert afölött a változó tartalma 100-nál nagyobb lesz.
   
A helyes kijelzéshez a változó tartalmának tizedére van szükségünk (az osztási maradék elhagyásával). Ezt is többféleképpen állíthatjuk elő. vagy a PLC programban minden ilyen értéknek lesz egy párja, ami nem fix pontos, hanem egész szám (a példa szerinti esetben a százalék érték, ami 0-100 lehet). Ez növeli a HMI-ben az online TAG-ek számát, a PLC programját, stb.

A másik lehetőség, az érték előállítása a HMI-ben, ami talán elegánsabb az első megoldásnál.
Erre a megoldásra mutatok egy példát:
Hozzunk létre a nem fixpontos százalék számára egy Var2_Internal nevű belső TAG-et integer típussal:



A PLC-ből kiolvasott fixpontos TAG (a páldában ennek neve DB1.VAR2) change value eseményéhez rendeljük hozzá az InverseLinearScaling funkciót az alábbi szerint:



Az InverseLinearScaling X=(Y-b)/a számítást végzi, tehát: Var2_Internal=(DB1.VAR2-0)/10
Tehát amikor a PLC-ből olvasott DB1.VAR2 fixpontos százalék értékünk megváltozik (Change value esemény) akkor elosztja tízzel és az eredményt a Var2_Internal nevű belső változóba teszi.

Ezután már csak annyit kell tennünk, hogy a százalék kijelző objektumunknak 0-100-as skálát állítunk be (gauge, trend) és nem a DB1.VAR2 változót adjuk meg process TAG-ként, hanem a Var2_Internal nevűt, ami az előbbi értékének a tizedét tartalmazza.


Soha be nem töltődő WinCC Flexible
Biztos nem mondok újat azzal, hogy a számítástechnikában (informatikában) bizonyos együttállások váratlan, igen meglepő (de általában cseppet sem mulatságos) következményeket produkálnak.
A Windows XP + WinCC Flexible 2008 is képes ilyesmire. Bizonyos értelemben speciális eset, mert a jelenségnek sok feltétele van. De nem bízzunk abban, hogy egy ilyenbe soha nem fogunk belefutni.
A saját esetemen okulásképpen most bemutatok egy ilyet:

Windows XP-hez két monitort használok, mert megkönnyíti a munkát. Hogy miért és hogyan, azt nem részletezem aki használt már két monitort egy gépen tudja, aki nem, az ha teheti próbálja ki!
A lényeg, hogy intenzív munkához hasznos, máskor azonban fölösleges is lehet. Mivel a desktop tulajdonságok folytonos állítgatása körülményes én azt a módszert választom, hogy amikor nincs szükség mindkét monitorra, akkor a másodlagost egyszerűen nem kapcsolom be. De a desktop ilyenkor ki van terjesztve rá. Ablakokat, egeret stb át lehet húzni a be nem kapcsolt monitorra ilyenkor is.
Persze figyelni kell arra, hogy a munka végén minden ablakot előbb át kell húzni az elsődleges monitorra és csak azután bezárni, hogy legközelebb is ott jelenjen meg.
A legtöbb programnál ez a gyakorlat működik is. Még a WinCC Flexnél is. Csak nem mindig :)
Valamiért néha (fogalmam sincs mitől függ) megmakacsolja magát és mindenképpen a másodlagos monitoron nyitja meg az ablakát, amit kikapcsolt monitor esetén persze nem látok, de már megtanultam, hogy ilyenkor a tálcán jobb gombbal áthelyezést kérve a másik monitor fölösleges kapcsolgatása nélkül is vissza lehet hozni. Ez is körülményes kicsit, de ritkán történik meg, bosszantó, de olyan nagy mértékben a dolog nem zavar, együtt tudok élni vele.
Mindezt azért írtam le, mert az említett meglepetés egyik lényeges körülménye.

Hozzávalók:

A következő történik:
Megjelenik a SIMATIC WinCC flexible - open HMI station ablak, benne a progress barral, ami mutatja a betöltődés előrehaladását. Ez megszokott dolog, mindig így csinálja.



A jelzősáv szépen eléri a 100%-ot, majd más, szemmel látható dolog nem történik. Az ablak a képernyőn marad, a WinCC Flexible nem indul el.

Azt ilyenkor nem lehet látni, hogy a másik monitoron is megjelenik egy ablak, mégpedig ez:



Szeretné megtudni mit akarunk tenni a dologgal kapcsolatban (az üzenet tartalma az ügy szempontjából nem lényeges), de ezt valamiért a másodlagos monitoron teszi.
A Flexible amíg a válaszra vár, a "félig betöltődött" állapotban leledzik, vagyis fogja a Simatic managert, amihez nem férünk hozzá és még nem nyílik meg a Flexible ablaka, így azt nem lehet a tálcán látni, és azt ott áthelyezésre késztetni. Ez az üzenet ablak onnan nem helyezhető át.

Alapértelmezett tulajdonságok megváltoztatása
Amikor a WinCC Flexible képernyő szerkesztőjében valamilyen elemet elhelyezünk, egy bizonyos beállítás szerint kerül a képernyőre. Pl. ha lerakunk egy szöveget (Text field) akkor az fekete színű, átlátszó hátterű, 12-es méretű, balra fel igazított  lesz.
Ha gyakran  másmilyen beállítást szeretnénk, akkor minden elhelyezés után át kell állítgatni az objektum beállításait (esetleg egy másik másolatából kell létrehozni az újat).


  Ezt elkerülhetjük, úgy, hogy megváltoztatjuk az objektumok alapértelmezés szerinti beállítását, mivel erre van lehetőség.

Kattintsunk jobb egérgombbal a Tools ablakban azon az objektumon, amit állítani szeretnénk, majd a megjelenő menüből válasszuk az Edit default setting... pontot. Egy ugyanolyan beállító panelt kapunk, mint amikor egy már elhelyezett objektum tulajdonságait szerkesztjük. Csak ez nem a már elhelyezett objektumra vonatkozik, hanem azokra, amiket majd ezután helyezünk el. Itt tetszés szerint beállíthatjuk milyen legyen amikor lerakunk belőle egyet.

Általában néhány egyszerű alaptulajdonságot érdemes itt megváltoztatni, mint szín betűméret, igazítás. Bár van lehetőség az Animation beállítások módosítására is, de ha nem akarjuk, hogy ezután minden lerakott objektum valamilyen fix animációs beállítással jöjjön létre, akkor csak kényelmetlen lesz.

Érdemes megjegyezni még, hogy pl. a Symbolic IO field-nél általában bosszantó, hogy a méretezése nem igazodik automatikusan a hozzárendelt szöveglistában lévő leghosszabb szöveghez, mert az automatikus méretezés ki van kapcsolva.





Ha bekapcsoljuk az automatikus méretezést, akkor a Symbolic IO field elhelyezésekor annak mérete 1x1 pixel lesz, mert olyankor még nincs hozzárendelve szöveglista és nem tudja meghatározni a méretet.
Ha erre nem vagyunk felkészülve, az okozhat néhány kellemetlen percet, mert az elhelyezés pillanatában az elhelyezett objektum ki lesz jelölve ezért látszani fog, de ha véletlenül megszűntetjük a kijelölését (mellé kattintunk) akkor eltűnik!
Ha emlékszünk hova tettük és az nem a képernyő mindenfélével telezsúfolt része, akkor van esély megtalálni, de erre a jelenségre oda kell figyelni :)

Képernyők közötti navigáció készítése gyorsan
Nem, nem a WinCC Flexible beépített navigation control funkciójáról fogok beszélni, ahol a nyomógombokat és a hivatkozásokat automatikusan helyezi el a Screen navigation oldalon megszerkesztett hierarchia szerint! Én nem nagyon szeretem azt a funkciót, de ennek ellenére sem mondhatok róla rosszat, mert gyors és hatékony, bár uniformizált.

Amiről itt szó lesz az ennél lényegesen egyszerűbb és hovatovább kézenfekvő is.
Azt biztosan minden WinCC Flexible fejlesztő átélte már, hogy a projectekben elkerülhetetlenül kell egy kicsit vágni a fát. Konkrétan: ismétlődő és időt rabló mozdulatsorokkal elhelyezni nyomógombokat és beállítani, hogy amikor azokat megnyomják akkor az OP jelenítse meg ezt meg azt a screent. Pl. a menük készítése épp ilyen. Persze ezen segít az említett Screen navigation funkció, de akik nem használják mindig, azoknak hasznos lehet ez a tipp (már ha sikerül vele újat közölni).

Egy képernyő váltásra szánt nyomógombot úgy is felparaméterezhetünk, hogy a gombra rádobjuk azt a screen-t, amelyikre váltani akarunk vele. Ehhez csak el kell helyezni egy Button objektumot (illetve azt sem, ha az OP hardveres nyomógombjával szeretnénk ezt megtenni), majd egér bal gombját lenyomni egy screen nevén és a gombot nyomva tartva a gomb fölé kell húzni, majd ott elengedni (drag and drop).



Ez a művelet beállítja a gomb Press Eventjét (Softkey esetén) illetve Click eventjét (Button esetén) ActivateScreen funkció hívására, amit felparaméterez a rádobott képernyő nevével.
A Button objektum Text mezőjét is kitölti a screen nevével (amit persze átírhatunk ha szükséges).
Ezzel a módszerrel villámgyorsan tudunk képernyőváltó gombokat paraméterezni.

Objektum tulajdonságainak megváltoztatása VB scriptből
A HMI runtime által megjelenített grafikus objektumok számos tulajdonságát lehet futás közben módosítani mint tudjuk változók tartalma alapján. Erre való az objektum tulajdonságlapján az animation rész.
Erről részletesebben a Dinamikus objektumok című írásban lehet olvasni.
Bármilyen tulajdonság azonban nem befolyásolható az animation lehetőséggel. Pl. a színek csak egy előre megadott táblázat alapján váltható át (appearance), tetszőleges színt nem tudunk neki ott adni. A kör átmérője / sugara fix, nem befolyásolható, bár a képernyőn mozgathatjuk.
Bármit úgy sem tudunk megtenni az objektumokkal, de az animation lehetőségeit kibővíthetjük VB script segítségével. Erre adok itt egy tippet a teljesség igénye nélkül.

A dolog bemutatására készítettem egy egyszerű HMI projectet, amiben egy kör keret és háttér színét lehet 6 TAG segítségével szabadon, fokozatmentesen változtatni és egy hetedig TAG módosítja a kör sugarát.
Szükség van három változóra (TAG). A módszer bemutatásához nincs szökség PLC-re, ezért én belső változókat (Internal tag) használtam. Egy TAG kell a háttér szín (BGColor) egy az előtér szín (FGColor) és egy a kör sugarának befolyásolásához (Radius):



Vegyük észre, hogy a BGColor és FGColor változónk Array TAG, vagyis tömb, aminek 3 eleme van (az Array elements oszlopban ezért van 3-as szám). A tömb 3 eleme tartalmazza a szín 3 összetevőjét: Vörös, Zöld, Kék (RGB). A harmadik változó egy elemű (nem tömb) és a kör sugarát fogja megadni pixelben.

Szükség van arra, hogy a bemutatás érdekében a változó értéke változzon is, hogy lássuk mi is történik. Erre 4 csúszkát (Slider) használtam, amit a kör mellett helyeztem el:


A bal oldali 3 csúszka a BGColor TAG 3 elemének értékét állítja 0-255 tartományban, a következő három az FGColor 3 elemét, a jobb szélső pedig a Radiius-t 0-160 tartományban ahogy a csúszkákat mozgatjuk.

 

Most már csak a scriptre van szükség és arra, hogy azt lefuttassuk. Azért használjuk a 0-255 értéktartományt, mert a scriptünk az RGB() függvénnyel fogja beállítani a színt, ami a szín összetevők értékét ebben a tartományban limitálja.
A VB script a követvkező:



Lényeges, hogy a kör, amelyik színét és sugarát változtatni szeretnénk melyik képernyőn van és a körnek mi a neve. Azért fontos ez, mert bármely képernyőre tehetünk kört és egyre akár többet is. Így kénytelenek vagyunk megmondani a scriptben, hogy melyik képernyőn melyik kört is akarjuk módosítani. (nyilván nem akarjuk, hogy minden kör színe és mérete a script szerint módosuljon).
Amikor elhelyezünk egy objektumot a képernyőn, annak a Flexible automatikusan nevet ad (minden objektumnak kötelezően névvel kell rendelkeznie, mert az azonosítja). A köröknek circle, a négyszögeknek rectangle stb. nevet ad. Mivel több azonos típusú objektum is lehet egy képernyőn (több kör, több négyszög, stb) ezért a név után ad neki egy számot is

A képernyő neve egyértelmű, azt nem akarom magyarázni, de az objektumok nevével kevésbé gyakran kell foglalkozni ezért leírom hogyan nézhetjük, vagy változtathatjuk meg a nevét:
Kattintsunk a körre hogy aktív legyen (más objektum ne legyen aktív, csak a kör) és a Properties ablakban válasszuk a Misc tulajdonságot és megtaláljuk a kör nevét:



A properties ablak fejlécében is megjelenik a név, a Misc mezőre csak akkor kell kattintani ha a nevét át akarjuk írni.
Megjegyzés: Egy képernyőn belül nem lehetnek azonos nevű objektumok.
A példa script, a Circle_1 nevű kört akarja módosítani a Screen_1 nevű képernyőn, ezért ha a példát rekonstruálni szeretnénk, adjuk nekik ezeket a neveket (vagy módosítsuk megfelelően a scriptet).

Az utolsó teendő arról gondoskodni, hogy a script le is fusson.
Mikor kell lefutnia? Amikor módosul a BGColor és FGColor vagy a Radius nevű TAG értéke (amikor elmozdítjuk valamelyik slidert). Ezért kézenfekvő, hogy a TAG-ek Change value (érték megváltozása) eseményével futtatjuk a scriptet az alábbi módon (mindhárom TAG-nál):



Ezzel a mű elkészült...

Video file a script működéséről: RGB300.avi


Flashing
Grafikus objektumok villogtatása.
Berendezés sémáján, mérések kijelzésénél hasznos, figyelem felkeltő a képernyőn lévő kritikus érték, vagy mozgásban lévő rész villogtatása. Erre (is) használható ez a lehetőség. Mint sokmindent, ezt sem érdemes túlzásba vinni, ha egyszerre sokminden villog különböző helyeken és színekkel, az zavaró és kaotikus lehet, ugyanakkor ízléstelen is. Érdemes valamilyen koncepcióra törekedni a villogtatás használatakor.

A WinCC Flexible szinte minden objektumának tulajdonságai között megtaláljuk a Flashing opciót:



Itt azonban csak bekapcsolni vagy kikapcsolni lehet a villogást. Ha bekapcsoljuk (Standard) akkor az objektum állandón villogni fog, amíg a kijelzőn látható. Azt meg általában ritkán akarjuk, hogy a kijelzőn valami állandóan villogjon. Kombinálhatjuk azonban ezt az Animation/Visibility tulajdonsággal, amivel PLC bit állapota vagy változó érték alapján eltüntethetjük és megjeleníthetjük a villogó objektumot a kijelzőn. Az objektum villogása statikus (mindig villog), de ha el van tüntetve (hide) akkor nem látható.
Rendszeresen használok ilyen módon beállított vonalakat, amiknek a vastagsága 2-5 pixel és nyíl alakúra van beállítva a vége (Line start, Line end) sémákon, mozgó részek mozgásának visszajelzésére: Ha mozog megjelenik egy villogó zöld nyíl, ha nem mozog, a nyíl eltűnik.

A másik lehetőség valaminek a villogtatására az Animation/Appearance dinamikus tulajdonság.



A fenti példában egy négyszög Appearance beállítása látható. Ha MW10 PLC változó 4-es bitje 1 állapotba kerül, akkor a négyzet zöld lesz fekete kerettel és villogni fog.

A dolog egyszerű, de nem ez az, amiért ide került ez az írás, hanem az, hogy milyen színekkel történik a villogás és hogyan határozhatók meg azok a színek.
A villogás az objektum színének két szín közötti periodikus változtatását jelenti. Ez is egyszerű, villogás során periodikusan felcserélődik az objektum előtér és háttér vagy kitöltő és keret színe. Hogy melyik kettő, az objektum fajtájától függ, melyiknek mije van.
Egy négyzetnek, körnek ellipszisnek, sokszögnek keret és kitöltési színe van (border color, Fill color). Villogtatáskor ezt a kettőt fogja cserélgetni úgy, hogy a keret és a kitöltés színe mindig ellentétes lesz.. De ezek az objektumok lehetnek átlátszóak is (amikor nincs hátterük). A háttér szín a villogásban akkor is szerepet kap, mert a megmaradt látható rész, vagyis a keret a beállított kitöltési szín és keret szín közötti két szín váltogatja, miközben az objektum belső része átlátszó.

   

A bal oldali képen látható példában a felső négyszög lila kitöltési színnel rendelkezik, míg az alsó átlátszó (transparent).
Szövegnek, I/O field-nek szöveg és háttér színe van (text color, background color), a Symbolic I/O field-nek előtér és háttér színe van (foreground color, background color). A fentihez hasonló módon történik a villogáskor a színek meghatározása.

Az érdekesség a vonalaknál jön. Ha lerakunk egy vonalat, láthatjuk, hogy a vonalnak is van háttér színe, meg kitöltési stílusa, de állítani nem lehet.



Miért is lehetne? Ilyen tulajdonságai nincsenek egy vonalnak! Amikor vonalat rajzolunk, a nem létező háttér színe fehérre áll be, a kitöltési stílus pedig átlátszóra. Ha egy ilyen vonalat villogtatni akarunk, akkor a színe mindenképp a fehér és a beállított szín között fog váltakozni:



Ez egy villogó vonal, ami 5 pixel vastagra, a vonalvég nyíl alakúra van beállítva:



Mit kell tenni, ha azt akarjuk, hogy ne fehér és beállított szín között váltogasson színt villogáskor?
A trükk az, hogy a vonal stílust átmenetileg szaggatott vonalra (dsah / dots) állítjuk be. A háttér színt (background color) ettől még nem tudjuk állítani, de a beállítással azonnal szerepet kap a vonal kitöltési stílus (fill style) beállítása, ami alapértelmezés szerint átlátszó (transparent).
Ezt állítsuk át solid-ra! Ezután állítható lesz a háttér szín is. A háttér színt állítsuk be tetszőlegesen, majd a vonaltípust (style) állítsuk vissza folytonos vonalra (solid).
Látható, hogy most a háttér szín megint nem állítható, de most már olyan színű, amilyennek szeretnénk. A vonal háttér szín beállításának tehát nincs semmi jelentősége, mivel egy vonalnak nincs háttér színe, de ha a villogtatjuk, akkor mégis fontos, mivel a villogás a beállított előtér és háttér szín cserélgetésével valósul meg. Ezzel a módszerrel tehát a villogtatás mindkét színét be tudjuk állítani.
Egyébként szaggatott vagy pontozott vonalnál a háttér szín (amennyiben a fill style nem transparent) a vonal pontozások, szaggatások közötti színét adja. Átlátszó beállításnál a vonal ezen része átlátszik és nem kap színt.


 


Internal warning
Ha WinCC Flexible használata során olyan problémába ütköznénk, hogy fordításkor a következő, vagy hasonló figyelmeztető üzenetet küldi:

07:13:25.84 Compiler Warning:  Internal warning (detail: Check4NeededtriggerTag(): cannot get parent screen object from id).

...és ezt nem tudjuk elkerülni úgy sem, hogy a legutóbb végzett műveleteket töröljük, akkor a következőket érdemes megpróbálni:

Esetleg:
Project / Save As version, majd visszatölteni a lementett, konvertált projectet. Ez a lehetőség azonban csak akkor áll rendelkezésre, ha a  WinCC Flexible telepítésénél kértük a Save as version opciót. (Ez
alapból nem települ, kérni kell).


Access Point
Újabb információ a WinCC Flexible kapcsolatkezeléséről.
Az írás szorosan kapcsolódik a Több kapcsolat a WinCC Flexible RT-ben c. tipp tartalmához.
Amennyiben a WinCC Flexible project készítésekor nem foglalkozunk az access point beállítással, a runtime automatikusan az S7ONLINE nevű hozzáférési ponton keresztül próbálja elérni a PLC-t.

Az alap probléma
Egy számítógép (PC) egy S7 PLC-vel többféle módon is kapcsolatba köthető.
Még akkor is, ha csak sz MPI buszra gondolunk, hiszen egy PC-ben lehet több MPI illesztő is. De az MPI-n kívül ott a profibus, a soros port, az USB és az ethernet is.
Mivel több illesztő is lehet egyszerre egy PC-ben a PC egyszerre több független hálózatba is csatlakozhat. És mivel több kapcsolódási lehetőség van, mindenképpen szükséges, hogy ezek között szabadon választhassunk. Ha a számítógép csak egy PLC-vel áll kapcsolatban, vagy több PLC esetén azok egy hálózaton keresztül érhetőek el, akkor nincs különösebb probléma, mert csak egyszer kell beállítani melyik interfészen keresztül kívánjuk elérni a PLC-ket.
Ezt a választási lehetőséget a PC/PG interface nevű program biztosítja (S7epatsx.exe). A telepítő beépíti a vezérlő pultba, így onnan elérhető, de a simatic managerből is el lehet indítani (Options menü / Set PC/PG interface...).




A következmény
Ha olyan rendszerünk van, hogy egy PC-n fut egy WinCC Flexible runtime, ami MPI vagy PROFIBUS kapcsolatban van S7 PLC-vel, ugyanakkor ez a PC ethernet hálózatra is kapcsolódik és erre a számítógépre telepítve van a simatic manager, amivel pl. karbantartási, hibakeresési céllal más, olyan PLC-ket is el szeretnénk érni, amelyek az ethernet hálózatra kapcsolódnak, akkor sajnos mindig váltogatni kell, hogy éppen melyik interfészen keresztül szeretnénk kommunikálni.
A Set PC/PG interface program egyik tulajdonsága, hogy ha az éppen beállított kapcsolaton keresztül aktív forgalom van, akkor nem engedi a kapcsolatot átállítani. Pl. ha fut a simatic manager LAD/STL/FBD szerkesztője ami éppen monitor módban van, vagy egy VAT táblával figyeljük az eseményeket, stb.
Érdekes azonban, hogy a WinCC Flexible runtime kivétel ezalól! Ha a runtime fut és aktívan használja az MPI kapcsolatot, nyugodtan átválthatjuk az interfészt mondjuk ethernet-re, nem fog érte szólni. És nem csak hogy nem szól, de a runtime zavartalanul működik továbbra is MPI-on keresztül, miközben Step7-tel nyugodtan dolgozhatunk az ethernetes CPU-kkal.
Ez jó is, meg nem is
Jó, mert nem kell leállítani a runtime-ot, munka közben az futhat és végezheti a dolgát (ha esetleg arhívumokat kezel, adatokat gyűjt stb, fontos lehet a folyamatos üzem).
Nem jó, mert bizonyos együtt állások teljesülésekor egy "időzített bombát" hagyhatunk a rendszerben, ami a következő:
  1. Fut a runtime, PG/PC interface MPI állásban
  2. Jön a karbantartó, elindítja a Step7-et és dolgozni akar etherneten, ezért átállítja PC/PG interface-t ethernetre
  3. Runtime fut tovább, karbantartó zavartalanul dolgozik
  4. A munkának vége, karbantartó bezárja Simatic alkalmazásokat, de elfelejti PC/PG interface-t visszaállítani MPI-re
  5. Runtime fut továbbb, hiszen eddig sem zavarta ez a beállítás
  6. Áramszünet (vagy egyéb okból történő újraindítás) után a PC újraindul (ez akár napokkal vagy hetekkel a 4. pontban történtek után is történhet)
  7. Amikor restart után újra elindul a runtime, megpróbálja felvenni a kapcsolatot a PLC-vel a PC/PG interface-ben meghatározott beállítások szerint, ami nem fog sikerülni neki, mert etherneten keresztül nem tudja elérni az MPI buszon lévő PLC-t. Eredmény: A runtime halott lesz, amin újabb újraindítás sem segít (csak az interface MPI-re állítása)
Mindez azért történik így, mert a simatic manager és alkalmazásai is az S7ONLINE nevű hozzáférési ponton keresztül kommunikálnak, ahogy a WinCC Flexible runtime is.

A megoldás
Hozzunk létre a Wincc Flexible runtime számára egy olyan hozzáférési pontot, amit csak a runtime használ.
Ehhez két dolgot kell tennünk:
  1. A WinCC Flexible projectben a connections alatt át kell írni a hozzáférési pont nevét S7ONLINE-ról valami másra
  2. A vezérlőpultról indított PG/PC interface beállításoknál létre kell hozni az ezzel azonos nevű hozzáférési pontot és a hozzá tartozó hálózati beállításokat a runtime-nak megfelelően be kell állítani
Erről olvasható egy leírás a Több kapcsolat a WinCC Flexible RT-ben c. tipben.
Az access point itt nem mást jelent, mint egy "presetet", vagyis ez kapcsolódási beállítások halmaza, aminek nevet adhatunk és erre a névre hivatkozva hozhatjuk létre a kapcsolatot a preset tartalma szerint. Előnyös, mert segítségével egyszerűen lehet több, eltérő beállítással üzemelő kapcsolatot létrehozni és előnyös, mert egy WinCC Flex project számára a project módosítása nélkül változtathatjuk meg a kapcsolat interfészre vonatkozó beállításait.

Tab order megváltoztatása
Ez a tipp megjelent már ProTool-ra. A beviteli mezők és a kiválasztható képernyő objektumok sorrendjének szerkesztéséről szól.
Amikor sok ilyen objektum van egy képernyőn (pl. beviteli mezők) akkor hasznos ha közöttük a TAB billentyűvel lehet sorban váltani. Az ilyen objektumok lerakásakor a lerakás sorrendje fogja eldönteni milyen sorrendben választható majd ki a TAB gomb nyomkodásával.
Ez a sorrend azonban nem mindig megfelelő. Különösen ha utólag kell újabbakat beilleszteni a többi közé. ProTool-ban a Ctrl-D billentyűkombináció tette lehetővé a sorrend megjelenítését és szerkesztését, de ez itt hatástalan.
Helyette a View menü Tab Order pontját kell használnunk.
Ez a menüpont csak akkor aktív, ha nincs egy objektum sem kiválasztva a szerkesztőben, csak maga a képernyő. Kattintsunk a képernyő egy üres részére és utána válasszuk a Tab Order menüpontot.
Ahogy a ProTool-ban is, itt is megjelenik minden kiválasztható objektum bal-felső sarkában egy fekete hátterű szám. Ezek a számok jelzik a kiválasztási sorrendet:



A sorrend megváltoztatásához egymás után az általunk kívánt sorrendben rá kell kattintani a fekete számmal jelzett objektumokra. Minden kattintás után a számok azonnal mutatják a pillanatnyi sorrendet.
Vigyázni kell nehogy mellé kattintsunk, vagy rossz sorrendben kattintsunk, mert akkor lehet kezdeni elölről. Ez különösen sok objektum esetén kellemetlen.



Amikor készen vagyunk, kattintsunk egy olyan objektumra amin nincs szám. Ezzel a sorrendet megváltoztattuk...

A Polyline és a Template button esete
Mint azt a WinCC Flexible használók már jól tudják, a Template screen-en elhelyezett elemek minden screen hátterében láthatóak lesznek. Jól használható a template screen a hibaüzenetek megjelenítésén kívül arra is, hogy pl. nyomógombokat helyezzünk el. Ezek a gombok minden képernyőn láthatóak és használhatóak lesznek, ha odafigyelünk arra, hogy egyik képernyőn se tegyünk a nyomógomb fölé objektumokat.
Hogy jön ide a Polyline?

Történt egyszer, hogy egy screen-re sémát rajzoltam, ami egy berendezés pillanatnyi állapotát, működését mutatta. Az aktív, mozgó, színét változtató elemek mellett néhány statikus objektum is része volt a sémának. Pl. a gyártócsarnok fala, amit egy polyline objektummal reprezentáltam. Kell-e mondanom, hogy a template screen-en néhány általános funkciójú nyomógomb is el volt helyezve (vissza, menü) hogy mindenhol kéznél legyen és ne kelljen mindenhova külön lerakni.
A Polyline egy nagyjából L alakú vonal együttes volt, ami az említett gombokat messzire elkerülve leért a kép aljára, valahogy így:



Természetesen a képen ezen kívül még sokminden volt, maga a vonal teljesen elvegyült a látnivalók között. A kép le van egyszerűsítve.
Egy idő múlva feltűnt, hogy ezen a képen a vissza és a menü gombokat nem lehet használni (nem lehet őket megnyomni). Mivel ez nem touch panel, a két funkciót a kezelők nem a képernyőn elhelyezett gombokkal érték el, hanem softkey-ekkel (F1 és F2). A probléma ezért nem derült ki azonnal, csak amikor távoli eléréssel kezelte valaki a runtime-ot.
Persze sejthető, hogy a gondot a polyline okozta, de ez korántsem volt annyira egyértelmű akkor. Ha egy button (vagy pl. input field, switch stb) egy másik objektum átlátszó területének takarásában van, akkor ha gombra akarunk kattintani, valójában arra az objektumra kattintunk, ami a gombot eltakarja, ezért a gomb a kattintásra nme reagál.

Ha a szerkesztőben megvizsgálunk egy ilyen esetet és a gombot ki akarjuk jelölni az egérrel, akkor a gomb helyett kijelölődik az az objektum, amelyik a gombot takarja. Nézzük meg ezt egy egyszerű példán:



Kapcsoljuk egy text field beállításainál az  Auto-sizing opciót, majd a text field-et méretezzük jó nagyra, hogy az átlátszó része eltakarja a gombot.



Ezzel a gombot egérrel elérhetetlenné tettük. Ha a szerkesztőben a gombra kattintunk, a text field fog kijelölődni és nem a gomb. Ebből azonnal kiderül, hogy a gombot a text field takarja el.
A polyline-al egészen más a helyzet. Mivel az is elfoglal egy akkora téglalap alakú területet, amibe éppen belefér, az L alakú polyline objektum (lásd az első képen) tulajdonképpen takarja mindkét gombot. Csakhogy érdekes módon a polyline a szerkesztőben nem jelölhető ki olyan módon, hogy az őt befoglaló téglalap egy tetszőleges pontjára kattintunk. A kijelöléshez magára a vonalra kell kattintani. A befoglaló téglalap takarása azonban elég ahhoz, hogy a takart gombokat használhatatlanná tegye. Ráadásul mivel a gombok a template screen-en vannak, mindig a háttérben maradnak és nem helyezhetők a polyline elé.




Több kapcsolat a WinCC Flexible RT-ben

Az előző Kommunikáció CP-vel témához kapcsolódva most leírom hogyan hozható létre több kapcsolat egy PC-n futó WinCC Flexible projektben.
Akkor nincs semmi különösebb gond, ha a többi kapcsolat is ugyanazt az interfészt használja. pl.:
Ebben az esetben is annyi kapcsolatot kell létrehozni a connections-ben ahány PLC-vel akarunk kommunikálni, de az Interface beállítás azonos lesz, csak a PLC címe fog eltérni:



A képen látható példában tehát csak a PLC device oldalon az Address fog eltérni, esetleg az Expansion slot és a Rack. De a bal oldali WinCC Flexible Runtime eszköz minden beállítása azonos lesz az összes kapcsolatnál.

Ha azonban az elérni kívánt PLC-k nem egy homogén hálózat részei, akkor már kicsit más a helyzet.
Ilyenkor ugyanis nem elég egy interface az összes PLC eléréséhez, annyi interface szükséges, ahány független hálózat van. Még akkor is, ha a két (vagy több) hálózat ugyanazt a protokolt használja (pl. mindkettő MPI busz).
Minden interfész egy külön hardvert jelent a Runtime PC-ben!
Ha a WinCC Flexben olyan hálózatot kívánunk elérni, amit tartalmaz a hardver konfigurációja amelyben a runtime szerepel, akkor létre kell hoznunk a hálózat csatlakoztatásához egy új interfészt, ami tudja fogadni az adott típusú buszt.



Ezért mindegyikhez létre kell hozni a HW konfigban egy interfészt a HMI Runtime-ban:



Ha az interfészt nem helyezzük el a runtime-ban, akkor a NetPro-ban nem tudjuk a HMI-t (WinCC Flex runtime-ot) bekötni a hálózatba (mert nem lesz hova bekötni).
Ha a NetPro-ban a HMI interfészeire rácsatlakoztatjuk a buszokat, akkor Flexible átveszi a kommunikációs partnerek paramétereit és automatikusan létrehozza a kapcsolatokhoz tartozó bejegyzéseket a Connections listában.
A fent látható példa szerint a konfigurált kapcsolatok az alábbiak lesznek WinCC Flexben:



A másik módszert kell választani a kapcsolódásra, ha a Runtime-ból elérendő hálózat illetve az arra csatlakozó PLC-k nem képezik annak a konfigurációnak a részét (NetPro-ban) amelyikben a WinCC Flex runtime van. Ilyenkor a WinCC Flexible Connections-ben a kapcsolat paramétereit kézzel kell beállítani, mivel azokat nem tudja mi alapján automatikusan beállítani.



A fenti képeken látható, hogy a második kapcsolat inaktív állapotban van. Ha bekapcsoljuk, egy hibajelzés lesz az eredmény:



A sárga jelzésből elég egyértelműen kiderül, hogy az Access point beállításával van probléma. Az már sajnos nem ilyen egyértelmű elsőre, hogy mi is ez a probléma.

Az Access point

Az Access point annak a hozzáférési pontnak a nevét kell hogy tartalmazza, amelyiken keresztül az adott kapcsolat el tudja érni a kapcsolódás paramétereiben beállított eszközt.
Érdekes, hogy ezzel olyankor nem kell foglalkoznunk, ha csak MPI vagy csak profibusz kapcsolattal dolgozunk, mert ezt a rendszer kitölti, általában az S7ONLINE névvel.
Az alábbi műveleteket azon a gépen kell elvégezni, amelyen a WinCC Flexible RT-t futtatni akajuk!

Ha Simatic szoftverek vannak telepítve a gépünkre (akár ha csak a WinCC Runtime is) akkor létrejön egy Set PG/PC interface beállítási lehetőség, amit a vezérlőpultról elérhetünk:



Nyissuk meg!



Ezen a panelen állíthatók be a hozzáférési pontok!
Aki STep7-et használ, annak ismerős, mivel a Set PG/PC interface beállítás elérhető a Step7 manager Options menüjéből is.
Ha azonban a Step7-ből nyitjuk meg, az Access Point of the Application lista tiltva lesz, és csak az S7ONLINE nevű, Step7-hez kapcsolódó hozzáférési pont beállítását teszi lehetővé!

A példát követve itt az a dolgunk, hogy létrehozzunk egy új hozzáférési pontot, aminek neve legyen pl. ETHERNET és ahhoz állítsuk be a gép ethernet adapterét.

  1. Válasszuk ki az Access Point of the Application listából az <Add/Delete> elemet

  2. A New Access Point-hoz írjuk be hogy ETHERNET, a Description-be írjunk valami emlékeztetőt, ami utal arra minek hoztuk létre ezt a hozzáférési pontot

  3. Nyomjuk meg az Add gombot és Close gombbal zárjuk be az ablakot.
  4. Keressük meg az új ETHERNET nevű hozzáférési pontot a listában és az alatta lévő Interface Parameter Assignment Used listában rendeljük hozzá a gép ethernet adapterét
Most térjünk vissza a Flexible Connections listájára és az ethernet buszhoz tartozó kapcsolatot kiválasztva az Access Point mezőbe a narancssárga S7ONLINE helyére írjuk be az új hozzáférési pontunk nevét, azaz ETHERNET. A hibajelzés megszűnik és remélhetőleg létre tudja majd hozni a kapcsolatot is...


Kommunikáció CP-vel

Itt egy a gyakorlatban felmerült problémát és Nagylaki Csaba segítsége révén (köszönet érte!) annak megoldását írom le. Egyszerű dolog, de pont ilyenekkel lehet jól bemenni az erdőbe.
Az alapfelállás két egymástól független rendszer. Az egyikben egy S7-414-2DP CPU néhány egyéb kártya mellett egy CP443-1-es ethernet CP-vel megtoldva, egy OP-val és egy Box PC-vel az MPI buszon.
A másik egy CPU315-2 PN/DP CPU, profibuszra fűzött OP-kkal.
A két rendszer ethernet hálózaton kapcsolódik egymáshoz úgy, hogy a CPU-k és az OP-k is fel vannak fűzve ethernet hálózatra, de az OP-k a saját CPU-jukkal MPI-n illetve profibuszon kommunikálnak.
A feladat az, hogy a 315-ös CPU egyik OP-ján meg kell jeleníteni néhány olyan információt, ami a 414-es CPU-ban áll rendelkezésre.

Ehhez a WinCC Flexible-ben létrehozunk egy új Connection-t:



A problémát az okozza, hogy ez a kapcsolat a projektben nem szereplő CPU-ra mutat. Ha ugyanis a CPU a projektben van, akkor a Station beállításai automatikusan felveszik az adott CPU-nak megfelelő beállításokat (a NetPRO-ban és HW konfigban létrehozott kapcsolatok és beállítások alapján).  Ezek a beállítások: Address, Expansion slot és Rack.
Ha azonban a CPU nincs a projectben - mint a jelen példában is - ezeket kézzel kell beállítanunk. Itt lehet elkövetni azt a hibát, amiről ez az írás szól.

Az expansion slot számaként ne azt a slot számot adjuk meg, amelyikben a kommunikációs kártya (CP) van, hanem azt, amelyikben a CPU csücsül!
Ha nem így teszünk, a WinCC Flexible nem lesz hajlandó kommunikálni a 424-es CPU-val.



Nem használt tag-ek keresése

A munka során a számtalan módosítás eredményeképpen szinte mindig előfordul, hogy olyan címkék maradnak a tags listában, amelyek nincsenek felhasználva, azaz semmilyen objektum nem hivatkozik arra a címkére.
Mivel a WinCC Flexible runtime licenszei korlátozzák a tag-ek számát, előfordul, hogy takarékoskodni kell.
A nem használt tag-ek kilistázása lehetővé teszi hogy ezeket a fölösleges címkéket töröljük.

Válasszuk ki az Edit menüből a Find in project... menüpontot. A Find what mezőbe írjunk egy csillagot. Kapcsoljuk be a Filter opciót, a filter alatti Find what mezőben állítsuk be a Tag szöveget. Végül kapcsoljuk be a Reference opciót is Majd azon belül a Not used by kapcsolót is kapcsoljuk be, a mezőbe állítsunk be All types szöveget.
Ezután nyomjuk meg a Find now gomot.



A jobb oldali listában megjelenik az összes címke, amelyik használatlanul maradt (feltéve hogy van ilyen a projectben)
A listából azonnal törölhetjük is őket.

A fenti leírás megtalálható a WinCC Flexible help-jében is "Applications of the search for objects" címmel, illetve "WinCC flexible 2007 Working with projects System Manual" című PDF-ben, azonos cím alatt (79. oldal). 

Időtag idejének megváltoztatása HMI-ről

Gyakori, hogy egy időtag (Timer) idejének beállítását operátorpanelről vagy PC-ről akarjuk beállíthatóvá tenni, hogy bármikor meg lehessen változtatni (akár jelszóval védve természetesen).
Ha a timer  TV paraméterénél nem egy S5T#... konstanst írunk, hanem egy word típusú memóriacímet, akkor a timer az időt arról a címről veszi amit megadtunk:



A fenti példában ez a cím a DB1.DBW0. Természetesen arra figyelni kell, hogy a hivatkozott címen a timer számára ehető tartalom legyen, ami jelen esetben az S5TIME típusú adat.
Az S5TIME típusról bővebb infó található "Az idő mérése" c. írásban.
Miután a timer TV-jét belőttük, gondoskodni kell arról, hogy a HMI-n egy beállítással oda megfelelő értéket írjunk. Pl. egy input mezővel.
Ehhez két dolog kell. Az egyik egy változó (tag) a WinCC flex-ben, ami ugyanarra a címre mutat, mint amit a T1 TV-nél megadtunk:



Ha a címet a WinCC flexben a Symbol listából választjuk, és a cím egy adatblokkban van, akkor a tag listában a blokk és a cím szimbólum neve fog megjelenni. A fenti képen látható, hogy a Beallitasok.T1 nevű TAG, a DB1.DBW0 címre mutat.
Nagyon fontos az adat típusa, ami TIMER legyen! Ha a tag-et a szimbólum listából hoztuk létre, akkor a típust onnan örökli. Ha kézzel hozzuk létre, akkor TIMER-t kell beállítani.
A másik dolog amire szükség van, egy objektum, ami megváltoztatja ennek a tag-nek az értékét amikor szükséges. Kézenfekvő hogy ez az objektum egy input mező legyen, amibe egyszerűen begépeli a kezelő a kívánt értéket.



Az input field-et annak tudatában kell beállítani, hogy a beírt idő mindig ezred másodpercben van, az időalaptól függetlenül. (tehát hosszú időzítés megadása esetén az ezred és század másodpercek elveszhetnek).
Ha tehát 2560-at írunk be, az 2.56 másodpercnek fog megfelelni, ezért a Shift decimal point (a tizedespont eltolása) beállítás legyen 3!

Kapcsolódó cikkek:
Üzemállapot visszajelzés, paraméterezés megvalósítása
BCD szám ábrázolás, CPU stop

Radiobutton

Bizonyára mindenkinek ismerős grafikus operációs rendszerekből a "radiobutton" objektum, ami sor nyomógomb. A nyomógombok egymást kiváltják, tehát mindig csak egy gomb lehet benyomva, mint a régi rádiók csatorna kiválasztó gombjai. Olyan funkciók kiválasztására használható, amelyek egymást kizárják, tehát egyszerre csak egy lehet aktív.
A WinCC flexible-ben nincs ilyen objektum, de viszonylag egyszerűen lehet ehhez hasonló funkciót megvalósítani. Bár az ilyen kiválasztás megoldható más módon is, pl. a symbolic I/O field objektummal, szükség lehet a rádió gomb-szerű megoldása.
A következő tipp egy ilyen megoldást mutat be.

Áldozzunk fel egy merker byte-ot az ügy oltárán, amely egy-egy bitje lesz egy-egy gombhoz hozzárendelve. Mindig csak egy bit lehet 1 állapotban. A bitek 1 állapota a hozzájuk tartozó funkció aktivitását fogja jelezni.
Hozzunk létre egy Byte típusú címkét, ami az MB14-re mutat (természetesen bármire mutathat, konkrétan az MB14-re a példa kedvéért van szükség).



Helyezzünk el egy Switch objektumot egy képen (screen). Az objektum típusát állítsuk Switch with text-re. A Process tag-et állítsuk be az imént készített MB14-re, a bekapcsolást jelző szöveg legyen egy "X" karakter, a kikapcsolást jelző egy "-" karakter.



Ezt az objektumot másoljuk le további 7 példányban egymás alá (Ctrl-C, Ctrl-V).
Az első másolat General properties beállításánál a Value ON beállítást írjuk át 2-re. A következő másolatnál 4-re, a következőnél 8-ra, a többit sorrendben 16, 32, 64, és 128 értékekre.
Ezzel a radiobutton sor készen is van.



Ha az első gombot benyomjuk, akkor az M14.0 bit bekapcsol. Ha a másodikat, akkor az M14.1 kapcsol be, és az M14.0 kikapcsol. Minden gombnak megfelel egy bit.
A bekapcsolt gomb-on mindig X lesz látható. Ha a bekapcsolt gombot nyomjuk meg, akkor kikapcsolódik, ilyenkor egyik gomb sem lesz bekapcsolva, az MB14 minden bitje nulla lesz.
A dolog úgy működik, hogy amikor valamelyik gombot megnyomjuk, az MB14 byte-ba beíródik a gomb Value ON beállításánál megadott érték, vagyis a bekapcsolt állapothoz tartozó szám. Mivel ezek 2 hatványai mindig csak 1 bit lesz 1 állapotban a beírás után, az előző érték pedig felülíródik.

Egy pillantással könnyebb áttekinteni a gombokat, ha a benyomott gombon nem csak a karakter különbözik, hanem a gomb színe is.
Ehhez minden gomb Animations/Appearance beállításainát engedélyezzük (Enable) Tag legyen MB14. A gombhoz tartozó értéket jegyezzük be a táblázat Value oszlopába és a Background colort állítsuk pl. sötétszürkére.



A value érték minden gombnál legyen azonos a General beállításoknál lévő Value ON-al, tehát 1, 2, 4, 8, 16, 32, 64 és 128.

Megjegyzések:

WinCC Runtime Miniweb HTTP server port beállítása

A WinCC Flexible runtime tartalmaz egy HTTP (web) szervert is, aminek neve Miniweb. Ez a web szerver lehetővé teszi hogy a runtime eszköz elérhető legyen közönséges web böngészővel is. Persze nem a runtime képernyők, hanem a futtató rendszer állapota, file-ok, stb. Project távoli feltöltése is lehetséges. (A runtime képernyő képei is elérhetővé tehetők http-java segítségével, de azt a sm@rtserver valósítja meg, ami tulajdonképpen egy VNC szerver.
A miniweb másik szolgáltatása az, hogy segítségével http protokoll segítségével egy másik WinCC runtime panelt (klienst) használhatunk arra, hogy a szerveren futó runtime tag-jeit lekérdezze.
Ez a funkció valamilyen szinten az OPC-hez is hasonlítható, de annál egyszerűbb és talán hatékonyabb is, ha csak két (vagy több) WinCC Runtime-ot akarunk összekapcsolni és adatot cserélni.
A miniweb-hez való hozzáférés jelszóval is védhető természetesen, a jelszó és a sm@artaccess beállításokat a windows control panelről nyíló WinCC Internet Settings ikonnal érhetjük el.
Sajnos azonban nincs lehetőség (vagy legalábbis nem találtam) a web szerver TCP portjának beállítására. Ha a miniwebet futtató gépen egy másik web szervert akarunk futtatni, vagy egyszerűen nem akarjuk a 80-as portot megnyitni, akkor ez problémát okozhat.
A WinCC Flexible runtime könyvtárában találunk egy SystemRoot nevű könyvtárat, abban pedig egy WebCfg.xml nevű file-t. Ezt nyissuk meg egy szövegszerkesztővel és írjuk át a
<PORTNUMBER VALUE="80"/> sort



A miniweb újraindítása után az itt megadott számú porton lesz elérhető a runtime gép miniweb szervere.

WinCC Flexible és Windows kompatibilitás

  Windows 2000 SP4 Windows XP Pro SP1 Windows XP Pro SP2 Internet
Explorer V6.0
Internet
Explorer V6.0 SP1
WinCC flexible 2004 X X - X X
WinCC flexible 2004 SP1 X X X X
X

WinCC flexible 2005

X X X - X

WinCC flexible 2005 SP1

X X X -
X
WinCC flexible 2007 X - X

Ha nem kompatibilis párokat használunk, akkor nincs garancia arra hogy a WinCC Flexible jól fog működni

A bejelentkezett felhasználó csoport tagságának változóba helyezése

Szükséges lehet hogy egy felhasználó bejelentkezése valamilyen nyomot hagyjon a rendszerben. Pl. ellenőrizni lehessen hogy egy hibás beállítást mikor végeztek el. Ehhez az kell, hogy az adott beállítás jelszóval védett legyen, és az, hogy a felhasználók bejelentkezésének ténye valamilyen formában visszakereshető legyen.
A beállítások jelszavas védelme teljesen kézenfekvő, de hogyan hagyhatna nyomot az, hogy valaki bejelentkezik? Ehhez már egy kis gépészkedés szükséges. Először is, van egy funkció, ami egy változóba írja hogy a bejelentkezett felhasználó melyik csoporthoz tartozik.
Ez kell ide! De hogyan hívjuk meg (milyen eseményhez kössük) ezt a funkciót? A bejelentkezés eseményéhez lenne a legcélszerűbb kötni: Amikor valaki be vagy kijelentkezik, lefutna ez a funkció.
ProToolban System menü Functions... pontjánál a Password change eseményhez hozzárendelve a Write_Password_Level_To_Tag funkciót, a megadott változóba beleírja be és kijelentkezéskor az aktuális hozzáférési szintet (password level-t).



WinCC-ben azonban nincs ilyen system global functions lehetőség.
Van azonban scheduler, ami nem csak időzített feladatokat tud végrehajtani!
Nyissuk meg a schedulert, Event-nél állítsuk be a Change user eseményt. Ez az esemény jön létre minden alkalommal amikor egy felhasználó be vagy kijelentkezik (akkor is lefut, amikor a felhasználót a rendszer lépteti ki, pl. letelik a beállított "üres idő"). Ehhez az eseményhez rendeljük hozzá a GetGroupNumber funkciót, aminek adjuk meg azt a változót amelyikben tárolni akarjuk a felhasználóhoz tartozó csoport számát. A példában ez a változó az UserGRP (integer)



Ezzel még csak azt értük el, hogy egy változóban mindig rendelkezésre áll hogy a bejelentkezett felhasználó melyik csoporthoz tartozik (amikor nincs bejelentkezve senki, akkor a változóban nulla van). Ez a változó lehet lokális, de PLC változó is attól függően a PLC programban akarunk-e valamit kezdeni ezzel az információval.
Ahhoz hogy a bejelentkezésnek nyoma is maradjon, kézenfekvő hogy a Warning-ok közé tegyük, mivel azokat a rendszer rögzíti és egy ideig megőrzi. Mivel a warning üzeneteket bitekhez lehet hozzárendelni, szükség van még egy lépésre, amiben a bejelentkezett csoport számát úgy alakítjuk át, hogy minden bithez egy csoport tartozzon. Az átalakításhoz használhatunk scriptet, amivel a HMI hatáskörén belül megoldjuk a feladatot, de rábízhatjuk a PLC-re is, hogy az UserGRP változó tartalma alapján hozzon létre warning üzenetet.
Akkor is az utóbbi módszerre szorulunk rá, ha az adott HMI nem tud scripteket kezelni.
Itt a scriptes megoldásra írok rövid példát:

Kelleni fog még egy belső változó (tag). A neve legyen UserGRPAlarmWord.
Ebben a változóban egy script fogja a felhasználói csoportnak megfelelő bitet 1-be állítani. Tehát 1-es csoport bit0, 2-es csoport bit1, 3-as csoport bit2 és így tovább.


Készítsünk egy scriptet Scripts, Add script lehetőséggel:


A script neve legyen: SetUsergrpBit
Készítsünk egy GroupNumber paraméter a scriptnek:


A script egyetlen sorból áll:
UserGRPAlarmWord=(2^GroupNumber)/2



Ezt a scriptet hozzá kell adni a scheduler change user eventjéhez, a GetGroupNumber után!
Már csak egy feladat maradt: létrehozni a warning üzeneteket és hozzárendelni őket az UserGRPAlarmWord egyes bitjeihez:



Az eredmény az, hogy ha bejelentkezik egy felhasználó, akkor keletkezik egy warning üzenet amiből kiderül melyik csoporthoz tartozó felhasználó lépett be. Mivel a warning üzeneteket a rendszer naplózza is, bizonyos korlátok között visszanézhető mikor történt be és kijelentkezés.
Azt nem fogjuk tudni hogy a bejelentkezett felhasználó milyen beállításokat hajtott végre, vagy egyáltalán csinált-e valamit, de a bejelentkezés tényét ezzel a módszerrel a runtime rögzíti. Ha vannak kiemelten kritikus beállítások a rendszerben, megtehetjük hogy azok megváltoztatásához hozzárendelt funkcióval további warning biteket kapcsolunk át (tag Change value event). Így akkor is kapunk egy üzenetet, ha a kritikus beállítást megváltoztatja a felhasználó. Sőt az üzenetbe beletehetjük a változó tartalmát is, agy látható lesz mire állította be. A bejelentkezés tényét rögzítő üzenetből pedig megtudjuk melyik csoporthoz tartozó felhasználó volt az aki belenyúlt.

Néhány screenshot

Létezik sokkal komolyabb módszer is a felhasználók ténykedéseinek rögzítésére. Ezt úgy hívják, hogy WinCC Flexible Audit, ami egy külön opció a WinCC-hez. Bizonyos gyártási folyamatoknál szigorúan előírják, hogy minden felhasználói beavatkozást pontosan nyilván kell tartani, hogy később ha probléma van, meg lehessen keresni a felelőst. Ilyen előírás a kozmetikai iparban, az gyógyszer iparban, élelmiszer iparban és olaj iparban fordul elő. A WinCC Audit eleget tesz a GMP-nek (Good Manufacturing Practice), ami elsősorban a minőségbiztosítást segíti.
A WinCC Audit képességei tehát messze túlmutatnak a fent leírt módszerrel elérhető funkción, de néha ennyi is elég.

Nyomógomb event-ek

Egy képernyőn elhelyezett nyomógombnak (amit touch panel esetén megnyomhatunk kézzel is) 6 event-je van:
Click, Press, Release, Activate, Deactivate, Change

Ezekhez az eseményekhez rendelhetők hozzá a funkciók, amiket az esemény végrehajt.
Az eventek beállítását a nyomógomb Events tulajdonságainál lehet elvégezni:



A fenti eseményekhez rendelt funkció a következő esetekben fut le:

Click:
A nyomógomb felengedésekor (miután lenyomtuk)
Ha a gombot egérrel nyomjuk meg, az esemény csak akkor következik be, ha a gomb felengedésekor az egérkurzor a gomb fölött volt. Ha a gombot lenyomjuk, majd lenyomva tartva az egeret elmozdítjuk a gombról és felengedjük, akkor nem!
Ha a gombot a panel billentyűzete segítségével az Enter gombbal nyomjuk le, az esemény csak akkor következik be, ha felengedéskor a gomb aktív volt.. Tehát ha kiválasztjuk, enter gomb nyomvatartása mellet TAB gombbal megszöntetjük a gomb kiválasztását, majd ekkor engedjük fel az Enter gombot, akkor nem!

Press:
A nyomógomb lenyomásakor.
Teljesen mindegy, hogy egérrel vagy kiválasztás után Enter gombbal vagy touch screenen a megérintésével nyomtuk-e le, az esemény bekövetkezik a lenyomás pillanatában.

Release:
A nyomógomb felengedésekor (miután lenyomtuk)
A "Click" eseménnyel ellentétben ez akkor is bekövetkezik, ha a gombról lehúzva engedjük fel az egér gombját, de nem a lehúzás pillanatában történik meg, hanem amikor az egér gombját felengedtük.
Ha billentyűvel nyomtuk le és Enter nyomvatartása mellet TAB-ot nyomunk, akkor ez az esemény azonnal bekövetkezik, ahogy a TAB-ot megnyomtuk, vagyis amikor a gomb kiválasztása megszűnik.

Activate
:
aaaaaaa

Deactivate:
Amikor a nyomógomb kiválasztását megszüntetjük. Amikor a gomb ki van választva és a kiválasztó keretet elmozdítjuk a gombról. Pl. megnyomunk egy másik gombot, kiválasztunk egy másik objektumot, léptetjük a kiválasztó keretet (TAB).
Érdekes azonban, hogy a Deactivate esemény nem jön létre abban az esetben, ha képernyőváltás történik, amikor a gomb aktív!

Change:
A gomb lenyomásakor és felengedésekor is lefut egyszer

Az események más aktív (kiválasztható) objektumoknál ugyanígy viselkednek, de az objektum típusától függően bizonyos eventek hiányoznak.


Szirty