04-WinCC VBS全局变量/全局数据传递
在WinCC VBS中,我们没有办法直接定义可以在整个项目中全局使用的变量,哪怕是使用public定义变量,该变量的生效范围也仅仅是局限在某个画面之中,当切换画面以后,其并不能把数据传递到另一个画面。
如,在一个画面A中,做一个画面窗口B,窗口中关联画面C,在A中建2个按钮,1和2,在画面C中同样创建2个按钮3和4,分别在1-4的按钮中写下脚本:

'按钮1中 public testVal testVal=1 '按钮2中 msgbox testVal '按钮3中 testVal=2 '按钮4中 msgbox testVal
从以上脚本中可以看出,如果WinCC的Public定义方式支持全局数据传递,则按照顺序按下按钮1-4,会在按钮1和3中分别给testVal赋值1和2,并且在随后按下按钮2和4的时候分别弹窗弹出testVal赋值后的值1和2,但是实际上,在赋值1的时候,弹窗会弹出赋值后的值1,在按下按钮3和4之后,什么都不会发生,因为系统在按下按钮3的时候会认为testVal未定义,更不会赋值,按下按钮4的时候也不会弹出期待的赋值2。
实际上,在WinCC中使用VBS的时候,很多时候需要做不同画面之间的数据交换,比如,在制作报表系统时,在报表中需要对时间、班次、表头等等进行选择,而选择的内容在同一个画面中会显得尤为拥挤,此时就需要做弹窗,比如选择填充报表的变量名的时候,弹出一个弹窗,在选择完变量名称之后,将结果保存下来,再选择报表的时间段、报表是否计算平均值、合计值等,最终再将这些内容汇总成一个报表,就需要不同页面之间的数据传输。不同页面间的数据传输,主要分为以下几种:
<1> 使用WinCC内部变量;
<2> 使用DataSet;
<3> 使用第三方存储文件,如Csv文件、Access数据库或者SQL数据库;
在这里主要讲述比较常用的前两种。
1、创建WinCC内部变量
入开篇所列举的例子,为了实现不同页面之间的数据传递,首先在WinCC内部变量中创建一个内部变量作为不同页面间数据传递的媒介,如下图:

'按钮1中 dim testVal set testVal=hmiruntime.tags("SEND")
testVal.value=1 testVal.write '按钮2中 dim testVal set testVal=hmiruntime.tags("SEND") testVal.read msgbox testVal.value '按钮3中 dim testVal set testVal=hmiruntime.tags("SEND")
testVal.value=2 testVal.write '按钮4中 dim testVal set testVal=hmiruntime.tags("SEND") testVal.read msgbox testVal.value
2、WinCC的DateSet
在此所涉及的DataSet为WinCC全局DataSet,DataSet 可以看作是VBS全局变量,可以在VBS全局动作脚本和画面VBS脚本之 间,以及不同画面的VBS脚本之间进行数据传送。全局DataSet的用法如下:
'在VBS脚本中使用DataSet添加全局变量,如添加一个别名的DataSet变量 HMIRuntime.DataSet.Add "Alias" '给DataSet全局变量赋值 HMIRuntime.DataSet("Alias").Value=55 '也可以是字符、字符串、浮点数等各种数据类型 '也可以在添加DataSet全局变量的时候,直接赋值,如下: HMIRuntime.DataSet.Add "Alias",55 '删除某个全局变量 HMIRuntime.DataSet.Remove("Alias") HMIRuntime.DataSet.Remove "Alias" '删除全部的DataSet全局变量 HMIRuntime.DataSet.RemoveAll 'DataSet全局变量中变量的数目 HMIRuntime.DataSet.Count '使用循环遍历DataSet全局变量,并且用弹窗输出每个全局变量的名称和当前值 Dim obj For Each obj In HMIRuntime.DataSet Msgbox obj.name Msgbox obj.Value Next '使用DataSet全局变量传递数组 HMIRuntime.DataSet.RemoveAll Dim Arr Arr=Array("A","B","C","D","E","F") HMIRuntime.DataSet.Add "ArrV",Arr '调用DataSet全局数组,并且便历数组用弹窗输出其每个元素的值 Dim Arr,Num Arr=HMIRuntime.DataSet("ArrV").Value For Each Num In Arr Msgbox Num Next
浙公网安备 33010602011771号