Bevor Sie loslegen
Datensicherheit: Um das Risiko von Datensicherheitsverletzungen zu minimieren, empfehlen wir die folgenden organisatorischen und technischen Maßnahmen:
-
Vermeiden Sie, dass auf die SPS und die Steuerungsnetzwerke aus offenen Netzwerken oder dem Internet zugegriffen werden kann.
-
Verwenden Sie ein VPN für Remote-Zugriff.
-
Installieren Sie eine Firewall.
-
Wenn Sie Ihre Visualisierung im Web veröffentlichen möchten, setzen Sie ein Passwort zum Schutz vor unberechtigten Zugriffen.
-
Verwenden Sie die neuesten Versionen von Gatewayserver und Web-Server.
CODESYS installieren:
Die Installation umfasst das Entwicklungssystem sowie das CODESYS Gateway und CODESYS Control Win V3, deren Dienste über die Windows-Taskleiste zugänglich sind. Diese drei Programme sind notwendig, um eine Steuerung auf Ihrem Computer zu simulieren.
Zum Inhalt Ihres ersten Projekts
In diesem Tutorial werden Sie eine einfache Kühlschranksteuerung programmieren. Das
fertige Projekt RefrigeratorControl.project_archive
finden Sie im Installationsverzeichnis von CODESYS im Verzeichnis Projects
. Zusätzlich zu dem Beispielprojekt, das Sie hier Schritt für Schritt erstellen werden,
enthält das fertige Projekt eine komplette Visualisierung mit Bedienung und Diagnose.
-
Wie bei einem handelsüblichen Kühlschrank wird die Solltemperatur über einen Drehregler vom Benutzer vorgegeben.
-
Über einen Sensor ermittelt der Kühlschrank die Isttemperatur. Wenn diese zu hoch ist, startet der Kühlschrank mit einer einstellbaren Verzögerung den Kompressor.
-
Der Kompressor kühlt, bis die eingestellte Solltemperatur abzüglich einer Hysterese von 1 Grad erreicht ist. Die Hysterese soll verhindern, dass die Isttemperatur zu sehr um die Solltemperatur schwingt und sich der Kompressor ständig aus- und einschaltet.
-
Wenn die Tür offen steht, leuchtet im Inneren des Kühlschranks eine Lampe. Steht die Tür zu lange offen, ertönt ein getaktetes akkustisches Signal.
-
Wenn der Kompressor die Solltemperatur trotz Aktivität des Motors über längere Zeit nicht erreicht, gibt der Pieper ein durchgehendes, akkustisches Signal.
Projektierung:
Die Steuerung der Kühltätigkeit erfolgt im Hauptprogramm der Applikation, die Signalverwaltung
in einem weiteren Programmbaustein. Die benötigten Standardfunktionsbausteine sind
in der Bibliothek Standard
verfügbar. Da in diesem Beispielprojekt keine echten Temperatursensoren und keine
echten Aktoren angeschlossen werden, schreiben Sie zusätzlich ein Programm zur Simulation
von Temperaturanstieg und Temperatursenkung. Damit können Sie nachher das Arbeiten
der Kühlschranksteuerung im Online-Betrieb beobachten.
Variablen, die von allen Bausteinen verwendet werden sollen, definieren Sie in einer globalen Variablenliste.
Vorbereitung
Sie haben das CODESYS Development System installiert und mit dem Standardprofil "CODESYS <aktuelle Version>" gestartet. Das Rahmenfenster des Entwicklungssystems erscheint mit der Standardmenüleiste, es ist noch kein Projekt geöffnet.
Anlegen des Projekts und Auswählen des SPS-Geräts
-
Wählen Sie den Befehl „Datei Neues Projekt“.
-
Selektieren Sie im Fenster „Vorlagen“ die Vorlage „Standardprojekt“.
-
Geben Sie einen Namen und einen Speicherort für das Projekt ein und klicken dann auf die Schaltfläche „OK“.
Der Dialog „Standardprojekt“ erscheint zur Eingabe des Gerätetyps und der Implementierungssprache des Hauptprogramms.
-
Wählen Sie in der Liste „Gerät“ den Eintrag „CODESYS Control Win V3.“
-
Wählen Sie in der Liste „PLC_PRG in“ den Eintrag „Continuos Function Chart (CFC)“ und klicken Sie auf die Schaltfläche „OK“.
Das Projekt wird im CODESYS-Rahmenfenster geöffnet.
Auf der linken Seite des Rahmenfensters, in der Ansicht „Geräte“, sehen Sie den "Gerätebaum", eine Ansicht, betitelt mit „Geräte“. Das vorher ausgewählte SPS-Gerät ist mit dem Standardnamen „Device“ eingehängt.
Unter dem Objekt „SPS-Logik“ hängt bereits das Objekt „Application“ für die von Ihnen zu programmierende Applikation.
„Application “ enthält bereits ein Objekt für das Hauptprogramm PLC_PRG
und den „Bibliotheksverwalter“.
Der „Bibliotheksverwalter“ enthält bereits die Bibliotheken IoStandard
und Standard
. IoStandard
wird für E/A-Konfigurationen benötigt. Die Bibliothek Standard
enthält alle Funktionen und Funktionsbausteine, die von der Norm IEC 61131-3 beschrieben werden.
Am Ende des Gerätebaums hängt das Objekt „Taskkonfiguration“ mit der MainTask
, die die Abarbeitung von PLC_PRG
steuert. Unterhalb von „Taskkonfiguration“ können Sie später beispielsweise noch die Objekte für eine Visualisierung einfügen.
Zusätzlich zu den Bibliotheken IoStandard
und Standard
benötigen Sie für das vorliegende Beispielprojekt die Bibliothek Util
:
-
Doppelklicken Sie das Objekt „Bibliotheksverwalter“ im Gerätebaum.
Der Bibliotheksverwalter öffnet sich in seinem Editor.
-
Klicken Sie in der Kopfleiste des Editors auf „Bibliothek hinzufügen“ und wählen Sie im Dialog „Bibliothek hinzufügen“ die Bibliothek
Util
aus.Bestätigen Sie die Auswahl mit „OK“
Die Bibliothek
Util
wird im Bibliotheksverwalter hinzugefügt und die Bausteine der Bibliothek stehen Ihnen für das Projekt zur Verfügung.
Im Projekt die Steuerungsapplikation programmieren: Sehen Sie dazu die folgenden Abschnitte:
Deklarieren der globalen Variablen
Deklarieren Sie zunächst die Variablen, die Sie in der gesamten Applikation verwenden wollen. Dazu legen Sie unter „Application“ eine Globale Variablenliste an:
-
Selektieren Sie den Eintrag
Application
und wählen im Kontextmenü den Befehl „Objekt hinzufügen Globale Variablenliste“. Ändern Sie den automatisch eingetragenen NamenGVL
zuGlob_Var
und bestätigen Sie mit „Hinzufügen“.Unter
Application
erscheint das ObjektGlob_Var
. Der GVL-Editor öffnet rechts vom Gerätebaum. -
Wenn die textuelle Ansicht erscheint, sind die Schlüsselwörter
VAR_GLOBAL
undEND_VAR
bereits enthalten. Aktivieren Sie für unser Beispiel mit einem Klick auf die Schaltflächein der rechten Randleiste des Editors die tabellarische Ansicht.
Eine leere Zeile erscheint. Der Cursor ist in der Spalte „Name“.
-
Wählen Sie im Kontextmenü den Befehl „Einfügen“.
Ein Eingabefeld öffnet sich. Gleichzeitig werden in der Zeile automatisch der „Gültigkeitsbereich“
VAR_GLOBAL
und der „Datentyp“BOOL
eingetragen. -
Tippen Sie
rTempActual
im Feld „Name“ ein. -
Doppelklicken Sie in das Feld in der Spalte „Datentyp“.
Das Feld ist jetzt editierbar und die Schaltfläche
erscheint.
-
Klicken Sie auf die Schaltfläche
und wählen Sie „Eingabehilfe“.
Der Dialog „Eingabehilfe“ öffnet sich.
-
Wählen Sie den Datentyp
REAL
aus und klicken Sie auf die Schaltfläche „OK“. -
Geben Sie einen numerischen Wert in der Spalte „Initialisierung“ ein, beispielsweise
8.0
.
Deklarieren Sie die folgenden Variablen auf gleiche Weise:
Name |
Datentyp |
Initialisierung |
Kommentar |
---|---|---|---|
|
|
|
Isttemperatur |
|
|
|
Solltemperatur |
|
|
|
Status Tür |
|
|
|
Kompressorlaufzeit, nach der ein Signal ertönt |
|
|
|
Zeit ab Türöffnung, nach der ein Signal ertönt |
|
|
|
Steuersignal |
|
|
|
Steuersignal |
|
|
|
Statusmeldung |
Hauptprogramm zur Kühlungssteuerung im CFC-Editor erstellen
Im standardmäßig angelegten Hauptprogrammbaustein PLC_PRG
beschreiben Sie nun die Hauptfunktion des Applikationsprogramms: Der Kompressor wird
aktiv und kühlt, wenn die Isttemperatur höher ist als die Solltemperatur zuzüglich
einer Hysterese. Der Kompressor wird ausgeschaltet, sobald die Isttemperatur niedriger
ist als die Solltemperatur abzüglich der Hysterese.
Um diese Funktionalität in der Implementierungssprache CFC zu beschreiben, führen Sie folgende Schritte aus:
-
Doppelklicken Sie auf
PLC_PRG
im Gerätebaum.Der CFC-Editor öffnet sich mit der Registerkarte
PLC_PRG
. Oberhalb des grafischen Editorbereichs erscheint der Deklarationseditor in textueller oder tabellarischer Darstellung. Rechts ist das Fenster „Werkzeuge“. -
Klicken Sie im Fenster „Werkzeuge“ auf das Element „Eingang“ und ziehen Sie es mit der Maus an eine Stelle im CFC-Editor.
Der namenlose Eingang
???
wurde eingefügt. -
Klicken Sie im CFC-Editor bei dem Eingang auf
???
und öffnen Sie dann mit einem Klick aufdie Eingabehilfe. Wählen Sie aus der Kategorie „Variablen“ unter „Application Glob_Var“ die Variable
rTempActual
aus. So referenzieren Sie hier die globale VariablerTempActual
.Der Eingangsname ist
Glob_Var.rTempActual
. -
Legen Sie wie bei 3. einen weiteren Eingang mit dem Namen der globalen Variable
Glob_Var.rTempSet
an. -
Legen Sie einen weiteren Eingang an, klicken Sie auf die drei Fragezeichen
???
und ersetzen Sie diese mit dem NamenrHysteresis
.Weil dies nicht der Name einer bereits bekannten Variablen ist, erscheint der Dialog „Variable deklarieren“. Der Name ist bereits in den Dialog übernommen.
-
Füllen Sie die Felder im Dialog „Variable deklarieren“ mit dem „Datentyp“
REAL
und dem „Initialisierungswert“1
aus. Klicken Sie auf die Schaltfläche „OK“.Die Variable
rHysteresis
erscheint im Deklarationseditor. -
Nun fügen Sie einen Additionsbaustein ein: Klicken Sie im Fenster „Werkzeuge“ auf das Element „Baustein“ und ziehen Sie es mit der Maus an eine Stelle im CFC-Editor.
Der Baustein erscheint im CFC-Editor.
-
Ersetzen Sie
???
mitADD
.Der Baustein addiert alle Eingänge, die mit ihm verbunden sind.
-
Verbinden Sie den Eingang
Glob_Var.rTempSet
mit dem BausteinADD
. Klicken Sie dazu auf den Ausgangspin des Eingangs und ziehen Sie Ihn bis zum oberen Eingangspin des BausteinsADD
. -
Verbinden Sie auf die gleiche Weise den Eingang
rHysteresis
mit dem unteren Eingang des BausteinsADD
.Die beiden Eingänge
rHysteresis
undGlob_Var.rTempSet
werden nun vonADD
addiert. -
Wenn Sie ein Element im Editor verschieben möchten, klicken Sie auf eine freie Stelle im Element oder auf den Rahmen, so dass das Element selektiert ist (roter Rahmen, rot schattiert). Lassen Sie die Maustaste gedrückt und ziehen Sie das Element an die gewünschte Position.
-
Legen Sie einen weiteren Baustein rechts vom Baustein
ADD
an. Er sollGlob_Var.rTempActual
mit der Summe ausGlob_Var.rTempSet
+rHysteresis
vergleichen. Geben Sie dem Baustein die FunktionGT
(Greater Than).Der
GT
-Baustein arbeitet folgendermaßen:IF (oberer Eingang > unterer Eingang) THEN Ausgang := TRUE;
-
Verbinden Sie den Eingang
Glob_Var.rTempActual
mit dem oberen Eingang des BausteinsGT
. -
Verbinden Sie den Ausgang des Bausteins
ADD
mit dem unteren Eingang des BausteinsGT
. -
Legen Sie nun noch einen Funktionsbaustein rechts vom Baustein
GT
an, der den Kühlkompressor je nach Eingangsbedingung startet oder stoppt (Set - Reset). Tippen Sie im Feld???
den NamenSR
ein. Schließen Sie das geöffnete Eingabefeld oberhalb des Bausteins (SR_0
) mit der Eingabetaste.Der Dialog „Variable deklarieren“ erscheint.
-
Deklarieren Sie die Variable mit dem Namen
SR_0
und dem DatentypSR
. Klicken Sie auf die Schaltfläche „OK“.Der Baustein
SR
aus der BibliothekStandard
ist instanziert.SR
dient der Definition desTHEN
am Ausgang des GT-Bausteins. Die EingängeSET1
undRESET
erscheinen. -
Verbinden Sie die Ausgangsverbindung rechts am Baustein
GT
mit dem EingangSET1
des BausteinsSR_0
.SR
kann eine boolesche Variable vonFALSE
aufTRUE
und wieder zurück setzen. Wenn die Bedingung am EingangSET1
zutrifft, wird die boolesche Variable aufTRUE
gesetzt. Trifft die Bedingung anRESET
zu , wird die Variable wieder zurückgesetzt. Die boolesche (globale) Variable ist in unserem BeispielGlob_Var.xCompressor
. -
Legen Sie ein Element „Ausgang“ an und weisen Sie ihm die globale Variable
Glob_Var.xCompressor
zu. Ziehen Sie eine Verbindungslinie zwischenGlob_Var.xCompressor
und AusgangsverbindungQ1
vonSR
.
Jetzt geben Sie an, unter welcher Bedingung sich der Kompressor wieder abschalten
soll, also der RESET
-Eingang des SR-Bausteins ein TRUE
-Signal erhält. Dazu formulieren Sie die gegenteilige Bedingung wie oben. Verwenden
Sie dazu die Bausteine SUB
(Subtract) und LT
(Less Than).
Letztendlich entsteht folgender CFC-Plan:

Erstellen eines Programmbausteins zur Signalverwaltung im Kontaktplan-Editor
Sie implementieren nun in einem weiteren Programmbaustein die Signalverwaltung für den Alarmtongeber und für das Ein- und Ausschalten der Lampe. Dafür eignet sich die Implementierungssprache Kontaktplan (KOP).
Behandeln Sie die folgenden Signale jeweils in einem eigenen Netzwerk:
-
Wenn der Kompressor zu lange läuft, weil die Temperatur zu hoch ist, macht ein durchgehendes akkustisches Signal darauf aufmerksam.
-
Wenn die Türe zu lange geöffnet ist, macht ein getaktetes Signal darauf aufmerksam.
-
Solange die Türe geöffnet ist, brennt das Licht.
-
Legen Sie unterhalb von
Application
im Gerätebaum ein POU-Objekt des Typs „Programm“ mit der Implementierungssprache „Kontaktplan (KOP)“ an.Nennen Sie das Programm
Signals
.Signals
erscheint im Gerätebaum nebenPLC_PRG
. Der Kontaktplan-Editor öffnet mit der RegisterkarteSignals
. Im oberen Teil erscheint der Deklarationseditor, rechts das Fenster „Werkzeuge“. Der KOP enthält ein leeres Netzwerk. -
Im Netzwerk programmieren Sie, dass ein akkustisches Signal ertönt, wenn der Kühlkompressor zu lange läuft, ohne die Solltemperatur zu erreichen. Fügen Sie dazu einen Timer-Baustein
TON
ein. Er schaltet ein boolesches Signal erst nach einer vorgegebenen Zeit aufTRUE
: Wählen Sie im Fenster „Werkzeuge“ unter „Funktionsbausteine“ einenTON
aus und ziehen Sie ihn mit der Maus ins leere Netzwerk auf das erscheinende Rechteck „Hier starten“. Wenn das Feld grün wird, lassen Sie die Maustaste los.Der Baustein erscheint als Rechteck mit Ein- und Ausgängen und erhält automatisch den Instanznamen
TON_0
. Der Zeileneditor ist geöffnet und der Cursor blinkt dort. -
Drücken Sie [Eingabe].
Sie haben den Instanznamen bestätigt und der Dialog „Variable deklarieren“ öffnet sich.
-
Bestätigen Sie den Dialog mit „OK“.
Der eingefügte Baustein
TON
ist nun mit dem NamenTON_0
instanziert. Außerdem wird standardmäßig der obere Eingang als ein dem Baustein vorangehender Kontakt dargestellt.Wenn Sie die Hilfe zum Funktionsbaustein
TON
lesen wollen, stellen Sie den Cursor im/am Baustein in die Zeichenfolge "TON" und drücken [F1]. -
Programmieren Sie, dass der Baustein aktiviert wird, sobald der Kühlkompressor zu laufen beginnt: Benennen Sie zu diesem Zweck den Kontakt am oberen Eingang des Bausteins
Glob_Var.xCompressor
. Diese boolesche Variable haben Sie bereits in der GVLGlob_Var
deklariert.Wenn Sie beginnen, an der Eingabeposition einen Variablennamen einzugeben, erhalten Sie immer automatisch eine Liste aller Variablen, deren Namen mit den eingetippten Zeichen beginnen und die an dieser Stelle verwendbar sind. Diese Unterstützung ist eine Standardeinstellung in den CODESYS-Optionen für Intelligentes Codieren.
-
Fügen Sie das Signal ein, das aktiviert werden soll. Ziehen Sie dazu aus der Werkzeuge-Kategorie „Kontaktplan-Elemente“ eine „Spule “ an den Ausgang
Q
desTON
-Bausteins. Benennen Sie die Spule mitGlob_Var.xSignal
. -
Definieren Sie die Zeit ab Aktivierung des
TON_0
-Bausteins, nach der das Signal ertönen soll: Diese Definition erfolgt über die VariableGlob_Var.timAlarmThreshold
, die Sie zu diesem Zweck am EingangPT
vonTON_0
einfügen. Dazu klicken Sie auf das fein umrandete Rechteck rechts der Eingangsverbindung und geben den Variablennamen ein. -
Klicken Sie auf den
TON
-Baustein und wählen Sie im Kontextmenü den Befehl „Nicht verwendete FB-Aufruf-Parameter entfernen“.Der nicht verwendete Ausgang
ET
ist entfernt. -
Im zweiten Netzwerk des KOP programmieren Sie, dass das Signal getaktet ertönen soll, wenn die Türe zu lange geöffnet ist.
Klicken Sie unterhalb des ersten Netzwerks in das Editorfenster und wählen im Kontextmenü den Befehl „Netzwerk einfügen“.
Ein leeres Netzwerk mit Nummer „2“ erscheint.
-
Implementieren Sie wie im ersten Netzwerk einen
TON
-Baustein zur zeitgesteuerten Aktivierung des Signals, diesmal getriggert durch die globale VariableGlob_Var.xDoorOpen
am EingangIN
. Am EingangPT
fügen Sie die globale VariableGlob_Var.timDoorOpenThreshold
hinzu. -
Zusätzlich fügen Sie in diesem Netzwerk an Ausgang
Q
desTON
-Bausteins einenBLINK
-Baustein aus der BibliothekUtil
ein und instanzieren Sie ihn mitBlink_0
. -
Der Baustein
BLINK_0
taktet die SignalweiterleitungQ
und damitGlob_Var.xSignal
.Ziehen Sie hierfür zunächst 2 Elemente „Kontakt“ aus der Ansicht „Werkzeuge “ an den Ausgang
OUT
des Bausteins. Weisen Sie dem Kontakt direkt hinter dem AusgangQ
die VariableTON_1.Q
und dem zweiten Kontakt die globale VariableGlob_Var.xDoorOpen
zu. -
Hinter die beiden Kontakte fügen Sie ein Element „Spule“ ein und weisen Sie ihr die globale Variable
Glob_Var.xSignal
zu. -
Deklarieren Sie hierfür die lokale Variable
timSignalTime : TIME := T#1S;
und fügen Sie diese Variable an den EingängenTIMELOW
undTIMEHIGH
ein; die Taktdauer ist somit jeweils 1 Sekunde fürTRUE
und 1 Sekunde fürFALSE
. -
Klicken Sie auf den
TON
-Baustein und wählen Sie im Kontextmenü den Befehl „Nicht verwendete FB-Aufruf-Parameter entfernen.“Der nicht verwendete Ausgang
ET
wurde entfernt. -
Im dritten Netzwerk des KOP programmieren Sie, dass die Lampe leuchtet, solange die Tür geöffnet ist. Fügen Sie dazu ein weiteres Netzwerk ein und darin links einen Kontakt
GlobVar.xDoorOpen
, der direkt auf eine eingefügte SpuleGlob_Var.xLamp
leitet. -
CODESYS arbeitet die Netzwerke eines KOP nacheinander ab. Um zu erreichen, dass nur Netzwerk 1 oder nur Netzwerk 2 ausgeführt werden, bauen Sie jetzt am Ende von Netzwerk 1 noch einen Sprung zu Netzwerk 3 ein:
Selektieren Sie Netzwerk 3 durch einen Mausklick ins Netzwerk oder in das Feld mit der Netzwerknummer. Wählen Sie aus dem Kontextmenü den Befehl „Sprungmarke einfügen“. Ersetzen Sie den Text
Label:
der Sprungmarke im linken oberen Bereich des Netzwerks durchDoorIsOpen:
Selektieren Sie Netzwerk 1. Ziehen Sie aus dem Fenster „Werkzeuge“, Kategorie „Allgemeine“, das Element „Sprung“ ins Netzwerk. Platzieren Sie es auf dem erscheinenden Rechteck „Ausgang oder Sprung hier einfügen“.
Das Sprungelement erscheint. Das Sprungziel ist noch mit
???
angegeben. -
Selektieren Sie
???
und klicken Sie auf die Schaltfläche. Wählen Sie aus den möglichen Bezeichnern von Sprungmarken
DoorIsOpen
aus und bestätigen Sie mit „OK“.Die Sprungmarke zu Netzwerk 3 ist implementiert.
Das KOP-Programm sieht nun folgendermaßen aus:

Aufrufen des Programms Signals
im Hauptprogramm
In unserem Programmbeispiel soll das Hauptprogramm PLC_PRG
das Programm Signals
zur Signalverarbeitung aufrufen.
-
Doppelklicken Sie im Gerätebaum auf
PLC_PRG
.Das Programm
PLC_PRG
öffnet sich im Editor. -
Ziehen Sie ein Element „Baustein“ aus Ansicht „Werkzeuge“ in den Editor von
PLC_PRG
. -
Fügen Sie diesem Baustein über der Eingabehilfe aus der Kategorie „Bausteinaufrufe“ den Aufruf des Programms
Signals
hinzu.
Erstellen eines ST-Programmbausteins für eine Simulation
Da die Applikation dieses Beispielprojekts nicht mit realen Sensoren und Aktoren verknüpft ist, schreiben Sie nun noch ein Programm zur Simulation von Temperaturanstieg und Temperatursenkung. Damit können Sie nachher das Arbeiten der Kühlschranksteuerung im Online-Betrieb beobachten.
Sie erstellen das Simulationsprogramm in Strukturiertem Text.
Das Programm erhöht die Temperatur solange, bis das Hauptprogramm PLC_PRG
feststellt, dass die Solltemperatur überschritten ist und den Kühlkompressor aktiviert.
Daraufhin senkt das Simulationsprogramm die Temperatur wieder, bis das Hauptprogramm
den Kompressor wieder deaktiviert.
-
Fügen Sie unter der Applikation einen POU-Baustein namens
Simulation
des Typs „Programm“ und der Implementierungssprache „ST“ ein. -
Implementieren Sie Folgendes im ST-Editor:
PROGRAM Simulation VAR TON_1: TON; //The temperature is decreased on a time delay, when the comepressor has been activated P_Cooling: TIME:=T#500MS; xReduceTemp: BOOL; //Signal for dereasing the temperature TON_2: TON; //The temperature is increased on a time delay, when the compressor has been activated P_Environment: TIME:=T#2S; //Delay time when the door is closed P_EnvironmentDoorOpen: TIME:=T#1S; //Delay time when the door is open xRaiseTemp: BOOL; //Signal for increasing the temperature timTemp: TIME; //Delay time iCounter: INT; END_VAR iCounter := iCounter + 1; // No function, just for demonstration purposes. // After the compressor has been activated due to TempActual being too high, the temperature decreases. // The temperature is decremented by 0.1°C per cycle after a delay of P_Cooling IF Glob_VAR.xCompressor THEN TON_1(IN:= Glob_Var.xCompressor, PT:= P_Cooling, Q=>xReduceTemp); IF xReduceTemp THEN Glob_Var.rTempActual := Glob_Var.rTempActual-0.1; TON_1(IN:=FALSE); END_IF END_IF //If the door is open, the warming occurs faster; SEL selects P_EnvironmentDoorOpen timTemp:=SEL(Glob_Var.xDoorOpen, P_Environment, P_EnvironmentDoorOpen); //If the compressor is not in operation, then the cooling chamber becomes warmer. //The temperature is incremented by 0.1°C per cycle after a delay of tTemp TON_2(IN:= TRUE, PT:= timTemp, Q=>xRaiseTemp); IF xRaiseTemp THEN Glob_Var.rTempActual := Glob_Var.rTempActual + 0.1; TON_2(IN:=FALSE); END_IF
Für ein komfortables Bedienen und Beobachten des gesamten Steuerungsprogramms empfiehlt
sich der Einsatz einer Visualisierung. Im fertigen Beispielprojekt zum vorliegenden
Tutorial, das mit der CODESYS-Standardinstallation (Verzeichnis Projekte
) bereitgestellt wird, ist eine mit CODESYS Visualization erstellte Visualisierung eingebaut. Sie können dieses Projekt auf die Steuerung laden
und starten, um es zusammen mit der Visualisierung in Funktion zu sehen. Beim Start
wird die Live_Visu
mit einer Darstellung des Kühlschranks gestartet, die das Arbeiten des Simulationsprogramms
wiedergibt, ohne dass Sie eine Eingabe vornehmen müssen. Sie können allerdings über
einen Mausklick auf den Ein/Aus-Schalter das Tür-Öffnen und Tür-Schließen herbeiführen,
und auch ein Verstellen der Temperaturvorwahl über die Nadel des Drehreglers ist möglich.
Wir gehen im Rahmen dieses Tutorials hier nicht auf die Erstellung der Visualisierung
ein. Ein entsprechendes Tutorial im Rahmen der Hilfe zu CODESYS Visualization ist geplant.
Festlegen der auszuführenden Programme in der Taskkonfiguration
Die voreingestellte Taskkonfiguration enthält den Aufruf für das Hauptprogramm PLC_PRG
. Für unser Beispielprojekt müssen Sie noch den Aufruf für das Programm Simulation
hinzufügen.
-
Ziehen Sie im Gerätebaum den Eintrag
Simulation
mit der Maus aufMainTask
unter der „Taskkonfiguration“.Das Programm
Simulation
ist in der Taskkonfiguration eingefügt. -
Wenn Sie sich die Taskkonfiguration ansehen möchten, doppelklicken Sie auf den Eintrag
MainTask
, um den Editor zu öffnen.Sie sehen in der Tabelle im unteren Teil des Editors die POUs, die von der Task aufgerufen werden:
PLC_PRG
(standardmäßig eingetragen) undSimulation
. Der Aufruftyp der Task ist „Zyklisch“ im Intervall von 20 Millisekunden. Im Onlinebetrieb wird die Task pro Zyklus 1x die beiden Bausteine abarbeiten.
Definieren der "Aktiven Applikation" für die Kommunikation mit der SPS
Der Name der Applikation Application
ist im Fenster „Geräte “ fett dargestellt. Das bedeutet, dass diese Applikation als "aktive Applikation" gesetzt
wurde. Die Kommunikation mit der Steuerung bezieht sich dann auf diese Applikation.
Wenn es in einem Projekt nur eine Applikation gibt, wird sie automatisch zur aktiven Applikation. Wenn Ihre Applikation noch nicht aktiv ist, aktivieren Sie sie folgendermaßen:
-
Klicken Sie mit der rechten Maustaste auf
Application
und wählen Sie im Kontextmenü den Befehl „Aktive Applikation setzen“.Die Applikation „Application“ wird in der Ansicht „Geräte“ jetzt fett dargestellt.
Überprüfen des Applikationsprogramms auf Fehler
Während der Eingabe von Code weist CODESYS Sie sofort durch rote Unterkringelung auf Syntaxfehler hin. Die Ergebnisse der Prüfung sehen Sie auch im Meldungsfenster. Wenn nötig, öffnen Sie das Meldungsfenster mit dem Befehl „Ansicht Meldungen“. Die Meldungen werden der Meldungskategorie „Vorkompilierung“ angezeigt. Sie können eine Meldung selektieren und mit Taste [F4] zur entsprechenden Codestelle springen. Weitere Prüfungen des Applikationsprogramms werden dann durchgeführt, wenn die Applikation auf die Steuerung geladen wird.
Nur eine fehlerfreie Applikation können Sie nachher auf die Steuerung laden.
Herstellen der Verbindung zur SPS: Sehen Sie dazu die folgenden Abschnitte:
Starten von Gatewayserver und SPS




VORSICHT

Zugriffsmöglichkeiten auf Steuerung prüfen
Steuerungen dürfen unter keinen Umständen vom Internet oder nicht vertrauenswürdigen Netzen aus zugreifbar sein! Im Speziellen dürfen die Programmier-Ports der Steuerung unter keinen Umständen ungeschützt aus dem Internet zugreifbar sein (meist UDP-Ports 1740..1743 und TCP-Ports 1217 + 11740 oder die steuerungsspezifischen Ports)! Wenn ein Zugriff aus dem Internet dennoch ermöglicht werden muss, dann muss zwingend ein sicheres Verfahren gewählt werden, um sich mit der Steuerung zu verbinden (z.B. VPN).
Siehe auch: ⮫ „Gerätebenutzerverwaltung handhaben“
Gatewayserver starten:
Standardmäßig wird mit CODESYS auch das Programm GatewaySysTray
installiert. Über dieses Programm können Sie mit dem Gatewayserver kommunizieren.
Der Gatewayserver wird beim Systemstart automatisch als Dienst gestartet. Überprüfen
Sie, ob die Windows-Taskleiste das Programmsymbol enthält.
Wenn der Gatewayserver nicht läuft, erscheint das Symbol so:
. In diesem Fall können Sie durch einen Mausklick auf das Symbol das Gatewaymenü öffnen
und den Befehl „Start Gateway“ wählen.
SPS starten:
Standardmäßig wird mit CODESYS auch das Programm CODESYSControlSysTray
installiert. Über dieses Programm können Sie mit dem CODESYS Control Service kommunizieren. Als Schutz gegen unautorisierten Zugriff wird ab CODESYS V3.5 SP2 der Steuerungsdienst nicht mehr automatisch beim Systemstart mit gestartet.
Starten Sie die SPS folgendermaßen: Öffnen Sie mit einem Mausklick auf das in der Windows-Taskleiste das SPS-Menü und wählen Sie den Befehl „Start PLC“. Wenn die SPS läuft, ändert sich das Symbol zu
. Ein beim Starten erscheinender Dialog weist Sie darauf hin, dass die gestartete
SPS einen Programmierzugriff ermöglicht. Beachten Sie dazu unbedingt die oben angegebenen
Sicherheitshinweise!
Bei der allerersten Kommunikationskonfiguration: Hinzufügen des Gateway
-
Doppelklicken Sie auf den Eintrag
Device (CODESYS Control Win V3
in der Ansicht „Geräte“.Im Editor
Device
erscheint die Registerkarte „Kommunikation“.
Wenn dies Ihre erste Kommunikationskonfiguration mit CODESYS V3 ist, müssen Sie nun den lokalen Gatewayserver definieren. Wenn Sie den Gatewayserver schon einmal definiert haben, wird er auf der Registerkarte „Kommunikation“ angezeigt. In diesem Fall können Sie jetzt mit Schritt ⮫ „Festlegen des Kommunikationskanals“ weitermachen.
Der Gatewayserver wird mit der CODESYS-Installation bereitgestellt.
-
Wählen Sie den Befehl „Gateway Neues Gateway hinzufügen“.
Der Dialog „Gateway“ erscheint.
-
Geben Sie im Eingabefeld „Name“ einen symbolischen Namen für das Gateway ein.
-
Wählen Sie in der Liste „Treiber“ den Eintrag „TCP/IP“ aus.
-
Doppelklicken Sie auf die rechte Spalte der Zeile „IP-Adresse“ und geben Sie im Eingabefeld
localhost
ein. -
Klicken Sie auf die Schaltfläche „OK“.
Das Gateway wird in der Registerkarte „Kommunikation“ (1) des Geräteeditors eingetragen. Wenn das Gateway korrekt läuft, wird ein grün gefüllter Kreis an der Grafik des Gateway angezeigt:
Festlegen des Kommunikationskanals
Nun definieren Sie den Kommunikationskanal zum Gerät, der dann über das gesetzte Gateway verwendet wird. Öffnen Sie dazu die Registerkarte „Kommunikation“ des Geräteeditors mit einem Doppelklick auf den Eintrag „Device“ im Gerätebaum.
-
Klicken Sie auf die Schaltfläche „Netzwerk durchsuchen“, um das lokale Netzwerk nach allen verfügbaren Geräten zu durchsuchen.
Der Dialog „Gerät auswählen“ (1) erscheint mit einer Liste aller Geräte, mit denen Sie eine Verbindung einrichten können.
-
Wählen Sie im Baum den Eintrag mit dem Namen Ihres Computers aus.
-
Klicken Sie „OK“.
Der Kanal ist jetzt aktiv und auf der Registerkarte „Kommunikation“ erscheint die zugehörige Information unterhalb der Gerätegrafik.
-
Selektieren Sie das gewünschte Gerät und klicken Sie auf „OK“.
Sie erhalten eine Meldungsbox mit dem Hinweis, dass für das Gerät eine Benutzerverwaltung obligatorisch, aber noch nicht aktiviert ist. Sie werden gefragt, ob Sie die Benutzerverwaltung jetzt aktivieren wollen. Sie erhalten den Hinweis, dass Sie in diesem Fall einen neuen Administrator-Benutzer anlegen und sich dann als dieser Benutzer einloggen müssen.
-
Schließen Sie die Abfrage mit „Ja“.
Der Dialog „Gerätebenutzer hinzufügen“ öffnet sich zum Anlegen eines initialen Geräteadministrators.
-
Definieren Sie die Zugangsdaten für den Geräteadministrator: „Name“ und „Passwort“. Aktivieren Sie die Option „Passwort kann vom Benutzer geändert werden“. Schließen Sie mit „OK“ ab.
Der Dialog „Gerätebenutzeranmeldung“ öffnet sich.
-
Geben Sie die im vorigen Schrtt definierten Zugangsdaten für den Geräteadministrator ein.
Der Verbindungspfad zur Steuerung ist eingestellt.
Alle Kommunikationsaktionen beziehen sich jetzt genau auf diesen Kanal. Beachten Sie dies später, wenn Sie mehrere Kommunikationskanäle im Projekt haben.
Applikation auf der SPS: Sehen Sie dazu die folgenden Abschnitte
Laden der Applikation auf die SPS
Voraussetzung: Die Applikation wurde fehlerfrei übersetzt. Siehe Schritt ⮫ „Überprüfen des Applikationsprogramms auf Fehler“.
-
Wählen Sie den Befehl „Online Einloggen“.
Eine Dialogbox erscheint mit der Abfrage, ob die Applikation auf die Steuerung geladen werden soll.
-
Klicken Sie auf „Ja“.
Die Applikation wird auf die Steuerung geladen. Die Einträge für die Steuerung und die Applikation im Fenster „Geräte“ werden grün hinterlegt. Hinter dem Objekt „Application“ steht
Stop
. In der Taskleiste erscheint der aktuelle Status der Steuerung:.
Starten der Applikation
Wenn Sie das Tutorial bis zu diesem Punkt vollständig befolgt haben, können Sie nun die Applikation „Application“ auf der SPS „Device (CODESYS Control Win V3“) verwenden.
-
Rechtsklicken Sie im Fenster „Geräte“ auf das Objekt „Application“ und wählen Sie im Kontextmenü den Befehl „Starten“ aus.
Das Programm läuft. Die Einträge für die Steuerung und die Applikation im Fenster „Geräte“ werden grün hinterlegt. Hinter dem Objekt „Application“ steht
run
. In der Taskleiste erscheint der aktuelle Status der Steuerung:.
Monitoring und einmaliges Schreiben von Variablenwerten zur Laufzeit
Im Folgenden sehen Sie sich das "Monitoring" der Variablenwerte in den verschiedenen Programmbausteinen an und setzen aus CODESYS heraus einmalig einen bestimmten Variablenwert auf der Steuerung.
Die Istwerte der Applikationsvariablen sehen Sie in den Online-Ansichten der Bausteineditoren oder in Überwachungslisten. Im Beispiel hier beschränken wir uns auf das Monitoring im Bausteineditor.
Voraussetzung: Die Applikation läuft auf der Steuerung.
-
Öffnen Sie mit Doppelklicks auf die Objekte
PLC_PRG
,Signals
,Simulation
undGlob_Var
im Gerätebaum die Onlineansichten der Editoren.Im Deklarationsteil jeder Ansicht erscheint in der Tabelle der Ausdrücke in der Spalte „Wert“ (3) der Istwert der Variablen (1) auf der Steuerung (siehe Abbildung).
Das Monitoring im Implementierungsteil hängt von der Implementierungssprache ab: Bei nicht-booleschen Variablen steht der Wert immer in einem rechteckigen Feld rechts des Bezeichners. Im ST-Editor gilt dies auch für boolesche Variablen. Diese Anzeige nennen wir "Inlinemonitoring". In den grafischen Editoren wird der Wert einer booleschen Variablen durch die Farbe der Ausgangsverbindungslinie angezeigt: schwarz für
FALSE
, blau fürTRUE
: -
Betrachten Sie das Verändern der Variablenwerte in den verschiedenen Bausteinen. Beispielsweise sehen Sie in der GVL
Glob_Var
, wie sich durch die Abarbeitung des Simulationsprogramms die Werte vonrTempActual
undxCompressor
ändern.
Einmaliges Setzen von Variablenwerten auf der Steuerung:
-
Setzen Sie den Fokus in die Onlineansicht der GVL
Glob_Var
. -
Um einen neuen Sollwert vorzugeben, doppelklicken Sie bei dem Ausdruck
rTempSet
in die Spalte „Vorbereiteter Wert“ (2) .Ein Eingabefeld öffnet sich.
-
Tragen Sie den Wert
9
ein und verlassen Sie das Eingabefeld. -
Um ein Offenstehen der Tür vorzugeben, klicken Sie bei Ausdruck
xDoorOpen
1x in das Feld „Vorbereiteter Wert“. Der WertTRUE
wird eingetragen. Klicken Sie weitere 3 Male, um zu sehen, dass Sie damit den vorbereiteten Wert aufFALSE
, dann wieder auf leer und dann wieder aufTRUE
schalten können. -
Um den vorbereiteten Wert
TRUE
einmalig auf die Variable zu schreiben, drücken Sie [Strg] + [F7].Die beiden Werte werden jeweils in die Spalte „Wert“ (3) übertragen. Die Variable
xDoorOpen
verändert ihren Wert jetzt nicht mehr und die Solltemperatur ist jetzt 9 Grad. Die VariabletimTemp
wechselt auf den Wert1s
, da nun die Kühlschranktür "geöffnet" ist und dadurch das Erwärmen durchSimulation
schneller als vorher (2s
) erfolgen soll.
Setzen von Haltepunkten und schrittweise Ausführung zur Laufzeit
"Debuggen": Für die Fehlersuche wollen Sie die Variablenwerte an bestimmten Codestellen überprüfen. Dazu können Sie Haltepunkte für die Abarbeitung definieren und eine schrittweise Ausführung der Anweisungen veranlassen.
Voraussetzung: Die Applikation ist auf die Steuerung geladen und läuft.
-
Öffnen Sie mit einem Doppelklick auf
Simulation
das Programm im Editor. -
Setzen Sie den Cursor in die Codezeile
iCounter := iCoutner + 1;
und drücken Sie [F9]Vor der Codezeile erscheint das Symbol
. Es zeigt an, dass an dieser Zeile ein Haltepunkt gesetzt ist. Das Symbol wechselt sofort zu
. Der gelbe Pfeil zeigt immer auf die nächste abzuarbeitende Anweisung. In der Taskleiste erscheint
anstelle von
.
-
Betrachten Sie den Wert der Variablen
iCounter
im Inlinemonitoring oder im Deklarationsteil des ProgrammsSimulation
.Der Variablenwert verändert sich nicht mehr. Die Abarbeitung wurde am Haltepunkt gestoppt.
-
Drücken Sie [F5], was die Abarbeitung wieder startet.
Das Programm stoppt nach 1 Zyklus erneut am Haltepunkt.
iCounter
wurde um 1 hochgezählt. -
Drücken Sie [F8], um den nächsten Abarbeitungsschritt auszuführen.
„RETURN“ am Ende der Zeile
iCounter := iCounter + 1;
Anweisung wird gelb markiert. -
Drücken Sie erneut [F8], um den nächsten Abarbeitungsschritt auszuführen.
Die Abarbeitung springt in den Editor von
PLC_PRG
. Wiederholtes Drücken von [F8] zeigt, wie das Programm Schritt für Schritt ausgeführt wird. Die auszuführende Anweisung wird wieder jeweils mit einem gelben Pfeil gekennzeichnet. -
Um den Haltepunkt zu deaktivieren und zur normalen Abarbeitung zurückzukehren, setzen Sie den Cursor erneut in die Codezeile und drücken [F9]. Drücken Sie dann [F5], um die Applikation wieder in den Modus
zu bringen.
Ausführen eines Einzelzyklus zur Laufzeit
Voraussetzung: Die Applikation ist auf die Steuerung geladen und läuft.
-
Beobachten Sie wie oben bei der schrittweisen Ausführung wieder die Zeile
iCounter := iCounter + 1;
im ProgrammSimulation
. -
Drücken Sie [Strg] + [F5] oder wählen Sie den Befehl „Debug Einzelzyklus“, um einen Einzelzyklus auszuführen.
Die Abarbeitung durchläuft 1 Zyklus und bleibt wieder auf dem Haltepunkt stehen.
iCounter
wurde um 1 hochgezählt. -
Drücken Sie weitere Male [Strg] + [F5], um Einzelzyklen zu sehen. Drücken Sie dann wieder [F5].
Das Programm läuft wieder ohne Halt und ohne geforcte Werte. Die Variable
temp
hat wieder den Wert1s
. In der Statusleiste erscheint wieder.