IEC 61131 - Fakultät Elektrotechnik und Informationstechnik
IEC 61131 - Fakultät Elektrotechnik und Informationstechnik
IEC 61131 - Fakultät Elektrotechnik und Informationstechnik
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>Elektrotechnik</strong> <strong>und</strong> <strong>Informationstechnik</strong> Institut für Automatisierungstechnik, Professur Prozessleittechnik<br />
DIN EN <strong>61131</strong><br />
Fachsprachen<br />
VL Prozessleittechnik I (SS 2012)<br />
Professur für Prozessleittechnik
<strong>61131</strong>-3 Programmiersprachen<br />
• <strong>61131</strong>-3 spezifiziert fünf Programmiersprachen zur<br />
Implementierung von POE<br />
• Standardfunktionen <strong>und</strong> Standardfunktionsbausteine<br />
• Typwandlungsfunktionen typ1_TO_typ2<br />
Textbasiert Grafisch<br />
Anweisungsliste (AWL)<br />
Strukturierter Text (ST)<br />
Ablaufsprache (AS)<br />
Kontaktplan (KOP)<br />
Funktionsbausteinsprache (FBS)<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 2
Übersicht<br />
• Beispiel:<br />
– Setze Ausgang Q1.1 auf 1, wenn folgende Bedingungen<br />
gleichzeitig erfüllt sind:<br />
• Eingänge I0.1 oder I0.2 oder Ausgang Q1.1 gesetzt<br />
• Eingang I0.3 gesetzt<br />
• Eingang I0.4 gesetzt<br />
• Zu realisierender boolscher Ausdruck:<br />
Q1.1 = ( I0.1 ˅ I0.2 ˅ Q1.1) ˄ I0.3 ˄ I0.4<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 3
Lösung in den verschiedenen<br />
Fachsprachen<br />
LD %IX0.1<br />
OR %IX0.2<br />
OR %QX1.1<br />
AND %IX0.3<br />
AND %IX0.4<br />
ST %QX1.1<br />
I0.1<br />
I0.2 I0.3 I0.4<br />
I0.3<br />
I0.4<br />
Q1.1:=(I0.1 OR I0.2 OR Q1.1)<br />
AND I0.3<br />
AND I0.4;<br />
S0<br />
S1<br />
T0<br />
T1<br />
S0<br />
Step 0<br />
R Q1.1<br />
Step 1<br />
S Q1.1<br />
I0.1<br />
I0.2<br />
Q1.1<br />
I0.1<br />
I0.2<br />
Q1.1<br />
I0.3 I0.4 Q1.1<br />
( )<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 4<br />
>1<br />
I0.3<br />
I0.4<br />
&<br />
Q1.1<br />
=
Gemeinsame Elemente der<br />
Programmiersprachen<br />
• Zeichensatz<br />
– Textelemente Spalten 002-007 der ISO/<strong>IEC</strong>-646 IRV<br />
– Zusätzlich Kleinbuchstaben (aber nicht case sensitiv),<br />
# oder £, $ oder ¤, | oder !<br />
• Bezeichner:<br />
– Folge von Buchstaben, Ziffern <strong>und</strong> Unterstrich<br />
– Muss mit Buchstaben oder Unterstrich beginnnen<br />
– Mehrere oder angehängte Unterstriche sind nicht<br />
zulässig<br />
– Mindestens sechs Zeichen werden zur eindeutigen<br />
Unterscheidung genutzt, Maximum impl.-abh.<br />
• Leerzeichen, Kommentare (* *), Numerische Literale,<br />
Zeichenfolgeliteral, Zeitdauer<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 5
Zahlen- <strong>und</strong> Zeitdauerliterale<br />
• Zahlen<br />
– Unterstriche zur Strukturierung erlaubt<br />
• 100_000_000 3.14159_26<br />
– Basis 2/8/16 Literale möglich<br />
• 2#1111_1111 8#377 16#ff<br />
– Literale mit Typangaben<br />
• BOOL#0 UINT#16#FF<br />
• Zeitdauern<br />
– kurzes/langes Präfix<br />
• TIME#14ms T#14.7s<br />
– mit/ohne Unterstrichen<br />
• t#5d14h12m18s3.5ms t#5d_14h_12m_18s_3.5ms<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 6
Elementare Datentypen<br />
• Wahrheitswert:<br />
• BOOL 1<br />
• Ganzzahl mit/ohne Vorzeichen:<br />
• SINT 8 , INT 16 , DINT 32 , LINT 64 / USINT 8 , UINT 16 , UDINT 32 ,<br />
ULINT 64<br />
• Reele Zahl:<br />
• REAL 32 , LREAL 64<br />
• Zeiten:<br />
• TIME, DATE, TIME_OF_DAY/TOD, DATE_AND_TIME/DT<br />
• Variabel lange Zeichenkette:<br />
• STRING 8 , WSTRING 16<br />
• Bit-Folgen:<br />
• BYTE 8 , WORD 16 , DWORD 32 , LWORD 64<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 7
Hierarchie der allgemeinen Datentypen<br />
(zur Festlegung von Ein/Ausgängen von<br />
POE)<br />
ANY<br />
+---- ANY_DERIVED<br />
+---- ANY_ELEMENTARY<br />
+---- ANY_MAGNITUDE<br />
| +---- ANY_NUM<br />
| | +---- ANY_REAL<br />
| | | +---- LREAL, REAL<br />
| | |<br />
| | +---- ANY_INT<br />
| | +---- LINT, DINT, INT, ULINT, SINT,<br />
| | ULDINT, UDINT, UINT, USINT<br />
| +---- TIME<br />
|<br />
+---- ANY_BIT<br />
| +---- LWORD, DWORD, WORD, BYTE, BOOL<br />
|<br />
+---- ANY_STRING<br />
| +---- STRING, WSTRING<br />
|<br />
+---- ANY_DATE<br />
+---- DATE_AND_TIME, DATE, TIME_OF_DAY<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 8
Abgeleitete Anwender- oder<br />
herstellerdefinierte Datentypen<br />
• TYPE Bezeichner : ... END_TYPE<br />
• Aufzählung<br />
– TYPE A_SIG : (SINGLE, DIFF) ; END_TYPE<br />
• Bereich<br />
– TYPE A_DATA : INT (-32000..32512) ; END_TYPE<br />
• Feld<br />
– TYPE A_8IN : ARARY [1..16] OF A_DATA; END_TYPE<br />
• Struktur<br />
– TYPE Bezeichner : STRUCT ... END_STRUCT;<br />
END_TYPE<br />
– Kann geschachtelt werden<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 9
Einzelelementvariablen<br />
% Q X 7.3 Adresse der Variablen<br />
I0.1<br />
I0.0<br />
Speicherort<br />
I Eingang<br />
Q Ausgang<br />
M Merker<br />
Kennung einer direkten Variablen (Optional)<br />
&<br />
Q1.1<br />
X (Einzel-)Bit-Größe<br />
kein (Einzel-)Bit-Größe<br />
B Byte(8 Bit)-Größe<br />
W Word(16 Bit)-Größe<br />
D Doppelwort(32 Bit)-Größe<br />
L Langwort(64 Bit)-Größe<br />
Schalter 1<br />
Schalter 2<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 10<br />
&<br />
Lampe
<strong>IEC</strong> <strong>61131</strong>-3 Standardfunktionen 1/2<br />
• Mit einer numerischen Variablen<br />
– ABS, SQRT, LN, LOG, EXP, SIN, COS, TAN, ASIN,<br />
ACOS, ATAN<br />
• Arithmetische Funktionen<br />
– ADD * , MUL * , SUB, DIV, MOD, EXPT,<br />
• Bitfolgefunktionen<br />
– SHL, SHR, ROR, ROL<br />
• Bitweise boolsche Standardfunktionen<br />
– AND * , OR * , XOR * , NOT,<br />
• Auswahl<br />
– SEL, MAX * , MIN * , LIMIT, MUX * ,<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 11
<strong>IEC</strong> <strong>61131</strong>-3 Standardfunktionen 2/2<br />
• Vergleich<br />
– GT * , GE * , EQ * , LE * , LT * , NE<br />
• Zeichenfolgen<br />
– LEN, LEFT, RIGHT, MID, CONCAT * , INSERT, DELETE,<br />
REPLACE, FIND<br />
• Zeit (DATE, TIME, TIME_OF_DAY,DATE_AND_TIME)<br />
– ADD, SUB, CONCAT_DATE_TOD<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 12
<strong>IEC</strong> <strong>61131</strong>-3 Standardfunktionsbausteine<br />
• Bistabile Funktionsbausteine<br />
– SR (* vorrangig Setzen *)<br />
– RS (* vorrangig Rücksetzen *)<br />
• Flankenerkennung<br />
– R_TRIG (* steigende Flanke *)<br />
– F_TRIG (* fallende Flanke *)<br />
• Zähler<br />
– CTU, CTU_(D|L|UD|UL)INT (*Aufwärtszähler*)<br />
– CTD, CTD_(D|L|UD|UL)INT (*Abwärtszähler*)<br />
• Zeitgeber<br />
– TON, TOF (* Ein/Ausschaltverzögerung *)<br />
– TP (* Puls *)<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 13
Textbasiert Grafisch<br />
Anweisungsliste (AWL)<br />
Strukturierter Text (ST)<br />
Ablaufsprache (AS)<br />
Kontaktplan (KOP)<br />
Funktionsbausteinsprache (FBS)
Anweisungsliste AWL<br />
(engl. Instruction List, IL, STEP7: AWL)<br />
• AWL: universell einsetzbare Maschinensprache,<br />
vergleichbar mit einem Assembler.<br />
– Nach wie vor am weitesten verbreitet.<br />
– wenig Möglichkeiten zur strukturierten Programmierung.<br />
– In den jeweiligen Implementierungen zum Teil<br />
unterschiedliche Operatoren <strong>und</strong> Sprachumfänge<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 15
AWLs „Virtuelle Maschine“<br />
• AWL definiert implizit eine virtuelle Maschine mit<br />
– AKU<br />
– Variablen (funktionale Speicher)<br />
• Zentrales Element ist der AKKUMULATOR (AKU)<br />
– Gr<strong>und</strong>legende Semantik von Operatoren<br />
• Ergebnis := Ergebnis Operator Operand<br />
– Ergebnis <strong>und</strong> Operand müssen denselben Datentyp<br />
besitzen<br />
• Formale Syntax:<br />
[Marke:] Operator Operand [(* Kommentar *)]<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 16
Modifzierer für Negation, Zurückstellung,<br />
bedingte Auswertung<br />
• N: Negation<br />
– ANDN %IX2 � Erg := Erg AND NOT %IX2<br />
• (: Zurückstellung der Auswertung bis zum Operator )<br />
– AND( %IX1 � Erg := Erg AND (%IX1 OR %IX2)<br />
OR %IX2<br />
)<br />
• C: Bedingung, Anweisung wird nur durchgeführt,<br />
wenn der vorherige Ausdruck eine boolsche 1 ergeben<br />
hatte<br />
– Achtung: Modifizierer gelten nur für bestimmte Befehle<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 17
Operatoren der Anweisungsliste<br />
Nr. Operator N ( C Bedeutung<br />
1 LD N Erg := Operand<br />
2 ST N Operand := Erg<br />
3 S, R Operand := (bool) Erg<br />
4-7 AND,&,OR,XOR N ( Erg := Erg OP Operand<br />
7a NOT Einerkomplement<br />
8-11a ADD,SUB,MUL,<br />
DIV,MOD<br />
12-17 GT,GE,EQ,NE,LE,<br />
LT<br />
( Erg := Erg OP Operand<br />
( Erg := Erg OP Operand<br />
18-20 JMP, CAL, RET N C Sprung, Aufruf, Rücksprung<br />
21 ) Bearbeitung rückgesteller OP<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 18
Funktionsaufruf<br />
• Eintrag Funktionsname in Operatorfeld<br />
• Argumente als nicht-formale Eingangsliste<br />
LIMIT(1,B,5)<br />
Argumente als formale Eingangsliste<br />
LIMIT(<br />
EN:=COND,<br />
IN:=B,<br />
MN:=1,<br />
MX:= 5,<br />
ENO => TEMPL<br />
)<br />
• Zurückgegebener Wert (RET) wird Ergebnis<br />
– ST A<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 19
Einschub: Ausführungssteuerung mit<br />
EN/ENO<br />
• Für Funktionen <strong>und</strong> Funktionsbausteine können ein<br />
zusätzlicher Freigabeeingang EN (Enable) <strong>und</strong><br />
Ausgang ENO (Enable Out) oder beide zur Verfügung<br />
gestellt werden<br />
VAR_INPUT EN: BOOL := 1 ; END_VAR<br />
VAR_OUTPUT ENO: BOOL ; END_VAR<br />
• EN == False<br />
– Operation wird nicht ausgeführt, durch SPS<br />
ENO := False<br />
• ENO == False<br />
– Werte der Funktionsausgänge<br />
implementierungsabhängig<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 20
Funktionsbausteinaufruf<br />
• Aufruf FBS mit nicht-formaler oder formaler<br />
Argumentliste<br />
– CAL C10(%IX10, FALSE, A, OUT, B)<br />
– CAL C10(<br />
CU := %IX10,<br />
Q=> OUT)<br />
• Aufruf mit Laden/Speichern mit FBS-Eingangs<br />
von Argumenten Operatoren<br />
– LD A LD A<br />
ST C10.PV PV C10<br />
LD %IX10 LD %IX10<br />
ST C10.CU CU C10<br />
CAL C10<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 21
Unvollständige formale Argumentliste<br />
oder Eingangsoperatoren<br />
• Fehlende Argumente werden von der letzten<br />
Zuweisung (ggf. Initialisierung) übernommen<br />
– Fehlende Argumente ändern sich also nicht!<br />
• Beispiel<br />
VAR C10: CTU;<br />
LD 15<br />
PV C10<br />
• Zähler C10 wird bei steigender Flanke auf Eingang CU<br />
inkrementiert<br />
– CU ist nicht angegeben<br />
� keine Änderung, Zähler zählt nicht!<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 22
AWL Beispiel<br />
LD %IX0.1 (* Lade Eingang 0.1 in Akku *)<br />
OR %IX0.2 (* Akku=Akku oder Eingang 0.2 *)<br />
OR %QX1.1 (* Akku=Akku oder Ausgang 1.1 *)<br />
AND %IX0.3 (* Akku=Akku <strong>und</strong> Eingang 0.3 *)<br />
AND %IX0.4 (* Akku=Akku <strong>und</strong> Eingang 0.4 *)<br />
ST %QX1.1 (* Ausgang 1.1=Akku *)<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 23
Textbasiert Grafisch<br />
Anweisungsliste (AWL)<br />
Strukturierter Text (ST)<br />
Ablaufsprache (AS)<br />
Kontaktplan (KOP)<br />
Funktionsbausteinsprache (FBS)
Strukturierter Text<br />
(engl. Structured Text, ST, STEP7 SCL)<br />
• Pascal-ähnliche, höhere Programmiersprache<br />
• Vorteile:<br />
– sehr kompakte Formulierung<br />
– abstrakte maschinenferne Befehle<br />
– übersichtlicher Aufbau durch Anweisungsblöcke<br />
– umfangreiche, komplexe Aufgaben realisierbar<br />
• Nachteile:<br />
– Qualität des Maschinencode ist abhängig von Compiler<br />
(Übersetzer).<br />
– Bei einigen Compilern Effizienzverlust zur Laufzeit durch<br />
höhere Abstraktion (ST-Code i.d.R. langsamer als AWL-<br />
Code)<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 25
Ausdrücke<br />
• Auswertungsreihenfolge<br />
– Rangfolge (Punkt vor Strich): A+B*C<br />
– Auswertung von links nach rechts: A+B+C<br />
– Auswertung linker Operand zuerst: SIN(A)*SIN(B)<br />
• Boolsche Ausdrücke<br />
– Lazy Evaluation ist erlaubt: (A>B)&(C>D)<br />
• Operatoren<br />
– Funktionsaufruf, e.g. SIN(A)<br />
– - (Negation), NOT, **, *, / MOD, +, -,<br />
– ,=, =, <br />
– &, AND, XOR, OR<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 26
Anweisungen<br />
• Zuweisung: A := B; C := SIN(X);<br />
• FBS-Aufruf: TMR(IN:=%IX5, PT:=T#300ms);<br />
A := TMR.Q;<br />
• Bed. Ausführung: IF B1 THEN … ELSIF B2 THEN …<br />
ELSE … END_IF;<br />
• Falluntersch.: CASE B1 OF<br />
1,5: …<br />
7..10: …<br />
ELSE … END_CASE;<br />
• Wiederholung: FOR I:= 1 TO 3 DO … END_FOR;<br />
WHILE B1 DO … END_WHILE;<br />
REPEAT … UNTIL B1 END_REPEAT;<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 27
ST Beispiele<br />
(Viele Wege führen nach Rom)<br />
• Beispiel 1:<br />
Q1.1:=(I0.1 OR I0.2 OR Q1.1) AND I0.3 AND I0.4;<br />
• Beispiel 2:<br />
M = Q1.1; Q1.1:=0;<br />
IF (I0.1 OR I0.2 OR M) THEN<br />
IF (I0.3 AND I0.4) THEN<br />
Q1.1:=1;<br />
END_IF;<br />
END_IF;<br />
• Negativbeispiel 3:<br />
Q1.1:=((I0.1+I0.2+Q1.1)>0)*I0.3*I0.4<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 28
Textbasiert Grafisch<br />
Anweisungsliste (AWL)<br />
Strukturierter Text (ST)<br />
Ablaufsprache (AS)<br />
Kontaktplan (KOP)<br />
Funktionsbausteinsprache (FBS)
Kontaktplan KOP<br />
(engl. Ladder Diagramm, LD, STEP7: KOP)<br />
• Funktionen werden durch Schaltsymbole aus der<br />
<strong>Elektrotechnik</strong> dargestellt:<br />
– Schließer, Öffner usw., die schaltbildähnlich zu<br />
Netzwerken zusammengefügt werden.<br />
– An den Seiten befinden sich zwei Stromschienen,<br />
zwischen denen die Relaislogik liegt (90° Drehung zur<br />
Anpassung an Computer/Textschreiben)<br />
• Programmiersprache beschränkt sich im Wesentlichen<br />
auf boolsche Signale<br />
– Reihenschaltung: UND<br />
– Parallelschaltung: ODER<br />
– Negation: Arbeitskontakt / Ruhekontakt<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 30
KOP Beispiel<br />
I0.1<br />
I0.2<br />
Q1.1<br />
I0.3 I0.4 Q1.1<br />
( )<br />
Eingang: Schaltkontakt --| |--<br />
Ausgang: Relaisspule --( )--<br />
Negation: --|/|--<br />
--(/)--<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 31
Textbasiert Grafisch<br />
Anweisungsliste (AWL)<br />
Strukturierter Text (ST)<br />
Ablaufsprache (AS)<br />
Kontaktplan (KOP)<br />
Funktionsbausteinsprache
Funktionsbausteinsprache FBS<br />
(engl. Function Block Language, FB, STEP7: FUP)<br />
• Symbolik der Digitalen-Schaltungen<br />
• UND- , ODER-Gatter,<br />
• INVERTIERTER Eingang, usw.<br />
• gut strukturierte <strong>und</strong> übersichtliche Programmierung<br />
bool´scher Verknüpfungen.<br />
• Grafisch anschauliche Programmierung des<br />
Informationsfluss von ganzzahligen <strong>und</strong> Gleitkomma-<br />
Operationen.<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 33
FBS Beispiel<br />
I0.1<br />
I0.2<br />
Q1.1<br />
>1<br />
I0.3<br />
I0.4<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 34<br />
&<br />
Q1.1<br />
=
Textbasiert Grafisch<br />
Anweisungsliste (AWL)<br />
Strukturierter Text (ST)<br />
Kontaktplan (KOP)<br />
Ablaufsprache (AS)<br />
Funktionsbausteinsprache (FBS)
Ablaufsprache AS<br />
(engl. Sequential Function Chart Language, SFC)<br />
• Industrielle Automatisierungsaufgaben lassen sich<br />
häufig als Sequenz einzelner Schritte darstellen.<br />
– Die Ausführung der Schritte hängt vom Erreichen einer<br />
Bedingung ab<br />
– Verschiedene Schritte können/müssen auch parallel<br />
ausgeführt werden<br />
• Vereinfachte Petrinetze:<br />
– Übergang von einem Schritt zu einen oder mehreren<br />
(parallelen) folgenden Schritten erfolgt durch eine<br />
Übergangsbedingung (Transition).<br />
– Aktionen <strong>und</strong> Transitionen werden in einer der<br />
vorgenannten Sprachen spezifiziert.<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 36
AS Beispiel<br />
I0.1<br />
I0.2 I0.3 I0.4<br />
I0.3<br />
I0.4<br />
S0<br />
S1<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 37<br />
T0<br />
T1<br />
S0<br />
Step 0<br />
R Q1.1<br />
Step 1<br />
S Q1.1
Siemens STEP7 vs. <strong>IEC</strong> <strong>61131</strong>-3<br />
• Aus TIA, Anhang II, <strong>IEC</strong> <strong>61131</strong>:<br />
– Die Programmiersprachen KOP <strong>und</strong> FUP entsprechen<br />
den in der Norm DIN EN <strong>61131</strong>-3 (int. <strong>IEC</strong> <strong>61131</strong>-3)<br />
festgelegten Sprachen „Kontaktplan“ <strong>und</strong><br />
„Funktionsbaustein-Sprache“. […]<br />
– AWL entspricht der in der Norm DIN EN <strong>61131</strong>-3 (int.<br />
<strong>IEC</strong> <strong>61131</strong>-3) festgelegten Sprache „Anweisungsliste“,<br />
wobei hinsichtlich der Operationen wesentliche<br />
Unterschiede bestehen. […]<br />
– Die Ablaufsprache S7-GRAPH entspricht der in der Norm<br />
DIN EN <strong>61131</strong>-3 (int. <strong>IEC</strong> <strong>61131</strong>-3) festgelegten<br />
Sprache „Sequential Function Chart“.<br />
– Zusätzlich S7-HiGraph (Zustandsgraphen)<br />
17.04.2012 PLT-1 (c) 2008-2012, UR Folie 38