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
Utilaus.Bestätigen Sie die Auswahl mit „OK“
Die Bibliothek
Utilwird 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
Applicationund wählen im Kontextmenü den Befehl „Objekt hinzufügen Globale Variablenliste“. Ändern Sie den automatisch eingetragenen NamenGVLzuGlob_Varund bestätigen Sie mit „Hinzufügen“.Unter
Applicationerscheint das Objekt
Glob_Var. Der GVL-Editor öffnet rechts vom Gerätebaum. -
Wenn die textuelle Ansicht erscheint, sind die Schlüsselwörter
VAR_GLOBALundEND_VARbereits enthalten. Aktivieren Sie für unser Beispiel mit einem Klick auf die Schaltfläche
in 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_GLOBALund der „Datentyp“BOOLeingetragen. -
Tippen Sie
rTempActualim 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
REALaus 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_PRGim 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 auf
die Eingabehilfe. Wählen Sie aus der Kategorie „Variablen“ unter „Application Glob_Var“ die Variable rTempActualaus. 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.rTempSetan. -
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“
REALund dem „Initialisierungswert“1aus. Klicken Sie auf die Schaltfläche „OK“.Die Variable
rHysteresiserscheint 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.rTempSetmit 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
rHysteresismit dem unteren Eingang des BausteinsADD.Die beiden Eingänge
rHysteresisundGlob_Var.rTempSetwerden nun vonADDaddiert. -
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
ADDan. Er sollGlob_Var.rTempActualmit der Summe ausGlob_Var.rTempSet+rHysteresisvergleichen. 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.rTempActualmit dem oberen Eingang des BausteinsGT. -
Verbinden Sie den Ausgang des Bausteins
ADDmit dem unteren Eingang des BausteinsGT. -
Legen Sie nun noch einen Funktionsbaustein rechts vom Baustein
GTan, der den Kühlkompressor je nach Eingangsbedingung startet oder stoppt (Set - Reset). Tippen Sie im Feld???den NamenSRein. 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_0und dem DatentypSR. Klicken Sie auf die Schaltfläche „OK“.Der Baustein
SRaus der BibliothekStandardist instanziert.SRdient der Definition desTHENam Ausgang des GT-Bausteins. Die EingängeSET1undRESETerscheinen. -
Verbinden Sie die Ausgangsverbindung rechts am Baustein
GTmit dem EingangSET1des BausteinsSR_0.SRkann eine boolesche Variable vonFALSEaufTRUEund wieder zurück setzen. Wenn die Bedingung am EingangSET1zutrifft, wird die boolesche Variable aufTRUEgesetzt. Trifft die Bedingung anRESETzu , 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.xCompressorzu. Ziehen Sie eine Verbindungslinie zwischenGlob_Var.xCompressorund AusgangsverbindungQ1vonSR.
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
Applicationim Gerätebaum ein POU-Objekt des Typs „Programm“ mit der Implementierungssprache „Kontaktplan (KOP)“ an.Nennen Sie das Programm
Signals.Signalserscheint 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
TONein. Er schaltet ein boolesches Signal erst nach einer vorgegebenen Zeit aufTRUE: Wählen Sie im Fenster „Werkzeuge“ unter „Funktionsbausteine“ einenTONaus 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
TONist nun mit dem NamenTON_0instanziert. Außerdem wird standardmäßig der obere Eingang als ein dem Baustein vorangehender Kontakt dargestellt.Wenn Sie die Hilfe zum Funktionsbaustein
TONlesen 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_Vardeklariert.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
QdesTON-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 EingangPTvonTON_0einfü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
ETist 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.xDoorOpenam EingangIN. Am EingangPTfügen Sie die globale VariableGlob_Var.timDoorOpenThresholdhinzu. -
Zusätzlich fügen Sie in diesem Netzwerk an Ausgang
QdesTON-Bausteins einenBLINK-Baustein aus der BibliothekUtilein und instanzieren Sie ihn mitBlink_0. -
Der Baustein
BLINK_0taktet die SignalweiterleitungQund damitGlob_Var.xSignal.Ziehen Sie hierfür zunächst 2 Elemente „Kontakt“ aus der Ansicht „Werkzeuge “ an den Ausgang
OUTdes Bausteins. Weisen Sie dem Kontakt direkt hinter dem AusgangQdie VariableTON_1.Qund dem zweiten Kontakt die globale VariableGlob_Var.xDoorOpenzu. -
Hinter die beiden Kontakte fügen Sie ein Element „Spule“ ein und weisen Sie ihr die globale Variable
Glob_Var.xSignalzu. -
Deklarieren Sie hierfür die lokale Variable
timSignalTime : TIME := T#1S;und fügen Sie diese Variable an den EingängenTIMELOWundTIMEHIGHein; die Taktdauer ist somit jeweils 1 Sekunde fürTRUEund 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
ETwurde 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.xLampleitet. -
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 DoorIsOpenaus 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
Signalshinzu.
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
Simulationdes 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
Simulationmit der Maus aufMainTaskunter der „Taskkonfiguration“.Das Programm
Simulationist 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
Applicationund 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 V3in der Ansicht „Geräte“.Im Editor
Deviceerscheint 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
localhostein. -
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,SimulationundGlob_Varim 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 vonrTempActualundxCompressorä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
rTempSetin die Spalte „Vorbereiteter Wert“ (2) .Ein Eingabefeld öffnet sich.
-
Tragen Sie den Wert
9ein und verlassen Sie das Eingabefeld. -
Um ein Offenstehen der Tür vorzugeben, klicken Sie bei Ausdruck
xDoorOpen1x in das Feld „Vorbereiteter Wert“. Der WertTRUEwird eingetragen. Klicken Sie weitere 3 Male, um zu sehen, dass Sie damit den vorbereiteten Wert aufFALSE, dann wieder auf leer und dann wieder aufTRUEschalten können. -
Um den vorbereiteten Wert
TRUEeinmalig auf die Variable zu schreiben, drücken Sie [Strg] + [F7].Die beiden Werte werden jeweils in die Spalte „Wert“ (3) übertragen. Die Variable
xDoorOpenverändert ihren Wert jetzt nicht mehr und die Solltemperatur ist jetzt 9 Grad. Die VariabletimTempwechselt auf den Wert1s, da nun die Kühlschranktür "geöffnet" ist und dadurch das Erwärmen durchSimulationschneller 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
Simulationdas 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
iCounterim 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.
iCounterwurde 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.
iCounterwurde 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
temphat wieder den Wert1s. In der Statusleiste erscheint wieder
.