Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Grundlagen der Programmierung mit Strukturiertem Text

Ähnliche Präsentationen


Präsentation zum Thema: "Grundlagen der Programmierung mit Strukturiertem Text"—  Präsentation transkript:

1 Grundlagen der Programmierung mit Strukturiertem Text
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 IEC 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 Syntax Einfärbung Standardfarben, diese können teilweise in den Optionen umgestellt werden BLAU: Ablauf, Anweisungen, Operatoren GRÜN: Kommentare SCHWARZ: Variablen, Konstanten, Funktionen, Funktionsblöcke ROT: Globale Variablen, Globale Konstanten, Strings

5 ST Editor Variablen Deklaration ST Programm Editor

6 Zuweisungen Zuweisungen von Werten, Ausdrücken oder Zuständen mit “:=“ Anweisungen müssen am Zeilenende mit einem Semikolon abgeschlossen werden “;“ Es können Leerzeichen und Tabulatoren verwendet werden um die Lesbarkeit zu verbessern

7 Zuweisungen Komplexe, lange Ausdrücke können auf mehrere Linien gesplittet werden mittels „Return“ (). Der Ausdruck wird mit dem Semikolon “;“ abgeschlossen Integer Werte können auch Binär oder Hexadezimal eingegeben werden

8 Kommentare Blockkommentare können irgendwo im ST Programm platziert werden, verwendet als Zeilen oder Mehrzeilen Kommentar. Start mit “(*” Ende mit “*)” 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 empfohlen Lesbar + Konsistent

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

11 Reservierte Schlüsselwörter:
Syntax Regeln Reservierte Schlüsselwörter: Schlüsselwörter dürfen nicht verwendet werden, da diese für ST Kommandos reserviert sind. 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.. Sonderzeichen können nicht in Variabel Namen benutzt werden. Ausnahme: Tiefstrich “_” (nicht an erster Position) >, <=, >=, <>, :=, -, *, /, &, (*,*), 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…

12 Übung 1 Finde die 7 Fehler… : ;

13 Operatoren ( ) Ausführungs Priorisierung
Value:=(1+2) *(3+4) // Value is 21 Prioritä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:= ; // Value is 225 - Subtraktion Value:= ; // 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 120 NJ5_ST introduction_v3.2_E.ppt

14 ST Standard Kommandos Fallunterscheidungen Verzweigung Schleifen
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

15 ST Bedingung IF THEN 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.

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 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 Wenn Bedingung erfüllt ist wird nur „Anweisung_1“ ausgeführt, wenn Bedingung nicht erfüllt ist, nur „Anweisung_2“

18 ST Bedingung IF THEN ELSIF
Erweiterte IF Anweisung mit 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

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 Immer nur ein Status innerhalb der Case Struktur ist aktiv value=10 value=20 value=30 value=40 Nächster Zyklus value=20 Nächster Zyklus value=30 Nächster Zyklus value=40 Nächster Zyklus value=50

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 Lösung Erstellen sie den folgenden Ablauf

26 Übung 3 Lösung Erstellen sie den folgenden Ablauf

27 Übung 4 Lösung 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

28 ST Schleifen FOR 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

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 ST Schleifen WHILE 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

31 ST Schleifen WHILE WHILE..DO..END_WHILE Beispiel
Die Schleife wird verlassen wenn counter den Wert 10 erreicht. Value wird 10 sein. ACHTUNG Endlosschleife !:

32 Übung 5a Lösung Schreiben sie ein Programm, welches ein Dreiecksignal generiert mit 200 Schritten, und in einem Array abspeichert. 1 100 200 Triangle: Array[1..200] Array value

33 Übung 5b Lösung Schreiben sie ein Programm welche die Fibonacci Zahl berechnen kann. Sie fangen mit 0 und 1 an, dann ist jede Fibonacci-Zahl gleich der Summe der beiden vorhergehenden Fibonacci-Zahlen Eingabe Ausgabe 1 2 3 4 5 6 8 7 13 21 9 34 10 55 11 89 12 144 ..

34 ST Schleifen REPEAT UNTIL
Bedingte Schleifen: REPEAT .. UNTIL .. END_REPEAT 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

35 ST Schleifen REPEAT UNTIL
REPEAT..UNTIL..END_REPEAT Beispiel Nach END_REPEAT, counter ist gleich 142

36 ST Schleifen WHILE REPEAT
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

37 ST Schleifen EXIT 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

38 ST Schleifen EXIT EXIT Beispiel
WHILE wird spätestens nach 40 Durchgängen mit EXIT Befehl abgebrochen

39 Übung 6 Schreiben sie eine Funktion um die Fakultät n! zu berechnen
Tipps: 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

40 Übung 6 Lösung Function Programm Beispiel Aufruf:

41 Funktionsblock Aufruf in ST
Ein Funktionsblock muss mit einer vorgängig deklarierten Instanz aufgerufen werden InstanzName (<Input_1>:=… , <Input_n>:=… , <Output_1> =>… , <Output_n> =>… , <Input_output_1> :=… , <Input_output_n>):=… ); Eingange werden zugewiesen mit “:= “ Ausgänge werden zugewiesen mit “ =>” Ein/Ausgänge können mit beidem zugewiesen werden (Vorzugsweise “:= “)

42 Beispiel Funktionsblock Aufruf
Funktionsblock Aufruf in ST Beispiel Funktionsblock Aufruf P_oN2( Axis := MC_Axis001, Enable := BB, Axis =>, Status =>ok2, Busy =>NotReady, Error =>Alarm, ErrorID =>ErrID); P_oN2 ist eine Instanz des Funktionsblock MC_Power KOP:

43  Funktionsblock Aufruf in ST
Die unbenutzten Ein- und Ausgänge können leergelassen oder gar weggelassen werden beim Aufruf Die weggelassenen Parameter werden auf default Werte gesetzt Beispiel p_oN ( Axis := MC_Axis000, Enable := AA, Axis =>, Status => ok, Busy =>, Error =>, ErrorID =>); p_oN ( Axis := MC_Axis000, Enable := AA, Status => ok);

44  Funktionsblock Aufrufe in ST
Ausgangswerte können auch durch Zugriff auf die entsprechenden Elemente der (Instanz)Struktur ausgelesen werden p_oN ( Axis := MC_Axis000, Enable := AA, Axis =>, Status => ok, Busy => NotReady, Error =>, ErrorID =>); p_oN(Enable:=AA) ; ok:= p_oN.Status ; NotReady:= p_oN.Busy ;

45 Funktions Aufruf in ST Eine Funktion kann “normal” aufgerufen werden, es ist keine Deklaration oder Instanz nötig <variable>:= FunctionName(<parameter_1>,…,<parameter_n>) Beispiel: Production_1:=ProductionSpeed( Enable:=TRUE, SetPoint:=45, Diameter:=345.6); Production_2:=ProductionSpeed( Enable:=TRUE, SetPoint:=46, Diameter:=220);

46  Funktions Aufruf in ST
Die unbenutzten Eingänge können leergelassen oder weggelassen werden Die weggelassenen Parameter werden auf default Werte gesetzt Beispiel: Production_3:= ProductionSpeed( Enable:= , Diameter:=345.6); Production_3:= ProductionSpeed( Diameter:=345.6);

47 Strukturen Auf die Elemente einer Struktur kann mit dem “.” zugegriffen werden <variable>:= <Type> . <Type Element>; Name:= Person.Nachname; Beispiel: Strukturen können verschachtelt werden <variable>:= <Type_1> . <Type_2> . <Type_2 Element>; Vorname:= Person.Kind.Vorname; Beispiel:

48 Strukturen 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;

49 Übung 7 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

50 Übung 7 Lösung

51 Funktionsblock Aufruf in ST vs. KOP

52 Vergleich zwischen KOP und ST
Zuweisung Logische Verknüpfung Bedingte 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ähler Deklaration der FB Instanzen

56


Herunterladen ppt "Grundlagen der Programmierung mit Strukturiertem Text"

Ähnliche Präsentationen


Google-Anzeigen