AnnexF/fwd_rev_mon_st.txt
changeset 0 fb772792efd1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AnnexF/fwd_rev_mon_st.txt	Wed Jan 31 15:32:38 2007 +0100
@@ -0,0 +1,53 @@
+FUNCTION_BLOCK FWD_REV_MON
+VAR_INPUT AUTO : BOOL ;(* Enable automated commands *)
+  ACK : BOOL ;         (* Acknowledge/cancel all alarms *)
+  AUTO_FWD : BOOL ;    (* Automated forward command *)
+  MAN_FWD : BOOL ;     (* Manual forward command *)
+  MAN_FWD_CHK : BOOL ; (* Negated MAN_FWD for debouncing *)
+  T_FWD_MAX : TIME ;  (* Maximum time from FWD_CMD to FWD_FDBK *)
+  FWD_FDBK : BOOL ;    (* Confirmation of FWD_CMD completion *)
+                       (*   by operative unit *)
+  AUTO_REV : BOOL ;    (* Automated reverse command *)
+  MAN_REV : BOOL ;     (* Manual reverse command *)
+  MAN_REV_CHK : BOOL ; (* Negated MAN_REV for debouncing *)
+  T_REV_MAX : TIME ;  (* Maximum time from REV_CMD to REV_FDBK *)  
+  REV_FDBK : BOOL ;    (* Confirmation of REV_CMD completion *)
+END_VAR                (*    by operative unit *)
+VAR_OUTPUT KLAXON : BOOL ;      (* Any alarm active *)
+  FWD_REV_ALRM : BOOL; (* Forward/reverse command conflict *)
+  FWD_CMD : BOOL ;     (* "Forward" command to operative unit *)
+  FWD_ALRM : BOOL ;    (* T_FWD_MAX expired without FWD_FDBK *)
+  REV_CMD : BOOL ;     (* "Reverse" command to operative unit *)
+  REV_ALRM : BOOL ;    (* T_REV_MAX expired without REV_FDBK *)
+END_VAR
+VAR FWD_MON : CMD_MONITOR; (* "Forward" command monitor *)
+  REV_MON : CMD_MONITOR;   (* "Reverse" command monitor *)
+  FWD_REV_FF : SR ;      (* Forward/Reverse contention latch *)
+END_VAR
+(* Function Block body *)
+(* Evaluate internal function blocks *)
+  FWD_MON    (AUTO_MODE   := AUTO,
+              ACK         := ACK,
+              AUTO_CMD    := AUTO_FWD,
+              MAN_CMD     := MAN_FWD,
+              MAN_CMD_CHK := MAN_FWD_CHK,
+              T_CMD_MAX   := T_FWD_MAX,
+              FDBK        := FWD_FDBK);
+  REV_MON    (AUTO_MODE   := AUTO,
+              ACK         := ACK,
+              AUTO_CMD    := AUTO_REV,
+              MAN_CMD     := MAN_REV,
+              MAN_CMD_CHK := MAN_REV_CHK,
+              T_CMD_MAX   := T_REV_MAX,
+              FDBK        := REV_FDBK);
+  FWD_REV_FF (S1 := FWD_MON.CMD & REV_MON.CMD, R := ACK); 
+(* Transfer data to outputs *)
+  FWD_REV_ALRM := FWD_REV_FF.Q1;
+  FWD_CMD := FWD_MON.CMD & NOT FWD_REV_ALRM;
+  FWD_ALRM := FWD_MON.ALRM;
+  REV_CMD := REV_MON.CMD & NOT FWD_REV_ALRM;
+  REV_ALRM := REV_MON.ALRM;
+  KLAXON := FWD_ALRM OR REV_ALRM OR FWD_REV_ALRM;
+
+END_FUNCTION_BLOCK
+