dgl4245123
非标自动化编程设计。。。17798956193
级别: 探索解密
精华主题: 0
发帖数量: 148 个
工控威望: 183 点
下载积分: 4979 分
在线时间: 104(小时)
注册时间: 2023-04-03
最后登录: 2024-12-12
查看dgl4245123的 主题 / 回贴
楼主  发表于: 2024-04-09 15:34
图片:
不要喷我,大部分人都搞不定!!!
非标自动化编程设计。。。17798956193
es_ice
级别: 探索解密
精华主题: 0
发帖数量: 96 个
工控威望: 124 点
下载积分: 1210 分
在线时间: 59(小时)
注册时间: 2023-08-07
最后登录: 2024-12-22
查看es_ice的 主题 / 回贴
1楼  发表于: 2024-07-23 08:52
效果:
  


源码:
复制代码
  1. PROGRAM PLC_PRG
  2. VAR_INPUT
  3. 取料顺序IN: INT:=1230;//每位数字小于等于3;
  4. 光栅: ARRAY[1..3] OF BOOL;
  5. 复位按钮:BOOL;
  6. END_VAR
  7. VAR_OUTPUT
  8. 指示灯: ARRAY[1..3] OF BOOL;
  9. 报警:BOOL;
  10. END_VAR
  11. VAR
  12. 顺序: ARRAY[1..4] OF INT;
  13. 顺序tmp:INT:=0;
  14. 位置tmp:INT:=0;
  15. ii:INT:=0;
  16. 复位RT,光栅1RT,光栅2RT,光栅3RT: R_TRIG;
  17. END_VAR


复制代码
  1. 顺序[1] := 取料顺序IN/1000;
  2. 顺序[2] := (取料顺序IN/100)MOD 10;
  3. 顺序[3] := (取料顺序IN/10)MOD 10;
  4. 顺序[4] := 取料顺序IN MOD10;
  5. 复位RT(CLK:=复位按钮,Q=>);
  6. 光栅1RT(CLK:=光栅[1],Q=>);
  7. 光栅2RT(CLK:=光栅[2],Q=>);
  8. 光栅3RT(CLK:=光栅[3],Q=>);
  9. IF复位RT.Q THEN
  10. ii:=0;
  11. 顺序tmp:=0;
  12. 报警:=0;
  13. 指示灯[1]:=0;
  14. 指示灯[2]:=0;
  15. 指示灯[3]:=0;
  16. END_IF
  17. FOR ii:=1 TO 4 DO //顺序循环
  18. IF报警 THEN
  19. EXIT;
  20. END_IF
  21. IF顺序tmp>4 THEN
  22. 顺序tmp:=0;
  23. END_IF
  24. IF顺序tmp=0 THEN
  25. 顺序tmp:=ii;
  26. END_IF
  27. 位置tmp:=顺序[ii];
  28. IF位置tmp=0 THEN
  29. 顺序tmp:=ii+1;
  30. EXIT;
  31. END_IF
  32. IFNOT 指示灯[1] AND NOT 指示灯[2] ANDNOT 指示灯[3] THEN
  33. IF顺序tmp=ii THEN
  34. 指示灯[位置tmp]:=1;
  35. 顺序tmp:=ii+1;
  36. END_IF
  37. ELSE
  38. EXIT;
  39. END_IF
  40. END_FOR
  41. IF 指示灯[1] THEN
  42. IF光栅1RT.Q THEN
  43. 指示灯[1]:=0;
  44. END_IF
  45. IF光栅2RT.Q OR 光栅3RT.Q THEN
  46. 报警:=1;
  47. END_IF
  48. END_IF
  49. IF 指示灯[2] THEN
  50. IF光栅2RT.Q THEN
  51. 指示灯[2]:=0;
  52. END_IF
  53. IF光栅1RT.Q OR 光栅3RT.Q THEN
  54. 报警:=1;
  55. END_IF
  56. END_IF
  57. IF 指示灯[3] THEN
  58. IF光栅3RT.Q THEN
  59. 指示灯[3]:=0;
  60. END_IF
  61. IF光栅1RT.Q OR 光栅2RT.Q THEN
  62. 报警:=1;
  63. END_IF
  64. END_IF
[ 此帖被es_ice在2024-07-23 09:03重新编辑 ]