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
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);