|
1 PROGRAM GRAVEL (* Gravel measurement and loading system *) |
|
2 VAR_INPUT |
|
3 OFF_PB : BOOL ; |
|
4 ON_PB : BOOL ; |
|
5 FILL_PB : BOOL ; |
|
6 SIREN_ACK : BOOL ; |
|
7 LOAD_PB : BOOL ; (* Load truck from bin *) |
|
8 JOG_PB : BOOL ; |
|
9 LAMP_TEST : BOOL ; |
|
10 TRUCK_ON_RAMP : BOOL ; (* Optical sensor *) |
|
11 SILO_EMPTY_LS : BOOL ; |
|
12 BIN_EMPTY_LS : BOOL ; |
|
13 SETPOINT : BYTE ; (* 2-digit BCD *) |
|
14 END_VAR |
|
15 VAR_OUTPUT |
|
16 CONTROL_LAMP : BOOL ; |
|
17 TRUCK_LAMP : BOOL ; |
|
18 SILO_EMPTY_LAMP : BOOL ; |
|
19 CONVEYOR_LAMP : BOOL ; |
|
20 CONVEYOR_MOTOR : BOOL ; |
|
21 SILO_VALVE : BOOL ; |
|
22 BIN_VALVE : BOOL ; |
|
23 SIREN : BOOL ; |
|
24 BIN_LEVEL : BYTE ; |
|
25 END_VAR |
|
26 VAR |
|
27 BLINK_TIME : TIME; (* BLINK ON/OFF time *) |
|
28 PULSE_TIME : TIME; (* LEVEL_CTR increment interval *) |
|
29 RUNOUT_TIME: TIME; (* Conveyor running time after loading *) |
|
30 RUN_IN_TIME: TIME; (* Conveyor running time before loading *) |
|
31 SILENT_TIME: TIME; (* Siren silent time after SIREN_ACK *) |
|
32 OK_TO_RUN : BOOL; (* 1 = Conveyor is allowed to run *) |
|
33 (* Function Blocks *) |
|
34 BLINK: TON; (* Blinker OFF period timer / ON output *) |
|
35 BLANK: TON; (* Blinker ON period timer / blanking pulse *) |
|
36 PULSE: TON; (* LEVEL_CTR pulse interval timer *) |
|
37 SIREN_FF: RS; |
|
38 SILENCE_TMR: TP; (* Siren silent period timer *) |
|
39 END_VAR |
|
40 VAR RETAIN LEVEL_CTR : CTU ; END_VAR |
|
41 (* Program body *) |
|
42 (* Major operating states *) |
|
43 INITIAL_STEP START : END_STEP |
|
44 TRANSITION FROM START TO FILL_BIN |
|
45 := FILL_PB & CONTROL.X ; END_TRANSITION |
|
46 STEP FILL_BIN: SILO_VALVE(N); END_STEP |
|
47 TRANSITION FROM FILL_BIN TO START |
|
48 := NOT FILL_PB OR NOT CONTROL.X ; END_TRANSITION |
|
49 TRANSITION FROM FILL_BIN TO LOAD_WAIT := LEVEL_CTR.Q ; |
|
50 END_TRANSITION |
|
51 STEP LOAD_WAIT : END_STEP |
|
52 TRANSITION FROM LOAD_WAIT TO RUN_IN |
|
53 := LOAD_PB & OK_TO_RUN ; END_TRANSITION |
|
54 STEP RUN_IN : END_STEP |
|
55 TRANSITION FROM RUN_IN TO LOAD_WAIT := NOT OK_TO_RUN ; |
|
56 END_TRANSITION |
|
57 TRANSITION FROM RUN_IN TO DUMP_BIN |
|
58 := RUN_IN.T > RUN_IN_TIME; |
|
59 END_TRANSITION |
|
60 STEP DUMP_BIN: BIN_VALVE(N); END_STEP |
|
61 TRANSITION FROM DUMP_BIN TO LOAD_WAIT := NOT OK_TO_RUN ; |
|
62 END_TRANSITION |
|
63 TRANSITION FROM DUMP_BIN TO RUNOUT := BIN_EMPTY_LS ; |
|
64 END_TRANSITION |
|
65 STEP RUNOUT : END_STEP |
|
66 TRANSITION FROM RUNOUT TO LOAD_WAIT := NOT OK_TO_RUN ; |
|
67 END_TRANSITION |
|
68 TRANSITION FROM RUNOUT TO START |
|
69 := RUNOUT.T >= RUNOUT_TIME ; END_TRANSITION |
|
70 (* Control state sequencing *) |
|
71 INITIAL_STEP CONTROL_OFF: END_STEP |
|
72 TRANSITION FROM CONTROL_OFF TO CONTROL |
|
73 := ON_PB & NOT OFF_PB ; END_TRANSITION |
|
74 STEP CONTROL: CONTROL_ACTION(N); END_STEP |
|
75 ACTION CONTROL_ACTION: |
|
76 BLINK(EN:=CONTROL.X & NOT BLANK.Q, PT := BLINK_TIME) ; |
|
77 BLANK(EN:=BLINK.Q, PT := BLINK_TIME) ; |
|
78 OK_TO_RUN := CONTROL.X & TRUCK_ON_RAMP ; |
|
79 CONVEYOR_MOTOR := |
|
80 OK_TO_RUN & OR(JOG_PB, RUN_IN.X, DUMP_BIN.X, RUNOUT.X); |
|
81 END_ACTION |
|
82 TRANSITION FROM CONTROL TO CONTROL_OFF := OFF_PB ; |
|
83 END_TRANSITION |
|
84 (* Monitor Logic *) |
|
85 INITIAL_STEP MONITOR: MONITOR_ACTION(N); END_STEP |
|
86 ACTION MONITOR_ACTION: |
|
87 CONVEYOR_LAMP := CONVEYOR_MOTOR & BLINK.Q ; |
|
88 CONTROL_LAMP := CONTROL.X OR LAMP_TEST ; |
|
89 TRUCK_LAMP := TRUCK_ON_RAMP OR LAMP_TEST ; |
|
90 SILO_EMPTY_LAMP := BLINK.Q & SILO_EMPTY_LS OR LAMP_TEST ; |
|
91 SILENCE_TMR(IN:=SIREN_ACK, PT:=SILENT_TIME) ; |
|
92 SIREN_FF(S:=SILO_EMPTY_LS, R1:=SILENCE_TMR.Q) ; |
|
93 SIREN := SIREN_FF.Q1 ; |
|
94 PULSE(IN:=FILL_BIN.X & NOT PULSE.Q, PT:=PULSE_TIME) ; |
|
95 LEVEL_CTR(R := BIN_EMPTY_LS, CU := PULSE.Q, |
|
96 PV := BCD_TO_INT(SETPOINT)) ; |
|
97 BIN_LEVEL := INT_TO_BCD(LEVEL_CTR.CV) ; |
|
98 END_ACTION |
|
99 |
|
100 END_PROGRAM |
|
101 |
|
102 CONFIGURATION GRAVEL_CONTROL |
|
103 RESOURCE PROC1 ON PROC_TYPE_Y |
|
104 PROGRAM G : GRAVEL |
|
105 (* Inputs *) |
|
106 (OFF_PB := %I0.0 , |
|
107 ON_PB := %I0.1 , |
|
108 FILL_PB := %I0.2 , |
|
109 SIREN_ACK := %I0.3 , |
|
110 LOAD_PB := %I0.4 , |
|
111 JOG_PB := %I0.5 , |
|
112 LAMP_TEST := %I0.7 , |
|
113 TRUCK_ON_RAMP := %I1.4 , |
|
114 SILO_EMPTY_LS := %I1.5 , |
|
115 BIN_EMPTY_LS := %I1.6 , |
|
116 SETPOINT := %IB2 , |
|
117 (* Outputs *) |
|
118 CONTROL_LAMP => %Q4.0, |
|
119 TRUCK_LAMP => %Q4.2, |
|
120 SILO_EMPTY_LAMP => %Q4.3, |
|
121 CONVEYOR_LAMP => %Q5.3, |
|
122 CONVEYOR_MOTOR => %Q5.4, |
|
123 SILO_VALVE => %Q5.5, |
|
124 BIN_VALVE => %Q5.6, |
|
125 SIREN => %Q5.7, |
|
126 BIN_LEVEL => %B6) ; |
|
127 END_RESOURCE |
|
128 END_CONFIGURATION |
|
129 |