Die elementarsten Objekte in der Kontaktplanprogrammierung (KOP) sind Kontakte und Spulen die, die Kontakte und Spulen von elektromechanischen Relais in der Software nachahmen. Kontakte und Spulen sind diskrete Programmierelemente, die mit booleschen (1 und 0; ein und aus; wahr und falsch) Zuständen arbeiten (rechnen). Jeder Kontakt in einem Kontaktplan- SPS-Programm stellt das Lesen eines einzelnen Bits im Speicher dar, so wie jede Spule das Schreiben eines einzelnen Bits im Speicher darstellt.
Diskrete Eingangssignale die "real" an die SPS angeschlossen werden, sind im KOP ebenfalls durch Kontakte dargestellt, die auf diesen Eingangskontakt verweisen. Ebenso verweisen diskrete Ausgangskontakte die "real" an die SPS werden, als Spulen im KOP auf diese Kontakte. Die diskreten Eingänge können oft an verschiedenen Stellen und öfters im Programm "gesetzt" werden. Die diskreten Ausgänge dagegen, werden in aller Regel rechts an das "Ende" einer Reihe gesetzt und können zudem nur einmal verwendet werden.
In älteren SPS-Systemen haben die diskreten Eingänge und Ausgänge eine spezifische Adresse, die auf den/die Kontakt(e) oder Spulen(n) innerhalb dieses Programms angewendet werden muss. In modernen SPS-Systemen kann jeder diskrete Eingang und Ausgang einen vom Programmierer erstellten Tag-Namen mit einer fortlaufende Nummer haben, die auf die Kontakte und Spulen innerhalb des Programms angewendet wird.
Hier die diskreten Eingänge links und die diskreten Ausgänge rechts, mit und ohne eigenen Bezeichnungen, in dem Ladder SPS Programm VBuilder.
In rot die "realen" Kontakte die, die tatsächlich vorhanden Kontakte und Spulen an der SPS darstellen (abbilden) und grün die virtuellen Kontakte und Spulen die es nur in der Software als "Logik" gibt. Durch das zusammenfügen von realen und virtuellen Kontakten und Spulen entsteht die eigentliche Steuerung.
SPS Kontakte und Spulen in der Praxis
Zur Veranschaulichung stellen wir uns den Aufbau und die Programmierung einer redundanten Speicherüberwachung vor, die ich so für eine Autowerkstatt tatsächlich programmiert habe. Der Zweck dieses Systems besteht darin den Behälter vor einem überfüllen mit altem Öl zu schützen. Unter den Hebebühne befinden sich mehrere Trichter in die das Altöl abgelassen wird. Menden mindestens zwei der drei Schwimmerschalter einen "voll" Stand dann geht die grüne Lampe aus und die Pumpe läuft an. Sind nach einer Minute NICHT alle drei Schwimmerschalter "geöffnet", geht die Pumpe aus und die rote Lampe geht an. Entweder arbeitet die Pumpe nicht, die Leitung ist verstopft oder der Schalter hängt fest. Ist nach einer Minute der Schalter aus, läuft die Pumpe 5 Minuten weiter, schaltet dann ab und die grüne Lampe geht wieder in Betrieb.
Da der Behälter keinen Schalter für "Behälter leer" hat ist das einschalten der Pumpe an zwei Schwimmerschalter gekoppelt, so ist sichergestellt dass die Pumpe nur anläuft wenn der Behälter wirklich voll ist. Durch den dritten Schwimmerschalter wird gewährleistet dass die Pumpe auch beim defekt (Ausfall) eines Schwimmerschalters anläuft.
Die Verdrahtung des Systems ist hier in der Übersicht dargestellt:
SPS Kontakte und Spulen
- Die Schwimmerschalter geben im "voll" Zustand ein 24 Volt Signal an die SPS, dies sind damit drei diskrete Eingangssignale die real als Eingang an der SPS anliegen
- Die beiden Lampen und die Pumpe werden direkt über die Relais der SPS. geschaltet und sind damit die diskreten Ausgangssignale die direkt an der SPS anliegen
UND / ODER Funktionen
In Reihe geschaltete Kontakte in einem Kontaktplan führen zu logischen UND-Funktionen, während parallele Kontakte die logische ODER-Funktion ausführen. Damit kann die Grundlegende Funktion (Sicherheit) der drei Schwimmerschalter Verbal, Mathematisch ("Booleschen Algebra", die Multiplikation stellt die UND-Funktion dar, Addition stellt die ODER-Funktion dar) oder in einer Schaltwerttabelle beschrieben bzw. dargestellt werden.
- Verbal:
- Ist einer der drei Schwimmerschalter geschlossen dann schaltet der Ausgang die Pumpe ein.
- Ist nach dem einschalten der Pumpe und einer Minute Betriebszeit noch mindestens einer der Schwimmerschalterschalter geschlossen, dann schaltet die Pumpe aus
- Mathematisch
- Pumpe ein --> (S1+S2) - (S1+S3) - (S2+S3)
- Pumpe aus--> Zeit +5Minuten - (Zeit+1Minute und S1-S2-S3)
- Schaltwerttabelle
SPS-Logik im Kontaktplan
Wenden wir uns nun dem tatsächlichen Programm für die Fülltandsüberwachung zu. Ich habe das Projekt mit einem Arduino realisiert, da dies vom Kunde so gewünscht wurde. Für die Programmierung habe ich die Kontaktplansoftware plcladdersimulator2 verwendet. Leider können hier noch keine Namen für die Kontakte eingegeben werden.
In Reihe eins werden jeweils zwei diskreten Eingänge (Schwimmerschalter) zu einer UND und drei ODER Gruppen zusammengefasst. Ist eine der UND Gruppen „wahr“ wird die Virtuelle Spule B:0.0 „wahr“ also ein und der Kontakt „steigende Flanke“ in Reihe 4 schaltet den diskreten Ausgang O:0.0 an dem die Pumpe angeschlossen ist ein. Die „steigende Flanke“ verhindert das wiedereinschalten nach dem ausschalten über das Zeitrelais.
Die Pumpenausgang O:0.0 schaltet über zwei virtuelle Schließerkontakte in Reihe 2 und 3, die beiden Zeitrelais (TON, TimerOnDelay) ein. Für einen TON muss der Kontakt so lange geschlossen sein (wahr) biss die Zeit „abgelaufen“ ist. Bei einem Wechsel auf „falsch“ aus, wird die Zeit beendet.
Das Zeitrelais T1 schaltet nach einer Sekunde ist, ist nach diese Zeit in Reihe 5 noch eine der 3 UND Gruppen aktiv wird die Pumpe über das zurücksetzten der Spule in Reihe 5 ausgeschaltet. Ist keine der Gruppen „wahr“, werden die 4 Sekunden von T2 abgewartet und nach diese Zeit die Pumpe O:0.0 über den virtuellen Kontakt T:2DN ausgeschaltet.
Die Reihe 6 und 7 werden lediglich benötigt um die Lampen zu schalten. In Reihe 6 ist das eine UND Schaltung aus 5 Kontakten, solange Schwimmer 1 und Schwimmer 2 und Schwimmer 3 und die Pumpe aus ist, ist die grüne Lampe an.
In Reihe 7 ist eine UND/ODER Schaltung aus dem UND vom Zeitrelais T:1.DN und den drei UND Gruppen der Schwimmerschalter. Wenn also T:1.DN UND eine der drei Gruppen „wahr“ ist geht die rote Lampe an. Da =:0.2 eine „setzen“ Spule ist und es kein Rücksetzen gibt, muss dieser Kontakt über den Reset des Arduino zurückgesetzt werden.
Einer der drei "UND" Gruppen muss "wahr" ein sein damit die Pumpe anläuft.
Die beiden Zeitrelais bekommen gleichzeitig ein "wahr" über die Kontakte, nur dass bei T1 eine Sekunde und bei T2 vier Sekunden eingestellt sind.
Die grüne Lampe aus weil nicht alle fünf UND Bedingungen in Reihe 6 erfüllt sind.
Sind die vier Sekunden des T2 abgelaufen, schaltet die Pumpe aus und die SPS ist im Ausgangszustand und "wartet" auf das erneute schließen zweier Schwimmerschalter.