EventLogger-Meldungen aus der SPS senden/quittieren

Das Beispiel zeigt die Verwendung des ADSLOGEVENT-Funktionsbausteins.

Die kompletten Sourcen der Beispielapplikation können hier entpackt werden: AdsLogEventExample.zip

Schrittweiser Ablauf

Konfigurieren eines Events:

Struktur EventConfigData parametrieren

Übergeben von Parametern:

Adresse auf eine Struktur, ein Array oder eine Einzelvariable mit ADR Operator an EventDataAddress anlegen. Länge der Struktur, des Array oder der Einzelvariablen mit SIZEOF Operator ermitteln und an Eingang EventDataLength anlegen. Soll z. B. eine Struktur mit einer INT und einer LREAL Variablen mit dem Event übergeben werden, so ist eine Struktur mit diesen beiden Komponenten zu erstellen und zu instanziieren. Die Adresse und die Länge dieser Instanz muss übergeben werden.

Setzen eines Events:

Steigende Flanke am Event-Eingang

Rücksetzen eines Events:

Fallende Flanke am Event-Eingang

Quittieren eines Events:

Steigende Flanke am Quit-Eingang

Komplettes Löschen der Instanz:

Mit der steigenden Flanke am Eingang FbCleanup wird der Inhalt der Instanz komplett gelöscht. Damit wird nicht unmittelbar ein bestehendes Event aus dem EventLogger gelöscht.

Nachdem ein Event an den EventLogger verschickt wurde, ändert sich der Status des Event sichtbar am Eventstate-Ausgang.

Aufruf des FBs ADSLOGEVENT

PROGRAM MAIN
VAR
    FB_Event1   : ADSLOGEVENT;
    CfgEvent    : TcEvent;
    Eventdata   : ParaStruct;
    EventState  : UDINT;
    bEvent      : BOOL;
    bQuit       : BOOL;         
END_VAR
VAR CONSTANT
    TCEventDataFormatString : STRING:='%f%d';
    TcEventTimeOut     : TIME:=T#1s;
END_VAR

EventLogger-Meldungen aus der SPS senden/quittieren 1:

Deklarationsteil

PROGRAM MAIN
VAR
    CfgEvent                : TcEvent;
    fbEvent                 : ADSLOGEVENT;
    bSetEvent               : BOOL;(* Rising edge sets event *)

    eventData               : ST_EventData;
    TcEventDataFormatString : STRING    := '%f%d';
END_VAR

Implementierung

CfgEvent.Class := TCEVENTCLASS_ALARM;
CfgEvent.Prio := 2;
CfgEvent.Id := 1;
CfgEvent.SourceId := 100;
CfgEvent.bQuitRequired := TRUE;
CfgEvent.DataFormatStrAddress := ADR(TcEventDataFormatString);
CfgEvent.Flags := TCEVENTFLAG_LOG OR TCEVENTFLAG_SRCID OR TCEVENTFLAG_AUTOFMTALL;
CfgEvent.StreamType := TCEVENTSTREAM_SIMPLE;
CfgEvent.ProgId :='TcEventFormatter.TcXMLFormatter' ;

eventData.rVal     := 2.65;
eventData.iVal    := 3;

fbEvent( NETID:= '',
        PORT:= 110,
        Event:= bSetEvent,
        EventConfigData:= CfgEvent,
        EventDataAddress := ADR(eventData) ,
        EventDataLength := SIZEOF(eventData),
        TMOUT:= t#3s);