SPS-Programmierung #03: Bedingte Anweisungen (IF..THEN.… — Transcript

In diesem Video erklärt Christian Stöcker die bedingten Anweisungen IF..THEN..ELSE und CASE..OF in SPS-Programmen mit praktischen Beispielen.

Key Takeaways

  • If-Then-Else ist grundlegend für bedingte Anweisungen in SPS-Programmen und kann verschachtelt werden.
  • Case-Of eignet sich besonders zur Abbildung von Zuständen anhand ganzer Zahlenwerte.
  • Else-Klauseln sind bei beiden Anweisungen optional, erhöhen aber die Flexibilität.
  • Zustandsdiagramme lassen sich gut mit Case-Of umsetzen und sind skalierbar für komplexe Steuerungen.
  • Praxisnahe Beispiele erleichtern das Verständnis der Syntax und Anwendung in ST.

Summary

  • Vorstellung der If-Then-Else-Anweisung zur Fallunterscheidung in SPS-Programmen.
  • Erklärung der Syntax und Verwendung von Vergleichsoperatoren in If-Bedingungen.
  • Demonstration von Bool-Variablen als Bedingungen und der optionalen Else-Klausel.
  • Erläuterung der Verschachtelung von If-Anweisungen und Nutzung von Else If.
  • Einführung in die Case-Of-Anweisung zur Wertabfrage ganzer Zahlenvariablen.
  • Erklärung von Einzelfällen, Gruppen und Wertebereichen in Case-Of.
  • Optionale Else-Klausel in Case-Of zur Behandlung nicht definierter Werte.
  • Praktisches Beispiel eines Blinklichts zur Veranschaulichung eines Zustandsdiagramms mit Case-Of.
  • Vergleich der Case-Of-Lösung mit einer einfacheren Implementierung des Blinklichts.
  • Hinweis auf die Skalierbarkeit der Case-Of-Methode für komplexere Zustandsdiagramme.

Full Transcript — Download SRT & Markdown

00:00
Speaker A
Um Fallunterscheidungen in Programmen vornehmen zu können, bietet ST, genau wie viele andere Programmiersprachen auch, die If-Then-Else Anweisung und die Case-Of Anweisung.
00:09
Speaker A
Hier erkläre ich die Syntax beider Anweisungen und demonstriere das Ganze an sehr einfachen und nachvollziehbaren Programmbeispielen.
00:17
Speaker A
Starten wir zunächst mal mit der If-Then-Else Anweisung. Klassisch wird ein If verwendet, um eine Unterscheidung zwischen zwei möglichen Fällen vorzunehmen.
00:25
Speaker A
Und entsprechend darauf zu reagieren. Zum Beispiel könnte man ein Ventil im Zulauf eines Reaktors schließen, wenn der Füllstand eine gewisse Höhe überschritten hat.
00:33
Speaker A
Der Füllstand wird hier durch die Real Variable R Level repräsentiert und B Valve On ist das Signal zum Ansteuern eines Auf-Zu-Ventils. Wenn also hier der Füllstand größer als 10 ist, dann wird das Ventil geschlossen, anderenfalls geöffnet.
00:48
Speaker A
Wenn also diese Bedingung hier nach dem If den Wahrheitswert True hat, werden die dann folgenden Anweisungen ausgeführt. Das ist hier nur eine Anweisung, das könnten aber auch mehrere sein.
00:57
Speaker A
Und wenn die Bedingung nicht zutrifft, werden die Anweisungen nach dem Else ausgeführt und auch das könnten natürlich wieder mehrere sein.
01:06
Speaker A
Wichtig ist zu beachten, dass die If-Anweisung mit dem End If abgeschlossen wird.
01:10
Speaker A
So für die Formulierung der Bedingung hier nach dem If habe ich in diesem Beispiel das größer gewählt.
01:20
Speaker A
Je nach Problemstellung braucht man hier aber vielleicht andere Vergleichsoperatoren.
01:25
Speaker A
Welches noch gibt, seht ihr hier auf der rechten Seite.
01:31
Speaker A
Häufig sieht man als Bedingung nach dem If kein Vergleich, sondern einfach nur einen Ausdruck, so wie dieser hier.
01:40
Speaker A
Ich habe hier also aus der Real Variablen eine Bool Variable gemacht.
01:47
Speaker A
Im Bild der Anlagentechnik habe ich also die kontinuierliche Füllstandsmessung durch einen diskret arbeitenden Schwimmschalter ersetzt.
01:55
Speaker A
B Level High ist also eine Bool Variable, die den Wahrheitswert True oder False haben kann.
02:04
Speaker A
Und der Wert dieser Variablen ist damit eine Bedingung, die in dem If ausgewertet werden kann.
02:10
Speaker A
Okay, und dann gibt es noch eine Abwandlung von dieser If-Anweisung, die man auch noch häufig vorfindet.
02:14
Speaker A
Nämlich ein If ohne einen darauffolgenden Else-Block.
02:20
Speaker A
Das Else ist nämlich optional, das heißt, es kann auch weggelassen werden.
02:24
Speaker A
Und das kann ich in diesem Beispiel auch noch zeigen.
02:29
Speaker A
Ich habe hier also noch eine Variable B Auto Mode hinzugefügt.
02:35
Speaker A
Wieder vom Typ Bool.
02:40
Speaker A
Und die bedingten Anweisungen werden jetzt nur ausgeführt, wenn B Auto Mode wiederum True ist.
02:46
Speaker A
Und dieses Beispiel zeigt noch etwas, nämlich dass If-Then-Else Anweisungen auch geschachtelt werden können.
02:53
Speaker A
Für das Schachteln von If-Then-Else Anweisungen gibt's aber auch noch eine weitere Möglichkeit.
02:59
Speaker A
Und zwar mit Else If.
03:02
Speaker A
Um das noch zu demonstrieren, verändere ich das Beispiel noch einmal.
03:06
Speaker A
R Level repräsentiert also wieder einen Wert kontinuierlich gemessenen Füllstand.
03:12
Speaker A
Und R Pump soll jetzt prozentual die Förderleistung einer Pumpe sein.
03:18
Speaker A
Wenn jetzt der Füllstand größer als 10 ist, soll die Pumpe 100%, also die maximale Förderleistung bringen.
03:25
Speaker A
Anderenfalls soll die Pumpe eben aus sein.
03:28
Speaker A
So, wenn man jetzt aber die Förderleistung nicht nur zwischen zwei Werten, sondern vielleicht stufenweise verstellen will, kann man das so machen.
03:38
Speaker A
Ist also die erste If-Bedingung nicht erfüllt, werden hier noch weitere Bedingungen geprüft.
03:47
Speaker A
Eine andere Möglichkeit, eine bedingte Anweisung in ST zu schreiben.
03:51
Speaker A
Ist das Case Of.
03:56
Speaker A
Die Syntax sieht dafür zunächst einmal allgemein so aus.
04:02
Speaker A
In einer Case-Anweisung wird also nicht die Erfüllung einer Bedingung überprüft, wie beim If, sondern es wird hier der Wert einer ganzzahligen Variablen.
04:13
Speaker A
Häufig einer Integer Variablen überprüft und in Abhängigkeit dieses Wertes werden eben unterschiedliche Anweisungen ausgeführt.
04:21
Speaker A
Dabei kann man die Werte, bei denen also bestimmte Programmteile abgearbeitet werden sollen, einzeln angeben, wie hier bei den Fällen 0 oder 2.
04:31
Speaker A
Oder man kann die Fälle auch durch Komma getrennt aufzählen und damit im Prinzip gruppieren, wie in diesem Beispiel bei 1, 3 oder 5.
04:39
Speaker A
Hier würden also in dem Fall, dass N State die Werte 1, 3 oder 5 hat, die gleichen Anweisungen ausgeführt werden.
04:46
Speaker A
Oder man kann für die Werte auch einen Bereich angeben, wie hier bei 6 bis 10.
04:52
Speaker A
Und dann kann man auch optional ein Else einfügen, dahinter stehen also die Anweisungen, die ausgeführt werden, wenn die Variable keinen der zuvor aufgezählten Werte hat.
05:00
Speaker A
Dieses Else ist aber optional, muss also nicht zwingend in dem Case Of enthalten sein.
05:06
Speaker A
So ein Case Of kann man total gut dafür verwenden, unterschiedliche Zustände abzubilden, die ein Programm.
05:12
Speaker A
Oder später auch die Steuerung einnehmen soll.
05:16
Speaker A
Das klingt erstmal abstrakt, kann man aber an diesem einfachen Beispiel eines Blinklichts ganz gut verdeutlichen.
05:22
Speaker A
Das hier ist ein UML Zustandsdiagramm, mit dem man Zustände von Software beschreiben kann.
05:28
Speaker A
Ausgehend von einem Startpunkt wechselt das Programm in den Zustand 0.
05:34
Speaker A
In dem das Licht oder eine LED an ist.
05:39
Speaker A
Wenn das Programm in diesem Zustand wechselt, wird ein Timer gestartet.
05:46
Speaker A
Und das Programm verbleibt so lange in diesem Zustand, bis die Bedingung, die hier an dem abgehenden Pfeil steht, erfüllt ist.
05:55
Speaker A
Also hier der Timer abgelaufen ist.
05:58
Speaker A
Wenn der Zustand verlassen wird, wird der Timer noch zurückgesetzt.
06:01
Speaker A
Und dann wechselt das Programm in den Zustand 1, der fast genauso aussieht wie der Zustand 0.
06:10
Speaker A
Nur mit dem Unterschied, dass hier das Licht oder die LED aus ist.
06:15
Speaker A
Das Programm wechselt also immer zwischen diesen beiden Zuständen hin und her.
06:21
Speaker A
Und dadurch blinkt dann also die LED.
06:25
Speaker A
So, was hat das jetzt noch mal mit dem Case Of zu tun?
06:29
Speaker A
Das seht ihr jetzt hier in dem Programm.
06:34
Speaker A
Im Deklarationsteil ergänze ich zunächst noch eine Variable, die für die Ansteuerung einer LED verwendet werden könnte.
06:41
Speaker A
B LED.
06:43
Speaker A
Und noch einen Funktionsbaustein für eine Einschalverzögerung, T Blink.
06:49
Speaker A
Um die Dauer für das Verweilen in den Zuständen zu realisieren.
06:54
Speaker A
So, wenn das Programm startet, hat die Variable N State den Wert 0.
06:59
Speaker A
In diesem Case Of wird dann also nur der Fall 0 abgearbeitet.
07:05
Speaker A
Und in dem Zustand wird zunächst der Timer mit der Zeit von 2 Sekunden gestartet und die LED angeschaltet.
07:12
Speaker A
Dann wird darauf gewartet, dass der Timer abläuft, das heißt hier bei der Einschalverzögerung geht das Signal Q um 2 Sekunden verzögert auf True.
07:20
Speaker A
Wenn also diese Bedingung erfüllt ist, wird der Timer zurückgesetzt und der Wert von N State wird auf 1 gesetzt.
07:27
Speaker A
Das ist sozusagen der Wechsel des Zustands.
07:31
Speaker A
Und im nächsten Zyklus der SPS arbeitet das Programm in diesem Case Of dann also die Anweisung ab, die hinter der 1 stehen.
07:39
Speaker A
Es wird also wieder der Timer gestartet und die LED ausgeschaltet, wenn der Timer abgelaufen ist.
07:46
Speaker A
Wird der Timer wieder zurückgesetzt und N State bekommt den Wert 0, so dass alles wieder von vorne losgeht.
07:54
Speaker A
Wenn ich die SPS jetzt starte, sieht man im Online-Modus, dass also der Wert von B LED im Takt von 2 Sekunden immer wechselt.
08:05
Speaker A
Okay, wenn ihr ein bisschen Vorerfahrung beim Programmieren habt, fragt ihr euch jetzt vielleicht, ob dieses Blinklicht nicht vielleicht ein bisschen zu kompliziert ist.
08:12
Speaker A
Und tatsächlich gäbe es eine viel einfachere Lösung ohne ein Case Of, nämlich diese hier.
08:18
Speaker A
Aber in diesem Beispiel ging es mir ja darum, erstens eine Anwendung für das Case Of zu zeigen.
08:25
Speaker A
Und zweitens schon mal einen Weg für eine mögliche Implementierung eines Zustandsdiagramms zu skizzieren.
08:31
Speaker A
Diese Umsetzung, die ich gezeigt habe, eines Zustandsdiagramms mit dem Case Of funktioniert nämlich fast Kochrezeptartig auch für viel umfangreichere Zustandsdiagramme.
Topics:SPS-ProgrammierungIf-Then-ElseCase-OfStructured TextBedingte AnweisungenZustandsdiagrammAutomatisierungstechnikChristian StöckerProgrammbeispieleBlinklicht

Frequently Asked Questions

Was ist der Unterschied zwischen If-Then-Else und Case-Of in SPS-Programmen?

If-Then-Else prüft Bedingungen und führt Anweisungen je nach Wahrheitswert aus, während Case-Of den Wert einer ganzzahligen Variablen abfragt und je nach Wert unterschiedliche Anweisungen ausführt.

Kann man in ST If-Anweisungen ohne Else verwenden?

Ja, das Else ist optional und kann weggelassen werden, wenn keine Anweisungen für den Fall benötigt werden, dass die Bedingung nicht erfüllt ist.

Wie kann man mit Case-Of Zustandsdiagramme in SPS-Programmen umsetzen?

Man verwendet eine Integer-Variable zur Zustandsverwaltung und definiert in der Case-Of-Anweisung für jeden Zustand die entsprechenden Aktionen, wodurch Zustandswechsel und Steuerungslogik abgebildet werden können.

Get More with the Söz AI App

Transcribe recordings, audio files, and YouTube videos — with AI summaries, speaker detection, and unlimited transcriptions.

Or transcribe another YouTube video here →