[标题]ST实现手动控制4种模式灯的应用
[配件]3个点动按钮 m0 1 2
灯 右键连续复制→x1y8 y0-y7 全选 调小

[要求]mo第1次,模式1,第二次,模式2...3..
m1 模式减
[表格] 图片 execl x轴拖y0-7
4个模式 复制黏贴 拖 拖合并 居中(其实5种模式的! 还是计数器为0的时候 这些值 停止.)

 

 

 

[讲解]
问题:一直按一直加/减计数
方案1:INCP 脉冲型
方案2:LDP 上升沿指令 (ST)
LDP(1,M0) //使能 1 时刻检测 M0上升沿
[代码](*模式加*)
IF ldp(1,M0) THEN
D0:=D0+1;
END_IF;
//INCP(M1,D2);
(*模式减*)
IF LDP(1,M1) THEN
D0:=D0-1;
END_IF;
[讲解]
D0=5的时候并不存在,所以要强制赋值为0(定范围)
还有D0=-1 减过头的情况,定范围.
总之限值0-4范围内.
[代码](*计数器范围限值*)
IF D0=5 THEN
D0:=0;
END_IF;
IF D0=-1 THEN
D0:=4;
END_IF;
(*停止 计数器=0*)
IF M2=1 THEN
D0:=0;
END_IF;
[讲解] MODE 模型 (case 类似switch??具体..外。。。)
*新语法 CASE 变量 OF
0:
1:
...
END_CASE;
特殊继电器M8002 初始化脉冲 M8012 以100ms为周期震荡
m8012 闪烁指令 =1 /=0 1为1 0为0 震荡 接通与断开

[图片 代码 全部总结]

(*M0模式加*)
IF LDP(1,M0) THEN
D0:=D0+1;
END_IF;
(*M1模式减*)
IF LDP(1,M1) THEN
D0:=D0-1;
END_IF;
(*D0 max value*)
IF D0=5 THEN
D0:=0;
END_IF;
(*D0 min value*)
IF D0=-1 THEN
D0:=4;
END_IF;
(*M2 stop*)
IF M2=1 THEN
D0:=0;
END_IF;
(*D0 值对应灯状态*)
CASE D0 OF
0:
Y0:=0;
Y1:=0;
Y2:=0;
Y3:=0;
Y4:=0;
Y5:=0;
Y6:=0;
Y7:=0;
1:
Y0:=1;
Y1:=1;
Y2:=1;
Y3:=1;
Y4:=0;
Y5:=0;
Y6:=0;
Y7:=0;
2:
Y0:=0;
Y1:=0;
Y2:=0;
Y3:=0;
Y4:=1;
Y5:=1;
Y6:=1;
Y7:=1;
3:
Y0:=1;
Y1:=0;
Y2:=1;
Y3:=0;
Y4:=1;
Y5:=0;
Y6:=1;
Y7:=0;
(*利用M8012产生100ms为周期震荡 M8012的0与1映射灯0与1*)
4:
IF M8012=1 THEN
Y0:=1;
Y1:=1;
Y2:=1;
Y3:=1;
Y4:=1;
Y5:=1;
Y6:=1;
Y7:=1;
ELSE
Y0:=0;
Y1:=0;
Y2:=0;
Y3:=0;
Y4:=0;
Y5:=0;
Y6:=0;
Y7:=0;
END_IF;
END_CASE;

posted on 2023-04-10 11:57  ihoi  阅读(134)  评论(0编辑  收藏  举报