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 AND %IX0.1 ORN %IX0.2 ST %QX4.0 U E 0.0 U E 0.1 ON E 0.2 = A 4.0 Strukturierter Text ST (SCL bei STEP 7) %QX4.0:= %IX0.0 AND %IX0.1 OR NOT %IX0.2; A4.0:= E0.0 AND E0.1 OR NOT E0.2; Funktionsplandarstellung FBS (FUP bei STEP 7) Kontaktplandarstellung KOP

3 Grundzüge der Programmiernorm DIN EN 61131-33.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

  • Upload
    others

  • View
    3

  • Download
    5

Embed Size (px)

Citation preview

  • 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 AND %IX0.1 ORN %IX0.2 ST %QX4.0

    U E 0.0 U E 0.1 ON E 0.2 = A 4.0

    Strukturierter Text ST (SCL bei STEP 7) %QX4.0:= %IX0.0 AND %IX0.1 OR NOT %IX0.2;

    A4.0:= E0.0 AND E0.1 OR NOT E0.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: dem einleitende Schlüsselwort FUNCTION gefolgt vom Funktionsnamen, einem Doppel-

    punkt und dem Datentyp des Funktionswertes, der Konstruktion VAR_INPUT ... END VAR, mit der die Namen und Datentypen der

    Eingangsvariablen der Funktion festlegt werden, 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.

    dem Bausteinrumpf mit dem auszuführenden Programm, geschrieben in einer der unter 3.1 erwähnten oder einer weiteren Programmiersprache,

    dem abschließenden Schlüsselwort END_FUNCTION Optional können auch die beiden folgenden Konstruktionen verwendet werden: 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,

    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 (*Außenschnittstelle*) VAR_INPUT Bezeichner1 : Datentyp ; Bezeichner2 : Datentyp ; END_VAR (*Funktionsrumpf*)

    Programm

    END_FUNCTION

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

    END_FUNCTION

    FUNCTION FC 1 : BOOL (*Außenschnittstelle*)

    (*Funktionsrumpf*)

    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: das einleitende Schlüsselworte FUNCTION_BLOCK gefolgt vom Funktionsbaustein-

    namen ohne einen Datentyp, die Konstruktion VAR_INPUT ... END VAR, mit der die Namen und Datentypen der

    Eingangsvariablen des Funktionsbausteins festlegt werden, die Konstruktion VAR_OUTPUT ... END VAR, mit der die Namen und Datentypen der

    Ausgangsvariablen des Funktionsbausteins deklariert werden (mehrere Ausgangsvariablen sind zulässig),

    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,

    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,

    die Konstruktion VAR_TEMP ... END VAR zur temporären Speicherung von Variablen in Funktionsbausteinen FB und Programmen PRG,

    einen Funktionsbausteinrumpf mit dem auszuführenden Programm, 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 (*Außenschnittstelle*) VAR_INPUT Bezeichner_1: Datentyp; Bezeichner_2: Datentyp; END_VAR VAR_OUTPUT Bezeichner_3: Datentyp; END_VAR VAR Bezeichner_4: Datentyp; END_VAR (*Funktionsbausteinrumpf*) Programm

    END_FUNCTION_BLOCK

    FUNCTION_BLOCK FB 1 (*Außenschnittstelle*) VAR Start: BOOL; Reset: BOOL; END_VAR VAR_OUTPUT Ausg: BOOL; END_VAR VAR SRO_1: RS; END_VAR (*Funktionsbausteinrumpf*)

    END_FUNCTION_BLOCK

    FUNCTION_BLOCK FB 1 (*Außenschnittstelle*)

    (*Funktionsbausteinrumpf*)

    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 der Anzahl ihrer Datenelemente in Einzelelement-Variablen und Multielement-Variablen, 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. 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.

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

    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 Q M

    Speicherort Eingang Speicherort Ausgang Speicherort Merker

    X B W D

    (Einzel)-Bit-Größe Byte-(8 Bit)Größe Wort-(16 Bit)Größe Doppelwort-(32 Bit)

    Einzel-Eingänge %IX0.7 ... %IX0.0 Einzel-Ausgänge %QX0.7 ... %QX0.0 Eingangsbyte %IB0 = %IX0.7 ... %IX0.0 Ausgangsbyte %QB0 = %QX0.7 ... %QX0.0 Eingangswort %IW0 = %IB0+%IB1 Ausgangswort %QW0 = %QB0+%QB1 Eingangsdoppelwort %ID0 = %IW0+%IW1

    Beispiel 3.3: Deklaration von zwei symbolisch dargestellten Variablen und einer Konstanten

    Allgemein Ausführung in Textform

    VAR_INPUT Bezeichner1, Bezeichner2: Datentyp; END_VAR VAR CONSTANT Bezeichner: Datentyp; END_VAR

    VAR_INPUT Spg_U1, Spg_U2: INT; END_VAR VAR CONSTANT Pi: REAL := 3.14; END_VAR

    Beispiel 3.4: Deklaration einer direkt dargestellten Variablen

    Allgemein Ausführung in Textform

    VAR AT %Operand: Datentyp; END_VAR

    VAR AT %IX4.7: BOOL; 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 Bezeichner AT %Operand : Datentyp; END_VAR

    VAR Endschalter AT %IX4.7 : BOOL; 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 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 : STRUCT

    ...

    END_STRUCT END_TYPE

    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 BYTE WORD DWORD STRING Arithmetiktypen INT DINT REAL Zeittypen TIME TIME OF DAY DATE

    Boolesche Einzelbits 8-Bit-Folge oder Hex-Zahlenbereich 16-Bit-Folge oder Hex-Zahlenbereich 32-Bit-Folge oder Hex-Zahlenbereich ASCII-Zeichen

    Ganze Zahlen (Festpunktzahlen) Ganze Zahlen (Festpunktzahlen) Reelle Zahlen (Gleitpunktzahlen) Zeitdauer (IEC-Format) Uhrzeit (Tageszeit) Datum

    1 Bit

    8 Bit

    16 Bit

    32 Bit

    Bit 3)

    16 Bit

    32 Bit

    32 Bit

    32 Bit

    32 Bit

    16 Bit

    FALSE, TRUE

    (B#)16# 00...FF 1), 2) (W#)16# 0000...FFFF 1), 2) (DW#)16# 0000_0000...FFFF_FFFF 1), 2) (*variabel-lange Zeichenfolge*)

    –32768 bis +32767 L#–2147483648 bis +2147483647 Dezimalzahl mit Punkt: 341.7 oder Exponentialdarstellung: 3.417 E+02 t # 12h20m30s tod #08:36:12 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 . 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 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 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. , 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 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 mit der Konstruktion 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 (*Deklaration*) VAR_INPUT Wert1 AT %IX0.0 : BOOL ; Wert2 AT %IX1.0 : BOOL ; Wert3 AT %IX1.7 : BOOL ; END_VAR VAR INSTANZ : FB 10 ; (*Instanz-Deklaration*) END_VAR VAR_OUTPUT Wert4 AT %QX4.0 : BOOL ; END_VAR (*Bausteinrumpf*)

    END_PROGRAM

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

    CAL INSTANZ ( E0 := Wert1, E1 := Wert2, E2 := Wer3)

    LD INSTANZ.A4 ST Wert4

    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 (*Deklaration. Formaler Aufruf*) VAR_INPUT Wert1 AT %IX0.0 : BOOL ; Wert2 AT %IX1.0 : BOOL ; Wert3 AT %IX1.7 : BOOL ; END_VAR VAR_OUTPUT Wert4 AT %QX4.0 : BOOL ; END_VAR (*Bausteinrumpf*) FC10 ( E0 := Wert1, E1 := Wert2, E2 := Wert3, ) ST Wert4 END_PROGRAM

    PROGRAM PRG (*Deklaration: Nichtformaler Aufruf*) VAR_INPUT Wert1 AT %IX0.0 : BOOL ; Wert2 AT %IX1.0 : BOOL ; Wert3 AT %IX1.7 : BOOL ; END_VAR VAR_OUTPUT Wert4 AT %QX4.0 : BOOL ; END_VAR (*Bausteinrumpf*) LD Wert1 FC10 Wert2, Wert3 ST Wert4 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- gabe von WERT1 ... WERT4 an die Eingangsvariablen X, Y, Z, W der Instanz des FB 1. Anschließend wird die Programm- weiterführung an den aufgerufenen FB 1 übergeben, der mit den Werten seiner Instanz fortfährt. 5. Das Hauptprogramm PRG setzt die Programmbearbeitung mit dem Ladebefehl auf die Konstruktion INSTANZ . ERGEBNIS fort. Mit diesem Befehl liest das Programm PRG das ERGEBNIS aus dem Funktionsbaustein ein und speichert es in seiner Variablen „Ausgabe“ ab, womit ein Berechnungszyklus abge- schlossen ist.

    2. Mit dem nichtformalen Auf- ruf der Funktion FB 1 werden die Werte der Variablen X, Y und Z der Instanz des FB 1 in dieser Reihenfolge an die Eingangsvariablen A, B und C des FB 1 übergeben. Die Programmfortsetzung erfolgt im aufgerufenen FB 1. 4. Der FB 1 berechnet aus dem Rückgabewert des FB 1 und der Addition der Variablen M seiner Instanz das Ergebnis und speichert es in der Aus- gangsvariablen ERGEBNIS ab. Die Programmweiterführung wird an das Hauptprogramm PRG übergeben.

    3. Die Funktion FB 1 führt die Berechnung des Terms A * B / C mit den Variablenwerten aus und speichert das Funktions- ergebnis im Ergebnis- register (VKE) der CPU als Zwischenergebnis ab. Die Programmausfüh- rung wird danach an den aufrufenden FB 1 zurück- gegeben.

  • 34 3 Grundzüge der Programmiernorm DIN EN 61131-3

    3.7 Programmiersysteme Die DIN EN 61131-3 ist die Programmiernorm für 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 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 und

  • 3.7 Programmiersysteme 35

    . 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 für RET_VAL den Datentyp UDT (anwenderdefinierter Datentyp) markiert. Das Anweisungsergebnis ist dann an den Ausgangsparameter zu übergeben. Soll die Funktion ohne Funktionswert verwendet werden, ist bei als Ersatz für einen Da-tentyp „VOID“ (typlos) anzugeben. Der Code-Bausteintyp Funktion hat folgende Eigenschaften: Parametrierbarkeit, d. h., er verfügt über Bausteinparameter, die als Schnittstellen nach

    außen zur Übergabe von Daten verwendet werden können. Grundsätzlich ohne Gedächtnis, also keine Speicherfähigkeit für bausteininterne Variablen

    über den aktuellen Bausteinaufruf hinaus. 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 ohne runde Klammern und ohne Semikolons an den Zeilenenden aufgerufen. Nach IEC 61131-3 ist der Befehl mit Argumenten in runden Klammern sowie Semikolons nur für Aufrufe von Funktionsbausteinen zu verwenden.

    Funktionsbaustein FB: Funktion FC:

    CALL FB 1, DB1 A := E 0.0 B := 1.000000e+001 C := AW 4

    CALL FC 1 X := E 0.0 Y := A 2.0 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:

    Bild 3.8: System der Bausteinaufrufe sowie die Aufgabenvertei-lung der Bausteine. Ereignisgesteuerte Unterbrechungen des zyklisch arbei-tenden Hauptprogramms OB 1 dienen z. B. einer vor-rangigen Alarmbearbeitung. Die Unterprogramme in den FB- und FC-Bausteinen enthalten die Steuerungslogik, im OB 1 erfolgt die Zu-weisung ihrer SPS-Operanden und temporärer Variablen.

    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.

    Organisationsbaustein OB 1 Für zyklische Programmbearbeitung der aufgerufenen FBs und FCs und der Beschaltung der Bausteinparameter mit SPS-Operanden (E-/A-Adressen, Zeitglieder, Zähler) sowie zur Parame-terübergabe zwischen aufgerufenen Bausteinen.

    3.7.1.4 Deklarations-Schnittstelle

    Deklaration IN: Deklaration OUT: Deklaration IN_OUT: Deklaration STAT: (*nur bei FBs*) Deklaration TEMP: Deklaration RETURN (*nur bei FCs*)

    Ein Eingangsparameter ist eine Eingangsvariable und kann innerhalb des Code-Bausteins (FB und FC) nur abgefragt werden. Ein Ausgangsparameter ist eine Ausgangsvariable und soll innerhalb des Code-Bausteins (FB und FC) nur beschrieben werden. Ein Durchgangsparameter ist eine Durchgangsvariable und kann innerhalb des Code-Bausteins (FB und FC) abgefragt und beschrieben werden. Eine interne Zustandsvariable ist zum Abspeichern von Daten über den Zyklus einer Bausteinbearbeitung hinaus vorgesehen (Gedächtnisfunktion). Eine solche Variable heißt statische Lokalvariable, sie kann nur in einem Funktionsbaustein FB deklariert werden. 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. Beinhaltet den Rückgabewert (RET_VAL) einer Funktion FC.

  • 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 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 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 . 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 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 . Zum Betrieb auf einer Hardware-SPS müsste ein zugehöriges Laufzeitsystem installiert sein und in den Zielsystem Einstellungen ausgewählt werden. Die Auswahl 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: Bistabile Elemente, Zähler, Zeitgeber und 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 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 sind bei CoDeSys bereits im Programmiersystem fest eingebunden und daher für alle Projekte unmittelbar verfügbar. Dabei handelt es sich hauptsächlich um: Bitverknüpfungs- und Bitfolgefunktionen, Auswahl- und Vergleichsfunktionen, Arithmetische- und nummerische Funktionen, Typumwandlungen, Funktionen für Zeichenfolgen.

    Für grafische Sprachen sind die IEC-Standardfunktionen als 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 unter für die IEC-Standardfunktionen oder unter 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 ein in anfänglicher Form eines 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 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 und 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 mit 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 tiefere Befehlskenntnisse und höchste Ausführungsgenauigkeit in der Notation voraus. Jeder formale Fehler führt nicht sofort, sondern erst später beim 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 auf 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 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 der Simulationsmodus gewählt werden, der auch schon zu Projektbeginn bei durch die Konfiguration vor-eingestellt sein kann. Mit dem Befehl 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 über das Kontextmenü mit der rechten Maustaste eingegeben werden. Programmdarstellung:

    Simulationsdarstellung:

    Werte schreiben: Der Befehl ermöglicht den Programmtest mit verschieden Werten, hier für die Variable . Nach Eingabe von ist noch 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 .

  • 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: Es sind nur die Ziffern 0 und 1 verfügbar. 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 iiZ 2 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 = 012345 212120202021 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

    Zahlengrenze bei 28–1 = 255 3. Dualzahlen im Format 16 Bit = 1 Wort

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

    dezimal dual

    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

    0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

    dezimal dual

    0 65535

    00000000 00000000 11111111 11111111

    dezimal dual

    0 255

    00000000 11111111

  • 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 Zahlpositiveˆ 0 VZ-Bit Zahlnegativeˆ1 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- = Zahlenwert +127 auszug = Zahlenwert +126 = Zahlenwert +1 = Zahlenwert 0

    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- = Zahlenwert 0 auszug = Zahlenwert –1 = Zahlenwert –127 = Zahlenwert –128

    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* = 1Y Y = alle Stellen der Zahl Y invertieren (= Einerkomplement) Die Ergänzungszahl Y* hat die besondere Eigenschaft, dass Y + Y* = 0 mit Übertrag = 1 ist.

    0111 1111 0111 1110 0000 0001 0000 0000

    0000 0000 1111 1111 1000 0001 1000 0000

  • 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* = 1Y 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* = 1Y = 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: 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:

    76732)12(Z 15max 0

    positiver Zahlenbereich

    –1

    76832)2(Z 15min negativer Zahlenbereich

    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

    VZ 231 216 215 20 MSB LSB

    Der Zahlenbereich liegt zwischen

    6474831472)12(Z 31max 0

    positiver Zahlenbereich

    –1

    6484831472)2(Z 31min negativer Zahlenbereich

    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

    (Exp–127)Wert (VZ) (1.Mantisse) (2 ) 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?

    MantisseExponent

    VZ00000000 00000000 10000000 01111110

    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: (Exp–127)Wert (VZ) (1, Mantisse) (2 ) 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

    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 1 2 3 4 5 6 7 8 9

    0000 0001 0010 0011 0100 0101 0110 0111 1000 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

    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 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 012 1612 162 16 1 Z 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 1 2 3 4 5 6 7 8 9

    10 11 12 13 14 15

    0 1 2 3 4 5 6 7 8 9 A B C D E F

    0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 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.

    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.