ProTool tippek és példák

Utolsó módosítás: 2011. június 1

Aki sokféle feladatra használ  Siemens operátorpaneleket, vagy PC-t Siemens ProTool runtime szoftverrel, ismeri a ProTool fő funkcióit, de még nem ismerte ki magát teljesen az "apró örömökben" azok remélem találnak itt hasznos dolgot.

Tartalom:
Hogyan futtassuk a Protool projectünket?
A "Display mode: Toggle" és a lokális billentyű definíció esete
ProTool és Windows kompatibilitás
Jelszóval védett objektumok és funkciók megkeresése
Több tartályszint kijelzése egy bar skálán (OP270)
A HMI és az S7 PLC közötti kapcsolat megszakadásának kezelése
Beviteli mezők sorrendje
Read continously
Egy tipp az arhiválással kapcsolatban
Read continously, arhívok és az acquistion cycle


Hogyan futtassuk a Protool projectünket?

Amikor egy HMI projectet készítünk ProTool-al, felmerül a kérdés, hogyan tudjuk kipróbálni, tesztelni amit elkészítettünk.
Ha a project egy operátorpanelre készül és azzal rendelkezünk is a teszt idején, akkor nem merül fel a kérdés, hiszen rátöltjük a panelre és kipróbáljuk. Ha azonban PC-re készül, vagy az OP nem áll rendelkezésünkre, akkor mit kell tenni?

A project futtatásához a ProTool RT (Runtime) szoftverre van szükség.
Azonban ha ezt a programot megpróbáljuk elindítani a start menüből, akkor egy hibaüzenetet kapunk:



Valamilyen konfigurációs file-t meg PTProRun.ini file hiányol és parancssort emleget.
Ennek az az oka, hogy mivel a runtime nem rendelkezik felhasználói felülettel (ablak, menük, stb) nem képes önmagában (szólóban) futni. Valahogy oda kell adni neki a projectet, amit készítettünk.
Fel is ajánlja a lehetőséget a betöltésére. ha igennel válaszolunk jön a jól ismert file open ablak:



Itt kiderül, hogy egy .fwd típusú filet szeretne betölteni. Nekünk a ProTool CS viszont .PDB file-ban tárolja a projectet amit elmentettünk és a runtime ezt nem hajlandó betölteni.

Ennek oka az, hogy a projectet le kell fordítani a runtime számára ehető formátumra. A lefordított projectet tartalmazó file kiterjesztése .fwd lesz.
Nem kell feltétlenül .fwd file-okkal bajlódni, a ProTool kényelmesebb megoldásokkal is szolgál.
A project tesztelésére és futtatására több lehetőségünk is van:

Figyelem!
Ha a projectben hibák vannak, és fordításkor hibaüzenet keletkezik, akkor a fordítás megszakad, az .fwd file nem jön létre. Ebben az esetben a runtime sem fog elindulni.
Ilyenkor üzenetet is kapunk, de az csak akkor látható, ha a be van kapcsolva a View / System message window


Ha a project lefordul, akkor a runtime futtatni kezdi, azonban ha a kommunikációs beállítások rosszak, vagy nincs is PLC amivel a runtime kommunikálni tudna, akkor természetesen az értékeket nem fogja tudni átvenni a két rendszer egymás között.
Ezért javasolt valahova a projecten belülre elhelyezni egy Message view objektumot, ami HMI System Message-re van beállítva. Ez az objektum minden HMI üzenetet kiír, így azt is, hogy a kapcsolat felépítése sikerült, vagy nem. A Message view objektum beállításai az alábbiak legyenek:



A "Display mode: Toggle" és a lokális billentyű definíció esete

Vannak bizonyos esetek, amikor a rengetek funkció és lehetőség olyan együttálásba kerül, hogy teljesen váratlan eredményt kapunk.
Egy ilyen esetet és egyik lehetséges megoldását szeretném felvázolni.

Az OP nyomógombjaihoz funkciókat lehet hozzárendelni mint tudjuk. Jó sokfélét. Közöttük az üzenet ablak megjelenítését is. Ez hasznos, mert a kezelő megnézheti, hogy milyen hiba vagy esemény üzenetek voltak vagy melyek aktívak. Csak ki kell szemelni egy nyomógombot, és hozzárendelni ezt a funkciót. Pár perc az egész.
A funkció paraméterében lehet beállítani, hogy a gomb az ablakot megjelenítse (ON), eltüntesse (OFF) vagy átváltson megjelenítés és eltüntetés között (Toggle).
 


Ha a Toggle paramétert használjuk a gombnál, akkor megjelenik az ablak amikor megnyomjuk a gombot. Ha újra megnyomjuk, akkor eltűnik, ha ismét megnyomjuk megint megjelenik. Kényelmes, mert nem kell külön törődni a megjelenítésével és az eltüntetésével.

A másik tény, hogy a panel gombjaihoz hozzárendelt funkciók (nem touch panelt feltételezve, hanem olyat amelyiknek vannak valódi nyomógombjai) lehetnek globális érvényűek, amikor is bármely képernyő is van kiválasztva, a gombot megnyomva végrehajtódik a globális funkció, vagy lokális érvényűek. Az utóbbi változatnál a gomb csak akkor hívja meg a funkciót, ha az a képernyő van megjelenítve, amelyiknél a hozzárendelést elvégeztük. Ilyenkor egy nyomógombnak minden képernyőn lehet más-más funkciója (pl. több oldalas menü, vagy bármi más).
Hasznos pl. az olyan globális funkció, ami mindig visszavisz a menübe vagy az alap képernyőre. Így a kezelő bármennyire is eltévedt a képernyők között, ezzel a gombbal mindig visszatérhet.

Ha ezeket a lehetőségeket keverjük, könnyen kerülhet kellemetlen helyzetbe a gépkezelő. Nézzünk erre egy példát OP270-el:
Tegyünk a K1 nyomógombra képernyőváltás globális funkciót. A K1 meg fogja jeleníteni a PIC_1 nevű képet, ami itt a start kép és a menü is egyben.



Egy másik képernyőn, ami legyen mondjuk a PIC_20, az F20 nyomógombhoz rendeljük hozzá az üzenet ablak megjelenítése funkciót Toggle paraméterrel.
Ha most elindítjuk a projectet, akkor a K1 gombbal bármikor átvált a start képre. Amikor pedig a PIC_20-as kép van megjelenítve, az F20 nyomógombbal meg lehet jeleníteni a hiba listát és el is lehet tüntetni ha újra megnyomjuk.

Most képzeljük el azt a szituációt, hogy a berendezést két ember kezeli, ahol ez a panel üzemel. Üzem közben keletkezik valami hiba, amit a panel automatikusan kijelez. Az 1. kezelő odamegy, látja a hibát, nyugtázza, hogy eltűntesse a hiba ablakot és hozzáférjen a kezelő felülethez. Beavatkozik, rájön mivel van gond és elmegy elhárítani. Ekkor érkezik a 2. kezelő, aki azt látja, hogy valami hibajelzés van, de az üzenet már nincs a képernyőn. A menüből elballag a PIC_20-as képre és ott megnyomja az F20-as gombot, ami megjeleníti az üzenetek listáját. Látja az üzenetet, kissé tapasztaltabb lévén egyből tudja mi a baj és elmegy oda, ahova a kollégája is ment. Az üzenetlista a kijelzőn marad, mert távozás előtt 2. kezelő nem nyomta meg újra az F20-at.
Közös erővel leküzdik a problémát és a 2. kezelő az 1. kezelőt visszaküldi hogy indítsa el a gépet, ő majd ott marad és figyeli egy darabig nehogy újra probléma legyen.
Az 1. kezelő visszaérve látja a hiba listát, amit 2. kezelő hagyott a képernyőn és reflexből nyomja az ACK gombot, aminek semmi hatása nincs (mivel az csak a spontán megjelenő alarm ablakot tünteti el, de ez nem az az ablak). A következő a a K1 gomb lesz amit megnyom, mert meg akar szabadulni az üzenetek listájától, hogy hozzáférjen a többi funkcióhoz. Meg is nyomja a K1-et, mire a panel visszavált a kezdő képernyőre. Csakhogy a már kijelzett üzenet ablak alatt, az üzenet ablak a kijelzőn maradt.
Mivel 2. kezelő hiába vár a gép távolabb eső részénél, hogy 1. kezelő elindítsa végre, elfogy a türelme és megy megnézni miért nem indítja. Amikor odaér, az 1. kezelő panaszkodik, hogy egy ablak van a kijelzőn, ami eltakar mindent és nem lehet eltűntetni. Ha valamelyik kezelő ismerné a ProTool-t és a szóban forgó ablak megjelenítését végző funkciót, tudná mit kell tenni.
De egyikük sem ismeri és nem is kell nekik ismerni, nem az a feladatuk. Aki elköveti a ProTool projectet, annak kell ismerni. Ha ő tud arról, hogy ilyen helyzetbe lehet keveredni, akkor a következőket teszi:
  1. Az összes olyan gombra és egyéb elemre, amelyik képernyőt  válthat, hozzárendeli a képernyőváltás mellett a Show_message_page funkciót OFF paraméterrel (illetve ha nem ezt az ablakot hívja akkor azt a funkciót, ami az ablakot megjelenítette). Ez eltünteti az ablakot amikor a képernyő átvált. Sajnos a System / Functions / Changing screens -hez és a képernyőnként a Clear Screen funkcióhoz nem lehet üzenet ablak megjelenítést / eltüntetést hozzárendelni. Sajnos ha a rendszer úgy van elkészítve hogy az OP-n a PLC program is tud képernyőt váltani, akkor ott is gondoskodni kell az ablak kikapcsolásáról.
  2. Az ablak megjelenítése / eltüntetése funkciót egy globális nyomógombhoz rendeli hozzá, amelyiket bármikor megnyomva az útban lévő ablak eltüntethető.
  3. Nem használja az üzenet ablakok megjelenítését, hanem külön képernyőkön elhelyezett Message View objektumokkal jeleníti meg az üzeneteket.

A fenti fiktív történet valós eseményeken alapul. A valósággal bármilyen kapcsolata nem feltétlenül véletlen.

ProTool és Windows kompatibilitás

A ProTool telepítésekor nem árt figyelembe venni, hogy milyen verziójú ProTool-t milyen windows verzióval akarunk használni.
Előfordulhat gyanis, hogy telepítés után derül ki: nem működik a ProTool.
Az alábbi táblázat segít a megfelelő választásban:

SIMATIC ProTool/Lite, ProTool, ProTool/Pro

verzió

Windows '95

Windows '98 / '98se

Windows ME

Windows NT 4.0

Windows 2000

Windows XP Professional

V 3.0

X

-

-

-

-

-

V 3.01

X

-

-

-

-

-

V 3.02

X

-

-

-

-

-

V 4.0

X

-

-

X

-

-

V 4.01

X

-

-

X

-

-

V 5.0

X

-

-

X

-

-

V 5.01

X

-

-

X

-

-

V 5.1

X

X

-

X

-

-

V 5.2

X

X

-

X 2.)

-

-

V 5.2 SP1

X 1.)

X

-

X 3.)

-

-

V 5.2 SP2

X 1.)

X

X

X 3.)

X

-

V 5.2 SP3

X 1.)

X

X

X 3.)

X 4.)

-

V 6.0 - X 5.) X X 6.) X 7.) -
V 6.0 SP1 - X 5.) X X 6.) X 7.) -
V 6.0 SP1a - X 5.) X X 6.) X 7.) -
V 6.0 SP2 - X 5.) X X 6.) X 7.) X 8.)
V 6.0 SP3 - X 5.) X X 6.) X 7.) X 9.)

1.) Windows 95 OSR 2 (Build 950b) vagy magasabb verzió
2.)
Windows NT SP4/5 vagy magasabb verzió
3.)
Windows NT SP5/6 vagy magasabb verzió
4.)
Windows 2000 SP1 vagy magasabb verzió
5.)
Csak Windows 98 SE
6.)
Windows NT SP6a vagy magasabb verzió
7.)
Windows 2000 SP2 vagy magasabb verzió
8.)
Windows XP SP1a-ig
9) Windows XP SP1, SP2

Ha a ProTool-t nem kompatibilis Windows verzióval használjuk, lehet hogy működni fog, de nincs garancia arra hogy ezt megfelelően teszi majd.
Forrás. SIEMENS

Jelszóval védett objektumok és funkciók megkeresése

Egy nagyobb ProTool project készítésekor tanácsos egy listát vezetni arról, hogy milyen funkciót vagy objektumot védtünk jelszóval, mert utólag ezek összegyűjtése nehéz. Legalábbis eddig nem simertem más módját ennek, mint azt, hogy a project összes objektumának properties ablakánál az enable fül password level beállítását megnézzük egymás után. Ugyenzt megtesszük a nyomógomboknál is. Mivel általában rengeteg jelszóval védhető dolog van egy projectben, hosszadalmas dolog az ilyesmi.
Saját projectnél ez nem annyira reménytelen, de egy ismeretlennél annál inkább.

Egy egyszerű trükkhöz folyamodva a dolog megkönnyíthető.
Telepítsünk egy olyan nyomtató drivert, amivel PDF dokumentumba lehet nyomtatni (ezen kívül is nagy hasznát lehet venni egy ilyennek).
Az egész ProTool projectet nyomtassuk bele egy PDF file-ba. Nyomtatáskor report beállítás legyen "complete" hogy a nyomtatás mindent tartalmazzon. Majd nyissuk meg acrobat readerrel ezt a PDF-et és keressünk rá a "PASSWORD" szóra.



A találatok között, ahol nem "level: 0" szöveg van, ott nézzük meg melyik objektumról van szó és jegyezzük fel...

PDF printer drivert nem tudok konyhakészet ajánlani, de sokféléhez hozzá lehet jutni, amiben segít a Google.

Több tartályszint kijelzése egy bar skálán (OP270)

A példa a multiplex tag és a combo box használatát mutatja be.
Egy bar skálán jelenít meg átkapcsolhatóan öt különböző értéket. Az átváltható megjelenítést multiplex tag, a kijelzendő tartály kiválasztását pedig combo box objektum valósítja meg.
Az öt tartály és a szintmérés %-os eredményeit tároló öt címke legyen az alábbi:

Címke neve

Hivatkozás

Bekeverő1 MW0
Bekeverő2 MW4
Tároló1 MW6
Tároló2 MW8
Víztartály MW20
Szükség van még egy kiválasztó címkére, aminek a tartalma szerinti tartály szintje kerül a bar objektum bemenetére. Ennek a neve legyen Tartály_index. Ennek a címkének nem kell feltétlenül a PLC egy belső változójára hivatkoznia ha nem akarjuk, hogy a PLC programja meg tudja változtatni hogy a skála melyik tartály szintjét mutassa. Ekkor a címke tulajdonságainak General oldalán a PLC-t állítsuk <No Controller> beállításúra. Így az OP saját maga fogja tárolni hogy  melyik tartályt kell kijelezni.
Miután a szükséges címkék rendelkezésünkre állnak, hozzuk létre a multiplex tag-et a multiplex tags listában az alábbiak szerint:



A multiplex címke neve tehát “Tartályszintek” lesz, aminek a listájában be van állítva az összes kiválasztható (kijelzendő tartályszinthez tartozó) címke. A kiválasztás pedig a “Tartály_index” nevű címke tartalma szerint történik.
Most egy képernyőre helyezzünk el egy Bar objektumot, ami majd a szinteket jelzi ki. Az objektum beállításainál a bar value mellett beállított címke értéke szerint áll be a skála szintje. Itt csak normál címkék között válogathatunk, ezért nyomjuk meg a beállítás melletti kék nyíl ikont:  



Az előbukkanó menüből válasszuk ki a Multiplex Tag pontot és  Bar Value -nak állítsuk be az imént készített “Tartályszintek” nevű multiplex címkét:



Most már rendelkezésre áll egy olyan bar skála, amelyik a “Tartály_index” nevű címke tartalmának megfelelő tartály szintjét jelzi ki.
Egy Combo box objektummal biztosítjuk, hogy a kezelő kiválaszthassa melyik tartály szintjét akarja megtekinteni. A combo box egy olyan objektum, amelyik egy listát kínál fel választékként egy Text lista alapján. A text listában van a combo box segítségével kiválasztható szövegekhez hozzárendelt érték, amit a combo box a számára megadott címkébe fog beletenni.
Hozzuk létre a tartály kiválasztásához szükséges text listát a Text/Graphic lists elemek listájában az alábbi beállítások szerint:



A text lista neve is legyen “List_Tartálykiválasztás”. A listába olyan szövegeket írjunk be a megfelelő Value oszlop mellé, amelyik megfelel a multiplex címkénél megadott címkék által hivatkozott tartalomnak (azaz tartályszint jelzéseknek).
Mivel a multiplex címke 0 értékéhez a “Bekeverő1” nevű címkét rendeltük hozzá, ami az 1-es bekeverő tartály szintjének százalékos értékét tartalmazó MW0 PLC változóra hivatkozik, a text lista 0 eleméhez is “Bekeverő 1” szöveget kell írni. Igy a combo box objektum segítségével kiválasztva a  “Bekeverő 1” szöveget, 0 érték kerül a multiplex címke kiválasztást meghatározó “Tartály_index” címkéjébe, ami éppen a megfelelő, azaz MW0 tartalmának kijelzését eredményezi.

A következő lépés lerakni egy Combo box objektumot. Ennek segítségével lehet majd kiválasztani hogy a Bar objektum melyik tartály szintjét jelezze ki a multiplex címkén keresztül. Ugyanakkor  a Combo box ki is írja az aktuális beállítást, vagyis azt, hogy a Bar éppen melyik tartály szintjét mutatja.



A Text list mezőbe az előkészített “List_Tartálykiválasztás” listát állítsuk be, index tag pedig ugyanaz a kiválasztó címke, amelyik a multiplex címkénél is meg lett adva: “Tartály_Index”.
A kész bar objektumot és a hozzá tartozó combo box-ot az alábbi ábra mutatja:

 ---->  

A multiplex címke példa szerinti működésének logikáját az alábbi ábra szemlélteti:



A combo box és a multiplex címke közötti kapcsolatot az hozza létre, hogy a combo box objektum Index Tag és a “Tartályszintek” nevű multiplex címke Index Tag-ja ugyanaz a “Tartály_index” nevű címke.

A HMI és az S7 PLC közötti kapcsolat megszakadásának kezelése

A kapcsolat megszakadásának érzékelése a PLC programban
A HMI eszköz is benne van a NetPro segítségével összeállított hálózatban, mégsem minősül DP eszköznek. A HMI tehát nem distributed periféria. Talán éppen ezért, a HMI kommunikációjának zavara, vagy teljes leállása nem jár olyan következményekkel mint pl. egy DP buszra kötött frekvenciaváltó vagy remote I/O (pl. ET200) leválása. A HMI leválásakor nem kerül végrehajtásra egyik hibakezelő OB sem (mint amilyen például az OB86 - Rack Failure). A HMI eszközt gyakorlatilag bármikor leválaszthatjuk a buszról, a rendszer tovább működik.
Pont emiatt, a HMI leválását másképp kell kezelni. Legalábbis akkor, ha ez a leválás valamilyen, pl. technológiai jellegű problémát okoz. Más szóval szükség lehet arra, hogy a HMI-PLC kapcsolat megszakadását a PLC-ben valamilyen módon érzékelni lehessen.
Erre maga a HMI eszköz biztosít lehetőséget az ún. "life bit" segítségével. A life bit állapotát az OP kb. 1 másodperces gyakorisággal az ellenkezőjére állítja. Az operátor panel tehát mindaddig online kapcsolatban van a PLC-vel, amíg ennek a bitnek az állapota bizonyos időn belül megváltozik A PLC programjával ezt a bitet kell figyelni és egy időtagot újraindítani ha változik. Ha sz időtag le tud telni, az OP elvesztette a PLC-vel a kapcsolatot. Célszerű él figyeléssel megvalósítani (negative és/vagy positive edge), mert a kapcsolat elvesztésekor a bit állapota épp úgy maradhat nulla mint egy állapotban.

A nem windows alapú OP-knál a life bit az ún.area pointerek által leírt egyik címterületen van, aminek neve  interface area. Az interface area egy 16 word méretű adatterület a PLC-ben:


Az Interface Area szerkezete
(Az interface area részletes leírása megtalálható a communications manual-ban illetve a ProTool helpjében is)
A life bit a "vezérlő bitek" területen van, az n+1 byte 2-es bitje:

Példa:
Ha egy OP7 operátorpanel interface area mutatóját az S7 PLC DB1.DBW0 címére állítjuk be, akkor a life bit a DB1.DBX1.2 címen lesz elérhető.
Az OP online figyelésének tehát egyik lehetséges módja az alábbi:



A windwos alapú operátor paneleknél a life bit szintén egy area pointerrel megadott adatterület egyik bitje, de ez a bit ezeknél az ún. coordination nevű area pointer által mutatott területen  található. A coordination terület mérete mindössze 16 bit (1 word).
A Life bit a coordination terület második byte-jának 2-es bitje, azaz a coordination word 2-es bitje:
Példa:
Ha a coordination area pointert a DB10.DBW10 címre állítjuk, akkor a life bit DB10.DBX11.2 címen lesz elérhető:


A bit figyeléséhez szükséges S7 program megegyezik az OP7-nél adott példaprogrammal (természetesen a life bit címének megfelelő behelyettesítése után).

Miután rendelkezésünkre áll egy bit, ami jelzi ha az OP kapcsolata megszakadt a PLC-vel (a példában ez a T67 időtag állapota) már megírhatjuk az ilyenkor kívánt intézkedések elvégzéséhez szükséges programot.

A kapcsolat megszakadásának érzékelése a HMI-ben
Ha OP7 vagy OP27 panelt használunk, és megszakad a kapcsolata a PLC-vel, az OP azonnal rendszer hibaüzenetet küld a kapcsolat elvesztése miatt.
Ezt az üzenetet újra és újra megismétli, amíg a kapcsolat helyre nem áll. Egyértelmű jele van tehát a kapcsolat megszakadásának.
Ha HMI gyanánt egy PC-t haszálunk, ami a ProTool RT-t futtatja, más a helyzet. A kapcsolat megszakadásakor a ProTool RT is küld egy rendszer üzenetet, de ezzel kapcsolatban csak akkor jön megint üzenet, amikor a kapcsolat újra helyre állt, vagy megváltoztatjuk egy változó értékét, amit a kapcsolat hiánya miatt nem tud elküldeni a PLC-nek. A kapcsolat elvesztése után minden változó értéke "befagy", őrzi azt az értéket ami még működő kapcsolat mellett volt. Bár ilyenkor a képernyőn látható számkijelzések, amik PLC belső változóinak tartalmát mutatják, átváltanak #### kijelzésre.
Az állapotok jelzésére használt objektumokon azonban nem látható hogy nincs kapcsolat. Ez a berendezés kezelőjét könnyen félrevezetheti, mert a képernyőre pillantva nem látszik rendellenesség, ezért azt hiszi hogy minden rendben van, holott a képernyőn lévő adatok nem aktuálisak, mivel a kapcsolat elvesztése után a PC sem a technológiával kapcsolatos üzenetet nem fog küldeni, sem a PLC-ből kiolvasandó adatokat nem fogja megjeleníteni.
Felmerülhet tehát az igény, hogy a képernyőn valamilyen módon egyértelműen jelezzük, hogy a PLC kapcsolat megszakadt. A fenti leírás szerint a PLC értesől az offline módról, de a PLC nem tudja "értesíteni" a HMI-t, hogy a kapcsolat megszakad, mert ezt épp azon a kapcsolaton keresztül kellene megtennie, ami már nem él. Nem marad más, mint a HMI-n belül létrehozni ezt az információt valamilyen módon.
Sajnos a ProTool nem biztosít lehtőséget a kommunikáció állapotának lekérdezésre, ezért magunknak kell megcsinálni. Kézenfekvő lenne a fentebb leírt life bithez hasonló módszer, csak fordítva: A bitet nem a HMI változtatja hanem a PLC, és nem a PLC figyeli a bit változását, hanem a HMI. Ezt pl. egy VB script megírásval megtehetnénk, ha lehetséges lenne egy scriptet úgy beállítani, hogy folyamatosan (ciklikusan) lefusson. Sajnos erre nincs mód, van azonban Scheduler funkció. A Scheduler arra való, hogy egy funkciót elvégeztessünk adott időpontban, vagy adott időközönként. Tudomásom szerint ez az egyetlen módszer, amivel biztosítható, hogy a PLC-től és a felhasználói aktivitástól függetlenül fusson le egy script. A feladat megoldásra ezt fogjuk tehát használni.

A módszer egyszerű. Létrehozunk két boolean típusó TAG-et a ProTool-ban, mindkettőt egy-egy, másra nem használt PLC-beli bithez rendeljük. Legyen "A" és "B". Létrehozunk egy <no controller> TAG-et is (vagyis olyat, ami csak HMI belső változó, nincs PLC adatterülethez linkelve), ami szintén logikai típusú, a neve legyen "Online". A PLC-re írunk egy egyszerű programot, ami kiolvassa "A" tartalmát és "B"-be írja. Tehát ha a HMI-ben "A" változót megváltoztatjuk, akkor annak tartalma visszajön "B"-ben, feltéve hogy van kapcsolat a PLC-vel, Ha nincs, "B" tartalma "A"-tól függetlenül  változatlan marad.
Írunk egy scriptet, ami megviszgálja, hogy "A" tartalma egyenlő-e "B" tartalmával. Ha igen, akkor "Online"-ba TRUE értéket ír, majd "A" tartalmát negálja (ellentétesre váltja).
Ha "A" tartalma nem egyenlő "B" tartalmával, akkor "Online" értékét FALSE-ra állítja.
Ezután hozzárendeljük egy scheduler-hez ezt a scriptet és beállítjuk, hogy percenként fusson le. Más dolgunk már nincs, mint megjeleníteni egy üzenetet, átváltani a képernyőt stb., amikor az "Online" változó FALSE értékű.


Az elv az, hogy a HMI percenként átküld a PLC-nek egy állapotot, amit a PLC-nek vissza kell küldenie. Ha nem jön vissza az érték, akkor a HMI scriptje az "Online" változót kikapcsolja, ha visszajön, akkor bekapcsolja. A kapcsolat megszakadása egy percen belül kiderül.
Mivel ascheduler nem időzíthető 1 percnél rövidebb időközökre, sajnos ezzel a módszerrel nem lehet gyorsabb észlelést megvalósítani.

Nézzünk egy konkrét példát a megvalósításra:
Tegyük fel, hogy a PLC-ben nincs használva még az M04 és M0.5 merker (különben másikat kell választani ezek helyett). Az M0.4-es merker lesz az "A", az M0.5-ös pedig a "B" változónk.
Készítsünk egy network-öt, ami az M04 állapotát az M0.5-be másolja:



A ProTool-ban hozzunk létre két boolean típusú TAG-et, A ás B néven, amik ugyanerre a két PLC-beli merkerre hivatkozik, valamint az "online" nevű szintén boolean TAG-et, ami <no controller> azaz belső HMI változó:



Írjuk meg a scriptet függvényként (function), a neve legyen PLC_Online()



A script írásánál figyelni kell arra, hogy míg a ProTool-ban és a PLC-ben is egy boolean akkor TRUE értékű, ha tartalma 1 és akkor FALSE amikor a tartalma 0, addig VBA scriptben a TRUE -1 értéknek felel meg, a FALSE pedig 0-nak! Ez nyilván annak köszönhető, hogy az egy biten is ábrázolható boolean változót a VB 32 biten tárolja, ami rendkívül optimális :)
Ezután a script hívására készítsünk egy bejegyzést a Scheduler listába, aminek neve lehet szintén PLC_Online, majd állítsuk be a Functions fülnél, hogy a Time expired esemény hívja meg a PLC_Online függvényt, aminek visszatérési értékként adjuk meg az "online" nevű TAG-et:



Ezzel kész. Az "online" nevű TAG mindig TRUE értékű lesz, amikor a HMI és a PLC kapcsolata rendeben van, és FALSE amikor a kapcsolat megszakad valamilyen okból, vagy ha a kapcsolat nem szakad meg, de a PLC STOP módba kerül.
Az "Online" változó állapotának vizsgálatával már megjeleníthetünk üzenetet vagy képernyőt válthatunk amikor a kapcsolat megszakad.

Beviteli mezők sorrendje

Amikor egy Windows alapú operátorpanel olyan képernyőtartalmat jelez ki, amin kiválasztható elemek vannak (pl. beviteli mezők, slider-ek, combo box-ok, stb), akkor működés közben ezek között a nyíl gombokkal vagy a TAB gombbal lehet választani. Kivételt képeznek természetesen azok az esetek, amikor a panel érintőképernyős, vagy amikor a HMI eszközhöz (ami egy PC is lehet) egér van csatlakoztatva és az operátor azt használja az objektumok kijelölésére.
A TAB gomb töbszöri lenyomásakor az objektumok olyan sorrendben kerülnek egymás után kiválasztásra, amilyen sorrendben azokat a ProTool-ban leraktuk a képernyőterületre, szerkesztéskor.

ProTool  képernyő részlet szerkesztés közben

Az így kialakuló önkényes sorrend azonban nem minden esetben lesz megfelelő a munka végén.
Ha pl. sok hasonló tulajdonságú objektumot kell lerakni, egyszerűbb néhány darab elkészítése után azokat egyszerűen lemásolni a jól ismert Copy/Paste funkcióval majd a megfelelő tulajdonság módosításával a kívánt beállításokat elvégezni ahelyett hogy mindegyiket egyenként létrehoznánk..
Ilyenkor, vagy ha a készülő tervet menet közben úgy változtatjuk meg, hogy átrendezzük az objektumokat a képernyőn, hamar kialakul az az állapot, amikor az objektumok kiválasztási sorrendje teljesen logikátlan összevisszaság lesz.
Ez az apróság rendkívül zavaró tud lenni a kezelés során amikor a TAB-ot nyomkodva a kiválasztás (fókusz) összevissza lépked az objektumokon és előre nem lehet tudni melyik melyik után következik.

Szerencsére a ProTool (V6.0 SP2) lehetőséget ad az említett sorrend megtekintésére és utólagos megváltoztatására.
Nyissuk meg az adott képernyőtervet a ProTool-ban és nyomjuk meg a Ctrl-D billentyűkombinációkat.
Az összes kiválasztható objektum bal-felső sarkában megjelenik egy szám, ami a kiválasztási sorrendet mutatja:

Ctrl-D után

Ha módosítani szeretnénk a sorrendet, egyenként, a kívánt sorrendben egymás után rá kell kattintani a megfelelő objektumra. A sorrend kijelölése közben a számokon láthatjuk a sorrend változását.
Ha újra megnyomjuk a Ctrl-D gombokat, a sorrend jelzés eltünik. A sorrend kijelölését ezzel befejezhetjük.
Ha a sorrend meghatározását újra akarjuk kezdeni, nyomjuk meg kétszer a Ctrl-D-t és kezdjük elölről a kijelölést.

Megjegyzés: Ez a módszer csak a Windows alapú operátorpaneleknél használható (pl. OP7-nél, OP27-nél nem)

Read continously

Amikor az operátorpanelen egy értéket vagy állapotot akarunk kijelezni vagy lehetőséget biztosítunk egy PLC változó megváltoztatására, egy elemet hozunk létre a TAG listában, amelyik a kívánt PLC-ben lévő változóra hivatkozik. Ezután a TAG-et (címkét) a képernyőn elhelyezett objektumhoz rendeljük (pl. input vagy output mező, nyomógomb, stb). Ezzel létrejön az objektum és a PLC változója között a kapcsolat.
A PLC változóinak kiolvasása ciklikus, általában 1 másodperces gyakorisággal történik. Ettől el lehet ugyan térni a TAG General beállításai között az Acquistion cycle beállítás módosításával, de a lényeg a ciklikus kiolvasás.
Mivel egy HMI project nagyon nagy számú címkét is tartalmazhat, ha az OP ciklikusan olvasná a TAG listában hivatkozott összes PLC változót az nagymértékben terhelné a PLC-OP kommunikációját, ami nem feltétlenül szerencsés, (különösen ha azon a buszon egyéb eszközök is vannak)
Ezért alapértelmezés szerint az operátorpanel csak azokat a PLC változókat olvassa ciklikusan, amelyekkel kapcsolatban áll az éppen megjelenített képernyőn lévő valamelyik objektum. Fölösleges is lenne olyan PLC változó kiolvasása amelyiknek a kijelzése egy nem látható képernyőn van.

Vannak azonban kivételek. Bizonyos esetben szükséges vagy éppen elengedhetetlen, hogy egy TAG-et az OP vég nélkül, a megjelenített képernyőtől függetlenül mindig olvassa. Minden TAG tulajdonságai között van egy read continously kapcsoló.



Ha ez be van kapcsolva, akkor a címkét az OP folyamatosan olvassa.
Erre szükség lehet pl. a real time típusú trend változójánál. Ha egy olyan real time trend-ünk van, aminek a változója nem folyamatosan kerül kiolvasásra, akkor a grafikon görbéje csak akkor rajzolja ki az érték változásait, ha a grafikon a kijelzőn van. Amikor nincs megjelenítve (másik képernyő van a kijelzőn) akkor egy egyenes vonalat húz annál az értéknél amelyik akkor volt benne amikor utoljára kiolvasta az OP. A Read continously kapcsolóval ezt a problémát elkerülhetjük.
Ha a real time trend TAG-et először külön létrehozzuk, azaz a görbe változójának megadásakor a TAG listából egy már létező TAG-et választunk ki, akkor külön kell gondoskodni ezen kapcsoló bekapcsolásáról. Ha azonban a trend görbéjének létrehozásakor a data source megadásakor nem egy megkévő TAG-et választunk ki, hanem a new ikonnal itt kezdeményezzük a létrehozását, ezt a kapcsolót a ProTool automatikusan bekapcsolja.

Egy másik példa a read continously szükségességére:
Tegyük fel, hogy egy TAG értékének megváltozásához hozzárendelünk egy funkciót valamilyen céllel. Ilyen lehet pl. a képernyőváltás. Ha pl. MW102 nevű TAG-nek beállítjuk a Select_Screen_Variable funkciót és paraméterben megadjuk saját magát (MW102-t), akkor annak az lesz a hatása, hogy ha az MW102 tartalmát a PLC program megváltoztatja, az OP kijelzője azonnal átvált arra, amelyik számát az MW102-be írta a program.



A funkció trigger eseménye a Change Value, ami azt jelenti, hogy a képernyőváltás akkor következik be, amikor az MW102 tartalma megváltozik.
De az MW102 tartalmának megváltozását az OP csak abban az esetben képes érzékelni, ha annak tartalmát újra és újra kiolvassa a PLC-ből.
Ez a funkció tehát csak akkor fog helyesen működni ha bekapcsoljuk az MW102 read continously opcióját!

Van egy beállítás, amivel befolyásolható, hogy TAG létrehozásakor az milyen alapértelmezés szerinti beállításokkal jöjjön létre.
Ezt a lehetőséget az Options menü Default settings pontjával lehet elérni.



Itt amellett, hogy az objektumok alapértelmezés szerinti nevét is be lehet állítani, ha a listából a Tags elemet választjuk, akkor a neve mellett (Prefix) az Edit gombbal kapunk egy újabb ablakot. Ennek a Default Settings Tag ablaknak az Options fülére kattintva megtaláljuk a read continously kapcsolót. Ha ez be van kapcsolva, akkor alapból minden újonnan létrehozott TAG ezen opciója bekapcsolt állapotú lesz (Javaslom ezt az opciót kikapcsolni)

Egy tipp az arhiválással kapcsolatban

Egy változó tartalma file-ba írható, ha létrehozunk egy arhívumot, majd a menteni kívánt TAG beállításai között az Archive jegyzettömb fülnél hozzárendeljük az arhívumhoz. Ugyanitt a változó értékének arhívba írását néhány egyszerű feltételhez köthetjük

Ha egy tag arhiválásának feltétele After every change (minden értékváltozás után kiírás) és Tolerance range (csak értéktartomány átlépésekor) együtt, és a tolerance range limitjei tag-ek, akkor:
Ez azért fontos, mert az arhiválásnak csak két feltétele adható meg:
  1. Ciklikus arhiválás (adott másodpercenként)
  2. Arhiválás, ha az érték megváltozik
A második feltétel szűkíthető azzal, hogy az érték megváltozása mellett még egy értéktartományt is megadunk. Ilyenkor csak akkor arhivál, ha az érték megváltozik és az engedélyezett tartományban van. A tartomány lehet az általunk megadott értékek közötti rész (inner) vagy az azon kívüli rész (outer).
A tartományt meghatározó értékek lehetnek konstansok, de megadhatunk TAG-eket is, így a tartomány a PLC-vel megváltoztatható.
Ha az arhiválást nem a fenti lehetőségek adta feltételek valamelyikével kívánjuk elvégezni, hanem egy esemény hatására, pl. amikor a PLC-ben bebillen egy bit, stb. Kézenfekvő az ötlet, hogy adjunk az arhiválandó címkének olyan határértéket, amin kívül tartjuk ha nem kell arhiválni. Amikor eljön az arhiválás pillanata, a PLC-ben úgy változtatjuk meg az arhiválás feltételeként szereplő tartomány határait, hogy az arhiválandó címke értéke azon belülre kerüljön, így az arhiválás elkezdődik.
Sajnos ez csak részben működik, mert az is kell hozzá, hogy az arhiválandó címke értéke megváltozzon. Ha az érték változatlan, az engedélyezett tartományba kerülésekor nem íródik ki az arhívba.

Read continously, arhívok és az acquistion cycle

Volt már szó arrol, hogy a TAG Read continously opciójával kikényszeríthető, hogy a HMI folyamatosan, ciklikusan olvassa az értékét, és hogy erre mikor van szükség.
Furcsa ellentmondásra világít rá az lábbi tény:
Ha nincs bekapcsolva a TAG read continously opciója de a tag arhválása be van kapcsolva, akkor akár Every change, akár Cyclically az arhiválás feltétele, a TAG változását mindig észreveszi és a megfelelő értéket beírja az arhívba.

Az arhívokkal és a címke értékének kiolvasási gyakoriságával kapcsolatos az alábbi példa, ami jól szemlélteti mire is kell vigyázni:
Ha a TAG Acquistion cycle beállítása 10 másodperc, és a tag arhiválás feltétele Cyclically, ahol 1 másodperc lett megadva, akkor a TAG értékét csak 10 másodpercenként olvassa ki, de minden másodpercben az arhívba írja. Ilyenkor tehát az arhívba a TAG folyamatos változása esetén is csak 10 bejegyzésenként (10 másodpercenként) kerül új érték, a 10 másodperces szakaszokban ugyanazt az értéket írja bele egymás után.
Ha a TAG Acquistion cycle beállítása 10 másodperc és a tag arhiválás feltétele Every change, és a TAG értéke gyorsan változik, a változásokat akkor is csak 10 másodpercenkénként veszi észre, így gyors változás mellett is csak 10 mp-enként keletkezik bejegyzés az arhívba.

Szirty