|
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 |