DIE NORM IEC 61131
Aufbau der Norm
Die internationale Norm IEC 61131 (europäische Norm EN 61131) ist für speicherprogrammierbare Steuerungen bestimmt. Sie ist in verschiedene Teile gegliedert und soll Mindeststandards normieren.
- Teil 1 Allgemeine Informationen
- Teil 2 Betriebsmittelanforderungen
- Teil 3 Programmiersprachen
- Teil 4 Anwenderrichtlinien
- Teil 5 Kommunikation
- Teil 6 Funktionale Sicherheit
- Teil 7 Fuzzy-Control-Prorammierung
Im Zuge der Digitalisierung wird die Norm natürlich ständig erweitert oder ergänzt. Zum Verständnis der Syntax einer SPS behandeln wir hier nur Teil 3 der Norm über die Programmiersprachen ausführlicher, also IEC 61131-3.
IEC 61131-1
In Teil 1 der Norm sind allgemeine Informationen für Speicherprogrammierbare Steuerungen in Niederspannungsanlagen bis zu 1000V AC* (50/60Hz) oder bis zu 1500V DC** . Hier werden die Begriffe zur Verwendung in den anderen Teilen dieser Norm definiert.
* AC = Wechselspannung ** DC = Gleichspannung
IEC 61131-2
Teil 2 spezifiziert die elektrischen, mechanischen und funktionellen Anforderungen für Speicherprogrammierbare Steuerungen und zugehörige Peripheriegeräte, Informationen, die vom Hersteller mitgeliefert werden müssen und anwendbare Prüfmethoden bzw.Verfahrensweisen.
IEC 61131-3
Teil 3 behandelt die Programmiersprachen für eine SPS, wie sie in Teil 1 definiert sind. Zur Darstellung auf Drucker und Bildschirm ist der Zeichensatz ISO 646 [1] anzuwenden. Die am meisten genutzten Programmiersprachen AWL, KOP, FBS, AS und ST wurden harmonisiert.
IEC 61131-4
Teil 4 beschreibt die Anwenderrichtlinien von SPS-Systemen. Es werden Hinweise für alle Phasen eines Projektes, von der Systemanalyse über Spezifikation und Auswahl der Geräte bis zur Anwendung und Wartung der Geräte gegeben.
IEC 61131-5
Dieser Teil legt Kommunikationsaspekte einer SPS fest. Im Prinzip ist die Kopplung mit PCs über definierte Schnittstellen beschrieben.
IEC 61131-6
Teil 6 legt die Anforderungen an eine SPS und die zugehörigen Peripheriegeräte als sicherheitsbezogenes System fest.
IEC 61131-7
Dieser Teil definiert eine Sprache für die Programmierung von Fuzzy-Control-Anwendungen für eine SPS.
IEC 61131-3
Programme
IEC 61131 definiert ein Programm als „eine logische Anordnung aller Programm-Sprachelemente und Programm-Konstrukte, die für die beabsichtigte Signalverarbeitung zur Steuerung einer Maschine bzw. eines Prozesses mit einer SPS erforderlich sind.“
Zur Erfüllung der Norm darf ein Programm- nur Eigenschaften benutzen, die in diesem Teil zum Gebrauch der jeweiligen Sprache festgelegt sind
- keine Eigenschaften benutzen, die als Erweiterungen der Sprache gelten
- von keiner bestimmten Interpretation implementierungsabhängiger* Eigenschaften abhängen
- vom Zeitverhalten der Programmausführung, der Anwendung
- von implementierungsabhängigen Eigenschaften im Programm
- von der Ausführung von Prozeduren** zur Fehlerbehandlung
* Implementierung = Einbau, Einarbeitung, Integration, also eine Erweiterung oder ein Unterprogramm in ein bestehendes Programm einfügen, insbesondere um den Funktionsumfang des übergeordneten Programms zu erweitern
** Unter Prozedur versteht man bei der Programmierung Programmteile mit Anweisungen, die über ihren Namen aufgerufen und dadurch innerhalb eines Programmes mehrfach verwendet werden können. Dies kann z.B. ein Unterprogramm sein.
Programmiersprachen
IEC 61131-3 legt die Syntax* und Semantik** einer vereinheitlichten Reihe von Programmiersprachen für eine SPS fest.
Die am meisten genutzten Programmiersprachen sind
- AWL = Anweisungsliste
- KOP = Kontaktplan
- FBS = Funktionsbaustein-Sprache (FUP)
- AS = Ablaufsprache
- ST = Strukturierter Text
Je nach SPS, Programmiergerät oder wie die heutzutage übliche Programmier-Software auf einem Notebook oder PC müssen nicht unbedingt alle Programmiersprachen zur Verfügung stehen. Der Einsatz oder die Umwandlung zwischen den einzelnen Sprachen ist herstellerabhängig.
* Der Begriff Syntax ist ein Teilgebiet der Grammatik und bezeichnet die Lehre vom Satzaufbau. Beim Programmieren werden formale Regeln über zulässige Sprachelemente einer Programmiersprache festgelegt. Weiterhin wird festgelegt, inwieweit diese Sprachelemente in einem Programm verwendet werden dürfen.
** Die Semantik wird auch Bedeutungslehre genannt und befasst sich mit den Bedeutungen sprachlicher Zeichen und Zeichenfolgen. Auf eine SPS bezogen also auf die Bedeutungen der Programmbefehle.
Steuerungsanweisung
Damit eine SPS überhaupt richtig arbeiten kann sind eindeutige Befehle unerlässlich. Ein Befehl oder auch eine (Steuerungs-)Anweisung besteht aus einem Operationsteil, einem Operandenteil und einer eindeutigen Adresse.
Die Mnemonik [2] kann bei Siemens Step7 oder TIA-Portal zwischen IEC oder Step7 umgeschaltet werden. Einige andere Hersteller bieten diese Umschaltung auch und wiederum gibt es Hersteller, die nur die Mnemonik nach IEC 61131 anwenden.
Eine Adresse kann ein Bit, Byte, Wort oder Doppelwort sein, wobei einer Adresse auch noch verschiedene Datentypen wie z.B. Bool, Byte, Char, Int oder Real zugewiesen bzw. zugeordnet werden.
Hier an dieser Stelle ist nur ein kleiner Auszug möglicher Operationen und Operanden.
Operationsteil | ||
Was soll gemacht werden? | ||
IEC | Step7 | Bedeutung |
AND | U | Und |
OR | O | Oder |
N | N | Nicht |
ST | = | Zuweisen |
S | S | Setzen |
R | R | Rücksetzen |
XOR | XOR | exklusives OR |
Operandenteil | ||
Womit soll etwas gemacht werden? | ||
IEC | Step7 | Bedeutung |
I | E | Eingang |
Q | A | Ausgang |
M | M | Merker |
TR | T | Timer |
CT | C | Counter |
X | X | Einzelbit |
B | B | Byte |
Elementare Datentypen
In der Norm 61131 werden verschiedene Aufgaben Datentypen anhand von Schlüsselbegriffen zugewiesen. Jeder Datentyp hat eigene Aufgaben, Wertebereiche und Eigenschaften. Dadurch kann ein SPS-Programm strukturiert, gut lesbar und verständlich erstellt werden.
Die hier angegebenen Datenlängen in Bits sind nicht verbindlich für jede SPS. Sie sind systemabhängig und können je nach SPS bei Zeit, Datum und String varieren. Für die Siemens S7-1200 oder S7-1500 sollten sie aber passen.
Schlüsselwort | Datentyp | Bits |
BOOL | boolescher Wert | 1 |
BYTE | Dual- und Hexadezimalzahlen | 8 |
WORD | Dual- und Hexadezimalzahlen | 16 |
DWORD | Dual- und Hexadezimalzahlen | 32 |
LWORD | Dual- und Hexadezimalzahlen | 64 |
REAL | reelle Zahl | 32 |
LREAL | lange reelle Zahl | 64 |
CHAR | Character ASCII-Zeichen | 8 |
WCHAR | Character ASCII-Zeichen | 16 |
Schlüsselwort | Datentyp | Bits |
SINT | short integer kurze ganze Zahl mit Vorzeichen | 8 |
INT | integer - ganze Zahl mit Vorzeichen | 16 |
DINT | double integer doppelte ganze Zahl mit Vorzeichen | 32 |
LINT | long integer lange ganze Zahl mit Vorzeichen | 64 |
USINT | short integer kurze ganze Zahl ohne Vorzeichen | 8 |
UINT | integer - ganze Zahl ohne Vorzeichen | 16 |
Schlüsselwort | Datentyp | Bits |
UDINT | double integer doppelte ganze Zahl ohne Vorzeichen | 32 |
ULINT | long integer lange ganze Zahl ohne Vorzeichen | 64 |
TIME | Zeitdauer (IEC) | 32 |
LTIME | Zeitdauer (IEC) | 64 |
S5TIME | Zeitdauer Siemens S5T# Format | 16 |
TOD | TIME_OF_DAY Uhrzeit / Tageszeit | 32 |
DT | DATE_AND_TIME Datum und Uhrzeit | 64 |
STRING | variabel-lange Zeichenfolge |
Die Anweisungsliste (AWL)
Die Anweisungsliste ist eine Reihenfolge von Anweisungen. Hier sind einige Konventionen einzuhalten:
- Jede Anweisung muss in einer neuen Zeile beginnen
- Jede Anweisung muss aus Operationsteil, Operandenteil und eindeutigen Adresse bestehen
- Mehrere Operanden sind durch Komma zu trennen
- Der Anweisung kann eine identifizierende Marke gefolgt von einem Doppelpunkt vorangehen
- Leerzeilen können/dürfen vorhanden sein
- Ein Kommentar ist das letzte Element einer Zeile
Eine einfache „Motor ein/aus“ Schaltung soll hier als Beispiel dienen. Taster „S1“ schaltet das Hauptschütz„Q1“ ein. „Q1“ zieht an und hält sich selbst über den Hilfskontakt „Q1 13|14“ Mit Taster „S2“ wird der Motor wieder ausgeschaltet. Im Beispiel wurde bewusst auf ein Motorschutz verzichtet! Für die Steuerung mit SPS wurden im Beispiel die Taster „S1“ auf SPS-Eingang 1.0 und „S2“ auf Eingang 1.1 angeschlossen. Das Motorschütz „Q1“ wird vom SPS-Ausgang 2.0 angesteuert. Mit den Eingängen „1.0“, „1.1“ und dem Ausgang „2.0“ wurden eindeutige Adressen vom Typ BOOL zugewiesen.


Die Anweisungsliste verdeutlicht sichtbar die Vorgaben der IEC 61131, dass eine Anweisung aus Operationsteil O (Oder), Operandenteil E (Eingang) und eindeutiger Adresse 1.0 (Byte 1, Bit 0) besteht.
Oder Ausgang 2.0 (Byte 2, Bit 0)
Und Eingang 1.1 (Byte 1, Bit 1)
= Zuweisung, gleich Ausgang 2.0 (Byte 2, Bit 0).
Ist das Verknüpfungsergebnis (VKE) „1“, wechselt der Ausgang 2.0 seinen Zustand von logisch „0“ auf logisch „1“ und der Motor „läuft“.
Von der Logik her sieht die Anweisungsliste dem Schaltplan mit Schützen verdammt ähnlich. Eine Besonderheit in dem angeführten Beispiel sind die Programmzeilen „ U( “ und „ ) “. Die Klammern legen, wie in der Mathematik, fest, in welcher Reihenfolge der Programmcode abgearbeitet wird. Im Beispiel wird die ODER-Verknüpfung innerhalb der Klammern vor der einleitenden UND-Verknüpfung abgearbeitet.
Im gezeigten Beispiel ist noch etwas auffällig: Der Programmcode mit der TIA-Portal-Software unterscheidet sich durch das zusätzliche Prozentzeichen „%“ vor jeder Adresse von der (veralteten) Step7-Software. IEC 61131 setzt für Einzelelement-Variablen zwingend das Prozentzeichen an den Anfang der Variablen voraus. Zu Einzelelement-Variablen zählen z.B. auch Merker, Ein- oder Ausgänge.
Der Kontaktplan (KOP)
Auch ein KOP-Netzwerk ist in der Norm ziemlich umfangreich definiert. An dieser Stelle nur die wichtigsten Regeln:
- Ein KOP-Netzwerk wird links und rechts durch jeweils eine senkrechte „Stromschiene“ begrenzt
- Der Zustand der linken „Stromschiene“ ist immer „EIN“
- Der Zustand der rechten „Stromschiene“ ist undefiniert
- Das waagerechte Verbindungselement überträgt den Zustand der unmittelbaren linken Seite auf die unmittelbare rechte Seite des Elements
- Der Zustand des Verbindungselementes wird gemäß dem Stromfluss als „EIN“ oder „AUS“ bezeichnet. Dies entspricht den booleschen Werten „0“ und „1“
Wenn man den Kontaktplan wie einen „normalen“ elektrischen Schaltplan liest, ist man immer auf der richtigen Seite. Das Verbindungselement —| |— entspricht einem Schließerkontakt, dieses Zeichen —|⁄|— einem Öffnerkontakt und —( )— z.B. einer Spule oder Lampe.
Der Funktionsplan (FBS)
Dank Siemens Step7 hat sich die Bezeichnung FUP (Funktionsplan) gegenüber der IEC-Bezeichnung Funktionsbaustein-Sprache (FBS) durchgesetzt. Nichtsdestotrotz ist aber auch ein FUP-Netzwerk definiert:
- Elemente der Sprache FUP/FBS müssen durch Signalfluss-Linien begrenzt werden
- Ausgänge von Funktionsbausteinen dürfen nicht miteinander verbunden werden
- Die Auswertung eines Netzwerkes muss vollendet sein, bevor die Auswertung eines folgenden Netzwerkes beginnen darf, wenn das folgende Netzwerk Ausgänge des vorherigen Netzwerkes benutzt
Die Ablaufsprache (AS)
Die Ablaufsprache[3] ist eine grafische Schrittketten-Sprache, die bei Step7 unter dem Namen S7-GRAPH bekannt ist.
- Ein Schritt ist grafisch durch einen Block darzustellen und muss einen Schrittnamen haben
- Zu einem Schritt gehört eine oder mehrere Aktionen, z.B. das Setzen eines Ausgangs
- In Transitionen werden die Weiterschaltbedingungen definiert
- Der nächste Schritt wird freigegeben, wenn die Transitionsbedingung des vorangegangenen Schrittes erfüllt ist
Strukturierter Text (ST)
Der Strukturierte Text[4] ist eine textbasierte Hochsprache ähnlich der Programmiersprache Pascal. Bei Step7 wird sie SCL (Structured Control Language) genannt. SCL basiert auf ST, ist jedoch umfangreicher und leistungsfähiger. ST oder SCL gehen weit über den Einsatz der AWL hinaus. Moderne SPS-Steuerungen wie z.B. eine S7-1200 kann nur noch in FUP, KOP oder SCL programmiert werden. Die AWL ist nicht mehr vorhanden. SCL ersetzt nicht die grafischen Programmiersprachen FUP und KOP, sondern ergänzt sie. Informationstechnik (IT) und SPS wachsen heute immer mehr zusammen und da ist SCL von Vorteil, da sie für beide Seiten geeignet ist.
aus Operationen und Operanden
Operation | Darstellung |
Arithmetische Operationen | |
Potenz | ** |
Addition | + |
Subtraktion | - |
Multiplikation | * |
Division | / |
Modulo-Funktion | MOD |
Ganzzahlige Division | DIV |
Klammerungszeichen | |
Klammerung | ( ) |
Logische Operation | |
Negation | NOT |
Vergleichsoperationen | |
Kleiner | < |
Größer | > |
Kleiner gleich | <= |
Größer gleich | >= |
Gleichheit | = |
Ungleichheit | <> |
Semikolon abgeschlossen werden
Anweisung | Funktion |
Auswahlanweisungen | |
IF ... THEN ELSE ... ELSEIF ... END_IF; | Der Programmfluss kann in Abhängigkeit von einer Bedingung verzweigen |
CASE ... END_CASE; | Der Programmfluss wird in einer 1:n Verzweigung mit dem Wert aus n gesteuert |
Schleifenbearbeitung | |
FOR ... TO ... DO ... END_FOR; | Wiederholung von Anweisungen solange die Laufvariable innerhalb des Wertebereichs liegt |
WHILE ... DO ... END_WHILE; | Wiederholung von Anweisungen solange eine Bedingung zur Durchführung erfüllt ist |
REPEAT ... UNTIL ... END_REPEAT; | Wiederholung von Anweisungen bis eine Bedingung zum Abbruch erfüllt ist |
Programmsprung | |
Exit; | Verlassen einer Schleife an beliebiger Stelle unabhängig von der Abbruchbedingung |
GOTO ... | Sofortiger Sprung zu einer angegebenen Sprungmarke |
RETURN; | Verlassen des aktuellen Bausteins und Rückkehr zum aufrufenden Baustein |
CONTINUE; | Umgeht die Bearbeitung des aktuellen Schleifendurchlaufs ohne den Schleifendurchlauf zu beeinflussen |
Zeit- und Zählfunktionen | |
S_ODT | Zeit einschaltverzögert |
S_OFFDT | Zeit ausschaltverzögert |
S_PEXT | Zeit als verlängerter Impuls |
S_PULSE | Zeit als Impuls gestartet |
S_CD | Rückwärtszähler |
S_CU | Vorwärtszähler |
S_CUD | Vor- und Rückwärtszähler |
Es gibt natürlich noch mehr Befehle und Funktionen wie z.B. Schiebe-, Konvertierungs- und natürlich auch mathematische Funktionen in ST bzw. SCL, aber an dieser Stelle soll es erstmal genug sein.