1 Strukturierter Text Grundlagen der Programmierung mit Strukturiertem Text.
-
Upload
eckhardt-easterlin -
Category
Documents
-
view
126 -
download
4
Transcript of 1 Strukturierter Text Grundlagen der Programmierung mit Strukturiertem Text.
1
Strukturierter Text
Grundlagen der Programmierung mit Strukturiertem Text
2
Programmierung mit Strukturiertem Text
Übersicht:
• Vorteile der ST Programmierung
• ST Editor
• Zuweisungen
• Kommentare
• Variablen
• Syntax Regeln
• Operatoren
• Standard Kommandos
• Bedingung IF THEN
• Verzweigung CASE
• Schleifen FOR
• Schleifen WHILE
• Schleifen REPEAT UNTIL
• Funktionsblock Aufruf in ST
• Funktions Aufruf in ST
• Strukturen
• FUB Aufruf ST vs. KOP
• Vergleiche zwischen KOP und ST
3
Vorteile der ST Programmierung
• Einfach lesbarer Code• Portabler Code (99%) zu IEC61131-3 Dritthersteller • Editierbar in Text Editor• Effizienter Code, besser als KOP oder FBD• Bequeme Verwendung von Strukturen (komplexe
Datentypen)• Kürzere Entwicklungszeit• Mischen von KOP und ST möglich (InLine ST)
4
ST Editor
GRÜN:KommentareGRÜN:Kommentare
BLAU: Ablauf, Anweisungen, Operatoren
BLAU: Ablauf, Anweisungen, Operatoren
ROT: Globale Variablen, Globale Konstanten,Strings
ROT: Globale Variablen, Globale Konstanten,Strings
• Syntax EinfärbungStandardfarben, diese können teilweise in den Optionen umgestellt werden
SCHWARZ: Variablen, Konstanten, Funktionen, Funktionsblöcke
SCHWARZ: Variablen, Konstanten, Funktionen, Funktionsblöcke
5
ST Editor
VariablenDeklarationVariablenDeklaration
ST Programm EditorST Programm Editor
6
Zuweisungen
• Zuweisungen von Werten, Ausdrücken oder Zuständen mit “:=“
• Es können Leerzeichen und Tabulatoren verwendet werdenum die Lesbarkeit zu verbessern
• Anweisungen müssen am Zeilenende mit einem Semikolon abgeschlossen werden “;“
7
Zuweisungen
• Integer Werte können auch Binär oder Hexadezimal eingegeben werden
• Komplexe, lange Ausdrücke können auf mehrere Linien gesplittet werden mittels „Return“ (). Der Ausdruck wird mit dem Semikolon “;“ abgeschlossen
8
• Blockkommentare können irgendwo im ST Programm platziert werden, verwendet als Zeilen oder Mehrzeilen Kommentar. Start mit “(*” Ende mit “*)”
Kommentare
• Linienkommentare können mit “//“ begonnen werden
9
• Variablen Deklaration: – Der Compiler unterscheidet nicht zwischen Klein - und
Großschreibung. In der Praxis ist empfohlen immer die gleiche Schreibweise zu verwenden um die Lesbarkeit zu verbessern.
Nicht empfohlenNicht empfohlen
Lesbar +Konsistent
Variablen
10
• Variablen Deklaration: – Noch nicht deklarierte Variablen werden mit einem blauen Rechteck markiert.– Durch anklicken dieser Markierung kann die Variable generiert werden (Lokal)– Jetzt muss nur noch der Datentyp eingegeben werden
Variablen
11
– Sonderzeichen können nicht in Variabel Namen benutzt werden. Ausnahme: Tiefstrich “_” (nicht an erster Position)
>, <=, >=, <>, :=, -, *, /, &, (*,*), %,$,@...
• Reservierte Schlüsselwörter: – Schlüsselwörter dürfen nicht verwendet werden, da diese für ST
Kommandos reserviert sind.
– Datentypen, und benutzerdefinierte Typen können nicht als Vaiabelname verwendet werden
BOOL, USINT, SINT, BYTE, UINT, INT,WORD, REAL, DINT, UDINT, DWORD, LREAL, LINT, ULINT, LWORD…
AND, BY, CASE, DO, ELSE, ELSIF, EXIT, FALSE, FOR, IF, NOT, OF, OR, REPEAT, RETURN, THEN, TO, TRUE, UNTIL,WHILE, XOR, END_IF,END_WHILE, END_CASE, END_REPEAT..
Syntax Regeln
12
Übung 1
• Finde die 7 Fehler…
:;
13
( ) Ausführungs Priorisierung Value:=(1+2) *(3+4) // Value is 21Priorität: ( ), NOT, **, * / , MOD, + -
** Exponent Value:= 2**8 ; // Value is 256
NOT Negierung Value:=NOT TRUE; //Value is FALSE
* Multiplikation Value:=8 * 100; // Value is 800
/ Division Value:=200 / 25; // Value is 8
+ Addition Value:=200 + 25; // Value is 225
- Subtraktion Value:=200 - 25; // Value is 175
MOD Modulo (Rest) Value:=10 MOD 6; // Value is 4
<,>,<=,>= Vergleiche Value:= 60 > 10; // Value is TRUE
= Vergleich (Ist gleich) Value:= 8=7; // Value is FALSE
<> Vergleich (Ungleich) Value:= 8<>7; // Value is TRUE
&, AND Logisches UND Value:=2#1001 AND 2#1100; //Value is 2#1000
XOR Logisches Exklusives ODER Value:=2#1001 XOR 2#1100; //Value is 2#0101
OR Logisches ODER Value:=2#1001 XOR 2#1100; //Value is 2#1101
Operatoren
14
• Fallunterscheidungen– IF..THEN....END_IF– IF..THEN….ELSE….END_IF– IF..THEN….ELSIF..THEN…END_IF
• Verzweigung– CASE..OF….END_CASE
• Schleifen– FOR.. (BY) .. DO..END_FOR– WHILE..DO….END_WHILE– REPEAT...UNTIL…END_REPEAT– EXIT
ST Standard Kommandos
15
• Einfache Bedingung: IF .. THEN .. END_IF
– Die <Bedingung> wird geprüft, und die <Anweisung(en)> zwischen THEN und END_IF ausgeführt wenn die Bedingung zutrifft
– Wenn die Bedingung nicht zutrifft werden die Anweisungen zwischen THEN und END_IF übersprungen.
ST Bedingung IF THEN
16
ST Bedingung IF THEN
• IF..THEN..END_IF Beispiel:
– Value wird auf 10 gesetzt, wenn Enable TRUE ist und PowerON FALSE.
– Ist Enable FALSE oder PowerON TRUE, wird Value auf 0 gesetzt
17
ST Bedingung IF THEN
– Wenn Bedingung erfüllt ist wird nur „Anweisung_1“ ausgeführt, wenn Bedingung nicht erfüllt ist, nur „Anweisung_2“
– Eine IF Anweisung wird nur ausgeführt wenn die Bedingung TRUE ist. Um auch den anderen Fall abzufangen, also wenn die Bedingung FALSE ist, brauchen wir die ELSE Anweisung.
When TRUE
When FALSE
18
ST Bedingung IF THEN ELSIF
– <Bedingung_1> wird geprüft und <Anweisung_1> ausgeführt wenn nötig– Nach <Bedingung_1> wird ein ELSIF nach dem anderen abgearbeitet.
Es können also mehrere Bedingungen und Anweisungen durchlaufen werden
– Wenn keine der Bedingung zutrifft wird die ELSE Anweisung ausgeführt
• Erweiterte IF Anweisung mit ELSIF
19
ST Bedingung IF THEN ELSIF
–IF THEN ELSEIF Fallunterscheidungen können geschachtelt werden
Jede verschachtelte Sektion muss mit END_IF abgeschlossen sein.
Es ist sehr empfohlen die Sektionen einzurücken für bessere Lesbarkeit. Dies wird durch den Editor unterstützt.
Theoretisch kann bis zu einer tiefe von 15 Stufen verschachtelt werden, was natürlich kein schöner Code ist!
20
ST Verzweigung CASE
• Verzweigung mit CASE..OF … ELSE …END_CASE
– Abhängig vom <Status> wird der entsprechende Zweig ausgeführt.– Ist keine der Konditionen zutreffend kann optional eine ELSE Anweisung
abgearbeitet werden – Es ist immer nur ein Zweig pro durchlauf aktiv.
21
ST Verzweigung CASE
• CASE..OF.. END_CASE Beispiel:
Wichtig: Wird der Status innerhalb der Case Struktur geändert, wird dies erst im nächsten Zyklus aktiv. Am Ende des Zweigs wird immer zu END_CASE gesprungen. Dies kann ausgenützt werden um Zykluszeit zu sparen…
22
ST Verzweigung CASE
value=20value=20
Nächster Zyklusvalue=30
value=30value=30
Nächster Zyklusvalue=40
value=40value=40
Nächster Zyklusvalue=50
• Immer nur ein Status innerhalb der Case Struktur ist aktiv
Nächster Zyklusvalue=20
value=10value=10
23
ST Verzweigung CASE
• Beispiel mit Enumerator
ENUM Deklaration
Variablen Deklaration
24
ST Verzweigung CASE
• Beispiel mit Mehrfachauswahl
Mehrfachauswahl ist möglich, durch Kommagetrennte Werte oder mit “..“ als Bereichsangabe
25
Übung 2
• Erstellen sie den folgenden Ablauf
Lösung
26
Übung 3 Lösung
• Erstellen sie den folgenden Ablauf
27
Übung 4
Erstellen sie ein Programm in ST für eine Pumpensteuerung:
-Pumpe 1 einschalten bis Schalter 1 anspricht-Wenn Schalter 1 anspricht schaltet Pumpe 2 ebenfalls ein, bis Schalter 3 anspricht. -Wenn Schalter 3 anspricht 3. Pumpe einschalten.
-Wenn Hauptschalter ausgeschaltet ist alle Pumpen ausschalten.
Tipp: Lösen mit CASE und IF
Lösung
28
• Bedingte Schleifen: FOR.. (BY) .. DO..END_FOR
– Wiederholt die Anweisungen zwischen FOR und END_FOR in einer Schleife von <Anfangswert> bis <Endwert>
– Wenn Endwert erreicht ist wird zu END_FOR gesprungen– Die <Schrittweite> Angabe ist optional. Standard ist 1– Zähler, Anfangswert, Endwert und Schrittweite müssen vom selben
Datentyp sein– Achtung! Die Schleife wird nicht unterbrochen. Zu viele
Wiederholungen / Anweisungen oder Endlosschlaufen führen zu Zykluszeitverletzung
ST Schleifen FOR
29
ST Schleifen FOR
• FOR.. (BY) .. DO..END_FOR Beispiel
– Ohne “BY“ Kommando, wird die Zählervariable bei jedem Durchlauf automatisch um +1 erhöht.
30
• Bedingte Schleifen: WHILE.. DO..END_WHILE
– Wiederholt die <Anweisungen> zwischen WHILE .. END_WHILE solange die <Bedingung> erfüllt ist.
– Wenn die Bedingung nicht erfüllt ist, wird die Schleife beendet.– Die WHILE Schleife ist Kopfgesteuert (wird evtl. nie durchlaufen)– Die Programmabarbeitung bleibt solange in der WHILE Schleife bis
die Bedingung nicht mehr erfüllt ist. Gefahr von Zykluszeitverletzung durch zu viele Anweisungen oder Endlosschlaufe
ST Schleifen WHILE
31
• WHILE..DO..END_WHILE Beispiel
Die Schleife wird verlassen wenn counter den Wert 10 erreicht. Value wird 10 sein.
ST Schleifen WHILE
– ACHTUNG Endlosschleife !:
32
Übung 5a
• Schreiben sie ein Programm, welches ein Dreiecksignal generiert mit 200 Schritten, und in einem Array abspeichert.
1 100 200
100
Triangle: Array[1..200]
Arr
ay
valu
e
Lösung
34
– Anweisung wird ausgeführt, dann die Bedingung geprüft, ist die Bedingung FALSE, wird die Schleife weiter durchlaufen. Bis die Bedingung zutrifft.
– REPEAT ist Fussgesteuert, wird also mindestens einmal durchlaufen– Die Programmabarbeitung bleibt solange in der WHILE Schleife bis die
Bedingung nicht mehr erfüllt ist. Gefahr von Zykluszeitverletzung, durch zu viele Anweisungen oder Endlosschlaufe
ST Schleifen REPEAT UNTIL
• Bedingte Schleifen: REPEAT .. UNTIL .. END_REPEAT
35
• REPEAT..UNTIL..END_REPEAT Beispiel
Nach END_REPEAT, counter ist gleich 142
ST Schleifen REPEAT UNTIL
36
• Unterschied zwischen WHILE Schleife und REPEAT Schleife
WHILE REPEAT
– Bedingung wird VOR der Schleife geprüft
– Schleife wird nie ausgeführt wenn Bedingung nicht erfüllt ist
– Bedingung wird NACH der Schleife geprüft.
– Die Schleife wird immer mindestens einmal durchlaufen
ST Schleifen
37
• Unterbrechen von bedingten Schleifen: EXIT
– EXIT Kommando wird normalerweise in Verbindung mit Schleifen verwendet– EXIT ist zum unterbrechen der Schleife aufgrund einer Bedingung– EXIT Befehl kann hilfreich sein um Endlosschleifen zu verhindern und Zykluszeit zu
sparen z.B. “suchen bis gefunden“– EXIT kann in allen Schleifen verwendet werden FOR / WHILE / REPEAT
ST Schleifen EXIT
38
• EXIT Beispiel
– WHILE wird spätestens nach 40 Durchgängen mit EXIT Befehl abgebrochen
ST Schleifen EXIT
39
• Schreiben sie eine Funktion um die Fakultät n! zu berechnen
• Die Fakultät von 0! ist 1.• Falls der eingegebene Wert negativ ist soll 0 returniert werden• Die Ausgabe soll als DWORD erfolgen, maximaler Eingabewert: 31
Tipps:
Übung 6
40
Function Programm
Beispiel Aufruf:
Übung 6 Lösung
41
• Ein Funktionsblock muss mit einer vorgängig deklarierten Instanz aufgerufen werden
• Eingange werden zugewiesen mit “:= “• Ausgänge werden zugewiesen mit “ =>”• Ein/Ausgänge können mit beidem zugewiesen werden
(Vorzugsweise “:= “)
Funktionsblock Aufruf in ST
InstanzName (<Input_1>:=… ,<Input_n>:=… ,<Output_1> =>… ,<Output_n> =>… , <Input_output_1> :=… ,<Input_output_n>):=… );
InstanzName (<Input_1>:=… ,<Input_n>:=… ,<Output_1> =>… ,<Output_n> =>… , <Input_output_1> :=… ,<Input_output_n>):=… );
42
• Beispiel Funktionsblock Aufruf
Funktionsblock Aufruf in ST
P_oN2(Axis := MC_Axis001,Enable := BB,Axis =>,Status =>ok2,Busy =>NotReady,Error =>Alarm,ErrorID =>ErrID);
P_oN2(Axis := MC_Axis001,Enable := BB,Axis =>,Status =>ok2,Busy =>NotReady,Error =>Alarm,ErrorID =>ErrID);
KOP:
P_oN2 ist eine Instanz des FunktionsblockMC_Power
43
• Die unbenutzten Ein- und Ausgänge können leergelassen oder gar weggelassen werden beim Aufruf
• Die weggelassenen Parameter werden auf default Werte gesetzt
Beispiel
Funktionsblock Aufruf in ST
p_oN (Axis := MC_Axis000,Enable := AA,Axis =>,Status => ok,Busy =>,Error =>,ErrorID =>);
p_oN (Axis := MC_Axis000,Enable := AA,Axis =>,Status => ok,Busy =>,Error =>,ErrorID =>);
p_oN (Axis := MC_Axis000,Enable := AA,Status => ok);
p_oN (Axis := MC_Axis000,Enable := AA,Status => ok);
44
• Ausgangswerte können auch durch Zugriff auf die entsprechenden Elemente der (Instanz)Struktur ausgelesen werden
Funktionsblock Aufrufe in ST
ok:= p_oN.Status ;ok:= p_oN.Status ;NotReady:= p_oN.Busy ;NotReady:= p_oN.Busy ;
p_oN(Enable:=AA) ;p_oN(Enable:=AA) ;
p_oN (Axis := MC_Axis000,Enable := AA,Axis =>,Status => ok,Busy => NotReady,Error =>,ErrorID =>);
p_oN (Axis := MC_Axis000,Enable := AA,Axis =>,Status => ok,Busy => NotReady,Error =>,ErrorID =>);
45
• Eine Funktion kann “normal” aufgerufen werden, es ist keine Deklaration oder Instanz nötig
Beispiel:
Production_1:=ProductionSpeed(Enable:=TRUE, SetPoint:=45,
Diameter:=345.6);
Production_2:=ProductionSpeed(Enable:=TRUE, SetPoint:=46,
Diameter:=220);
Production_1:=ProductionSpeed(Enable:=TRUE, SetPoint:=45,
Diameter:=345.6);
Production_2:=ProductionSpeed(Enable:=TRUE, SetPoint:=46,
Diameter:=220);
<variable>:= FunctionName(<parameter_1>,…,<parameter_n>)<variable>:= FunctionName(<parameter_1>,…,<parameter_n>)
Funktions Aufruf in ST
46
• Die unbenutzten Eingänge können leergelassen oder weggelassen werden
• Die weggelassenen Parameter werden auf default Werte gesetzt
Beispiel:
Funktions Aufruf in ST
Production_3:= ProductionSpeed(Enable:= ,
Diameter:=345.6);
Production_3:= ProductionSpeed(Enable:= ,
Diameter:=345.6);
Production_3:= ProductionSpeed(Diameter:=345.6);
Production_3:= ProductionSpeed(Diameter:=345.6);
47
<variable>:= <Type> . <Type Element>;<variable>:= <Type> . <Type Element>;
<variable>:= <Type_1> . <Type_2> . <Type_2 Element>;<variable>:= <Type_1> . <Type_2> . <Type_2 Element>;
• Auf die Elemente einer Struktur kann mit dem “.” zugegriffen werden
Strukturen
• Strukturen können verschachtelt werden
Name:= Person.Nachname;Name:= Person.Nachname;
Beispiel:
Vorname:= Person.Kind.Vorname;Vorname:= Person.Kind.Vorname;
Beispiel:
48
Beispiel:
Motor_1.Enable:=TRUE;Motor_1.Setpoint:=459;Motor_1.Value:=0;EncoderValue:= Motor_1.Encoder;Motor_1.Status.StandStill:=TRUE;Motor_1.Status.StateCode:=100;
Motor_1.Enable:=TRUE;Motor_1.Setpoint:=459;Motor_1.Value:=0;EncoderValue:= Motor_1.Encoder;Motor_1.Status.StandStill:=TRUE;Motor_1.Status.StateCode:=100;
Strukturen
49
• Erstelle folgenden Funktionsblock in ST:– Execute Eingang positiv Flanken getriggert– Mit jeder steigenden Flanke am Eingang soll die Ausgangsvariable
„Value“ um 1 erhöht werden bis 5, dann zurücksetzen– Ein Bit Ausgang soll mit jeder Flanke am Eingang „Execute“
alternieren von ON-OFF-ON …– Ein Reset Eingang soll beide Ausgänge zurücksetzen
• Aufruf des Funktionsblockes aus ST Programm und KOP
Übung 7
50
Übung 7 Lösung
51
Funktionsblock Aufruf in ST vs. KOP
52
Vergleich zwischen KOP und ST
Logische Verknüpfung
Bedingte Zuweisung
Zuweisung
53
Vergleich zwischen KOP und ST
Verzweigung
*Die Lock Variable wird hier verwende um das CASE verhalten zu erreichen, das heißt nur ein Zweig pro Zyklus wird bearbeitet.
54
Vergleich zwischen KOP und ST
Flankenerkennung
oder ….
55
Vergleich zwischen KOP und ST
Timer und ZählerDeklaration der FB Instanzen
56