0 THEN ptAlarm := adrAlarmArray; ptData := adrEventData; IF ptData <> 0 THEN sFormatString := '%d%s'; FOR idx := ARRAY_LBOUND TO ARRAY_UBOUND BY 1 DO event[idx].EventConfigData.DataFormatStrAddress := ADR(sFormatString); event[idx].EventConfigData.SourceId := SourceId; event[idx].EventDataAddress := ptData ; event[idx].EventDataLength := SIZEOF(stDummy); event[idx](); ptData := ptData + SIZEOF(stDummy); END_FOR END_IF 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; ELSE bReady := TRUE; FOR idx := ARRAY_LBOUND TO ARRAY_UBOUND BY 1 DO event[idx](Event:=ptAlarm^); ptAlarm := ptAlarm + 1; IF (NOT(event[idx].Event = TRUE (* event is set *) AND event[idx].Quit = FALSE AND event[idx].EventState = TCEVENTSTATE_SIGNALED) AND NOT(event[idx].Event = FALSE (* event is reset *) AND event[idx].Quit = TRUE AND event[idx].EventState = TCEVENTSTATE_INVALID)) THEN bReady := FALSE; END_IF 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]]>