VBS 脚本可以用在 WINCC Comfort/Advanced Runtime。下面就是一些很实用技巧,希望对大家有所帮助! 1、为什么一个由内部变量的 “数值改变” 事件触发的脚本不被执行?如果使用一个内部变量调用另外一个内部变量,因此,例如被调用的变量又去执行一个脚本(比如,根据变量变化),此时一个安全机制会阻止这个功能被执行。 此安全功能是为了阻止连续的执行。 2、如何在一个脚本中访问数组中的元素?对数组元素的访问是通过数组的名称和数组中由括号分隔的数组索引来实现的:“SmartTags("Array Name")(array index) ” 访问数组 "DB10_HMI_Data" 的第二个元素 :
注意
例如 通过一个循环描述数组 "DM10_HMI_Data" 的第一个元素至第十一个元素
局部脚本的数组(该数组仅在此脚本中可用)可以使用同样的方式查询,对于多维数组,各个维度通过一个逗号分隔开。 访问二维数组变量 "HMI_Data" 没有连接控制器。
注意 3、如何在控制器和脚本之间有效的赋值过程变量数组?从控制器到一个脚本赋值,过程变量数组需要在一个循环中将数组元素一个一个赋值,参考示例。然而,也可以通过一个简单的指令把局部脚本的数组的值赋给过程变量数组。 把控制器的数组 "CPU_Array" 的值赋给内部数组 "local_array" 和 把内部数组 "local_array" 的值赋给控制器的数组 "CPU_Array"
注意 4、如何访问动态库 ( "动态链接库 ",DLLs)?WinCC Comfort 和 Advanced 不能访问 DLLs。 5、如何用VBS脚本确定鼠标当前的位置?为了读取当前鼠标的位置,需要访问操作系统的 API (Application Programming Interface) 。 6、为什么不能在脚本里使用 “ MsgBox ” 命令?“MsgBox” 命令不能用于 WinCC Comfort 和 WinCC Advanced 版本是由于安全的原因。 “MsgBox”的弹出显示可能会覆盖掉元素操作,比如:阻止设备的快速操作。此外,消息框可能会阻止脚本的进一步执行。 7、如何在一个脚本中使用十六进制符号给变量赋值?在脚本编辑器中把字符组合 "&h" 作为个十六进制常数的标识。
8、如何在脚本里显示或隐藏各个层级? 9、如何在脚本中合并字符串?可以使用 “ & ” 来合并字符串: 将 "Tag_Text_01", "Tag_Text_02" 和 "Tag_Text_03" 合并成新字符串 "Tag_01" Dim Tag_01, Tag_Text_01, Tag_Text_02, Tag_Text_03 10、在脚本中如何在单独的字符串之间插入一个通配符(空格)?为了在两个文本之间插入任意数量的空格,可以使用两个引号 " "。“空格”的数量取决于两个引号间的距离 " "。 连接下一个字符需要再次使用连接操作 "&"。 例如 将字符串 "Tag_Text_01", "Tag_Text_02" 和 "Tag_Text_03" 还有空格组合成一个新的字符串 "Tag_01" Dim 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" 是这个函数的名字,在执行这个脚本后,"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") 注意 16、如何在脚本中保存变量值当他们在两个脚本之间调用?在两个脚本间相互传递数据需要使用全局变量。全局变量可以是 HMI 或者 PLC 变量。脚本中定义的变量总是在脚本结束时删除。 17、如何通过脚本修改文本域的内容?文本域的文本在运行时可以通过修改相应的对象属性而改变。 例如 在画面 "MachineData" 中,将文本 "NewText" 分配给 文本域 "Text_Field_01" :
注意 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 例如 注意 20、如何在脚本中访问一个画面或者模板的对象?组态 “Runtime” 对象的属性 “ ActiveScreen ”,可以找到画面上组态对象的名字和修改相关的属性。 例如 把激活屏幕中的对象 "Circle_01" 设置为不显示
注意 21、如何在运行时选择一个画面对象(例如输入输出域)?获得一个对象的焦点通过 "Activate" 功能,文本输入会直接自动指向那个对象。 例如 获得屏幕 "Screen_1" 的 输入/输出域 "IOField_1" 的焦点
|
/1
|手机版|免责声明|本站介绍|工控课堂
( 沪ICP备20008691号-1 )
GMT+8, 2025-12-22 21:01 , Processed in 0.097406 second(s), 23 queries .
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.