Die Zykluszeit einer Aufgabe ist einer der praktischen Werte, die beim Engineering herangezogen werden können, um zu verstehen, wie sich eine Steuerungs-Anwendung während der Laufzeit verhält. Wenn eine Aufgabe länger dauert als erwartet, kann dies die Prozesszeitplanung, Synchronisation, Fehlerlokalisierung und Systemstabilität beeinträchtigen.

CODESYS ist eine Entwicklungsumgebung zur Programmierung von Steuerungsanwendungen gemäß IEC 61131-3. Es wird in der Automatisierung und in Steuerungssystemen eingesetzt, bei denen Aufgaben zuverlässig innerhalb festgelegter Zeitbedingungen ausgeführt werden müssen.

In CODESYS-Projekten kann die Überwachung der tatsächlichen Zykluszeit von Aufgaben dem Engineering-Team helfen, die Leistung zu optimieren, Engpässe zu identifizieren und ein Zeitverhalten zu erkennen, das den Maschinenablauf beeinträchtigen könnte. Dies ist besonders wichtig, wenn Steuerungsaufgaben, Kommunikationsaufgaben oder Bewegungsfunktionen innerhalb eines bestimmten Zeitfensters bleiben müssen.

Dieses Tutorial zeigt zwei Möglichkeiten auf, die tatsächliche Zykluszeit einer Aufgabe in CODESYS zu messen:

  • Verwendung der integrierten TIME()-Funktion
  • Verwendung der CmpIecTask-Bibliothek

Beide Methoden können nützlich sein. Die richtige Wahl hängt von der benötigten Genauigkeit ab und davon, wie tiefgehend Sie das Aufgabenverhalten analysieren möchten.

Die Zykluszeit einer Aufgabe beschreibt, wie lange eine bestimmte Aufgabe oder ein Vorgang innerhalb eines Steuerungssystems dauert. In einer Steuerungsanwendung hilft dieser Wert, zu erkennen, ob der Code innerhalb des erwarteten Zeitrahmens ausgeführt wird.

Die Überwachung der Zykluszeit einer Aufgabe kann mehrere Engineering-Aufgaben unterstützen:

  • Prüfung, ob eine Aufgabe innerhalb ihrer konfigurierten Zykluszeit bleibt
  • Identifizierung von Codeabschnitten, die die Laufzeit verlängern
  • Erkennung unerwarteter Zeitabweichungen
  • Unterstützung der Fehlerlokalisierung während der Inbetriebnahme
  • Verbesserung der Prozesssynchronisation
  • Hilfe bei der Stabilisierung des Steuerungsverhaltens

Eine stabile Aufgaben-Zykluszeit löst nicht jedes Steuerungsproblem, bietet dem Engineering-Team jedoch einen hilfreichen Ausgangspunkt. Wenn die tatsächliche Zykluszeit länger als erwartet ist oder stark schwankt, muss die Anwendung möglicherweise genauer analysiert werden.

In CODESYS definiert eine Aufgabe, wann und wie ein Programm oder eine Funktion ausgeführt wird. Die Zykluszeit der Aufgabe ist die Zeit, die für die Ausführung benötigt wird.

Beispiel: Eine zyklische Aufgabe kann so konfiguriert werden, dass sie alle paar Millisekunden ausgeführt wird. Sollte die Ausführung des Codes innerhalb der Aufgabe zu lange dauern, kann es vorkommen, dass die Steuerung die Aufgabe nicht innerhalb des erwarteten Zeitfensters abschließen kann. Dies kann sich auf die Leistung, die Prozesssynchronisation oder das Bewegungsverhalten auswirken.

Die Messung der Zykluszeit einer Aufgabe kann herausfordernd sein, da der Istwert von mehreren Faktoren beeinflusst werden kann:

  • Systemauslastung
  • Netzwerklatenz
  • Hardware-Leistung
  • Aufgabenkonfiguration
  • Softwarearchitektur
  • Kommunikationsverhalten
  • Umfang und Struktur des Codes innerhalb der Aufgabe

Deshalb ist die Messmethode wichtig. Für grundlegende Prüfungen kann eine einfache Zeitmessmethode ausreichen. Eine präzisere Methode kann erforderlich sein, wenn eine Zeitmessung im Mikrosekundenbereich oder aufgabenspezifische Informationen benötigt werden.

Eine einfache Möglichkeit, die verstrichene Zeit in CODESYS zu messen, ist die Verwendung der integrierten TIME()-Funktion.

Die zugrundeliegende Logik ist einfach:
1. Erfassen Sie die Startzeit, bevor der Codeabschnitt ausgeführt wird.
2. Führen Sie den Code aus, den Sie messen möchten.
3. Erfassen Sie die Endzeit, nachdem der Codeabschnitt ausgeführt wurde.
4. Ziehen Sie die Startzeit von der Endzeit ab.
5. Verwenden Sie das Ergebnis als gemessene verstrichene Zeit.

Im Beispiel werden zwei FOR-Schleifen verwendet, um eine zeitaufwändige Aufgabe zu simulieren. Die TIME()-Funktion erfasst die Zeit vor und nach dem Schleifenabschnitt, und die Differenz zwischen diesen Werten gibt eine geschätzte Ausführungszeit der Aufgabe an.

Diese Methode kann hilfreich sein, wenn Sie einen schnellen Überblick darüber erhalten möchten, wie lange die Ausführung eines Codeabschnitts dauert.

Das Beispiel zeigt eine gemessene Aufgaben-Zykluszeit, die normalerweise zwischen 6 und 8 Millisekunden liegt. Ein Trace kann hinzugefügt werden, um die Messgröße im Zeitverlauf zu überwachen. Im Beispiel springt die Zykluszeit gelegentlich auf 10 Millisekunden.

Diese Abweichung ist entscheidend. Wenn eine Soft-Motion-Aufgabe mit einer Zykluszeit von 4 Millisekunden oder weniger konfiguriert ist, kann das Überschreiten dieser konfigurierten Zykluszeit zu Ausnahmen führen. Daher ist das Timing von Aufgaben besonders wichtig für Anwendungen mit strengen Anforderungen an die Bewegungsabläufe oder Synchronisation.

Die TIME()-Funktion ist nützlich, weil sie einfach ist. Sie erfordert nur wenig Code, ist einfach zu verstehen und kann schnell in ein bestehendes Projekt integriert werden.

Sie kann eine gute Option sein, wenn:

  • Sie eine schnelle Zeitprüfung benötigen
  • eine Auflösung im Millisekundenbereich ausreichend ist
  • Sie einen bestimmten Code-Bereich messen wollen
  • die Applikation keine hochpräzisen Zeitdaten erfordert

Allerdings hat die TIME()-Funktion auch Grenzen. Sie liefert Werte mit einer Auflösung im Millisekundenbereich. Das ist möglicherweise nicht präzise genug für Anwendungen, die Analysen auf Mikrosekunden-Ebene erfordern.

Außerdem erfordert die Methode eine manuelle Zeiterfassung. Sie müssen definieren, wo die Messung beginnt, wo sie endet und wie die verstrichene Zeit berechnet wird. Dies ist für einfache Prüfungen akzeptabel, kann jedoch weniger praktisch sein, wenn Sie aufgabenspezifische Laufzeitinformationen in einem größeren Programm benötigen.

Für eine präzisere Messung der Aufgaben-Zykluszeit ist die CmpIecTask-Bibliothek in der Regel die bessere Option.

Die CmpIecTask-Bibliothek ist in CODESYS enthalten. Die Bibliothek stellt Funktionen für den Zugriff auf Informationen aus dem IEC Task Manager bereit.

Sobald die Bibliothek einem CODESYS-Projekt hinzugefügt wurde, ist für die Initialisierung nur noch wenig Code erforderlich. Nach der Initialisierung kann das Programm auf eine Struktur mit detaillierten Aufgabeninformationen zugreifen, u. a. auf Werte wie die tatsächliche Aufgaben-Zykluszeit und die mittlere Zykluszeit.

Dieser Ansatz ist aufgabenbezogener als die manuelle Zeitmessung vor und nach einem Codeabschnitt. Anstatt eine eigene Zeitlogik zu erstellen, verwenden Sie die durch die Bibliothek bereitgestellten Aufgabeninformationen.

Im ursprünglichen Beispiel wird dieselbe simulierte Arbeitslast verwendet, damit die Messmethoden verglichen werden können. Der Unterschied besteht darin, dass die CmpIecTask-Bibliothek die Informationen zur Aufgaben-Zykluszeit direkter verarbeitet.

Die CmpIecTask-Bibliothek bietet mehrere Vorteile, wenn Sie eine genauere Zeitmessung für Aufgaben benötigen.

Erstens lässt sie sich flexibel in verschiedene Teile des Programms integrieren. Dadurch lassen sich Aufgabeninformationen einfacher abrufen, ohne dass manuell Start- und Endzeit-Messungen für jeden Codeabschnitt eingefügt werden müssen.

Zweitens verwaltet die Bibliothek die Erfassung und Berechnung von Informationen zur Aufgaben-Zykluszeit. Dies verringert den manuellen Aufwand und reduziert das Risiko von Fehlern in der Messlogik.

Drittens liefert die Bibliothek Werte mit einer Auflösung im Mikrosekundenbereich. Dies ist genauer als die mit der TIME()-Funktion ermittelten Werte und kann für Anwendungen mit strengeren Zeitvorgaben von Bedeutung sein.

Der Hauptnachteil besteht darin, dass die Bibliothek dem CODESYS-Projekt hinzugefügt werden muss. Für viele Anwendungen ist dies jedoch ein geringer Kompromiss im Vergleich zu der zusätzlichen Genauigkeit und den aufgabenspezifischen Informationen, die dadurch bereitgestellt werden.

Beide Methoden können Ihnen helfen, den Zeitaufwand für Aufgaben einzuschätzen, sind jedoch nicht für jede Situation gleichermaßen geeignet.

Verwenden Sie die TIME()-Funktion, wenn Sie eine einfache, schnelle Prüfung benötigen und eine millisekundengenaue Auflösung ausreicht. Sie lässt sich leicht umsetzen und eignet sich für einfache Zeitvergleiche.

Verwenden Sie die CmpIecTask-Bibliothek, wenn Sie genauere Aufgabeninformationen benötigen, eine manuelle Zeitmesslogik vermeiden möchten oder eine mikrosekundengenaue Auflösung für die Leistungsanalyse erforderlich ist.

Für Bewegungsaufgaben, Synchronisationsaufgaben oder Steuerungsanwendungen mit strengeren zeitlichen Anforderungen ist die CmpIecTask-Bibliothek in der Regel die bessere Wahl.

Die CODESYS-Aufgabenzeitplanung ist besonders relevant, wenn die Leistung der Steuerung, das Bewegungsverhalten oder die Maschinensynchronisation während der Inbetriebnahme oder Fehlerlokalisierung bewertet werden müssen.

Innerhalb der Softwareumgebung von Festo kann CODESYS Teil eines umfassenderen Engineering- und Steuerungs-Workflows sein. Festo AX Controls unterstützt die deterministische Echtzeitsteuerung in der Standardprogrammierung gemäß IEC 61131-3, einschließlich CODESYS, sowie Hochsprachen wie C/C++, C# und Python.

Die Festo Automation Suite unterstützt Inbetriebnahme, Programmierung und Diagnose. Sie kann AX-Steuereinrichtungen wie CEPE ohne zusätzliche Konfigurationsschritte aus der Topologie in die CODESYS-Programmierumgebung übertragen, sodass Benutzer direkt mit der Maschinenablaufsequenz fortfahren können.

Nutzen Sie dieses Tutorial als praktische CODESYS-Methode zur Überprüfung der Aufgabenzeit. Fahren Sie anschließend mit der Software von Festo, der Lizenzierung oder den Lernressourcen fort, die zu Ihrem nächsten Engineering-Schritt passen.

  • Die Aufgaben-Zykluszeit zeigt an, wie lange eine bestimmte Aufgabe oder ein Arbeitsvorgang innerhalb eines Steuerungssystems dauert.
  • Das Überwachen der Zykluszeit von Aufgaben hilft dem Engineering-Team dabei, die Leistung zu optimieren, Engpässe zu erkennen und die Systemstabilität zu verbessern.
  • Die TIME()-Funktion ist einfach zu verwenden und schnell zu implementieren, bietet jedoch nur eine millisekundengenaue Auflösung.
  • Die CmpIecTask-Bibliothek liefert aufgabenspezifische Informationen und eine mikrosekundengenaue Auflösung.
  • Verwenden Sie die TIME()-Funktion für einfache Prüfungen und die CmpIecTask-Bibliothek für präzisere Zykluszeitanalysen.
  • Bei anspruchsvollen Bewegungssteuerungs- oder Synchronisationsaufgaben ist oft eine genauere Betrachtung des tatsächlichen Aufgaben-Timings erforderlich.
  • Die Software- und Support-Ressourcen von Festo können Benutzern dabei helfen, von der Fehlerlokalisierung in CODESYS zur Inbetriebnahme, Lizenzierung und Edge-Control-Implementierung überzugehen.