Strukturierter Text (ST)

Der Strukturierte Text besteht aus einer Reihe von Anweisungen, die wie in Hochsprachen bedingt ("IF..THEN..ELSE") oder in Schleifen (WHILE..DO) ausgeführt werden können.
Beispiel:

IF value < 7 THEN
    WHILE value < 8 DO
      value := value + 1;
    END_WHILE;
END_IF;

Ausdrücke

Ein Ausdruck ist ein Konstrukt, das nach seiner Auswertung einen Wert zurückliefert. Ausdrücke sind zusammengesetzt aus Operatoren und Operanden. Ein Operand kann eine Konstante, eine Variable, ein Funktionsaufruf oder ein weiterer Ausdruck sein.

Auswertung von Ausdrücken

Die Auswertung eines Ausdrucks erfolgt durch Abarbeitung der Operatoren nach bestimmten Bindungsregeln. Der Operator mit der stärksten Bindung wird zuerst abgearbeitet, dann der Operator mit der nächststärkeren Bindung, usw., bis alle Operatoren abgearbeitet sind. Operatoren mit gleicher Bindungsstärke werden von links nach rechts abgearbeitet.

Nachfolgend finden Sie eine Tabelle der ST-Operatoren in der Ordnung ihrer Bindungsstärke:

Operation

Symbol

Bindungsstärke

Einklammern

(Ausdruck)

Stärkste Bindung

Funktionsaufruf

Funktionsname (Parameterliste)

 

Potenzieren

EXPT

 

Negieren
Komplementbildung

-
NOT

 

Multiplizieren
Dividieren
Modulo

*
/
MOD

 

Addieren
Subtrahieren

+
-

 

Vergleiche

<,>,<=,>=

 

Gleichheit
Ungleichheit

=
<>

 

Bool AND

AND

 

Bool XOR

XOR

 

Bool OR

OR

Schwächste Bindung

Es gibt folgende Anweisungen in ST, tabellarisch geordnet samt Beispiel:

Anweisungsart

Beispiel

Zuweisung

A:=B; CV := CV + 1; C:=SIN(X);

Aufruf eines Funktionsblocks und Benutzung der FB-Ausgabe

CMD_TMR(IN := %IX5, PT := 300);A:=CMD_TMR.Q;

RETURN

RETURN;

IF

IF D:=B*B; 
IF D<0.0  THEN 
  C:=A;
ELSIF D=0.0 THEN
  C:=B;
ELSE
  C:=D;
END_IF;

CASE

CASE INT1 OF 
  1: BOOL1 := TRUE;
  2: BOOL2 := TRUE;
  ELSE
    BOOL1 := FALSE;
    BOOL2 := FALSE;
END_CASE;

FOR

FOR J:=101;
FOR I:=1 TO 100 BY 2 DO 
  IF ARR[I] = 70 THEN 
    J:=I;
    EXIT;
  END_IF;
END_FOR;

WHILE

WHILE J<= 100 AND ARR[J] <> 70 DO 
  J:=J+2;
END_WHILE;

REPEAT

REPEAT J:=J+2; 
UNTIL J= 101 OR ARR[J] = 70
END_REPEAT;

EXIT

EXIT;

Leere Anweisung

;

Anweisungen im Strukturierten Text

Wie der Name schon sagt, ist der Strukturierte Text auf strukturiertes Programmieren ausgelegt, d.h. für bestimmte häufig benutzte Konstrukte, wie etwa Schleifen, bietet ST vorgegebene Strukturen zur Programmierung. Dies hat die Vorteile geringerer Fehlerwahrscheinlichkeit und größerer Übersichtlichkeit des Programms. Vergleichen wir zum Beispiel zwei gleichbedeutende Programmsequenzen in AWL und ST:

Eine Schleife zum Berechnen von Zweierpotenzen in AWL:

LD Zaehler
EQ 0
JMPC ende
LD Var1
MUL 2
ST Var1
LD Zaehler
SUB 1
ST Zaehler
JMP schleife
ende:

LD Var1
ST Erg

Dieselbe Schleife in ST programmiert würde ergeben:

WHILE Zaehler<>0 DO
    Var1:=Var1*2;
    Zaehler:=Zaehler-1;
END_WHILE
Erg:=Var1;

Die Schleife in ST ist nicht nur kürzer zu programmieren, sondern auch wesentlich leichter zu lesen, vor allem, wenn man sich nun ineinander geschachtelte Schleifen in größeren Konstrukten vorstellt.
Die verschiedenen Strukturen im ST haben folgende Bedeutung:

Zuweisungsoperator

Auf der linken Seite einer Zuweisung steht ein Operand (Variable, Adresse), dem der Wert des Ausdrucks auf der rechten Seite zugewiesen wird mit dem Zuweisungsoperator :=

Beispiel:

Var1 := Var2 * 10;

Nach Ausführung dieser Zeile hat Var1 den zehnfachen Wert von Var2.

Aufruf von Funktionsblöcken in ST

Ein Funktionsblock in ST wird aufgerufen, indem man den Namen der Instanz des Funktionsblocks schreibt und anschließend in Klammer die gewünschten Werte der Parameter zuweist. Im folgenden Beispiel wird ein Timer aufgerufen mit Zuweisungen für die Parameter IN und PT. Anschließend wird die Ergebnisvariable Q an die Variable A zugewiesen.

Die Ergebnisvariable wird wie in AWL mit dem Namen des Funktionsblocks, einem anschließenden Punkt und dem Namen der Variablen angesprochen:

CMD_TMR(IN := %IX5, PT := 300);
A:=CMD_TMR.Q