宏指令循环比较字符串
本帖最后由 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 我试了好几天了,找不到原因,请大家帮忙看一看,提个建议,谢谢! X=X+5是什么意思?
GetData(name, "Local HMI", RW, 4000, 5)改为GetData(name, "Local HMI", RW, 4000+X, 5)? z和x的初值是多少?好像缺少了初始化赋值语句 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重名。依次类推。 非常感谢,我试一下 我试过了,效果很好,非常感谢! 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]