PlcTaskSystemInfo

Jede SPS beinhaltet ein Array von Instanzen dieses Typs. Der Name des Arrays lautet '_TaskInfo[]'.
Auf die einzelnen Instanzen dieses Typs kann zugegriffen werden, indem der Index der entsprechenden Task als Arrayindex verwendet wird. Der Taskindex kann mithilfe der Funktion GETCURTASKINDEXEX ausgelesen werden, welche von der Tc2_System-Bibliothek zur Verfügung gestellt wird.

Der zugehörige Namensraum (namespace) ist 'TwinCAT_SystemInfoVarList'. Dieser muss beispielsweise bei Verwendung in einer Bibliothek mit angegeben werden.

{attribute 'Namespace' := 'PLC'}
TYPE PlcTaskSystemInfo
STRUCT
     ObjId                   : OTCID;
     CycleTime               : UDINT;
     Priority                : UINT;
     AdsPort                 : UINT;
     CycleCount              : UDINT;
     DcTaskTime              : LINT;
     LastExecTime            : UDINT;
     FirstCycle              : BOOL;
     CycleTimeExceeded       : BOOL;
     InCallAfterOutputUpdate : BOOL;
     RTViolation             : BOOL;

     TaskName                : STRING(63);
END_STRUCT
END_TYPE

ObjId

Objekt-ID der Taskreferenz, von welcher das SPS-Programm aufgerufen wird.

CycleTime

Eingestellte Taskzykluszeit in Vielfachen von 100ns

Priority

Eingestellte Priorität der Task

AdsPort

ADS-Port der Task

CycleCount

Zykluszähler

Bitte beachten Sie, dass sich der Zykluszähler auf die tatsächliche System-Task bezieht und nicht auf die Taskreferenz des SPS-Projekts. Hintergrund ist, dass sich mehrere SPS-Projekte oder andere TcCOM-Module eine Task teilen können und diese Module somit auf den gleichen Zykluszähler zugreifen. Daraus ergibt sich, dass der Zykluszähler bei einem TwinCAT-Neustart im Run-Modus zurückgesetzt wird (und nicht bei einem Reset des SPS-Projekts).

DcTaskTime

Distributed Clock System Time. Sie bleibt für eine Tasklaufzeit konstant.

LastExecTime

Benötigte Zykluszeit für den letzten Zyklus in Vielfachen von 100 ns

FirstCycle

Diese Variable hat im ersten Zyklus der SPS-Task den Wert TRUE.

CycleTimeExceeded

In dieser Variablen wird ein Überschreiten der eingestellten Taskzykluszeit gemeldet.

In jedem Zyklus wird der Wert der Variable CycleTimeExceeded aktualisiert. Ist der vorherige Zyklus in seinem vorgesehenen Zeitfenster fertig geworden, wird die Variable auf 0 gesetzt, andernfalls auf 1.

InCallAfterOutputUpdate

Diese Variable hat den Wert TRUE, wenn der Ursprung des aktuellen Aufrufs mit dem Attribut 'TcCallAfterOutputUpdate' deklariert ist.

RTViolation

Diese Variable hat den Wert TRUE, wenn das Echtzeitlimit auf einem gemischten Kern (Windows + Echtzeit auf einem Core) überschritten wird. Der Wert TRUE bezieht sich dann auf den Kern, auf dem die entsprechende Task läuft.

TaskName

Name des Taskreferenz-Objekts im SPS-Projekt (z.B. 'MyPlcProject_PlcTaskRef')

Beispiel:

VAR
    nTaskIdx     : DINT;
    nCycleTime   : UDINT;
END_VAR
nTaskIdx := GETCURTASKINDEXEX();
IF nTaskIdx > 0 THEN
    nCycleTime := _TaskInfo[nTaskIdx].CycleTime;
END_IF