找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2438|回复: 17

博途中WinCC VBS 脚本的基础用法

 火... [复制链接]
  • 打卡等级:即来则安
  • 打卡总天数:29
  • 打卡月天数:1
  • 打卡总奖励:7791
  • 最近打卡:2025-12-13 17:25:16

2540

主题

1355

回帖

2万

积分

管理员

积分
21304
发表于 2021-6-19 20:40:46 | 显示全部楼层 |阅读模式
VBS 脚本能够用在 WINCC Comfort/Advanced Runtime。下面就是一些很适用技巧,希望对大家有所协助!
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


工控课堂 www.gkket.com

0

主题

113

回帖

320

积分

注册会员

积分
320
发表于 2021-6-19 20:40:47 | 显示全部楼层
看到这帖子真是高兴!
工控课堂 www.gkket.com

0

主题

174

回帖

541

积分

中级会员

积分
541
发表于 2021-6-20 01:41:32 | 显示全部楼层
在遇到你之前我对人世间是否有技术大佬保有怀疑,现在我是彻底被你征服了
工控课堂 www.gkket.com

0

主题

95

回帖

138

积分

新手上路

积分
138
发表于 2025-11-13 02:20:31 | 显示全部楼层
蹲一波同款,有没有姐妹 / 兄弟推荐?
工控课堂 www.gkket.com

0

主题

88

回帖

137

积分

新手上路

积分
137
发表于 2025-11-13 02:46:12 | 显示全部楼层
我先占个楼,等下再慢慢看~
工控课堂 www.gkket.com

0

主题

104

回帖

157

积分

新手上路

积分
157
发表于 2025-11-13 03:19:18 | 显示全部楼层
这评论区卧虎藏龙,个个都是人才!
工控课堂 www.gkket.com

0

主题

99

回帖

243

积分

注册会员

积分
243
发表于 2025-11-13 03:45:27 | 显示全部楼层
已转发给朋友,一起感受这份快乐~
工控课堂 www.gkket.com

8

主题

454

回帖

2305

积分

高级会员

积分
2305
发表于 2025-11-13 03:48:22 | 显示全部楼层
说得对!狠狠赞同,没毛病~
工控课堂 www.gkket.com

0

主题

66

回帖

220

积分

注册会员

积分
220
发表于 2025-11-13 03:49:07 | 显示全部楼层
评论区人才辈出,笑到停不下来😂
工控课堂 www.gkket.com

0

主题

90

回帖

136

积分

新手上路

积分
136
发表于 2025-11-13 03:49:56 | 显示全部楼层
路过混个脸熟,顺便为优质内容打 call~
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-22 19:22 , Processed in 0.372780 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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