Ihr erstes TwinCAT-3-SPS-Projekt

Zum Inhalt Ihres ersten Projekts

In diesem Tutorial werden Sie eine einfache Kühlschranksteuerung programmieren.

Projektierung:

Die Steuerung der Kühltätigkeit erfolgt im Hauptprogramm des SPS-Projekts, die Signalverwaltung in einem weiteren Programmbaustein. Die benötigten Standardfunktionsbausteine sind in der Bibliothek Tc2_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 Onlinebetrieb beobachten. Variablen, die von allen Bausteinen verwendet werden sollen, definieren Sie in einer globalen Variablenliste.

Anlegen des SPS-Projekts

1. Wählen Sie im Menü Datei den Befehl Neu > Projekt, um ein neue TwinCAT-Projektdatei anzulegen.
Eine neue Projektmappe mit dem TwinCAT-Projektbaum öffnet sich im Projektmappen-Explorer.
2. Selektieren Sie im Projektmappen-Explorer den Knoten SPS und wählen Sie den Befehl Neues Element hinzufügen, um dem TwinCAT-Projekt ein SPS-Projekt hinzuzufügen.
Der Dialog Neues Element hinzufügen – TwinCAT <Projektname> öffnet sich.
3. Selektieren Sie in der Kategorie Plc Templates die Vorlage Standard PLC Project.
4. Geben Sie einen Namen und einen Speicherort für das Projekt an und klicken Sie auf die Schaltfläche Hinzufügen.
Mit dem gewählten Template wird automatisch ein Programm MAIN angelegt, das von einem Task aufgerufen wird. Als Programmiersprache wird automatisch „Strukturierter Text (ST)“ ausgewählt.
Ihr erstes TwinCAT-3-SPS-Projekt 1:
Unter References ist automatisch der Bibliotheksverwalter mit einigen wichtigen Standardbibliotheken angewählt. Die Bibliothek Tc2_Standard enthält alle Funktionen und Funktionsbausteine, die von der Norm IEC 61131-3 beschrieben werden.
Ihr erstes TwinCAT-3-SPS-Projekt 2:

Deklarieren der globalen Variablen

Deklarieren Sie zunächst die Variablen, die Sie im gesamten SPS-Projekt verwenden wollen. Dazu legen Sie eine globale Variablenliste an:

1. Selektieren Sie den Unterordner GVLs im SPS-Projektbaum und wählen Sie im Kontextmenü den Befehl Hinzufügen > Globale Variablenliste. Ändern Sie den automatisch eingetragenen Namen „GVL“ zu „GVL_Var“ und bestätigen Sie mit Öffnen.
Im SPS-Projektbaum im Unterordner GVLs erscheint das Objekt „GVL_Var“ (Ihr erstes TwinCAT-3-SPS-Projekt 3:). Der GVL-Editor öffnet sich.
2. Wenn die textuelle Ansicht erscheint, sind die Schlüsselwörter VAR_GLOBAL und END_VAR bereits enthalten. Aktivieren Sie für das Beispiel mit einem Klick auf die Schaltfläche Ihr erstes TwinCAT-3-SPS-Projekt 4: in der rechten Randleiste des Editors die tabellarische Ansicht.
Eine leere Zeile erscheint. Der Cursor ist in der Spalte Name.
3. Tippen Sie „fTempActual“ im Feld Name ein.
Gleichzeitig werden in der Zeile automatisch der Gültigkeitsbereich VAR_GLOBAL und der Datentyp BOOL eingetragen.
4. Doppelklicken Sie in das Feld in der Spalte Datentyp.
Das Feld ist jetzt editierbar und die Schaltfläche Ihr erstes TwinCAT-3-SPS-Projekt 5: erscheint.
5. Klicken Sie auf die Schaltfläche und wählen Sie Eingabehilfe.
Der Dialog Eingabehilfe öffnet sich.
6. Wählen Sie den Datentyp REAL aus und klicken Sie auf die Schaltfläche OK.
7. 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

fTempActual

REAL

1.0

Isttemperatur

fTempSet

REAL

8.0

Solltemperatur

bDoorOpen

BOOL

FALSE

Status der Tür

tImAlarmThreshold

TIME

T#30s

Kompressorlaufzeit, nach der ein Signal ertönt.

tDoorOpenThreshold

TIME

T#10s

Zeit ab Türöffnung, nach der ein Signal ertönt.

xCompressor

BOOL

FALSE

Steuersignal

xSignal

BOOL

FALSE

Steuersignal

xLamp

BOOL

FALSE

Statusmeldung

Hauptprogramm zur Kühlungssteuerung im CFC-Editor erstellen

Im standardmäßig angelegten Hauptprogrammbaustein MAIN beschreiben Sie nun die Hauptfunktion des SPS-Programms: 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 „Continous Function Chart (CFC)“ zu beschreiben, führen Sie folgende Schritte aus:

1. Da der automatisch angelegte Hauptprogrammbaustein MAIN standardmäßig in der Implementierungssprache „Strukturierter Text (ST)“ angelegt wird, müssen Sie dieses zunächst löschen und mit dem Kontextmenübefehl Hinzufügen > POU… ein neues Programm MAIN in der Implementierungssprache „Continous Function Chart (CFC)“ anlegen.
2. Doppelklicken Sie dann auf das Programm MAIN im SPS-Projektbaum (Unterordner POUs).
Der CFC-Editor öffnet sich mit der Registerkarte MAIN. Oberhalb des grafischen Editorfeldes erscheint der Deklarationseditor in textueller oder tabellarischer Darstellung. Rechts ist die Ansicht Werkzeugkasten. Sollte der Werkzeugkasten nicht erscheinen, können Sie ihn über den Befehl Werkzeugkasten im Menü Ansicht aufrufen und auf der Arbeitsfläche platzieren.
3. Klicken Sie in der Ansicht Werkzeugkasten auf das Element Eingang und ziehen Sie es mit der Maus an eine Stelle im CFC-Editor.
Der namenlose Eingang ??? wurde eingefügt.
4. Klicken Sie im CFC-Editor auf den Eingang ??? und öffnen Sie mit einem Klick auf Ihr erstes TwinCAT-3-SPS-Projekt 6: die Eingabehilfe.
5. Wählen Sie aus der Kategorie Variablen unter Projekt > GVLs die Variable fTempActual aus und bestätigen Sie den Dialog mit OK, um die globale Variable fTempActual zu referenzieren.
6. Legen Sie wie bei Schritt 3 einen weiteren Eingang mit dem Namen der globalen Variable rTempSet an.
7. Legen Sie einen weiteren Eingang an, klicken Sie auf ??? und ersetzen Sie diese mit dem Namen fHysteresis.
Da dies nicht der Name einer bereits bekannten Variablen ist, erscheint der Dialog Variable deklarieren. Der Name ist bereits in den Dialog übernommen.
8. 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 fHysteresis erscheint im Deklarationseditor.
9. Nun fügen Sie einen Additionsbaustein ein: Klicken Sie in der Ansicht Werkzeugkasten auf das Element Baustein und ziehen Sie es mit der Maus an eine Stelle im CFC-Editor.
Der Baustein erscheint im CFC-Editor.
10. Ersetzen Sie ??? mit ADD.
Der Baustein ADD (Addition) wird über die Bibliothek Tc2_Standard bereitgestellt. Er addiert alle Eingänge, die mit ihm verbunden sind.
11. Verbinden Sie den Eingang GVL_Var.fTempSet mit dem Baustein ADD. Klicken Sie dazu auf den Ausgangsverbinder des Eingangs und ziehen Sie Ihn bis zum oberen Eingang des Bausteins ADD.
12. Verbinden Sie auf die gleiche Weise den Eingang fHysteresis mit dem unteren Eingang des Bausteins ADD.
Die beiden Eingänge fHysteresis und fTempSet werden nun durch ADD addiert.
13. Wenn Sie ein Element im Editor verschieben möchten, klicken Sie auf eine freie Stelle im Element oder auf den Rahmen, sodass das Element selektiert ist (roter Rahmen, rot schattiert). Lassen Sie die Maustaste gedrückt und ziehen Sie das Element an die gewünschte Position.
14. Legen Sie einen weiteren Baustein rechts vom Baustein ADD an. Er soll „GVL_Var.fTempActual“ mit der Summe aus „GVL_Var.fTempSet“ und fHysteresis vergleichen. Geben Sie dem Baustein die Funktion GT (Greater Than).
Der GT-Baustein stammt ebenfalls aus der Bibliothek Tc2_Standard und arbeitet folgendermaßen: IF (oberer Eingang > unterer Eingang) THEN Ausgang.
15. Verbinden Sie den Eingang „GVL_Var.fTempActual“ mit dem oberen Eingang des Bausteins GT.
16. Verbinden Sie den Ausgang des Bausteins ADD mit dem unteren Eingang des Bausteins GT.
17. 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 Namen „SR“ ein. Schließen Sie das geöffnete Eingabefeld oberhalb des Bausteins (SR_0) mit der Eingabetaste.
Der Dialog Variable deklarieren erscheint.
18. Deklarieren Sie die Variable mit dem Namen „fbSR“ und dem Datentyp SR. Klicken Sie auf die Schaltfläche OK.
Der Baustein SR, ebenfalls in der Bibliothek Tc2_Standard definiert, dient der Definition des THEN am Ausgang des GT-Bausteins. Die Eingänge SET1 und RESET erscheinen.
19. Verbinden Sie die Ausgangsverbindung rechts am Baustein GT mit dem Eingang SET1 des Bausteins SR_0.
SR kann eine boolesche Variable von FALSE auf TRUE und wieder zurücksetzen. Wenn die Bedingung am Eingang SET1 zutrifft, wird die boolesche Variable auf TRUE gesetzt. Trifft die Bedingung an RESET zu, wird die Variable wieder zurückgesetzt. Die boolesche (globale) Variable ist in unserem Beispiel „bCompressor“.
20. Legen Sie ein Element Ausgang an und weisen Sie ihm die globale Variable „GVL_Var.bCompressor“ zu. Ziehen Sie eine Verbindungslinie zwischen „GVL_Var.bCompressor“ und der Ausgangsverbindung Q1 von SR.
21. 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).
Folgendes CFC-Diagramm entsteht:
Ihr erstes TwinCAT-3-SPS-Projekt 7:

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:

1. Legen Sie im SPS-Projektbaum (Unterordner POUs) ein POU-Objekt des Typs Programm mit der Implementierungssprache „Kontaktplan (KOP)“ an. Nennen Sie es „Signals.
Das Programm „Signals“ erscheint im SPS-Projektbaum unterhalb von MAIN. Der Kontaktplan-Editor öffnet mit der Registerkarte Signals. Im oberen Teil erscheint der Deklarationseditor, rechts die Ansicht Werkzeugkasten. Der KOP enthält ein leeres Netzwerk.
2. Im Netzwerk programmieren Sie, dass ein akustisches 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 TRUE-Signal erst nach einer vorgegebenen Zeit auf TRUE. Wählen Sie in der Ansicht Werkzeugkasten unter Funktionsbausteine einen TON aus und ziehen Sie ihn mit der Maus in das 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 obere Eingang ist standardmäßig bereits als ein dem Baustein vorangehender Kontakt dargestellt.
3. Schließen Sie das geöffnete Eingabefeld oberhalb des Bausteins (TON_0) mit der Eingabetaste.
Der Dialog Variable deklarieren öffnet sich.
4. Deklarieren Sie die Variable mit dem Namen „fbTimer1“ und dem Datentyp TON. Klicken Sie auf die Schaltfläche OK.
Ihr erstes TwinCAT-3-SPS-Projekt 8:

Wenn Sie die Hilfe zum Baustein lesen wollen, markieren Sie den vollständigen Namen des Bausteins mit dem Cursor und drücken Sie [F1].

5. 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 mit „GVL_Var.bCompressor“. Diese boolesche Variable haben Sie bereits in der globalen Variablenliste „GVL_Var“ definiert.
Ihr erstes TwinCAT-3-SPS-Projekt 9:

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 TwinCAT-Optionen für Intelligentes Kodieren („Smart Coding“).

6. Fügen Sie das Signal ein, das aktiviert werden soll: Ziehen Sie dazu aus der Ansicht Werkzeugkasten Kategorie Kontaktplan-Elemente eine Spule an den Ausgang Q des TON-Bausteins. Benennen Sie die Spule mit „GVL_Var.bSignal“.
7. Definieren Sie die Zeit ab Aktivierung des TON-Bausteins, nach der das Signal ertönen soll: Diese Definition erfolgt über die Variable „GVL_Var.tImAlarmThreshold“, die Sie zu diesem Zweck am Eingang PT von „fbTimer1“ einfügen. Dazu klicken Sie auf das fein umrandete Rechteck rechts der Eingangsverbindung und geben den Variablennamen ein.
8. 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.
9. Im zweiten Netzwerk des KOP programmieren Sie, dass das Signal getaktet ertönen soll, wenn die Türe zu lange geöffnet ist: Legen Sie dazu zunächst im SPS-Projektbaum (Unterordner POUs) ein neues POU-Objekt vom Typ Funktionsbaustein in der Implementierungssprache „Funktionsplan (FUP)“ an. Nennen Sie es „FB_Blinker“.
Der Funktionsbaustein FB_Blinker erscheint im SPS-Projektbaum oberhalb von MAIN. Der FUP-Editor öffnet mit der Registerkarte FB_Blinker. Im oberen Teil erscheint der Deklarationseditor, rechts die Ansicht Werkzeugkasten. Der FUP enthält ein leeres Netzwerk.
10. Der Blinker soll durch einen AND-Operator und zwei TON-Bausteine realisiert werden. Wählen Sie in der Ansicht Werkzeugkasten unter Allgemeine einen Baustein 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.
11. Klicken Sie auf ??? innerhalb des Bausteins und geben Sie in das nun editierbare Feld das Schlüsselwort AND ein. Bestätigen Sie mit der Eingabetaste. Da es sich um eine Funktion handelt, ist keine Instanziierung notwendig.
12. Wählen Sie in der Ansicht Werkzeugkasten unter Funktionsbausteine einen TON-Baustein aus und ziehen Sie ihn mit der Maus in das Netzwerk an den Ausgang des AND-Bausteins. 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.
13. Schließen Sie das geöffnete Eingabefeld oberhalb des Bausteins (TON_0) mit der Eingabetaste.
Der Dialog Variable deklarieren öffnet sich.
14. Deklarieren Sie die Variable mit dem Namen „fbTimerA“ und dem Datentyp TON. Klicken Sie auf die Schaltfläche OK.
15. Wählen Sie in der Ansicht Werkzeugkasten unter Funktionsbausteine einen weiteren TON-Baustein aus und ziehen Sie ihn mit der Maus in das Netzwerk an den Ausgang des TON-Bausteins „fbTimerA“. 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“.
16. Schließen Sie das geöffnete Eingabefeld oberhalb des Bausteins (TON_0) mit der Eingabetaste.
Der Dialog Variable deklarieren öffnet sich.
17. Deklarieren Sie die Variable mit dem Namen „fbTimerB“ und dem Datentyp TON. Klicken Sie auf die Schaltfläche OK.
18. Der erste Eingang des AND-Bausteins soll mit einer booleschen Variable „bStart“ verbunden werden. Klicken Sie auf ??? und tragen Sie den Variablennamen ein. Bestätigen Sie mit der Eingabetaste.
Der Dialog Variable deklarieren öffnet sich. Der Name und der Datentyp werden automatisch erkannt.
19. Wählen Sie als Gültigkeitsbereich den Eintrag VAR_INPUT aus und bestätigen Sie den Dialog mit OK.
20. Der zweite Eingang des AND-Bausteins soll mit dem Ausgang Q des zweiten TON-Bausteins „fbTimerB“ verbunden werden. Klicken Sie auf ??? und öffnen Sie über Ihr erstes TwinCAT-3-SPS-Projekt 10: die Eingabehilfe.
21. Wählen Sie in der Kategorie Variablen den Funktionsbaustein „fbTimerB“ und den Ausgang Q aus. Bestätigen Sie den Dialog mit OK.
Am zweiten Eingang wird die Variable „fbTimerB.Q“ ergänzt.
22. Markieren Sie den zweiten Eingang und öffnen Sie das Kontextmenü mit einem Rechtklick. Wählen Sie den Befehl Negation, um den Eingang zu negieren.
Am entsprechenden Eingang erscheint ein Kreis.
23. Über die Eingänge PT der TON-Bausteine geben Sie die Zeit vor bis der Ausgang Q gesetzt wird. Deklarieren Sie für die TON-Bausteine „fbTimerA“ und „fbTimerB“ über den Dialog Variable deklarieren die Eingangsvariablen „tSignalTimeOn“ und „tSignalTimeoff“. Wählen Sie als Gültigkeitsbereich den Eintrag VAR_INPUT.
24. Der erzeugte Taktimpuls soll am Ausgang Q des TON-Bausteins „fbTimerA“ ausgegeben werden. Wählen Sie dazu in der Ansicht Werkzeugkasten unter Allgemeine eine Zuweisung aus und ziehen Sie sie mit der Maus in das Netzwerk an den Ausgang des TON-Bausteins „fbTimerA“. Wenn das Feld grün wird, lassen Sie die Maustaste los.
Die Zuweisung wird zwischen den Bausteinen „fbTimerA“ und „fbTimerB“ ergänzt.
25. Klicken Sie auf ??? und tragen Sie den Variablennamen „bOut“ ein. Bestätigen Sie mit der Eingabetaste.
Der Dialog Variable deklarieren öffnet sich.
26. Wählen Sie den Gültigkeitsbereich VAR_OUTPUT und den Datentyp BOOL und bestätigen Sie den Dialog.
27. Entfernen Sie zuletzt die ??? an den nicht benutzten Ein- und Ausgängen der Bausteine.
Der fertig gestellte Funktionsbaustein FB_Blinker kann nun instanziiert und aufgerufen werden.
28. Öffnen Sie das Programm „Signals“ im FUP/KOP/AWL-Editor.
29. 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.
30. Implementieren Sie wie im ersten Netzwerk einen TON-Baustein zur zeitgesteuerten Aktivierung des Signals, diesmal getriggert durch die globale Variable „GVL_Var.bDoorOpen“ am Eingang IN. Am Eingang PT fügen Sie die globale Variable „GVL_Var.tImDoorOpenThreshold“ hinzu.
31. Zusätzlich fügen Sie in diesem Netzwerk am Ausgang Q des TON-Bausteins den Funktionsbaustein FB_Blinker ein.
32. Der Baustein FB_Blinker taktet die Signalweiterleitung Q und damit „GVL_Var.bSignal“. Ziehen Sie hierfür ein Element Kontakt aus der Ansicht Werkzeugkasten an den Ausgang OUT des Bausteins. Weisen Sie dem Kontakt die Variable „fbTimer2.Q“ zu.
33. Fügen Sie hinter dem Kontakt ein Element Spule ein und weisen Sie ihr die globale Variable „GVL_Var.bSignal“ zu.
34. Weisen Sie den beiden Eingangsvariabeln „tSignalTimeOn“ und „tSignalTimeOff“ des Funktionsbausteins FB_Blinker den Wert T#1s zu. Die Taktdauer ist somit jeweils 1 Sekunde für TRUE und 1 Sekunde für FALSE.
35. 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 wird entfernt.
36. 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 „GVL_Var.bDoorOpen“, der direkt auf eine eingefügte Spule „GVL_Var.bLamp“ leitet.
37. TwinCAT arbeitet die Netzwerke eines KOP nacheinander ab. Um zu erreichen, dass nur Netzwerk 1 oder nur Netzwerk 2 ausgeführt wird, 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 durch „DoorIsOpen“. Selektieren Sie Netzwerk 1. Ziehen Sie aus der Ansicht Werkzeugkasten, 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.
38. Selektieren Sie ??? und klicken Sie auf die Schaltfläche Ihr erstes TwinCAT-3-SPS-Projekt 11:. 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:
Ihr erstes TwinCAT-3-SPS-Projekt 12:
Ihr erstes TwinCAT-3-SPS-Projekt 13:

Aufrufen des Programms „Signals“ im Hauptprogramm

In unserem Programmbeispiel soll das Hauptprogramm MAIN das Programm „Signals“ zur Signalverarbeitung aufrufen.

1. Doppelklicken Sie im SPS-Projektbaum auf das Programm MAIN.
Das Programm MAIN öffnet sich im Editor.
2. Ziehen Sie ein Element Baustein aus der Ansicht Werkzeugkasten in den Editor von MAIN.
3. Fügen Sie diesem Baustein über die Eingabehilfe aus der Kategorie Bausteinaufrufe den Aufruf des Programms „Signals“ hinzu.

Erstellen eines ST-Programmbausteins für eine Simulation

Da dieses Beispielprojekt 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 Onlinebetrieb beobachten.

Sie erstellen das Simulationsprogramm in „Strukturiertem Text (ST)“.

Das Programm erhöht die Temperatur solange, bis das Hauptprogramm MAIN 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.

1. Fügen Sie dem SPS-Projektbaum einen POU-Baustein namens „Simulation“, des Typs Programm und der Implementierungssprache „Strukturierter Text (ST)“ein.
2. Implementieren Sie Folgendes im ST-Editor:
PROGRAM Simulation
VAR
    fbT1                 : TON;             //The temperature is decreased on a time delay, when the compressor has been activated
    tCooling             : TIME := T#500MS; 
    bReduceTemp          : BOOL;            //Signal for dereasing the temperature
    fbT2                 : TON;             //The temperature is increased on a time delay, when the compressor has been activated 
    tEnvironment         : TIME := T#2S;    //Delay time when the door is closed
    tEnvironmentDoorOpen : TIME := T#1s;    //Delay time when the door is open
    bRaiseTemp           : BOOL;            //Signal for increasing the temperature
    tImTemp              : TIME;            //Delay time
    nCounter             : INT;
END_VAR

// After the compressor has been activated due to fTempActual being too high, the temperature decreases.
// The temperature is decremented by 0.1°C per cycle after a delay of P_Cooling
IF GVL_VAR.bCompressor THEN
    fbT1(IN:= GVL_Var.bCompressor, PT:= tCooling, Q=>bReduceTemp);
    IF bReduceTemp THEN
        GVL_Var.fTempActual := GVL_Var.fTempActual-0.1;
        fbT1(IN:=FALSE);
    END_IF
END_IF

//If the door is open, the warming will occur faster; SEL selects tEnvironmentDoorOpen
tImTemp:=SEL(GVL_Var.bDoorOpen, tEnvironment, tEnvironmentDoorOpen);

//If the compressor is not in operation, then the cooling chamber will become warmer.
//The  temperature is incremented by 0.1°C per cycle after a delay of tImTemp
fbT2(IN:= TRUE, PT:= tImTemp, Q=>bRaiseTemp);    
IF bRaiseTemp THEN
    GVL_Var.fTempActual := GVL_Var.fTempActual + 0.1;
    fbT2(IN:=FALSE);
END_IF

nCounter := nCounter+1; // No function, just for demonstration purposes.
Ihr erstes TwinCAT-3-SPS-Projekt 14:

Visualisierung

Für ein komfortables Bedienen und Beobachten des gesamten Steuerungsprogramms kann eine Visualisierung eingesetzt werden, die den Kühlschrank darstellt und das Arbeiten des Simulationsprogramms wiedergibt. Eine Visualisierung können Sie in TwinCAT auch im SPS-Bereich programmieren. Beim Starten des Projekts auf der Steuerung startet die Visualisierung, ohne dass Sie eine Eingabe vornehmen müssen. Je nach Programmierung können Sie z. B. über einen Mausklick auf einen Ein/Aus-Schalter das Öffnen und Schließen der Tür herbeiführen oder über die Nadel eines Drehreglers die Temperaturvorwahl verstellen. Das Erstellen einer Visualisierung wird hier nicht weiter beschrieben.

Festlegen der auszuführenden Programme in der Taskkonfiguration

Die voreingestellte Taskkonfiguration enthält den Aufruf für das Hauptprogramm MAIN. Für unser Beispielprojekt müssen Sie den Aufruf für das Programm „Simulation“ hinzufügen.

1. Ziehen Sie im SPS-Projektbaum den Eintrag „Simulation“ mit der Maus auf die Taskreferenz (PlcTask).
Der Baustein „Simulation“ wird in der Taskkonfiguration eingefügt.
2. Wenn Sie sich die Taskkonfiguration ansehen möchten, doppelklicken Sie auf den Eintrag PlcTask im SPS-Projektbaum. Im Projektmappen-Explorer wird der referenzierte Task (PlcTask) unter SYSTEM > Tasks aktiviert. Durch einen Doppelklick auf den Task wird die Konfiguration des Tasks in einem Editor geöffnet.
Sie sehen im SPS-Projektbaum unter PlcTask die POUs, die von dem Task aufgerufen werden: MAIN (standardmäßig eingetragen) und Simulation. Im Editor des Knotens PlcTask im SYSTEM‑Bereich sehen Sie für den referenzierten PlcTask die entsprechende Zykluszeit. Das Intervall beträgt in diesem Beispiel 10 Millisekunden. Im Onlinebetrieb wird der Task die beiden Bausteine pro Zyklus 1x abarbeiten.
Ihr erstes TwinCAT-3-SPS-Projekt 15:

Definieren des aktiven SPS-Projekts

Auf einer TwinCAT-Steuerung können mehrere SPS-Projekte ausgeführt werden. Der erste Eintrag der Drop-down-Liste Active PLC Project in der Symbolleiste TwinCAT SPS Symbolleistenoptionen zeigt das gerade aktive SPS-Projekt an. Wenn mehrere SPS-Projekte vorhanden sind, können Sie über die Drop-down-Liste ein SPS-Projekt auswählen.

Überprüfen des SPS-Projekts auf Fehler

Während der Eingabe von Code weist TwinCAT Sie sofort durch rote Unterkringelung auf Syntaxfehler hin. Um eine Syntaxprüfung über das gesamte SPS-Projekt zu erhalten, markieren Sie das SPS-Projektobjekt „<SPS‑Projektname> Project“ und wählen Sie den Befehl Überprüfe alle Objekte im Kontextmenü oder im Menü Erstellen. Die Ergebnisse der Prüfung sehen Sie in der Ansicht Fehlerliste. Wenn nötig, öffnen Sie die Ansicht Fehlerliste mit dem Befehl Fehlerliste im Menü Ansicht. Sie können dann mit einem Doppelklick auf die Meldung zur entsprechenden Codestelle springen.

Mit dem Befehl Überprüfe alle Objekte werden alle im SPS-Knoten vorhandenen Bausteine geprüft und übersetzt. Wenn bei der Übersetzung Bausteine im Baum auftauchen, die nicht übersetzbar sind, weil sie vielleicht nur für einen Test eingefügt wurden, wird ein Fehler erzeugt. Deshalb empfiehlt sich der Befehl Überprüfe alle Objekte besonders für die Überprüfung von Bibliotheksbausteinen.

Mit dem Befehl Erstellen oder Neu Erstellen werden nur die Bausteine geprüft und übersetzt, die im SPS-Projekt auch wirklich genutzt werden.

Nur ein fehlerfreies SPS-Projekt können Sie nachher auf die Steuerung laden.

Kompilieren des SPS-Moduls

Mit dem Befehl Erstellen oder Neu erstellen wird der von Ihnen im SPS-Projekt verwendete Code kompiliert und damit auf syntaktische Richtigkeit geprüft.

Auswahl des Zielsystems

Wählen Sie nun in der Drop-down-Liste Choose Target System der Symbolleiste TwinCAT XAE Base Symbolleistenoptionen das Zielgerät für Ihr Steuerungsprogramm aus:

Aktivierung der Konfiguration

1. Klicken Sie auf die Schaltfläche Ihr erstes TwinCAT-3-SPS-Projekt 16: in den TwinCAT XAE Base Symbolleistenoptionen.
Ein Dialog erscheint mit der Abfrage, ob die Konfiguration aktiviert werden soll.
2. Klicken Sie auf Ok.
Ein Dialog erscheint mit der Abfrage, ob TwinCAT im Run-Modus neu gestartet werden soll.
3. Klicken Sie auf Ok.
Die Konfiguration wird aktiviert und TwinCAT in den Run-Modus gesetzt. In der Taskleiste erscheint der aktuelle Status: Ihr erstes TwinCAT-3-SPS-Projekt 17:. Durch die Aktivierung wird auch das SPS-Projekt auf die Steuerung übertragen.

Laden des SPS-Projekts auf die SPS

Das SPS-Projekt wurde fehlerfrei übersetzt. Siehe Schritt Überprüfen des SPS-Programms auf Fehler.
1. Wählen Sie im Menü PLC den Befehl Einloggen oder klicken Sie auf die Schaltfläche Ihr erstes TwinCAT-3-SPS-Projekt 18: in den TwinCAT SPS Symbolleistenoptionen.
Ein Dialog erscheint mit der Abfrage, ob die Applikation angelegt und geladen werden soll.
2. Klicken Sie auf Yes.
Das SPS-Projekt wird auf die Steuerung geladen. Die Engineering-Umgebung befindet sich nun im Onlinebetrieb. Die SPS-Module befinden sich noch nicht im Run-Modus. Im Projektmappen-Explorer erscheint vor dem SPS-Projektobjekt folgendes Symbol: Ihr erstes TwinCAT-3-SPS-Projekt 19:. Während des Ladevorgangs, werden in der Ansicht Fehlerliste unter anderem Informationen zur generierten Codegröße, zur Größe der globalen Daten, zum resultierenden Speicherbedarf auf der Steuerung ausgegeben.

Starten des Programms

Wenn Sie das Tutorial bis zu diesem Punkt vollständig befolgt haben, können Sie nun das SPS-Projekt auf dem SPS-Gerät verwenden.

1. Wählen Sie im Menü PLC den Befehl Start oder klicken Sie auf die Schaltfläche Ihr erstes TwinCAT-3-SPS-Projekt 20: in den (online) TwinCAT SPS Symbolleistenoptionen ([F5]).
Das Programm läuft. Die SPS-Module befinden sich im Run-Modus. Im Projektmappen-Explorer erscheint vor dem SPS-Projektobjekt folgendes Symbol: Ihr erstes TwinCAT-3-SPS-Projekt 21:.

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 TwinCAT heraus einmalig einen bestimmten Variablenwert auf der Steuerung.

Die Istwerte der Programmvariablen sehen Sie in den Online-Ansichten der Bausteineditoren oder in Überwachungslisten. Im Beispiel hier beschränken wir uns auf das Monitoring im Bausteineditor.

Das SPS-Programm läuft auf der Steuerung.
1. Öffnen Sie mit Doppelklicks auf die Objekte MAIN, „Signals“, „Simulation“ und „GVL_Var“ im SPS-Projektbaum die Online-Ansichten der Editoren.
Im Deklarationsteil jeder Ansicht erscheint in der Tabelle der Ausdrücke in der Spalte Wert der Istwert der Variablen auf der Steuerung.
Ihr erstes TwinCAT-3-SPS-Projekt 22:
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 wird „Inline-Monitoring“ genannt. In den grafischen Editoren wird der Wert einer booleschen Variablen durch die Farbe der Ausgangsverbindungslinie angezeigt: schwarz für FALSE, blau für TRUE:
Ihr erstes TwinCAT-3-SPS-Projekt 23:
Betrachten Sie das Verändern der Variablenwerte in den verschiedenen Bausteinen. Beispielsweise sehen Sie in der globalen Variablenliste „GVL_Var“, wie sich durch die Abarbeitung des Simulationsprogramms die Werte von „fTempActual“ und „bCompressor“ ändern.

Einmaliges Setzen von Variablenwerten auf der Steuerung:

1. Setzen Sie den Fokus in die Online-Ansicht der globalen Variablenliste „GVL_Var.
2. Um einen neuen Sollwert vorzugeben, doppelklicken Sie bei Ausdruck „fTempSet“ in die Spalte Vorbereiteter Wert.
Ein Eingabefeld öffnet sich.
3. Tragen Sie den Wert „9“ ein und verlassen Sie das Eingabefeld.
4. Um ein Offenstehen der Tür vorzugeben, klicken Sie beim Ausdruck „bDoorOpen“ einmal in das Feld Vorbereiteter Wert. Der Wert TRUE wird eingetragen. Klicken Sie weitere drei Male, um zu sehen, dass Sie damit den vorbereiteten Wert auf FALSE, dann wieder auf leer und dann wieder auf TRUE schalten können.
5. Um den vorbereiteten Wert TRUE einmalig auf die Variable zu schreiben, wählen Sie den Befehl Werte schreiben im Menü PLC oder klicken Sie auf die Schaltfläche Ihr erstes TwinCAT-3-SPS-Projekt 24: in den TwinCAT SPS Symbolleistenoptionen.
Die beiden Werte werden jeweils in die Spalte Wert übertragen. Die Variable „bDoorOpen“ verändert ihren Wert jetzt nicht mehr und die Solltemperatur ist jetzt 9 Grad. Die Variable „tImTemp“ wechselt auf den Wert 1 s, da nun die Kühlschranktür „geöffnet ist“ und dadurch das Erwärmen durch Simulation schneller als vorher (2 s) 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.

Das SPS-Programm ist auf die Steuerung geladen und läuft.
1. Öffnen Sie mit einem Doppelklick auf das Objekt „Simulation“ das Programm im Editor.
2. Setzen Sie den Cursor in die Codezeile nCounter:=nCoutner+1; und drücken Sie [F9].
Vor der Codezeile erscheint das Symbol Ihr erstes TwinCAT-3-SPS-Projekt 25:. Es zeigt an, dass an dieser Zeile ein Haltepunkt gesetzt ist. Das Symbol wechselt sofort zu Ihr erstes TwinCAT-3-SPS-Projekt 26:. Der gelbe Pfeil zeigt immer auf die nächste abzuarbeitende Anweisung.
3. Betrachten Sie den Wert der Variablen „nCounter“ im Inline-Monitoring oder im Deklarationsteil des Programms Simulation.
Der Variablenwert verändert sich nicht mehr. Die Abarbeitung wurde am Haltepunkt gestoppt.
4. Drücken Sie [F5], was die Abarbeitung wieder startet.
Das Programm stoppt nach einem Zyklus erneut am Haltepunkt. „nCounter“ wurde um 1 hochgezählt.
5. Drücken Sie [F11], um den nächsten Abarbeitungsschritt auszuführen
RETURN am Ende der Zeile nCounter:=nCounter+1; Anweisung wird gelb markiert
6. Drücken Sie erneut [F11], um den nächsten Abarbeitungsschritt auszuführen.
Die Abarbeitung springt in den Editor von MAIN. Wiederholtes Drücken von [F11] zeigt, wie das Programm Schritt für Schritt ausgeführt wird. Die auszuführende Anweisung wird wieder jeweils mit einem gelben Pfeil gekennzeichnet.
7. 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 Programmausführung wieder zu starten.
Schrittweise könne Sie das Programm durchlaufen und Variablenwerte an bestimmten Codestellen überprüfen.

Ausführen eines Einzelzyklus zur Laufzeit

Das SPS-Programm ist auf die Steuerung geladen und läuft.
1. Beobachten Sie wieder die Zeile nCounter:=nCounter+1; im Programm Simulation.
2. Klicken Sie auf die Schaltfläche Ihr erstes TwinCAT-3-SPS-Projekt 27: in der Symbolleiste TwinCAT SPS Symbolleistenoptionen, um einen Einzelzyklus auszuführen.
Die Abarbeitung durchläuft einen Zyklus und bleibt wieder auf dem Haltepunkt stehen. „nCounter“ wurde um 1 hochgezählt.
3. Drücken Sie weitere Male auf die Schaltfläche, um Einzelzyklen zu sehen. Drücken Sie dann wieder [F5].
Das Programm läuft wieder ohne Halt und ohne geforcte Werte. Die Variable „tImTemp“ hat wieder den Wert 1 s.