FUNCTION_BLOCK CMD_MONITOR
VAR_INPUT AUTO_CMD : BOOL ; (* Automated command *)
AUTO_MODE : BOOL ; (* AUTO_CMD enable *)
MAN_CMD : BOOL ; (* Manual Command *)
MAN_CMD_CHK : BOOL ; (* Negated MAN_CMD to debounce *)
T_CMD_MAX : TIME ; (* Max time from CMD to FDBK *)
FDBK : BOOL ; (* Confirmation of CMD completion
by operative unit *)
ACK : BOOL ; (* Acknowledge/cancel ALRM *)
END_VAR
VAR_OUTPUT CMD : BOOL ; (* Command to operative unit *)
ALRM : BOOL ; (* T_CMD_MAX expired without FDBK *)
END_VAR
VAR CMD_TMR : TON ; (* CMD-to-FDBK timer *)
ALRM_FF : SR ; (* Note over-riding S input: *)
END_VAR (* Command must be cancelled before
"ACK" can cancel alarm *)
(* Function Block Body *)
LD T_CMD_MAX
ST CMD_TMR.PT (* Store an input to the TON FB *)
LD AUTO_CMD
AND AUTO_MODE
OR( MAN_CMD
ANDN AUTO_MODE
ANDN MAN_CMD_CHK
)
ST CMD
IN CMD_TMR (* Invoke the TON FB *)
LD CMD_TMR.Q
ANDN FDBK
ST ALRM_FF.S1 (* Store an input to the SR FB *)
LD ACK
R ALRM_FF (* Invoke the SR FB *)
LD ALRM_FF.Q1
ST ALRM
END_FUNCTION_BLOCK