SHOW:
|
|
- or go back to the newest paste.
1 | - | CASE #eAutomatic OF |
1 | + | // Mainstate |
2 | - | #eInitState: // Statement section case #eInitState |
2 | + | |
3 | CASE #e_CurrentState OF | |
4 | ||
5 | - | #q_Error := 0; |
5 | + | #State_Idle: // Statement section case Idle |
6 | #q_ArmIn := 1; | |
7 | - | #eErrorState := 0; |
7 | + | |
8 | - | IF #ePackageCount > 0 THEN |
8 | + | |
9 | - | #eAutomatic := #eConveyorOn; |
9 | + | #q_ConveyerFront := 0; |
10 | - | ELSIF #ePackageCount < 0 THEN |
10 | + | #e_Q1State := #Light_Flash; |
11 | - | #ePackageCount := 0; |
11 | + | #e_Q2State := #Light_Off; |
12 | IF #i_StartButton AND NOT #i_AutoManualSwitch AND #i_EmergencyButton THEN | |
13 | - | #eAutomatic := #eConveyorOff; |
13 | + | #e_CurrentState := #State_Automatic; // Statement section IF |
14 | ELSIF #i_StartButton AND #i_AutoManualSwitch AND #i_EmergencyButton THEN | |
15 | #e_CurrentState := #State_Manual; | |
16 | - | #eConveyorOff: // Statement section case #eConveyorOff |
16 | + | END_IF; |
17 | - | IF #Blink THEN |
17 | + | |
18 | - | #eTimer(IN := NOT #eTimer.Q, |
18 | + | #State_Automatic: // Statement section case Automatic |
19 | #e_Q1State := #Light_On; | |
20 | - | IF #eTimer.Q THEN |
20 | + | #e_Q2State := #Light_Off; |
21 | - | #Blink := 0; |
21 | + | #q_StartLight := 1; |
22 | - | #q_ConveyerFront := #Blink; |
22 | + | "Automatic_DB"(i_ConveyerInSensor:="SensorStartCoveyer", |
23 | - | #q_ConveyerBack := #Blink; |
23 | + | i_ConveyerOutsensor:="SensorEndConveyer", |
24 | i_PuckSensor:="SensorCheckPuck", | |
25 | - | ELSIF NOT #i_ConveyerInSensor AND #SensorOnOld THEN |
25 | + | i_MetalSensor:="SensorMetal", |
26 | - | #SensorOn := 1; |
26 | + | i_ArmSensor:="SensorCheckArm", |
27 | - | #SensorOnOld := 0; |
27 | + | i_BinSensor:="SensorBin", |
28 | - | #eAutomatic := #eConveyorOn; |
28 | + | q_ConveyerFront=>#q_ConveyerFront, |
29 | - | ELSIF #ePackageCount > 0 THEN |
29 | + | q_ConveyerBack=>#q_ConveyerBack, |
30 | - | #eAutomatic := #eConveyorOn; |
30 | + | q_ArmIn=>#q_ArmIn, |
31 | q_ArmOut=>#q_ArmOut, | |
32 | q_ErrorState=>#JunkTemp, | |
33 | - | #eConveyorOn: // Statement section case #eConveyorOn |
33 | + | q_ErrorFound=>#i_ErrorFound); |
34 | ||
35 | ||
36 | - | #Blink := 1; |
36 | + | IF NOT #i_StopButton AND #i_EmergencyButton THEN |
37 | - | IF NOT #i_ConveyerInSensor AND #SensorOnOld THEN |
37 | + | #q_StartLight := 0; |
38 | - | #SensorOn := 1; |
38 | + | #e_CurrentState := #State_Idle;// Statement section IF |
39 | - | #SensorOnOld := 0; |
39 | + | ELSIF #i_ErrorFound AND #i_EmergencyButton THEN |
40 | #q_StartLight := 0; | |
41 | - | #eAutomatic := #eArmOut; |
41 | + | #e_CurrentState := #State_Error; |
42 | - | ELSIF NOT #i_ConveyerOutsensor AND #SensorOffOld THEN |
42 | + | ELSIF NOT #i_EmergencyButton THEN |
43 | - | #SensorOff := 1; |
43 | + | #q_StartLight := 0; |
44 | - | #SensorOffOld := 0; |
44 | + | #e_CurrentState := #State_Emergency; |
45 | - | ELSIF #ePackageCount < 0 THEN |
45 | + | END_IF; |
46 | - | #ePackageCount := 0; |
46 | + | |
47 | - | #eAutomatic := #eErrorFound; |
47 | + | #State_Manual: // Statement section case Manual |
48 | #e_Q1State := #Light_Off; | |
49 | #e_Q2State := #Light_On; | |
50 | - | #eArmOut: // Statement section case #eArmOut |
50 | + | #q_StartLight := 1; |
51 | ||
52 | IF NOT #i_StopButton AND #i_EmergencyButton THEN | |
53 | - | IF NOT #i_ConveyerInSensor AND #SensorOnOld THEN |
53 | + | #q_StartLight := 0; |
54 | - | #SensorOn := 1; |
54 | + | #e_CurrentState := #State_Idle;// Statement section IF |
55 | - | #SensorOnOld := 0; |
55 | + | ELSIF NOT #i_EmergencyButton THEN |
56 | - | ELSIF NOT #i_BinSensor AND #SensorBinOld THEN |
56 | + | #q_StartLight := 0; |
57 | - | #SensorBin := 1; |
57 | + | #e_CurrentState := #State_Emergency; |
58 | - | #SensorBinOld := 0; |
58 | + | END_IF; |
59 | - | #eAutomatic := #eArmIn; |
59 | + | |
60 | #State_Error: // Statement section case Error | |
61 | - | #eErrorState := #ePuckMissing; |
61 | + | #e_Q1State := #Light_Off; |
62 | - | #eAutomatic := #eErrorFound; |
62 | + | #e_Q2State := #Light_Flash; |
63 | #q_ResetLight := 1; | |
64 | ||
65 | - | #eArmIn: // Statement section case #eArmIn |
65 | + | IF NOT #i_EmergencyButton THEN |
66 | #q_ResetLight := 0; | |
67 | #e_CurrentState := #State_Emergency; | |
68 | - | IF NOT #i_ConveyerInSensor AND #SensorOnOld THEN |
68 | + | ELSIF #i_ResetButton AND #i_EmergencyButton THEN |
69 | - | #SensorOn := 1; |
69 | + | #q_ResetLight := 0; |
70 | - | #SensorOnOld := 0; |
70 | + | #e_CurrentState := #State_Automatic; |
71 | - | ELSIF NOT "SensorBin" AND NOT #Binfull THEN |
71 | + | END_IF; |
72 | - | #Binfull := 1; |
72 | + | |
73 | - | ELSIF #ePackageCount = 0 THEN |
73 | + | #State_Emergency: // Statement section case Emergency |
74 | - | #eAutomatic := #eConveyorOff; |
74 | + | |
75 | - | ELSIF #ePackageCount > 0 THEN |
75 | + | |
76 | - | #eAutomatic := #eConveyorOn; |
76 | + | |
77 | #q_ConveyerFront := 0; | |
78 | #e_Q1State := #Light_Flash; | |
79 | - | #eErrorFound: // Statement section case #eErrorFound |
79 | + | #e_Q2State := #Light_Flash; |
80 | - | #eAutomatic := #eInitState; |
80 | + | #q_ResetLight := 1; |
81 | - | #q_Error := 1; |
81 | + | IF #i_EmergencyButton AND #i_ResetButton THEN |
82 | - | #q_ErrorState := #eErrorState; |
82 | + | #q_ResetLight := 0; |
83 | #e_CurrentState := #State_Idle; | |
84 | END_IF; | |
85 | ||
86 | - | IF #Binfull THEN |
86 | + | #State_Initial: // Statement section case Init |
87 | - | #eTimer(IN := NOT #eTimer.Q, |
87 | + | IF #e_CurrentState = #State_Initial THEN |
88 | #e_CurrentState := #State_Idle; // Statement section IF | |
89 | END_IF; | |
90 | - | IF #eTimer.Q AND NOT #i_BinSensor THEN |
90 | + | |
91 | - | #Binfull := 0; |
91 | + | |
92 | - | #eErrorState := #eBinFull; |
92 | + | CASE #e_Q1State OF |
93 | - | #eAutomatic := #eErrorFound; |
93 | + | #Light_Off: |
94 | - | ELSIF #eTimer.Q AND #i_BinSensor THEN |
94 | + | #q_LightQ1 := FALSE; |
95 | - | #Binfull := 0; |
95 | + | #Light_On: |
96 | - | #eAutomatic := #eConveyorOff; |
96 | + | #q_LightQ1 := TRUE; |
97 | #Light_Flash: | |
98 | #e_FlashTimer(IN := NOT #e_FlashTimer.Q, | |
99 | PT := T#500MS); | |
100 | - | IF #SensorOff AND #i_ConveyerOutsensor THEN |
100 | + | |
101 | - | #ePackageCount := #ePackageCount - 1; |
101 | + | IF #e_FlashTimer.Q THEN |
102 | - | #SensorOff := 0; |
102 | + | #e_LightState := NOT #e_LightState; |
103 | - | #SensorOffOld := 1; |
103 | + | END_IF; |
104 | - | IF #ePackageCount = 0 THEN |
104 | + | #q_LightQ1 := #e_LightState; |
105 | - | #eAutomatic := #eConveyorOff; |
105 | + | |
106 | ||
107 | - | ELSIF NOT #SensorOff AND NOT #SensorOffOld THEN |
107 | + | CASE #e_Q2State OF |
108 | - | #SensorOff := 0; |
108 | + | #Light_Off: |
109 | - | #SensorOffOld := 1; |
109 | + | #q_LightQ2 := FALSE; |
110 | #Light_On: | |
111 | #q_LightQ2 := TRUE; | |
112 | - | IF #SensorBin AND #i_BinSensor THEN |
112 | + | #Light_Flash: |
113 | - | #ePackageCount := #ePackageCount - 1; |
113 | + | #e_FlashTimer(IN := NOT #e_FlashTimer.Q, |
114 | - | #SensorBin := 0; |
114 | + | PT := T#500MS); |
115 | - | #SensorBinOld := 1; |
115 | + | |
116 | - | ELSIF NOT #SensorBin AND NOT #SensorBinOld THEN |
116 | + | IF #e_FlashTimer.Q THEN |
117 | - | #SensorBin := 0; |
117 | + | #e_LightState := NOT #e_LightState; |
118 | - | #SensorBinOld := 1; |
118 | + | END_IF; |
119 | #q_LightQ2 := #e_LightState; | |
120 | END_CASE; | |
121 | - | IF #SensorOn AND #i_ConveyerInSensor THEN |
121 | + | |
122 | - | #ePackageCount := #ePackageCount + 1; |
122 | + | // Automatic |
123 | - | #SensorOn := 0; |
123 | + | |
124 | - | #SensorOnOld := 1; |
124 | + | CASE #e_ProgramState OF |
125 | - | ELSIF NOT #SensorOn AND NOT #SensorOnOld THEN |
125 | + | #InitState: // Statement section case #eInitState |
126 | - | #SensorOnOld := 1; |
126 | + | |
127 | - | #Blink := 0; |
127 | + | |
128 | - | #Binfull := 0; |
128 | + | #q_ErrorFound := 0; |
129 | - | END_IF; |
129 | + | |
130 | #e_ErrorState := 0; | |
131 | IF #e_PackageCount > 0 THEN | |
132 | #e_ProgramState := #ConveyorOn; | |
133 | ELSIF #e_PackageCount < 0 THEN | |
134 | #e_PackageCount := 0; | |
135 | ELSE | |
136 | #e_ProgramState := #ConveyorOff; | |
137 | END_IF | |
138 | ; | |
139 | #ConveyorOff: // Statement section case #eConveyorOff | |
140 | IF #t_Blink THEN | |
141 | #e_Timer(IN := NOT #e_Timer.Q, | |
142 | PT := T#1000MS); | |
143 | IF #e_Timer.Q THEN | |
144 | #t_Blink := 0; | |
145 | #q_ConveyerFront := #t_Blink; | |
146 | #q_ConveyerBack := #t_Blink; | |
147 | END_IF; | |
148 | ELSIF NOT #i_ConveyerInSensor AND #t_SensorOnOld THEN | |
149 | #t_SensorOn := 1; | |
150 | #t_SensorOnOld := 0; | |
151 | #e_ProgramState := #ConveyorOn; | |
152 | ELSIF #e_PackageCount > 0 THEN | |
153 | #e_ProgramState := #ConveyorOn; | |
154 | END_IF | |
155 | ; | |
156 | #ConveyorOn: // Statement section case #eConveyorOn | |
157 | #q_ConveyerFront := 1; | |
158 | #q_ConveyerBack := 0; | |
159 | #t_Blink := 1; | |
160 | IF NOT #i_ConveyerInSensor AND #t_SensorOnOld THEN | |
161 | #t_SensorOn := 1; | |
162 | #t_SensorOnOld := 0; | |
163 | ELSIF #i_MetalSensor THEN | |
164 | #e_ProgramState := #ArmOut; | |
165 | ELSIF NOT #i_ConveyerOutsensor AND #t_SensorOffOld THEN | |
166 | #t_SensorOff := 1; | |
167 | #t_SensorOffOld := 0; | |
168 | ELSIF #e_PackageCount < 0 THEN | |
169 | #e_PackageCount := 0; | |
170 | #e_ProgramState := #ErrorFound; | |
171 | END_IF | |
172 | ; | |
173 | #ArmOut: // Statement section case #eArmOut | |
174 | #q_ArmIn := 0; | |
175 | #q_ArmOut := 1; | |
176 | IF NOT #i_ConveyerInSensor AND #t_SensorOnOld THEN | |
177 | #t_SensorOn := 1; | |
178 | #t_SensorOnOld := 0; | |
179 | ELSIF NOT #i_BinSensor AND #t_SensorBinOld THEN | |
180 | #t_SensorBin := 1; | |
181 | #t_SensorBinOld := 0; | |
182 | #e_ProgramState := #ArmIn; | |
183 | ELSIF NOT #i_ConveyerOutsensor THEN | |
184 | #e_ErrorState := #PuckMissing; | |
185 | #e_ProgramState := #ErrorFound; | |
186 | END_IF | |
187 | ; | |
188 | #ArmIn: // Statement section case #eArmIn | |
189 | #q_ArmOut := 0; | |
190 | #q_ArmIn := 1; | |
191 | IF NOT #i_ConveyerInSensor AND #t_SensorOnOld THEN | |
192 | #t_SensorOn := 1; | |
193 | #t_SensorOnOld := 0; | |
194 | ELSIF NOT "SensorBin" AND NOT #t_Binfull THEN | |
195 | #t_Binfull := 1; | |
196 | ELSIF #e_PackageCount = 0 THEN | |
197 | #e_ProgramState := #ConveyorOff; | |
198 | ELSIF #e_PackageCount > 0 THEN | |
199 | #e_ProgramState := #ConveyorOn; | |
200 | END_IF | |
201 | ; | |
202 | #ErrorFound: // Statement section case #eErrorFound | |
203 | #e_ProgramState := #InitState; | |
204 | #q_ErrorFound := 1; | |
205 | #q_ErrorState := #e_ErrorState; | |
206 | ; | |
207 | END_CASE; | |
208 | ||
209 | IF #t_Binfull THEN | |
210 | #e_Timer(IN := NOT #e_Timer.Q, | |
211 | PT := T#1000MS); | |
212 | ||
213 | IF #e_Timer.Q AND NOT #i_BinSensor THEN | |
214 | #t_Binfull := 0; | |
215 | #e_ErrorState := #BinFull; | |
216 | #e_ProgramState := #ErrorFound; | |
217 | ELSIF #e_Timer.Q AND #i_BinSensor THEN | |
218 | #t_Binfull := 0; | |
219 | #e_ProgramState := #ConveyorOff; | |
220 | END_IF; | |
221 | END_IF; | |
222 | ||
223 | IF #t_SensorOff AND #i_ConveyerOutsensor THEN | |
224 | #e_PackageCount := #e_PackageCount - 1; | |
225 | #t_SensorOff := 0; | |
226 | #t_SensorOffOld := 1; | |
227 | IF #e_PackageCount = 0 THEN | |
228 | #e_ProgramState := #ConveyorOff; | |
229 | END_IF; | |
230 | ELSIF NOT #t_SensorOff AND NOT #t_SensorOffOld THEN | |
231 | #t_SensorOff := 0; | |
232 | #t_SensorOffOld := 1; | |
233 | END_IF; | |
234 | ||
235 | IF #t_SensorBin AND #i_BinSensor THEN | |
236 | #e_PackageCount := #e_PackageCount - 1; | |
237 | #t_SensorBin := 0; | |
238 | #t_SensorBinOld := 1; | |
239 | ELSIF NOT #t_SensorBin AND NOT #t_SensorBinOld THEN | |
240 | #t_SensorBin := 0; | |
241 | #t_SensorBinOld := 1; | |
242 | END_IF; | |
243 | ||
244 | IF #t_SensorOn AND #i_ConveyerInSensor THEN | |
245 | #e_PackageCount := #e_PackageCount + 1; | |
246 | #t_SensorOn := 0; | |
247 | #t_SensorOnOld := 1; | |
248 | ELSIF NOT #t_SensorOn AND NOT #t_SensorOnOld THEN | |
249 | #t_SensorOnOld := 1; | |
250 | #t_Blink := 0; | |
251 | #t_Binfull := 0; | |
252 | END_IF; | |
253 | ||
254 | //ErrorState | |
255 | ||
256 | CASE #i_ErrorState OF | |
257 | 1: // Statement section case 1 | |
258 | ; | |
259 | 2: // Statement section case 2 to 4 | |
260 | ; | |
261 | ELSE // Statement section ELSE | |
262 | ; | |
263 | END_CASE; |