View difference between Paste ID: afuR1Ub8 and wy71Neqa
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;