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號