Codesys 2.3 Tasks

Beck

Level-1
Beiträge
64
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich versuche die Taskkonfiguration in Codesys zu verstehen.

Ich habe zwei tasks: den Haupttask PLC_PRG und einen Loggingtask.
Ersterer soll so schnell und oft wiederholt werden wie möglich, daher habe ich hier "freilaufend" gewählt:
COdesys_Task_Logging.jpg
Das Logging hingegen soll nur einmal pro Minute aufgerufen werden:
COdesys_Task_PLC_PRG.jpg

Innerhalb der Loggingroutine schreibe ich in eine SQL-Datenbank. Bei Datenabfrage habe ich mich gewundert, warum alle 1 bis 2 Sekunden ein Eintrag zu verzeichnen ist.
Ich stellte dann fest, dass Logging viel häufiger aufgerufen wird als PLC_PRG:
COdesys_Task_numberofcycles.png
Wer hat dafür - ohne weiteren Quellcode - eine Erklärung?
 
Hi Beck,

was mir zunächst auffällt ist, dass du 2H (120 Minuten) als Zykluszeit eingetragen hast für deinen Loggin Task.
Zu deinem Problem: Ich könnte mir vorstellen, dass 120 minuten als Zykluszeit einfach ignoriert werden, müsste man mal in der Doku nachlesen.

Wieso geht du nicht her und machst den Task ereignisgesteuert und definierst einfach eine Variable, die einmal pro Minute ein True bekommt?
Wäre meines Erachtens einfacher und eleganter.

Grüße,
Flo
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Beck

Die maximale zyklische Aufrufzeit ist Zielsystemabhängig. Bei Wago 750-880 ist sie 30 Minuten.

Ersterer soll so schnell und oft wiederholt werden wie möglich, daher habe ich hier "freilaufend" gewählt:
Die ist ein Irrtum. Freilaufend hat die niedrigste Priorität und wird von jedem anderen Task unterbrochen. Die Eingabe einer Priorität wird dabei ignoriert.
Holger
 
Heb nochmal aus der Versenkung...

Spricht denn irgendwas dagegen einen freilaufenden Task zu machen?
Würde dann doch eher einem "OB1" aus der Siemenswelt entsprechen oder?

Aktuell habe ich zwei Tasks laufen, einen für das Modbus-Datenhandling,
und einen der mir meine Reststeuerung abhandelt.

Beide sind Fix, der PLC_PRG läuft im 10ms Raster, wobei ich mal gerne wissen würde,
wie lange der TASK läuft... ich habe die Vermutung dass ich ab und an an die Grenze stosse,
und der Task selber länger wie 10ms läuft. Ab und an reagieren nämlich die KNX-Taster erst beim zweiten
mal Tasten. Dann könnte ich diesen Task in freilaufend ändern und gut is.
 
Hallo Markus
Mache ich auch so. Zeitkritische Sachen in seperaten Task mit fester Zeit und den Rest freilaufen.
Zur Zykluszeit und der Überwachung ist hier Noch einmal: 750-880 (881) Zykluszeitüberwachung alles beschrieben.
Holger

Nachtrag: Wenn dein Modbustask wesentlich schneller läuft und deine Signale nur 1 oder 2 Zyklen anstehen könntest sie sie eventuell nicht mitbekommen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Freilaufende Task war bei WAGO mit Web-Visu problematisch, weil die SPS zwar schell war, für die Bearbeitung der VISU im Hintergrund aber das Zeitfenster zu klein wurde.

Warum muss die Home-Automation zwingend mit 10ms laufen?
Bei 20ms sollte man auch noch nicht beobachten können, dass das Licht eine Halbwelle später an geht. :rolleyes:

Ein extra Task, kann eine Lösung sein, wenn ein kleiner Programmteil viel schneller reagieren muss, als der Rest. Dabei gibt es aber einiges zu beachten wie z.B. die Daten-Konsistenz.
Unproblematischer ist, wenn man ohne auskommt.
 
grade mal auf freilaufend konfiguriert, und nen 250ms watchdog gemacht... zack ausgelöst... watchdog ausgemacht, da seh ich regelmässig ne zykluszeit von 1700ms... kann das was mit den netzwerkvariablen zu tuen haben, die ich vor kurzem zum testen eingefügt habe? das ist erst so träge seid dem die drin sind...

Nachtrag:
Jab die Netzwerkvariablen gelöscht, schon ist die Zykluszeit bei 5-12ms...
Ich denke ich hatte das senden bei Wertänderung aktiviert, und mein Watchdog ist nen dint, welcher pro zyklus +1 wird, also ne wertänderung, und dann senden möchte...
Denke da ist ein Zykliches Senden alle 100ms vollkommen ausreichend...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, das war es...
Hab jetzt die Netzwerkvariablen wieder neu eingefügt,
Zyklisches senden auf t#100ms gesetzt, läuft jetzt passend :)

Frage: Muss der Modbus-Task bei 5ms liegen? kommt mir was schnell vor...
Hab da jetzt nur Ausgänge dran hängen... Ist ne Ethernet-ET von Wago...
 
Zurück
Oben