某浪博客那边效率低下,学习笔记类型的也要审核多日,还做了访问量清零的事情。我把今天的学习笔记在这里也记录一遍。
前几天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域。 如果有IO域名字叫做“IO1.2”,前面的脚本不能避开对这个IO域进行设置,这种情况就需要在开始往页面放置控件时,就对其名字进行合理设置。 标签:Dim,VBA,WINCCV7.5,20,Sub,SP2,objects,IO,Set From: https://www.cnblogs.com/fishingsriver/p/18431089