威纶通官方论坛

宏指令循环比较字符串

[复制链接]
发表于 2013-4-19 21:07:43 | 显示全部楼层 |阅读模式
本帖最后由 wysbxdm 于 2013-4-20 11:46 编辑

想在RW4000到4085之间储存一些字符,,一组10个字符,占用5个寄存器,然后输入字符时激活LB21,检查一下里面是否有重名的,但在运行过程中执行只有第一组和第二组一致时才能报警,其它的不行,高手帮忙看一下

macro_command main()
short a,b,name[5],temp[5],x,z
bool flaq=false, OFF=false,check=false
for a=0 to 17 step 1
  GetData(name[0], "Local HMI", RW, 4000, 5)
      if name[0]>0 or name[1]>0 or name[2]>0 or name[3]>0 or name[4]>0 then
      for b=0 to 17 step 1
        GetData(temp[0], "Local HMI", RW, 4000+z, 5)
          if name[0]==temp[0] and name[1]==temp[1] and name[2]==temp[2] and name[3]==temp[3] and name[4]==temp[4] then
            flaq=true
            SetData(flaq, "Local HMI", LB, 20, 1)
           else
           z=z+5
          end if
       next b
     else
    x=x+5
    end if      
next a
SetData(OFF, "Local HMI", LB, 21, 1)
end macro_command
 楼主| 发表于 2013-4-20 11:58:09 | 显示全部楼层
我试了好几天了,找不到原因,请大家帮忙看一看,提个建议,谢谢!
发表于 2013-4-22 11:16:03 | 显示全部楼层
X=X+5是什么意思?
GetData(name[0], "Local HMI", RW, 4000, 5)改为GetData(name[0], "Local HMI", RW, 4000+X, 5)?
发表于 2013-4-22 15:35:26 | 显示全部楼层
z和x的初值是多少?好像缺少了初始化赋值语句
发表于 2013-4-24 10:10:20 | 显示全部楼层
macro_command main()
bool ok=true,x=false
unsigned char a[5],b[5]
unsigned short i,k

GetData(a[0], "Local HMI", RW, 4000, 5)            
for i=1 to   17
k=4000+5*i
GetData(b[0], "Local HMI", RW, k, 5)
if a[0]==b[0] and a[1]==b[1] and a[2]==b[2] and a[3]==b[3] and a[4]==b[4] then
SetData(ok, "Local HMI", LB, 21, 1) //重名指示灯亮
SetData(i, "Local HMI", LW, 10, 1)   //重名位置
break  
else
SetData(x, "Local HMI", LB, 21, 1)   
end if
DELAY(100)         
next i  
end macro_command
参考下这个。比较4005至4085间有没有和第一个4000至4004重名。依次类推。
 楼主| 发表于 2013-4-24 20:01:51 | 显示全部楼层
非常感谢,我试一下
 楼主| 发表于 2013-4-24 20:30:32 | 显示全部楼层
我试过了,效果很好,非常感谢!
发表于 2015-6-22 17:18:40 | 显示全部楼层
admin 发表于 2013-4-24 10:10
macro_command main()
bool ok=true,x=false
unsigned char a[5],b[5]

想请教下这里的break是什么意思 是不是只要前面if条件满足就自动回到程序最后呢
另外字符串比较能否写在前面
result = StringCompare (a[0], b[0])
if result==1 then
SetData(T, "Local HMI", LB, 21, 1) //重名指示灯亮
SetData(i, "Panasonic FP", DT, 800, 1) //SetData(T, "Local HMI", LW, 10, 1)   //重名位置
break  
else
SetData(F, "Local HMI", LB, 21, 1)   
end if
DELAY(10)         
next i  
end macro_command

可以这样写吗
您需要登录后才可以发帖 登录 | 注册

本版积分规则

回复帖子

Archiver|小黑屋|威纶通官网 ( 粤ICP备06054553号 )

GMT+8, 2024-5-16 05:49

Powered by Discuz! X3.4

© 2001-2023 Comsenz Inc.

快速回复 返回顶部 返回列表