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.

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 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
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 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. TasterS1“, ein Schließer, schaltet das MotorschützQ1“ ein. „Q1“ zieht an und hält sich selbst über den HilfskontaktQ1 13|14“ Mit TasterS2“, einem Öffner, wird der Motor wieder ausgeschaltet. Im Beispiel wurde bewusst auf ein Motorschutz verzichtet! Für die Steuerung mit SPS wurden die TasterS1“ auf SPS-Eingang 1.0 und „S2“ auf Eingang 1.1 angeschlossen. Das MotorschützQ1“ 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.

Motorschaltung ein/aus mit Schütz
Motorschaltung ein/aus mit Schütz
Motorschaltung ein/aus mit SPS
Motorschaltung ein/aus mit SPS

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“.

Anweisungsliste mit Step7-Software
AWL mit Step7
Anweisungsliste mit TIA-Portal Software
AWL mit TIA-Portal

Das Ausschalten des Motors „besorgt“ TasterS2“. 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:

Kontaktplan mit Step7-Software
KOP mit Step7
Kontaktplan mit TIA-Portal Software
KOP mit TIA-Portal

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:

Funktionsplan mit Step7-Software
FUP mit Step7
Funktionsplan mit TIA-Portal Software
FUP mit TIA-Portal

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
S7-GRAPH Schrittkette
S7-GRAPH Schrittkette
S7-GRAPH Aktion und Transition
S7-GRAPH Transition und Aktion
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 be­liebiger Stelle un­abhängig von der Ab­bruch­be­dingung
GOTO ... Sofortiger Sprung zu einer an­gegebenen Sprung­marke
RETURN; Verlassen des aktuellen Bau­steins und Rück­kehr zum auf­rufenden Bau­stein
CONTINUE; Umgeht die Be­arbeitung des aktuellen Schleifen­durchlaufs ohne den Schleifen­durchlauf zu be­einflussen
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ärts­zähler
Anweisung Funktion
Auswahlanweisungen
IF ...
THEN ...
ELSE ...
ELSEIF ...
END_IF;
Der Pro­gramm­fluss kann in Ab­hängig­keit von einer Be­dingung ver­zweigen
CASE ...
END_CASE;
Der Pro­gramm­fluss wird in einer 1:n Ver­zweigung mit dem Wert aus n ge­steuert
Schleifenbearbeitung
FOR ...
TO ...
DO ...
END_FOR;
Wieder­holung von An­weisungen solange die Lauf­variable inner­halb des Werte­bereichs liegt
WHILE ...
DO ...
END_WHILE;
Wieder­holung von An­weisungen so­lange eine Be­dingung zur Durch­führung er­füllt ist
REPEAT ...
UNTIL ...
END_REPEAT;
Wieder­holung von An­weisungen bis eine Be­dingung zum Ab­bruch er­fü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.