登录
首页 人机界面 人机界面
回帖 发帖
正文

主题:威纶通宏指令计时程序,如何在每次LB为1开始的时候将LW10清零? 怎么改?

点击:1614 回复:13

macro_command main()
bool b=false
short nSecondS = 0,nSecond = 0
GetData(b, "Local HMI", LB, 0, 1)
if b==false then
return
end if
GetData(nSecondS, "Local HMI", RW, 10, 1)
nSecondS = nSecondS+1
SetData(nSecondS, "Local HMI", RW, 10, 1)
SetData(nSeconds, "Local HMI", LW, 10, 1)
end macro_command
最后修改:2022/9/12 16:57:54
22-09-12 16:48
第一次扫描清零,后面还是计时
22-09-12 16:49
如果你要从0开始的话,就把nSecondS =0改成nSecondS =-1
macro_command main()
bool b,c
short nSecondS
GetData(b, "Local HMI", LB, 0, 1)
if b==1 and c==0 then
nSecondS =0
end if
c=b
if b==1 then
 nSecondS = nSecondS+1
end if
SetData(nSecondS, "Local HMI", LW, 10, 1)
end macro_command
22-09-12 18:58
你这个测试结果是到1就不动了,,我自己搞了一个清零的程序块,只在b=1首次调用,计时程序周期循环,也能实现,但是我需要对计时个“b为1时”计时,希望能做到一个程序块简单些,周期循环的程序有没有只执行一次的指令?这个计时程序必须选择1秒周期循环,加入清零指令,就周期清零了,这是个矛盾
是b为1上升沿置零,不是为0时置0,因为那个计时还要保留一下
最后修改:2022/9/13 9:04:17
22-09-13 09:00
我的理解是,就在上升沿时清零一下。
附件 微信截图_20220913090934.jpg
附件 微信截图_20220913091006.jpg
22-09-13 09:28
奇怪了,我反复核对反复测试,还是不行
22-09-13 12:20
把你的程序截图上来看看
22-09-13 12:32
第一个数值不动,第二个关了就为0, 我现在想要一个信号启动,一个信号停止,信号不保持,只保持几秒钟
附件 1.jpg
附件 2.jpg
最后修改:2022/9/13 13:34:53
22-09-13 12:39
LB0 LB1 改成复归型
附件 1111111.jpg
附件 22222222222.jpg
22-09-13 16:30
怪事,我照你的程序测试,就是不行,d不能保持为1, LW10为0不变,,,我昨天就试过反复修改测试发现,d要写入一个屏的寄存器地址才能保持,S要读取LW10才会累加,难道是屏的型号不同?  我感觉屏在反复扫描的时候,不管上次的结果重复初始化了,只有寄存器的地址才能保存前次程序的结果
最后修改:2022/9/14 9:11:36
22-09-14 09:07

上一页下一页

工控新闻

更多新闻资讯