Hibakezelés: az OB86 (Rack Failure)


A Simatic S7-300 és S7-400 PLC-k hibakezelését speciális programblokkok, az OB-k segítségével lehet megvalósítani (Organisation Block)
(Blokkokkal kapcsolatos információk Az S7 PLC programozása c. részben találhatók)
Az OB-k speciális funkciók (nem csak hibakezelés) ellátására szolgálnak. Ezek a funkciók csoportosítva vannak, az egyes funkció csoportokhoz tartozik egy-egy OB:

OB10-OB17 "Kapcsoló óra" funkció, adott időpontokban meghívásra kerülő blokk
OB20-OB23 Időre késleltetett megszakítás OB-k.
OB30-OB38 Ciklikus megszakítások
OB40-OB47 Hardver megszakítások
DB55-DB57 DP V1 megszakítások.
OB60 Párhuzamos feldolgozás
OB61-OB64 Állandó reakció idő biztosítása Profibus DP eszközök számára
OB70, OB72 Redundancia hiba (csak H sorozatú dupla rendszereknél)
OB80 Időzítési hiba
OB81 Tápegység hiba
OB82 Diagnosztikai megszakítás
OB83 Bővítő modul leválását és visszacsatlakozását jelző megszakítás
OB84 Hardver hibát jelző megszakítás
OB85 Programvégrehajtáskor bekövetkező bizonyos hibák
OB86 Rack hiba
OB87 Kommunikációs hiba
OB90 A CPU "tétlenségekor" lefutó blokk (nem hibakezelés)
OB100-OB102 Újrainduláskor egyszer lefut
OB121 Programhiba (pl. nem létező blokk hívása)
OB122 Ki és bemenet hozzásférési hiba

Ez a fejezet az OB86-al foglalkozik.
Az OB86 (Rack failure) a DP eszközök (Distributed Peripheral) hibáinak kezelésére szolgál. Az OB86-ba írt programmal tehát a rendszert képessé tehetjük hogy érzékelje és kezelje azokat a hibákat amelyek Profibus DP vagy Profinet IO kommunikációs buszon keresztül kapcsolódó eszközökkel kapcsolatosak.
Ha a rendszerben nincs ilyen I/O periféria, akkor az OB86-ra nincs szükség.
Ha van ilyen periféria, de a PLC-ben nincs OB86 blokk, a CPU leáll (STOP) ha ezek valamelyikével probléma van.
Ha egy üres OB86-ot töltünk a PLC-re, azzal elérhető, hogy ilyen hibák miatt a CPU ne álljon le, de a hibát figyelmen kívül hagytuk, a hiba semmilyen interakciót nem fog kiváltani, a rendszer fut tovább. A hibát okozó eszköz kezelése azonban problémás lesz.

Vannak olyan rendszerek, technológiai folyamtok, amelyeknél egy buszos eszköz hibája miatt veszélyhelyzet alakul ki ha a vezérlés nem tesz intézkedéseket.
Pl. egy kemencén működő elszívó ventilátor frekvenciaváltós hajtású, ahol a frekvenciaváltót a PLC profibuszon keresztül vezérli.
Ha a frekvenciaváltó busz kapcsolata meghibásodik vagy megszakad (pl. kábelhiba miatt, vagy mert a frekvenciaváltó áramellátása megszűnik) le kell állítani a kemencét. Ezt a PLC csak akkor teheti meg ha észleli a frekvenciaváltóval való kapcsolat elvesztését. Ha egy üres OB86 van a PLC-ben, a programban csak közvetett módon (egyéb technológiai érzékelőkön keresztül) esetleg csak jóval később értesül a problémáról. A hiba miatt tönkremehet a kemencében lévő termék, ami anyagi kárt jelent. Ha egyáltalán nincs OB86, a teljes rendszer leáll a program futásának leállása miatt, ami szintén lehet hogy nem kívánatos következményekkel jár.

A megoldás az, hogy az OB86-ba olyan programot írunk ami megállapítja melyik eszközzel van probléma. Így lehetőség lesz üzenet megjelenítésére, hibajelzésre, és egyéb intézkedések elvégzésére.

Az OB86, ahogy a többi OB is, tartalmaz előre deklarált lokális változókat. Az OB-n belül ezek tartalma alapján tudja a program megállapítani melyik modul miatt következett be olyan esemény amiért az OB86-ot a rendszer meghívta.



Az OB86-ról és változóiról bővebben a Step7 help-ben, vagy a STep7 által feltelepített PDF dokumentumban (STEP 7 - System and Standard Functions for S7-300 and S7-400) lehet olvasni.
Egy kivonat az említett PDF dokumentumból, mi az OB86-ról szól.

Ez az írás csak ízelítőt ad az OB86 lehetőségeiből, nem teljes körű leírás.
Most csak a Profibus DP eszközökkel foglalkozunk, azokkal is csak annyira, hogy az OB86 segítségével érzékelni tudjuk egy vagy több DP eszköz leválását a buszról.
Ennek bemutatására egy példa projectre hivatkozok, amelyben egy S7-300 CPU 315-2 DP típusú PLC van, néhány ki és bemeneti modullal.
A profibuszra egy ET200M interfész modul (IM153), egy Simodrive absolute encoder és egy VLT5000 frekvenciaváltó kapcsolódik.
A project HW konfigurációja az alábbi:



A képen látható, hogy az IM153 a 3-a címen van, az encoder az 55-ös, a frekvenciaváltó pedig a 7-es DP címet kapta. A címeknek jelentősége lesz amikor az OB86-ban kiderítjük melyik eszközzel van probléma.
A példa OB86 ennek a három eszköznek az elérhetőségéről fog információt adni úgy, hogy mindegyikhez hozzárendelünk egy merker bitet, ami az eszköz elérhetőségét jelzi:



Az OB86 bekapcsolja az eszköz jelző bitjét, ha az nem elérhető és kikapcsolja amikor újra elérhetővé válik.
A megvalósításhoz szükség lesz néhány lokális változóra.
Ezeket a blokk interfész részébe, az előre definiált változók után írhatjuk. Az ábrán zöld keret mutatja az új változókat:



A példa OB a network1-ben kiszűri azokat az OB86 hívási eseményeket, amik kezelésére nincs felkészítve.
Ilyenkor végrehajt egy CPU STOP hívást, a CPU tehát leáll ugyanúgy, mint ha akkor állna le ha nem is írnánk OB86-ot.
Van 6 olyan eset, amikor a CPU nem áll le. Ez a 3 DP periféria leszakadásának és visszakapcsolódásának eseménye, amiket a példa OB86 kezel.
A network1 megállapítja azt is, hogy ha a hatáskörébe tartozó esemény történt, akkor az a 3 DP eszköz közül melyikhez köthető. Az eszközhöz rendelt változó TRE értéket vesz fel:
#DP_3  - IM153
#DP_7 - VLT5000 frekvenciaváltó
#DP_55 - Simodrive encoder




A network 2 kezeli azt a három globális merker változót, amelyek a vezérlő program számára adnak információt a DP eszközökről.
A merker bitet bekapcsolja amikor az eszköz leválik és kikapcsolja amikor visszacsatlakozik.
A network4 a CPU leállítást végzi az SFC46 rendszerhívással.

Az OB86-ot nem kell meghívni, a PLC operációs rendszere a felhasználói programtól függetlenül hívja meg, amikor az OB86-al kapcsolatos esemény bekövetkezik. Az OB86 minden esemény bekövetkezésekor egyszer fut le. Tehát amikor leválik egy periféria, az OB86 egyszer lefut, amikor visszakapcsolódik, egyszer megint lefut.
Ha egyszerre több eszköz is hibát okoz (pl. az egész profibusz elszáll) akkor az OB86 mindannyiszor lefut, ahány eszköz levált (vagy amikor később visszakapcsolódott).

Figyelem!
Az OB86-ot csak akkor hívja meg a rendszer, ha az eszköz működés közben okoz hibát.
Ha egy DP eszközt pl. a rendszer kikapcsolása alatt választunk le vagy csatlakoztatunk vissza, (vagy akkor, amikor a CPU STOP állapotban van) azt az OB86 nem veszi észre.
A fenti példaprogram tehát csak a működés közben történő eseményeket észleli. Ha pl. a VLT5000 frekvenciaváltót a CPU futása közben lekapcsoljuk, az M3.1-es bit TRUE állapotba kerül (bekapcsol) jelezve, hogy a frekvenciaváltó levált a buszról. Ha ekkor a PLC-t áramtalanítjuk, majd a frekvenciaváltóval együtt kapcsoljuk újra vissza, az M3.1 TRUE állapotban fog maradni annak ellenére, hogy a kapcsolat már helyreállt vele! Ha a fenti példát felhasználjuk egy programban, ezzel számolni kell!

Kapcsolódó információk:
DP station állapotának lekérdezése S7 PLC-ben
Sample program: history for failed slaves

A "Sample program: history for failed slaves" egy külső link, ami a Siemens oldalára mutat. Egy példaprogramot találunk ott, ami minden OB86 hívás alkalmával egy gyűrűs tárolóba másol néhány fontosabb OB86 változót. A tárolóból így visszamenőleg kiolvasható az OB86 korábbi hívásának néhány adata.


Szirty