某浪博客那边效率低下,学习笔记类型的也要审核多日,还做了访问量清零的事情。我把今天的学习笔记在这里也记录一遍。
前几天QQ群里面有哥们询问在WINCC中页面中一次性设定多个IO域连接变量,这些连接变量有规律。我以前没有用过VBA,尝试着弄了一下,现在把过程记录下来,当作学习笔记吧。
新建wincc项目,新建内部变量Real1至Real20共计20个,初始值分别10到200。新建页面VBAPage,上面添加IO域,名字叫做IO1,不连接任何变量,复制粘贴这个IO域19次,可以看到这20个IO域名字是IO1至IO20。下面使用VBA脚本来设定20个IO域连接的变量。
点击WINCC页面菜单工具-宏-VisualBasic编辑器,写下面的脚本。
Sub IOField_OutputValueTrigger()
Dim objects
Dim obj
Dim objdynamic
Dim i
Set objects = ActiveDocument.HMIObjects.Find("HMIIOField")
For i = 1 To objects.count
Set objdynamic = objects.Item(i).OutputValue.CreateDynamic(hmiDynamicCreationTypeVariableDirect, "Real" & CStr(i))
Next
End Sub
保存脚本,运行一下,回到页面,就可以看到这20个IO域关联了Real1至Real20。
前面的练习属于初次练习,这一个稍微深入一下。假设页面上还有其他的IO域,其它IO域对象名字不是IO+数字的形式,我只是希望把对象名字叫做IO1至IO20这20个IO域进行批量修改,其它的IO域不做修改,那么需要写下面的脚本。
Sub IOField_OutputValueTrigger1()
Dim objects
Dim obj
Dim objdynamic
Dim i
Set objects = ActiveDocument.HMIObjects.Find(ObjectName:="IO*", objecttype:="HMIIOField")
For i = 1 To objects.count
Set objdynamic = objects.Item(i).OutputValue.CreateDynamic(hmiDynamicCreationTypeVariableDirect, "Real" & CStr(i))
Next
End Sub
保存运行脚本,就可以只对IO1至IO20这20个IO域关联相应变量了。
在前面练习基础上,如果还有其他的IO域,名字也是IO加数字的形式,比如是IO22,那么只需要把脚本稍作修改,写成下面的形式即可
Sub IOField_OutputValueTrigger2()
Dim objects
Dim objdynamic
Dim i
Set objects = ActiveDocument.HMIObjects.Find(ObjectName:="IO*", objecttype:="HMIIOField")
For i = 1 To objects.count
If objects.Item(i).ObjectName <= "IO20" Then
Set objdynamic = objects.Item(i).OutputValue.CreateDynamic(hmiDynamicCreationTypeVariableDirect, "Real" & CStr(i))
End If
Next
End Sub
保存运行脚本,就只会修改IO1到IO20这20个IO域。