Tutorial 2

<< Click to Display Table of Contents >>

Navigation:  Beispiele > Ablaufprogramme >

Tutorial 2

Previous pageReturn to chapter overviewNext page

Show/Hide Hidden Text

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.

examples_sfc_tutorial2_sfc_full

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.

 

Ein neues Projekt anlegen

Legen Sie ein neues Projekt an, in dem Sie

den Menüpunkt DateiNeu auswählen
die Tastenkombination Strg+N drücken oder
in der Werkzeugleiste das Symbol für das Anlegen eines neuen Projektes auswählen newproject.

 

Das Hauptprogramm enthält die beiden Schritte Init und Step1.

examples_sfc_tutorial2_sfc_init

 

Globale Variablen anlegen

Legen Sie zunächst folgende globalen Variablen an:

timer
a
b
step2count
step3count
step4count
step5count

 

Belegen Sie Variable "a" mit dem Startwert -1. Alle anderen Variablen haben den Startwert 0.

 

Step1 programmieren

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.

examples_sfc_tutorial2_sfc_step1

 

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 alternativebranch_right.

examples_sfc_tutorial2_sfc_step2_a

Erweitern Sie die erzeugte Verzweigung, in dem Sie die rechte Transitionsbedingung markieren und erneut das Alternativzweig nach rechts Einfügen alternativebranch_right Symbol anklicken.

examples_sfc_tutorial2_sfc_step2_b

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 step_transition_after Symbol. Ordnen Sie danach den neu erzeugten Schritten gleichnamige Unterprogramme zu. Dazu doppelklicken Sie auf den jeweiligen Schritt und geben im folgenden Dialogfeld den Namen des Unterprogramms ein. Alternativ können Sie mit der Schaltfläche "Neues Unterprogramm" sdfdocument ein neues Unterprogramm erstellen und danach dem jeweiligen Schritt zuordnen.

examples_sfc_tutorial2_sfc_step2_c

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.

examples_sfc_tutorial2_sfc_step2_d

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.

examples_sfc_tutorial2_sfc_step2_program

Der Arbiträrgenerator erzeugt alle 200ms einen 100ms breiten Puls der Höhe 1. Nachfolgend sind die Einstellungen des Arbiträrgenerators gezeigt.

examples_sfc_tutorial2_sfc_step2_program_puls

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 startall_normal, so werden zyklisch die Schritte Step2, Step3 und Step4 für jeweils 2s ausgeführt.

 

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 step_transition_before. Erstellen Sie ein Unterprogramm mit dem Namen Step5 und ordnen Sie es dem gerade erzeugten Step5 zu. Ändern Sie die Transitionsbedingung unterhalb von Step5 auf b>0 && timer == 10.

examples_sfc_tutorial2_sfc_step5

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.

examples_sfc_tutorial2_sfc_step5_prg

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 alternativebranch_left. Markieren Sie die Transitionsbedingung des neuen Zweiges (die Bedingung ist z.Zt. false) und klicken Sie auf das Symbol zum Einfügen eines Sprunges jump_after. Ändern Sie die Transitionsbedinung in step5count == 6 und wählen Sie als Sprungziel "TERMINATE".

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.