Weckalarm OB's, OB30, OB31, OB32, OB33, OB34, OB35, OB36, OB37, OB38

Es gibt in S7 bis zu 9 Weckalarm-OB's, die wie die Verzögerungsalarme unabhängig von den Zeitfunktionen die Bearbeitung von OB1 stoppen können und ihr eigenes Programm abarbeiten. Das sind OB30 bis OB38. Auch hierbei hängt von der eingesetzten CPU ab, ob und wie viele Weckalarm-OB's zur Verfügung stehen. Um die Anzahl der Weckalarme sowie die Priorität anzeigen zu lassen, öffnen Sie die Hardwarekonfiguration. Im Register Weckalarme sehen Sie anhand der aktivierten Weckalarme, wie viele in der aktuellen CPU vorhanden sind. Bei manchen CPU's lässt sich die Prioritätsklasse innerhalb von 2 bis 24 ändern. In unserem Beispiel existiert nur ein Weckalarm OB35. Die anderen Weckalarme sind deaktiviert. Hier lässt sich auch unter Ausführung der Intervall in ms angeben, in dem der Weckalarm-OB aufgerufen werden soll. In unserem Beispiel bedeutet das, dass alle 100 Millisekunden der OB35 vom Betriebssystem aufgerufen wird.

CPU-Eigenschaften Weckalarme
Anzeige der Weckalarme und der Priorität in den Eigenschaften der CPU

Die Funktionsweise der Weckalarme sind demnach wie die eines Taktsignals. In einem bestimmten Intervall wird die Abarbeitung von OB1 unterbrochen und der Weckalarm-OB bearbeitet. Weckalarme sind jedoch wesentlich genauer als Taktsignale über Taktmerker. Wenn es also um die Genauigkeit ankommt, dann sollten immer Weckalarm-OB's genommen werden. Außerdem wird bei einem Taktmerker die Bearbeitung von OB1 nicht unterbrochen, da dafür kein anderer OB aufgerufen wird, bei einem Weckalarm schon, da hierfür der Weckalarm-OB aufgerufen wird und dieser eine höhere Priorität als OB1 hat.

Für den Aufruf eines Weckalarm-OB's benötigt man keine Systemfunktion wie beim Uhrzeitalarm oder Verzögerungsalarm. Das Betriebssystem ruft den Weckalarm-OB automatisch im vordefinierten Intervall auf. Wichtig ist, dass der Weckalarm-OB sich überhaupt in der CPU befindet. Dafür erstellt man den Weckalarm-OB manuell und lädt ihn in die CPU. In unserem Beispiel haben wir OB35 erstellt und das abgebildete Programm erstellt (UN A6.1 = A6.1).

Weckalarm-OB
Programm im Weckalarm OB35

Wenn wir die Ausführzeit auf 1000 ms stellen, dann würde der Ausgang je 1 Sekunde ein Signal geben und 1 Sekunde kein Signal geben. Es ist wichtig zu verstehen warum. Der OB35 wird jede Sekunde aufgerufen. Man könnte auf die Idee kommen, dass der Ausgang jede Sekunde nur einmal kurz flackern muss (ein Zyklus lang). Jedoch bleibt der Ausgang 1 Sekunde lang aktiv. Das ist deshalb so, weil der Ausgang nach der Bearbeitung von OB35 so bleibt. Wenn wir unser Programm in

O E0.1
ON E0.1
=A6.1

ändern, dann sehen wir das genauer. Nach einer Sekunde würde A6.1 dauerhaft aktiv bleiben. Den Blinkeffekt im obigen Beispiel haben wir nur durch die Invertierung von A6.1 erreicht. Deshalb war A6.1 für eine Sekunde aktiv und für eine Sekunde inaktiv.

Weckalarme verzögern, sperren und freigeben

Die Bearbeitung von Weckalarmen kann verzögert, gesperrt und wieder freigegeben werden. Dies erfolgt mit den Systemfunktionen SFC39 bis SFC42.

SFC39-SFC42
Verzögern, sperren und freigeben von Weckalarmen mit SFC39 - SFC42

Weckalarm sperren erfolgt über SFC39 "DIS_IRT". Die Parameter von DIS_IRT müssen wie folgt belegt werden:

  • OB_NR: Der Weckalarm-OB, der gesperrt werden soll.
  • MODE: Der Sperrmodus in Byte.

    • Mode 0: Sperren aller Alarme, Registrierung im Diagnosebuffer.
    • Mode 1: Sperren der Alarmgruppe. Zehnerstelle des Parameters unter OB_NR. In unserem Beispiel Sperren von OB30 bis OB38.
    • Mode 2: Nur OB sperren der unter OB_NR angegeben ist.
    • Mode 80, 81, 82: Sperren aller Alarme, jedoch ohne Registrierung im Diagnosebuffer.

  • RET_VAL: Rückgabeadresse für Fehlercodes.

Gesperrte Alarme können mit SFC40 "EN_IRT" wieder freigegeben werden. Die Parameter sind wie beim SFC39 anzugeben, nur mit dem Unterschied dass hier festgelegt wird wie und welche Weckalarm-OB's freigegeben werden sollen.

Mit SFC41 "DIS_AIRT" werden Alarme verzögert und mit SFC42 "EN_AIRT" werden verzögerte Alarme wieder freigegeben. Hier wird nur die Rückgabeadresse für Fehlercodes benötigt.