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 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 Haup-Bereich des States, welcher die stete-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 RsbSm-library 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 History 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.
