<< Click to Display Table of Contents >> Tutorial 2 |
![]() ![]() ![]() |
Die Übung zeigt, wie ein Ablaufprogramm mit Alternativzweig erstellt wird. Das fertige Programm befindet sich unter examples/sfc/tutorial2.rvw2
Das fertige Ablaufprogramm sieht wie in Abbildung 1 dargestellt aus.
Abbildung 1: Das vollständige Ablaufprogramm
In Step1 wird der Wert von a verändert. Dadurch wird in jedem Durchlauf des Programms einer der Schritte Step2, Step3 und Step4 ausgeführt. Step5 vergleicht von den vorherigen Schritten gelieferte Ergebnisse. Nach dem sechsten Durchlauf von Step5 wird das Programm angehalten. Ansonsten wird mit Step1 fortgefahren.
Legen Sie ein neues Projekt an, in dem Sie
Das Hauptprogramm enthält die beiden Schritte Init und Step1. |
Legen Sie zunächst folgende globalen Variablen an:
Belegen Sie Variable "a" mit dem Startwert -1. Alle anderen Variablen haben den Startwert 0. |
In diesem Unterprogramm wird die globale Variable "a" um 1 erhöht. Damit sich der Wert von "a" in den Grenzen 0 bis einschließlich 2 bewegt, wird "a" Modulo 3 genommen und dann wieder nach "a" geschrieben. Der Wert von "b" wird lediglich auf 0 gesetzt. |
Die Schritte Step2, Step3 und Step4 anlegen
Nun werden die Schritte in einem Alternativzweig nebeneinander angelegt. Markieren Sie dazu die Transitionsbedingung unterhalb von Step1.
Dass die Transitionsbedingung markiert ist, erkennen Sie an der gestrichelten Linie um die Bedingung herum. Klicken Sie jetzt auf das Symbol für das Einfügen eines Alternativzweiges nach rechts Erweitern Sie die erzeugte Verzweigung, in dem Sie die rechte Transitionsbedingung markieren und erneut das Alternativzweig nach rechts Einfügen Erzeugen Sie nun in den drei Alternativzweigen drei Schritte, die Sie Step2, Step3 und Step4 nennen. Dazu markieren Sie die Eingangsbedingung eines Zweiges und klicken auf das Schritt einfügen danach Die Eingangs und Ausgangsbedingungen aller drei Alternativzweige sind zur Zeit false. Ändern Sie die Eingangsbedingungen auf a == 0, a == 1 und a == 2. Als Ausgangsbedingung nehmen Sie für alle Zweige timer == 10. Ändern Sie den abschließenden Sprung noch von Init auf Step1. Wenn Sie das Hauptprogramm jetzt starten, bleibt das Programm in Step2 hängen, weil "a" beim ersten Durchlauf 0 ist und die globale Variable "timer" nicht verändert wird. |
Die Schritte Step2, Step3 und Step4 programmieren
Die den Schritten Step2 bis Step4 zugeordneten Unterprogramme sind z.Zt. leer. Nachfolgend ist das zu erstellende Unterprogramm Step2 gezeigt. Der Arbiträrgenerator erzeugt alle 200ms einen 100ms breiten Puls der Höhe 1. Nachfolgend sind die Einstellungen des Arbiträrgenerators gezeigt. D.h. alle 200ms erfolgt ein Flankenwechsel von 0 nach 1. Der Zähler erhöht bei jedem Flankenwechsel seinen Wert um 1. Nach 2s ist der Wert des daher 10. Wenn der Wert des Zählers 10 ist, wird zu dem aktuellen Wert von step2Count das Ergebnis des Vergleichs zwischen der Konstante und dem Zählerwert addiert. Solange der Vergleich falsch liefert, wird 0 addiert. Sobald der Vergleich wahr ist, wird 1 addiert. Zum Abschluss jedes Berechnungsschrittes des Unterprogramms, wird die im Hauptprogramm folgende Transitionsbedingung ausgewertet. Wenn die globale Variable "timer" den Wert 10 hat, wird das Unterprogramm verlassen.
Die Unterprogramme der Schritte Step3 und Step4 sind äquivalent aufgebaut. Markieren Sie alles im Unterprogramm Step2 (Strg+A) und kopieren es nach Step3 und Step4. Der einzige Unterschied besteht darin, dass step3count bzw. step4count gelesen und geschrieben werden.
Startet man das Hauptprogramm durch Klick auf das Symbol |
Step5 anlegen und programmieren
Um nach der Alternativverzweigung einen neuen Schritt anzulegen, markieren Sie den abschließenden Sprung und klicken das Symbol zum Anlegen eines Schrittes davor Das Unterprogramm Step5 ähnelt den Programmen Step2 bis Step4. Kopieren Sie Step2 nach Step5 und ändern Sie step2count in step5count. Neben dem Setzen der globalen Variablen "timer" und "step5count" wird geprüft, ob die Bedingung step2count >= step3count >= step4count gilt. Wenn ja, wird die globale Variable "b" auf 1 gesetzt. Ansonsten ist "b" 0. Die Bedingung muss bei korrektem Programmablauf aber immer wahr sein, da die Schritte Step2, Step3 und Step4 nacheinander ausgeführt werden, weil Step1 die globale Variable "a" in jedem Zyklus um 1 erhöht. Wenn Sie das Hauptprogramm jetzt starten, bleibt Step5 2s aktiv, falls "b" größer 0 gilt. |
Programmabbruch und Sprung zu Step1 anlegen
Jetzt soll noch das Programm abgebrochen werden, wenn die globale Variable "step5count" den Wert 6 erreicht. Um dies zu erreichen fügen Sie einen Alternativzweig unterhalb von Step5 ein. Markieren Sie die Transitionsbedingung unterhalb von Step5 und klicken Sie auf das Symbol für das Einfügen eines Alternativzweiges links Das Hauptprogramm sieht nun aus, wie am Anfang gezeigt. Der Alternativzweig mit dem Sprung nach TERMINATE muss übrigens links von dem Zweig mit der bisherigen Bedingung b>0 && timer == 10 stehen, weil die Anfangsbedingungen eines Alternativzweiges von links nach rechts ausgewertet werden. In den ersten 6 Durchläufen ist die Bedingung step5count == 6 nicht erfüllt, so dass die Bedingung des zweiten Zweiges geprüft wird. Ein Durchlauf des Hauptprogramms dauert nun 24s.
|