Anweisungsliste (AWL)
Eine Anweisungsliste (AWL) besteht aus einer Folge von Anweisungen. Jede Anweisung beginnt in einer neuen Zeile, und beinhaltet einen Operator und, je nach Art der Operation, einen oder mehrere durch Kommata abgetrennte Operanden.
Vor einer Anweisung kann sich ein Identifikator Marke befinden, gefolgt von einem Doppelpunkt (:).
Ein Kommentar muss das letzte Element in einer Zeile sein. Leere Zeilen können zwischen Anweisungen eingefügt werden.
Beispiel:
LD 17
ST lint (* Kommentar *)
GE 5
JMPC next
LD idword
EQ istruct.sdword
STN test
next:
Modifikatoren und Operatoren in AWL
In der Sprache AWL können folgende Operatoren und Modifikatoren verwendet werden.
Modifikatoren:
- C bei JMP, CAL, RET: Die Anweisung wird nur ausgeführt, wenn das Ergebnis des vorhergehenden Ausdrucks TRUE ist.
- N bei JMPC, CALC, RETC: Die Anweisung wird nur ausgeführt, wenn das Ergebnis des vorhergehenden Ausdrucks FALSE ist.
- N sonst: Negation des Operanden (nicht des Akku)
Im Folgenden finden Sie eine Tabelle aller Operatoren in AWL mit deren möglichen Modifikatoren und der jeweiligen Bedeutung:
Operator | Modifikatoren | Bedeutung |
---|---|---|
LD | N | Setze aktuelles Ergebnis gleich dem Operanden |
ST | N | Speichere aktuelles Ergebnis an die Operandenstelle |
S |
| Setze den Bool-Operand genau dann auf TRUE, wenn das aktuelle Ergebnis TRUE ist |
R |
| Setze den Bool-Operand genau dann auf FALSE, wenn das aktuelle Ergebnis TRUE ist |
AND | N, ( | Bitweise AND |
OR | N, ( | Bitweise OR |
XOR | ( | Bitweise exklusives OR |
ADD | ( | Addition |
SUB | ( | Subtraktion |
MUL | ( | Multiplikation |
DIV | ( | Division |
GT | ( | > |
GE | ( | >= |
EQ | ( | = |
NE | ( | <> |
LE | ( | <= |
LT | ( | < |
JMP | CN | Springe zur Marke |
CAL | CN | Rufe Funktionsblock auf |
RET | CN | Verlasse den Baustein und kehre ggf. zurück zum Aufrufer |
) |
| Werte zurückgestellte Operation aus |
Eine Auflistung sämtlicher IEC-Operatoren finden Sie im Anhang.
Beispiel für ein AWL-Programm unter Verwendung einiger Modifikatoren:
LD TRUE (*Lade TRUE in den Akkumulator*)
ANDN BOOL1 (*führe AND mit dem negierten Wert der Variable BOOL1 aus*)
JMPC marke (*wenn das Ergebnis TRUE war, springe zur Marke "marke"*)
LDN BOOL2 (*Speichere den negierten Wert von *)
ST ERG (*BOOL2 in ERG*)
marke:
LD BOOL2 (*Speichere den Wert von *)
ST ERG (*BOOL2 in ERG*)
Es ist in AWL auch möglich, Klammern nach einer Operation zu setzen. Als Operand wird dann der Wert der Klammer betrachtet.
Zum Beispiel:
LD 2
MUL 2
ADD 3
ST Erg
Hier ist der Wert von Erg 7. Mit Klammern:
LD 2
MUL( 2
ADD 3
)
ST Erg
Hier ergibt sich als Wert für Erg 10, denn die Operation MUL wird erst ausgewertet, wenn man auf ")" trifft; als Operand für MUL errechnet sich dann 5.