IEC Norm 61131 | ||||
Aufbau der Norm | ||||
Die internationale Norm IEC 61131 (International Electrotechnical Commission) (die europäische Norm EN 61131 [1] ist identisch) 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
- Teil 8 Kommunikationsschnittstellen
- Teil 9 Programmierrichtlinien
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.
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 wurde. Zur Darstellung auf Drucker und Bildschirm ist der Zeichensatz ISO 646 [2] 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 PC's ü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-8 | ||||
Industrielle Prozessmessung und -steuerung. Richtlinien für die Anwendung und Durchführung von Programmierungen
IEC 61131-9 | ||||
Spezifiziert digitale Kommunikationsschnittstellentechnologie für kleine Sensoren und Aktoren (IO-Link [3] ).
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
Normgerechte Programme müssen auf jeder normgerechten SPS die gleichen Ergebnisse liefern. Ausnahmen bilden nur Programme die Abhängig sind
- vom Zeitverhalten der Programmausführung, der Anwendung
- von implementierungsabhängigen Eigenschaften im Programm
- von der Ausführung von Prozeduren** zur Fehlerbehandlung
** 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.
** 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 Steuerungs-Anweisung besteht aus einem Operationsteil, einem Operandenteil und einer eindeutigen Adresse.
Die Mnemonik [4] kann bei Siemens Step7 oder TIA-Portal zwischen IEC oder Step7 umgeschaltet werden. Einige andere Hersteller bieten diese Umschaltung auch. Wiederum gibt es auch 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.
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/Negation |
ST | = | Zuweisen |
S | S | Setzen |
R | R | Rücksetzen |
XOR | XOR | exklusives Oder |
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 Bit 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 | Bit |
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 | Bit |
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 | Bit |
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 strikt 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 für die Umsetzung in AWL, KOP und FUP dienen. Taster „S1“, ein Schließer, schaltet das Motorschütz „Q1“ ein. „Q1“ zieht an und hält sich selbst über den Hilfskontakt „Q1 13|14“ Mit Taster „S2“, einem Öffner, wird der Motor wieder ausgeschaltet. Im Beispiel wurde bewusst auf ein Motorschutz verzichtet! Für die Steuerung mit SPS wurden 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 „E1.0“, „E1.1“ und dem Ausgang „A2.0“ wurden eindeutige Adressen vom Typ BOOL (oder auch Boolean genannt) zugewiesen.
Die Anweisungsliste verdeutlicht sichtbar die Vorgaben der IEC 61131, dass z.B. die erste Anweisung aus Operationsteil O (Oder), Operandenteil E (Eingang) und eindeutiger Adresse 1.0 (Byte 1, Bit 0) besteht.
Die weiteren Anweisungen:
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“.
Das Ausschalten des Motors „besorgt“ Taster „S2“. Der Öffner liefert im unbetätigten Zustand ein „1“-Signal am Eingang 1.1. Wird er betätigt, wechselt der Signalzustand an E1.1 von „1“ auf „0“ und Ausgang 2.0 wird nicht mehr angesteuert. Ausgang 2.0 führt jetzt „0“-Signal, der Motor ist ausgeschaltet.
Von der Logik her sieht die Anweisungsliste einem Schaltplan mit Schützen verdammt ähnlich. Eine Besonderheit in dem angeführten Beispiel sind die Programmzeilen 1 „ U( “ und Zeile 4 „ ) “. 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 neben Ein- oder Ausgängen z.B. auch Merker.
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 versteht, ist man im Prinzip auf der richtigen Seite.
Das Verbindungselement —| |— entspricht einem Schließerkontakt, dieses Zeichen —|⁄|— einem Öffnerkontakt und —( )— z.B. einer Schützspule oder Leuchtmelder.
Die einfache „Motor ein/aus“ Schaltung in KOP programmiert:
Der Funktionsplan (FBS/FUP) | ||||
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 einfache „Motor ein/aus“ Schaltung, dieses Mal in FUP programmiert:
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
Im Beispiel ist die Weiterschaltbedingung (Transition) Eingang E3.0. Ist die Bedingung (E3.0 = „1“ ) erfüllt, wird im Schritt 2 Ausgang A8.7 gesetzt
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.
- Ausdrücke bestehen aus Operationen und Operanden
- Anweisungen müssen durch Semikolon abgeschlossen werden
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 | <> |
Anweisung | Funktion |
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_PULSE | Zeit als Impuls gestartet |
S_CD | Rückwärtszähler |
S_CU | Vorwärtszähler |
S_CUD | Vor- und Rückwärtszähler |
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 |
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.