Klassische Steuerungen bestehen aus Kontakten (Taster oder Kontakte an der Maschine), Starkstromrelais und den Verknüpfungsgliedern, die entsprechend der Kontaktstellung die Relais schalten. Bei jeder Steuerung haben wir also eine Eingabeebene, die Schalter und Taster bzw. Sensoren, eine Verknüpfungsebene, in der die Eingaben der Schalter verknüpft werden und eine Ausgabeebene, die Relais. Was früher nur per Draht programmiert wurde, wird bei einer SPS in EEPROM oder RAM abgelegt. Denn die Verbindungen lassen sich auch als logische Verknüpfungen beschreiben.
Wollte man die Schaltung mit Logikbausteinen aufbauen, würde man Flipflops und Gatter verwenden. Die verdrahtungsprogrammierte Steuerung sieht schematisch so aus wie im Bild links. Die speicherprogrammierte Steuerung Zeigt sich "nach außen" genauso, lediglich die Verknüpfungsebene wird nicht mehr durch Verdrahtung, Hilfskontakte und Hilfsrelais, sondern durch einen Mikrocomputer realisiert, wie im Bild rechts gezeigt ist.

Auch die Verarbeitung unterscheidet sich bei der SPS von der festen Verknüpfung. Vor Beginn der Programmausführung wird zuerst der Zustand der Eingänge in ein Eingangs-Statusregister geladen. Der aktuelle Zustand der Ausgänge steht im Ausgangs-Statusregister. Dann erst arbeitet der Computer das Steuerprogramm im Programmspeicher Schritt für Schritt ab und bildet die Verknüpfung von Eingangs- und (dezeit aktuellen) Ausgangssignalen. Nun wird der neu ermittelte Ausgangszustand an das Ausgangs-Statusregister gegeben, und die Relais schalten. Der Abfragezyklus beginnt nun von neuem. Die Zeit, die die SPS für einen Zyklus braucht, hängt von Programmlänge und Steuergerät ab. In der Praxis liegen die Zeiten bei wenigen Mikrosekunden pro Befehl (Bild links).

In der SPS steckt heutzutage ein Mikrocomputer mit einem fest im ROM gespeicherten Programm zum Abfragen und Setzen des Statusregister und zum Abarbeiten des SPS-Programms, das frei eingebbar ist und im RAM oder EEPROM der SPS gespeichert wird. Für die Beschreibung eines Steuerungsvorgangs gibt es eine ganze Reihe von Möglichkeiten:
E für Eingang
A für Ausgang
M für Merker
T für Zeitglied
Die grafische Darstellung der Elemente im Kontaktplan ist im Bild oben zusammen mit einem Beispiel gezeigt. Für die Programmierung einer SPS gibt es zahlreiche Befehlssprachen. Hier soll eine einfache Befehls-Sprache verwendet werden, die mit wenigen Symbolen auskommt:
L Lade U UND-Verknüpfung O ODER-Verknüpfung N Negation = Zuweisung S Setzen R Rücksetzen
Unsere Modell-SPS arbeitet mit einer Anweisungsliste, also mit boolesehen Formeln. Dabei ist sie wesentlich einfacher gehalten, als heutige SPS-Systeme, sie verhält sich ehrer wie ein frühes System. Mit UND, ODER und Negation werden die Verknüpfungen gebildet. Neben den Eingängen (E0 ... E3) und Ausgängen (A0 ... A8) gibt es noch 10 Merker (M0 ... M9), die man als Zwischenspeicher verwenden kann, sowie 10 Timer (T0 ... T9), die man braucht, um Anschalt- und/oder Abschaltverzögerungen zu realisieren. Die Timer kann man per Konfiguration getrennt für Anschalt- und Abschaltverzögerung einstellen. Mit den Funktionen S und R, die man als Attribut einer Ausgangsgröße zuordnen kann, werden die Ausgangsgrößen mit Flip-Flop-Eigenschaften versehen (Set, Reset).
Entsprechend einfach ist die Eingabesprache unserer SPS. Es entfallen beispielsweise die Klammern. Auch steht in jeder Zeile nur eine Anweisung und nicht ein ganzer Ausdruck. Das lässt sich am besten gleich bei der Erklärung der Verknüpfungen zeigen. Eine Anweisungssequenz beginnt in der Regel mit einem Lade-Befehl (L) und endet mit einer oder mehreren Zuweisungen (=). EIn Programm wird immer mit "PE" beendet.
LE1 UE2 =A1 PEDamit erscheint am Ausgang 1 genau dann ein Signal, wenn an beiden Eingängen ein 1-Signal erscheint.
LE0 OEl =A1 PEAm Ausgang liegt eine 1, wenn ein Eingang auf 1 ist.
LNE0 =A1 PEWenn E0 ein 1-Signal führt, erscheint am Ausgang A1 ein 0-Signal und umgekehrt.
LE0 =SA1 LEl =RA1 PEWenn am Eingang E0 ein 1-Signal anliegt, wird der Ausgang A1 gesetzt. Er bleibt gesetzt, bis am Eingang E1 ein 1-Signal erscheint.
Timer können als Eingange und als Ausgänge in der AWL stehen, z. B.:
LE0 =T0 LT0 =A1 PEWenn am Eingang E0 ein 1-Signal anliegt, wird der Timer T0 gestartet. Der Ausgang A1 bleibt so lange auf 1, bis der Timer abgelaufen ist. Jeder Timer besitzt eine Ein- und Ausschaltverzögerung. Verschwindet die 1 am Eingang innerhalb der Zeit für die Einschaltverzögerung. bleibt das Signal ohne Wirkung.

Eine SPS-typische Anwendung ist die Treppenhausbeleuchtung. Das Bild zeigt die Anordnung. E0 ist der Taster an der Treppe unten und El der Taster an der Treppe oben. Mit A0 wird die Beleuchtung geschaltet.
LE0 OE1 =SA0 LA0 =T0 LT0 =RA0 PEWenn man E0 oder El betätigt, wird der Ausgang A0 aktiviert und gleichzeitig der Timer T0 gestartet. Er soll nur eine Einschaltverzögerung besitzen. Wenn die Zeit abgelaufen ist, so wird der Ausgang A0 wieder zurückgesetzt und das Licht geht aus. Dieses Programm hat aber einen kleinen Nachteil. Wenn das Licht noch brennt und man die Taste drückt, so läuft dennoch die alte Zeit ab, und es kann passieren, daß man auf der Treppe im Dunkeln steht.

Das Programm muss also verbessert werdenn. Es ergibt sich das folgende Listing mit der Wirkung, dass bei jedem Tastendruck der Timer zurückgesetzt wird. Eine Erweiterung auf mehreren Etagen ist einfach, man muß dazu nur die Oder-Verknüpfung in der ersten Zeile durch weitere Eingänge erweitern.
LE0 OE1 =M0 LM0 =SA0 =RT0 LNM0 UA0 =T0 LNM0 UT0 =RA0 PE