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:

Beispiel 2: Multi-Timestamping 1:
Auswahl vordefinierter Prozessdaten über Karteireiter "Process_Data": Multitimestamping 2 Ch. 10x

Außerdem muss Distributed Clock verwendet werden und wird über den Karteireiter „DC“ ausgewählt:

Beispiel 2: Multi-Timestamping 2:
Aktivierung von DC

Die Einstellungen in dem „DOX Settings“ Objekt für Kanal 1 (Index 0x8000) sind wie dargestellt vorzunehmen:

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.

Beispiel 2: Multi-Timestamping 3:
CoE Objekt 0x8000 Konfiguration zur 24 V Ventil-Ansteuerung

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:

Beispiel 2: Multi-Timestamping 4:
Stromfluss (1) und Sollschaltwert (4): links ohne Übererregung, 600 mA Haltestrom; rechts mit Übererregung „Boost-On“ 10 ms/1200 mA und 400 mA Haltestrom
Beispiel 2: Multi-Timestamping 5:
Stromfluss (1) und Sollschaltwert (4): links mit Übererregung „Boost-On“ 10 ms/1200 mA und Boost-Off 10 ms; zusätzlich mit aktivierter Abschaltstromschwelle „Current switch off threshold“ links auf -550 mA, rechts auf -300 mA

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:

Beispiel 2: Multi-Timestamping 6:
Aufzeichnung mit dem Oszilloskop: Ansteuerung eines Relais mit Multitimestamping

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)

Sehen Sie hierzu auch weitere Hinweise in dem Kapitel:
Inbetreibnahme, TwinCAT Quickstart, TwinCAT 3, Startup.

Zuordnung der Prozessdaten und Einstellungen

Beispiel 2: Multi-Timestamping 10:

EL2212: Karteireiter „DC“ – Auswahl der DC Betriebsart

Für die Funktionsfähigkeit dieses Programms muss die Betriebsart „DC active (controller handled)“ gesetzt sein.

Beispiel 2: Multi-Timestamping 11:
Zuordnung der externen Variablen aus „Main“ zu den Multitimestamping-PDOs