电工学习网

 找回密码
 立即注册
查看: 1985|回复: 0
打印 上一主题 下一主题

西门子触摸屏VBS编程陷阱之VBS不支持多线程

[复制链接]
跳转到指定楼层
楼主
发表于 2020-5-22 09:04:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
有人问能不能通过VBS来做一个死循环来连续的监控某个值的状态,然后执行一些操作。原则上是不能那么做的,除非你打算程序中不使用其他的用户脚本了。在打算使用VBS之前一定注意以下事项带来的影响:
西门子触摸屏中的VBS是单线程操作的,如果没有执行完成会导致其他脚本无法执行。

测试案例

1.我们新建一个用户脚本Cycle,做一个循环程序,脚本启动时初始化tag1为1,当tag2不等于3时会一直循环将tag1赋值为2,如果tag2为3,则将tag1也赋值为3。脚本如下:
SmartTags("tag1")=1
Do Until SmartTags("tag2").Value=3  
SmartTags("tag1")=2
Loop
SmartTags("tag1")=3

2.我们新建一个按钮,命名为“循环”,先执行Cycle脚本,VBS脚本执行完成后再执行切换画面的系统函数。
我们需要验证两个事:
a.当脚本在死循环阶段,能切换画面吗?
b.切换画面后,脚本还在执行吗?
c.当脚本在死循环阶段,还能执行其他VBS脚本吗?
西门子触摸屏VBS编程陷阱之VBS不支持多线程

3.我们创建两个按钮3和4,一个是通过系统函数来切换画面,另一个是通过用户脚本来切换画面。再建两个按钮2和5,控制tag2加减1,以此来控制循环脚本的退出。

按钮3:用户脚本切换画面
西门子触摸屏VBS编程陷阱之VBS不支持多线程

按钮4:用户脚本切换画面
西门子触摸屏VBS编程陷阱之VBS不支持多线程

用户脚本Change中的内容:

ActivateScreen "画面_2",0

按钮2:使tag2加1
西门子触摸屏VBS编程陷阱之VBS不支持多线程


按钮5:使tag2减1

西门子触摸屏VBS编程陷阱之VBS不支持多线程

结果
事件中的用户自定义脚本和系统函数是顺序执行的,如图1号的脚本不执行完,2号是不会执行的。
事件中脚本的死循环只会导致其他脚本无法执行,但是不会禁止其他控件中的事件触发的系统函数的正常执行。

a.当脚本在死循环阶段,能切换画面吗?Y 可以通过系统函数来切换画面。
b.切换画面后,脚本还在执行吗?Y
c.当脚本在死循环阶段,还能执行其他VBS脚本吗?N

测试动画
西门子触摸屏VBS编程陷阱之VBS不支持多线程
来源:西门子工业技术论坛

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

电工学习网 ( )

GMT+8, 2024-8-29 22:25

Powered by © 2011-2022 www.shop-samurai.com 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

快速回复 返回顶部 返回列表