Plant Simulation hibakezelés
A Plant Simulation saját programozási nyelvének (SimTalk) használatakor a kódunk különböző hibákra futhat. A metódusok tesztelése során ezeket a hibákat a Debugger segítségével megtekinthetjük és megoldhatjuk.
Azonban előfordul, hogy bizonyos hibák bekövetkezésére szeretnénk úgy felkészíteni a kódot, hogy a szimuláció futása zökkenőmentes maradjon vagy a hibák naplózása megtörténjen. Ezeket Error Handler hibakezelő metódusokkal oldjuk meg.
Error Handlerek az alábbi esetben használhatók:
- Metódus objektumok hibáinak kezelésére
- Egyéb objektumok felhasználói attribútumaként definiált metódusok hibáinak együttes kezelésére
- Framen közvetlenül megtalálható összes metódus hibáinak együttes kezelésére
Az objektumon (metódus, frame, station stb.) létrehozott, ErrorHandler nevű, metódus típusú felhasználói attribútum (User-defined Attribute) lesz az a metódus, amely az eredeti metódusban bekövetkezett hibák hatására lefut.

Hiba esetén az eredeti metódus futása megszakad, és megkezdődik a metódushoz rendelt ErrorHandler futása. Ennek hiányában a Plant Simulation, visszafelé haladva a hívási láncon, keres egy ErrorHandlert. Amennyiben nem talál egyet sem, akkor a megszokott működés szerint megnyitja a debuggert a hibára futott soron.
Minden ErrorHandler metódus három paramétert kap meg:
- Hibaüzenet (error)
- A hibára futott metódus elérési útvonala (method_path)
- A hibára futott SimTalk parancs sorának száma a metódusban (line_number)
Az egyes hibaüzenetekre különböző kódrészleteket írhatunk, amelyekkel reagálunk az előállt problémára.
Ha meg tudjuk oldani a problémát, és szeretnénk, hogy a szimuláció tovább fusson, akkor a hibaüzenet stringjét üresre (””) kell állítani. Ezzel jelezzük a Plant Simulationnek, hogy megoldódott a probléma. Ilyenkor a hibás metódus futása megszakad, az Error Handler végeztével a hibás metódust meghívó metódushoz térünk vissza. Ezért, ha a hibás metódusnak lett volna visszatérési értéke, akkor azt az Error Handlerben is biztosítani kell, hogy a meghívó metódus gond nélkül futhasson tovább.
Ha a hiba megoldása nem lehetséges, de a hiba oka ismert, akkor a hibaüzenet string átírásával módosíthatjuk a debuggerben megjelenítendő hiba leírást.
Egy egyszerű példán nézzük meg az Error Handler működését.
A futtatott modellben egy-egy Source, Station és Drain objektum található, amelyek között a munkadarabokat SourceToStation és StationToDrain metódusokban szállítjuk a move parancs segítségével. A Source 4 másodpercenként enged be egy munkadarabot, míg a szállítómetódusokat 2 másodpercenként hívjuk meg a Generator objektumokkal. Látható is, mi lesz a hiba: az esetek felében olyan munkadarabra hívjuk meg a mozgató metódust, ami nem létezik.

Ezért a Framehez hozzárendelünk egy ErrorHandler nevű metódust User-defined Attributeként. Ebben minden hibára megvizsgáljuk, hogy a hiba eredete a SourceToStation, StationToDrain, vagy valamilyen egyéb metódus. Ha az előbbi kettő egyike, akkor naplózzuk a hiba eseményt az ErrorLog táblában, majd a hibaüzenetet üresre állítjuk, ezzel tovább engedve a szimulációt. Ismeretlen eredetű hiba esetén pedig kiíratjuk annak forrását.

A hibakezelő beállítása után a szimulációt 11 másodpercig futtatva pontosan azt kapjuk, amire számítunk: az ErrorLog táblázatban 2, 6 és 10 másodpercnél naplózott hibákat.

Egyéb hasznos példákért látogassa meg a Plant Simulationben az előkészített modellek közül az Example Models / Small Examples / Information Flow / Exception Handling kategóriát.