Verzögerungsalarm OB's, OB20, OB21, OB22, OB23

In S7 gibt es systemseitig bis zu 4 Verzögerungsalarme, die unabhängig von den Zeitfunktionen die Bearbeitung von OB1 stoppen und ein anderes Programm nach Ablauf einer parametrierbaren Zeit abarbeiten können. Diese sind OB20 bis OB23. Ob und wie viele Verzögerungsalarme vorhanden sind, hängt von der jeweiligen CPU ab. Die Anzahl der verfügbaren Verzögerungsalarme können Sie entweder im Handbuch der CPU nachlesen oder über die Hardwarekonfiguration. Öffnen Sie die Hardwarekonfiguration und danach die Eigenschaften der CPU. Im Register Alarme sehen Sie, wie viele Verzögerungsalarme die CPU besitzt sowie die Prioritätsklassen. Nicht verfügbare Verzögerungsalarme sind im Eigenschaftsfenster deaktiviert. In unserem Beispiel hat unsere CPU nur ein Verzögerungsalarm OB20 mit der Prioritätsklasse 3. Bei einigen CPU's kann die Prioritätsklasse innerhalb bestimmter Grenzen (2 bis 24) geändert werden.

CPU-Eigenschaften Verzögerungsalarme
In den Eigenschaften der CPU werden die Anzahl der Verzögerungsalarme und die Priorität angezeigt

Verzögerungsalarme laufen nur im Betriebszustand RUN und können bereits im Anlaufprogramm gestartet werden. Spätestens nach Ablauf der Verzögerungszeit muss sich die CPU jedoch im RUN-Zustand befinden. Befindet sich die CPU nicht im RUN-Zustand, wird mit dem Aufruf des Verzögerungsalarm OB's gewartet bis die CPU im RUN-Zustand ist. Beim Übergang in den RUN-Zustand werden Verzögerungsalarme dann vor dem OB1 abgearbeitet, da dieser eine höhere Priorität hat. Wenn andere OB's mit noch höherer Priorität aufgerufen werden, so werden zuerst diese abgearbeitet

Der Aufruf eines Verzögerungsalarm OB's erfolgt durch den Aufruf von SFC32 "SRT_DINT".

SFC32
Der Aufruf des SFC32

Der SFC32 hat mehrere Parameter die zugewiesen werden müssen. Diese sind wie folgt zu belegen.

Eingangsparameter

  • OB_NR: Hier wird der Verzögerungs-OB angegeben, z.B. OB20.
  • DTIME: Die Verzögerungszeit in ms (1 bis 60000) wird hier angegeben, z.B. T#5000ms.
  • SIGN: Ein Kennzeichen, das in der Startereignisinformation des OB's beim Aufruf des Verzögerungsalarm-OB's erscheint, muss hier angegeben werden, z.B. MW30.

Ausgangsparameter

  • RET_VAL: Wenn während der Bearbeitung ein Fehler auftritt, wird der Fehlercode in den Parameter geschrieben, z.B. in MW40.

Wenn die Verzögerungszeit abgelaufen ist, startet der Verzögerungsalarm OB und arbeitet sein Programm ab. Die Verzögerungszeit, die in ms angegeben wird, kann nach Ablauf immer wieder neu gestartet werden. Größere Zeiten als 60000 ms können realisiert werden, indem man im Verzögerungsalarm-OB einen Zähler benutzt.

Der Aufruf von OB20 in AWL

CALL "SRT_DINT" //Aufruf von SFC32
OB_NR :=20 //Aufruf von OB20
DTIME :=T#5S //Verzögerungszeit
SIGN :=MW10 //Kennzeichen
RET_VAL:=MW30 //Adresse für Fehlercodes
NOP 0

Verzögerungsalarm stornieren mit SFC33 "CAN_DINT"

Mit SFC33 "CAN_DINT" kann die Bearbeitung eines Verzögerungsalarms gestoppt, bzw. storniert werden. Der Verzögerungsalarm-OB wird danach nicht mehr aufgerufen. Beim Aufruf von SFC33 muss bei OB_NR die OB-Nummer angegeben werden, z.B. OB20 sowie bei RET_VAL wieder eine Rückgabeadresse für Fehlercodes, z.B. MW40.

SFC33
Verzögerungsalarm stornieren mit SFC33

Status des Verzögerungsalarms mit SFC34 "QRY_DINT" abfragen

Der Status eines Verzögerungsalarm-OB's kann mit SFC34 "QRY_DINT" abgefragt werden. Neben der OB_NR und RET_VAL muss hier eine Rückgabeadresse für den Status vom Datentyp WORD angegeben werden, z.B. MW70. Hier kann der Status ausgewertet werden. Ist der Rückgabewert von RET_VAL nicht 0, dann darf der Status nicht ausgewertet werden da in diesem Fall ein Fehler vorliegt.

SFC34
Den Status eines Verzögerungsalarm-OB's mit SFC34 abfragen

Die Bedeutung des Status:

Bit 0=0: CPU ist im RUN
Bit 0=1: CPU ist im Anlauf
Bit 1=0: Interrupt ist freigegeben
Bit 1=1: Interrupt ist gesperrt durch Aufruf von SFC 39 "DIS_IRT"
Bit 2=0: Interrupt nicht aktiv oder abgelaufen
Bit 2=1: Interrupt aktiv
Bit 3= Ist immer 0
Bit 4=0: Der OB der bei OB_NR angegeben wurde existiert nicht
Bit 4=1: Der OB der bei OB_NR angegeben wurde ist geladen
Restlichen Bits= Sind alle auf 0 gesetzt