Beispiel 2: Multi-Timestamping
Das folgende Beispielprogramm verwendet 10-fach Multi-Timestamping in dem ein Satz von 10 (Soll-) Schaltzuständen mit den dazugehörigen unterschiedlichen Schaltzeitpunkten den Prozessdaten der Klemme EL2212 übergeben wird. Damit die benötigten Prozessdaten zur Verknüpfung mit den Programmvariablen vorliegen muss unter dem Karteireiter Prozessdaten das Multi-Timestamping 10x ausgewählt werden:
Außerdem muss Distributed Clock verwendet werden und wird über den Karteireiter „DC“ ausgewählt:
Die Einstellungen in dem „DOX Settings“ Objekt für Kanal 1 (Index 0x8000) sind wie dargestellt vorzunehmen:
- Versorgungsspannung „Supply Voltage“: 60 V
- Haltestrom „Hold current“: 600 mA
- Wicklungswiderstand „Coil resistance“: 25 Ω
- Übererregungsstrom der Einschaltphase „Boost current“: 1200 mA (zunächst noch inaktiv)
- Abschaltstromschwelle „Current switch off threshold“: -300 mA (zunächst noch inaktiv)
- Übererregung, Zeit der Einschaltphase “Booster on time”: 5 ms
- Übererregung, Zeit der Abschaltphase “Booster off time”: 5 ms
Die Abschaltstromschwelle sollte „TRUE“ gesetzt sein, sie greift, sobald die Übererregung in der Ausschaltphase „Boost-Off“ aktiviert ist und verhindert so vorab eine eventuelle Überbeanspruchung von mechanischen Komponenten.
Ansteuerung eines Druckluftventils 24 V, 600 mA
Der aus der Anwendungsdemonstration 2 bereits eingesetzte Aufbau wird hier wiederverwendet: Angesteuert wird ein Druckluftventil mit 600 mA Haltestrom und abwechselnden Stromfluss ein/aus mit den folgenden 10 Schaltzeiten (in ms): [1, 50, 25, 75, 25, 50, 75, 50, 25, 50]. Der erste Schaltzustand ist ‚1‘ mit dem Schaltzeitpunkt 100 ms um für den Beginn der Schaltphasen die erste steigende Flanke sicher aus der PLC zu erzeugen. In den Abbildungen unten wurde für die Oszilloskop-Aufnahmen diese Flanke für den Trigger des Oszilloskops verwendet. Das Ventil ist an Kanal 1 der Klemme angeschlossen.
Kanalzuordnungen vom Oszilloskop:
- Kanal 1: Stromfluss in umgerechnet 400 mA / Teilung
- Kanal 4: Sollwert der Ansteuerung
Ansteuerung eines Relais 24 V, 200 mA
Im Vergleich sind im Folgenden zwei Oszilloskop-Aufnahmen eines Relais mit den Schaltzeiten (in ms) von [100, 200, 250, 100, 150, 200, 100, 150, 200, 150] gezeigt. In dem CoE Objekt „DOX Settings Ch. 1“ ist zuvor der Haltestrom mit 200 mA sowie der Stromwert der Übererregung mit 400 mA entsprechend eingetragen. Mit dem ersten Schaltzustand ‚1‘ und dem ersten dazugehörigen Schaltzeitpunkt 100 ms aus der PLC wird wieder die erste steigende Flanke für den Trigger erzeugt.
Kanalzuordnungen vom Oszilloskop:
- Kanal 1: Stromfluss in umgerechnet 200 mA / Teilung
- Kanal 2: Öffner (NC) des Relais
- Kanal 3: Schließer (NO) des Relais
- Kanal 4: Sollwert der Ansteuerung
Im rechten Oszillogramm ist das bereits aus der Anwendungsdemonstration 1 bekannte Prellen vom Öffner- und Schließerkontakt zu sehen, dass durch einen zu hohen Gegenstrom aus der Übererregung der Abschaltphase, dem „Boost-Off“ in der Steuerspule und damit einem zu schnellen Abschalten hervorgerufen wurde.
Programm zum Beispiel 2
Alle Feldvariablen sind entsprechend eines Kanals mit jeweils allen notwenigen Zustands, Ausgangs und Eingangsvariablen zu verknüpfen. In dem zum Download zur Verfügung stehenden Beispiel ist dies bereits erfolgt:
Download: Program
Sie können entweder einen embedded PC verwenden, an dem die Klemme rechtsseitig angebracht wird, oder einen IPC mit einer EtherCAT-Verbindung eines z.B. RJ-45 Anschlusses zum EK1100 Koppler mit der Klemme (z.B. C6915 + EK1100 + EL9190 + EL2212). Optional kann eine digitale Eingangsklemme z.B. EL1004 zusätzlich vor die EL9190 zur Programmsteuerung eingesetzt werden. Anstelle eines Ventils ist ein Relais angeschlossen, dessen Wicklungswiderstand entsprechend im
CoE Objekt DOX Settings (0x8000:05) einzustellen ist.
Variablendeklaration:
PROGRAM MAIN
VAR_INPUT
// External switch to start by user
bEnable AT%I* : BOOL;
// To check if last tasks were already executed
bReadyToActivate AT%I* : BOOL;
// Target state given back by the EL2212 (Feedback)
bOutputState AT%I* : BOOL;
END_VAR
VAR_OUTPUT
// Reference signal for e.g. trigger of oscilloscope
bOutputReference AT%Q* : BOOL;
// Link to terminal EL2212 (Output event time n):
aQE_Time AT%Q* : ARRAY[0..9] OF UDINT;
// Link to terminal EL2212 (Output event state n):
aQE_State AT%Q* : ARRAY[0..9] OF BOOL;
// Outputvariables to reset the output-buffers of EL2212
bOutputBufReset AT%Q* : BOOL;
// Real number of fixed State/Time-Events as a Task for EL2212
nNoOfOutputEvents AT%Q* : USINT;
// Start-Event to trigger beginning of task scheduling
nOutputOrderCnt AT%Q* : USINT;
END_VAR
VAR
aSwitchTime : ARRAY[0..9] OF UDINT:=
// All 10 time offsets in ms allocated to the 10 states:
[
100, 200, 250, 100, 150, 200, 100, 150, 200, 150
];
nState : UINT:=0; // Use for "CASE .. OF" statement
nShortTime : ULINT; // Timevalue of current DC time/ lower 32 Bit only
nCurrentTime : ULINT; // Current DC-Time of the PLC-Task
bStateValue : BOOL; // Variable to set a toggled state of a task-event
nScheduleNo: INT; // Consists No of respective state/time pair
// of a Switch-Task
END_VAR
Programmcode:
// Example program 2: 10x Multi-Timestamp for EL2212
nCurrentTime := F_GetCurDcTaskTime64(); // Get current DC-Time (Task-Related)
// Overtake feedback of EL2212 to any output terminal
// for using as trigger / reference signal:
bOutputReference := bOutputState;
CASE nState OF
// ====================== Do some initializations here: ============================
0:
// Reset ouput buffer of the terminal EL2212
bOutputBufReset := TRUE;
nState := nState + 1;// Go to next state
1:
bOutputBufReset := FALSE;
nState := nState + 1; // Go to next state
2:
// Wait for external start-event by user (e.g. ext. switch)
IF bEnable THEN
nState := 10; // Go to next state and set events
END_IF
// =================================================================================
// ============ Now fill up all state/time pairs for the four channels =============
10:
// Last tasks already executed?
IF bReadyToActivate THEN
bStateValue:=1;
// Set first state level ('1')
aQE_State[0] := bStateValue;
// Cut 64 Bit time value to 32 Bit
nShortTime := nCurrentTime AND 16#FFFFFFFF;
// Set first time value (duration for "save" begin)
aQE_Time[0] := (ULINT_TO_UDINT(nShortTime)
+ aSwitchTime[0] * 1000000);
// Use 'nScheduleNo' as loop counter
FOR nScheduleNo:=1 TO 9 DO
bStateValue := NOT bStateValue;
// Set inverting output states of one switch-task
aQE_State[nScheduleNo] := bStateValue;
// Set timestamps of one switch-task
aQE_Time[nScheduleNo] := (aQE_Time[nScheduleNo-1]
+ aSwitchTime[nScheduleNo] * 1000000);
END_FOR
nState := nState + 1; // Go to next state
END_IF
// =================================================================================
// ======== Allow some taskcycles (min. 2) to let EL2212 schedule all tasks ========
11:
// 'nScheduleNo' is still 9; wait until 12: 3 more PLC-Taskcycles
IF nScheduleNo = 12 THEN
nNoOfOutputEvents := 10;
// Trigger Multi-Timestamp scheduling: now start:
nOutputOrderCnt := nOutputOrderCnt + 1;
nState := nState + 1;
ELSE
// Just count PLC-Taskcycles here
nScheduleNo := nScheduleNo + 1;
END_IF
12:
// ================================== End ==========================================
// Wait for external switch to be released
IF NOT bEnable THEN
nState := 0; // Go to beginning state
END_IF
END_CASE
Vorbereitungen zum Starten des Beispielprogramms (tnzip-Datei/TwinCAT 3)
- Nach Klick auf den Download-Button speichern Sie das Zip-Archiv lokal auf ihrer Festplatte und entpacken die *.tnzip-Archivdatei in einem temporären Ordner.
- Wählen Sie die zuvor entpackte .tnzip-Datei (Beispielprogramm) aus.
- Ein weiteres Auswahlfenster öffnet sich: wählen nun Sie das Zielverzeichnis, wo das Projekt gespeichert werden soll.
- Die generelle Vorgehensweise für die Inbetriebnahme der PLC bzw. dem Start des Programms kann u. a. den Klemmen‑Dokumentationen oder der EtherCAT-Systemdokumentation entnommen werden.
- Das EtherCAT-Gerät im Beispiel ist in der Regel. zuvor ihrem vorliegenden System bekannt zu machen. Verwenden Sie nach Auswahl des EtherCAT-Gerätes im „Projektmappen-Explorer“ rechtsseitig den Karteireiter „Adapter“ und Klicken „Suchen...“:
- Überprüfen der NetId: der Karteireiter „EtherCAT“ des EtherCAT-Gerätes zeigt die konfigurierte NetId: .
Diese muss mit den ersten vier Zahlenwerten mit der Projekt‑NetId des Zielsystems übereinstimmen. Die NetId des Projektes kann oben in einem Textfeld der TwinCAT-Umgebung eingesehen werden. Ein pull-down Menü kann durch einen Klick rechts im Textfeld geöffnet werden; dort ist zu jedem Rechnernamen eines Zielsystems die NetId in Klammern angegeben. - Ändern der NetId: mit einem Rechtsklick auf „Gerät EtherCAT“ im Projektmappen-Explorer öffnet sich das Kontextmenü, in dem „Ändern der NetId“ auszuwählen ist. Die ersten vier Zahlen der NetId des Projektes sind einzutragen. die beiden letzten Werte sind in der Regel 4.1.
Beispiel: - NetId des Projektes: myComputer (123.45.67.89.1.1)
- Eintrag per „Change NetId...“: 123.45.67.89.4.1
Sehen Sie hierzu auch weitere Hinweise in dem Kapitel:
Inbetreibnahme, TwinCAT Quickstart, TwinCAT 3, Startup.
Zuordnung der Prozessdaten und Einstellungen
EL2212: Karteireiter „DC“ – Auswahl der DC Betriebsart Für die Funktionsfähigkeit dieses Programms muss die Betriebsart „DC active (controller handled)“ gesetzt sein. |