In früheren Artikeln haben wir besprochen, was ein Organisationsblock ist, und wir haben über den Haupt-Zyklischen Interrupt OB1 und den Tageszeit-Interrupt OB10 gesprochen.
In diesem Artikel werden wir die verschiedenen OBs weiter besprechen, und dieses Mal sprechen wir über den Time Delay Interrupt Organization Block oder OB20.
Inhalt:
- Was ist OB20?
- Wie ruft man OB20 auf?
- Parameter der SRT_DINT-Anweisung.
- Beispielprogramm.
- Fazit.
Was ist Time Delay Interrupt (OB20)?
OB20 ist ein Organisationsblock, der vom Betriebssystem aufgerufen und ausgeführt wird, aber wir müssen dem Betriebssystem mitteilen, wann dieser OB20 aufgerufen werden soll.
Das Betriebssystem erhält die Informationen vom Benutzer-SPS-Programm, um diesen OB20 aufzurufen. Es wartet auf die konfigurierte Verzögerungszeit und ruft dann die Logik auf und führt sie aus, die sich im OB20 befindet.
Wir erstellen einen OB20-Block, indem wir im Projektbaum einen neuen Block hinzufügen. Siehe Abbildung 1.
Abbildung 1 – Einen neuen OB20-Block erstellen
Nachdem ich nun einen Zeitverzögerungs-Interrupt erstellt habe, stellt sich die Frage, wann dieser ausgeführt wird. Und wie konfiguriere ich die Zeitverzögerung der Blockausführung?
Auch hier ist OB20 ein Organisationsblock, was bedeutet, dass Sie den auszuführenden Block nicht aufrufen, sondern dem Betriebssystem mitteilen, wann es ihn aufrufen und die darin enthaltene Funktionalität ausführen kann.
Wie teilt man dem Betriebssystem mit, dass es OB20 aufrufen soll?
Um dem Betriebssystem mitzuteilen, dass wir OB20 aufrufen möchten, verwenden wir SRT_DINT oder den Startzeitverzögerungs-Interrupt, siehe Abbildung 2.
Abbildung 2 – Startzeitverzögerungsanweisung
Parameter der SRT_DINT-Anweisung
Wie Sie im letzten Bild sehen, können Sie die SRT_DINT-Anweisung verwenden, um OB20 aufzurufen. Sie müssen jedoch einige Parameter konfigurieren, damit die Anweisung funktioniert.
EN: Die Anweisung wird erst ausgeführt, wenn am EN-Eingang ein negatives Flankensignal anliegt. Das bedeutet, dass Sie eine Bedingung aus dem Satz von Bedingungen zuweisen müssen, um das Signal zu aktivieren, und die Anweisung funktioniert nur, wenn diese Bedingung wahr und dann wieder falsch ist.
OB_NR: Sie weisen die Nummer des Verzögerungsinterrupts zu, den Sie aufrufen müssen, in unserem Fall 20, da wir OB20 erstellt haben, aber wir können mehr als einen Verzögerungsinterrupt erstellen und müssen dann jeden mit einer separaten SRT_DINT-Anweisung aufrufen.
DTIME: Dies ist die Verzögerungszeit, die Sie abwarten möchten, bevor Sie OB20 ausführen. Wir werden diese Zeit der Simulation halber auf 5 Sekunden festlegen.
SIGN: Kennung, die angezeigt wird, wenn der Zeitverzögerungsinterrupt-OB in den Startereignisinformationen des OB aufgerufen wird.
Beispiel-SPS-Programm
Um OB20 besser zu verstehen, erstellen wir eine einfache Logik, um zu sehen, wie ein OB20 aufgerufen und ausgeführt werden kann. Wir werden dieses SPS-Beispiel auf der Logik aufbauen, die wir in früheren Artikeln für OB1 und OB10 erstellt haben.
In OB20 erstellen wir eine Logik, die zählt, wie viele OB1-Zyklen innerhalb der 5 Sekunden Verzögerungszeit aufgerufen und ausgeführt wurden, die wir für OB20 konfiguriert haben. Siehe Abbildung 3.
Abbildung 3 – Logik in OB20
Im letzten Bild sehen Sie, dass wir den MOVE-Befehl verwendet haben, um Informationen zu Zykluszählungen zu Beginn des OB20-Aufrufs und nach dessen Ausführung zu übertragen.
Den Rest der Logik finden Sie in Abbildung 4.
Abbildung 4 – Berechnen Sie, wie viele Zyklen innerhalb von 5 Sekunden gezählt werden
Danach subtrahieren wir die beiden Werte der Zykluszählungen, um zu ermitteln, wie viele Zyklen innerhalb der 5 Sekunden Verzögerung ausgeführt wurden.
Nachdem wir nun die gewünschte Logik erstellt haben, wie können wir OB20 aufrufen? Wie bereits erläutert, müssen wir die Anweisung SRT_DINT verwenden. Wir werden diese Anweisung innerhalb des OB10 verwenden, den wir zuvor so konfiguriert haben, dass er jede Minute ausgeführt wird. Das bedeutet, dass der OB20 ebenfalls jede Minute aufgerufen und ausgeführt wird, jedoch mit einer Verzögerungszeit von 5 Sekunden.
Im vorherigen Artikel haben wir eine Logik erstellt, die angibt, wie oft der OB1 aufgerufen und ausgeführt wird. Außerdem haben wir eine weitere Logik erstellt, die den OB10 jede Minute aufruft.
In diesem Beispiel verwenden wir den Aufruf des OB10, um den OB20 aufzurufen. Siehe Abbildung 5.
Abbildung 5 – Aufruf des OB20 über OB10
Wir haben bereits gesagt, dass der SRT_DINT ein negatives Flankensignal am EN benötigt, damit der Aufruf gestartet werden kann. Aus diesem Grund haben wir das Signal TimeOfDayInterruptEnabled verwendet, von dem wir wissen, dass es wahr sein wird, wenn OB10 ausgeführt wird, und dann wieder auf falsch zurückgeht, was uns das Flankensignal gibt, das wir brauchen.
Nachdem die gesamte SPS-Logik nun abgeschlossen ist, kompilieren und führen wir eine neue Simulation aus. Sehen Sie sich die folgende Simulation unseres Projekts an.
Sie sehen in der Animation, dass die Werte der Zykluszählungen zunächst Nullen sind, aber wenn OB10 aufgerufen wird und TimeOfDayInterruptEnabled wahr ist, wartet die Logik 5 Sekunden, dann werden die Zählwerte mit den Zykluszählungen aktualisiert.
Fazit
- OB20 ist ein Organisationsblock, der vom Betriebssystem aufgerufen und ausgeführt wird.
- Wir können dem Betriebssystem sagen, dass es OB20 mit der Anweisung SRT_DINT aufrufen soll.