Anlegen der Beispielprojekte

Das TwinCAT-Projekt Measuring

Gehen Sie folgendermaßen vor, um das Measuring Projekt in TwinCAT anzulegen:

1. Starten Sie das Microsoft Visual Studio.
2. Wählen Sie das Menükommando [File] → [New] → [Project…] aus.
3. Wählen Sie im New Project Dialog aus der Liste Installed Templates das TwinCAT Project aus.
4. Definieren Sie einen Namen für das neue Projekt (z.B. Measuring)
5. Bestätigen Sie den Dialog mit der Schaltfläche [OK].
Ein leeres TwinCAT Projekt wird erzeugt und angezeigt.

In dem neuen Projekt müssen nun das EAP Gerät und ein PLC Projekt angelegt werden.

PLC Projekt Measuring

Das Schreiben eines SPS Programms erfolgt innerhalb eines TwinCAT PLC Projekts. Legen Sie also ein PLC Projekt anhand der folgenden Schritte an:

Anlegen der Beispielprojekte 1:
1. Klicken Sie mit der rechten Maustaste auf den Knoten PLC in Ihrem TwinCAT Projekt und wählen Sie das Kommando [Add New Item…] aus (vgl. Abbildung oben).
Es öffnet sich der Add New Item Dialog.
Anlegen der Beispielprojekte 2:
1. Wählen Sie das Template Standard PLC Project aus, definieren Sie einen Namen (in diesem Fall am besten Measuring) und schließen Sie den Dialog über die Schaltfläche [Add].
Es wird ein leeres Standard PLC Projekt erzeugt.

Ein Standard PLC Projekt referenziert bereits auf ein paar grundlegende PLC Bibliotheken. Für das kommende Beispielprogramm wird noch die Bibliothek Tc2_Utilities benötigt. Fügen Sie eine Referenz auf diese Bibliothek folgendermaßen hinzu:

1. Klicken Sie mit der rechten Maustaste auf den Knoten References im PLC Projektknoten (vgl. Abbildung).
Anlegen der Beispielprojekte 3:
1. Wählen Sie das Kommando [Add Library…]
Es öffnet sich der Dialog Add Library.
2. Klappen Sie den Knoten Systems auf und selektieren Sie die PLC Bibliothek mit dem Namen Tc2_Utilities.
3. Anschließend bestätigen Sie den Dialog mit [OK].
Die gewählte PLC Bibliothek wird in der Liste der References angezeigt

Das Measuring SPS Beispielprogramm

Das Measuring Beispielprogramm soll auf einfachste Art einen Messvorgang bei einem Produkt oder Werkstück mit einer Identifikationsnummer simulieren und diese Daten später per EAP einer anderen Steuerung zur Verfügung stellen.

Für diese Aufgabe wird ein Funktionsbaustein (FB) mit der Bezeichnung GetMeasure erzeugt, der zufällig unterschiedliche Messwerte liefert und ein Hauptprogramm (MAIN) geschrieben, welches die Funktion übernimmt, auf Anfrage die ermittelten Daten zur Verfügung zu stellen.

Funktionsbaustein GetMeasure

1. Klicken Sie mit der rechten Maustaste auf den Knoten POUs im PLC Projekt (siehe Abbildung).
Es öffnet sich der Dialog Add POU.
Anlegen der Beispielprojekte 4:
1. Tragen Sie als Namen GetMeasure ein, wählen Sie den Type: Function Block und für die Implementation Language: Structured Text (ST).
Nach der Bestätigung mit [Open] wird der neue Funktionsbaustein im Editor angezeigt und die Logik kann implementiert werden.
Anlegen der Beispielprojekte 5:

Der FB soll folgende Eingabeparameter haben:

Aus den Eingabeparametern (NominalMeasure = 5000, Variance = 1000, Steps = 100) soll also zufällig ein Messwert aus [4500, 4600, 4700, …, 5400, 5500] erzeugt werden, der als Ausgabeparameter vom FB zurückgeliefert wird. Für den FB GetMeasure kann der Programmcode dann folgendermaßen aussehen:

FUNCTION_BLOCK PUBLIC GetMeasure

VAR_INPUT
nominalMeasure : UDINT;
variance : UDINT;
steps : UINT;
END_VAR

VAR_OUTPUT
measure : UDINT;
END_VAR

VAR
FB_SystemTime : GETSYSTEMTIME;
currTimeLo : UDINT;
currTimeHi : UDINT;

FB_Randomizer : DRAND;
rand : LREAL;
seed : INT;

varianceEffective: UDINT;
varianceAbsolute : UDINT;
deviation : UDINT;
END_VAR

FB_SystemTime( timeLoDW => currTimeLo, timeHiDW => currTimeHi );
seed := UDINT_TO_INT(currTimeLo);
FB_Randomizer(Seed := seed, Num => rand);
varianceEffective := variance / steps;

varianceAbsolute := LREAL_TO_UINT(rand * UDINT_TO_LREAL(varianceEffective)) * steps;

IF varianceAbsolute >= (variance / 2) THEN
deviation := varianceAbsolute - (variance / 2);
measure := nominalMeasure + deviation;
ELSE
deviation := (variance / 2) - varianceAbsolute;
measure := nominalMeasure - deviation;
END_IF;

Kopieren Sie den Programmcode in den FB GetMeasure. Anschließend öffnen Sie das Programm MAIN per Doppelklick im Editor. Hier wird nun das Hauptprogramm kodiert. Im Hauptprogramm werden eine Eingangsvariable und drei Ausgangsvariablen definiert.

Das Hauptprogramm MAIN:

Eingangsvariable:

Ausgangsvariablen:

PROGRAM MAIN
VAR
in_Req AT%I* : BOOL := FALSE;

out_Measure AT%Q* : UDINT := 0;
out_ProductID AT%Q* : UDINT := 0;
out_Ack AT%Q* : BOOL;

request : BOOL := FALSE;
isReady : BOOL;

FB_R_TRIG : R_TRIG;
FB_F_TRIG : F_TRIG;
FB_GetMeasure : GETMEASURE;
FB_TON : TON;
END_VAR

(* START: Detecting an incomming request
to deliver the measure of the next product*)
FB_R_TRIG( CLK := in_Req );
IF FB_R_TRIG.Q THEN
out_Ack := FALSE;
request := TRUE;
END_IF;

FB_F_TRIG( CLK := in_Req );
IF FB_F_TRIG.Q THEN
out_Ack := FALSE;
request := FALSE;
END_IF;
(* END: Detecting an incomming request*)

(* START: Simulating duration for measuring the next product*)
IF isReady THEN
IF request THEN
FB_GetMeasure( nominalMeasure := 5000,
variance := 1000,
steps := 100,
measure => out_Measure );

out_ProductID := out_ProductID + 1;
request := FALSE;
isReady := FALSE;
out_Ack := TRUE;
END_IF;
ELSE
FB_TON( PT := T#200MS,
IN := NOT FB_TON.Q );

isReady := FB_TON.Q;
END_IF;
(* END: Simulating duration for measuring the next product*)
1. Kopieren Sie den Programmcode des Hauptprogramms in das Programm MAIN.
2. Übersetzten Sie das PLC Projekt, indem Sie den Menüeintrag [Build] → [Build Solution] anklicken.
Es wird eine Instanz für das PLC Projekt erzeugt, in der Sie die Ein- und Ausgangsvariablen des PLC Programms als Prozessvariablen wiederfinden (siehe Abbildung). Diese können später in TwinCAT verknüpft werden.
Anlegen der Beispielprojekte 6:

Das EAP Gerät

Zuletzt muss noch ein EAP Gerät bei der I/O Konfiguration in TwinCAT angelegt werden:

1. Klappen Sie den Knoten I/O TwinCAT 3 auf und klicken Sie mit der rechten Maustaste auf den Konten Device.
2. Wählen Sie den Eintrag [Add New Item…] im Kontextmenü.
Es erscheint der Dialog Insert Device.
Anlegen der Beispielprojekte 7:
1. Hier wählen Sie aus der Liste den Type: EtherCAT Automation Protocol (Network Variables) welches zu den EtherCAT Geräten gehört und drücken [OK].
2. Evtl. werden Sie danach aufgefordert, einen Adapter auszuwählen, über den das EAP Gerät kommunizieren soll.
Danach ist das EAP Gerät erstellt und mit Standardeinstellungen vorkonfiguriert.

Nun muss das EAP Gerät noch mit einer zyklischen Task verknüpft werden, so dass es im Echtzeitkontext Variablen versenden und empfangen kann.

3. Klicken Sie mit der rechten Maustaste auf das EAP Gerät und wählen Sie den Menüeintrag [Add New Item…].
Es öffnet sich der Dialog Insert Box.
Anlegen der Beispielprojekte 8:
1. Wählen Sie Network Variable Subscriber aus und drücken Sie [OK].
Eine Box 1 (Subscriber) wird unterhalb des EAP Gerätes angelegt.
2. Klicken Sie mit der rechten Maustaste auf diesen neuen Knoten und wählen Sie wieder den Menüeintrag [Add New Item…].
Der Dialog Import Network Variable wird angezeigt.
Anlegen der Beispielprojekte 9:
1. Drücken Sie [Create new Variable…].
Der Dialog Insert Network Variable öffnet sich (siehe Abbildung oben).
2. Wählen Sie aus der Liste der Datentypen BOOL aus und drücken dann [OK].
Die Subscriber Variable Sub-Var 1 wird unterhalb des Subscriber Knotens angefügt.
3. Klappen Sie die Sub-Var 1 und darunter den Knoten Inputs auf.
4. Klicken sie mit rechts auf den Knoten VarData und wählen Sie im Kontextmenü den Eintrag [Change Link…].
Der Dialog Attach Variable wird angezeigt.
Anlegen der Beispielprojekte 10:
1. wählen Sie die PLC Variable MAIN.in_Req aus und drücken Sie [OK].
Anschließend ist die Variable Verknüpft und die Konfiguration des Projektes abgeschlossen.

Aktivieren Sie Ihr TwinCAT Projekt, um später mit dem TwinCAT EAP Configurator eine Verbindung zum EAP Gerät herstellen zu können.

Das TwinCAT-Projekt Operating

Das Anlegen des TwinCAT Projektes Operating funktioniert analog wie beim TwinCAT Projekt Measuring. Es wird daher nur auf die wenigen Unterschiede und auf den Programmcode des PLC Projektes eingegangen.

Das Operating SPS Beispielprogramm

Das Operating Beispielprogramm soll auf einfachste Art einen Bearbeitungsvorgang bei einem Produkt oder Werkstück mit einer Identifikationsnummer simulieren und nach der Bearbeitung einer anderen Steuerung per EAP mitteilen können, dass das nächste Werkstück bearbeitet werden kann.

Für diese Aufgabe wird ein Funktionsbaustein (FB) mit der Bezeichnung Processing erzeugt, der die Dauer der Bearbeitung simuliert, die von einem Eingangsparameter abhängt (dem gemessenen Wert zu diesem Werkstück). Das Hauptprogramm (MAIN) übernimmt die Funktionen eine Anfrage für das nächste Werkstück zu stellen, wenn die letzte Bearbeitung abgeschlossen ist und die Bestätigung der Anfrage zu erfassen, so dass mit der Bearbeitung des nächsten Werkstücks begonnen werden kann.

Funktionsbaustein Processing

Der FB soll folgende Eingabeparameter haben:

Der FB simuliert eine Bearbeitungsdauer, indem er den Wert des Eingabeparameters halbiert und in Sekunden wartet. Während dieser Wartezeit wird der Ausgabeparameter busy auf den Wert TRUE gesetzt, andernfalls ist der Wert FALSE. Für den FB Processing kann der Programmcode dann folgendermaßen aussehen:

FUNCTION_BLOCK PUBLIC Processing

VAR_INPUT
measure : UDINT := 0;
END_VAR

VAR_OUTPUT
bBusy : BOOL := FALSE;
END_VAR

VAR
FB_TON : TON;
bReady : BOOL;
processingTime : TIME;
END_VAR

processingTime := UDINT_TO_TIME(measure/2);

FB_TON.PT := processingTime;
FB_TON.IN := NOT FB_TON.Q;
FB_TON();

bBusy := NOT FB_TON.Q;
1. Kopieren Sie den Programmcode in den FB Processing.
2. Öffnen Sie das Programm MAIN per Doppelklick im Editor.
Hier wird nun das Hauptprogramm kodiert. Im Hauptprogramm werden drei Eingangsvariablen und eine Ausgangsvariable definiert.

Das Hauptprogramm MAIN:

Eingangsvariablen:

Ausgangsvariable:

PROGRAM MAIN

VAR
in_Measure AT%I* : UDINT := 0;
in_ProductID AT%I* : UDINT := 0;
in_Ack AT%I* : BOOL := FALSE;

out_Req AT%Q* : BOOL := FALSE;

acknowledge : BOOL := FALSE;
proceeding : UDINT := 0;

FB_R_TRIG : R_TRIG;
FB_F_TRIG : F_TRIG;
FB_Processing : Processing;
END_VAR

(* START: Detecting an incomming acknowledge
to operating the next product*)
FB_R_TRIG( CLK := in_Ack );
IF FB_R_TRIG.Q THEN
acknowledge := TRUE;
END_IF;

FB_F_TRIG( CLK := in_Ack );
IF FB_F_TRIG.Q THEN
acknowledge := FALSE;
END_IF;
(* END: Detecting an incomming acknowledge*)

(* START: Simulating duration of operating the next product*)
IF FB_Processing.bBusy THEN
FB_Processing();
ELSE
IF acknowledge THEN
acknowledge := FALSE;
out_Req := FALSE;
proceeding := in_ProductID;
FB_Processing(measure := in_Measure);
ELSE
proceeding := 0;
out_Req := TRUE;
END_IF;
END_IF;
(*    END:     Simulating duration of operating the next product*)
1. Kopieren Sie den Programmcode des Hauptprogramms in das Programm MAIN.
2. Übersetzen Sie das PLC Projekt, indem Sie den Menüeintrag [Build] → [Build Solution] anklicken.
Anschließend ist das Projekt übersetzt.

Das EAP Gerät

Beim EAP Gerät wird bei diesem Projekt statt eines Subscribers ein Publisher mit einer Publisher Variablen vom Datentyp BOOL hinzugefügt. diese Variable wird dann mit der PLC Variablen MAIN.out_Req verknüpft.

Aktivieren Sie auch dieses TwinCAT Projekt, um später mit dem TwinCAT EAP Configurator eine Verbindung zum EAP Gerät herstellen zu können.