SPS von Grund auf · Verstehen & ausprobieren

SPS verstehen
Vom Signal zum Programm.

Was eine SPS ist, wie sie arbeitet und was du zum Einstieg brauchst – mit vier Simulationen und einem vollständigen Start-Stopp-Beispiel.

Meine Favoriten

01 · Was ist eine SPS?

Der Entscheider in der Anlage

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

  1. Ein PC und eine passende SPS-Entwicklungsumgebung.
  2. Ein Simulator oder eine Soft-SPS, sofern vom gewählten System unterstützt.
  3. 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
EingangsabbildA = 0 / B = 0
AusgangsabbildQ = 0
Realer Ausgang im ModellLampe AUS

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.

ElementBedeutung
Normaler KontaktPrüfung auf TRUE / 1
Negierter KontaktPrüfung auf FALSE / 0
Kontakte in ReiheUND: alle Bedingungen erfüllt
Parallele ZweigeODER: mindestens ein Zweig erfüllt
Normale SpuleSchreibt 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.

Kontaktplan selbst aufbauen →

Ein echter Öffner ist etwas anderes

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.

05 · Starten, merken, stoppen

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.

VariableBeispieladresseBedeutung
StartI0.0Physischer Schließer; gedrückt = 1
Stop_OKI0.1Physischer Öffner; unbetätigt = 1
BetriebInterne BOOL-VariableGemerkter Zustand, hier nicht remanent
LampeQ0.0Ausgang 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.

Verzoegerung(IN := Freigabe, PT := T#3s);
Meldung := Verzoegerung.Q;

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.

Teile(CU := Sensor, RESET := Reset, PV := 3);
ZielErreicht := Teile.Q;

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

  1. Aufgabe formulieren: Start schaltet die Lampe ein, Stopp schaltet sie aus. Bei Neustart bleibt sie aus.
  2. Projekt und Zielgerät anlegen: passend zur Entwicklungsumgebung; Simulator auswählen.
  3. Variablen deklarieren: Start, Stop_OK, Betrieb und Lampe als BOOL. Betrieb startet mit FALSE.
  4. I/O zuordnen: in der Simulation Testvariablen verwenden; an Hardware passend zur tatsächlichen Konfiguration mappen.
  5. Programm schreiben: Selbsthaltung und Lampenzuweisung in dieser Reihenfolge; keine weiteren Schreibstellen für Betrieb/Lampe.
  6. Zyklisch aufrufen: Programm dem Hauptzyklus bzw. einer zyklischen Task zuordnen. Zeit-/Zählerbausteine als eigene Instanzen deklarieren.
  7. Übersetzen und laden: Fehlermeldungen beheben, Simulation verbinden und RUN einschalten.
  8. Beobachten und testen: Signale und Zustände online ansehen; jeden Testfall dokumentieren.

Was muss beim Test herauskommen?

AktionErwartung
Neustart, Start = 0Lampe aus
Stop_OK = 1, StartimpulsLampe ein
Start loslassenLampe bleibt ein
Stop_OK = 0Lampe aus
Stopp loslassenLampe bleibt aus
Start und Stopp gleichzeitigLampe 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

BeobachtungWas du als Nächstes prüfst
Sensor schaltet, Eingangsbit bleibt 0Versorgung, Verdrahtung, Signaltyp, Bezugspotential und Kanalzuordnung.
Eingang stimmt, Programmbedingung nichtRichtige Variable? Negation korrekt? Andere Bedingung noch 0?
Logik stimmt, Variable ändert sich nichtProgramm wirklich in RUN und zyklisch aufgerufen? Wird die Variable später überschrieben?
Ausgangsbit 1, Lampe ausAusgangszuordnung, Moduldiagnose, Lastversorgung und Last prüfen.
Zähler zählt zu oftFlankenauswertung, prellende Kontakte und Signalqualität prüfen.
TON startet ständig neuUnterbrechungen 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.

Mitnehmen & weiterüben

Weiterlernen: SPS-Lernheft herunterladen · Logik ausprobieren. Lernbeispiele vereinfacht und herstellerneutral, soweit nicht anders gekennzeichnet. Stand: September 2026.