Skip to main content

Ereignisse mit API-Aufruf programmatisch auslösen

Ereignisse sind Alarme des Überwachungstyps Ereignis (API). Sie werden programmatisch im Applikationscode mithilfe der Funktionalität der Bibliothek AlarmManager und der Schnittstelle IAlarmHandler7 ausgelöst.

Ereignisse werden direkt in einer Alarmgruppe definiert oder in einer Alarmgruppenvorlage als Alarminstanz.

Für weitere Informationen siehe: Beispiel AlarmManager

Mit Ereignis alarmieren

Alarm mit Typ Ereignis (API) definieren

  1. Legen Sie unter Alarm Configuration eine Alarmgruppe an.

  2. Definieren Sie in der Alarmgruppe einen Alarm des Überwachungstyps Ereignis (API).

  3. Wählen Sie in der Spalte Klasse beispielsweise die Alarmklasse Error und geben Sie unter Nachricht die gewünschte Alarmmeldung an.

Der per API auf ein Ereignis hin auslösender Alarm ID_0 ist definiert.

Sie können ein solches Ereignis mit einer beliebigen Alarmklasse definieren. Die Angabe von Details entfällt und es wird keine Alarmbedingung angegeben. Das Ereignis wird per API-Aufruf ausgelöst.

Tipp

Sie können ein Ereignis auch in einer Alarmgruppenvorlage definieren.

API-Aufruf implementieren

Ein Ereignis wird im Code durch den API-Aufruf der Bibliotheksbaustein-Instanz RaiseEvent ausgelöst, wobei eine Alarm-ID übergeben wird. Jeder Alarm hat eine eindeutige ID. Diese kann im Code als Variable verwendet werden und dient somit als Übergabevariable.

Konkret ist die AlarmID-Variable ein Enum nach folgendem Schema:

Alm_<Name der Alarmgruppe>_ IDs.ID_<konfigurierte ID>

Prozedur. Schritt für Schritt
  1. Setzen Sie den Cursor an die Programmstelle, an der der Funktionsbaustein-Aufruf stattfinden soll.

  2. Geben Sie „AlarmManager“ gefolgt von einem Punkt ein.

  3. Wählen Sie AlarmGlobals und geben Sie einen Punkt ein.

    Es öffnet sich ein Fenster mit einer Liste aller einfügbaren Elemente (Funktionalität „Komponenten auflisten“).

    _cds_img_autocomplete_alarms.png
  4. Fügen Sie in der gleichen Weise die Elemente g_AlarmHandler und RaiseEvent ein.

    Sie erhalten folgende Zeile: Alarmmanager.AlarmGlobals.g_AlarmHandler.RaiseEvent.

  5. Legen Sie nun die Übergabevariablen AlarmGroup_ID und Alarm_ID fest. Dazu geben Sie eine öffnende Klammer ein.

    Es erscheint ein Tooltip mit Informationen zu den Übergabevariablen

  6. Drücken Sie F2.

    Es öffnet sich die Eingabehilfe.

  7. Wählen Sie in der Registerkarte Kategorien (_3_r.png ) die Kategorie Variablen (_4_r.png).

    Eingabehilfe

    _cds_img_input_assistant_alarms.png
  8. Wählen Sie die gewünschte Alarmgruppen-ID-Variable (_1_r.png) aus.

    Die Variable wird in die Programmzeile übernommen.

  9. Geben Sie ein Komma ein und fügen Sie mit Unterstützung der Eingabehilfe die gewünschte Alarm-ID-Variable (_2_r.png) ein. Geben Sie eine schließende Klammer und einen Strichpunkt ein.

    Sie erhalten folgende Programmzeile:

    Alarmmanager.AlarmGlobals.g_AlarmHandler.RaiseEvent(Alm_AlarmConfiguration_Alarmgroup_IDs.ID_AlarmGroup1, Alm_AlarmGroup1_Alarm_IDs.ID_0);

    Dieser Code löst den Alarm ID_0 in der Alarmgruppe AlarmGroup1 aus.

Ereignis per Alarminstanz auslösen

Dies ist insbesondere für Bibliotheksentwickler relevant.

Wichtig

Wenn Sie die Variablen eines benutzerdefinierten Typs (Funktionsbaustein oder Struktur) überwachen und dafür ein Ereignis für diesen Programmierbaustein definieren möchten, sollten Sie dies am besten in einer Alarmgruppenvorlage tun.

Von Vorteil ist, dass sowohl der Programmierbaustein als auch die Alarmgruppenvorlage Teil einer Entwicklungsbibliothek werden können.

Alarm mit Typ Ereignis (API) definieren

  1. Legen Sie unter Ihrer Applikation die Alarmgruppenvorlage AGT_0 an.

  2. Definieren Sie in der Alarmgruppenvorlage einen Alarm des Überwachungstyps Ereignis (API).

  3. Wählen Sie in der Spalte Klasse die Alarmklasse Error und geben Sie unter Nachricht die gewünschte Alarmmeldung an.

Der Alarm ID_0, der per API auf ein Ereignis hin auslösen soll, ist definiert.

Ein solcher Alarm kann mit einer in der Auswahlliste angegebenen Alarmklasse und Bestätigungsmethode definiert werden. Die Angabe von Details entfällt.

API-Aufruf implementieren

Ein Ereignis eines Instanzalarms wird durch den API-Aufruf der Bibliotheksbaustein-Instanz RaiseEventAlarmInstance oder alternativ durch RaiseEventAlarmInstanceByName ausgelöst.

Prozedur. Schritt für Schritt
  1. Implementieren Sie den Funktionsbaustein FB_MyAlarm mit der Methoden METH_RaiseEvent.

    1. Selektieren Sie den Applikationsknoten und wählen Sie den Befehl Objekt hinzufügenPOU.

    2. Konfigurieren Sie die POU wie folgt: Name FB_MyAlarm, Typ Funktionsbaustein, Implementierungssprache ST.

    3. Deklarieren Sie die Eingangsvariable.

      Deklaration:

      FUNCTION_BLOCK FB_MyAlarm
      VAR_INPUT
          xCondition : BOOL;
      END_VAR
      VAR_OUTPUT
      END_VAR
      VAR
      END_VAR
    4. Selektieren Sie den Baustein und fügen Sie die Methode METH_RaiseEvent hinzu.

    5. Öffnen Sie den ST-Editor der Methode METH_RaiseEvent und programmieren Sie den Bibliotheksaufruf.

      Tipp

      Lassen Sie sich von der Eingabehilfe (F2) unterstützen.

      Dieser Code aktiviert den Alarm ID_0 aus der Alarmgruppenvorlage AGT_0.

      METHOD RaiseEvent : BOOL
      VAR_INPUT
      END_VAR
      Alarmmanager.AlarmGlobals.g_AlarmHandler.RaiseEventAlarmInstance(THIS, Alm_AGT_0_Alarm_IDs.ID_0);
  2. Instanzieren Sie den Funktionsbaustein in der Alarmgruppenvorlage.

    1. Öffnen Sie den Editor von AGT_0 und klicken Sie in der Zeile Typ für Alarmdefinition auf die Drei-Punkt-Schaltfläche.

      Die Einhabehilfe öffnet sich.

    2. Wählen Sie unter Application den Funktionsbaustein FB_MyAlarm aus.

    Die Alarmdefinition ist instanziert.

  3. Implementieren Sie den API-Aufruf im IEC-Code.

    Deklaration

    PROGRAM PLC_PRG
    VAR
        // Alarm Instances
        myInst : FB_MyAlarm;
        myInst2 : FB_MyAlarm;
    END_VAR

    Implementierung

    Alarmmanager.AlarmGlobals.g_AlarmHandler.RaiseEventAlarmInstance(ADR(myInst), Alm_AGT_0_Alarm_IDs.ID_0); 
    Alarmmanager.AlarmGlobals.g_AlarmHandler.RaiseEventAlarmInstanceByName(ADR(myInst2), Alm_AGT_0_Alarm_IDs.ID_0, 'AGT_0');