ST-Anweisung: CASE
Die CASE-Anweisung ist eine bedingte Kontrollstruktur, die bewirkt, dass eine Anweisung oder ein Anweisungsabschnitt nur unter einer bestimmten Bedingung ausgeführt wird. Welcher Abschnitt ausgeführt wird, wird durch einen Vergleich von Bedingung und Label bestimmt.
Syntax:
CASE <condition> OF <label-1> : <instruction-1> <label-2> : <instruction-2> <label-3, label-4, label-5> : <instruction-3> <label-6 .. labe-10> : <instruction-4> <label-n> : <instruction-n> ELSE <ELSE-instruction> END_CASE
| Ganzzahlige Variable für die Bedingung Beispiel: Der Wert der Variablen wird mit den im Konstrukt deklarierten Labels verglichen. Innerhalb einer CASE-Anweisung sind beliebig viele mindestens jedoch 2 Labels zu verwenden. Ansonsten kann das Konstrukt übersichtlicher mit einem IF-THEN-ELSE-Konstrukt dargestellt werden. Alle Labels müssen unterschiedliche Werte haben. |
| Konstante, Literal oder konstanter Ausdruck mit gleichem Datentyp wie die Bedingung Fungiert als Label (Sprungziel) innerhalb des CASE-Konstrukts. Beispiel: Wenn dieser Wert gleich condition ist, wird die nachfolgende Anweisungen durchlaufen. Wenn dieser Wert ungleich condition ist, wird die zugehörige Anweisung ignoriert und es wird zum nächsten Label gesprungen. |
| Komma-separierte Liste mit mehreren Labels, die als Sprungziel fungieren Beispiel: Wenn eines der Labels mit der Bedingung condition übereinstimmt, wird der nachfolgende Abschnitt durchlaufen. |
| Bereich mit unterem und oberem Grenzlabel
Wenn die Bedingung condition einen Wert aus dem Bereich von label-n1 bis label-n2 annimmt, wird der folgende Abschnitt durchlaufen. |
| Optional, maximal einmal Default-Sprungziel, das angesprungen wird, wenn alle vorherigen Labels nicht mit der Bedingung übereinstimmen. |
| Anweisung oder Anweisungsabschnitt bestehend aus mehrere Anweisungen Eine Anweisung ist immer abgeschlossen mit einem |
CASE iCondition OF 1, 5, c_ONE, C_TWO: bVar1 := TRUE; bVar3 := FALSE; 2: bVar2 := FALSE; bVar3 := TRUE; 10..20: bVar1 := TRUE; bVar3 := TRUE; ELSE bVar1 := NOT bVar1; bVar2 := bVar1 OR bVar2; END_CASE