AnnexF/fwd_rev_mon_st.txt
changeset 0 fb772792efd1
equal deleted inserted replaced
-1:000000000000 0:fb772792efd1
       
     1 FUNCTION_BLOCK FWD_REV_MON
       
     2 VAR_INPUT AUTO : BOOL ;(* Enable automated commands *)
       
     3   ACK : BOOL ;         (* Acknowledge/cancel all alarms *)
       
     4   AUTO_FWD : BOOL ;    (* Automated forward command *)
       
     5   MAN_FWD : BOOL ;     (* Manual forward command *)
       
     6   MAN_FWD_CHK : BOOL ; (* Negated MAN_FWD for debouncing *)
       
     7   T_FWD_MAX : TIME ;  (* Maximum time from FWD_CMD to FWD_FDBK *)
       
     8   FWD_FDBK : BOOL ;    (* Confirmation of FWD_CMD completion *)
       
     9                        (*   by operative unit *)
       
    10   AUTO_REV : BOOL ;    (* Automated reverse command *)
       
    11   MAN_REV : BOOL ;     (* Manual reverse command *)
       
    12   MAN_REV_CHK : BOOL ; (* Negated MAN_REV for debouncing *)
       
    13   T_REV_MAX : TIME ;  (* Maximum time from REV_CMD to REV_FDBK *)  
       
    14   REV_FDBK : BOOL ;    (* Confirmation of REV_CMD completion *)
       
    15 END_VAR                (*    by operative unit *)
       
    16 VAR_OUTPUT KLAXON : BOOL ;      (* Any alarm active *)
       
    17   FWD_REV_ALRM : BOOL; (* Forward/reverse command conflict *)
       
    18   FWD_CMD : BOOL ;     (* "Forward" command to operative unit *)
       
    19   FWD_ALRM : BOOL ;    (* T_FWD_MAX expired without FWD_FDBK *)
       
    20   REV_CMD : BOOL ;     (* "Reverse" command to operative unit *)
       
    21   REV_ALRM : BOOL ;    (* T_REV_MAX expired without REV_FDBK *)
       
    22 END_VAR
       
    23 VAR FWD_MON : CMD_MONITOR; (* "Forward" command monitor *)
       
    24   REV_MON : CMD_MONITOR;   (* "Reverse" command monitor *)
       
    25   FWD_REV_FF : SR ;      (* Forward/Reverse contention latch *)
       
    26 END_VAR
       
    27 (* Function Block body *)
       
    28 (* Evaluate internal function blocks *)
       
    29   FWD_MON    (AUTO_MODE   := AUTO,
       
    30               ACK         := ACK,
       
    31               AUTO_CMD    := AUTO_FWD,
       
    32               MAN_CMD     := MAN_FWD,
       
    33               MAN_CMD_CHK := MAN_FWD_CHK,
       
    34               T_CMD_MAX   := T_FWD_MAX,
       
    35               FDBK        := FWD_FDBK);
       
    36   REV_MON    (AUTO_MODE   := AUTO,
       
    37               ACK         := ACK,
       
    38               AUTO_CMD    := AUTO_REV,
       
    39               MAN_CMD     := MAN_REV,
       
    40               MAN_CMD_CHK := MAN_REV_CHK,
       
    41               T_CMD_MAX   := T_REV_MAX,
       
    42               FDBK        := REV_FDBK);
       
    43   FWD_REV_FF (S1 := FWD_MON.CMD & REV_MON.CMD, R := ACK); 
       
    44 (* Transfer data to outputs *)
       
    45   FWD_REV_ALRM := FWD_REV_FF.Q1;
       
    46   FWD_CMD := FWD_MON.CMD & NOT FWD_REV_ALRM;
       
    47   FWD_ALRM := FWD_MON.ALRM;
       
    48   REV_CMD := REV_MON.CMD & NOT FWD_REV_ALRM;
       
    49   REV_ALRM := REV_MON.ALRM;
       
    50   KLAXON := FWD_ALRM OR REV_ALRM OR FWD_REV_ALRM;
       
    51 
       
    52 END_FUNCTION_BLOCK
       
    53