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

 

posted on 2025-06-03 23:37  老迈克  阅读(461)  评论(0)    收藏  举报

导航