SPS-Programmierung in der Ausbildung – Structured Text im Grundprinzip nutzen
Einleitung
SPS-Programmierung in der Ausbildung – Structured Text im Grundprinzip nutzen führt Dich in die textbasierte SPS-Programmierung mit Structured Text (ST) ein. Im Mittelpunkt stehen Variablen, Bedingungen, Zuweisungen, Signalverläufe und lesbarer Code.
Du arbeitest an einer virtuellen Förderanlage. Alle Maschinenabläufe werden zuerst simuliert. Es findet in diesem Lernkurs keine automatische Live-Ansteuerung realer Maschinen statt.

Sicherheitsregel: Reale Arbeiten an Maschinen oder Steuerungen dürfen nur unter geeigneter Fachaufsicht, nach betrieblicher Freigabe und nach den geltenden Sicherheitsregeln erfolgen. Schutzeinrichtungen werden niemals überbrückt, manipuliert oder durch Übungssoftware ersetzt.

Lernziele
Nach dem Kurs kannst Du:
- Variablen mit passenden Datentypen einordnen und sinnvoll benennen.
- Zuweisungen in ST lesen und schreiben.
- Bedingungen mit IF, ELSIF und ELSE nachvollziehen.
- Boolesche Verknüpfungen mit AND, OR und NOT für einfache Steuerungsaufgaben nutzen.
- Einen kurzen SPS-Code so strukturieren, dass sein Zweck schnell erkennbar ist.
- Einen virtuellen Maschinenablauf anhand eines Signalverlaufs prüfen.
- Typische Fehler durch systematische Diagnose eingrenzen.
- Simulation und reale Inbetriebnahme sicher voneinander unterscheiden.
Fachlicher Rahmen
Structured Text ist eine textuelle Programmiersprache aus der IEC-61131-3-Welt. Bei Siemens wird eine verwandte ST-Ausprägung häufig als SCL bezeichnet. ST eignet sich besonders dann, wenn Bedingungen, Berechnungen oder strukturierte Abläufe kompakt und gut lesbar formuliert werden sollen.
Merksatz: Eine SPS-Logik arbeitet mit Signalen und Variablen. Aus Eingangszuständen und internen Zuständen werden neue interne Zustände und Ausgangswerte bestimmt.
Ausbildungsfall: Virtuelle Förderstation
Du betreust in der Ausbildung eine simulierte Förderstation. Ein Werkstück fährt auf einem Band zu einem Sensor. Die Station soll nur in der Simulation betrachtet werden.
| Signal | Datentyp | Bedeutung |
|---|---|---|
| xStart | BOOL | Startanforderung der virtuellen Anlage |
| xStop | BOOL | Stoppanforderung der virtuellen Anlage |
| xTeilAmSensor | BOOL | Werkstück ist am virtuellen Sensor erkannt |
| xFreigabe | BOOL | Simulierte Prozessfreigabe |
| xMotor | BOOL | Virtueller Motorbefehl |
| xMeldungTeil | BOOL | Virtuelle Anzeige für erkanntes Werkstück |
| iZaehler | INT | Beispiel für einen ganzzahligen Zählwert |

Der Übungsfall bildet nur logische Zustände ab. Eine reale Sicherheitsfunktion wie Not-Halt wird nicht durch diesen ST-Code ersetzt.
Lerneinheit 1: Variablen verstehen
Eine Variable speichert einen Wert. Für den Einstieg reichen zwei Datentypen:
| Datentyp | Beispiel | Typischer Einsatz |
|---|---|---|
| BOOL | TRUE oder FALSE | Taster, Sensor, Freigabe, Meldung |
| INT | 0, 1, 2, 3 | Zähler oder ganzzahlige Prozesswerte |
Beispiel einer Deklaration:
VAR
xStart : BOOL;
xStop : BOOL;
xTeilAmSensor : BOOL;
xFreigabe : BOOL;
xMotor : BOOL;
xMeldungTeil : BOOL;
iZaehler : INT;
END_VAR
Leseregel: Präfixe wie x für BOOL oder i für INT sind keine Pflicht der IEC-Norm, können aber in Ausbildung und Betrieb die Lesbarkeit verbessern, wenn ein Betrieb sie einheitlich verwendet.
Lerneinheit 2: Zuweisungen lesen
In ST weist `:=` einer Variablen einen Wert zu.
xMeldungTeil := xTeilAmSensor;
Wenn `xTeilAmSensor` TRUE ist, erhält `xMeldungTeil` ebenfalls TRUE.
iZaehler := 5;
Hier bekommt `iZaehler` den Wert 5.
Lerneinheit 3: Bedingungen formulieren
Mit IF wird eine Bedingung geprüft.
IF xTeilAmSensor THEN
xMeldungTeil := TRUE;
ELSE
xMeldungTeil := FALSE;
END_IF;
Das gleiche Ergebnis lässt sich hier kürzer schreiben:
xMeldungTeil := xTeilAmSensor;
Lesbarer Code bedeutet nicht automatisch möglichst kurzen Code. Entscheidend ist, dass Zweck, Signalfluss und Bedingungen eindeutig nachvollziehbar bleiben.
Lerneinheit 4: Mehrere Bedingungen verknüpfen
Die virtuelle Förderstation darf den Motorbefehl nur setzen, wenn Start aktiv, Stop nicht aktiv, kein Teil am Sensor erkannt und die simulierte Freigabe vorhanden ist.
xMotor := xStart
AND NOT xStop
AND NOT xTeilAmSensor
AND xFreigabe;
Die Bedingung wird TRUE, wenn alle Teilbedingungen erfüllt sind.
Lerneinheit 5: IF, ELSIF und ELSE
Für mehrere Entscheidungspfade kann die Logik explizit formuliert werden:
IF xStop THEN
xMotor := FALSE;
ELSIF xTeilAmSensor THEN
xMotor := FALSE;
ELSIF xStart AND xFreigabe THEN
xMotor := TRUE;
ELSE
xMotor := FALSE;
END_IF;
Hier ist die Priorität gut erkennbar: Zuerst wird Stop geprüft, danach der Sensorzustand und erst anschließend die Startbedingung.
Lerneinheit 6: Lesbaren Code schreiben
| Gut lesbar | Schwerer lesbar |
|---|---|
| sprechende Variablennamen | bedeutungsarme Namen wie a, b, c |
| eine klare Bedingung pro Zeile | lange, unübersichtliche Ausdrücke |
| einheitliche Einrückung | wechselnde Einrückung |
| eindeutige Zuständigkeit für Ausgänge | derselbe Ausgang an vielen Stellen beschrieben |
| kurze Kommentare für den Zweck | Kommentare, die nur den Code wiederholen |
Einheitliche Programmierregeln erleichtern Wartung, Fehlersuche und Zusammenarbeit.
Lerneinheit 7: Zyklus und Signalverlauf
SPS-Programme werden typischerweise in Tasks wiederholt ausgeführt. Für die Ausbildung genügt zunächst dieses Denkmodell:
| Phase | Frage |
|---|---|
| Eingänge betrachten | Welche Signale liegen für den aktuellen Programmdurchlauf vor? |
| Logik auswerten | Welche Bedingungen sind TRUE oder FALSE? |
| Ergebnisse bilden | Welche internen Variablen und virtuellen Ausgänge ergeben sich? |
| Nächster Durchlauf | Welche Signale haben sich geändert? |
Beispiel-Signalverlauf der Simulation:
| Zyklus | xStart | xStop | xTeilAmSensor | xFreigabe | xMotor | Begründung |
|---|---|---|---|---|---|---|
| A | FALSE | FALSE | FALSE | TRUE | FALSE | Start fehlt |
| B | TRUE | FALSE | FALSE | TRUE | TRUE | alle Bedingungen erfüllt |
| C | TRUE | FALSE | TRUE | TRUE | FALSE | Teil wurde erkannt |
| D | TRUE | FALSE | FALSE | TRUE | TRUE | Sensor wieder frei |
| E | TRUE | TRUE | FALSE | TRUE | FALSE | Stop ist aktiv |
| F | TRUE | FALSE | FALSE | FALSE | FALSE | simulierte Freigabe fehlt |

Simulationswerkstatt
Für die Übungen genügt ein SPS-Simulator oder eine virtuelle Steuerungsumgebung. CODESYS bietet beispielsweise einen Simulationsbetrieb, in dem eine Anwendung ohne reales Zielgerät getestet und debuggt werden kann.
Wichtig: Die Übungen bleiben im Simulationsbetrieb. Eine Verbindung zu realen Aktoren, Motorstartern oder Maschinen ist für diesen Kurs nicht vorgesehen.
Virtuelle Anlage beobachten
Stelle in Deiner Simulationsumgebung nacheinander die Signalzustände aus dem Beispiel-Signalverlauf ein.
- Beobachte xMotor.
- Vergleiche das Ergebnis mit Deiner Vorhersage.
- Ändere immer nur ein Eingangssignal.
- Notiere, welche Bedingung den Motorbefehl jeweils sperrt.
Begründetes Feedback: Wenn Du bei jeder Änderung benennen kannst, welche Teilbedingung TRUE oder FALSE geworden ist, analysierst Du die Logik statt nur das Ergebnis abzulesen.
Diagnosefall: Motor bleibt aus
Gegeben ist:
| Variable | Wert |
|---|---|
| xStart | TRUE |
| xStop | FALSE |
| xTeilAmSensor | FALSE |
| xFreigabe | FALSE |
| xMotor | FALSE |
Auftrag: Finde die Ursache, ohne den Code zu verändern.
Hilfe 1: Prüfe die Bedingung von links nach rechts.
Hilfe 2: Für AND müssen alle Teilbedingungen TRUE sein.
Hilfe 3: `xFreigabe` ist FALSE. Deshalb kann der gesamte Ausdruck nicht TRUE werden.
Feedback: Die Diagnose ist richtig, wenn Du nicht nur `xFreigabe` nennst, sondern begründest, warum ein einzelnes FALSE bei einer AND-Verknüpfung den gesamten Motorbefehl sperrt.
Drei gestufte Praxisaufträge
Basisaufgabe: Code lesen
Gegeben ist:
xLampe := xStart AND NOT xStop;
Erkläre, wann `xLampe` TRUE wird.
Hilfe 1: Zerlege den Ausdruck in zwei Teilbedingungen.
Hilfe 2: `NOT xStop` ist TRUE, wenn xStop FALSE ist.
Hilfe 3: Beide Teilbedingungen müssen gleichzeitig TRUE sein.
Begründetes Feedback: Vollständig ist Deine Antwort, wenn Du sagst: `xStart` muss TRUE und `xStop` muss FALSE sein. Damit zeigst Du, dass Du AND und NOT gemeinsam verstanden hast.
Anwendungsaufgabe: Förderlogik erweitern
Erweitere die virtuelle Motorbedingung um `xStoerung`. Bei einer Störung soll der Motorbefehl FALSE sein.
Hilfe 1: Die neue Variable ist vom Typ BOOL.
Hilfe 2: Eine nicht aktive Störung wird mit `NOT xStoerung` geprüft.
Hilfe 3:
xMotor := xStart
AND NOT xStop
AND NOT xTeilAmSensor
AND xFreigabe
AND NOT xStoerung;
Begründetes Feedback: Die Erweiterung ist fachlich schlüssig, wenn eine aktive Störung unabhängig von den übrigen Eingangssignalen den virtuellen Motorbefehl verhindert.
Transferaufgabe: Diagnose statt Probieren
In einer Simulation schaltet `xMotor` unerwartet ein. Entwickle eine Prüfreihenfolge, mit der Du systematisch untersuchst, ob Eingangssignal, Bedingung, Variablenwert oder Programmlogik die Ursache ist.
Hilfe 1: Beginne bei den Eingangswerten.
Hilfe 2: Vergleiche jeden Istwert mit dem erwarteten Signalverlauf.
Hilfe 3: Prüfe danach Bedingung, Zuweisung und Schreibstellen der Ausgangsvariable.
Begründetes Feedback: Eine gute Diagnose verändert nicht sofort den Code. Sie trennt Beobachtung, Hypothese, Prüfung und Korrektur. Dadurch bleibt nachvollziehbar, warum der Fehler entstanden ist.
Lesbarer ST-Code im Ausbildungsalltag
Beispiel: Unübersichtlich und verbessert
Wenig aussagekräftig:
m := a AND NOT b AND c;
Besser:
xMotor := xStart
AND NOT xStop
AND xFreigabe;
Noch klarer wird ein Programm, wenn Variablennamen zum Prozess passen und Bedingungen fachlich gruppiert werden.
CASE als Ausblick
Wenn ein Ablauf mehrere klar unterscheidbare Zustände besitzt, kann CASE übersichtlicher sein als viele verschachtelte IF-Anweisungen.
CASE iZustand OF
0:
xMotor := FALSE;
1:
xMotor := TRUE;
2:
xMotor := FALSE;
ELSE
xMotor := FALSE;
END_CASE;
Für diesen Grundkurs genügt es, CASE als Werkzeug für Zustandslogik zu erkennen. Die sichere Auslegung realer Maschinensteuerungen ist nicht Gegenstand dieser Einstiegsübung.
Sicherheitsrahmen für Ausbildung und Betrieb
| Erlaubt im Kurs | Nicht Teil des Kurses |
|---|---|
| virtuelle Signalzustände setzen | reale Motoren automatisch ansteuern |
| simulierte Ausgänge beobachten | Schutzeinrichtungen überbrücken |
| Signalverläufe analysieren | Sicherheitsfunktionen durch Standard-ST ersetzen |
| Fehler in der Simulation erzeugen | ungeprüfte Änderungen an einer laufenden Anlage |
| Code unter Anleitung besprechen | reale Inbetriebnahme ohne Fachaufsicht und betriebliche Freigabe |
Die DGUV weist ausdrücklich auf die Gefahren manipulierter Schutzeinrichtungen hin. Für die Ausbildung gilt deshalb: Simulation zuerst, reale Arbeit nur im freigegebenen betrieblichen Rahmen.
Interaktive Aufgaben
Quiz: Teste Dein Wissen
Welcher Operator weist in ST einer Variablen einen Wert zu? (:=) (!=) (!==) (!=>)
Welcher Datentyp eignet sich für ein einfaches TRUE-FALSE-Signal? (BOOL) (!INT) (!REAL) (!STRING)
Wann wird eine IF-Anweisung ausgeführt? (Wenn ihre Bedingung TRUE ist) (!Wenn jede Variable FALSE ist) (!Nur beim ersten SPS-Zyklus) (!Nur bei einer Fehlermeldung)
Was bewirkt NOT vor einer booleschen Variablen? (Es kehrt den Wahrheitswert um) (!Es addiert einen Wert) (!Es beendet das Programm) (!Es deklariert eine Variable)
Was muss bei einer AND-Verknüpfung gelten, damit das Gesamtergebnis TRUE ist? (Alle Teilbedingungen sind TRUE) (!Mindestens eine Teilbedingung ist TRUE) (!Alle Teilbedingungen sind FALSE) (!Die erste Teilbedingung ist FALSE)
Welche Benennung ist für einen booleschen Motorbefehl im gezeigten Namensschema am verständlichsten? (xMotor) (!m1x) (!wert) (!abc)
Warum wird in diesem Kurs zuerst simuliert? (Um Logik und Signalverhalten ohne direkte Maschinenansteuerung zu prüfen) (!Damit Schutzeinrichtungen nicht mehr benötigt werden) (!Damit reale Ausgänge automatisch gesetzt werden) (!Damit betriebliche Freigaben entfallen)
Was ist bei einer systematischen Diagnose zuerst sinnvoll? (Eingangssignale und Istwerte prüfen) (!Sofort den gesamten Code neu schreiben) (!Schutzeinrichtungen umgehen) (!Alle Ausgänge dauerhaft auf TRUE setzen)
Wofür eignet sich CASE besonders als Ausblick? (Für mehrere klar unterscheidbare Zustände) (!Zum Deklarieren jedes BOOL-Werts) (!Zum Ersetzen einer Fachaufsicht) (!Zum Überbrücken eines Stoppsignals)
Welche Aussage zu lesbarem SPS-Code ist richtig? (Sprechende Namen und einheitliche Struktur erleichtern Diagnose und Wartung) (!Möglichst kurze Variablennamen sind immer besser) (!Einrückung hat grundsätzlich keinen Nutzen) (!Ausgänge sollten an möglichst vielen Stellen beschrieben werden)
Memory
| BOOL | Wahrheitswert |
| INT | Ganzzahl |
| Zuweisung | Wertübergabe |
| Bedingung | Entscheidung |
| Simulation | Virtueller Test |
| Diagnose | Fehlereingrenzung |
Drag and Drop
| Ordne die richtigen Begriffe zu. | Thema |
|---|---|
| BOOL | Binäres Signal |
| INT | Ganzzahliger Wert |
| IF | Bedingte Ausführung |
| NOT | Logische Negation |
| Simulation | Test ohne reales Zielgerät |
Kreuzworträtsel
| Variable | Wie heißt ein benannter Speicherplatz für einen Wert? |
| Zuweisung | Wie nennt man das Übertragen eines Werts mit dem Operator Doppelpunkt-Gleich? |
| Bedingung | Was wird mit IF geprüft? |
| Boolesch | Wie nennt man einen Wahrheitswert mit TRUE oder FALSE? |
| Simulation | Wie heißt das Testen auf einem virtuellen Zielgerät? |
| Diagnose | Wie heißt die systematische Eingrenzung eines Fehlers? |
LearningApps
Lückentext
Offene Aufgaben
Leicht – Basis
- Variablenplan: Erstelle für eine virtuelle Anlage mit Taster, Sensor, Lampe und Zähler eine kleine Variablentabelle mit Datentyp und Bedeutung.
- Code lesen: Beschreibe in eigenen Worten, wann `xMotor := xStart AND NOT xStop;` den Wert TRUE ergibt.
- Signalverlauf: Zeichne für fünf Simulationszyklen die Werte von xStart, xStop und xMotor als einfache Zeitlinie.
- Lesbarer Code: Überarbeite fünf absichtlich unklare Variablennamen und begründe Deine neuen Namen.
Feedback-Kriterium Basis: Deine Lösung ist überzeugend, wenn Datentyp, Signalbedeutung und logische Wirkung eindeutig zusammenpassen.
Standard – Anwendung
- Virtuelle Förderanlage: Programmiere die gezeigte Motorbedingung in einer reinen Simulation und dokumentiere mindestens vier Testfälle.
- Fehlerdiagnose: Erzeuge absichtlich einen falschen Eingangswert in der Simulation und beschreibe Beobachtung, Vermutung, Prüfung und Ergebnis.
- Bedingungen erweitern: Ergänze die virtuelle Anlage um ein boolesches Störungssignal, das den Motorbefehl sperrt.
- Code-Review: Tausche einen kurzen ST-Abschnitt mit einer Lernpartnerin oder einem Lernpartner und markiere Stellen, die ohne Zusatzwissen schwer verständlich sind.
Feedback-Kriterium Anwendung: Gute Lösungen zeigen nicht nur funktionierenden Code, sondern auch passende Testfälle und nachvollziehbare Begründungen.
Schwer – Transfer
- Diagnosestrategie: Entwickle einen allgemeinen Ablaufplan zur Fehlersuche an virtuellen SPS-Programmen und wende ihn auf zwei unterschiedliche Fehlerbilder an.
- Zustandsmodell: Entwirf für eine virtuelle Station die Zustände Warten, Fördern und Teil erkannt und skizziere, wie CASE diese Zustände abbilden könnte.
- Wartbarkeit: Vergleiche zwei funktional gleiche ST-Lösungen und bewerte sie nach Lesbarkeit, Änderbarkeit und Diagnosefreundlichkeit.
- Ausbildungsprojekt: Produziere ein kurzes Erklärvideo oder eine Bildschirmaufnahme, in der Du eine virtuelle Förderlogik testest, den Signalverlauf erklärst und die Sicherheitsgrenze zwischen Simulation und realer Anlage benennst.
Feedback-Kriterium Transfer: Eine starke Transferleistung verbindet Code, Prozessverständnis, Diagnose und sicheres Vorgehen und begründet, warum die gewählte Lösung wartbar ist.


Lernkontrolle
- Logik erklären: Erkläre, warum `xStart = TRUE` allein nicht genügt, wenn der Motorbefehl aus mehreren AND-verknüpften Bedingungen gebildet wird.
- Fehlerursache bewerten: Ein virtueller Ausgang bleibt FALSE. Entwickle mindestens drei mögliche Ursachen auf Ebene von Eingang, Bedingung und Zuweisung und ordne eine sinnvolle Prüfreihenfolge.
- Code vergleichen: Vergleiche eine direkte boolesche Zuweisung mit einer IF-ELSE-Lösung. Begründe, wann welche Darstellung leichter zu verstehen ist.
- Signalverlauf übertragen: Leite aus einem gegebenen Signalverlauf ab, in welchem Zyklus eine Bedingung ihren Wert wechselt und begründe Deine Entscheidung.
- Sicherheitsgrenze: Begründe, warum ein erfolgreich getestetes Simulationsprogramm nicht automatisch ohne weitere Prüfung und Freigabe an einer realen Maschine eingesetzt werden darf.
- Wartbarkeit beurteilen: Bewerte einen kurzen ST-Code hinsichtlich Variablennamen, Einrückung, eindeutiger Ausgangszuweisung und Diagnosefähigkeit.
Lernnachweis
Für einen Lernnachweis zu diesem Thema ist wichtig, dass Du:
- die Bedeutung von BOOL- und INT-Variablen erklären kannst,
- Zuweisungen und einfache ST-Ausdrücke sicher liest,
- IF-, ELSIF- und ELSE-Strukturen nachvollziehst,
- AND, OR und NOT auf Signalbedingungen anwendest,
- aus Eingangssignalen einen erwarteten Ausgangszustand ableitest,
- Signalverläufe zur Diagnose nutzt,
- lesbaren Code mit verständlichen Variablennamen gestaltest,
- eine Fehlersuche nachvollziehbar dokumentierst,
- Simulation und reale Inbetriebnahme fachlich unterscheidest,
- die Grenzen des Kurses beachtest: keine Umgehung von Schutzeinrichtungen, keine automatische Live-Ansteuerung und reale Arbeiten nur unter geeigneter Fachaufsicht und betrieblicher Freigabe.
Fachliche Quellen und Medienrechte
Fachliche Grundlagen:
- Wikipedia: Strukturierter Text – Überblick zu ST und Einordnung in IEC 61131-3.
- CODESYS: Strukturierter Text – Herstellerdokumentation zu ST.
- CODESYS: IF-Anweisung – Syntax und Verhalten von IF, ELSIF und ELSE.
- CODESYS: CASE-Anweisung – Syntax und Einsatz von CASE.
- CODESYS: Testen im Simulationsbetrieb – Testen ohne reales Zielgerät.
- Siemens Programming Styleguide – Hinweise zu einheitlichem und wartbarem SPS-Code.
- DGUV/IFA: Manipulation von Schutzeinrichtungen verhindern – Arbeitsschutz und Sensibilisierung für sichere Maschinenarbeit.
Verwendete Wikimedia-Commons-Medien:
- `PLC Control Panel.png` – Wikimedia Commons, vom Rechteinhaber als gemeinfrei freigegeben.
- `PLC structure.JPG` – Wikimedia Commons, CC BY-SA 2.0 Taiwan.
- `Belt conveyor system.jpg` – Wikimedia Commons, CC BY-SA 4.0.
- `Photoelectric sensor.jpg` – Wikimedia Commons, CC BY-SA 3.0.
- `OSP Emergency stop.svg` – Wikimedia Commons, CC0 1.0.
YouTube-Medien: Die eingebetteten Videos wurden als vorhandene YouTube-Videos geprüft. Sie werden nur über den YouTube-Player eingebettet und nicht als OER neu lizenziert. Rechte verbleiben bei den jeweiligen Rechteinhabern; Nutzung und Einbettung richten sich nach den YouTube-Bedingungen und den Einstellungen des jeweiligen Uploads.
OERs zum Thema

Das Bild zeigt als Vergleich ein grafisches Ladder-Beispiel. Es steht auf Wikimedia Commons unter CC BY-SA 4.0. ST dagegen formuliert Logik textuell.
Verknüpfte Lernbereiche
aiMOOC-Projekte
Schulfach+


aiMOOCs


aiMOOC Projekte


MOOCwiki · Deutsch
Nach dem Lernen ist vor dem Lernen
Entdecke direkt den nächsten Lernkurs. Weitere Inhalte erscheinen, wenn Du weiter nach unten scrollst.
Zur MOOCwiki-HauptseiteMediathek
Mediathek wird aus dem Wiki geladen ...
Keine passenden Inhalte gefunden. Bitte ändere Suche oder Filter.
NEWSLernweltNOAH fragen