CASE-Anweisung in ST

Syntax
CASE ... OF
...
ELSE ...
END_CASE

Bedeutung

Mit der CASE-Anweisung bestimmen Sie, dass eine Gruppe von Anweisungen dann ausgeführt wird, falls der ausgewertete Wert des Selektors (nach CASE eingegeben) der Marke entspricht, die für diese Gruppe von Anweisungen eingegeben ist. Falls der Wert des Selektors keiner der Marken entspricht, wird entweder keine Anweisung ausgeführt oder jene Gruppe von Anweisungen ausgeführt, die dem Schlüsselwort ELSE folgt.

Einschränkung

Sie dürfen nur solche →Ausdrücke für den Selektor eingeben, die als Ausdruck vom →allgemeinen Datentyp ANY_INT ausgewertet werden können.

Eine Marke darf eine oder mehrere ganzzahlige →Literale/→Variablen, Aufzählungswerte oder Bereiche sein und muss als →konstanter Wert zur Laufzeit ausgewertet werden. Der Datentyp der Marken muss in den Datentyp des Selektors implizit konvertierbar sein.

Beispiel
FUNCTION_BLOCK ExampleIfAndCaseDocumentation
VAR
up : BOOL;
count : INT;
notify : STRING[1000];
END_VAR
VAR CONSTANT
neg100 : int := -100;
neg1 : int := -1;
END_VAR
IF up THEN /* Falls 'up' = 'TRUE', wird hochgezählt. */
count := count + 1;
ELSE
count := count - 1;
END_IF;
CASE count OF /* Falls 'count' im jeweiligen Wertbereich ist, gibt 'notify' den entsprechenden Text aus. */
0 : notify := 'Counter is 0.';
1..100 : notify := 'Counter is in the range between 1 and 100.'; /* Diese Marke definiert einen Bereich mit ganzzahligen Werten. */
neg100..neg1 : notify := 'Counter is in the range between -100 and -1.'; /* Diese Marke definiert einen Bereich mit konstanten Variablen. */
ELSE
notify := 'Counter is more than 100 or less than -100.';
END_CASE;
END_FUNCTION_BLOCK