首页 » 智能家居 » TIA Portal WinCC 运用VBS脚本调试的21个实用技巧

TIA Portal WinCC 运用VBS脚本调试的21个实用技巧

金螳螂建筑装饰股份通讯 2025-01-06 0

扫一扫用手机浏览

文章目录 [+]

前面的文章中,我们已经从TIA Portal WinCC,到 WinCC Classic,再到WinCC OA的架构,选型到与MES通讯,工业数据桥,虚拟化等通通聊了一遍(详细见文末)

但是不论是利用TIA Portal WinCC 、WinCC Classic还是WinCC OA,脚本调试、各种通讯总是必不可少,还记得在前面的文章:

TIA Portal WinCC 运用VBS脚本调试的21个实用技巧 TIA Portal WinCC 运用VBS脚本调试的21个实用技巧 智能家居

自动化早已不是原来的自动化,为何你却还是原来的你

TIA Portal WinCC 运用VBS脚本调试的21个实用技巧 TIA Portal WinCC 运用VBS脚本调试的21个实用技巧 智能家居
(图片来自网络侵删)

我就提醒大家多学习编程和网络干系知识,实在随着IT与OT的不断领悟,纵然你还是做的自动化,但是却与IT的界线越来越模糊,自动化的你们正在走进IT的同时,IT也正在向我们走来,本日的自动化,早已经不是纯挚自动化~

本日我们就来聊一聊TIA Portal WinCC VBS脚本调试的一些利用技巧,如果对前面推出的其它文章感兴趣的请参看文末往期推举~

1、为什么一个由内部变量的 “数值改变” 事宜触发的脚本不被实行

如果利用一个内部变量调用其余一个内部变量,以此,例如被调用的变量又去实行一个脚本(比如,根据变量变革),此时一个安全机制会阻挡这个功能被实行。

此安全功能是为了阻挡连续的实行。

例如

在内部变量 “HMI_Tag_01” 属性下,“变动数值”事宜去置位内部变量 “HMI_Tag_02” 中的某一位。

同时内部变量 “HMI_Tag_02” 的“变动数值”事宜下又调用一个脚本。

结果:这个脚本不会被实行。

办理办法

利用和掌握器通讯的外部变量。
请把稳,通过利用外部变量可以规避上述安全机制。
在项目运行时可能会产生问题。

2、如何在一个脚本中访问数组中的元素?

对数组元素的访问是通过数组的名称和数组中由括号分隔的数组索引来实现的:“SmartTags("Array Name")(array index) ”

例如

访问数组 "DB10_HMI_Data" 的第二个元素 :

Dim Tag_01 'Internal script tag

Tag_01 = SmartTags("DB10_HMI_Data")(2)

把稳

利用下面语法访问字符串类型数组中的元素:

Dim Tag_01 'Internal script tag

Tag_01 = SmartTags("DB10_HMI_Data[2]")

例如

通过一个循环描述数组 "DM10_HMI_Data" 的第一个元素至第十一个元素

Dim Tag_01

For Tag_01=0 to 10

SmartTags("DB10_HMI_Data")(Tag_01) = 5

Next

局部脚本的数组(该数组仅在此脚本中可用)可以利用同样的办法查询,对付多维数组,各个维度通过一个逗号分别隔。

例如

访问二维数组变量 "HMI_Data" 没有连接掌握器。

Dim HMI_Data(10,10)

Dim Tag_01

Tag_01 = HMI_Data(0, 5)

把稳

当利用掌握器连接的数组元素时,推举在脚本开始前将他们赋值给脚本内部变量,然后再利用内部变量进行其他事情。
结束脚本前,将内部变量赋值给数组元素。

3、如何在掌握器和脚本之间有效的赋值过程变量数组?

从掌握器到一个脚本赋值,过程变量数组须要在一个循环中将数组元素一个一个赋值,参考示例。
然而,也可以通过一个大略的指令把局部脚本的数组的值赋给过程变量数组。

例如

把掌握器的数组 "CPU_Array" 的值赋给内部数组 "local_array" 和 把内部数组 "local_array" 的值赋给掌握器的数组 "CPU_Array"

Dim local_array(10)

Dim i

...

' Copy from the CPU to the script:

For i = 0 To 9

local_array(i) = SmartTags("CPU_Array")(i)

Next

...

' Copy back to the CPU:

SmartTags("CPU_Array") = local_array

把稳

利用数组可能导致较高的通信负载和数据不一致。

4、如何访问动态库 ( "动态链接库 ",DLLs)?

WinCC Comfort 和 Advanced 不能访问 DLLs。

WinCC Professional在用户定义的C函数里可以调用DLL函数 (DLL = Dynamic Link Library) 。

5、如何用VBS脚本确定鼠标当前的位置?

为了读取当前鼠标的位置,须要访问操作系统的 API (Application Programming Interface) 。

VBS 不支持通过 DLLs 访问操作系统的 API 。

6、为什么不能在脚本里利用 “ MsgBox ” 命令?

“MsgBox” 命令不能用于 WinCC Comfort 和 WinCC Advanced 版本是由于安全的缘故原由。
“MsgBox”的弹出显示可能会覆盖掉元素操作,比如:阻挡设备的快速操作。
此外,框可能会阻挡脚本的进一步实行。

办理办法

可以利用系统函数 ShowSystemAlarm。

7、如何在一个脚本中利用十六进制符号给变量赋值?

在脚本编辑器中把字符组合 "&h" 作为个十六进制常数的标识。

例如

Dim Tag_01

Tag_01 = &h45E ' Corresponds to the decimal value "1118"

8、如何在脚本里显示或隐蔽各个层级?

利用层是 WinCC (TIA Portal) 开拓系统的一个功能。
层只能在这里组态及显示隐蔽。

这个功能在操作面板或 PC 的运行系统中不可用。
以是不能用脚本显示或隐蔽“层”。

办理办法

在 “ 属性>动画>可见性 ” 组态变量,根据变量值掌握干系工具的显示或隐蔽。

9、如何在脚本中合并字符串?

可以利用 “ & ” 来合并字符串:

例如

将 "Tag_Text_01", "Tag_Text_02" 和 "Tag_Text_03" 合并成新字符串 "Tag_01"

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) 将相应的表达式转换为“字符串”类型。
这样在连接字符串转换之前可以避免运行时涌现缺点。

10、在脚本中如何在单独的字符串之间插入一个通配符(空格)?

为了在两个文本之间插入任意数量的空格,可以利用两个引号 " "。
“空格”的数量取决于两个引号间的间隔 " "。

连接下一个字符须要再次利用连接操作 "&"。

例如

将字符串 "Tag_Text_01", "Tag_Text_02" 和 "Tag_Text_03" 还有空格组合成一个新的字符串 "Tag_01"

Dim Tag_01, Tag_Text_01, Tag_Text_02, Tag_Text_03

Tag_01 = Tag_Text_01 & " " & Tag_Text_02 & " " & Tag_Text_03

11、如何组态带返回值和参数的脚本?

脚本类型必须是 “ Function ” 才可以有返回值。
以是,请在TIA Portal 中添加新 VB 函数的 "Properties > General > Settings" 类型的下拉列表框中选择 “Function” 。

在 “ Parameter ” 表格中您以创建脚本变量用来将内部变量或掌握器变量传入在脚本须要的时候。

组态函数返回值,在脚本中为脚本的名称分配表达式。

例如

组态函数类型,。
按下面所示,在TIA Portal 组态名称为 “ VBFunction_1 ” 脚本函数的参数和返回值:

图. 01

例如,

脚本在按钮的 “ Click ” 的事宜中被利用。

图. 02

在脚本中利用 "HMI_Tag_1" 的值赋给"Parameter_1" ,"HMI_Tag_2" 的值赋给"Parameter_2" ,必须有一行脚本定义了返回值。

例如

下面的例子的返回值是两个传入参数的乘积:

VB_Function_1= Parameter_1 Parameter_2

"VB_Function_1" 是这个函数的名字,在实行这个脚本后,"HMI_Tag_3" 得到这个函数的返回值是 "HMI_Tag_1" "HMI_Tag_2" 。

把稳

定义一个 "by reference" 的参数 ,这意味着作为 "By_Ref " 参数,仅对脚本中定义的和引用的变量产生影响,对 HMI 内部变量或者掌握器变量不起浸染。

12、什么能导致“最大嵌套深度到达”被触发?

如果太多的脚本在结束前调用自己或者调用其他脚本,会引起到达最大嵌套深度。

办理方法

检讨脚本过程的处理,如有必要,减少脚本的嵌套。

13、如何确定当前画面的编号和画面名称?

通过预定义 VB 函数 “HmiRuntime.BaseScreenName ” 的返回值供应了当前画面的名字。

把稳

不能利用脚本通过干系画面的“属性”直接读取画面名称/编号。

也可以利用“画面编号”区域指针。

14、如何在脚本中利用多路复用变量?

多路复用变量不能用在脚本中。

15、如何在脚本里利用 HMI UDT 变量?

可以利用“SmartTags” 访问数据类型是HMI UDT的变量元素(用户定义的数据类型)。

例如

访问 UDT 变量 " Recipe " 的元素 "x"

SmartTags("Recipe.x")

把稳

这适用于在项目中已创建库类型 HMI UDT的实例。
不能直接访问库类型。

16、如何在脚本中保存变量值当他们在两个脚本之间调用?在两个脚本间相互通报数据须要利用全局变量。
全局变量可以是 HMI 或者 PLC 变量。

脚本中定义的变量总是在脚本结束时删除。

17、如何通过脚本修正文本域的内容?

文本域的文本在运行时可以通过修正相应的工具属性而改变。

例如

在画面 "MachineData" 中,将文本 "NewText" 分配给 文本域 "Text_Field_01" :

Dim obj

Set obj = HmiRuntime.Screens("MachineData").ScreenItems("Text_Field_01")

obj.Text = "NewText"

把稳

文本的变革只是“暂时”的。
当屏幕变动后这个被修正后的文本将被组态的文本覆盖。

18、如何在脚本中从密码列表或用户视图中读取用户密码?

由于安全缘故原由这个功能在 WinCC (TIA Portal) 中不能实现。

19、如何通过脚本关闭 WinCC 运行系统和关闭PC和面板?

通过系统函数 “StopRuntime” 可以关闭 WinCC 运行系统和操作系统 。

可以通过修正 "StopRuntime" 函数的参数办法选择仅关闭运行系统或者将运行系统和操作系统都关闭。

ParameterMeaning

0 = hmiStopRuntime

Ends on the Runtime

1 = hmiStopRuntimeAndOperationSystem

Ends both the Runtime and the OS

例如

StopRuntime hmiStopRuntime

StopRuntime 1

把稳

Windows-based 面板的操作系统不能通过这种办法关闭。

20、如何在脚本中访问一个画面或者模板的工具?

组态 “Runtime” 工具的属性 “ ActiveScreen ”,可以找到画面上组态工具的名字和修正干系的属性。

例如

把激活屏幕中的工具 "Circle_01" 设置为不显示

HmiRuntime.ActiveScreen.ScreenItems("Circle_01").Visible=False

把稳

在画面中被组态工具必须有唯一的名字。
工具的属性修正仅是暂时的,当屏幕变动后视图利用组态时的配置。

21、如何在运行时选择一个画面对象(例如输入输出域)?

得到一个工具的焦点通过 "Activate" 功能,文本输入会直接自动指向那个工具。

例如

得到屏幕 "Screen_1" 的 输入/输出域 "IOField_1" 的焦点

HMIRuntime.Screens("Screen_1").ScreenItems("IOField_1").Activate

来源:自动化工程与技能

标签:

相关文章

“智能化”英文单词intelligentize的翻译过程

智能化的定义为:智是聪慧(核心为数据),能是能力(核心是掌握),化是过程。“智能化观点”的核心体系:1、属于仿生学范畴——通过学习...

智能家居 2025-01-14 阅读0 评论0