Merkervariablen!
Für jeden Zustand eine Abfrage, ob die Startedingungen erfüllt sind und noch kein entsprechender Merker gesetzt ist. Wenn ja, dann kann die Start Sequenz für den Zustand durchgeführt werden. (Merker setzen, Timerwert in Variable übernehmen und z.B. Ausgangspegel ändern).
Wenn die Startbedingungen erfüllt sind und der Merker gesetzt ist, dann wird die Schlußsequenz durchlaufen.
Also prüfen ob der Timerwert vom Start plus der Wert der zu verstreichenden Zeit gleich oder größer ist als die aktuelle Zeit.
Wenn nicht ist das Sequenzende erreicht und es werden die Ausleitenden Maßnahmen getroffen.
Ggf. einen Merker setzen, das diser Abschnitt bereits ausgeführt wurde (ob dieser Merker nicht gesetzt ist, wäre dann eine der Startbedingungen), den Mekrer das dieser Abschnitt grade durchlaufen wird wieder löschen und ggf. Ausgangspegel ändern.
Man hat also für jeden Abschnitt im Zyklus zwei Sequenzen. Eine zum starten und eine zum Ausführen und beenden.
Und man hat (bei dieser Aufgabenstellung) 4 erlaubte Systemzustände.
Man erstellt eine Wahrheitstabelle und zeichnet ggf. zur Visualisierung mal die Pegel von Eingang, Ausgang, und dem Monoflop1 (lange, variable Zeit, nicht die Pulse) auf.
Dann fängt man an den Eingangsimpuls zu verlängern und erneut zu senden. und schaut, ob man immer noch das gewollte Ergebniss bekommt, oder ob sich dann z,B der 1S Puls am Start verlängert oder wärend des Zyklus wiederhohlt.
Fügt einen Merker ein und schaut ob man durch dessen Setzen das Fehlverhalten unterbindet.
Dann prüft man wann der Merker wieder gelöscht werden muß, damit man damit nicht in einem Zustand gefangen ist oder beim nächsten Durchlauf des Gesamtzyklus nicht mehr funtionsfähig ist.
Am Ende hat man eine Liste mit Merkern und wo (wann) man sie setzen und löschen muß damit das Programm immer sauber funktioniert.
Das dann in Code abzubilden ist eine reine Sache des Wissens über die Möglichkleiten der Zielsprache (hier C++).
Bei einem Programm dieser Größenordnung macht man das im Kopf oder auf dem Papier.
Bei komplexeren Programmen werden dann Unittests (der Programmierer selbst) oder Modultests (jemand fremdes als Tester) geschrieben.
Der Test bzw. die Begutachtung durch Dritte ist nicht verkehrt, damit man bei einem systematischen Fehler, seitens des Programmierers, nicht hängen bleibt.
Lesezeichen