我用VBS编些脚本,出现一个问题,就是在执行一个事件的时候,为什么只有执行完当前事件才能执行其他事件。譬如说,我定义两个按钮,对应画面上不同对象的动作,我点击第一个按钮,执行相应脚本编写的动作,接着按第二个按钮,没有立即执行,当第一个执行完了后,才执行第二次按钮的动作。不知道这是为什么。我再在另一按钮定义HMIRuntime.stop.当我点击按钮的时候,也是等其他动作执行完毕后才退出运行系统。请问这是为什么,如何解决?
最佳答案
请参考:
在WinCC V6.x里通过VBS 读写变量
问题:
我把一个值写入一个变量,然后把一个值写入另一个变量。有时这不能工作。是否有更好的方法完成这个功能?
解答:
有,例如,下面的VBS代码并不总能工作。
HMIRuntime.Tags("NewTag_2").Write HMIRuntime.Tags("NewTag_1").Read
HMIRuntime.Tags("NewTag_3").Write HMIRuntime.Tags("NewTag_2").Read
HMIRuntime.Tags("NewTag_4").Write HMIRuntime.Tags("NewTag_3").Read
HMIRuntime.Tags("NewTag_5").Write HMIRuntime.Tags("NewTag_4").Read
上面的例子中,值通过变量镜像被读写。为保证读变量先于写变量,你可以使用同步读写任务。因此改变读任务"Read" 为 "Read(1)-如下面的例子:
HMIRuntime.Tags("NewTag_2").Write HMIRuntime.Tags("NewTag_1").Read(1) ,1
HMIRuntime.Tags("NewTag_3").Write HMIRuntime.Tags("NewTag_2").Read(1) ,1
HMIRuntime.Tags("NewTag_4").Write HMIRuntime.Tags("NewTag_3").Read(1) ,1
HMIRuntime.Tags("NewTag_5").Write HMIRuntime.Tags("NewTag_4").Read(1) ,1
备注:
同步读写任务等同于 ANSI C的GetTagxxxWait 和 SetTagxxxWait。这些功能的缺点在于,他们的持续时间依赖于与AS的配合。脚本的后续过程将在收到AS响应后才能继续。那么,他们导致了性能损失,因此,它们只用于异常情况。异步读写任务因为通过镜像处理,更加有效。这里变量的读取和刷新过程分开运行。< br>同步任务仅仅被用于脚本的进一步处理必须确保变量读写次序的情况。
注意:
关于这个内容请看在线帮助的 "Index > GetTagWait > GetTagBitWait > Functioning of Function GetTag" 。那里两种通讯类型被详细描述并图形化显示。
http://support.automation.siemens.com/CN/llisapi.dll?func=cslib.csinfo&lang=zh&siteid=cseus&objid=19478679
提问者对于答案的评价:
谢谢
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc272381.html