wysbxdm 发表于 2013-4-19 21:07:43

宏指令循环比较字符串

本帖最后由 wysbxdm 于 2013-4-20 11:46 编辑

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

macro_command main()
short a,b,name,temp,x,z
bool flaq=false, OFF=false,check=false
for a=0 to 17 step 1
GetData(name, "Local HMI", RW, 4000, 5)
      if name>0 or name>0 or name>0 or name>0 or name>0 then
      for b=0 to 17 step 1
      GetData(temp, "Local HMI", RW, 4000+z, 5)
          if name==temp and name==temp and name==temp and name==temp and name==temp 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

wysbxdm 发表于 2013-4-20 11:58:09

我试了好几天了,找不到原因,请大家帮忙看一看,提个建议,谢谢!

weinview 发表于 2013-4-22 11:16:03

X=X+5是什么意思?
GetData(name, "Local HMI", RW, 4000, 5)改为GetData(name, "Local HMI", RW, 4000+X, 5)?

syl-510129 发表于 2013-4-22 15:35:26

z和x的初值是多少?好像缺少了初始化赋值语句

admin 发表于 2013-4-24 10:10:20

macro_command main()
bool ok=true,x=false
unsigned char a,b
unsigned short i,k

GetData(a, "Local HMI", RW, 4000, 5)            
for i=1 to   17
k=4000+5*i
GetData(b, "Local HMI", RW, k, 5)
if a==b and a==b and a==b and a==b and a==b 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重名。依次类推。

wysbxdm 发表于 2013-4-24 20:01:51

非常感谢,我试一下

wysbxdm 发表于 2013-4-24 20:30:32

我试过了,效果很好,非常感谢!

vision 发表于 2015-6-22 17:18:40

admin 发表于 2013-4-24 10:10
macro_command main()
bool ok=true,x=false
unsigned char a,b


想请教下这里的break是什么意思 是不是只要前面if条件满足就自动回到程序最后呢
另外字符串比较能否写在前面
result = StringCompare (a, b)
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

可以这样写吗
页: [1]
查看完整版本: 宏指令循环比较字符串