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.

Model frame minden metódusának hibakezelője az ErrorHandler metódus

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.

Leave a Reply