SPS heißt speicherprogrammierbare Steuerung (englisch PLC). Sie liest Signale, verarbeitet sie nach einem gespeicherten Programm und steuert damit Ausgänge. Das Programm legt fest, welche Reaktion zu welchen Bedingungen passt.
Beispiel: Ein Sensor erkennt ein Werkstück. Ist zusätzlich die Betriebsfreigabe vorhanden, schaltet die SPS eine Meldelampe ein. Für einen anderen Ablauf änderst du die Programmlogik.
Sensor → Eingang → Programm → Ausgang → Aktor. Ein Sensor liefert Information; ein Aktor bewirkt etwas, etwa Licht, Bewegung oder einen Ventilhub.
Die Bausteine
CPU: führt das Programm aus. Speicher: enthält Programm und Daten. Eingänge: nehmen Signale auf. Ausgänge: geben Schaltsignale oder Sollwerte aus.
Digital: zwei Zustände, z. B. Taster betätigt / nicht betätigt. Analog: ein Wertebereich, z. B. Druck über 4–20 mA. Das Modul wandelt das analoge Signal in einen Zahlenwert um.
HMI: ein Bedienpanel zum Anzeigen und Bedienen. Es ist hilfreich, aber für die erste Übung nicht nötig.
02 · Was benötigt man?
Zum Lernen reicht Simulation
Ein PC und eine passende SPS-Entwicklungsumgebung.
Ein Simulator oder eine Soft-SPS, sofern vom gewählten System unterstützt.
Eine kleine Aufgabe, eine Ein-/Ausgangsliste und ein Testablauf.
Programmiersoftware, Gerätemodell, Firmware und Simulator müssen zusammenpassen. Lizenz und unterstützte Funktionen unterscheiden sich je nach Hersteller. Die Übungen auf dieser Seite laufen direkt im Browser.
Für einen realen Übungsaufbau
SPS mit passenden Ein-/Ausgängen, geeignete Versorgung (bei vielen kleinen DC-Systemen 24 V DC), geschützter Übungsaufbau, Taster/Sensoren, eine passende Signallampe, Klemmen und Leitungen sowie die vorgesehene Programmierschnittstelle, oft Ethernet.
Vor der Auswahl prüfen
Wie viele digitale und analoge Signale gibt es?
Passen Versorgung, Signalpegel, PNP/NPN und Bezugspotential zum Eingang?
Relais- oder Transistorausgang? Welche Spannung, Last und Schutzbeschaltung sind zulässig?
Wie schnell muss die Steuerung reagieren? Werden schnelle Zähler oder spezielle Module gebraucht?
Ein Motor wird üblicherweise über ein geeignetes Schütz oder einen Antrieb angesteuert. Er gehört nicht direkt an einen kleinen SPS-Ausgang. Reale Verdrahtung erfolgt nach Schaltplan und Herstellerunterlagen durch entsprechend qualifizierte Personen.
03 · So denkt die SPS im Kreis
Ein vereinfachter Zyklus: Eingänge erfassen, Programm bearbeiten, Ausgänge übertragen. Das Eingangsabbild ist eine Momentaufnahme. Ändert sich der Sensor danach, sieht die Logik hier erst beim nächsten Einlesen den neuen Zustand. Tatsächliche I/O-Aktualisierung, Tasks und direkte Zugriffe sind systemabhängig.
Den Zyklus Schritt für Schritt ausführen
Aufgabe: Die Lampe leuchtet, wenn Sensor A und Freigabe B aktiv sind. Schalte beide ein. Lies die Eingänge ein, ändere danach A und beobachte, mit welchen Werten das Programm weiterarbeitet.
1 · Eingänge lesenFeldsignale ins Eingangsabbild
2 · Programm ausführenQ-Abbild = A-Abbild UND B-Abbild
3 · Ausgänge übertragenLampe übernimmt das Q-Abbild
Eingangsabbild
Ausgangsabbild
Realer Ausgang im Modell
Bereit für den ersten Zyklus.
Eine echte SPS wiederholt ihre Tasks automatisch; du steuerst hier die drei Lernschritte von Hand. Kurze Impulse können zwischen zwei Abtastungen liegen und übersehen werden.
04 · Kontaktplan richtig lesen
Kontakte prüfen Bits
Ein KOP-Kontakt im Programm ist eine logische Abfrage. Der normale Kontakt lässt das logische Ergebnis weiter, wenn sein Bit 1 ist. Der negierte Kontakt prüft auf 0. Eine normale Spule schreibt das Ergebnis in eine BOOL-Variable.
Element
Bedeutung
Normaler Kontakt
Prüfung auf TRUE / 1
Negierter Kontakt
Prüfung auf FALSE / 0
Kontakte in Reihe
UND: alle Bedingungen erfüllt
Parallele Zweige
ODER: mindestens ein Zweig erfüllt
Normale Spule
Schreibt 1 oder 0 bei jeder Ausführung
KOP / LD: Kontaktplan. FUP / FBD: verknüpfte Funktionsblöcke. ST / SCL: textbasierte Logik. SCL ist eine herstellerspezifische Bezeichnung.
Ein physischer Stopptaster als Öffner liefert bei passender Verdrahtung unbetätigt 1 an den SPS-Eingang. Beim Drücken wird das Signal 0. Wir nennen dieses Bit deshalb Stop_OK.
Im Programm wird Stop_OK mit einem normalen Kontakt auf 1 geprüft: Weiterlaufen ist nur erlaubt, solange Stop_OK wahr ist. Das Öffner-Symbol im KOP wäre hier eine andere, umgekehrte Abfrage.
Die Hardware bestimmt den Eingangswert. Das Programm prüft diesen Wert. „Öffner am Taster“ bedeutet daher nicht automatisch „negierter Kontakt im Programm“.
Adressen und Variablen
I / E steht oft für Eingang, Q / A für Ausgang, M für Merker. Beispiel: I0.0 ist Bit 0 im Eingangsbyte 0; I0.7 ist Bit 7, danach folgt I1.0. Syntax und Zuordnung sind herstellerabhängig.
Ein BOOL ist wahr/falsch. UINT ist häufig 16 Bit ohne Vorzeichen (0–65535); INT häufig 16 Bit mit Vorzeichen (−32768–32767). Den konkreten Typ und Bereich immer im System prüfen.
Praxisbeispiel: eine Betriebslampe mit Selbsthaltung
Ein kurzer Startimpuls schaltet die Lampe ein. Sie bleibt ein, bis du Stopp drückst. Das ist ein Lernbeispiel für eine normale Betriebsfunktion.
Variable
Beispieladresse
Bedeutung
Start
I0.0
Physischer Schließer; gedrückt = 1
Stop_OK
I0.1
Physischer Öffner; unbetätigt = 1
Betrieb
Interne BOOL-Variable
Gemerkter Zustand, hier nicht remanent
Lampe
Q0.0
Ausgang folgt Betrieb
Normale Spule rechts; Start und Betrieb liegen parallel. Stop_OK liegt davor in Reihe. Die zusätzliche Ausgangszuweisung lautet Lampe := Betrieb.
Betrieb := Stop_OK AND (Start OR Betrieb);
Lampe := Betrieb;
Lampe AUS
Drücke Start und beobachte die Selbsthaltung.
Warum bleibt sie an? Bei der nächsten Ausführung ist Betrieb bereits 1 und hält den parallelen Zweig wahr. Stopp setzt Stop_OK auf 0; damit wird Betrieb 0, auch wenn Start gleichzeitig 1 ist. Weil Stopp Vorrang hat, nennt man diese Speicherfunktion rücksetzdominant.
„Startimpuls geben“ simuliert einen Zyklus mit Start = 1 und anschließend das Loslassen. Beim Neustart wird Betrieb in diesem Beispiel auf 0 initialisiert. Reale Wiederanlauf- und Remanenzregeln müssen ausdrücklich festgelegt werden.
Eine normale SPS-Selbsthaltung ist keine Not-Halt- oder Schutztürfunktion. Dafür ist eine geeignete, bewertete Sicherheitslösung erforderlich. Auch ein Öffner mit Drahtbruchverhalten allein ergibt noch keine vollständige Sicherheitsfunktion.
06 · Zeitglieder und Zähler
TON · Einschaltverzögerung
Die Meldung soll erst erscheinen, wenn das Eingangssignal 3 Sekunden ohne Unterbrechung anliegt. IN startet die Verzögerung, PT ist die Vorgabe, ET die abgelaufene Zeit, Q das Ergebnis.
Die Zeit läuft hier nur mit den Schritttasten. IN = 0 setzt ET und Q sofort zurück. In einer realen SPS wird die TON-Instanz zyklisch aufgerufen; die Laufzeit kommt aus der Steuerung.
ST-Beispiel: Verzoegerung ist eine vorher deklarierte Instanz des Bausteins TON.
CTU · Werkstücke zählen
Die Lichtschranke liefert 0 → 1, wenn ein Werkstück erkannt wird. Gezählt wird diese steigende Flanke, nicht jeder Zyklus mit Signal 1. Zielwert PV = 3.
Sensor einschalten und danach einen Zyklus ausführen.
Halte den Sensor auf 1 und führe mehrere Zyklen aus: Der Zähler erhöht sich nur einmal. Erst nach einer eingelesenen 0 und einer neuen 1 wird erneut gezählt.
CODESYS-ST-Beispiel: Teile ist eine CTU-Instanz. CV ist der Zählerstand; Q ist 1 ab CV ≥ PV. Ein echter CTU zählt auch über PV hinaus weiter (bis zum Höchstwert seines Datentyps); dieses Lernmodell hört der Übersicht halber bei 3 auf. Reset hat Vorrang. Parameter und Grenzverhalten sind je nach Implementierung zu prüfen.
07 · Vom Auftrag zum laufenden Programm
Dein erstes Projekt in der Simulation
Aufgabe formulieren: Start schaltet die Lampe ein, Stopp schaltet sie aus. Bei Neustart bleibt sie aus.
Projekt und Zielgerät anlegen: passend zur Entwicklungsumgebung; Simulator auswählen.
Variablen deklarieren: Start, Stop_OK, Betrieb und Lampe als BOOL. Betrieb startet mit FALSE.
I/O zuordnen: in der Simulation Testvariablen verwenden; an Hardware passend zur tatsächlichen Konfiguration mappen.
Programm schreiben: Selbsthaltung und Lampenzuweisung in dieser Reihenfolge; keine weiteren Schreibstellen für Betrieb/Lampe.
Zyklisch aufrufen: Programm dem Hauptzyklus bzw. einer zyklischen Task zuordnen. Zeit-/Zählerbausteine als eigene Instanzen deklarieren.
Übersetzen und laden: Fehlermeldungen beheben, Simulation verbinden und RUN einschalten.
Beobachten und testen: Signale und Zustände online ansehen; jeden Testfall dokumentieren.
Was muss beim Test herauskommen?
Aktion
Erwartung
Neustart, Start = 0
Lampe aus
Stop_OK = 1, Startimpuls
Lampe ein
Start loslassen
Lampe bleibt ein
Stop_OK = 0
Lampe aus
Stopp loslassen
Lampe bleibt aus
Start und Stopp gleichzeitig
Lampe aus: Stopp hat Vorrang
Wichtig: Wird Start dauerhaft gehalten, kann die einfache Selbsthaltung beim Loslassen von Stopp wieder einschalten. Für eine echte Anlage müssen gewünschter Wiederanlauf, Freigaben und ggf. eine neue Startflanke gesondert entworfen werden.
Beim Beobachten liest du Werte. Beim Schreiben oder Forcen greifst du ein. Forcen kann die normale Logik übersteuern; an realen Anlagen nicht als Abkürzung bei der Fehlersuche verwenden.
08 · Wenn die Lampe nicht reagiert
Beobachtung
Was du als Nächstes prüfst
Sensor schaltet, Eingangsbit bleibt 0
Versorgung, Verdrahtung, Signaltyp, Bezugspotential und Kanalzuordnung.
Eingang stimmt, Programmbedingung nicht
Richtige Variable? Negation korrekt? Andere Bedingung noch 0?
Logik stimmt, Variable ändert sich nicht
Programm wirklich in RUN und zyklisch aufgerufen? Wird die Variable später überschrieben?
Ausgangsbit 1, Lampe aus
Ausgangszuordnung, Moduldiagnose, Lastversorgung und Last prüfen.
Zähler zählt zu oft
Flankenauswertung, prellende Kontakte und Signalqualität prüfen.
TON startet ständig neu
Unterbrechungen an IN, zyklischen Aufruf und korrekte Bausteininstanz prüfen.
Prüfe dein Verständnis
Warum ist ein Öffner-Stopptaster im KOP oft ein normaler Kontakt?
Weil der Eingang im unbetätigten Zustand 1 ist. Das Programm fragt Stop_OK = 1 ab, damit der Betrieb freigegeben bleibt.
Warum zählt CU = 1 nicht in jedem Zyklus ein weiteres Teil?
CTU reagiert auf eine steigende Flanke. Dazu muss zuvor 0 und danach 1 bei den Bausteinaufrufen erkannt worden sein.
Warum können Eingang und Lampe kurz unterschiedliche Zustände zeigen?
Das Programm verwendet im vereinfachten Zyklus das zuletzt eingelesene Abbild. Die Lampe übernimmt das Ergebnis erst bei der Ausgangsübertragung.