# CoDeSys Grundlagen: Tasks



## Grimsey (23 Dezember 2010)

Hallo zusammen,

ich beschäftige mich gerade aus reinem Interesse mit CoDeSys. Bin bisher nur mit der SIEMENS-Welt vertraut, aber man schaut ja auch mal links und rechts des Weges.
Ich habe in diesem Zusammenhang eine Frage zu den Taks in CoDeSys:
wann und welcher Reihenfolge Tasks abgearbeitet werden ist in der Hilfe ja sehr gut beschrieben. Nur wie verhält sich ein Task, wenn die Abarbeitungszeit des Programms länger ist als die für den Task definierte Zeit? Geht das dann an gleicher Stelle im nächsten Zyklus weiter oder wie sieht das aus?

Im Grunde sind die Tasks ja vergleichbar mit den Weckalarm-OBs bei Siemens, oder täusche ich mich?

Danke für Eure Tipps!


----------



## Ghosty (28 Dezember 2010)

Hallo,

also meines Wissens nach, wird der Task nach abgelaufener Zeit wieder von neuem Gestartet. Deshalb sollte man Zeitüberschreitungen auch vermeiden.

Hier noch ein kleiner Auszug aus einer Beckhoff-Hilfe:
*Zyklisch*: Die Task wird entsprechend der bei Intervall eingegebenen Zeit zyklisch gestartet. 

Hoffe ich konnte ein wenig weiter helfen.

Gruß


----------



## Bitmanipulator (28 Dezember 2010)

Es kommt zu einer Zykluszeitverletzung und die Steuerung bleibt im Zustand Service stehen.


----------



## lothar (31 Dezember 2010)

Bitmanipulator schrieb:


> Es kommt zu einer Zykluszeitverletzung und die Steuerung bleibt im Zustand Service stehen.


 
das glaube ich so nicht. Der Zykluszeitfehler kommt bei der Überschreitung des Watchdogs, nicht bei der Überschreitung des zykl. Rasters.


----------



## Ghosty (31 Dezember 2010)

Bei Beckhoff gibt es im Systm Manager einen Überschreitungszähler der bei Verletzung der Zykluszeit hochgezählt wird. Zu sehen ist der Zähler bei der "SPS-Konfiguration" wenn man die Tasks Online beobachtet.
Aber dieser Zähler sollte ja möglichst nie zum Zählen kommen .


----------



## testor (28 März 2019)

Ghosty schrieb:


> Hallo,
> 
> also meines Wissens nach, wird der Task nach abgelaufener Zeit wieder von neuem Gestartet. Deshalb sollte man Zeitüberschreitungen auch vermeiden.
> 
> ...



Hallo,
ich hole das Thema mal hoch, da ich auf das entsprechende Problem gestoßen bin. Kann jemand die Aussage bestätigen? Ich arbeite vorrangig mit Twincat. Bei Twincat 3 gibt es zusätzlich noch die Möglichkeit Watchdogs Cycles in einer Ganzzahl anzugeben. 

Ich bin mir nicht sicher ob ich bei einer Zyklischen Task und präemptiven Multitasking ein abbrechen oder nur ein unterbrechen erwarten würde.


----------



## StructuredTrash (29 März 2019)

Die Watchdog cycles habe ich noch gar nicht ausprobiert. Ich hoffe mal, dass der Wert hält, was sein Name verspricht, und die Task tatsächlich nach dem x-fachen der Zyklsuzeit abbricht. In der Standardeinstellung wird die Task dagegen komplett abgearbeitet, auch wenn die Zykluszeit überschritten wird. Ist wohl die pragmatischste Lösung, um bei geringfügigen Überschreitungen die gesteuerte Anlage nicht hart stillzusetzen. Allerdings heisst das auch, dass Du aus einer versehentlich programmierten Endlosschleife nicht mehr herauskommst. Ausserdem kann Dir bei einer Überschreitung ein Feldbuswatchdog in die Suppe spucken. Dann wird das Programm zwar abgearbeitet, aber die Anlage steht trotzdem.


----------



## testor (29 März 2019)

Danke für die Rückmeldung. Hast du hierfür einen Link der das so beschreibt? Ich habe die Doku und meine Trainingsunterlagen von damals durchsucht. Hier wird über das genaue Verhalten nicht eingegangen.


----------



## Guga (29 März 2019)

Wie sich ein System verhält wenn der Determinismus (in Form von Zyklusüberschreitungen) nicht mehr eingehalten werden kann bestimmt der Architekt des Systems.
Ich glaube mich vage daran zu erinnern das (rein) CoDeSys bzw. der OEM-Nutzung hier unterschiedliche Definitionen enthalten kann. Wie rein CoDeSys es macht weiss ich aber nicht mehr.

Für TwinCAT gilt: 
Eine Zyklusüberschreitung heisst das zum Zeitpunkt des neuen Triggers die frühere Abarbeitung nicht fertig war. In diesem Fall wird der alte noch nicht abgearbeitete Code weiter bearbeitet und wie gesagt der Zyklusüberschreitungszähler hochgesetzt. Das System geht nicht in Stop o.ä. (in der Standard Config).
An den "Wachdog Cycles" habe ich noch nie herumkonfiguriert, muss ich mal bei Gelegenheit mir anschauen. 
Ich könnte mir vorstellen das der Wert "0" bedeutet das es de-aktiviert ist. Aber wie gesagt ist das nur eine Vermutung... 
Ach ja: Beim Aufstarten eines Systems hat man ab- und an mal eine Überschreitung (wegen der internen Init-Routinen). Stört eigentlich nie da die Maschine ja auch Initialisiert werden muss.

Guga


----------



## seehma (1 April 2019)

> Ausserdem kann Dir bei einer Überschreitung ein Feldbuswatchdog in die Suppe spucken. Dann wird das Programm zwar abgearbeitet, aber die Anlage steht trotzdem.



Bei Ethercat Antrieben kommt nach 2 Ausfällen (besonders jene die von der Sercos-Welt her kommen) ein doppelter AT-Ausfall und bei einem Ausfall eine Warnung. Darauf folgt eine Stillsetzung des Antriebs nach der eingestellten Fehlerreaktion.

Nicht zu vergessen, der Task kann auch ordentlich Jittern somit sollte man immer einen gewissen Buffer einkalkulieren. Also niemals mit der Auslastung über 60-80% gehen.
Der Feldbus jittert in der Regel nicht, da das absenden des Ethercat Pakets von der Netzwerkkarte in Hardware erledigt wird, der Echtzeit Task muss nur früh genug das Paket an die Karte abliefern, den genauen Versandt übernimmt die Karte -> Deshalb funktioniert auch die Echtzeit unter Windows und deshalb muss es eine Intel Karte sein (bei Beckhoff), denn nur diese kann die SO_TXTIME Option.


----------



## StructuredTrash (1 April 2019)

testor schrieb:


> Danke für die Rückmeldung. Hast du hierfür einen Link der das so beschreibt? Ich habe die Doku und meine Trainingsunterlagen von damals durchsucht. Hier wird über das genaue Verhalten nicht eingegangen.



Einen Link zu etwas so Unwichtigem? Wir sind nicht bei "Wünsch dir was", sondern bei Beckhoff. 
Nein, ist reine Praxiserfahrung. Ich habe zu TC2-Zeiten mit der Kombination WinCE und TargetVisu gearbeitet, die zu einer zwangsläufigen Beschäftigung mit diesem Thema führt.


----------



## KGU (8 April 2019)

Guga schrieb:


> ...
> Für TwinCAT gilt:
> Eine Zyklusüberschreitung heisst das zum Zeitpunkt des neuen Triggers die frühere Abarbeitung nicht fertig war. In diesem Fall wird der alte noch nicht abgearbeitete Code weiter bearbeitet und wie gesagt der Zyklusüberschreitungszähler hochgesetzt. Das System geht nicht in Stop o.ä. (in der Standard Config).
> An den "Wachdog Cycles" habe ich noch nie herumkonfiguriert, muss ich mal bei Gelegenheit mir anschauen.
> ...



Wie Guga geschrieben hat bedeutet eine Zyklusüberschreitung, dass zum Zeitpunkt des "Triggers" die Task noch nicht fertig ist. Wie ebenfalls beschrieben, wird dann der alte noch nicht abgearbeitete Code weiter bearbeitet. Danach versucht die Task den aktuellen (zweiten) Zyklus auszuführen. Gelingt dies wieder nicht, wird der Überschreitungszähler ein zweites Mal hochgesetzt und der Code des zweiten Zyklus ausgeführt. Danach wird die Task erst wieder aufgerufen, wenn sie regulär dran wäre, es gehen also Zyklen komplett verloren. TwinCAT stoppt durch diesen Mechanismus aber nicht.

"Watchdog Cycles" 0 bedeutet in der Tat, dass der Watchdog deaktiviert ist. Bei Watchdog Cycles 1 schlägt er bei jeder Zyklusüberschreitung an. Generell gibt er an, wie lange eine Task ununterbrochen laufen muss bis er zuschlägt. Es ist dem Watchdog dabei egal, ob die Task noch den ersten Zyklus bearbeitet oder der Task dann direkt dahinter versucht den zweiten Durchlauf auszuführen. Der Watchdog schaut von außen drauf und sieht nur wie lange eine Task ununterbrochen dran ist. Schlägt der Watchdog zu, gibt es eine richtige Exception.


----------

