HMI 变量
- WinCC Runtime Advanced 和面板 在变量映像中创建的变量值将保存在用户自定义函数中。然后,会将变量值更新为设置周期时间。用户自定义函数首先会访问上一个周期中读取的变量值。 如果变量名称与项目中 VBS 的命名约定匹配,则可按如下方式在用户自定义函数中使用该变量。
- 'VBS_Example_03 If BeltDriveOilTemperature > 100 Then [instruction]
- 如果项目中的变量名称与 VBS 命名约定不匹配,则必须通过“SmartTags”列表引用该变量。在以下示例中,变量名称包含“&”字符,其不符合 VBS 的命名约定。
- 'VBS_Example_04 SmartTags("Test&Trial")= 2005
- WinCC Runtime Professional 访问功能与在 HMI 设备中使用 WinCC Runtime Advanced 和面板进行访问相同。还可以以异步方式访问变量值。PLC 中的变量值以异步访问方式直接访问。在局部脚本或用户自定义 C 函数中按如下方式访问变量值: SmartTags 列表 (VBS) 带有 Read-/Write 方法的 Tags 列表 (VBS) GetTag 函数 (C) SetTag 函数 (C) 当调用方法或用户自定义函数时,立即读取 PLC 中的变量值。变量值并不定期更新,这与从变量映像中读取的情况不同。
说明 运行系统脚本 PLC 数组元素的索引可以任何数字开头。但在 WinCC 中,始终从 0 开始索引。 例如,PLC 变量“Array [1..3] of Int”映射到 WinCC 中的“Array [0..2] of Int”。 在脚本中访问数组时,须注意正确的索引顺序。 |
局部变量
只能在用户自定义函数或局部脚本中使用局部变量。
局部变量可用于以下情况:
- 缓冲器
- 计数器,例如 For 指令
根据编程语言语法初始化每个变量。
示例:Dim objTagFillLevel
设定每个变量的初始值,以避免因出现空 HMI 变量而导致的错误。要使用来自外部的局部变量的值,请将其与内部或外部 HMI 变量链接起来。
访问带有动态名称的 HMI 变量(WinCC Runtime Advanced 和面板)
用户自定义 VB 函数通过变量名称访问变量值。可以以这样一种方式来指定变量名称,即变量名称在用户自定义函数运行时构成。
如果只是在画面中调用用户自定义 VB 函数且其中的 HMI 变量还用在其它位置,例如,在 I/O 域中使用,则出于性能方面的原因,应将该 HMI 变量组态为“操作时循环”采集模式。
如果访问用户自定义 VB 函数且当前显示的画面中未使用 HMI 变量,则将 HMI 变量组态为“循环连续”采集模式。这样可确保该变量的当前值始终可用。
自定义函数或局部脚本?
使用用户自定义的函数或者使用局部脚本完成编程任务,这取决于应用目的并最终取决于用户自定义函数或局部脚本的数量。
局部脚本可用于各种后台活动,例如日常打印或记录、变量的监视或者计算的执行。
通过自定义函数,只需创建一次就可以在项目中重复使用代码。 需要时,只需调用相应的自定义函数即可,而无需多次输入代码。 这样代码将更加清晰并易于维护。
简介
在用户自定义 VB 函数中,可以使用 VBS 对象模型中带有相应属性和方法的各个对象。
可以在运行系统中读取和更改对象属性。
引用对象
在自定义 VB 函数中,通过相应的列表来引用对象。 要识别对象,使用列表中的名称或位置编号
对于访问频率较高的对象属性,则可创建一个对象引用。 可以通过对象引用访问对象属性,也可以不通过对象引用进行访问。
通过以下指令,“MainScreen”中将引用第一个对象:
'VBS_Example_01 Dim objObject 'Change to Screen "MainScreen" HMIRuntime.BaseScreenName = "MainScreen" Set objObject = HMIRuntime.Screens(1).ScreenItems(1) |
clipboard
通过以下指令,引用了对象的名称,并且对象属性发生了变化。 必须在画面中创建了具有此名称的对象。
'VBS_Example_02 Dim objCircle HMIRuntime.BaseScreenName = "MainScreen" Set objCircle = HMIRuntime.Screens(1).ScreenItems("Circle_01") objCircle.BackColor = vbGreen |
调用自定义函数 |
简介
可在用户自定义函数中插入采用相同编程语言的其它用户自定义函数,例如在用户自定义 C 函数中只能插入用户自定义 C 函数。
具体的语法取决于所用的编程语言。支持哪种编程语言取决于所选的 HMI 设备。
在自定义函数中调用自定义函数的可选方式有:
- 使用 <Ctrl + 空格键> 或使用
- 直接输入
- 使用“函数列表”(Function list) 选项板
使用 <Ctrl + 空格键> 或使用
使用 <Ctrl + 空格键> 或
打开选择列表并选择所需的用户自定义函数。
直接输入
直接将自定义函数输入到代码中。对象(例如画面、连接和日志)的引用在传递时需要以单引号括起来。
调用不带返回值的自定义函数 (VBS)
Average 4,10 |
clipboard
调用带返回值的自定义函数 (VBS)
Dim ValueA ValueA = Average (4,10) |
clipboard
如果不希望计算返回值,则采用针对不带返回值的自定义函数的方式进行调用。
调用不带返回值的自定义函数(C 语言)
Average(4,10); |
clipboard
调用带返回值的自定义函数(C 语言)
SetTagDouble("AverageValue",Average (4, 10)); |
clipboard
如果不希望计算返回值,则采用针对不带返回值的自定义函数的方式进行调用。
使用“函数列表”(Function list) 选项板
从“函数列表”(Function list) 选项板的下拉列表中选择所需的自定义函数。
按照组态函数列表的方式进行操作。有关详细信息,请参见“组态函数列表”。
要将该列表转换为代码,请单击“转换”(Transfer) 按钮。该列表将自动转换为正确的语法。
对给定的“Bool”型变量的值取反。
- 如果变量具有值 1(真),它将被设置为 0(假)。
- 如果变量具有值 0(假),它将被设置为 1(真)。
'Programming language: VB
Dim myTag
Dim myOutputField
Dim bValue, bSaved, strResult
Set myTag = SmartTags("bStatus")
Set myOutputField=HMIRuntime.Screens("MyScreen").ScreenItems("objTextField")
'Get current value
bValue=myTag.Value
'Save current value
bSaved=bValue
'Invert Bit
InvertBit myTag
bValue=myTag.Value
'Output result old and new value:
strResult="Old Value: "&bSaved &Chr(13)&"New Value: "&bValue
myOutputField.Text=strResult
将“Bool”型变量的值设置为 0(假)。
'Programming language: VB
Dim myTag
Dim myOutputField
Dim bValue, bSaved, strResult
Set myTag = SmartTags("bStatus")
Set myOutputField=HMIRuntime.Screens("MyScreen").ScreenItems("objTextField")
'Set value
bValue=1
myTag.Value=bValue
'Save current value
bSaved=bValue
'Reset Bit
ResetBit myTag
bValue=myTag.Value
'Output result old and new value:
strResult="Old Value: "&bSaved &Chr(13)&"New Value: "&bValue
myOutputField.Text=strResult
将“Bool”型变量的值设置为 1(真)。
'Programming language: VB
Dim myTag
Dim myOutputField
Dim bValue, bSaved, strResult
Set myTag = SmartTags("bStatus")
Set myOutputField=HMIRuntime.Screens("MyScreen").ScreenItems("objTextField")
'Set value
bValue=0
myTag.Value=bValue
'Save current value
bSaved=bValue
'Set Bit
SetBit myTag
bValue=myTag.Value
'Output result old and new value:
strResult="Old Value: "&bSaved &Chr(13)&"New Value: "&bValue
myOutputField.Text=strResult
还可以使用screen对象进行以下操作:
- 读取画面的宽度和高度(属性 "Height" 和 "Width")。
- 改变背景色(属性"BackColor")。
使用对象名作为索引。
在下列实例中,背景色由黑色变为绿色:
'VBS_Example_BackColor
HMIRuntime.Screens("Rootscreen").BackColor = vbGreen
最后具体查看该表进行操作