焕东分享
希望大家喜欢
注意 一个脚本是否执行取决于使用的运行站跟操作面板。 本手册包含相关信息如下: ......
说明
这个常见问题对WinCC Comfort 和 WinCC Advanced 中VB脚本编程语言的使用技巧作出了响应。
WinCC Comfort/Avanced 脚本语言
在WinCC Comfort/Advanced中使用VB脚本
WinCC Advanced V13.0 手册 (Entry ID: !91479053!)包含相关信息如下:
· "可视化过程 > 系统函数和运行脚本> 参考 > VB脚本"
· "可视化过程 > 系统函数和运行脚本 > 事例"
一个脚本是否执行取决于使用的运行站或操作员面板。
本手册包含更多关于设备的信息如下:
· "可视化过程 > 系统函数和运行脚本 > 参考 >函数列表 > 设备管理 "
1. 为什么一个由内部变量的“数值改变”事件触发的脚本不被执行?
如果一个内部变量调用另外一个内部变量,被调用的变量又去执行一个脚本(比如,根据变量变化),此时一个安全机制会阻止这个功能被执行。
此安全功能是为了阻止连续的执行。
例如
在内部变量“HMI_Tag_01”属性下,“更改数值”事件去置位内部变量“HMI_Tag_02”中的某一位。
然后内部变量“HMI_Tag_02”的“更改数值”事件下又调用一个脚本。
结果:这个脚本不会被执行。
补救
使用和控制器通讯的外部变量。请注意,通过使用外部变量可以规避上述安全机制。这可能会导致项目运行时间的问题。
2. 如何访问动态链接库(DLL)?
在用户定义的C函数里可以调用DLL函数(DLL-动态链接库)。
WinCC Professional V12.0 SP1 > 可视化过程 (Professional) > 系统函数和运行脚本 > 用户自定义函数 > functions创建用户定义的C函数 > 从用户自定义的C函数调用DLL函数。
3. 如何用VBS脚本确定鼠标当前的位置?
为了读取当前鼠标的位置,需要访问操作系统的API(应用程序接口)。
VBS脚本不支持通过DLL函数访问操作系统的API。
4. 为什么不能在脚本里使用“MsgBox”命令?
"MsgBox"命令不能用于 WinCC Comfort 和 WinCC Advanced 版本是由于安全的原因。 基于操作原理显示可能被忽略,比如,阻止设备的快速操作。此外,消息框可能会阻止脚本的进一步执行。
解决办法
另外可以使用系统函数ShowSystemAlarm。
5. 如何在脚本里显示或隐藏单个层级?
使用层工作是 WinCC (TIA Portal) 开发系统的一个功能。层只能在这里组态及显示隐藏。
这个功能在操作面板或 PC 运行系统中不可用。所以不能用脚本显示或隐藏“层”。
解决办法
在“属性>动画>视图>可见性”组态变量,根据变量值控制相关对象的显示或隐藏。
6. 如何在脚本中合并字符串?
可以使用“&”来合并字符串:
例如
Dim Tag_01, Tag_Text_01, Tag_Text_02, Tag_Text_03
Tag_01 = Tag_Text_01 & Tag_Text_02 & Tag_Text_03
注意
VB函数 CStr(Expression)将相应的表达式转换为“字符串”类型。 .这样在连接字符串转换之前可以避免运行时出现错误。
7. 在脚本中如何在单独的字符串之间插入一个通配符(空格)?
例如,为了在两个文本之间插入空格,可以使用两个引号 " "。
“空格”的数量取决于两个引号间的距离 " "。
"&". 连接下一个字符需要再次使用 "&"。
例如 1
Dim Tag_01, Tag_Text_01, Tag_Text_02, Tag_Text_03
Tag_01 = Tag_Text_01 & " " & Tag_Text_02 & " " & Tag_Text_03
8. 如何在运行时改变对象的属性(颜色,长度等)?
如何通过脚本获取对象的属性可以在手册里得到:
WinCC Comfort/Advanced V12.0 SP1 > 可视化过程 (Comfort / Advanced) > 运行脚本和系统函数 > 参考 > VB 脚本 > VBS Object Model > 属性
9. 如何确定当前画面的编号和画面名称?
例子 01 通过脚本的返回值输出画面的完整名称。
画面名称:
Screen_01
脚本名称:
Script_01
脚本类型:
Function
返回值:
“字符串”变量
10. 打开 "Script_01" 脚本
11. Script_01 = HmiRuntime.BaseScreenName
12. 图. 01
13.
14. 结果
15. 脚本返回值为 "Screen_01"
16. 例程 02 画面名称“split”。只有分隔符 "_" 之前的字符/名称作为脚本返回值输出。
画面名称:
02_MachineData
脚本名称:
Script_02
脚本类型:
Function
返回值:
"字符串" 变量
17.
18. 打开 "Script_02"脚本
Dim StrScreenNumber
StrScreenNumber = Split(HmiRuntime.BaseScreenName, "_")
Script_02 = StrScreenNumber(0) '返回值
结果
脚本返回值为 "02"
注意
不能使用脚本通过画面有关的“属性”直接读取画面名称/编号。
也可以使用“画面编号”区域指针。
19. 如何在脚本里使用HMI UDT 变量?
可以使用"SmartTags"访问数据类型是HMI UDTs的元素变量(用户定义的数据类型)。
例如
HMI UDT名称
UDT_1
数据类型UDT_1变量名称
Var_1
元素名称
Element_1
20. SmartTags("Var_1.Element_1")
21. 注意
这实例适用于在项目中创建的库类型 HMI UDT。不能直接访问库类型。
22. 如何在脚本中从密码列表或用户视图中读取用户密码?
由于安全原因这个功能在 WinCC (TIA Portal) 中不能实现。
23. 如何在运行时选择一个对象(例如输入输出域)?
可以对一个对象使用“激活”功能。
画面名称
Screen_1
脚本类型
Sub
IO域的对象名称
IOField_1
24. 打开脚本。
25. HMIRuntime.Screens("Screen_1").ScreenItems("IOField_1").Activate
更多信息
下面的常见问题对 WinCC Advanced中关于脚本的各种问题进行了解答。.
· " 在 WinCC (TIA Portal)中是否有VBS信息和 VBS编程帮助?"
Entry ID: !59885894!
· "在 WinCC Runtime Professional V11 和更高的版本中用新变量分离趋势画面中的趋势如何使用 C或 VB脚本来实现?"
Entry ID: !55741262!
· "如何在 WinCC Runtime Advanced版本中使用脚本来访问SQL数据库?"
Entry ID: !61883659!
· "在 SIMATIC WinCC (TIA Portal)精致面板中如何使用脚本给文件写数据或从文件读取数据?"
Entry ID: !59604194!
· "如何在WinCC Comfort a和WinCC Advanced中使用脚本来组态动态对象?"
Entry ID: !53752382!