RsbSm - Statemachine Bibliothek
Zustandsautomaten sind mächtig um komplexe Abläufe sauber zu strukturieren, sind aber oft schwer zu warten oder müssen in zyklischen Systemen zu fein aufgeteilt werden. Die Solution RsbSm vereinfacht die Umsetzung: Sie strukturiert Zustände, Übergänge und Diagnosen klar und konsistent.
So bleibt jede Statemachine übersichtlich, fehlerresistent und ist optimal auf die Bedürfnisse von zyklischen Systemen ausgerichtet.
Vorteile
State phase handling
Jeder State wird in 3 optionale Phasen (Entry, Cyclic, Exit)
aufgeteilt.
Dadurch kann der Code performance-optimiert zum richtigen Zeitpunkt
ausführen.
Entry
Einmaliger Aufruf im ersten Zyklus eines neuen States.
Um alle Elemente welche in einem State verwendet werden vorbereiten,
initialisieren oder parametrieren zu können.
Cyclic
Wird zyklisch aufgerufen.
Der Hauptbereich des States, welcher die state-spezifischen Funktionen
verarbeitet.
Exit
Wird einmalig beim Verlassen des States aufgerufen.
Optimal um beispielsweise verwendete Funktionsblöcke zurückzusetzen.
Code sample
// init state
// ---
case enSM_S_INIT:
{
// entry
if (stSmMain.bEntryActive)
{
// none
};
// cyclic
// exit
if (stSmMain.bExitActive)
{
// none
};
} break;
Transitionsfunktionen
Die Solution RsbSm bietet alle notwendigen Funktionen, um einfach Transitionen machen zu können.
So können Zustandsübergänge aufgrund verschiedenster Ereignisse ausgelöst werden:
- Bei bestimmten Bedingungen
- Zeitbasiert
Alle Transitionen haben einen klar definierten Start- sowie Ziel-Zustand.
Code sample
// transitions
// start command
fSmTransTo(&stSmMain, enSM_S_STARTING, (stCmd.enCmdAct == enSM_CMD_START), "start command");
// stop - invalid command
fSmTransTo(&stSmMain, enSM_S_ERROR, (stCmd.enCmdAct == enSM_CMD_STOP), "stop command - not valid");
// handle timeout
fSmTransTimerTo(&stSmMain, enSM_S_ERROR, 5000), "timeout occured");
History
Die Library führt direkt eine frei skalierbare Historie mit, mit welcher beispielsweise Abläufe nachverfolgt werden können.
Durch die Zeitmessung der Verweildauer in jedem State bietet die Library alles, was für die Diagnose notwendig ist.
Code sample
Revision-History
Die Versions-Übersicht mit allen Änderungen der Library können in der Revision-History eingesehen werden.
