now the class is defined here and not in Event config file. CfgEvent.Flags := TCEVENTFLAG_LOG OR TCEVENTFLAG_SRCID; CfgEvent.StreamType := TCEVENTSTREAM_SIMPLE; CfgEvent.ProgId := 'TcEventFormatter.TcXmlFormatter'; CfgEvent.SourceId := SourceId; CfgEvent.Class := Class ; CfgEvent.bQuitRequired := QuitRequired; FOR idx := ARRAY_LBOUND TO ARRAY_UBOUND BY 1 DO CfgEvent.Id := idx; event[idx](NETID:='', PORT:=110, Event:=FALSE , EventQuit:=FALSE, EventConfigData:=CfgEvent, FbCleanup:=FALSE, TMOUT:=t#1s); END_FOR; State := STATE_IDLE; STATE_IDLE: (* nothing to do *) IF nMsgHasChanged = 0 AND NOT QuitRequired AND bReady = TRUE AND NOT RT_Init.Q THEN RETURN; END_IF IF adrAlarmArray <> 0 THEN ptAlarm := adrAlarmArray; IF CfgEvent.bQuitRequired AND adrQuitArray <> 0 THEN ptQuit := adrQuitArray; FOR idx := ARRAY_LBOUND TO ARRAY_UBOUND BY 1 DO event[idx](Event:=ptAlarm^, EventQuit:=ptQuit^); ptAlarm := ptAlarm + 1; ptQuit := ptQuit + 1; END_FOR; bReady := TRUE; ELSE bReady := TRUE; FOR idx := ARRAY_LBOUND TO ARRAY_UBOUND BY 1 DO event[idx](Event:=ptAlarm^); IF (NOT (ptAlarm^ = TRUE AND event[idx].Event = TRUE (* event is set/on *) AND event[idx].Quit = FALSE AND event[idx].EventState = TCEVENTSTATE_SIGNALED) AND NOT (ptAlarm^ = FALSE AND event[idx].Event = FALSE (* event is reset/off *) AND event[idx].Quit = TRUE AND event[idx].EventState = TCEVENTSTATE_INVALID)) THEN bReady := FALSE; END_IF ptAlarm := ptAlarm + 1; END_FOR; (* copy the status *) IF bReady THEN MEMCPY(ADR(bEvtState), adrAlarmArray, SIZEOF(bEvtState)); END_IF END_IF END_IF IF RT_Init.Q THEN Busy := TRUE; State := STATE_RESET_EVENT; END_IF STATE_RESET_EVENT:(*---------------------------------- clear messages ----------------------------------------*) FOR idx := ARRAY_LBOUND TO ARRAY_UBOUND BY 1 DO IF event[idx].EventState = TCEVENTSTATE_SIGNALED THEN event[idx](Event:=FALSE, EventQuit:= FALSE, FbCleanup:= FALSE, TMOUT:= t#1s); IF event[idx].Err THEN Err := TRUE; ErrId := event[idx].ErrId; IF event[idx].ErrId = 1282 THEN (* Message Router: mailbox full *) event[idx](Event:=FALSE, EventQuit:= FALSE, FbCleanup:= FALSE); RETURN; END_IF END_IF END_IF; END_FOR; State := STATE_QUIT_EVENT; STATE_QUIT_EVENT:(*---------------------------------- quit messages ----------------------------------------*) FOR idx := ARRAY_LBOUND TO ARRAY_UBOUND BY 1 DO IF event[idx].EventState = TCEVENTSTATE_SIGNALED THEN event[idx](Event:=FALSE, EventQuit:= TRUE, FbCleanup:= FALSE, TMOUT:= t#1s); IF event[idx].Err THEN Err := TRUE; ErrId := event[idx].ErrId; IF event[idx].ErrId = 1282 THEN (* Message Router: mailbox full *) event[idx](Event:=FALSE, EventQuit:= FALSE, FbCleanup:= FALSE); RETURN; END_IF END_IF END_IF; END_FOR; State := STATE_RESET_END; STATE_RESET_END: bWait := FALSE; FOR idx := ARRAY_LBOUND TO ARRAY_UBOUND BY 1 DO event[idx](Event:=FALSE, EventQuit:= FALSE, FbCleanup:= FALSE); IF event[idx].EventState = TCEVENTSTATE_SIGNALED THEN bWait := TRUE; END_IF END_FOR; IF NOT bWait THEN State := STATE_INIT; END_IF END_CASE]]>