Strukturierte Programmierung
Die Programmierung industrieller Automatisierungssysteme ist nach IEC 61131 genormt. Die IEC 61131 ist Grundlage der Programmierung nicht nur von klassischen SPSen, sondern auch von Motion-Control-Systeme, Prozessleitsystemen und PC-basierten Steuerungen und wird ständig weiterentwickelt und ergänzt, z. B. zurzeit um Werkzeuge zur objekt-orientierte SPS-Programmierung .
Auch wenn nicht alle Automatisierungssysteme genau gleich zu programmieren sind, bieten die meisten Systeme doch die Möglichkeit, in den von der Norm vorgeschlagenen Programmiersprachen zu programmieren. Auch die Architektur der Programmiersysteme ist in den meisten Systemen ähnlich und die Möglichkeiten zur objektorientierten Strukturierung der Software sind weitgehend gleich. Damit kann die Software transparent und wartungsfreundlich gestaltet und Module können projektübergreifend verwendet werden, was enorme Synergieeffekte und Kostenersparnis hervorruft.
Steuerungskonfiguration und Ressourcen
In der Steuerungskonfiguration wird die Hardwarestruktur der SPS der Programmierumgebung bekannt gemacht.
Die Steuerungskonfiguration besteht aus mehreren Ressourcen. Unter Ressourcen versteht man die Einsteckkarten des Steuerungssystems, auf die die Software zugreift, also z.B. CPUs, E/A-Karten, Schnittstellenkarten zur Feldbusankopplung usw. In den meisten Programmiersystemen erfolgt die Steuerungskonfiguration menügesteuert, d.h. man kann die gewünschten Einsteckkarten aus einem Menükatalog auswählen und dann per Drag & Drop an angestrebten Steckplatz in der Hardwarekonfiguration ziehen.
Steuerungskonfiguration und Ressourcen
Hardwarekonfiguration Hardwarekatalog
Drag&Drop
Bei STEP 7 unterscheidet man Codebausteine für das ausführbare Steuerungsprogramm und Datenbausteine, die entweder reine Datensammlungen (z.B. Tabellen, Messwerte) sind oder die die zugehörigen Daten von Funktionsbausteinen FB enthalten.
Programmorganisationseinheiten (POE) in STEP 7
Wichtig für die Auswahlentscheidung zwischen FB und FC ist:
Ein FB muss verwendet werden, wenn ein speicherndes Verhalten einer bausteininternen
Variablen erforderlich ist!
Zur Vermeidung von Doppeltbelegungen und für die Bibliotheksfähigkeit (Wieder-Verwendbarkeit) von Bausteinen werden in Funktionen bzw. Funktionsbausteinen keine globalen Variablen (bei STEP7 SPS-Operanden) verwendet.
Alle in einem Baustein verwendeten Variablen werden strikt deklariert. Dies gilt auch für Zeit- und Zählvariablen.
Mit diesen Regeln werden die Intentionen der IEC 61131-3 erfüllt
Nur, wer bereits vom ersten Steuerungsprogramm an die Regeln einhält, kann komplexere Automatisierungsaufgaben in der Schule lösen.
Das Steuerungsprogramm wird in Bausteine (FB´s bzw FC´s) strukturiert, welche vom OB1 aus aufgerufen werden.
Im OB1 werden die erstellten Bausteine verschaltet. Dazu müssen lokale Variablen im OB1 deklariert werden.
Entwurf eines Steuerungsprogramms unabhängig von der Programmiersoftware.
Der Entwurf von Steuerungsprogramme sollte soweit wie möglich Hersteller unabhängig sein.
Programmorganisationseinheiten (POE) in STEP 7
Organisationsbausteine
Die in der 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 Anwender-
programm dar.
Aufruf:
Organisationsbausteine können nicht von anderen Bausteinen aufgerufen werden, sondern nur durch das Betriebssystem bei Eintreten bestimmter Situationen, die sofort eine Unterbrechung des sonst endlos ausgeführten OB1 veranlassen. Der OB1 (Hauptprogramm) organisiert durch den Aufruf anderer Code- Bausteine (FBs, FCs) das zyklische Programm. Das Hauptprogramm arbeitet alle von ihm aufgerufenen Funktionen zyklisch ab und zwar so schnell wie es die SPS-Hardware zulässt.
Priorität:
Organisationsbausteine werden entsprechend der ihnen zugeordneten Priorität im Aufruf-Fall bearbeitet (1 = niedrigste und 29 = höchste Priorität). Der OB1 hat die niedrigste Priorität 1. Jeder andere OB kann daher das Hauptprogramm unterbrechen und sein eigenes Programm bearbeiten. Anschließend wird die Bearbeitung des OB1 an der Unterbrechungsstelle fortgesetzt. Die Einstellung der Priorität ist mit
Defaultwerten für die einzelnen Obs vorgegeben.
Programmorganisationseinheiten (POE) in STEP 7
Strukturierte Anwenderprogrammen enthalten auch Programmroutinen mit häufig
verwendeten mathematischen und verknüpfungslogischen Funktionen, zu deren Aufnahme der Bausteintyp Funktion gedacht ist. Jede Funktion ermittelt einen Funktionswert, den sog.
Rückgabewert. Der die Funktion aufrufende Code-Baustein erhält den Rückgabewert als Antwort auf seinen Aufruf. Als Ergänzung zur Norm DIN EN 61131-3 sind beim Code- Bausteintyp Funktion auch noch mehrere Ausgangs-Bausteinparameter deklarierbar. Soll normgerecht programmiert werden, so ist darauf zu achten, dass die Funktion tatsächlich nur den Rückgabewert RET_VAL an den aufrufenden Baustein übergibt. Soll die Funktion ohne Funktionswertausgabe gehandhabt werden, müssen die Ausgangs-Bausteinparameter deklariert werden.
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.
• Temporäre Lokaldatenverwendung, d.h. es können temporäre Variablen deklariert werden, die nur bausteinintern gültig sind. Temporär bedeutet hier die Eigenschaft, dass diese Daten nur innerhalb eines Bausteinaufrufes erhalten bleiben und verwendet
werden können (Zwischenergebnisfunktion)
Funktionen
Eine Funktion hat im Unterschied zu einem Funktionsbaustein kein Gedächtnis. Das heißt es ist in
einer Funktion nicht erlaubt, interne Zwischenwerte zu speichern
Programmorganisationseinheiten (POE) in STEP 7
Funktionsbaustein
In strukturierten Anwenderprogrammen stehen in Funktionsbausteinen die aufgabenspezifischen und möglichst bibliotheksfähig geschriebenen Unterprogramme. Zu diesem Code-Bausteintyp gehört immer ein Instanz-Datenbaustein (DB), damit dem Funktionsbaustein bei jedem Aufruf ein eigener Speicherbereich zur Aufnahme der speziellen Daten zugewiesen werden kann. Dadurch können Funktionsbausteine bei jedem Aufruf mit unter- schiedlichen Daten versorgt werden.
Der Code-Bausteintyp Funktionsbaustein 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.
• Statische Lokaldatenspeicherung, d.h. es können statische Variablen deklariert werden, die nur bausteinintern gültig sind. Statisch bedeutet hier die Eigenschaft, dass diese Daten über den aktuellen Bausteinaufruf hinaus gespeichert werden (Gedächtnisfunktion).
• Temporäre Lokaldatenverwendung, d.h. es können temporäre Variablen deklariert werden, die nur bausteinintern gültig sind. Temporär bedeutet hier die Eigenschaft, dass diese Daten nur innerhalb eines Bausteinaufrufes erhalten bleiben und verwendet werden können (Zwischenergebnisfunktion)
Instanzdatenbausteine stellen die Instanzvariablen von Funktionsbausteinen dar und beinhalten demnach alle Ein- und Ausgangsvariablen des Funktionsbausteins und auch die lokalen statischen Bausteinvariablen. Für
jeden Funktionsbaustein muss ein Instanz-Datenbaustein erzeugt werden.
Enthält Instanz- Datenbaustein
Programmorganisationseinheiten (POE) in STEP 7
Datenbausteine
Datenbausteine sind Datenbereiche zur Speicherung von Anwenderdaten mit denen das Anwender- programm arbeitet. Auf die gespeicherten Daten eines Datenbausteines kann über Bit-, Byte-, Wort- und Doppelwortoperationen zugegriffen werden. Der Zugriff kann symbolisch oder absolut erfolgen.
Es werden zwei Arten von Datenbausteinen unterschieden:
Instanz-Datenbausteine
sind Funktionsbausteinen FB fest zugeordnet. In den Instanz-DBs stehen die Daten der statischen Lokalvariablen ( statische Lokaldaten). Beim Erstellen eines Funktionsbausteines wird der Instanz-DB gleich mit erzeugt und muss also nicht extra programmiert werden.
Global-Datenbausteine
enthalten Informationen, auf die von allen Codebausteinen des Anwender- programms zugegriffen werden kann. Global-DBs müssen vom Anwender programmiert werden.
Systemfunktionsbausteine SFB und Systemfunktionen SFC sind vorgefertigte, im Betriebssystem der CPU bereits integrierte Code-Bausteine.
Systemfunktionen
Lineares Programm
Das gesamte Programm befindet sich im zyklisch bearbeitete Organisationsbaustein Main[OB1]. Die CPU arbeitet die Anweisungen der Reihe nach ab und beginnt wieder von vorne.
Programmstrukturen (1)
Main[OB1]
Gegliedertes Programm
Aufteilung des Programms auf mehrere Bausteine, die Teilfunktionen ausführen. Der Organisations- baustein OB1 enthält nur die Baustein-Aufrufe, nach deren Reihenfolge die Bausteine bearbeitet werden. Gegliederte Programme sind übersichtlicher als lineare Programme.
Programmstrukturen (2)
Main[OB1]
Strukturiertes Programm
Strukturierte Programme bestehen aus einem Hauptprogramm und mehreren parametrierbaren Unterprogrammen (Bausteinen). Beim Bausteinaufruf werden den Baustein- Formalparametern die
aktuellen Datenwerte übergeben, mit denen das Programm ablaufen soll. Strukturierte Programme können dieselben Bausteine mehrmals aufrufen und mit verschiedenen Datenwerten ausführen lassen.
Programmstrukturen (3)
Main[OB1]
Parametrierbarkeit von Code-Bausteinen
Variablenbereiche von S7-Codebausteinen
• Deklaration IN: Eine Eingangsvariable kann innerhalb einer Funktion oder Funktionsbausteins nur abgefragt werden.
• Deklaration OUT: Eine Ausgangsvariable soll innerhalb einer Funktion oder Funktionsbausteins nur beschrieben werden.
• Deklaration IN_OUT: Im Gegensatz zu reinen Eingangsvariablen können Ein- und
Ausgangsvariablen (Durchgangsvariable) in Funktionen oder Funktionsbausteinen verändert und ausgegeben werden.
• Deklaration STAT: Eine interne Zustandsvariable ist zum Abspeichern von Daten über den Zyklus einer Bausteinbearbeitung hinaus vorgesehen (Gedächtnisfunktion). Eine solche Variable heißt statische Lokalvariable und kann nur in einem FB deklariert werden.
• Deklaration TEMP: Eine interne temporäre Variable dient zum Zwischenspeichern
von Ergebnissen innerhalb eines Zyklus der Bausteinbearbeitung und dient zur Datenübergabe zwischen den im OB 1 aufgerufenen Bausteinen.
• Deklaration Return: Beinhaltet den Rückgabewert (RET_VAL) einer Funktion.
Lokale FormalparameterLokale Interne Variablen
Parametrierbarkeit von Code-Bausteinen
Beispiel für die Deklarationstabelle eines FBs:
Aufruf des parametrierbaren Funktionsbausteins in FUP:
Deklaration Name Typ Anfangswert Kommentar IN
IN IN
Start Stopp TempSchutz
BOOL BOOL BOOL
FALSE TRUE FALSE
OUT Motor BOOL FALSE
STAT MotorEinAus BOOL FALSE
Motorsteuerung EN
Start
Stopp Motor TempSchutz ENO
Motorsteuerung_DB
BOOL BOOL BOOL BOOL
BOOL BOOL Eingangs-
parameter
Ausgangs- parameter
Bei Bausteinaufrufen sind den Formalparametern (Eingänge, Ausgänge) entsprechende Aktualparameter zuzuordnen.
Bei FBs können die Eingänge und Ausgänge auch unbeschaltet bleiben, das Programm verwendet dann die Default- Anfangswerte aus der Deklarationstabelle.
1) Beim Aufruf einer FB-Instanz über die CALL-Anweisung werden vor der eigentlichen FB-Abarbeitung die Werte der aktuellen Eingangsparameter und ggf. auch
Durchgangsparameter in den Instanz-DB kopiert.
2) Dann erfolgt der Wechsel zur FB-Bearbeitung. Im An- weisungsteil des FB erfolgt die eigentliche Programm- bearbeitung. Stößt dabei das Programm auf Formal-
parameter, so resultiert daraus ein Zugriff auf die aktuellen Operanden im Instanz-DB.
3) Nach der FB-Abarbeitung werden die aktuellen Werte der Ausgangs- und ggf. Durchgangsparameter
zurückgegeben.
Erläuterungen zum Ablauf der Parameterübergabe:
CALL Motorsteuerung Start :=E1.0 Stopp :=E1.1 TempSchutz :=E1.3 Motor :=A4.0
* Weitere Programmführung
*
Dekl. Name Typ IN Start BOOL IN Stopp BOOL
IN TempSchutz BOOL OUT Motor BOOL
STAT MotorEinAus BOOL Aufrufender Baustein Motorsteuerung_DB
Dekl. Name Typ IN Start BOOL IN Stopp BOOL
IN TempSchutz BOOL OUT Motor BOOL
STAT MotorEinAus BOOL Motorsteuerung
2 1
3
Begriffe: Variablen und Daten
Eine Variable ist ein mit einem Namen versehener Speicherplatz, der im Anwenderprogramm als Platz- halter für Daten fungiert, die sich zur Laufzeit des Programms ändern können.
Durch Festlegung auf einen bestimmten Datentyp erhält der Speicherplatz eine passende Größe für die Daten.
Der Datentyp bestimmt ferner, welche Operationen mit den Daten, die in der Variablen gespeichert sind, ausgeführt werden können, z.B.: logisch verknüpfen, addieren, vergleichen usw.
Datentypen
Eine Variable ist ein Speicherplatz für Daten und ist durch ihren Namen und
Datentyp charakterisiert.
Elementare Datentypen
Bit-Typen: BOOL, BYTE, WORD, DWORD, CHAR
Arithmetik-Typen: INT, DINT, REAL
Zeit-Typen: Zeitdauer: TIME
Uhrzeit: TIME_OF_DAY Datum: DATE
Zusammengesetzte Datentypen
Feld mit Komponenten gleichen Datentyps: ARRAY
Struktur mit Komponenten unterschiedlichen Datentyps: STRUCT
Anwenderdefinierter Datentyp: TYPE, UDT
Zeichenkette mit max. 254 Zeichen: STRING
Parametertypen
Bausteinparameter: BLOCK_FB, BLOCK_FC, BLOCK_DB, ...
Zeitglieder: TIMER
Zähler: COUNTER
Zeiger: ANY, POINTER
Datentypen
Variablen sind die Mittel, um Daten in Programmen zu verarbeiten. Es sollen weitgehend nur symbolische Variablen mit aussagekräftigen Bezeichnungen verwendet werden. Man unterscheidet zwischen globalen und lokalen
Variablen.
Globale Variablen Lokale Variablen
Gültigkeitsbereich
gelten im gesamten Programm, in allenBausteinen sind nur in Bausteinen bekannt, in
denen sie deklariert wurden
Einsatz für
E/A-Operanden,PLC-Variablen („Merker“ ) Datenbausteine,
Peripherie
IN-Parameter OUT-Parameter IN-OUT-Parameter TEMP-Bausteindaten STAT-Bausteindaten
Deklarationsort
in der PLC-Variablentabelle im S7-Programm in der Deklarationstabelle des
Bausteins
Variablen und Variablendeklaration
STEP 7 IEC 61131-3
Bitweise
Einzel-Eingänge
Einzel-Ausgänge %E0.7 … %E0.0
%A0.7 … %A0.0 %IX0.7 … %IX0.0
%QX0.7 … %QX0.0
Byteweise
Eingangsbyte
Ausgangsbyte %EB0=%E0.7 … %E0.0
%AB0=%A0.7 … %A0.0 %IB0=%IX0.7 … %IX0.0
%QB0=%QX0.7 … %QX0.0
Wortweise
Eingangswort
Ausgangswort %EW0 = %EB0 + %EB1
%AW0 = %AB0 + %AB1 %IW0=%IB0+%IB1
%QW0=%QB0+%QB1
Doppelwortweise
E-Doppelwort
A-Doppelwort %ED0 = %EW0 + %EW1
%AD0 = %AW0 + %AW1 %ID0=%IW0+%IW1
%QD0=%QW0+%QW1
Möglichkeiten der direkten Adressierung von Ein- und Ausgängen. Entsprechendes gilt für Merker, soweit diese noch verwendet werden können.
Wortadressen Doppelwortadressen