xueli521
生而无畏学至终章
级别: 正式会员
精华主题: 0
发帖数量: 49 个
工控威望: 95 点
下载积分: 3117 分
在线时间: 18(小时)
注册时间: 2019-07-22
最后登录: 2019-11-22
查看xueli521的 主题 / 回贴
楼主  发表于: 19天前
威纶通宏指令,使用while后,无法停止。


macro_command main()

bool a,b,c = 1 ,d = 0
int e

GetData(a,"HMI",LB,2,1)
GetData(b,"HMI",LB,3,1)

while (a == true and b == false)
  SetData(c,"HMI",LB,0,1)
  SetData(d,"HMI",LB,1,1)
  DELAY(1000)
  SetData(d,"HMI",LB,0,1)  
  SetData(C,"HMI",LB,1,1)
  DELAY(1000)
  if b == true then
  break
  end if
  wend
end macro_command
fjqz00
级别: 论坛先锋
精华主题: 1 篇
发帖数量: 1217 个
工控威望: 1350 点
下载积分: 7268 分
在线时间: 281(小时)
注册时间: 2007-04-16
最后登录: 2019-11-19
查看fjqz00的 主题 / 回贴
1楼  发表于: 19天前
在 DELAY(1000)与 if b==true then之间,再加一句  GetData(b,"HMI",LB,3,1) 应该就可以了。
要不然你的b一直不会刷新,那么while就出不来了
海你好咸
级别: 探索解密
精华主题: 0
发帖数量: 124 个
工控威望: 155 点
下载积分: 1943 分
在线时间: 51(小时)
注册时间: 2018-12-22
最后登录: 2019-11-18
查看海你好咸的 主题 / 回贴
2楼  发表于: 18天前
如楼上所说,在while语句中间加“GetData(a,"HMI",LB,2,1),GetData(b,"HMI",LB,3,1)”让“a,b”保持刷新即可

while (a == true and b == false)
~~~
GetData(a,"HMI",LB,2,1)
GetData(b,"HMI",LB,3,1)
~~~
wend
ren1823
级别: 正式会员
精华主题: 0
发帖数量: 13 个
工控威望: 59 点
下载积分: 711 分
在线时间: 12(小时)
注册时间: 2019-08-01
最后登录: 2019-11-22
查看ren1823的 主题 / 回贴
3楼  发表于: 18天前
闪烁周期执行就可以了,没必要while
xueli521
生而无畏学至终章
级别: 正式会员
精华主题: 0
发帖数量: 49 个
工控威望: 95 点
下载积分: 3117 分
在线时间: 18(小时)
注册时间: 2019-07-22
最后登录: 2019-11-22
查看xueli521的 主题 / 回贴
4楼  发表于: 14天前
引用
引用第1楼fjqz00于2019-11-04 17:46发表的  :
在 DELAY(1000)与 if b==true then之间,再加一句  GetData(b,"HMI",LB,3,1) 应该就可以了。
要不然你的b一直不会刷新,那么while就出不来了

这样要停止,也需要B一直true才行,有没有哪个函数可以直接在B  true的瞬间,就可以把整个while停止,而不是要等到while循环结束后,再检测WHILE里面有没有满足条件?