这个常见问题对WinCC Comfort 和 WinCC Advanced 中VB脚本编程语言的使用技巧作出了响应。
WinCC Comfort/Advanced 脚本语言
在WinCC Comfort/Advanced中使用VB脚本
WinCC Advanced V13.0 手册 (条目号: 91479053)包含相关信息如下:
一个脚本是否执行取决于使用的运行站或操作员面板。
在以上提及到的手册中关于设备相关性的更多的信息可以参看
- "可视化过程 >使用系统函数和运行系统脚本> 参考 >函数列表 > 设备相关"
- 为什么一个由内部变量的“数值改变”事件触发的脚本不被执行?
如果使用一个内部变量调用另外一个内部变量,以此,例如被调用的变量又去执行一个脚本(比如,根据变量变化),此时一个安全机制会阻止这个功能被执行。
此安全功能是为了阻止连续的执行。例如
在内部变量“HMI_Tag_01”属性下,“更改数值”事件去置位内部变量“HMI_Tag_02”中的某一位。
同时内部变量“HMI_Tag_02”的“更改数值”事件下又调用一个脚本。
结果:这个脚本不会被执行。解决办法
使用和控制器通讯的外部变量。请注意,通过使用外部变量可以规避上述安全机制。在项目运行时可能会产生问题。 - 如何访问动态链接库(DLL)?
WinCC Professional在用户定义的C函数里可以调用DLL函数(DLL=动态链接库)。
WinCC Professional V13.0 >可视化过程 >使用系统函数和运行系统脚本 >用户自定义函数 > 创建用户定义的C函数 > 从用户自定义的C函数调用DLL函数 . - 如何用VBS脚本确定鼠标当前的位置?
为了读取当前鼠标的位置,需要访问操作系统的API(应用程序接口)。
VBS脚本不支持通过DLL访问操作系统的API。
- 为什么不能在脚本里使用“MsgBox”命令?
"MsgBox"命令不能用于 WinCC Comfort 和 WinCC Advanced 版本是由于安全的原因。Box的弹出显示可能会覆盖掉元素操作比如,阻止设备的快速操作。此外,消息框可能会阻止脚本的进一步执行。
解决办法
另外可以使用系统函数ShowSystemAlarm。 - 如何在脚本里显示或隐藏各个层级?
使用层工作是 WinCC (TIA Portal) 开发系统的一个功能。层只能在这里组态及显示隐藏。
这个功能在操作面板或 PC 运行系统中不可用。所以不能用脚本显示或隐藏“层”。解决办法
在“属性>动画>视图>可见性”组态变量,根据变量值控制相关对象的显示或隐藏。
- 如何在脚本中合并字符串?
可以使用“&”来合并字符串:
例如
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)将相应的表达式转换为“字符串”类型。这样在连接字符串转换之前可以避免运行时出现错误。 - 在脚本中如何在单独的字符串之间插入一个通配符(空格)?
例如,为了在两个文本之间插入空格,可以使用两个引号 " "。
“空格”的数量取决于两个引号间的距离 " "。
连接下一个字符需要再次使用 "&"。例 1
Dim Tag_01, Tag_Text_01, Tag_Text_02, Tag_Text_03
Tag_01 = Tag_Text_01& " "&Tag_Text_02 &" "&Tag_Text_03 - 如何在运行时改变对象的属性(颜色,长度等)? 如何通过脚本获取对象的属性可以在手册里得到:
WinCC Comfort/Advanced V13.0 SP1 > 可视化过程 (Comfort / Advanced) >使用系统函数和运行系统脚本 > 参考 > VB 脚本 > VBS Object Model > 属性
- 如何确定当前画面的编号和画面名称?
例子 01 通过脚本的返回值输出画面的完整名称。
画面名称: Screen_01 脚本名称: Script_01 脚本类型: Function 返回值: “字符串”变量 创建"Script_01" 脚本
函数返回值的变量名称必须 与函数名称相同. (1)
设置脚本类型为 "函数". (2)Script_01 = HmiRuntime.BaseScreenName
图. 01
结果
脚本返回值为 "Screen_01"
例程 02 画面名称“split”。只有分隔符 "_" 之前的字符/名称作为脚本返回值输出。
画面名称: 02_MachineData 脚本名称: Script_02 脚本类型: Function 返回值: "字符串" 变量 创建"Script_02"脚本
Dim StrScreenNumber
StrScreenNumber = Split(HmiRuntime.BaseScreenName, "_")
Script_02 = StrScreenNumber(0) '返回值结果
脚本返回值为 "02"注意
不能使用脚本通过相关画面的“属性”直接读取画面名称/编号。
也可以使用“画面编号”区域指针。 - 如何在脚本里使用HMI UDT 变量?
可以使用"SmartTags"访问数据类型是HMI UDTs的元素变量(用户定义的数据类型)。
例如
Element_1
HMI UDT名称 UDT_1 数据类型UDT_1的变量名称 Var_1 元素名称 脚本内容::
SmartTags("Var_1.Element_1")
注意
这适用于在项目中已创建库类型 HMI UDT的实例。不能直接访问库类型。 - 如何在脚本中从密码列表或用户视图中读取用户密码?
由于安全原因这个功能在 WinCC (TIA Portal) 中不能实现。
- 如何在运行时选择一个对象(例如输入输出域)?可以对一个对象使用“激活”功能。
画面名称 Screen_1 脚本类型 Sub IO域的对象名称 IOField_1 脚本内容:
HMIRuntime.Screens("Screen_1").ScreenItems("IOField_1").Activate
更多信息
下面的常见问题对 WinCC Advanced中关于脚本的各种问题进行了解答。.
- " 在 WinCC (TIA Portal)中是有哪些VBS信息和 VBS编程帮助?"
条目号: 59885894 - "在 WinCC Runtime Professional V11 和更高的版本中用新变量分离趋势画面中的趋势如何使用 C或 VB脚本来实现?"
条目号: 55741262 - "如何在 WinCC Runtime Advanced版本中使用脚本来访问SQL数据库?"
条目号: 61883659 - "在 SIMATIC WinCC (TIA Portal)精致面板中如何使用脚本向文件写数据或从文件读取数据?"
条目号: 59604194 - "如何在WinCC Comfort 和WinCC Advanced中使用脚本来组态动态对象?"
条目号: 53752382
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc322121.html