QQ登录

只需一步,快速开始

请教威纶通触摸屏宏指令,如何避免3个数值元件数值相同

[ 复制链接 ]
数值输入元件1(LW0),数值输入元件2(LW1),数值输入元件3(LW3),
以上变数分别为a,b,c;
要求:在a,b,c其中的一个输入元件中输入一个值其他两个输入元件不得再输入同样的值。
刚接触宏指令请高手帮忙解决下,万分感谢!

回答:
稍微熟悉威纶通宏指令的使用,这都不是问题。
这里我有录制两套威纶通的视频教程,可以参考宏指令的那套快速熟悉。
给自己知识上的投资还是很有必要的。

下面我来编写一个实例,实现问题所提出的功能。
实例在下边可以下载参考使用。
实例界面如下:
2019-12-05_184544.jpg
界面上有三个数值输入元件供输入内容,地址对应为LW0,LW1.LW2.
宏代码编写时规划可以添加10个,这里就添加3个作为演示用。
每个元件在输入数值后都会将指定的寄存器设置为ON,以便触发宏指令来判断输入内容是否重复。
对应会设置LB0到LB9,共10个位寄存器,这些寄存器也在界面以指示灯形式显示了,仅方便自己程序调试。
想要通过位寄存器触发宏指令,还得进行下一步操作。
例程添加了PLC控制元件,将这些位寄存器与一个宏指令关联起来。
如下图,例程也只添加3个,将LB0,1,2与宏macro关联。
2019-12-05_185041.jpg


界面底部为10个配方寄存器,存放预保存的数据,用户输入的每个数据会与这些数据比对,
以保证不重复输入。
配方寄存器对应地址分别为RW0到RW9。
实际使用时, 可选择是否在触摸屏上电初始化时将这10个配方寄存器数据传输到LW0到LW9,以显示出来。
macro_command main()
short n[10]
GetData(n[0], "Local HMI", RW, 0, 10)
SetData(n[0], "Local HMI",LW, 0, 10)
end macro_command


到这里,关键的一步就是如何编写宏代码来判断数值是否重复输入了。
例程里的宏代码如下,仅供参考。
macro_command main()
//获取当前哪个编辑框输入与编辑框对应缓存数据
bool b[10], OnOff=false
GetData(b[0], "Local HMI", LB, 0, 10)
short n[10]
GetData(n[0], "Local HMI", RW, 0, 10)
//记录当前输入编辑框索引
short  i=0,index=0,value=0
for i=0 to 9 step 1
if b then
index = i
GetData(value, "Local HMI", LW, i, 1)
break
end if
next
//复位触发位
OnOff=false
SetData(OnOff, "Local HMI", LB, index, 1)
//<>
//用当前输入编辑框内容与其他对比
for i=0 to 9 step 1
if i==index then
continue
end if
//有相同则提示,不更新数据
if value==n then
OnOff=true
SetData(OnOff, "Local HMI", LB, 100, 1)
SetData(n[index], "Local HMI", LW, index, 1)
return
end if
next
SetData(value, "Local HMI", RW, index, 1)
end macro_command

宏指令里仅实现10个数值的判断,也就是仅支持10个寄存器的使用。

当前扩展起来也是很简单的,前提是要知道宏代码作用。
注释还是挺详细的了。
如果需要下载例程的话,也可点击下载。
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:EBProject1.rar 
文件大小:332.85 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  




回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索