Sie sind auf Seite 1von 39

19

3 Grundzüge der Programmiernorm DIN EN 61131-3

Die Europäische Norm EN 61131-3 ist als 2. Ausgabe ab 2003 gültig und hat den Status einer
Deutschen Norm. Ihre hauptsächlichen Ziele bestehen in der Standardisierung der SPS-
Programmierung mit herstellerunabhängigen Programmiersprachen in einem einheitlichen
Programmorganisationskonzept sowie der Pflicht zur Variablendeklaration unter Verwendung
von elementaren und abgeleiteten Datentypen. Die Norm gibt auch den Befehlsvorrat für die
Programmierung vor, der in diesem Lehrbuch erst ab Kapitel 4 schrittweise eingeführt wird.

3.1 Programmiersprachen
Zur Erstellung der Steuerungsprogramme mit Hilfe einer Programmiersoftware können gemäß
DIN EN 61131-3 fünf Programmiersprachen zur Verfügung stehen: Zwei textuelle Fachspra-
chen (AWL, ST) und zwei grafische Fachsprachen (KOP, FBS) sowie die übergeordnete Ab-
laufsprache (AS), die grafische und textuelle Elemente enthält.
SPS-Programmiersprachen
Textsprachen Grafische Sprachen
Ablaufsprache
AS
Anweisungsliste Strukturierter Text Funktionsbausteinsprache Kontaktplan
AWL ST FBS KOP

IEC 61131-3 / CoDeSys Beispiele STEP 7 Beispiele


Anweisungsliste AWL
LD %IX0.0 U E 0.0
AND %IX0.1 U E 0.1
ORN %IX0.2 ON E 0.2
ST %QX4.0 = A 4.0
Strukturierter Text ST (SCL bei STEP 7)
%QX4.0:= %IX0.0 AND %IX0.1 A4.0:= E0.0 AND E0.1 OR NOT E0.2;
OR NOT %IX0.2;
Funktionsplandarstellung FBS (FUP bei STEP 7)

Kontaktplandarstellung KOP
20 3 Grundzüge der Programmiernorm DIN EN 61131-3

3.2 Programm-Organisationseinheiten
Ein Steuerungsprogramm (Anwenderprogramm) ist ein in Programm-Organisationseinheiten
(kurz: POE) gegliederte logische Anordnung von Sprachelementen und -konstrukten. In der
Praxis wird auch einfach von Bausteintypen gesprochen.
Programm-Organisationseinheiten
Programm Funktionsbaustein Funktion
(PRG) (FB) (FC)
zunehmende Funktionalität

Funktion: Dieser POE-Typ ist geeignet, wenn ein Funktionsergebnis ausschließlich aus den
Eingangsvariablen des Bausteins zu ermitteln ist und unter dem Funktionsnamen des Bausteins
zur Verfügung gestellt werden soll. Der Aufruf einer Funktion mit denselben Werten der Ein-
gangsvariablen liefert deshalb immer denselben Ausgangswert zurück. Die SPS-Norm enthält
einen Katalog von Standardfunktionen für SPS-Systeme, die zur Verfügung stehen sollten.
Spezielle Funktionen für das eigene Anwenderprogramm können durch Deklaration selbst
erzeugt werden. Dabei ist zu beachten, dass keine internen Zustandsvariablen deklarierbar
sind, da der Bausteintyp Funktion (FC) dafür keine Speicherfähigkeit (Gedächtnis) besitzt.
Eine Funktion stellt das Funktionsergebnis unter dem deklarierten Funktionsnamen zur Verfü-
gung, so dass keine Ausgangsvariable deklariert werden muss. Es ist jedoch zulässig, Funktio-
nen mit mehreren Ausgangsvariablen zu bilden. Funktionen können innerhalb eines Pro-
grammzyklus mehrfach aufgerufen werden, um mit unterschiedlichen Werte der Eingangsvari-
ablen entsprechende Funktionsergebnisse zu ermitteln.
Funktionsbaustein: Dieser POE-Typ ist geeignet, wenn aus den Werten von Eingangs- und
Ausgangsvariablen sowie bausteininterner Zustandsvariablen neue Ergebnisse für eine oder
mehrere Ausgangsvariablen ermittelt werden sollen. Alle Werte der Ausgangs- und Zustands-
variablen bleiben von einer Bearbeitung des Funktionsbausteins bis zur folgenden erhalten.
Das bedeutet, dass es bei einer erneuten Bearbeitung des Funktionsbausteins mit denselben
Werte der Eingangsvariablen zu anderen Ausgangsergebnissen kommen kann. Anschaulich
spricht man hier von einem Bausteintyp mit Gedächtnis.
Um die Fähigkeiten eines Funktionsbausteins in einem Programm auch mehrfach nutzen zu
können, ist die so genannte Instanziierung der Funktionsbausteine erforderlich, worunter man
das Erzeugen einer Kopie (Instanz) des Bausteines versteht. Jede Instanz muss mit einem eige-
nen Namen versehen werden, unter dem die letztgültigen Variablenwerte auf entsprechenden
Speicherplätzen verwaltet werden.
Die SPS-Norm schlägt viele Standardfunktionsbausteine für SPS-Systeme vor. Daneben kön-
nen eigene Funktionsbausteine für das Anwenderprogramm selbst erzeugt werden.
Programm: Dieser POE-Typ bildet die oberste Hierarchieebene der Programm-Organisa-
tionseinheiten. Einige SPS-Systeme verwenden den Bausteintyp Programm (PRG) als alleini-
ges Hauptprogramm zur Organisation des Anwenderprogramms. Der Programminhalt eines
solchen (Haupt)-Programms besteht dann nur aus Aufrufen der Funktionen (FC) und Funkti-
onsbausteine (FB) und um deren Eingangs-/Ausgangs-Variablen mit SPS-Ein-/Ausgängen zu
verbinden. Der Gebrauch von Programmen ist identisch mit dem von Funktionsbausteinen.
3.3 Deklaration von Programm-Organisationseinheiten 21

3.3 Deklaration von Programm-Organisationseinheiten


Anwenderprogramme bestehen auch aus so genannten abgeleiteten Funktionen (FC) und/oder
Funktionsbausteinen (FB), die erst durch Deklaration und Programmierung erzeugt werden
müssen. Dabei sind Vorschriften zu beachten. Die Deklaration bezieht sich im Bausteinkopf
auf die Festlegung des Bausteintyps und auf die Bildung der Außenschnittstelle mit ihren Ein-
gangs- und Ausgangsvariablen sowie den von außen nicht erkennbaren internen Zustands-
variablen. Die Deklarationen erfolgen unter Verwendung festgelegter Schlüsselwörter, wie sie
im nachfolgenden Text fett gedruckt hervorgehoben sind. Die Programmierung bezieht sich
auf den Bausteinrumpf, der die Steuerungslogik enthalten muss. Deklaration und Programmie-
rung kann in Textform oder in Grafik erfolgen.

3.3.1 Deklaration einer Funktion mit dem Funktionsnamen FC 1


Die Text-Deklaration muss aus folgenden Elementen bestehen:
x dem einleitende Schlüsselwort FUNCTION gefolgt vom Funktionsnamen, einem Doppel-
punkt und dem Datentyp des Funktionswertes,
x der Konstruktion VAR_INPUT ... END VAR, mit der die Namen und Datentypen der
Eingangsvariablen der Funktion festlegt werden,
x der Konstruktion VAR ... END VAR (falls erforderlich), mit der die Namen und Daten-
typen von internen temporären Hilfsvariablen festlegt werden können, deren Daten jedoch
bei Beendigung der Funktion verloren gehen.
x dem Bausteinrumpf mit dem auszuführenden Programm, geschrieben in einer der unter 3.1
erwähnten oder einer weiteren Programmiersprache,
x dem abschließenden Schlüsselwort END_FUNCTION
Optional können auch die beiden folgenden Konstruktionen verwendet werden:
x VAR_OUT ... END VAR, mit der die Namen und Datentypen von Ausgangsvariablen der
Funktion festlegt werden, deren Werte innerhalb des Bausteins durch das Programm ver-
ändert werden dürfen,
x VAR_IN_OUT ... END VAR, mit der die Namen und Datentypen von Durchgangs-
variablen der Funktion festlegt werden, deren Werte innerhalb des Bausteins durch das
Programm verändert werden dürfen.
„ Beispiel 3.1: Deklaration einer Funktion FC

Allgemein Ausführung in Textform Ausführung in Grafik


FUNCTION FC 1 : BOOL FUNCTION FC 1 : BOOL FUNCTION FC 1 : BOOL
(*Außenschnittstelle*) (*Außenschnittstelle*) (*Außenschnittstelle*)
VAR_INPUT VAR_INPUT
Bezeichner1 : Datentyp ; Start : BOOL ;
Bezeichner2 : Datentyp ; Ventil : BOOL ;
END_VAR END_VAR
(*Funktionsrumpf*) (*Funktionsrumpf*) (*Funktionsrumpf*)

Programm

END_FUNCTION END_FUNCTION END_FUNCTION


22 3 Grundzüge der Programmiernorm DIN EN 61131-3

3.3.2 Deklaration eines Funktionsbausteins mit dem Namen FB 1


Die Deklaration eines eigenen Funktionsbausteins in Textform erfolgt in ähnlicher Weise wie
bei der selbsterstellten Funktion, dabei sind folgende Elemente zu verwenden:
x das einleitende Schlüsselworte FUNCTION_BLOCK gefolgt vom Funktionsbaustein-
namen ohne einen Datentyp,
x die Konstruktion VAR_INPUT ... END VAR, mit der die Namen und Datentypen der
Eingangsvariablen des Funktionsbausteins festlegt werden,
x die Konstruktion VAR_OUTPUT ... END VAR, mit der die Namen und Datentypen der
Ausgangsvariablen des Funktionsbausteins deklariert werden (mehrere Ausgangsvariablen
sind zulässig),
x die Konstruktion VAR_IN_OUT ... END VAR, mit der die Namen und Datentypen von
Durchgangsvariablen des Funktionsbausteins festlegt werden, deren Werte innerhalb des
Bausteins durch das Programm verändert werden dürfen,
x die Konstruktion VAR ... END VAR, mit der die Namen und Datentypen der baustein-
internen Zustandsvariablen des Funktionsbausteins festlegt werden. Diese Konstruktion
wird auch verwendet, um im Funktionsbaustein eine Instanz eines Standardfunktionsbau-
steins zu erzeugen,
x die Konstruktion VAR_TEMP ... END VAR zur temporären Speicherung von Variablen
in Funktionsbausteinen FB und Programmen PRG,
x einen Funktionsbausteinrumpf mit dem auszuführenden Programm,
x das abschließende Schlüsselwort END_FUNCTION_BLOCK.

„ Beispiel 3.2: Deklaration eines Funktionsbausteins FB

Allgemein Ausführung in Textform Ausführung in Grafik


FUNCTION_BLOCK FB 1 FUNCTION_BLOCK FB 1 FUNCTION_BLOCK FB 1
(*Außenschnittstelle*) (*Außenschnittstelle*) (*Außenschnittstelle*)
VAR_INPUT VAR
Bezeichner_1: Datentyp; Start: BOOL;
Bezeichner_2: Datentyp; Reset: BOOL;
END_VAR END_VAR
VAR_OUTPUT VAR_OUTPUT
Bezeichner_3: Datentyp; Ausg: BOOL;
END_VAR END_VAR
VAR VAR
Bezeichner_4: Datentyp; SRO_1: RS;
END_VAR END_VAR
(*Funktionsbausteinrumpf*) (*Funktionsbausteinrumpf*) (*Funktionsbausteinrumpf*)

Programm

END_FUNCTION_BLOCK END_FUNCTION_BLOCK END_FUNCTION_BLOCK


3.4 Variablen 23

3.4 Variablen
3.4.1 Übersicht
Eine der wichtigsten Vorschriften der SPS-Norm IEC 61131-3 ist die explizit auszuführende
Deklaration von Variablen und Konstanten mit Festlegung eines zugehörigen Datentyps. Bei
der Deklaration der Programm-Organisationseinheiten FC und FB in Kapitel 3.3.1 und 3.3.2
war es bereits erforderlich, Variablen mit einzubeziehen, jedoch nur hinsichtlich ihrer Auf-
tragsbestimmung innerhalb der Bausteine. Unterschieden wurde zwischen Eingangs-, Aus-
gangs-, Durchgangs- und internen Zustandvariablen. Auf die Bedeutung von Variablen und
ihrer Darstellungsarten sowie der verschiedenen Variablentypen wird nachfolgend näher ein-
gegangen.
Eine Variable ist ein mit einem Namen (Bezeichner) versehener Speicherplatz, der im Anwen-
derprogramm als Platzhalter für Daten fungiert, die sich zur Laufzeit des Programms ändern
können.
Unter Daten sollen hier Informationen aus technischen Anlagen verstanden werden, wie z. B.
Messdaten über Temperaturen, Füllstände, Durchflussmengen, die verarbeitet und gespeichert
werden müssen. Die Variablen sind die Mittel, um die Daten zu erfassen. Dabei wird für die
Variablen ein bestimmter Datentyp festgelegt, der Speicherplatz in passender Größe für die
Daten reserviert. Der Datentyp hängt direkt zusammen mit den auf ihn zulässigen Operationen.
Der Datentyp bestimmt durch seine Interpretation (Lesart) den Wert des Speicherinhalts.
In Funktionen (FC) und Funktionsbausteinen (FB) sollte nur mit Variablen programmiert wer-
den, um damit bibliotheksfähige Programme zu erhalten, die keine Festlegungen bezüglich der
Verwendung realer SPS-Eingänge/Ausgänge, Merker, Zähler und Zeitglieder enthalten. Erst
auf der Ebene der Programme (PRG) sollte deren Zuordnung zu den verwendeten Eingangs-
und Ausgangsvariablen erfolgen.

3.4.2 Variablen-Deklaration
Die SPS-Norm IEC 61131-3 unterscheidet die Variablen hinsichtlich
x der Anzahl ihrer Datenelemente in Einzelelement-Variablen und Multielement-Variablen,
x ihres Geltungsbereichs zwischen lokalen und globalen Variablen. Lokal bedeutet, dass die
Variable nur in dem Baustein bekannt ist, in dem sie auch deklariert wurde. Globale Vari-
ablen sind solche, die mit der Konstruktion VAR_GLOBAL ... END_VAR in allen Bau-
steinen innerhalb der SPS bekannt gemacht wurden. Der Deklarationsort für globale Vari-
ablen ist die Programm-Organisationseinheit Programm (PRG).
3.4.2.1 Einzelelement-Variablen
Einzelelement-Variablen können nur einzelne Datenelemente mit elementaren Datentypen oder
abgeleiteten Datentypen darstellen.
x Elementare Datentypen sind durch die Norm vordefiniert und dem Programmiersystem
bekannt. Tabelle 3.2 in Kapitel 3.5.1 gibt einen Einblick in die gebräuchlichsten elementa-
ren Datentypen wie BOOL, BYTE, WORD, INT, REAL, TIME, STRING usw.
x Abgeleitete Datentypen sind nach IEC 61131-3 anwender- oder herstellerdefinierte Daten-
typen. Als Beispiel für einen abgeleitete Datentyp bei Einzelelement-Variablen wird in der
Norm der Unterbereichsdatentyp erwähnt. Ein selbstdefinierter Unterbereichsdatentyp kann
z. B. mit dem Namen „SubINT“ als ein Integertyp mit eingeschränktem Zahlenbereich de-
klariert werden, falls ein Anwender so etwas benötigt.
24 3 Grundzüge der Programmiernorm DIN EN 61131-3

Die Deklaration neuer Datentypen erfolgt nach Norm mit der vorgeschriebenen Konstruk-
tion TYPE ... END_TYP in einem dafür bestimmten Menü des Programmiersystems.
Eine weitere Unterscheidung für Einzelelement-Variablen betrifft deren formale Darstellung.
Gemeint ist, ob die Einzelelement-Variablen symbolisch oder direkt dargestellt sind.
x Eine symbolische Darstellung von Variablen erfolgt im Deklarationsteil der Bausteine mit
einem Namen (Bezeichner) innerhalb der schon bekannt gemachten Schlüsselwörter VAR,
VAR_INPUT, VAR_OUTPUT, VAR_IN_OUT, VAR_TEMP und END_VAR unter An-
gabe eines Datentyps. Um den Speicherort einer solchen Variablen muss sich der Program-
mierer nicht kümmern, er wird vom Betriebssystem automatisch festgelegt.
x Eine direkte Darstellung von Variablen muss durch eine besondere Symbolik angezeigt
werden, die aus einem vorgesetzten Prozentzeichen (%), gefolgt von einem Präfix für den
Speicherort und einem Präfix für die Größe nach Tabelle 3.1 besteht. Der Hintergrund für
diese Formalität ist, dass der Gebrauch von direkt dargestellten Variablen nur in der obers-
ten Programm-Organisationseinheit Programm (PRG) zur äußeren Beschaltung der auf-
gerufen FC- und FB-Bausteine mit SPS-Eingängen/Ausgängen/Zählern und Zeitgliedern
definiert ist. Nach den Vorschriften der Norm IEC 61131-3 sind diese Operanden dem
Programm (PRG) jedoch nicht automatisch bekannt, d. h., sie müssen erst durch Deklarati-
on bekannt gemacht werden, dazu dienen die direkt dargestellten Variablen.

Tabelle 3.1: Präfix für Speicherort und Größe der Operanden


Präfix Bedeutung Beispiele für direkte Variablen
I Speicherort Eingang Einzel-Eingänge %IX0.7 ... %IX0.0
Q Speicherort Ausgang Einzel-Ausgänge %QX0.7 ... %QX0.0
M Speicherort Merker Eingangsbyte %IB0 = %IX0.7 ... %IX0.0
X (Einzel)-Bit-Größe Ausgangsbyte %QB0 = %QX0.7 ... %QX0.0
B Byte-(8 Bit)Größe Eingangswort %IW0 = %IB0+%IB1
W Wort-(16 Bit)Größe Ausgangswort %QW0 = %QB0+%QB1
D Doppelwort-(32 Bit) Eingangsdoppelwort %ID0 = %IW0+%IW1

„ Beispiel 3.3: Deklaration von zwei symbolisch dargestellten Variablen und einer Konstanten
Allgemein Ausführung in Textform
VAR_INPUT VAR_INPUT
Bezeichner1, Bezeichner2: Datentyp; Spg_U1, Spg_U2: INT;
END_VAR END_VAR
VAR CONSTANT VAR CONSTANT
Bezeichner: Datentyp; Pi: REAL := 3.14;
END_VAR END_VAR

„ Beispiel 3.4: Deklaration einer direkt dargestellten Variablen


Allgemein Ausführung in Textform
VAR VAR
AT %Operand: Datentyp; AT %IX4.7: BOOL;
END_VAR END_VAR
3.4 Variablen 25

Das zur Deklaration verwendete AT ist ebenso ein Schlüsselwort wie VAR oder END_VAR.
In einer zweiten Variante können zur Erzielung einer besseren Programmlesbarkeit bei direkt
dargestellten Variablen auch Namen (Bezeichner) eingeführt werden, die jedoch im Unter-
schied zu den symbolisch dargestellten Variablen direkt mit dem physikalischen Speicherort
eines SPS-Eingangs/Ausgangs oder Merkers verbunden sind.
„ Beispiel 3.5: Deklaration einer direkt dargestellten Variablen mit symbolischen Namen
Allgemein Beispiel
VAR VAR
Bezeichner AT %Operand : Datentyp; Endschalter AT %IX4.7 : BOOL;
END_VAR END_VAR

3.4.2.2 Multielement-Variablen
Multielement-Variablen enthalten mehrere Datenelemente, die in Feldern oder Strukturen
zusammengefasst sind. Es kann viele Begründungen für die Anwendung von Multielement-
Variablen in Anwenderprogrammen geben. Ein einfacher Grund ist dabei, den Rückgabewert
einer Funktion FC als Multielementwert aus mehreren, aber zusammenhängenden Einzelwer-
ten bilden zu wollen. Einzelne Datenelemente von Multielement-Variablen lassen sich bei
Bedarf nach festgelegten Vorschriften ansprechen.
Felder:
Ein Feld ist eine Sammlung von Datenelementen des gleichen Datentyps, die sich durch einen
oder mehrere in eckigen Klammern [ ] angegebenen Feldindizes ansprechen lassen. Als Feld-
index dürfen in AWL-Sprache nur Einzelelement-Variablen oder ganzzahlige Literale verwen-
det werden. Bei Verwendung einer Variablen als Feldindex kann deren Wert zur Laufzeit des
Programms verändert werden (bei STEP 7-AWL nicht möglich, aber bei CoDeSys).
Ein Feld als Multielement-Variable wird mit einem Namen (Bezeichner) und der Konstruktion
ARRAY [Feldindex] OF <Datentyp der Datenelemente> und ggf. mit passenden Initialisie-
rungswerten deklariert, wie in Beispiel 3.6 gezeigt wird. Durch den Feldindex werden die
untere und obere Feldgrenze festgelegt. Es gibt ein- und mehrdimensionale Felder.
„ Beispiel 3.6: Eindimensionales Feld in FB-Baustein
Deklaration
VAR
Tabelle: ARRAY [0..3] OF BYTE:= 16#00, 16#0F, 16#80, 16#FF; (* Tabelle ist Feldvariable*)
END_VAR
VAR_INPUT
Zeiger: INT; (*Zeiger für Feldindex*)
END_VAR
VAR_OUTPUT
Wert: BYTE; (*Wert ist Ausgangsvariable*)
END_VAR
(*Abfrage in AWL-Sprache*)
LD Tabelle[Zeiger]
ST Wert (*Wert = 16#80, wenn Zeiger = 2*)
26 3 Grundzüge der Programmiernorm DIN EN 61131-3

Strukturen:
Eine Struktur ist eine mit einem Namen (Bezeichner) versehene Sammlung von Datenelemen-
ten mit zumeist unterschiedlichen Datentypen, die als gemeinsamer Datensatz gespeichert
werden sollen. Die einzelnen Datenelemente der Struktur sind als Variablen oder Konstanten
mit eigenem Namen (Bezeichner) und festgelegten Datentypen deklariert.
Die Strukturdeklaration erfolgt durch folgende Konstruktion:
TYPE <Strukturname>:
STRUCT
<Variablendeklaration 1>
...
<Variablendeklaration n>
END_STRUCT
END_TYPE
<Strukturname> ist ein durch Deklaration entstandener Datentyp, der im gesamten Projekt
bekannt ist und wie ein Standard Datentyp (elementarer Datentyp) benutzt werden kann.

„ Beispiel 3.7: Anlegen und Anwenden einer Datenstruktur

Deklaration eines selbstdefinierten Datentyps MOTORDAT


(* bei CoDeSys im Object Organizer / Registerkarte Datentypen*)
TYP MOTORDAT: (*MOTORDAT ist selbstdefinierter Datentyp*)
STRUCT
Freq: WORD; (*Freq, Spg sind Komponentennamen der Datenstruktur*)
Spg: REAL; (*und wie Variablen mit elementarem Datentyp deklariert*)
END_STRUCT
END_TYPE

Anwendungsfall 1: Der neue, selbstdefinierte Strukturdatentyp MOTORDAT kann in einem Baustein bei
der Deklaration einer Variablen als deren Datentyp verwendet werden. Die Norm IEC 61131-3 bezeich-
net eine solche Variable als strukturierte Variable und ordnet sie den Multielement-Variablen zu.
Der Zugriff auf Variablen von Strukturen erfolgt durch Nennung des Namens der strukturier-
ten Variablen - und, getrennt durch einen Punkt, des betreffenden Komponentennamens:
< Strukturvariablenname > . < Komponentenname >

Deklaration einer strukturierten Variablen mit dem selbstdefinierten Datentyp MOTORDAT


FUNCTIONBLOCK FB 12
VAR
Steuerung: MOTORDAT; (* „Steuerung“ ist Strukturvariablenname*)
END_VAR
(*AWL-Programm*)
LD 50
ST Steuerung . Freq (* Zuweisung auf Komponentenname „Freq“ *)
LD 400.0
ST Steuerung . Spg (*Zuweisung auf Komponentenname „Spg“ *)
3.5 Datentypen und Literale 27

Anwendungsfall 2: Der neue selbstdeklarierte Strukturdatentyp kann bei der Deklaration einer Funktion
FC als deren Datentyp verwendet werden, wodurch sie einen Multielement-Rückgabewert erhält.
Der Zugriff auf den Multielement-Rückgabewert einer Funktion erfolgt durch Nennung des Funktions-
namens – und, getrennt durch einen Punkt, des betreffenden Komponentennamens:
< Funktionsnname > . < Komponentenname >

Deklaration einer Funktion mit dem Namen FC 10 und dem Strukturdatentyp MOTORDAT
FUNCTION FC10: MOTORDAT (*FC10 ist der Name der Funktion*)
VAR_INPUT
Drehz: INT; (*„Drehz“ und „Strom“ sind Eingangsvariablen des FC10*)
Strom: REAL;
END_VAR
(*AWL-Programm*)
LD 400.0
ST FC10.Spg (*Komponente „Spg“ erhält den Wert 400.0 zugewiesen *)
LD Drehz
ST FC10.Freq (*Komponente „Freq“ erhält den Wert von „Drehz“ zugewiesen*)

3.5 Datentypen und Literale


Bei der Variablendeklaration wird jedem Bezeichner (Variablenname) ein Datentyp zugeord-
net, der festlegt, wie viel Speicherplatz reserviert wird und welche Operationen mit den Da-
tenwerten zulässig sind. Die Variablen sind die Mittel, um die Daten zu erfassen. Die Daten
selbst sind die in Wahrheitswerte, Zahlenwerte und Zeitangaben (Zeitdauer und Zeitpunkt)
u. a. unterscheidbaren Inhalte, die im SPS-Programm zu verarbeiten sind.
Um die typgerechte Behandlung von Daten sicher zu stellen, wurden Datentypen vereinbart.
Die SPS-Norm unterscheidet elementare Datentypen und abgeleitete Datentypen. Die Daten-
typen sind in SPS-Systemen global, also in allen Bausteinen verfügbar.
Zur sachgerechten Anwendung von Datentypen gehört nicht nur die Kenntnis des jeweiligen
Wertebereichs, den ein bestimmter Datentyp abdeckt, sondern auch die festgelegte Schreib-
weise dieser Wahrheitswerte, Zahlenwerte und Zeitangaben, die in der SPS-Norm unter dem
Obergriff Literale zusammengefasst werden. Literale sind im weiteren Sinne zahlenmäßig zu
schreibende Konstanten, die einen Wert direkt darstellen. Die Eingabe von Literalen tritt
hauptsächlich bei der Versorgung entsprechender Eingangsvariablen von Bausteinen oder bei
der Variablendeklaration mit Initialisierungswerten auf.
Die IEC 61131-3 unterscheidet die Literale in nummerische Literale, Zeitliterale und Zeichen-
folge-Literale. Auf Letztere soll hier nicht weiter eingegangen werden, weil sie die Schreib-
weisen selten verwendeter Angaben wie Line feed (Zeilenvorschub) u. a. betreffen.
Zusammenfassend: Datentypen sind bei der Variablendeklaration durch Verwendung festge-
legter Schlüsselwörter zu schreiben und decken ihrem Typ entsprechende Wertebereiche ab
und sind in allen Programm-Organisationseinheiten (Bausteinen) gültig. Literale sind erforder-
lich, wenn es um die direkte Eingabe von zahlenmäßig zu schreibenden Werten mit genau zu
beachtender Schreibweise geht. Hier führen kleinste Unkorrektheiten zu manchmal schwer zu
deutenden Fehlermeldungen beim Schreiben oder Übersetzen von Programmen.
28 3 Grundzüge der Programmiernorm DIN EN 61131-3

3.5.1 Standard Datentypen und Schreibweisen von Zahlen- und Zeitangaben


In der folgenden Tabelle 3.2 sind die wichtigsten von der SPS-Norm vorgesehenen elementa-
ren Datentypen aufgelistet, die in Programmiersystemen auch als Standard Datentypen be-
zeichnet werden. Für die Datentypen sind deren festgelegte Schlüsselwörter und der von ihnen
abgedeckte Wertebereich angegeben. Gleichzeitig sind die durch die Literale festgelegten
Schreibweisen der zahlenmäßig dargestellten Werte berücksichtigt.
Tabelle 3.2: Elementare Datentypen nach IEC 61131-3 (Auswahl)
Schlüsselwort Datentyp Größe Schreibweisen von Literalen, Wertebereich
Bit-Datentypen
BOOL Boolesche Einzelbits 1 Bit FALSE, TRUE

BYTE 8-Bit-Folge oder 8 Bit (B#)16# 00...FF 1), 2)


Hex-Zahlenbereich
WORD 16-Bit-Folge oder 16 Bit (W#)16# 0000...FFFF 1), 2)
Hex-Zahlenbereich
DWORD 32-Bit-Folge oder 32 Bit (DW#)16# 0000_0000...FFFF_FFFF 1), 2)
Hex-Zahlenbereich
STRING ASCII-Zeichen Bit 3) (*variabel-lange Zeichenfolge*)
Arithmetiktypen
INT Ganze Zahlen 16 Bit –32768 bis +32767
(Festpunktzahlen)
DINT Ganze Zahlen 32 Bit L#–2147483648 bis +2147483647
(Festpunktzahlen)
REAL Reelle Zahlen 32 Bit Dezimalzahl mit Punkt: 341.7 oder
(Gleitpunktzahlen) Exponentialdarstellung: 3.417 E+02
Zeittypen
TIME Zeitdauer 32 Bit t # 12h20m30s
(IEC-Format)
TIME OF DAY Uhrzeit 32 Bit tod #08:36:12
(Tageszeit)
DATE Datum 16 Bit d #1990-01-01
Hinweis: In der SPS-Norm ist kein eigener Datentyp für BCD-Zahlen (Binär Codierte Dezimalzahlen)
vorgesehen, diese sind eine Teilmenge der Hexadezimalzahlen, für die es die Datentypen BYTE,
WORD und DWORD gibt.
1) In Klammern gesetzt sind die in STEP 7 zusätzlich erforderlichen Zeichen.
2) BYTE, WORD, DWORD stellen nicht immer vorzeichenlose, dualcodierte Ganzzahlen dar, sondern
auch Bitfolgen, deren einzelne Bits keine Stellenwertigkeit haben, z. B. EB 0 = E 0.0 bis E 0.7.
Eingabe einer 16-Bit-Folge ist auch als 2#1111_1111_1111_1111 mit Unterstrichen zwischen Zif-
ferngruppen zwecks besserer Lesbarkeit erlaubt.
3) Die Länge dieser Datenelemente ist implementierungsabhängig.

Wird bei der Variablendeklaration keine Vorbelegung der Speicherplätze mit Datenwerten
vorgenommen, so ist der Anfangswert standardmäßig null. Mit einer Initialisierung können
andere Vorbelegungswerte zugewiesen werden. Zur Initialisierung wird der Zuweisungsopera-
tor „ := “ verwendet, z. B.:
Variable XY : INT := 10 (* Integer-Variable mit Anfangswert 10 *)
3.6 Programmstrukturen und Datenaustausch zwischen Bausteinen 29

Beispiele für Literale bei Variablendeklarationen mit Initialisierungen:


VAR
Zeitdauer: TIME:= t#12h20m30s; (*12 Stunden, 20 Minuten, 30 Sekunden*)
Tageszeit: TIME_OF_DAY:= tod#08:36:12; (*8 Uhr 36 und 30 Sekunden*)
Datum: DATE:= d#2008-04-28; (*28. April 2008*)
END_VAR

3.5.2 Abgeleitete Datentypen


Anwender können auf der Grundlage der Standard Datentypen weitere Datentypen durch De-
klaration schaffen, die in der IEC 61131-3 als abgeleitete Datentypen bezeichnet werden. Die
Norm bietet dafür eine besondere Konstruktion an:
TYPE ... END_TYPE
Neu gebildete Datentypen sind keine frei erfunden Typen, die von keiner SPS verarbeitet wer-
den könnten, sondern spezielle Abwandlungen und Zusammensetzungen der Standarddatenty-
pen. Der Deklarationsort für die Bildung abgeleiteter Datentypen ist abhängig vom verwende-
ten Programmiersystem. Ein ausgeführtes Beispiel ist in Kapitel 3.4.2.2 unter Multielement-
Variablen bei Strukturen näher erläutert. Dort wird auch gezeigt, wie einzelne Komponenten
von Datenstrukturen angesprochen werden können.
Bei STEP 7 werden anwenderdefinierte Datentypen mit UDT (User Defined Data Typ) be-
zeichnet. Diese können wie elementare Datentypen oder zusammengesetzte Datentypen in der
Variablendeklaration von Codebausteinen (FC, FB, OB) oder als Datentyp für Variablen in
einem Datenbaustein (DB) verwendet werden. Ein UDT entsteht durch Deklaration über: Bau-
steine > Einfügen > Datentyp. Sein Name ist UDTn (n = Nummer) oder ein symbolischer
Name und ist global in allen Bausteinen gültig und bekannt. Der Datentyp UDT entspricht dem
Aufbau der Datenstruktur STRUCT. Daher können UDT-Komponenten ebenso angesprochen
werden wie die STRUCT-Komponenten, z. B.:
L Analogwert.Alarme.Messwert_zu_hoch

3.6 Programmstrukturen und Datenaustausch zwischen Bausteinen


Unter einer Programmstruktur versteht man den Aufbau eines Anwenderprogramms aus Bau-
steinen (Programm-Organisationseinheiten). Es können zwei Strukturen unterschieden werden:
3.6.1 Lineares Programm
Das gesamte Anwenderprogramm befindet sich in dem zyklisch bearbeiteten <Programm>.
Die CPU arbeitet die Anweisungen der Reihe nach ab und beginnt dann wieder von vorne, wie
in Bild 3.2 gezeigt. Ein Datenaustausch mit anderen Bausteinen ist nicht erforderlich.

Bild 3.2:
Lineares Programm
30 3 Grundzüge der Programmiernorm DIN EN 61131-3

3.6.2 Strukturiertes Programm


Ein strukturiertes Programm ist in mehrere Bausteine aufgeteilt, wobei jeder Baustein nur den
Programmcode für seine Teilaufgabe enthält. In der Programm-Organisationseinheit <Pro-
gramm> bestimmen die Aufruf-Anweisungen die Reihenfolge, in der die einzelnen Bausteine
bearbeitet werden. Gegenüber dem linearen Programm besteht der Vorteil in den besser über-
schaubaren kleinen Einheiten. Im strukturierten Programm ist ein Datenaustausch zwischen
den beteiligten Bausteinen zu organisieren
In Bild 3.3 ruft der Baustein <Programm> nacheinander die Funktionen FB 10 und FB 20 auf
und versorgt deren Eingangsvariablen (A, B bzw. D, E, F) mit Variablenwerte (Var1, Var2
bzw. Var5, Var6, Var7) aus seinem Bereich. Zur Durchführung des hier erforderlichen Daten-
austausches sind Konventionen zu beachten. Wie ist eine Funktionen FC aufzurufen? Wie
erfolgt die Verteilung der Variablenwerte (Var1,...) auf die Eingangsvariablen (A,...) der Funk-
tionen? Wie wird das Funktionsergebnis an den aufrufenden Baustein PRG zurück gegeben?

Bild 3.3: Zur Datenübergabe an Funktionen


Der Funktionsname, z. B. <FC 10>, muss im
Operatorfeld der AWL-Anweisung stehen,
also dort, wo sonst z. B. LD für Load oder ST
für Store stehen.
Var1 Æ A (Eingangsvariable von FC 10)
Var2 Æ B (Eingangsvariable von FC 10)
Var3 Å FC 10 (Funktionsergebnis).
Entsprechendes gilt für FB 20.

Im Bild 3.4 ist ein strukturiertes Programm mit zwei Instanz-Aufrufen desselben Funktions-
bausteins FB 10 dargestellt. Die Aufrufe können in der Programmiersprache AWL bedingt
oder unbedingt mit dem Operator CAL ausgeführt werden. Mit CAL lassen sich Eingangsvari-
ablen und Ausgangsvariablen des Funktionsbausteins mit Variablenwerte versorgen. In umge-
kehrter Richtung kann das Auslesen einer Ausgangsvariablen des Funktionsbausteins nur mit
der Konstruktion <Instanz.Variablenname> erfolgen, wie in Bild 3.4 zu erkennen ist.

Bild 3.4:
Das Steuerungsprogramm besteht aus dem
Aufruf von zwei Instanzen eines FB 10.
Die Variablen Var1 bzw. Var7 und Var2
bzw. Var8 werden an die Eingangsvariablen
A bzw. B der Instanzen 1 bzw. 2 des Funk-
tionsbausteins FB 10 übergeben.
Die Ausgangsvariable X des FB 10 wird in
das Programm <PRG> mit der Konstruktion
<Instanz.Variablenname> eingelesen.

Ein besonders erwähnenswerter Aspekt des Programmentwurfs ist die Wiederverwendbarkeit


der entwickelten Bausteine. Wenn es gelingt, große Teile neu zu entwickelnder Programme
mit bereits vorhandenen und getesteten Bausteinen abdecken zu können, bedeutet dies auch
eine Kostenersparnis. Es gehört daher zur Programmierstrategie, neue Bausteine norm- und
bibliotheksgerecht nur unter Verwendung lokaler Variablen zu entwickeln.
3.6 Programmstrukturen und Datenaustausch zwischen Bausteinen 31

3.6.3 Aufruf und Wertübergaben zwischen Bausteinen nach IEC 61131-3

3.6.3.1 Aufrufhierarchie der Bausteine PRG, FB und FC


Das Anwenderprogramm einer SPS hat einen hierarchischen Aufbau: An oberster Stelle steht
ein Baustein des Typs Programm (PRG), dessen Deklaration und Gebrauch identisch ist mit
denen der bereits beschriebenen Funktionsbausteine, jedoch mit den begrenzenden Schlüssel-
wörtern PROGRAM ... END_PROGRAM. In diesem Baustein können Instanzen von Funk-
tionsbausteinen (FB) sowie Funktionen (FC) aufgerufen werden.
An mittlerer Stelle stehen die Bausteine des Typs Funktionsbaustein (FB). Innerhalb einer
Instanz eines Funktionsbausteins kann eine Instanz eines anderen Funktionsbaustein gebildet
werden (so genannte Multiinstanzen) oder auch Funktionen (FC) aufgerufen werden.
An unterster Stelle stehen die Bausteine vom Typ Funktionen (FC). Innerhalb einer Funktion
sind auch andere Funktionen (FC) aufrufbar, nicht jedoch Funktionsbausteine (FB).

3.6.3.2 Aufruf eines Funktionsbausteins FB in FBS (FUP) und AWL


Im nachfolgenden Beispiel sind Bausteinaufrufe und die damit verbundenen Werteübergaben
in Funktionsbausteinsprache und Anweisungsliste gegenüber gestellt.

„ Beispiel 3.8: Programm PRG ruft Funktionsbaustein FB auf

PROGRAM PRG PROGRAM PRG


(*Deklaration*) (*Deklaration*)
VAR_INPUT VAR_INPUT
Wert1 AT %IX0.0 : BOOL ; Wert1 AT %IX0.0 : BOOL ;
Wert2 AT %IX1.0 : BOOL ; Wert2 AT %IX1.0 : BOOL ;
Wert3 AT %IX1.7 : BOOL ; Wert3 AT %IX1.7 : BOOL ;
END_VAR END_VAR
VAR VAR
INSTANZ : FB 10 ; (*Instanz-Deklaration*) INSTANZ : FB 10 ;
END_VAR END_VAR
VAR_OUTPUT VAR_OUTPUT
Wert4 AT %QX4.0 : BOOL ; Wert4 AT %QX4.0 : BOOL ;
END_VAR END_VAR
(*Bausteinrumpf*) (*Bausteinrumpf*)

CAL INSTANZ (
E0 := Wert1,
E1 := Wert2,
E2 := Wer3)
LD INSTANZ.A4
ST Wert4

END_PROGRAM END_PROGRAM
32 3 Grundzüge der Programmiernorm DIN EN 61131-3

3.6.3.3 Aufruf einer Funktion FC in AWL


Gegenüber dem Aufruf von Funktionsbausteinen entfällt die Instanzbildung. Der Aufruf in der
Grafiksprache FBS ist sonst der gleiche wie bei Funktionsbausteinen, sodass auf eine erneute
Darstellung verzichtet werden kann.
Unterschiede bestehen beim Aufruf in der Textsprache AWL, da nicht der Operator CAL ver-
wendet werden darf. Der Funktionsname ist als Operator in der Anweisung anzugeben. Es sind
zwei Aufrufmethoden zu unterscheiden.
Beim „formalen Aufruf“ wird als erste Anweisung einfach der Name der aufzurufenden Funk-
tion geschrieben, gefolgt von der offenen Klammer. Danach wird je Anweisungszeile ein Ein-
gangsparameter übergeben, wie bei der obigen formalen Argumentenliste, jedoch nur für die
Funktionseingänge. Dann folgt die geschlossene Klammer, mit der die Funktion bearbeitet und
das Ergebnis im Ergebnisregister gespeichert wird. Die letzte Anweisung speichert das Aktuel-
le Ergebnis (AE) des Ergebnisregisters in der deklarierten Ausgangsvariablen.
Beim „nichtformalen Aufruf“ muss zuerst die erste der zu übergebenden Variablen des aufru-
fenden Bausteins (PRG) in das Ergebnisregister geladen werden. Dann kommt die Anweisung
mit dem Namen der Funktion als Operator, gefolgt von den restlichen zu übergebenden Vari-
ablen des aufrufenden Bausteins in richtiger Reihenfolge und durch Kommas getrennt im Ope-
randenteil. Diese Variablenwerte werden in der Reihenfolge an die Eingangsvariablen der
aufgerufenen Funktion übergeben. Deshalb muss auf die Reihenfolge genau geachtet werden.
Die Funktion FC kann dann ihr Funktionsergebnis berechnen und als Rückgabewert im Ergeb-
nisregister der CPU ablegen
Mit der letzten Anweisung (ST) wird das aktuelle Ergebnis (AE) bzw. Verknüpfungsergebnis
(VKE bei STEP 7) in der Ausgangsvariablen des Programms PRG gespeichert.

„ Beispiel 3.9: Programm PRG ruft Funktion FC auf


PROGRAM PRG PROGRAM PRG
(*Deklaration. Formaler Aufruf*) (*Deklaration: Nichtformaler Aufruf*)
VAR_INPUT VAR_INPUT
Wert1 AT %IX0.0 : BOOL ; Wert1 AT %IX0.0 : BOOL ;
Wert2 AT %IX1.0 : BOOL ; Wert2 AT %IX1.0 : BOOL ;
Wert3 AT %IX1.7 : BOOL ; Wert3 AT %IX1.7 : BOOL ;
END_VAR END_VAR
VAR_OUTPUT VAR_OUTPUT
Wert4 AT %QX4.0 : BOOL ; Wert4 AT %QX4.0 : BOOL ;
END_VAR END_VAR
(*Bausteinrumpf*) (*Bausteinrumpf*)
FC10 ( LD Wert1
E0 := Wert1, FC10 Wert2, Wert3
E1 := Wert2, ST Wert4
E2 := Wert3,
)
ST Wert4
END_PROGRAM END_PROGRAM
3.6 Programmstrukturen und Datenaustausch zwischen Bausteinen 33

„ Beispiel 3.10: Datenaustausch zwischen den Bausteinen PRG, FB und FC


Zur Veranschaulichung des Datenaustausches zwischen Bausteinen und der Übergänge bei der Pro-
grammausführung soll die Berechnung der mathematischen Funktion
ERGEBNIS = M + A * B / C
als ablauffähiges, strukturiertes Programm in AWL-Sprache beschrieben werden. In der Funktion FB 1
wird der Term A * B / C berechnet. Im Funktionsbaustein FB 1 erfolgt die Addition der Variablen M.
Das Programm PRG übernimmt die Wertevorgabe und Ergebnisablage.

Beschreibung:
1. Mit CAL INSTANZ erfolgt die Über- 2. Mit dem nichtformalen Auf- 3. Die Funktion FB 1 führt
gabe von WERT1 ... WERT4 an die ruf der Funktion FB 1 werden die Berechnung des
Eingangsvariablen X, Y, Z, W der die Werte der Variablen X, Y Terms A * B / C mit den
Instanz des FB 1. und Z der Instanz des FB 1 in Variablenwerten aus und
Anschließend wird die Programm- dieser Reihenfolge an die speichert das Funktions-
weiterführung an den aufgerufenen Eingangsvariablen A, B und ergebnis im Ergebnis-
FB 1 übergeben, der mit den Werten C des FB 1 übergeben. Die register (VKE) der CPU
seiner Instanz fortfährt. Programmfortsetzung erfolgt als Zwischenergebnis ab.
im aufgerufenen FB 1. Die Programmausfüh-
rung wird danach an den
5. Das Hauptprogramm PRG setzt die 4. Der FB 1 berechnet aus dem aufrufenden FB 1 zurück-
Programmbearbeitung mit dem Rückgabewert des FB 1 und gegeben.
Ladebefehl auf die Konstruktion der Addition der Variablen M
INSTANZ . ERGEBNIS fort. Mit seiner Instanz das Ergebnis
diesem Befehl liest das Programm und speichert es in der Aus-
PRG das ERGEBNIS aus dem gangsvariablen ERGEBNIS
Funktionsbaustein ein und speichert ab.
es in seiner Variablen „Ausgabe“ ab, Die Programmweiterführung
womit ein Berechnungszyklus abge- wird an das Hauptprogramm
schlossen ist. PRG übergeben.
34 3 Grundzüge der Programmiernorm DIN EN 61131-3

3.7 Programmiersysteme
Die DIN EN 61131-3 ist die Programmiernorm für <Speicherprogrammierbare Steuerungen>
und richtet sich in erster Linie an die Hersteller von SPS-Programmiersystemen. Für den An-
wendungsprogrammierer ist die Norm eher ein Dokument im Hintergrund, denn zur Program-
mierung benötigt er ein reales Programmiersystem. Nur durch dieses Programmiersystem wird
er normgerecht oder nicht ganz normkonform programmieren. Für die Programmausführung in
einer SPS ist dies beides unerheblich, denn jedes SPS-Programm muss in die zum SPS-
Prozessor passende Maschinensprache übersetzt werden und wird dort genau die Funktionen
ausführen, die der Programmierer mit einem fehlerfreien Programm beabsichtigt hat.
Zwei derzeit weit verbreitete Entwicklungsumgebungen für industrielle Steuerungen (SPS)
sind CoDeSys und STEP 7, zu deren Handhabung eine kurz gefasste Einführung folgt, zur
Vorbereitung auf die Programmbeispiele der nachfolgenden Kapitel. Für nicht erwähnte Ge-
sichtspunkte gelten die Ausführungen zur SPS-Norm IEC 61131-3.

3.7.1 Einführung in STEP 7


3.7.1.1 Projektstruktur mit Hardware-Projektierung
Eine vollständige STEP 7 Projektierung beginnt mit dem Aufruf einer Projektvorlage <Neues
Projekt> im SIMATIC Manager, die mit einem passenden Projektnamen für die Projektdatei
zu versehen ist. Im Prinzip besteht ein vollständiges SPS-Projekt aus einer SPS-Hardware-
Konfiguration und einem SPS-Steuerungsprogramm sowie einem Kommunikationssystem zur
Anbindung externer Steuerungsbaugruppen. Bild 3.6 zeigt die Projektstruktur eines angelegten
Projekts mit dem Namen „Foerderband“ für eine SIMATIC 300-SPS. Die Projektstruktur glie-
dert sich auf in verschiedene Ordner und Objekte. Ein Ordner ist ein Verzeichnis auf der Be-
nutzeroberfläche des SIMATIC-Managers. Objekte sind Bestandteile eines Ordners die geöff-
net und bearbeitet werden können, wobei gleichzeitig das zugehörige Tool gestartet wird. So
lässt sich der Ordner SIMATIC 300(1) öffnen, um mit Hilfe des Hardware-Konfigurationsedi-
tors den gewünschten Baugruppenaufbau durch Auswahl aus einem Hardware-Katalog in
einem symbolisierten Rack anzulegen (siehe Bild 3.6). Dabei ist auch eine CPU als programmier-
bare Baugruppe einzufügen, die anschließend in der Projektstruktur (siehe Bild 3.5) erscheint.

Bild 3.5: Struktur eines STEP 7 Projekts in der Darstellung des SIMATIC-Managers

Für reine Programmierübungen, deren Lösungen durch Simulation geprüft werden, genügt
auch eine gekürzte Projektstruktur ohne SPS-Hardware, allein mit dem S7-Programm-Ordner.
S7-Programme können in Baustein- oder Quellenform erzeugt werden. Quellen dienen bei der
S7-Programmierung allerdings nur als Basis zur Erzeugung von Bausteinen. Es steht ein Um-
wandlungsmechanismus in jeder Richtung zur Verfügung, das sind <Quelle generieren> und
3.7 Programmiersysteme 35

<Übersetzen>. Nur Bausteine können in eine S7-CPU geladen werden. Ob beim Programmie-
ren Bausteine oder Quellen erzeugt werden, hängt von der gewählten Programmiersprache
bzw. vom verwendeten Spracheditor ab. Dabei sind zwei Eingabeverfahren zu unterscheiden:
Inkrementelle Eingabe bei AWL, FUP, KOP und S7-GRAPH: Jede Zeile bzw. jedes Element
wird nach der Eingabe sofort auf syntaktische Fehler untersucht. Fehler werden angezeigt und
müssen vor dem Abspeichern verbessert werden.
Quellorientierte Eingabe bei AWL-Quelle und SCL-Programm wird in einer Textdatei editiert
und anschließend compiliert, wobei Fehler erst bei der Übersetzung angezeigt werden. Bei
vielen Beispielen in diesem Buch sind Programmausdrucke in AWL-Quelle angegeben. In
dieser Darstellungsform sind AWL-Programme in STEP 7 auch normgerecht.
Bild 3.6:
Hardware-Projektierung
einer S7-300 SPS im
HW-Konfig-Editor:
PS = Power Supply
CPU = Zentralbaugruppe
DI = 16 Digitaleingänge
DO = 16 Digitalausgänge
CP = Kommunikations-
prozessor für Profibus

Adressbereiche:
Eingänge E 0.0 bis E 1.7
Ausgänge A 4.0 bis A 5.7

3.7.1.2 Bausteintypen
STEP 7 hat eine andere Bausteinsystematik als die Norm IEC 61131-3. Es sind Organisations-
und Datenbausteine vorhanden und einige Besonderheiten bei FBs und FCs zu beachten.
Bausteine in STEP 7
Code-Bausteintypen Datenbausteintypen
(Programm) (Daten)

Organisationsbaustein Funktionsbaustein Funktion Instanz-DB Global-DB


OB FB (SFB) FC (SFC) DB DB

gehören zusammen
36 3 Grundzüge der Programmiernorm DIN EN 61131-3

Organisationsbausteine: Die in der SPS-Norm DIN EN 61131-3 vorgesehenen Tasks werden


bei STEP 7 in Form von Organisationsbausteinen (OBs) zur Verfügung gestellt. Sie stellen die
Schnittstelle zwischen Betriebssystem und Anwenderprogramm dar.

Bild 3.7: Organisationsbausteine und ihre Prioritäten (1 = niedrigste, 29 = höchste Priorität)

Aufruf: Organisationsbausteine können nicht von anderen Bausteinen aufgerufen werden, son-
dern nur durch das Betriebssystem bei Eintreten bestimmter Situationen, die sofort eine Unter-
brechung des sonst endlos ausgeführten OB 1 veranlassen. Der OB 1 organisiert durch den
Aufruf anderer Code-Bausteine (FBs, FCs) das zyklische Programm.
Priorität: Organisationsbausteine werden entsprechend der ihnen zugeordneten Priorität im
Aufruf-Fall bearbeitet (1 = niedrigste und 29 = höchste Priorität). Der OB 1 hat die niedrigste
Priorität 1. Jeder andere OB kann daher das Hauptprogramm kurzzeitig unterbrechen und sein
eigenes Programm bearbeiten.
Funktionsbausteine mit Instanz-DB: Die SPS-Norm IEC 61131-3 verlangt für den Aufruf
eines Funktionsbausteins die Deklaration einer Instanz des FB. Das wird in STEP 7 im Prinzip
auch gemacht, es heißt aber nicht so. Verlangt wird, dass jedem aufgerufenem Funktionsbau-
stein FB ein Instanz-Datenbaustein zugeordnet und mit einem Namen versehen werden muss.
Der Instanz-DB wird dann automatisch generiert, er erscheint aber nicht in der Deklarations-
tabelle, sondern im Bausteinordner. Deshalb ist der Instanz-Datenbaustein für den Program-
mierer auch direkt zugänglich, während die normgerechte FB-Instanz irgendwo im Speicher-
bereich der CPU abgelegt und verwaltet wird.
3.7 Programmiersysteme 37

Funktion mit Ausgangsvariablen: In STEP 7 ist es normal, eine Funktion mit Ausgangs-
variablen zu deklarieren, die auch verschiedene Datentypen haben dürfen. In der SPS-Norm ist
dies erst seit der 2. Ausgabe (2004) als Ergänzung zulässig. Vorherrschend ist in der Norm
jedoch die Auffassung, dass eine Funktion nur ein Datenelement als Ergebnis (Rückgabewert)
liefern sollte, aber auch ein Multiwert in Form eines Feldes oder einer Struktur sein kann. In
STEP 7 ist diese Methode auch möglich, indem man in der Deklarations-Schnittstelle bei
<RETURN> für RET_VAL den Datentyp UDT (anwenderdefinierter Datentyp) markiert. Das
Anweisungsergebnis ist dann an den Ausgangsparameter <RET_VAL> zu übergeben. Soll die
Funktion ohne Funktionswert verwendet werden, ist bei <RETURN> als Ersatz für einen Da-
tentyp „VOID“ (typlos) anzugeben.
Der Code-Bausteintyp Funktion hat folgende Eigenschaften:
x Parametrierbarkeit, d. h., er verfügt über Bausteinparameter, die als Schnittstellen nach
außen zur Übergabe von Daten verwendet werden können.
x Grundsätzlich ohne Gedächtnis, also keine Speicherfähigkeit für bausteininterne Variablen
über den aktuellen Bausteinaufruf hinaus.
x Temporäre Lokaldatenverwendung, d. h., es können temporäre Variablen deklariert wer-
den, die nur bausteinintern gültig sind. Temporär bedeutet hier die Eigenschaft, dass diese
Daten nur innerhalb eines Bausteinaufrufes erhalten bleiben und deshalb nur zur Speiche-
rung von Zwischenergebnissen genutzt werden können.
Systemfunktionen: Systemfunktionsbausteine SFB und Systemfunktionen SFC sind fertige,
im Betriebssystem der CPU integrierte Code-Bausteine.
Datenbausteine: Datenbausteine sind Datenbereiche zur Speicherung von Anwenderdaten mit
denen das Anwenderprogramm arbeitet. Auf die gespeicherten Daten eines Datenbausteines
kann über Bit-, Byte-, Wort- und Doppelwortoperationen zugegriffen werden. Der Zugriff
kann symbolisch oder absolut erfolgen. Man unterscheidet zwei Arten von Datenbausteinen:
Global-Datenbausteine enthalten z. B. Tabellenwerte, auf die von allen Code-Bausteinen aus
zugegriffen werden kann. Global-DBs müssen vom Anwender programmiert werden.
Instanz-Datenbausteine sind, wie bereits erwähnt, Funktionsbausteinen FB fest zugeordnet. In
den Instanz-DBs stehen die Daten der statischen Lokalvariablen und Ausgangsvariablen des
aufgerufenen FBs. Für jeden Aufruf eines Funktionsbausteines ist ein eigener Instanz-DB
durch Bestätigung der Anfrage anzulegen.
Bausteinaufrufe in AWL mit CALL: In STEP 7-AWL werden sowohl Funktionsbausteine
als auch Funktionen mit dem Befehl <CALL> ohne runde Klammern und ohne Semikolons an
den Zeilenenden aufgerufen. Nach IEC 61131-3 ist der Befehl <CAL> mit Argumenten in
runden Klammern sowie Semikolons nur für Aufrufe von Funktionsbausteinen zu verwenden.
Funktionsbaustein FB: Funktion FC:
CALL FB 1, DB1 CALL FC 1
A := E 0.0 X := E 0.0
B := 1.000000e+001 Y := A 2.0
C := AW 4 Z := AW 6

Globale Symbole: In der Symboltabelle können für Eingänge, Ausgänge, Merker, Zeitglieder,
Zähler, Datenbausteine u. a., die alle ohne Deklaration in STEP 7 Programmen bekannt sind,
auch globale Symbole vereinbart werden. Nicht möglich ist die Deklaration globaler Variablen
im Sinne der SPS-Norm. Ersatzweise lassen sich temporäre Variablen im OB 1 bilden.
38 3 Grundzüge der Programmiernorm DIN EN 61131-3

3.7.1.3 Programmstrukturen und Bausteinauswahl


Bausteine können andere Bausteine aufrufen, es kann eine Verkettung gebildet werden. Jeder
Aufruf verursacht einen Wechsel des Programmablaufs zum aufgerufenen Baustein. Das
nachfolgende Bild zeigt den typischen Ablauf bei Aufrufvorgängen.
Aufgabenverteilung für Bausteine: Kriterien der Bausteinauswahl:
Funktion FC
FCs sind parametrierbare Programm-
bausteine ohne eigenen Datenbereich.
FCs genügen, wenn keine interne
Speicherfunktion nötig ist oder die
Speicherung einer Variablen nach au-
ßen verlagert werden kann.
Funktionsbaustein FB
FBs sind parametrierbare Programm-
bausteine, denen beim Aufruf ein
eigener Speicherbereich (Instanz-DB)
zugewiesen wird. FBs sind notwendig,
wenn ein speicherndes Verhalten einer
bausteininternen Variablen nötig ist.
Bild 3.8: Organisationsbaustein OB 1
System der Bausteinaufrufe sowie die Aufgabenvertei- Für zyklische Programmbearbeitung
lung der Bausteine.
der aufgerufenen FBs und FCs und der
Ereignisgesteuerte Unterbrechungen des zyklisch arbei-
tenden Hauptprogramms OB 1 dienen z. B. einer vor- Beschaltung der Bausteinparameter
rangigen Alarmbearbeitung. mit SPS-Operanden (E-/A-Adressen,
Die Unterprogramme in den FB- und FC-Bausteinen Zeitglieder, Zähler) sowie zur Parame-
enthalten die Steuerungslogik, im OB 1 erfolgt die Zu- terübergabe zwischen aufgerufenen
weisung ihrer SPS-Operanden und temporärer Variablen. Bausteinen.

3.7.1.4 Deklarations-Schnittstelle

Deklaration IN: Ein Eingangsparameter ist eine Eingangsvariable und kann innerhalb des
Code-Bausteins (FB und FC) nur abgefragt werden.
Deklaration OUT: Ein Ausgangsparameter ist eine Ausgangsvariable und soll innerhalb des
Code-Bausteins (FB und FC) nur beschrieben werden.
Deklaration IN_OUT: Ein Durchgangsparameter ist eine Durchgangsvariable und kann innerhalb
des Code-Bausteins (FB und FC) abgefragt und beschrieben werden.
Deklaration STAT: Eine interne Zustandsvariable ist zum Abspeichern von Daten über den
(*nur bei FBs*) Zyklus einer Bausteinbearbeitung hinaus vorgesehen (Gedächtnisfunktion).
Eine solche Variable heißt statische Lokalvariable, sie kann nur in einem
Funktionsbaustein FB deklariert werden.
Deklaration TEMP: Eine interne temporäre Variable dient zum Zwischenspeichern von Ergeb-
nissen innerhalb eines Zyklus der Bausteinbearbeitung und zur Datenüber-
gabe zwischen den im OB 1 aufgerufenen Bausteinen. Sie heißen temporäre
Lokalvariablen und sind deklarierbar in FB- und FC-Bausteinen.
Deklaration RETURN Beinhaltet den Rückgabewert (RET_VAL) einer Funktion FC.
(*nur bei FCs*)
3.7 Programmiersysteme 39

3.7.1.5 Deklarationsbeispiel für eine Funktion FC 1


Um einen FC-Baustein an-
zulegen, wird das Objekt
Bausteine im SIMATIC
Manager markiert und mit
Einfügen/S7-Baustein auf
Funktion geklickt.

Deklarationsbereich

Programmbereich
hier für Funktionsplan-
eingabe, Umschalten auf
AWL bei Ansicht

Zur Deklaration von Eingangsparametern wird der Deklarationstyp IN markiert. Im sich


öffnenden Eingabebereich sind für jeden Parameter ein Name und der erforderliche Datentyp
einzugeben:
Darstellung für einen
einzelnen Eingangs-
Parameter IN:
Start mit Datentyp Bool

Bei ihrer Verwendung im


Programm erhalten lokale
Variablen das Zeichen #
vorgesetzt.

Die Liste der Eingangs-Parameter kann erweitert werden. Zur Deklaration von Ausgangs-Para-
metern wird der Deklarationstyp OUT markiert und entsprechend verfahren.
Beim Aufruf des Bausteins FC 1 in Funktionsplandarstellung im OB 1 erscheinen die dekla-
rierten Eingangs- und Ausgangs-Parameter innerhalb des Bausteins auf der linken bzw. rech-
ten Seite und können mit entsprechenden SPS-Operanden versorgt werden.
40 3 Grundzüge der Programmiernorm DIN EN 61131-3

3.7.1.6 Deklarationsbeispiel für einen Funktionsbaustein FB 1


Zur Deklaration einer bausteininternen Zustandsvariablen oder Speichervariablen (in STEP 7
als „Statische Lokaldaten“ bezeichnet) wird der Deklarationstyp STAT markiert. Im sich öff-
nenden Eingabebereich ist für jede Variable ein Name und der erforderliche Datentyp ein-
zugeben. Zusätzlich kann unter „Anfangswert“ ein bestimmter Wert eingetragen werden.
Darstellung einer einzelnen
Speichervariablen:

Bei jedem Aufruf eines


Funktionsbausteins FB im
OB 1 ist ein so genannter
Instanz-Datenbaustein an-
zulegen. Die Adresse in der
nebenstehenden Deklarati-
ons-tabelle (hier 0.0) wird
automatisch vergeben. Sie
entspricht der Adresse der
Variablen im Instanz-DB.

#SRO = Schrittoperand

3.7.1.7 Parametertypen als Ergänzung zu Datentypen


Neben den elementaren und anwenderdefinierten Datentypen wie in der SPS-Norm gibt es in
STEP 7 noch die <Parametertypen> als besondere Datentypen für Eingangsvariablen, wenn
diese mit den Datentypen TIMER, COUNTER, BLOCK, POINTER oder ANY deklariert
werden, wie nachfolgendes Bild zeigt. Eine solche Deklarationsart hat den Vorteil, dass das
Bausteinprogramm frei bleibt von Festlegungen, weil erst beim Aufruf des Baustein die Ein-
gangsvariable mit dem aktuellen Parameterwert versorgt wird, also welches Zeitglied, welcher
Zähler, welcher Baustein, welche Adresse oder welcher Datentyp zu verwenden ist.
Ein Baustein-Eingang mit Pa-
rametertyp TIMER erwartet
ein Zeitglied.
Entsprechendes gilt für
Ein-gänge mit Parametertyp
COUNTER und BLOCK.
Ein Eingang mit Parametertyp
POINTER erwartet die Anga-
be einer Adresse anstelle eines
Wertes. Unter der Adresse ist
der Wert zu finden, z. B.
P # DB10.DBX1.7, Wert in
Global-DB10, Datenbit 1.7.
Parametertyp ANY, wenn der
Datentyp des Bereichs auf den
zu zeigen ist, beliebig sein
darf, z. B. INT.
3.7 Programmiersysteme 41

3.7.1.8 IEC-Bibliotheken
In den STEP 7 Bibliotheken lassen sich in der Standard Library bei <System Function Blocks>
die IEC-Zähler und IEC-Zeitglieder finden. Die Einbindung dieser Funktionsbausteine erfolgt
in FUP-Darstellung mit ihren Symbolen und in Anweisungsliste AWL mit den Siemens-
Bausteinaufruf <CALL>. Für diese FBs müssen Instanz-Datenbausteine gebildet werden.
3.7.1.9 Programmtest durch Simulation (PLCSIM)
Zum Testen eines STEP 7 Programms kann eine S7-SPS durch Simulation mit PLCSIM ersetzt
werden. Dazu kann in folgenden Schritten vorgegangen werden:
1. In der Menüleiste des SIMATIC Managers <Simulation ein/aus> anklicken, es öffnet sich
S7-PLCSIM und zeigt eine CPU im Betriebszustand STOP.

2. Signaleingänge einfügen: Menü Einfügen > Eingang, es erscheint EB 0, ggf. abändern.


3. Signalausgänge einfügen: Menü Einfügen > Ausgang, es erscheint AB 0, ggf. abändern.
4. S7-PLCSIM-Fenster minimieren, den Baustein OB 1 im SIMATIC Manager markieren
und in die Simulations-CPU durch Anklicken des Ikons „Laden“ übertragen.
5. S7-PLCSIM-Fenster aus der Taskleiste zurückholen und CPU durch Anklicken von
„RUN-P“ starten. Anzeige schaltet auf „RUN“.
6. Programmtest durchführen durch Anklicken der verwendeten Eingänge (Häkchen setzen)
und Beobachten der Ausgänge. Ein aktivierter Ausgang zeigt ein Häkchen an.
42 3 Grundzüge der Programmiernorm DIN EN 61131-3

3.7.2 Einführung in CoDeSys


CoDeSys ist die Abkürzung für Controller Development System und ist zwar noch nicht so
weit verbreitet wie STEP 7, hat aber speziell für Ausbildung und Studium den großen Vorteil,
dass es als Programmiersystem kostenlos zu beziehen und zu den Vorgaben der IEC 61131-3
konform ist. Daher lässt sich hier die kleine Einführung in CoDeSys kurz fassen, weil die
meisten Details bereits im laufenden Kapitel dargestellt sind. Die Ausführungen beziehen sich
auf die weit verbreitete Version CoDeSys V2.3.

3.7.2.1 Projektstruktur
Das Programmiersystem wird über Start Æ Programme Æ 3S Software Æ CoDeSys V2.3
Æ CoDeSys V2.3 gestartet. Mit Datei/Neu wird ein neues Projekt begonnen. Zuerst müssen
die Zielsystem Einstellungen für eine Steuerung ausgewählt werden. Da CoDeSys nicht von
vornherein auf eine spezielle Hardware-SPS ausgerichtet ist, muss in der auf dem Bildschirm
erscheinenden Combobox eine Auswahl getroffen werden. Im einfachsten Fall verwendet man
CoDeSys als Soft-SPS auf dem eigenen PC und markiert <3S CoDeSys SP PLCWinNT>. Zum
Betrieb auf einer Hardware-SPS müsste ein zugehöriges Laufzeitsystem installiert sein und in
den Zielsystem Einstellungen ausgewählt werden. Die Auswahl <None> entspricht der Ein-
stellung für den Simulationsmodus in CoDeSys.

In der Folge wird der erste Baustein, der im neuen Projekt anzulegen ist, von CoDeSys vorge-
schlagen und trägt automatisch den Namen PLC_PRG. Dort startet die zyklische Programm-
ausführung und von hier aus können Funktionsblöcke FB und Funktionen FC aufgerufen wer-
den. Der Baustein PLC_PRG wird bei CoDeSys im laufenden Betrieb vom Laufzeitsystem
abgerufen und abgearbeitet, ist also vergleichbar mit dem OB 1 bei STEP 7.

Ausgewählt werden kann eine Programmiersprache. Zur Auswahl stehen die fünf in der SPS-
Norm vorgesehen Sprachen und CFC (Continuous Function Chart). CFC arbeitet nicht mit
Netzwerken wie der Funktionsplan FUP, sondern mit frei platzierbaren Elementen, deren An-
schlüsse sich verbinden lassen. Dadurch sind auch Rückführungen möglich.
3.7 Programmiersysteme 43

Das Projekt kann nun mit einem Namen versehen und gespeichert werden. Die Datei trägt den
Namen des Projekts.

Deklarationen

Programm

Object Organizer

Zu einem CoDeSys Projekt gehören verschiedene Arten von Objekten, die im nachfolgenden
Bild als Registerkarten im Object Organizer zu sehen sind.

Programm

Fehlermeldungen,
Warnungen

Bausteine Datentypen Visualisierungen Ressourcen Registerkarten

3.7.2.2 Bibliotheken
Zu CoDeSys gehört eine Standardbibliothek (Standard.LIB), die alle von der IEC 61131-3
geforderten Funktionsbausteine enthält. Diese betreffen:
x Bistabile Elemente,
x Zähler,
x Zeitgeber und
x Flankenerkennung.
44 3 Grundzüge der Programmiernorm DIN EN 61131-3

Die Einbindung dieser Elemente in Projekt-Bausteine ist entsprechend der gewählten Pro-
grammiersprache in grafischer oder textueller Form möglich.
Die Bibliothek Standard.LIB ist jedoch nur verfügbar, wenn sie über den Bibliotheksverwalter,
den man unter Ressource im Object Organizer findet, in das Projekt eingebunden wird.
Bibliotheksverwalter

Dieses Feld mit der rech-


ten Maustaste anklicken
und <Weitere Bibliothek>
markieren. Danach kann
die Standard.LIB ausge-
wählt werden.

Die Stringfunktionen sind


auf der Behandlung von
Zeichenfolgen anzuwen-
den und werden in der
IEC 61131-3 unter den
Standardfunktionen ange-
führt.

Die in der SPS-Norm ebenfalls aufgeführten <Standardfunktionen> sind bei CoDeSys bereits
im Programmiersystem fest eingebunden und daher für alle Projekte unmittelbar verfügbar.
Dabei handelt es sich hauptsächlich um:
x Bitverknüpfungs- und Bitfolgefunktionen,
x Auswahl- und Vergleichsfunktionen,
x Arithmetische- und nummerische Funktionen,
x Typumwandlungen,
x Funktionen für Zeichenfolgen.
Für grafische Sprachen sind die IEC-Standardfunktionen als <FUP-Operatoren> verfügbar. In
textuellen Sprachen werden sie als AWL-Operatoren bzw. ST-Operatoren bezeichnet und
aufgelistet.
Das Zugangsverfahren zu den Elementen der Standard.LIB und der Standardfunktionen ist bei
CoDeSys davon abhängig, ob das Anwenderprogramm in einer Text- oder Grafik-Sprache
erstellt wird.
Für die Textsprachen Anweisungsliste (AWL) und Strukturierter Text (ST) erfolgt der Zugang
über die Menüleiste bei <Einfügen> unter <Operator> für die IEC-Standardfunktionen oder
unter <Funktionsblock> für die IEC-Standard-Funktionsbausteine, wie im nachfolgenden Bild
veranschaulicht wird.
3.7 Programmiersysteme 45

Zur Eingabehilfe für textuelle Sprachen (AWL, ST)

IEC-Standardfunktionen
(AWL-Operatoren)
IEC-Standard-Funktions-
bausteine

Hier wird eingefügt.

Zu den Standard-Funktionsbausteinen und Standardfunktionen für grafische Sprachen gelangt


man mit der Funktionstaste F2, nachdem zuvor über die Menüleiste unter <Einfügen> ein
<Baustein> in anfänglicher Form eines <AND> in den Bausteinrumpf eingefügt wurde.
IEC-Standard-Funktionsbausteine
46 3 Grundzüge der Programmiernorm DIN EN 61131-3

IEC-Standardfunktionen (FUP-Operatoren)

Die bei den IEC-Standardfunktionen schon erwähnten Typumwandlungen sind in der Eingabe-
hilfe unter <Konvertierungen> zu finden. In STEP 7 sind solche Typumwandlungen standard-
mäßig nicht vorhanden. Im Programmierteil des Lehrbuches werden aber wichtige Typum-
wandlungen beispielhaft für die eigene Bausteinbibliothek entwickelt.
Typumwandlungen

Benutzerdefinierte Bibliotheken
Es ist in CoDeSys auch möglich eine eigene Bibliothek mit selbsterzeugten FC- und FB-
Bausteinen anzulegen, um sie in anderen Projekten wieder verwenden zu können. Dazu spei-
chert man das Projekt mit den wieder verwendbaren Bausteinen unter dem Projektnamen mit
der Standarderweiterung *.lib über <Datei> und <Speichen unter..> als Interne Bibliothek im
Verzeichnis Programme/3S Software/CoDeSys/Library ab. Von dort kann diese selbsterzeugte
Bibliothek in neue Projekte über deren Bibliotheksverwalter eingebunden werden.
3.7 Programmiersysteme 47

3.7.2.3 Programm erstellen und Projekt generieren („Alles Übersetzen“)


In der Regel werden in Anwenderprogrammen neben dem Hauptprogramm-Baustein
PLC_PRG noch weiteren Bausteine benötigt. Diese lassen sich über die Menüleiste unter
<Projekt> mit <Objekt einfügen> oder über das Kontextmenü erzeugen (rechte Maustaste im
Bereich des Object Organizers drücken).
In jedem Baustein ist eine Deklaration der lokalen Variablen auszuführen. Bei der Programm-
erstellung in den Bausteinrümpfen ist es u.U. ratsam, die Programmiersprache AWL zu ver-
meiden und den Funktionsplan FUP zu bevorzugen. AWL setzt trotz der zuvor beschriebenen
<Eingabehilfe> tiefere Befehlskenntnisse und höchste Ausführungsgenauigkeit in der Notation
voraus. Jeder formale Fehler führt nicht sofort, sondern erst später beim <Übersetzen> zu einer
Fehlermeldung.
Abweichend von der SPS-Norm unterstützt CoDeSys in der Programmiersprache AWL nur
den nichtformalen Funktionsaufruf, wie er im nachfolgenden Bild im FB 1 noch einmal darge-
stellt ist. Der in der IEC 61131-3 angegebene formale Funktionsaufruf mit der eingeklammer-
ten Argumentenliste ist nicht verfügbar.
Der formale Aufruf einer Funktionsbaustein-Instanz mit dem CAL-Befehl und der in Klam-
mern stehenden Argumentenliste ist bei CoDeSys möglich, wie im Bild unten im Baustein
PLC_PRG gezeigt wird.

Ob es gelungen ist, ein Programm frei von formalen Fehler zu erstellen, zeigt sich erst, wenn
in der Menüleiste bei <Projekt> auf <Alles Übersetzen> geklickt wird. Im Meldefeld werden
eventuelle Fehler rot angezeigt und Fehlerhinweise gegeben, die allerdings auf Grund von
Fehlerfortpflanzungen irreführend sein können. Es ist daher ratsam, auch schon Programmteile
durch <Übersetzen> prüfen zu lassen.
48 3 Grundzüge der Programmiernorm DIN EN 61131-3

3.7.2.4 Simulation
Bei der Simulation wird das Anwenderprogramm nicht auf einer Hardware-SPS, sondern auf
dem PC, auf dem auch CoDeSys läuft, abgearbeitet. Damit ist es möglich, die logische Kor-
rektheit des Programms ohne Steuerungs-Hardware zu testen, allerdings erst dann, wenn zuvor
für das Steuerungsprogramm 0 Fehler und möglichst auch 0 Warnungen angezeigt wurden.
Im CoDeSys Menü kann unter <Online> der Simulationsmodus gewählt werden, der auch
schon zu Projektbeginn bei <Zielsystem Einstellung> durch die Konfiguration <None> vor-
eingestellt sein kann. Mit dem Befehl <Einloggen> verbindet sich das Programmiersystem mit
dem Simulationsprogramm und wechselt in den Online-Modus (siehe Statuszeile rechts unten).
Enthält das Programm PLC_PRG eine FB-Instanz, dann muss für die Ergebnisanzeige noch
<Instanz öffnen> über das Kontextmenü mit der rechten Maustaste eingegeben werden.
Programmdarstellung:

Simulationsdarstellung:

Werte schreiben:
Der Befehl <Werte schreiben> ermöglicht den Programmtest mit verschieden Werten, hier für
die Variable <Zeiger>. Nach Eingabe von <2> ist noch <Werte schreiben> zu bestätigen. Es
wird dann der Wert =143 angezeigt. Zuvor war natürlich eine Programmabänderung nötig auf:
CAL Instanz (Zeiger:= ). Die Rückkehr in den Offline-Modus erfolgt durch <Ausloggen>.
3.8 Exkurs: Zahlendarstellung 49

3.8 Exkurs: Zahlendarstellung


3.8.1 Grundlagen des Dualzahlensystems
Im Dualzahlensystem kann man im Prinzip genauso zählen wie im Dezimalzahlensystem,
jedoch:
x Es sind nur die Ziffern 0 und 1 verfügbar.
x Ein Übertrag in die nächst höhere Stelle erfolgt schon beim Überschreiten der Zahl 1.
Zählt man auf diese Art und Weise, so entsteht eine Folge von Dualzahlen.
000 001 010 011 100 101 110 111 usw.
+ 001 001 001 001 001 001 001 001
1 11 1 111 Übertrag
dual 001 010 011 100 101 110 111 1000
dezimal 1 2 3 4 5 6 7 8
Kennzeichen der dualen Zahlendarstellung ist es, dass die aufsteigenden Stellenwerte Potenzen
der Basis 2 sind. Ein Dual-Zahlwort wird dargestellt durch die Summe aller vorkommenden
Produkte Z i ˜ 2 i mit von rechts nach links ansteigenden Potenzwerten.
Zahlenbeispiel: Dualzahl
Wie heißt der Zahlenwert für das Dual-Zahlwort 100011?
Dual-Zahlwort = Z5 Z4 Z3 Z2 Z1 Z0
= 1˜ 2  0 ˜ 2  0 ˜ 2  0 ˜ 2  1˜ 2  1˜ 2 0
5 4 3 2 1

Zahlenwert = 32 + 0 + 0 + 0 + 2 + 1 = 35
Der darstellbare Zahlenumfang ist abhängig von der Wortlänge der Dualzahlen:
1. Dualzahlen im Format 4 Bit 2. Dualzahlen im Format 8 Bit = 1 Byte

dezimal dual dezimal dual


0 0000 0 00000000
1 0001
2 0010
3 0011 255 11111111
4 0100
5 0101 Zahlengrenze bei 28–1 = 255
6 0110
7 0111
8 1000
9 1001 3. Dualzahlen im Format 16 Bit = 1 Wort
10 1010
11 1011 dezimal dual
12 1100
0 00000000 00000000
13 1101
14 1110
15 1111
65535 11111111 11111111

Zahlengrenze bei 24–1 = 15 Zahlengrenze bei 216–1 = 65535


50 3 Grundzüge der Programmiernorm DIN EN 61131-3

3.8.2 Zweierkomplement
Die Zweierkomplement-Methode ist ein besonderes Verfahren zur Darstellung negativer Zah-
len im Dualzahlensystem. Die Grundidee besteht darin, eine negative Zahl so zu notieren, dass
sie in Addition mit der betragsgleichen positiven Zahl null ergibt.
dezimal dual
(+7) 00000111
+(–7) +????????? Wie muss diese negative Zahl dargestellt werden?
0 00000000
Für die Zweierkomplement-Arithmetik gelten folgende Regeln:
Regel 1: Das höchstwertige Bit kennzeichnet das Vorzeichen der Dualzahl.
VZ-Bit 0 ˆ positive Zahl
VZ-Bit 1 ˆ negative Zahl
Regel 2: Positive Dualzahlen werden entsprechend dem Dualcode notiert. Die größte dar-
stellbare positive Zahl ist erreicht, wenn alle nachrangigen Stellenwertigkeiten mit
Einsen besetzt sind, z. B. für 8 Bit-Zahlen die Zahl 0111 1111 ( ˆ +127):
Bit 7(VZ) 0

Tabellen- 0111 1111 = Zahlenwert +127


auszug 0111 1110 = Zahlenwert +126

= Zahlenwert +1
0000 0001 = Zahlenwert 0
0000 0000
Regel 3: Negative Dualzahlen werden entsprechend ihrem Zweierkomplement notiert. Die
größte darstellbare negative Zahl ist erreicht, wenn alle nachrangigen Stellenwertig-
keiten mit Nullen besetzt sind, z. B. für 8-Bit-Zahlen die Zahl 1000 0000 ( ˆ –128):
Bit 7(VZ) 0

Tabellen- 0000 0000 = Zahlenwert 0


auszug 1111 1111 = Zahlenwert –1

= Zahlenwert –127
1000 0001
= Zahlenwert –128
1000 0000

Erklärung des Zweierkomplements


Das Zweierkomplement Y* ist eine Ergänzung einer n-stelligen Dualzahl Y zur Höchstzahl 2n.
Y* = 2n – Y
Die Ermittlung der Ergänzungszahl Y* kann durch echte Subtraktion oder durch Anwendung
einer Regel erfolgen. Die Regel lautet:
Y* = Y  1 Y = alle Stellen der Zahl Y invertieren (= Einerkomplement)
Die Ergänzungszahl Y* hat die besondere Eigenschaft, dass
Y + Y* = 0 mit Übertrag = 1 ist.
3.8 Exkurs: Zahlendarstellung 51

Die nachstehende Tabelle zeigt die Darstellung positiver und negativer Zahlenwerte im Dual-
zahlensystem für 4-stellige Dualzahlen:

Dezimalzahlen 0 +1 +2 +3 +4 +5 +6 +7
Dualzahlen 0000 0001 0010 0011 0100 0101 0110 0111

Dezimalzahlen –8 –7 –6 –5 –4 –3 –2 –1
Dualzahlen 1000 1001 1010 1011 1100 1101 1110 1111

Zahlenbeispiel: Zweierkomplement
Es sind die Bitmuster zur Darstellung der Zahlenwerte +7 und –7 für eine 8-stellige Dualzahl
gesucht.
Lösung:
Dualzahl Y = 0000 0111 = +7 dezimal
Y*= 1111 1001 = –7 dezimal
ermittelt
durch

Rechnung Regel Y* = Y  1
1 0000 0000 Y 0000 0111
– 0000 0111 Y 1111 1000 Invertierung
Entlehnung 1 1111 111 +1 Addition +1
1111 1001 Y* 1111 1001
Die Anwendung der Regel ist der
günstigere Weg für den Computer.
Wir probieren, ob Y* = Y  1 = 0 mit Übertrag = 1 ist.
+7 = 0000 0111
(–7) = + 1111 1001
1 1111 111 Übertrag
1 0000 0000

Übertrag entfällt, da er außerhalb des Wortformats liegt.


Zahlenbeispiel: Bitmusterdarstellung negativer Zahlen
Wie lautet die Zweierkomplement-Darstellung der Zahl –52 (dezimal) in Bytedarstellung und
Wortdarstellung?
Bytedarstellung: +52 = 00110100
11001011 Einerkomplement
+1
–52 = 11001100 Zweierkomplement

Wortdarstellung: +52 = 00000000 00110100


11111111 11001011 Einerkomplement
+1
–52 = 11111111 11001100 Zweierkomplement
52 3 Grundzüge der Programmiernorm DIN EN 61131-3

3.8.3 Zahlenformate
3.8.3.1 Ganzzahlen
Ganzzahlen sind ganze, mit Vorzeichen versehene Dualzahlen.
Man unterscheidet:
x Ganzzahlen mit dem Datentyp INTEGER (INT) und einer Bitkettenlänge von 16 Bits =
1 Wort, wobei das Bit Nr. 15 das Vorzeichen VZ enthält.
Bit 15 14 0
VZ 214 20
MSB LSB
Der Zahlenbereich liegt zwischen:
Z max (215  1) 32 767
positiver Zahlenbereich
0
–1
negativer Zahlenbereich
Z min  (215 )  32 768

x Ganzzahlen mit dem Datentyp DOPPELINTEGER (DINT) und einer Bitkettenlänge von
32 Bits = 1 Doppelwort = 2 Worte, wobei das Bit Nr. 31 das Vorzeichen VZ enthält.
Bit 31 30 16 15 0
31 16 15
VZ 2 2 2 20
MSB LSB
Der Zahlenbereich liegt zwischen
Z max (231  1) 2147 483 647
positiver Zahlenbereich
0
–1
negativer Zahlenbereich
Z min  (231 )  2147 483 648

Die Vorzeichenregeln für INT und DINT lauten:


VZ: „0“ = positive Zahl
VZ: „1“ = negative Zahl in Zweierkomplementdarstellung
Weitere Bezeichnungen an den Bitketten lauten:
MSB = Most Significant Bit (höchstwertigstes Bit)
LSB = Least Significant Bit (niedrigwertigstes Bit)

Merkregeln zum „Lesen“ von Ganzzahlen:


1. Positive Ganzzahl
Höchster Stellenwert gleich „0“ bedeutet positive Zahl. Der Betrag der Zahl ist gleich der
Summe aller Stellenwerte, die den Signalzustand „1“ führen.
Bitmuster der Ganzzahl 00000000 00101100
Zahlenwert der Ganzzahl +(32+8+4) = +44
3.8 Exkurs: Zahlendarstellung 53

2. Negative Ganzzahl
Höchster Stellenwert gleich „1“ bedeutet negative Zahl. Der Betrag der Zahl ist gleich der
Summe aller Stellenwerte, die den Signalzustand „0“ führen, vermehrt um + 1.
Bitmuster der Ganzzahl 11111111 11010100
Zahlenwert der Ganzzahl –[(32+8+2+1)+1] = – 44

3.8.3.2 Gleitpunktzahlen nach IEEE


Gleitpunktzahlen sind gebrochene, mit einem Vorzeichen versehene Zahlen und haben den
Datentyp REAL. Sie bestehen intern aus drei Komponenten: dem Vorzeichen VZ, dem 8-Bit-
Exponenten Exp zur Basis 2 mit einem Abzugsfaktor von 127 und einer 23-Bit-Mantisse. Die
Mantisse stellt den gebrochenen Anteil dar. Der ganzzahlige Anteil der Mantisse wird nicht
gespeichert, da er immer 1 ist (bei normalisierten Gleitpunktzahlen). Die Codierung einer
Gleitpunktzahl umfasst somit 32 Bits = 1 Doppelwort.

Bit 31 30 23 22 0
VZ 27 20 2–1 2–23
Exponent Mantisse

Wert (VZ) ˜ (1.Mantisse) ˜ (2(Exp–127) ) VZ: „0“ = positive Zahl


VZ: „1“ = negative Zahl

Obwohl betragsmäßig kein Unterschied zwischen den Zahlen 3 und 3.0 besteht, liegen voll-
kommen verschiedene Zahlenformate vor. Die Zahl 3 ist eine Ganzzahl mit dem Datentyp
INTEGER und die Zahl 3.0 ist eine Gleitpunktzahl mit dem Datentyp REAL. Man darf die
beiden Zahlen auch nicht addieren, ohne den Datentyp einer Zahlen umzuwandeln.

Zahlenbeispiel
Wie lautet der Zahlenwert, wenn die Bitmuster-Darstellung einer Gleitpunktzahl wie folgt
gegeben ist?
VZ
P
0 0111111

01000000
 00000000
00000000

Exponent Mantisse

Lösung
VZ = 0 bedeutet Vorzeichen +
Exponent: 01111110 bedeutet Exp =126
Mantisse: Bit 22 = 1 bedeutet, dass dieser Stellenwert 2–1 = 0,5 zählt,
die anderen Stellenwerte zählen nicht, da Null.

Ergebnis: Wert (VZ) ˜ (1, Mantisse) ˜ (2(Exp–127) )


Wert = ( + ) . (1,5) (2(126–127)) = + 1,5 . 0,5
Wert = +0,75
54 3 Grundzüge der Programmiernorm DIN EN 61131-3

3.8.3.3 BCD-Zahlen

x Grundlagen
Um den dezimalen Wert einer Dualzahl zu erfassen, ist man besonders bei großen Zahlen auf
umständliche Berechnungen oder die Benutzung des Taschenrechners angewiesen.
Eine geschicktere Methode der Zahlendarstellung besteht darin, ein Binärwort so aufzubauen,
dass man den dezimalen Wert ziffernweise ablesen kann. Bei der nachfolgend beschriebenen
Zahlendarstellung wird unterstellt, dass man die Dualzahlen von 0000 ... 1111 direkt lesen und
verstehen kann.
Binär-codierte Dezimalzahlen werden abgekürzt als BCD-Zahlen bezeichnet. Eine vorliegende
Dezimalzahl wird ziffernweise codiert, wobei nur der binäre Zeichenvorrat (0, 1) verwendet
wird. Für die Darstellung der 10 Dezimalziffern werden mindestens 4 Binärstellen (1 Tetrade)
benötigt.
Es gibt mehrere BCD-Codes, der bekannteste ist der BCD-8421-Code. Die Ziffernfolge 8421
benennt die Stellenwertigkeit der Binärstellen innerhalb einer Tetrade. Nachfolgend werden
Zahlen, die im BCD-8421-Code codiert sind, auch einfach als BCD-Zahlen bezeichnet.

Tabelle 3.3: BCD-Zahlen für 1 Dezimalstelle

Dezimalzahlen BCD-8421-Zahlen
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
1010
1011
Nicht verwendete Kombinationen 1100
(so genannte Pseudotetraden) 1101
1110
1111

Mit 4 Tetraden = 16 Bit lässt sich ein Zahlenumfang von 0 bis 104 – 1 = 9999 darstellen.

Zahlenbeispiel: BCD-codierte Zahl schreiben


Die Darstellung des dezimalen Wertes 7254 im BCD-Code ergibt:
7 2 5 4 dezimal
0111 0010 0101 0100 BCD-Zahl
3.8 Exkurs: Zahlendarstellung 55

Zahlenbeispiel: BCD-codierte Zahl lesen


Wie lautet der dezimale Zahlenwert der gegeben BCD-codierten Zahl?
1001 0011 1000 0110 BCD-codiert
9 3 8 6 dezimal

Zahlenbeispiel: Ziffernanzeige
Eine BCD-codierte Ziffernanzeige zeigt die Zahl 80 an.
a) Welches Bitmuster weist das anliegende Binärwort auf?
b) Welche Zahl würde eine geeignete dual-codierte Ziffernanzeige beim gleichen Bitmuster
wie bei a) anzeigen?
c) Welches Ergebnis würden eine BCD-codierte Ziffernanzeige ausgeben, wenn sie mit dem
Bitmuster 0111 1111 angesteuert werden würden?
d) Welche Zahl würde eine geeignete dual-codierte Ziffernanzeige beim gleichen Bitmuster
wie bei c) anzeigen?

Lösung

x BCD-Zahlen in der S7-SPS


Das BCD-Zahlenformat tritt im technischen Prozessbereich bei Zahleneinstellern und Ziffern-
anzeigen auf und kommt programmintern bei der Vorgabe von Zeitwerten bei Zeitgliedern und
Zählwerten bei Zählern vor.
Weder in der SPS-Norm noch in STEP 7 existiert ein Datentyp für BCD-Zahlen. Um trotzdem
BCD-Zahlen darstellen zu können verwendet man das hexadezimale Zahlenformat und ver-
wendet nur die Ziffern 0 ... 9.
Man unterscheidet nach dem Zahlenformat 16-Bit-BCD-Zahlen und 32-Bit-BCD-Zahlen und
nach der Verwendung vorzeichenlose und vorzeichenbehaftete BCD-Zahlen.
56 3 Grundzüge der Programmiernorm DIN EN 61131-3

Eingabe einer vorzeichenlosen 16-Bit-BCD-Zahl, die auch als solche im Programm verarbeitet
wird.
Zahlenbeispiel: Dezimalzahl 1234
Im Programm als Konstante: W # 16 # 1234
Mit BCD-Zahleneinsteller:
Bitmuster: 0001 0010 0011 0100
Eingabe einer vorzeichenbehafteten 16-Bit-BCD-Zahl, die auch als solche im Programm ver-
arbeitet wird, z. B. bei der Umwandlungsfunktion 16-Bit-BCD TO INT. Diese Funktion wertet
die links außen stehende Dekade als Vorzeichenstelle und hat dann nur noch 3 Dekaden für
den Betrag:
0xxx = positiv
1xxx = negativ

Zahlenbeispiel: Dezimalzahl +234


Im Programm als Konstante: W# 16 # 0234
Mit BCD-Zahleneinsteller:
Bitmuster: = 0000 0010 0011 0100

Zahlenbeispiel: Dezimalzahl -234

Im Programm als Konstante: W # 16 # 8234


Mit BCD-Zahleneinsteller:
Bitmuster: = 1000 0010 0011 0100

3.5.3.4 Hexadezimalzahlen
x Grundlagen
Kennzeichen der Hexadezimalzahlen ist, dass die aufsteigenden Stellenwerte Potenzen der
Basis 16 sind und ein Zeichenvorrat von 16 Zeichen zur Verfügung steht. Da 16 verschiedene
einstellige Ziffern unterschieden werden müssen, reicht der Vorrat der Ziffern 0 ... 9 nicht aus
und muss durch die „Ziffern“ A ... F ergänzt werden.
Zeichenvorrat: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

Zahlenbeispiel: Hexadezimalzahl
Wie heißt die Dezimalzahl für das Hexadezimal-Zahlwort Z = 12C?
Hex-Zahlwort Z = Z2 + Z1 + Z0
Hex-Zahlwort Z 1 ˜ 16  2 ˜16  12 ˜16 0
2 1

Dezimalzahl Z = 256 + 32 + 12 = 300

Die Bedeutung der hexadezimalen Darstellung von Zahlen in der Steuerungstechnik besteht
darin, dass sie eine weitverbreitete Kurzschreibweise für Dualzahlen der Wortlänge 4, 8, 16
3.8 Exkurs: Zahlendarstellung 57

und 32 Bit sind. Das ist möglich bei Kenntnis der 1-stelligen Hexadezimalzahlen, wie sie in
der nachfolgenden Tabelle gezeigt werden.

Tabelle 3.4: 1-stellige Hexadezimalzahlen-Zahlen

Dezimalzahlen Hexadezimalzahlen Dualzahlen


0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111

Die hexadezimale Zahlendarstellung verändert nicht den mit 16 Bit erreichbaren Zahlenum-
fang des Dualsystems, sondern bringt lediglich eine strukturierte Lesart hervor, indem man
immer 4 Bit zu einer Einheit zusammenzieht und dafür die hexadezimale Ziffer setzt, begin-
nend links vom Komma.
Zahlenbeispiel: Hexzahl
Eine 16-Bit-Dualzahl wird strukturiert geschrieben 0011 1111 1100 0101,
Für jede 4-Bit-Einheit wird gemäß Tabelle eine Hex-Ziffer gesetzt: 3 F C 5
Die Darstellungsart 3FC5 ist weniger fehleranfällig als die Schreibweise der Dualzahl.

x Hexadezimalzahlen in der S7-SPS


Das Hexadezimal-Zahlenformat tritt im technischen Prozessbereich bei Zahleneinstellern und
Ziffernanzeigen auf und kommt programmintern z. B. bei so genannten Maskierungen in Ver-
bindung mit UND- bzw. ODER-Wortbefehlen zum Aus- bzw. Einblenden von Binärstellen in
Wort-Operanden vor.
Man unterscheidet nach dem Zahlenformat 16-Bit-Hex-Zahlen und 32-Bit-Hex-Zahlen. Bei
der Eingabe als Konstanten lauten die entsprechenden Ausdrücke, abweichend von der Norm,
in STEP 7
16-Bit-Hex-Zahlen: W # 16 # 0000 ... FFFF,
32-Bit-Hex-Zahlen: DW # 16 # 0000_0000 ... FFFF_FFFF.

Das könnte Ihnen auch gefallen