效果:
源码:
复制代码- 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重新编辑 ]