#用一个基本的逻辑条件,探索PLC的编程技巧#
前言:
续上,在我们实际生活中,有些灯的亮暗程度是阶段式的,那么是如何使用一个按钮控制呢?以下我们用CODESYS的编程软件仿真模拟下。
按钮和灯2
案例2(阶段亮暗灯):
1.设计需求
用PLC写一个程序,一个自复位按钮,每次按下时,灯亮30%,直至全亮,再次按下时,灯暗30%,直至全灭,循环往复;
2.问题思考:
如果要实现灯的亮暗,在可视化界面上,有两种方式,一个是控制透明度,另一个是控制颜色变化,颜色的变量参数DWORD,其表现形式如16#FF000000(透明+黄+绿+红),黄绿红为三元色;在程序上,我们使用步序的方式,当连续按下时,颜色累加或递减。结合以上,我们选择控制透明度实现亮暗,那么对于一个DWORD类型的数据,我们怎么实现呢?参见以下代码吧。

3.程序代码
//数据类型
TYPE lightColor_ST :
UNION
B:ARRAY[0..3] OF BYTE;
D:DWORD;
END_UNION
END_TYPE
//全局变量
VAR_GLOBAL
button: BOOL;
light: BOOL;
lightColor: lightcolor_st;
END_VAR
modeSeclectStr:='一个自复位按钮,每次按下时,灯亮30%,直至全亮,再次按下时,灯暗30%,直至全灭,循环往复';
CASE modeNo[modeSeclect] OF
0://步序
modeNoStr:='使用方法-步序';
GVL.lightColor.B[0]:=16#00;//红色
GVL.lightColor.B[1]:=16#FF;//绿色
GVL.lightColor.B[2]:=16#00;//黄色
GVL.lightColor.B[3]:=TO_BYTE(ColorTP);//透明
color:=GVL.lightColor.D;//转整数
IF buttonR.Q THEN
//初始化
IF step=0 THEN
step:=10;
END_IF;
END_IF;
CASE step OF
10://变亮
IF buttonR.Q THEN
colorTP:=255*0.3+colorTP;//颜色累加
END_IF;
IF colorTP>=255 AND buttonR.Q=FALSE THEN
colorTP:=255;
step:=20;
END_IF;
20://变暗
IF buttonR.Q THEN
colorTP:=colorTP-255*0.3;//颜色递减
END_IF;
IF colorTP<=0 AND buttonR.Q=FALSE THEN
colorTP:=0;
step:=0;
END_IF;
END_CASE;
END_CASE;
如上所示,本案例使用联合体形式,对DWORD型数据做了处理,将处理后的透明度的值赋值于DWORD的最高字节,即可实现灯的亮暗效果。
#写在最后#
本文章旨在通过最简单的按钮和灯,结合可视化,逐步实现控制逻辑和动态效果的结合。如果你感兴趣的话,可以通过其它方式实现这个效果,多动手尝试一下。如果你有任何疑问,都可以在评论区发表,我们一起交流学习,谢谢!
下载链接:
1901

被折叠的 条评论
为什么被折叠?



