Skip to main content

Objekt: Task

Symbol: _cds_icon_task_editor.png

Im Objekt konfigurieren Sie die Task. Sie können die Priorität, den Typ mit Zeitverhalten und einen Watchdog konfigurieren. Außerdem können Sie PROGRAM-Aufrufe hinzufügen.

Das Objekt befindet sich im Gerätebaum unter der Taskkonfiguration.

Registerkarte: Konfiguration

Objekt _cds_icon_task_editor.png Task

Priorität

Mögliche Werte: 0..31, wobei 0 die höchste Priorität darstellt

Taskgruppe

Zugeordnete Taskgruppe, die bei Multicore bestimmten Prozessorkernen zugewiesen werden kann

Beispiel: IEC-Tasks

Hinweis: Die Taskgruppe wird im Gerätebaum hinter der Task in Klammern angezeigt.

Wichtig

Bei Verwendung eines Laufzeitsystems unter Linux bestehen feste Abhängigkeiten zwischen Taskgruppen und Prioritäten. Für weitere Informationen siehe: Mapping der Task-Prioritäten im Linux-System

Typ

Typ _cds_icon_task_periodic.png Zyklisch

Abarbeitung der Task erfolgt zyklisch

Eingabefeld Intervall

Obligatorisch

Zeitspanne, nach der die Task neu gestartet wird (Taskzykluszeit)

  • als Zeitangabe im TIME#-Format

    Beispiel: t#200ms

  • als Zahl

    Beispiel: 200

    Hinweis: Die Zahl wird beim nächsten Fokus des Eingabefelds automatisch im TIME#-Format angezeigt.

Hinweis: Abweichungen der Task von dieser gewünschten Taskzykluszeit werden zur Laufzeit als periodischer Jitter auf der Registerkarte Registerkarte: Überwachung angezeigt.

Zeiteinheit des Intervalls

Wenn im Eingabefeld Intervall keine Zeitangabe, sondern nur eine Zahl angeben ist, dann bestimmt die hier ausgewählte Einheit die Zeitgröße.

Beispiel: ms

Hinweis: Eine Taskzykluszeit in µs wird immer als Zahl angezeigt.

Typ _cds_icon_task_event_internal.png Ereignis

Abarbeitung der Task startet ereignisgesteuert bei steigender Flanke der Ereignisvariablen

Eingabefeld Ereignis

Globale Variable (Boolescher Typ)

Sobald der Variablenwert von 0 auf 1 wechselt, startet die Task.

Typ _cds_icon_task_event_external.png Externes

Abarbeitung der Task startet ereignisgesteuert bei steigender Flanke der Ereignisvariablen

Auswahlliste Ereignis

Liste mit zielsystemabhängigen Ereignissen (Boolescher Typ)

Hinweis: Es hängt vom Zielsystem ab, welche Ereignisse unterstützt und in der Auswahlliste angeboten werden.

Tipp: Nicht zu verwechseln mit Systemereignissen

Intervall

Zeitangabe im TIME#-Format oder als Zahl mit Zeiteinheit

Hinweis: Nur verfügbar, wenn das Ereignis eine Zeitangabe erfordert

Typ _cds_icon_task_free.png Freilaufend

Abarbeitung der Task startet bei Programmstart und nach Ende eines Durchlaufs nach einer gewissen Wartezeit automatisch neu in einer fortlaufenden Schleife

Wichtig: Nach Beenden eines Durchlaufs wird eine bestimmte Zeit gewartet, bevor die Task erneut ausgeführt wird. Die Dauer ist ein Prozentsatz der letzten Zyklusdauer.

Hinweis: Sie definieren keine Zykluszeit.

Typ _cds_icon_task_event_status.png Status

Abarbeitung der Task startet zustandsgesteuert von der Ereignisvariablen

Eingabefeld Ereignis

Globale Variable (Boolescher Typ)

Wenn die Variable den Zustand TRUE hat, startet die Task freilaufend. Die Task läuft so lange, bis die Variable den Wert FALSE erhält.

Hinweis: Die Variable wird typischerweise in der Task selbst zurückgesetzt. Im Gegensatz zur Ereignistask kann auf diese Weise kein Event verpasst werden. Bei Ereignis muss der Scheduler einen alten Wert speichern und dieser kann sich öfter ändern als er überprüft wird. Wenn also eine Ereignisvariable nur kurz auf TRUE wechselt, dann kann es passieren, dass der Scheduler diesen Wechsel nicht detektiert. Dies kann mit einer Statustask vermieden werden. Die Statusvariable wird von irgendeiner anderen Task auf TRUE gesetzt und von der Statustask wieder zurückgesetzt. Damit ist sichergestellt, dass bei jedem Wechsel auf TRUE die Task einmal ausgeführt wird.

Wichtig

Für Feldbusse ist ein festes Zyklusraster nötig, um ein determiniertes Verhalten sicherzustellen. Deshalb sollten Sie für eine Buszyklustask den Typ Freilaufend nicht verwenden.

Wichtig

Beachten Sie den folgenden Unterschied zwischen den Abarbeitungstypen Status und Ereignis: Wenn das angegebene Ereignis den Wert TRUE hat, dann ist die Startbedingung einer Task vom Typ Status erfüllt. Im Gegensatz dazu verlangt der Start einer Task vom Typ Ereignis einen Wechsel des Ereignisses von FALSE auf TRUE. Wenn die Abtastrate des Task-Schedulers zu niedrig ist, können steigende Flanken des Ereignisses unbemerkt bleiben.

Wichtig

Beim Setzen der Taskzykluszeit müssen Sie berücksichtigen, welches Bussystem gerade verwendet wird: Beispielsweise muss die Taskzykluszeit auf einem CAN-Bus-System zur aktuell gesetzten Baudrate und der Anzahl der auf dem Bus verwendeten Frames passen. Außerdem sollten die für Heartbeat, Nodeguarding und Sync gesetzten Zeiten immer ein Vielfaches der Taskzykluszeit sein. Ansonsten können CAN-Frames verloren gehen.

Für weitere Informationen siehe: Registerkarte: Überwachung

Watchdog

Definiert die Zeitüberwachung für eine Task. Wenn das Zielsystem eine erweiterte Watchdog-Konfiguration unterstützt, sind möglicherweise folgende Einstellungen in der Gerätebeschreibung vordefiniert:

  • Obere und untere Grenze

  • Standard-Watchdog-Zeit

  • Zeitangabe in Prozent

Die hier standardmäßig verwendeten Watchdog-Einstellungen sind geräteabhängig.

Aktivieren

_cas_icon_option_activated.png: Watchdog ist aktiv.

Wenn die Task die gerade gesetzte Zeit des Watchdogs überschreitet, wird die Task mit Fehlerstatus (Ausnahme) angehalten. Dabei werden auch die Applikation, in deren Task der Watchdog-Fehler passiert ist, sowie deren Kindapplikationen gestoppt. Damit werden alle Tasks dieser betroffenen Applikationen ebenfalls gestoppt. Dabei wird auch die aktuell angegebene Empfindlichkeit mit eingerechnet.

Wenn Sie in den SPS-Einstellungen der Steuerung die Option E/As aktualisieren aktiviert haben, setzt CODESYS die Ausgänge auf die definierten Standardwerte zurück.

. Mögliche Fälle:
  • Mehrere aufeinander folgende Zeitüberschreitungen:

    Empfindlichkeit: 0, 1 - Exception in Zyklus 1

    Empfindlichkeit: 2 - Exception in Zyklus 2

    Empfindlichkeit: n - Exception in Zyklus n

  • Einmalige Zeitüberschreitung: Exception, wenn die Zykluszeit des aktuellen Zyklus länger ist als (Zeit * Empfindlichkeit). Beispiel: Zeit=t#10ms, Empfindlichkeit=5, das heißt Exception sobald die Task (einmalig) länger als 50 ms läuft.

Zeit (z. B. t#200ms)

Watchdog-Zeit

Definiert zusammen mit der Empfindlichkeit die Zeitüberwachung für eine Task, wie bei Aktivieren beschrieben.

Abhängig vom Zielsystem muss die Überwachungszeitspanne möglicherweise in Prozent des Taskintervalls angegeben werden. In diesem Fall ist die Auswahlliste für die Einheit inaktiv dargestellt und zeigt % an.

Empfindlichkeit

Zahl

Definiert zusammen mit der Watchdog-Zeit die Zeitüberwachung für eine Task, wie bei Aktivieren beschrieben.

Tipp

Sie können einen Watchdog mit Hilfe der Funktionen der Bibliothek CmpIecTask.library für bestimmte SPS-Zyklen abschalten. Dies ist für Zyklen nützlich, die aufgrund von Initialisierungen mehr Zeit beanspruchen können.

Beispiel 539. Beispiel

Deaktivieren/Reaktivieren des Watchdogs:

VAR
hIecTask : RTS_IEC_HANDLE;
END_VAR

hIecTask := IecTaskGetCurrent(0);
IecTaskDisableWatchdog(hIecTask); //Watchdog disabled
...
IecTaskEnableWatchdog(hIecTask); //Watchdog enabled

Der Watchdog wird vor der Initialisierung mit IecTaskDisableWatchDog für den Rest des Zyklus abgeschaltet und ist beim nächsten Zyklus automatisch wieder aktiv.

Der Watchdog kann nach der Initialisierung mit IecTaskEnableWatchDog wieder eingeschaltet werden. Die Überwachung ist dann bereits für den Rest des Zyklus wieder aktiv (das Watchdog-Zeitfenster beginnt von vorne).



Initialisierungen von Funktionsbausteinen, die innerhalb der Methode FB_Init stattfinden, sind davon nicht betroffen. Aber es gab das Limit von < 30 Sekunden aufgrund des Communication-Timeouts. Dieses Zeitlimit besteht seit V3.5 SP18 nicht mehr, da die Online-Dienste asynchron ausgeführt werden.

Tipp

Der normale Watchdog einer IEC-Task spricht an, wenn die Ausführungszeit der IEC-Task die Watchdogzeit überschreitet.

Der sogenannte „Omitted Cylce“-Watchdog spricht an, wenn die Task erst gar nicht anläuft. Das ist der Fall, wenn die Task innerhalb dem Maximum von <Zeit * Empfindlichkeit> oder <2 * Intervall> gar keinen Zyklus ausführt. Ursache könnte eine Verdrängung durch andere Tasks sein oder eine Störung im Scheduler, der die Task nicht mehr aktiviert.

Programmaufrufe

Programmbausteine ( POU-Objekt mit Typ PROGRAM), die von der Task nacheinander aufgerufen werden

Die Reihenfolge, in der die Bausteine aufgerufen werden, entspricht der hier konfigurierten Aufrufreihenfolge von oben nach unten.

_cds_icon_task_add.png Aufruf hinzufügen

Öffnet die Eingabehilfe. Wählen Sie einen PROGRAM-Baustein aus. Beim Verlassen der Eingabehilfe mit OK wird dieser als neuer Aufruf der Liste unten hinzugefügt.

_cds_icon_task_delete.png Aufruf entfernen

Entfernt den Aufruf

_cds_icon_task_edit.pngAufruf ändern

Öffnet für den selektierten Aufruf die Eingabehilfe. Wählen Sie einen anderen PROGRAM-Baustein aus. Beim Verlassen der Eingabehilfe mit OK wird der Aufruf geändert.

_cds_icon_task_moveup.png Nach oben

_cds_icon_task_movedown.png Nach unten

Verschiebt die Position des Aufrufs in der Liste nach oben oder nach unten. Dementsprechend ändert sich zur Laufzeit die Aufrufreihenfolge.

_cds_icon_task_openpou.png Baustein öffnen

Öffnet den Bausteineditor mit der Deklaration und Implementierung des PROGRAM-Bausteins