1 为什么通过一个内部变量的“数值变化”事件所触发的脚本不执行?
如果使用一个内部变量调用另一个内部变量,例如,数值变化时,执行一个脚本。安全机制会防止该脚本的执行。
安全功能防止连续的循环。
举例
内部变量“HMI_Tag_01”的属性里, 在“更改数值”事件下对内部变量“HMI_Tag_02”进行置位。
在内部变量“HMI_Tag_02”的“更改数值”事件下调用一个脚本。
结果: 脚本不执行。
注意
因为这个循环断路器,用户只能依靠直接输入值来改变内部变量的值触发脚本的执行。
补救
使用控制器的一个外部变量。
2 在脚本中如何访问数组中的单个元素?
数组中的单个元素可以通过数组名并指明数组位置的方法进行访问。 -> SmartTags(“数组名”)(数组位置)
举例 (数组型外部变量)
Dim Tag_01 ‘内部脚本变量
Tag_01 = SmartTags(“DB10_HMI_Data”)(2)
局部脚本数组(该数组只在脚本中可用)相同的选择方法。如果是多维局部数组,使用逗号分隔单个数组的维度。
举例 (内部数组变量)
Dim HMI_Data(10,10) ‘内部脚本数组变量
Dim Tag_01 ‘内部脚本变量
Tag_01 = HMI_Data(0, 5)
注意
当使用“具有控制器连接的数组”,建议在脚本开始处复制这些数组到“内部脚本变量”,在后续脚本编程中以内部变量使用这些数组。
在脚本结尾处,数值必须从内部变量写回到外部数组变量中。
3 如何高效地在控制器和本地脚本 之间反复拷贝过程变量数组?
将过程变量数组拷贝到脚本中,需要逐个拷贝数组元素,例如通过循环。而将本地脚本数组拷贝到过程变量数组,可以直接通 过一个指令。
举例
‘CPU_Array 是过程变量数组
Dim local_array(10)
Dim i
…
‘从 CPU 拷贝到脚本:
For i = 0 To 9
local_array(i) = SmartTags(“CPU_Array”)(i)
Next
…
‘ 拷贝回 CPU:
SmartTags(“CPU_Array”) = local_array
4 在 WinCC flexible 中如何访问动态链接库?
在 WinCC flexible 中无法使用动态链接库(DLL)。
5 如何确定当前鼠标的位置?
为了读取当前鼠标的位置,必须访问操作系统的 API (应用程序访问接口)。
VB 脚本不支持通过动态链接库访问操作系统的 API 。作为替代,当前鼠标的位置可以通过自行编写的能够访问操作系统 API 的 ActiveX 控件读取。
注意
在 WinCC flexible 中使用的 ActiveX 控件必须在“开放程序接口平台”(OPP)上创建。
6 为什么通过 WinCC flexible “MsgBox” 命令不能在脚本中使用?
由于安全因素 “MsgBox” 命令在 WinCC flexible 中被禁用。
7 在脚本中如何将十六进制数赋给变量?
十六进制数的数值在 WinCC flexible 脚本编辑器中用前缀 “&h” 进行转换。
实例
Dim Tag_01
Tag_01 = &h45E ‘定义十进制数值“1118”
8 如何在脚本中显示或隐藏单个图层?
使用图层工作是 WinCC flexible 工程软件开发系统的一项功能。这些图层在 WinCC flexible 工程软件中作为组态帮助能够被显示或隐藏。这项功能在 WinCC flexible 运行系统中是不可用的。
补救
在相应对象的“属性>动画>可见性”根据变量值改变对象的可见和隐藏。
9 在脚本中如何连接字符串?
连接符 “&” 能够用于将字符串连接起来。
实例
Dim Tag_01, Tag_Text_01, Tag_Text_02, Tag_Text_03
Tag_01 = Tag_Text_01 & Tag_Text_02 & Tag_Text_03
10 在脚本中两个字符串之间如何插入一个通配符(空格)?
为了在两个文本间插入一个空格,例如,使用两个引号“ ”。空格的数量取决于引号“ ”之间的距离。再次使用连接运算符“&”链接下一个字符。
实例 1
Dim Tag_01, Tag_Text_01, Tag_Text_02, Tag_Text_03
Tag_01 = Tag_Text_01 & ” “ & Tag_Text_02 & ” “ & Tag_Text_03
实例 2
文本中插入一个控制变量作为索引“machine index”,通过脚本输出报警消息。
ShowSystemAlarm “Machine” & “_” & SmartTags(“Tag_MachineIndex”) & ” ” & “must be checked”
结果
Machine_15 must be checked
11 在脚本中如何组态一个返回值?
“函数”类型脚本必须有返回值。
在脚本的“属性>常规>设置”标签,下拉菜单选择“函数”。
在“参数”菜单项定义哪个变量传送到脚本中。
组态将已分配的一个变量的值或者动作作为当前脚本的返回值。
当通过一个按钮调用脚本,参数放置在属性里(“Param_01” 和 “Param_02”),附加给一个变量作为“返回值”参数。
12 如何通过脚本改变线性对象的长度?
在线性对象中“高度”和“宽度”参数是只读的。
获取水平和垂直位置,可以使用矩形替代线性对象并通过在脚本中的属性动态更新。
13 什么原因可导致系统达到它的最大嵌套层数?
例如,如果一个脚本在另一个脚本中通过数值变化被二次调用,根据这样原则的调用会达到最大的嵌套层数。
一个反复调用自身的脚本,在被一个递归脚本调用时这样现象同样可以很快的达到。
补救
检查脚本的处理,如果必要,减少脚本的嵌套。