Anweisungsliste
aus Wikipedia, der freien Enzyklopädie
Die Anweisungsliste, meist kurz AWL genannt, ist eine der in IEC 61131-3 standardisierten Methoden zur Programmierung von speicherprogrammierbaren Steuerungen (SPS).
Viele SPS-Hersteller bezeichnen die von ihnen verwendete Sprache auch dann als AWL, wenn sie sich nicht exakt an die IEC 61131-3 hält, sodass sich bestehende AWL-Programme kaum auf Steuerungen anderer Hersteller übertragen lassen.
AWL dient hauptsächlich zur logischen Verknüpfung von Steuerungseingängen und -ausgängen.
Ihre Hauptmerkmale sind, dass Operatoren nur einen Operanden besitzen und dass die Sprache stackorientiert ist. Die Syntax der Sprache ist an die Assemblersprache angelehnt und bietet nur sehr umständliche Strukturierungsmöglichkeiten durch Sprungbefehle. Vorteile ergeben sich aber, wenn aufgrund einer Speicherknappheit der eingesetzten CPU der Programmcode klein gehalten werden soll.
Für komplexere Aufgaben werden daher heute meist Höhere Sprachen wie "C", strukturierter Text (SCL) oder eine Ablaufsprache (z. B. Graph 7) eingesetzt.
Für einfache Verknüpfungen werden graphische Sprachen wie Kontaktplan oder Funktionsplan verwendet, da sich die Abläufe besser visualisieren lassen. In der SPS-Programmierung wird die AWL meist nur von Fortgeschrittenen oder Profis angewandt, da es einige Erfahrung erfordert, komplexe Programmabläufe ohne Visualisierung zu verstehen. Vorteilhaft ist AWL bei der Verkleinerung von Programmcodes, wenn die Speicherkapazität der CPU begrenzt ist, oder der Darstellung mehrfacher einfacher Anweisungen, da diese in einem Netzwerk zusammengefaßt werden können.
[Bearbeiten] Beispiele
Beispiel 1: Und-Verknüpfung zweier binärer Eingänge auf einen Ausgang
LD INPUT1 AND INPUT2 ST OUTPUT1
Beispiel 2: Addition zweier Integer-Werte
LD WERT1 ADD 100 ST WERT2
Beispiel 3: RS-Flipflop (rücksetzdominant)
LD S-INPUT S AUSGANG LD R-INPUT R AUSGANG
Im Vergleich dazu die Beispiele für Siemens S7, deutsche Mnemonik:
U "Input1" U "Input2" = "Output1"
L "Wert1" L 100 +I T "Wert2"
U "Setzen" S "Speicher" U "Ruecksetzen" R "Speicher"
Beispiel 4: Normierung [Analogwert]
L PEW 292 ITD DTR L Wert // Messwertbereich+Offset *R L 27648.0 /R L Offset -R RND T MW 30
Beispiel 5: Adressregister [indirekte Adressierung]
L 0 T MB 20 _001: NOP 0 L 0 SLW 3 L MB 20 +I LAR1 U E [AR1, P#3.3] = A [AR1, P#13.3] L MB 20 L 1 +I T MB 20 L 10 -I SPN _001
Beispiel 6: Schleifenfunktion [mit indirekter Adressierung in einen DB]
L P##Daten //Adresse des Speicherorts von Daten ermitteln LAR1 //Lade die Adresse ins Adressregister 1
L 10 //Anzahl der durchläufe der Schleife
next: T Schleifen_Zaehler
L DBW[AR1, P#0.0] //Lade den Inhalt vom Wort in den Akku-1 L 0 //Lade 0 in den Akku-1 der Inhalt von Akku-1 von vorhin wird in Akku 2 geschoben ==I //Vergleiche ob der Akku-1 und Akku-2 den gleichen Inhalt haben SPB Func //Wenn das VKE (Verknüpfungsergebniss)1 ist dann Springe nach Func wenn nicht geh weiter
L P#2.0 //Lade eine Pointeradresse von 2.0 +AR1 //Zähle die Adresse 2.0 zu Daten hinzu (Die Pointeradresse von 2 ist wegen einen Wort bzw. einen Int da er eine Adresse von 2 Byte hat)
L Schleifen_Zaehler //Lade die Schleifendurchgänge die noch verblieben sind Loop next //Ziehe von den Schleifendurchgängen 1 ab und Springe nach next
Func: SET //Erzeugt ein VKE=1
= A0.0 //Weise den Ausgang 0.0 den Wert true zu