最近在用威纶通HMI做上位机,主要涉及到时间控制问题,其中这个定时器的问题困扰了我两个星期。
我也是看了很多资料,再解决了自己遇到的问题,在这里分享给大家。
1 切换页面时 定时器自动重置
“发现威纶的计时器,当开始计时时,累加时间不断的增加,但是切换到别的窗口再切换回来时,已经计时的时间就被清了零了,然后又再从0往上计时,这样用起来相当不便,请问有知道原因的前辈没有?”
我在工控网上找到了解决方案,这其实是局部变量还是全局变量的问题,如果把定时器放到公共界面04,就可以解决这个问题
2 累加式定时器 无法重置 这个是系统自带的定时器,他的重置功能只能在定时器计满之后才可以重置,也就是已计时间和预设时间一样之后才可以重置,这很不方便,而且这个定时器在配合弹出窗口的时候会莫名其妙的自动触发,我折腾了一个星期都没有搞定。
说明书上可看到,这个重置必须在计满之后才可以。
于是我觉得自己用宏定义写一个定时器,在工控编程吧上找到了写好的demo,
macro_command main()
bool b=false
//启动按钮未按下,不计时
GetData(b, "Local HMI", LB, 0, 1)
if b==false then
return
end if
//1小时内秒数据循环递增
short nSecondS=0
GetData(nSecondS, "Local HMI", RW, 0, 1)
nSecondS = nSecondS+1
if nSecondS>=36000 then
nSecondS = 0
end if
SetData(nSecondS, "Local HMI", RW, 0, 1)
//
short nSecond=0,nMinute=0
//换算成秒。
nSeconds = nSeconds
//换算成分
nMinute = nSeconds/60
//换算成秒
nSecond = nSeconds%60
//显示分与秒
SetData(nMinute, "Local HMI", LW, 0, 1)
SetData(nSecond, "Local HMI", LW, 1, 1)
end macro_command
以上是自定义的timer宏定义,我再试验之后,发现了一个问题,这个定时器走的不准,每分钟竟然差了6秒,无法接受。
解决方案,把时间间隔直接改成1s,这样就解决了这个问题。
需要源码可以给我留邮箱。只做了一点微小的工作,谢谢大家。