# CYCLE_TIME ```{index} single: CYCLE_TIME ``` image * * * * * * * * * * ## Einleitung Der Funktionsblock `CYCLE_TIME` dient zur Berechnung der verstrichenen Zeit zwischen zwei aufeinanderfolgenden Aufrufen. Er ist ein nützliches Werkzeug zur Überwachung und Diagnose von Zykluszeiten in Echtzeitanwendungen, beispielsweise zur Leistungsanalyse oder zur Erkennung von unerwarteten Verzögerungen in einem Steuerungssystem. ![CYCLE_TIME](CYCLE_TIME.svg) ## Schnittstellenstruktur ### **Ereignis-Eingänge** * **REQ**: Startet die Berechnung der Zykluszeit. Bei diesem Ereignis wird der Algorithmus ausgeführt. ### **Ereignis-Ausgänge** * **CNF**: Wird ausgelöst, sobald die Berechnung abgeschlossen ist. Dieses Ereignis bestätigt die Ausführung und liefert die berechneten Werte an die Datenausgänge. ### **Daten-Eingänge** * **TM** (DINT): Stellt den aktuellen Zeitstempel zum Zeitpunkt des Aufrufs bereit. Dieser Wert wird typischerweise von einer Systemuhr oder einem Timer-Baustein geliefert. Initialwert ist `0`. ### **Daten-Ausgänge** * **CYCLE** (DINT): Enthält die berechnete Zykluszeit, also die Differenz zwischen dem aktuellen (`TM`) und dem vorherigen Zeitstempel (`LAST`). Initialwert ist `0`. * **LAST** (DINT): Speichert den Zeitstempel des letzten Aufrufs (`TM`). Dieser Wert wird für die nächste Berechnung verwendet. Initialwert ist `0`. ### **Adapter** Dieser Funktionsblock verfügt über keine Adapterschnittstellen. ## Funktionsweise Bei jedem Eintreffen des `REQ`-Ereignisses wird der zugehörige Algorithmus `REQ` ausgeführt. Dieser Algorithmus führt zwei wesentliche Operationen durch: 1. **Berechnung der Zykluszeit**: Die Differenz zwischen dem neu eingehenden Zeitwert `TM` und dem gespeicherten Wert `LAST` (vom vorherigen Aufruf) wird berechnet und an den Ausgang `CYCLE` ausgegeben. 2. **Aktualisierung des Zeitstempels**: Der aktuelle Eingangswert `TM` wird im internen Speicher `LAST` für den nächsten Berechnungszyklus gesichert. Unmittelbar nach der Ausführung des Algorithmus wird das `CNF`-Ereignis mit den aktualisierten Werten an `CYCLE` und `LAST` ausgelöst. ## Technische Besonderheiten * Der Baustein ist ein **Simple Function Block (Basic FB)** gemäß IEC 61499. * Die verwendeten Datentypen (`DINT`) sind vorzeichenbehaftete 32-Bit-Integer, die für die Darstellung großer Zeitwerte (z.B. in Millisekunden oder Mikrosekunden) geeignet sind. * Die Initialwerte von `TM`, `CYCLE` und `LAST` sind auf `0` gesetzt. Der erste gültige `CYCLE`-Wert nach dem Start ergibt sich daher aus der Differenz `TM - 0`. Dies sollte bei der Initialisierungslogik der Anwendung berücksichtigt werden. ## Zustandsübersicht Der Baustein besitzt einen einzigen Execution Control State (EC-State) mit dem Namen `REQ`. Bei Eintritt in diesen Zustand wird stets der Algorithmus `REQ` ausgeführt und anschließend das `CNF`-Ereignis produziert. ## Anwendungsszenarien * **Zykluszeitüberwachung**: Kontinuierliche Messung der Ausführungszeit eines Programms oder eines bestimmten Programmteils. * **Performance-Monitoring**: Identifikation von Engpässen oder ungewöhnlich langen Zykluszeiten in einer Steuerungsapplikation. * **Diagnose**: Protokollierung von Zykluszeiten zu Analysezwecken oder zur Erstellung von Systemlaufzeitstatistiken. * **Adaptive Steuerung**: Bereitstellung der aktuellen Zykluszeit für Algorithmen, deren Verhalten von der verfügbaren Rechenzeit abhängen soll. ## ⚖️ Vergleich mit ähnlichen Bausteinen Im Vergleich zu generischen Zeitmessbausteinen (wie `E_DELAY` oder `E_CYCLE`) ist `CYCLE_TIME` spezialisiert auf die **Differenzbildung zwischen aufeinanderfolgenden Zeitpunkten**. Er führt keinen eigenen Timer, sondern wertet extern bereitgestellte Zeitstempel aus. Bausteine wie `E_SR` oder `E_R_TRIG` dienen grundlegend anderen Zwecken (Speichern, Flankenerkennung) und bieten keine Zeitdifferenzberechnung. ## 🛠️ Zugehörige Übungen * [Uebung_072c](../../../../../training1/Ventilsteuerung/4diacIDE-workspace/test_B/Uebungen_doc/Uebung_072c.md) ## Fazit Der `CYCLE_TIME`-Funktionsblock ist ein einfaches, aber effektives Werkzeug zur Laufzeitmessung in IEC 61499-basierten Steuerungssystemen. Seine klare Schnittstelle und einfache Funktionsweise machen ihn zu einer robusten Komponente für Diagnose- und Monitoring-Aufgaben, wo die Genauigkeit und Zuverlässigkeit der Zykluszeiterfassung im Vordergrund steht.