CoDeSys V3 – Quick Start 5/6
Programmierung der Fehlerüberwachung und der Beleuchtung
Um das Öffnen bzw. Schließen des Garagentors anzuhalten, haben wir neben der Betätigung des Tasters
(bzw. dem Erreichen der Sensoren TorUnten / TorOben), die neue Variable Fehler
eingeführt, die einen Fehlerfall anzeigen soll. Natürlich müssen wir diese Variable auch
entsprechend ausprogrammieren.
Es liegt ein Fehler vor, wenn der Sensor MotorUeberlast
auf TRUE steht. Oder aber, wenn die Länge des Vorgangs
Öffnen/Schließen länger als die erfahrungsgemäßen 20s dauert.
Entsprechend fügen wir wieder
ein neues Netzwerk ein und starten mit einem OR-Operator, mit dessen Hilfe wir diese beiden Fälle
bearbeiten. Der Ausgang des Operators soll uns die Zwischenvariable Fehler gespeichert
schreiben. D.h. wir müssen das Ende der Ausgangsleitung markieren und können dann auf der Toolbar
den Button Set/Reset drücken, so dass ein ‚S’ am Ende der Leitung sichtbar wird. Das hat zur Folge,
dass die Variable an anderer Stelle nur mit einem Reset, den man durch nochmaliges Drücken des
Buttons erhält, wieder zurückgesetzt werden kann.
An den
ersten Eingang des OR-Operators können wir nun die bereits deklarierte Sensor-Variable
MotorUeberlast schreiben.
Um überprüfen zu können, ob die definierte maximale
Zeitspanne für das Öffnen oder Schließen des Tors überschritten wird, benötigen wir eine
Zeitüberwachung. Dafür eignet sich der Funktionsbaustein TON (Timer on Delay), den wir wieder in
unserem Werkzeug-Fenster (in der Rubrik: ‚Funktionsbausteine’) finden. Diesen Funktionsbaustein
instanziieren wir mit dem Namen Ueberwach.
Ein am Eingang
IN anliegendes boolesches TRUE wird erst mit einer
Zeitverzögerung (PT für predefined time) an den Ausgang Q geschrieben. Wechselt IN während dieser
Zeitverzögerung allerdings wieder zurück auf FALSE, dann bleibt der Ausgang auf
FALSE.
Wird in unserem Fall das Öffnen oder Schließen des Tors gestartet
(repräsentiert über die Aktor-Variablen TorRauf / TorRunter), dann beginnt der
Timer-Baustein zu arbeiten. Im Normalfall wird innerhalb von typischerweise 10 – 20s einer der
beiden Sensoren TorOben oder TorUnten die Bewegung des Tors beenden, so dass die
Aktor-Variablen wieder auf FALSE zurückgesetzt werden. Damit bleibt der Ausgang des
Timer-Bausteins auf FALSE und meldet keinen Fehler. Erfolgt das allerdings nicht innerhalb
der vorgegeben Zeit, in unserem Fall 20s, dann wird der Ausgang Q auf TRUE gesetzt und löst damit den Fehler aus. Der zweite Ausgang ET (Elapsed Time)
des Bausteins gibt uns die verstrichene Zeit nach dem Start des Timers aus. Weil wir diesen Wert
aber in unserem Beispiel nicht benötigen, können wir den Ausgang durch Markieren des Ausgangspins
und Drücken der Entf-Taste auf der PC-Tastatur einfach löschen. Da die Zeitüberwachung
gleichermaßen für das Öffnen und Schließen gilt, können wir die beiden Aktor-Variablen über einen
OR-Operator an den IN-Eingang des TON-Bausteines verschalten.
Bei der
Eingabe der gewünschten Zeitverzögerung ist zu beachten, dass die Angabe der Zeitspanne im IEC
61131-3-Format zu erfolgen hat: „T#“ als Präfix gefolgt von der Zeitangabe.
Zum Quittieren
und Zurücksetzen des Fehlers soll der Anwender im Fehlerfall den Taster Betaetigung drücken.
Um dies in unserer Applikation umzusetzen, müssen wir ein weiteres Netzwerk einfügen. Dazu
verwenden wir entweder das Werkzeug-Fenster oder klicken auf das letzte Netzwerk des Bausteins. Mit
rechtem Mausklick öffnet sich ein kontext-sensitives Menü, aus dem wir ‚Netzwerk einfügen
(unterhalb)’ auswählen können. In dieses neue, leere Netzwerk können wir jetzt entweder über das
Werkzeug-Fenster (Rubrik: ‚Generelles’), durch rechten Mausklick oder aber über die
Tastenkombination „Strg+A“ eine neue Zuweisung einfügen.
Am
Eingang der Zuweisung geben wir die Variable Betaetigung ein und weisen deren Wert der
Variable Fehler zu. Allerdings benötigen wir hier das Rücksetzen der Variable Fehler und
müssen somit den Ausgang der Zuweisung über die Toolbar, rechte Maustaste (kontext-sensitives Menü)
oder die Tastenkombination ‚Strg+M’ auf ‚Reset’ R stellen.
Im
letzten Netzwerk der Applikation kümmern wir uns um die Beleuchtung. Laut Aufgabenstellung
soll die Beleuchtung des Torantriebs mit der Bewegung des Garagentors eingeschaltet und erst nach
einer Verzögerung von z.B. 10s wieder abgeschaltet werden. Somit benötigen wir in jedem Fall wieder
einen Timer-Baustein. Da es nun um das verzögerte Abschalten eines booleschen Signals geht,
benötigen wir den Baustein TOF (Timer off delay). Diesen ziehen wir uns wieder aus dem
Werkzeug-Fenster in ein neues Netzwerk und instanziieren ihn (z.B. mit dem Name T1). Den ET-Ausgang
des Timers können wir auch in diesem Fall gleich zu Beginn bedenkenlos löschen.
Dem Ausgang
Q des Bausteins weisen wir gleich die Variable Beleuchtung zu, dem Eingang PT die erwähnte
Zeitverzögerung von 10s im IEC 61131-3-Format. Am Eingang IN fügen wir entweder per
Werkzeug-Fenster, mit der rechten Maustaste (kontext-sensitives Menü) oder über die
Tastenkombination „Strg+B“ einen neuen Baustein ein, und zwar wiederum einen OR-Operator. An dessen
Eingänge verschalten wir die Aktor-Variablen TorRauf und TorRunter. Der zweite
Ausgang ET (Elapsed Time) des Bausteins gibt uns die verstrichene Zeit nach dem Start des Timers
aus. Weil wir diesen Wert aber in unserem Beispiel nicht benötigen, können wir den Ausgang durch
Markieren des Ausgangspins und Drücken der Entf-Taste einfach löschen. Die Beleuchtung im normalen
Betriebsfall ist somit ebenfalls fertig.
Um im
gleichen Netzwerk auch den Fehlerfall berücksichtigen zu können, fügen wir vor der Variable
Beleuchtung wiederum einen OR-Operator ein und öffnen somit einen zweiten Strang des
Netzwerks. Dieser neue Strang soll nur im Fehlerfall relevant sein, während der bereits bestehende
Strang nur dann relevant ist, wenn kein Fehler anliegt. Deshalb fügen wir vor die Eingänge des
neuen OR-Operators jeweils einen AND-Operator ein. Beim ersten, bereits bestehenden Strang für die
Beleuchtung während der normalen Bewegung wird dieser AND-Baustein einfach zwischengeschoben. Am
zweiten Eingang fügen wir die Variable Fehler ein und negieren sie. Damit wird der gesamte
Strang nur dann auf den Ausgang der Beleuchtung durchgeschaltet, wenn kein Fehler
anliegt.
Am zweiten Strang fügen wir auf den zweiten Eingang des AND-Operators entsprechend
wiederum die Variable Fehler ein, dieses Mal jedoch ohne Negation. Damit wird der Strang nur
im Fehlerfall auf die Beleuchtung geschaltet. Vor dem ersten Eingang des AND-Operators müssen wir
eine Blinkschaltung programmieren. Dazu fügen wir zwei TON-Bausteine hintereinander ein, so dass
der Ausgang des linken TONs mit dem Eingang des rechten TONs verbunden ist und dabei invertiert
wird. Die Zeitverzögerung für beide Bausteine soll 1s betragen, die Ausgänge ET können wir wieder
löschen und natürlich müssen wir die Funktionsbausteine instanziieren, z.B. mit den Instanznamen T2
und T3. Somit bleibt nur noch der Eingang IN vom linken TON, den wir mit dem Ausgang des rechten
TON beschalten. Dazu fügen wir den Instanznamen des rechten Bausteins ein und machen dahinter einen
Punkt. CoDeSys weiß damit, dass wir eine Variable innerhalb der Datenstruktur der
Funktionsblock-Instanz T3 verwenden möchten und liefert uns entsprechend die verfügbaren Variablen
in einem Intellisense-Fenster.
Nachdem
wir zum Erzeugen der Blinkfunktion den Ausgang Q von T3 benötigen, können wir ihn aus der Liste
auswählen oder auch eintippen.
Somit haben wir die Beleuchtung für den Normal- und den
Fehlerfall komplett ausprogrammiert und damit auch die gesamte Applikationsentwicklung
abgeschlossen.
Im nachfolgenden YouTube-Video wird die Fehlerüberwachung sowie die
Beleuchtungsprogrammierung in CoDeSys V3 vorgenommen:
(Achtung: Im Video wurde vergessen, den
IN-Eingang von T3 zu invertieren)
Was suchen sie?
Produktübersicht



