动作我已编写好,确认无误。想对动作进行 选定次数的进行; 我是这样想的:设计一个io域,用于输入想要进行的次数;一个按钮用于开始动作。我对按钮进行vbs编写,脚本语言如下:
Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)
Dim flip_Tag
Set flip_Tag = HMIRuntime.Tags("flip_Tag")
Dim TagTimes
Set TagTimes = HMIRuntime.Tags("TagTimes")
flip_Tag.Read
TagTimes.Read
Dim i
flip_Tag.Value =TagTimes.Value
For i = TagTimes.Value To 0
'statements
flip_Tag.Write i-1
Next
End Sub
其中flip_Tag为触发器变量,触发周期为有变化时;TagTimes为IO域连接变量,用于接收我想要进行动作的次数。 运行程序无法实现功能,还请各位指点一下。。
最佳答案
For i = TagTimes.Value To 0
不知道你为什么要这么写。你调试过
dim i
for i = 3 to 0
msgbox i
next
这样的代码吗?
虽然
dim i
for i = 0 to 3
msgbox i
next
这样的代码可以正确运行。
再是flip_Tag.Value =TagTimes.Value这句话相当于没写,因为你 flip_Tag.Write 的就是 i-1
flip_Tag的范围总是TagTimes - 1到-1
关于这个问题可以参考:
http://www.ad.siemens.com.cn/club/bbs/post.aspx?b_id=5&a_id=966768&s_id=17&num=4#anch
建议你这段程序这样写:
Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)
Dim flip_Tag
Set flip_Tag = HMIRuntime.Tags("flip_Tag")
Dim TagTimes
Set TagTimes = HMIRuntime.Tags("TagTimes")
Dim i
For i =0 To TagTimes-1 step 1
flip_Tag.Write TagTimes - i ‘每次都是从0变到TagTimes为第一次触发
’直至变到1为最后一次触发,共TagTimes次
Next
HMIRuntime.Tags("flip_Tag").Write 0
''''从1回到初值0,虽然触发但是没做里面的动作
End Sub
其中flip_Tag变量的起始值置为0(在变量管理器中右键属性中设置)
而你触发的动作中,用if HMIRuntime.Tags("flip_Tag").Read <> 0 then
来滤去flip_Tag变成0的这次触发。
因为每次项目运行起来的时候都会加载变量,触发一次动作,可能出现预料不到的结果。
如果动作对于项目运行时触发的这次并不敏感(多做这一次也不妨碍)的话
那在你的代码缺陷在于,flip_Tag的范围总是由-1到TagTimes - 1再一步一步到-1,多做了一次动作!
提问者对于答案的评价:
已调试成功,非常感谢
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc263431.html