- 为什么通过一个内部变量的“数值变化”事件所触发的脚本不执行?
如果使用一个内部变量调用另一个内部变量,例如,数值变化时,执行一个脚本。安全机制会防止该脚本的执行。
安全功能防止连续的循环。举例
内部变量“HMI_Tag_01”的属性里, 在“更改数值”事件下对内部变量“HMI_Tag_02”进行置位。
在内部变量“HMI_Tag_02”的“更改数值”事件下调用一个脚本。
结果: 脚本不执行。注意
因为这个循环断路器,用户只能依靠直接输入值来改变内部变量的值触发脚本的执行。补救
使用控制器的一个外部变量。 - 在脚本中如何访问数组中的单个元素?
数组中的单个元素可以通过数组名并指明数组位置的方法进行访问。-> 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)
注意
当使用“具有控制器连接的数组”,建议在脚本开始处复制这些数组到“内部脚本变量”,在后续脚本编程中以内部变量使用这些数组。
在脚本结尾处,数值必须从内部变量写回到外部数组变量中。 - 如何高效地在控制器和本地脚本 之间反复拷贝过程变量数组?
将过程变量数组拷贝到脚本中,需要逐个拷贝数组元素,例如通过循环。而将本地脚本数组拷贝到过程变量数组,可以直接通 过一个指令。举例
'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注意
使用数组将导致较高的通信负荷和数据不一致。请参考 WinCC flexible系统手册在条目中 18796010Array Basics的说明. - 在 WinCC flexible 中如何访问动态链接库?
在 WinCC flexible 中无法使用动态链接库(DLL)。 - 如何确定当前鼠标的位置?
为了读取当前鼠标的位置,必须访问操作系统的 API (应用程序访问接口)。
VB 脚本不支持通过动态链接库访问操作系统的 API 。作为替代,当前鼠标的位置可以通过自行编写的能够访问操作系统 API 的 ActiveX 控件读取。注意
在 WinCC flexible 中使用的 ActiveX 控件必须在“开放程序接口平台”(OPP)上创建。 - 为什么通过 WinCC flexible “MsgBox” 命令不能在脚本中使用?
由于安全因素 “MsgBox” 命令在 WinCC flexible 中被禁用。 - 在脚本中如何将十六进制数赋给变量?
十六进制数的数值在 WinCC flexible 脚本编辑器中用前缀 “&h” 进行转换。实例
Dim Tag_01Tag_01 = &h45E '定义十进制数值“1118”
- 如何在脚本中显示或隐藏单个图层?
使用图层工作是 WinCC flexible 工程软件开发系统的一项功能。这些图层在 WinCC flexible 工程软件中作为组态帮助能够被显示或隐藏。这项功能在 WinCC flexible 运行系统中是不可用的。补救
在相应对象的“属性>动画>可见性”根据变量值改变对象的可见和隐藏。 - 在脚本中如何连接字符串?
连接符 "&" 能够用于将字符串连接起来。实例
Dim Tag_01, Tag_Text_01, Tag_Text_02, Tag_Text_03Tag_01 = Tag_Text_01 & Tag_Text_02 & Tag_Text_03
- 在脚本中两个字符串之间如何插入一个通配符(空格)?
为了在两个文本间插入一个空格,例如,使用两个引号“ ”。空格的数量取决于引号“ ”之间的距离。再次使用连接运算符“&”链接下一个字符。实例 1
Dim Tag_01, Tag_Text_01, Tag_Text_02, Tag_Text_03Tag_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 - 在脚本中如何组态一个返回值?
“函数”类型脚本必须有返回值。
在脚本的“属性>常规>设置”标签,下拉菜单选择“函数”。
在“参数”菜单项定义哪个变量传送到脚本中。组态将已分配的一个变量的值或者动作作为当前脚本的返回值。
脚本名称: Sample_01 脚本类型: Function 参数: Param_01, Param_02 返回值: Tag of the "Integer" type 打开“Sample_01”脚本。
Dim Result Result = Param_01 +Param_02 Sample_01 = Result '这里“Sample_01” 被赋值为计算的结果-->返回值 当通过一个按钮调用脚本,参数放置在属性里(“Param_01” 和 “Param_02”),附加给一个变量作为“返回值”参数。
- 如何通过脚本改变线性对象的长度?
在线性对象中“高度”和“宽度”参数是只读的。
获取水平和垂直位置,可以使用矩形替代线性对象并通过在脚本中的属性动态更新。关于此项的更多信息可在条目号 24249449 中获得。
- 什么原因可导致系统达到它的最大嵌套层数?
例如,如果一个脚本在另一个脚本中通过数值变化被二次调用,根据这样原则的调用会达到最大的嵌套层数。
一个反复调用自身的脚本,在被一个递归脚本调用时这样现象同样可以很快的达到。补救
检查脚本的处理,如果必要,减少脚本的嵌套。 - 如何确定当前画面号和画面名称?
在实例 01 中, 通过脚本的返回值输出完整的画面名称。
画面名称: Screen_01 脚本名称: Script_01 脚本类型: Function 返回值: Tag of the "String" type 打开 "Script_01" 脚本
Dim Obj, StrScreenName
Set Obj = HmiRuntime
StrScreenName = Obj.BaseScreenName
Script_01 = StrScreenName 'Return value'结果
名称的返回值是“Screen_01”在实例 02中,画面名称被“分割”。只有下横线“_”前的字母/名称可作为脚本的返回值输出。
画面名称: 02_MachineData 脚本名称: Script_02 脚本类型: Function 返回值: Tag of the "String" type 打开 "Script_02" 脚本
Dim Obj, StrScreenNumber
Set Obj = HmiRuntime
StrScreenNumber = Split(Obj.BaseScreenName, "_")
Script_02 = StrScreenNumber(0) 'Return value'结果
名称的返回值是“02”。注意
- 不能通过相关画面的“属性”直接在“脚本”中输出画面名称/编号。
- 另外也可使用“画面编号”区域指针。通过组态一个具有相同地址区域的变量作为区域指针,那么画面编号能够通过控制器读出。在 这个选项中,需要考虑总线波特率和变量的采集周期。
- 如何在脚本中使用多重变量?
指针变量不能在脚本中使用。 - 如何在脚本中使用结构变量?
结构变量不能在脚本中使用。 - 如何在静态变量中保存信息当下一次脚本被调用时能够再次可用?
在脚本结束后被保留的信息必须保存在全局变 量中。 查看下表:
声明 有效性
脚本中
脚本 WinCC flexible 项目 控制器 外部变量 X X X 全局 内部变量 X X -- 脚本变量 X -- -- 局部 - 脚本中如何改变文本域中的文本?
文本域中的文本能够通过脚本改变。注意文本的改变只能是“临时的”。画面切换后已改变的文本会被原组态的文本覆盖。
画面名称: MachineData 脚本类型: Sub 文本域的画面名称: Text_Field_01 打开编写的脚本
Dim obj
Set obj = HmiRuntime.Screens("MachineData").ScreenItems("Text_Field_01")
obj.Text = "NewText" - 如何通过脚本从口令列表或用户视图中读取用户密码?
为了安全起见在 WinCC flexible 中不能实现。 - 如何终止 WinCC flexible 运行系统并关闭 PC 或面板?
可以使用“StopRuntime mode”命令终止WinCC flexible运行系统和操作系统。注意
基于 Windows 面板的操作系统不能被关闭。模式 参数 含义 0 = hmiStopRuntime
终止 runtime 1 = hmiStopRuntimeAndOperationSystem
终止 runtime and OS 实例
StopRuntime hmiStopRuntime
StopRuntime hmiStopRuntimeAndOperationSystem - 如何通过脚本访问画面或模板中的对象?
面板中的对象只能通过“激活画面”功能访问。举例,在一个画面中组态一个圆,对象的名称是“Circle_01”。通过点击画面中的按钮控制圆的“隐藏”。注意对象的可见性是“临时的”。当一个画面 切换后,会被原组态覆盖。
脚本类型: Sub 圆的对象名称: Circle_01 打开脚本
HmiRuntime.ActiveScreen.ScreenItems("Circle_01").Visible=False
注意
画面中的对象名称必须唯一。
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc323583.html