效果:
源碼:
復制代碼- PROGRAM PLC_PRG
- VAR_INPUT
- 取料順序IN: INT:=1230;//每位數字小于等于3;
- 光柵: ARRAY[1..3] OF BOOL;
- 復位按鈕:BOOL;
- END_VAR
- VAR_OUTPUT
- 指示燈: ARRAY[1..3] OF BOOL;
- 報警:BOOL;
- END_VAR
- VAR
- 順序: ARRAY[1..4] OF INT;
- 順序tmp:INT:=0;
- 位置tmp:INT:=0;
- ii:INT:=0;
- 復位RT,光柵1RT,光柵2RT,光柵3RT: R_TRIG;
-
- END_VAR
|
復制代碼- 順序[1] := 取料順序IN/1000;
- 順序[2] := (取料順序IN/100)MOD 10;
- 順序[3] := (取料順序IN/10)MOD 10;
- 順序[4] := 取料順序IN MOD10;
- 復位RT(CLK:=復位按鈕,Q=>);
- 光柵1RT(CLK:=光柵[1],Q=>);
- 光柵2RT(CLK:=光柵[2],Q=>);
- 光柵3RT(CLK:=光柵[3],Q=>);
-
- IF復位RT.Q THEN
- ii:=0;
- 順序tmp:=0;
- 報警:=0;
- 指示燈[1]:=0;
- 指示燈[2]:=0;
- 指示燈[3]:=0;
- END_IF
-
- FOR ii:=1 TO 4 DO //順序循環
- IF報警 THEN
- EXIT;
- END_IF
-
- IF順序tmp>4 THEN
- 順序tmp:=0;
- END_IF
- IF順序tmp=0 THEN
- 順序tmp:=ii;
- END_IF
- 位置tmp:=順序[ii];
- IF位置tmp=0 THEN
- 順序tmp:=ii+1;
- EXIT;
- END_IF
- IFNOT 指示燈[1] AND NOT 指示燈[2] ANDNOT 指示燈[3] THEN
- IF順序tmp=ii THEN
- 指示燈[位置tmp]:=1;
- 順序tmp:=ii+1;
- END_IF
- ELSE
- EXIT;
- END_IF
- END_FOR
-
- IF 指示燈[1] THEN
- IF光柵1RT.Q THEN
- 指示燈[1]:=0;
- END_IF
- IF光柵2RT.Q OR 光柵3RT.Q THEN
- 報警:=1;
- END_IF
- END_IF
- IF 指示燈[2] THEN
- IF光柵2RT.Q THEN
- 指示燈[2]:=0;
- END_IF
- IF光柵1RT.Q OR 光柵3RT.Q THEN
- 報警:=1;
- END_IF
- END_IF
- IF 指示燈[3] THEN
- IF光柵3RT.Q THEN
- 指示燈[3]:=0;
- END_IF
- IF光柵1RT.Q OR 光柵2RT.Q THEN
- 報警:=1;
- END_IF
- END_IF
|
[ 此帖被es_ice在2024-07-23 09:03重新編輯 ]