我想用宏指令来控制位开关 比按下LB0就开始触发宏指令控制LW100位。计时10分钟LB0断开停止宏指令.
回答:
这是一个很有趣的问题,实现前我们要有一个概念。
LW100为一个字寄存器,由16个二进制位组成。
这16个二进制位,从右到左依次排列为LW100_BIT15,LW100_BIT14,,,LW100_BIT0.
有点电脑编程基础的同学会知道,每个位对应十进制数值为:
32768,16384,8192,4096,2048,1024,512,256,128,64,32,16, 8,4,2,1,
那么我们设置LW100为对应的数值,就是点亮对应的二进制位。
我们还可以将这16个二进制位用4个16进制位来表示,每个16进制位数值变化为0到15。
这样能够更直观方便控制每个二进制位。
对于没多少基础的朋友,看解释的挺复杂。但用起来会很简单的。
这里我也编写一个实例,供大小参考学习。
界面如下:
如何用威纶通宏指令控制一个字寄存器的位状态
界面上有指示灯LW100_Bit15到LW100_Bit0,共16个位状态指示灯,可以通过LW100来传值控制。
指示灯下有对应的LW100数值显示元件,通过宏代码来进行修改。
计时时间也可以在界面上来设置,单位秒。
点击按钮,可以设置LB0为ON,触发宏,开始设置LW100的数值,实现LW100的16个二进制位的控制。
宏代码如下:
macro_command main()
bool bDir=false
GetData(bDir, "Local HMI", LB, 0, 1)
short nIndex=0
GetData(nIndex, "Local HMI", LW, 0, 1)
//方向控制
if bDir == true then
nIndex =nIndex+1
if nIndex>=15 then
bDir=false
end if
else
nIndex = nIndex-1
if nIndex<=0 then
bDir=true
end if
end if
SetData(bDir, "Local HMI", LB, 0, 1)
SetData(nIndex, "Local HMI", LW, 0, 1)
//数值确定
short nValue=0
if nIndex==0 then
nValue = 1
else if nIndex==1 then
nValue = 2
else if nIndex==2 then
nValue = 4
else if nIndex==3 then
nValue = 8
else if nIndex==4 then
nValue = 16
else if nIndex==5 then
nValue = 32
else if nIndex==6 then
nValue = 64
else if nIndex==7 then
nValue = 128
else if nIndex==8 then
nValue = 256
else if nIndex==9 then
nValue = 512
else if nIndex==10 then
nValue = 1024
else if nIndex==11 then
nValue = 2048
else if nIndex==12 then
nValue = 4096
else if nIndex==13 then
nValue = 8192
else if nIndex==14 then
nValue = 16384
else if nIndex==15 then
nValue = 32768
end if
//数值生效
SetData(nValue, "Local HMI", LW, 100, 1)
//时间统计
int nSetTime=0,nCurTime=0
GetData(nCurTime, "Local HMI", LW, 4, 1)
nCurTime = nCurTime+1
SetData(nCurTime, "Local HMI", LW, 4, 1)
GetData(nSetTime, "Local HMI", LW, 2, 1)
if(nCurTime/10>=nSetTime)then
nCurTime = 0
bDir = false
SetData(nCurTime, "Local HMI", LW, 4, 1)
SetData(bDir, "Local HMI", LB, 1, 1)
end if
end macro_command
代码里通过上面介绍的每个位对应的数值来设置LW100.
威纶通触摸屏里没有对位左右移动操作的函数,通过上面的方法来实现也不失为一种方法。
执行后的运行效果如下:
如何用威纶通宏指令控制一个字寄存器的位状态
宏执行过程中会根据设置的时间来判断是否结束执行。
时间到设置LB1为OFF,结束宏执行,这是因为宏执行条件设置了LB1为OFF禁止执行。
宏每隔100ms执行一次,所以时间在宏里面也进行的折算。
例程下载地址:
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|