In früheren Artikeln haben wir verschiedene Arten von Organisationsblöcken besprochen, wie den Haupt-OB1, der der wichtigste zyklische Programmblock ist. In diesem Artikel werden wir uns mit einem anderen zyklischen Organisationsblock befassen. Dem OB30 oder zyklischen Interrupt-OB.
Inhalt:
- Was ist ein zyklischer Interrupt OB30?
- Was ist der Haupt-OB1-Zyklus?
- Warum brauche ich OB30?
- Wie konfiguriere ich zyklische Interrupts?
- Was ist, wenn ich mehr als einen zyklischen Interrupt habe?
- Fazit.
Was ist ein zyklischer Interrupt OB30?
Ein zyklischer Interrupt OB30 ist ein Organisationsblock, der in festgelegten und genauen Zeitintervallen aufgerufen und ausgeführt wird. Im Gegensatz zum zyklischen Haupt-OB1, der kontinuierlich aufgerufen und ausgeführt wird, wird der zyklische Interrupt in Zeitintervallen aufgerufen, die Sie beim Erstellen eines zyklischen Interrupt-OB konfigurieren sollten.
Wenn ich beispielsweise einen OB30 mit einem Zeitintervall _auch Zykluszeit genannt_ von 20 ms erstellt habe, bedeutet dies, dass das Betriebssystem den Hauptzyklus-OB1 unterbricht und den OB30 alle 20 ms aufruft.
Sie müssen sicherstellen, dass die Laufzeit eines zyklischen Interrupt-OB kleiner als sein Zeitintervall ist. Andernfalls kann es passieren, dass der nächste Aufruf des OB30 eintrifft, während dieser Aufruf des OB30 noch ausgeführt wird. In diesem Fall generiert das Betriebssystem einen Zeitfehler, der dazu führen kann, dass die SPS in den STOP-Modus wechselt.
Was ist der Hauptzyklus-OB1?
Der Hauptzyklus-OB1 ist der Organisationsbaustein, der für die zyklische Ausführung Ihrer Logik durch die SPS verantwortlich ist. Immer wenn Sie ein neues Projekt erstellen und eine SPS hinzufügen, wird der Haupt-OB1 automatisch von der Software erstellt.
Die wesentliche Grundlage Ihres SPS-Codes ist das zyklische Verhalten, d. h. Ihr Code muss kontinuierlich ausgeführt werden. Wenn die Verarbeitung Ihrer Logik abgeschlossen ist, beginnt das Betriebssystem erneut mit der Verarbeitung. Dies geschieht durch die Verwendung des Haupt-OB1. Sie platzieren und rufen Ihre gesamte Logik und Ihren Code in diesem OB1 auf und das Betriebssystem sorgt dafür, dass diese kontinuierlich ausgeführt werden.
Die Zykluszeit des Haupt-OB1 bezieht sich auf die Laufzeit des zyklischen Programms, einschließlich der Laufzeit aller verschachtelten Programmteile wie FCs, FBs und OBs mit höherer Priorität. Wenn Sie mehrere Programmzyklus-OBs erstellt haben, trägt jeder Programmzyklus-OB zur Zykluszeit bei.
Das Betriebssystem überwacht, ob die Zykluszeit kleiner bleibt als die konfigurierte maximale Zykluszeit. Wenn sie die maximale Zykluszeit überschreitet, wechselt die SPS je nach Ihrer Programmierung entweder in den STOP-Modus oder ruft OB80 auf.
Warum brauche ich OB30?
Jemand könnte argumentieren, dass ich jede beliebige Funktionalität innerhalb des OB30 im Haupt-OB1 platzieren und versuchen kann, damit durchzukommen, abhängig von der sehr schnellen Leistung der meisten SPS heutzutage. Das kann manchmal in Ordnung sein, aber nicht immer.
Abhängig von der Leistung Ihrer SPS kann die Hauptzykluszeit zwischen 1 und 150 ms liegen. Sie kann unterschiedlich sein, aber dies ist die Standardkonfiguration. Diese Zykluszeit hängt von vielen Faktoren ab, wie der Größe Ihres SPS-Programms und Interrupts in Ihrer Logik und anderen Faktoren, die die Laufzeit Ihres Zyklus höchstwahrscheinlich instabil machen.
Wenn Sie nun bestimmte Funktionen genau alle 10 ms ausführen müssen, nicht alle 9 ms und nicht alle 11 ms, können Sie sich nicht auf den Haupt-OB1 verlassen, da das Ergebnis möglicherweise nicht wie gewünscht ist. In diesem Fall verwenden Sie den zyklischen Interrupt OB30, konfigurieren ihn auf die gewünschten 10 ms und das Betriebssystem stellt sicher, dass diese Funktion genau alle 10 ms aufgerufen und ausgeführt wird. Aus diesem Grund wird er Interrupt genannt, da er die Ausführung des Haupt-OB1 unterbricht, um Ihren OB30 aufzurufen und auszuführen.
Beispiele für Funktionen, die OB30 benötigen
- PID-Reglerverarbeitung.
- Überwachung von Sicherheitskreisen.
- Überwachung der Kommunikation zwischen Maschinen.
In allen vorherigen Beispielen müssen Sie Ihre Parameter zu bestimmten Zeiten kontinuierlich überwachen und überprüfen, da sie sich auf reale physikalische Größen oder auf die Maschinensicherheit beziehen. Die Ausführung solcher Funktionen sollte nicht verzögert werden, da sie die Sicherheit und Kontinuität Ihres Prozesses beeinträchtigen.
Wie konfiguriere ich zyklische Interrupts?
Wenn Sie einen zyklischen Interrupt erstellen, müssen Sie einige Parameter konfigurieren. Siehe Abbildung 1 zum Hinzufügen eines neuen OB30.
Abbildung 1 – Neuen zyklischen Interrupt OB30 hinzufügen
Wenn Sie einen zyklischen Interrupt erstellen, finden Sie viele Parameter, die Sie in den Eigenschaften des Blocks festlegen können, siehe Abbildung 2.
Abbildung 2 – Eigenschaften von OB30
Die wichtigsten Parameter, die Sie berücksichtigen müssen, sind folgende:
- Zykluszeit
Verwenden Sie den Parameter „Zykluszeit“, um den Zeitraum zwischen zwei Aufrufen des zyklischen Interrupt-OB festzulegen. Er ist ein ganzzahliges Vielfaches von 1 µs.
- Phasenversatz
Hier stellen Sie die Zeitspanne ein, um die die Startzeitpunkte gegenüber dem Vielfachen der Zykluszeit verschoben werden.
Siehe Abbildung 3 für die Konfiguration von Zykluszeit und Phasenversatz.
Abbildung 3 – Einstellen der Zykluszeit und des Versatzes von OB30
- Priorität des Weckalarm-OB
Dies ist ein weiterer wichtiger Parameter, den Sie beim Konfigurieren eines zyklischen Interrupts berücksichtigen müssen, da Sie möglicherweise mehr als einen zyklischen Block haben. Wenn zwei verschiedene OBs gleichzeitig aufgerufen werden müssen, ruft das Betriebssystem den Block mit einer höheren Prioritätsnummer auf und führt ihn aus.
Sie sollten wissen, dass der SPS-Hauptprogrammzyklus OB1 die Prioritätsnummer 1 hat, die niedrigste Prioritätsstufe, die ein Block haben kann. Deshalb kann OB1 durch jeden anderen Blockaufruf unterbrochen werden. Siehe Abbildung 4.
Abbildung 4 – Festlegen der Priorität von OB30
Was passiert, wenn ich mehr als einen zyklischen Interrupt habe?
Es ist nicht ungewöhnlich, dass Sie mehr als einen zyklischen Interrupt in Ihrer Logik haben. Wenn Sie zwei PID-Regler in Ihrer SPS-Logik haben, benötigen Sie möglicherweise zwei zyklische Interrupts, um jeden PID zu verarbeiten. In diesem Fall müssen Sie sicherstellen, dass sich der Aufruf und die Ausführung verschiedener zyklischer Interrupts nicht überschneiden.
Wenn Sie beispielsweise OB30 mit einer Intervallzykluszeit von 5 ms und OB31 mit einem Zyklusintervall von 10 ms haben, bedeutet dies, dass der zweite Aufruf von OB30 auch die Zeit für den Aufruf von OB31 ist. Dies kann zu Logikfehlern führen, selbst wenn Sie die Priorität eines der beiden höher als die des anderen einstellen, wird Ihre Zykluszeit für den Block mit der niedrigeren Priorität durcheinandergebracht. Siehe Abbildung 5.
Abbildung 5 – Überlappung des Aufrufs verschiedener zyklischer Interrupts
In diesem Fall kann ein Phasenversatz ratsam sein, wenn Sie mehrere zyklische Interrupt-OBs verwenden.
Wenn ihre Zykluszeiten gemeinsame Vielfache haben, können Sie einen Phasenversatz verwenden, um gleichzeitige Startzeiten zu verhindern. Siehe Abbildung 6.
Abbildung 6 – Versatz zwischen verschiedenen OB-Aufrufen
Um diese Überlappung zu vermeiden, setzen wir die Versatzzeit von OB31 auf 1 ms.
Das bedeutet, dass die Zählung für das OB31-Zeitintervall um 1 ms gegenüber der Startzeit von OB30 verschoben wird. Siehe Abbildung 7.
Abbildung 7 – Offset-Einstellung von OB31
Fazit
- Zyklische Interrupts sind sehr nützlich für zeitkritische Aufgaben, bei denen es zu keinen Verzögerungen kommen sollte.
- Sie können mehr als einen zyklischen Interrupt in Ihrer Logik haben.
- Verwenden Sie die Offset-Einstellung der zyklischen Interrupts, um gleichzeitige Startzeiten zu vermeiden.
- Verwenden Sie die Prioritätseinstellung, um die Reihenfolge der Ausführung verschiedener zyklischer Interrupts zu steuern.