天天看點

Wincc 7.5 SP1使用VBS建立Excel日報表并顯示在畫面

目錄

    • 1 <概述>
    • 2 <建立模闆>
    • 3 < Wincc變量>
    • 4 <建立全局動作>
      • 4.1 動作1腳本:建立檔案及拷貝報表
      • 4.2 全局動作2:整點存儲資料
    • 5 <制作報表畫面>
      • 5.1 控件添加
      • 5.2 腳本
    • 6 <運作結果>

1 <概述>

在工業生産中報表一直占有非常重要的部分,它一般用來記錄現場的工藝參數、能耗資訊和統計資訊,作為分析企業營運情況的依據。

本文以Wincc V7.5 SP1 為例,介紹Wincc如何擷取裝置運作資料統計并通過報表的形式展現統計資料,如圖1所示:

Wincc 7.5 SP1使用VBS建立Excel日報表并顯示在畫面

可實作如下功能:

  • 自動記錄裝置的運作資料(整點統計)
  • 定時存儲日報表(excel格式)
  • 利用Web控件顯示htm報表檔案

2 <建立模闆>

在Wincc項目檔案夾下建立report檔案夾,如圖2、圖3所示:

Wincc 7.5 SP1使用VBS建立Excel日報表并顯示在畫面
Wincc 7.5 SP1使用VBS建立Excel日報表并顯示在畫面

3 < Wincc變量>

本例中需要用到兩種Wincc變量。一種是和裝置運作資料相關的Wincc外部變量,包括運作資料、能耗資料等,根據項目實際情況建立。另外一種是用于整點存儲相關的變量,這裡将介紹利用Wincc系統變量讀取目前時間(H值)。如圖4所示

Wincc 7.5 SP1使用VBS建立Excel日報表并顯示在畫面

4 <建立全局動作>

全局動作有兩個檔案:

  • 動作1:
    • 利用模版建立臨時存儲檔案
    • 每天00:00:02秒觸發動作
    • 按“檔案名-日期”格式copy資料到指定報表路徑下
  • 動作2:
    • 整點讀取讀取資料,并存入臨時存儲檔案

4.1 動作1腳本:建立檔案及拷貝報表

全局動作腳本如下:

Option Explicit
Function action
    Dim objexcelapp,objexcelbook,objexcelsheet
    Dim sheetname
    Dim dstr,path,fn,cow,fso
    
    Dim MyFile
    Dim TempFileName,TemplateFileName,DestFile
    
    TemplateFileName = HMIRuntime.ActiveProject.Path & "\report\日報表\智慧空壓站運作日報表_模版.xlsx"
    
    TempFileName = HMIRuntime.ActiveProject.Path & "\report\日報表\智慧空壓站運作日報表.xlsx"
    
    DestFile = "E:\報表"
    
    dstr = CStr(Year(Now)) & "-" & CStr(Month(Now)) & "-" & CStr(Day(Now)) & " " & CStr(Hour(Now)) & ":" & CStr(Minute(Now))
    
    fn = CStr(Year(Now)) & CStr(Month(Now)) & CStr(Day(Now)) & CStr(Hour(Now)) & CStr(Minute(Now))
    
    sheetname = "空壓機"
    Set fso = CreateObject("scripting.FileSystemObject")
    Set objexcelapp = CreateObject("Excel.Application")
    Set MyFile = fso.GetFile(TemplateFileName)
    
    objexcelapp.visible = False
    objexcelapp.Workbooks.open TempFileName
    objexcelapp.Worksheets(sheetname).Activate
    
    objexcelapp.ActiveWorkbook.SaveAs(DestFile & fn & ".xlsx")
    objexcelapp.ActiveWorkbook.SaveAs(DestFile &"\web\"& fn & ".htm"),44
    MyFile.Copy (TempFileName),True
    objexcelapp.Workbooks.Close
    objexcelapp.Quit
    Set objexcelapp = Nothing
                    
End Function
           

動作觸發周期為每日的00:00:02,如下圖5所示:

Wincc 7.5 SP1使用VBS建立Excel日報表并顯示在畫面

4.2 全局動作2:整點存儲資料

全局動作2腳本如下,該部分代碼根據項目實際情況進行修改

Option Explicit
Function action

    Dim objexcelapp,objexcelbook,objexcelsheet
    Dim a,b,c,d,sheetname
    Dim dstr,path,fn,cow
    Dim TempFileName
    TempFileName = HMIRuntime.ActiveProject.Path & "\report\日報表\智慧空壓站運作日報表.xlsx"
    cow = 4
    dstr = CStr(Year(Now)) & "-" & CStr(Month(Now)) & "-" & CStr(Day(Now)) & " " & CStr(Hour(Now)) & ":" & CStr(Minute(Now))
    
    sheetname = "空壓機"
    
    
    Set objexcelapp = CreateObject("Excel.Application")
    
    objexcelapp.visible = False
    objexcelapp.Workbooks.open TempFileName '打開臨時存儲檔案
    objexcelapp.Worksheets(sheetname).Activate
    a = HMIRuntime.Tags("IntHour").Read
    
    With objexcelapp.worksheets(sheetname)
        
        .cells(a + cow,1) = dstr
        .cells(a + cow,2) = HMIRuntime.Tags("整數轉浮點數_PLC_SD").Read
        .cells(a + cow,3) = HMIRuntime.Tags("整數轉浮點數_PLC_WD").Read
        .cells(a + cow,4) = HMIRuntime.Tags("ZLAN1_1_ZGSSLL1").Read
        .cells(a + cow,5) = HMIRuntime.Tags("AI_2_AI_CQG_PRESS1").Read
        .cells(a + cow,6) = HMIRuntime.Tags("AI_AI_WATER_TEMP_IN").Read
        .cells(a + cow,7) = HMIRuntime.Tags("AI_AI_WATER_IN_PRESS").Read
        .cells(a + cow,8) = HMIRuntime.Tags("ZLAN1_3_SYSTEM_PRE_1").Read
        .cells(a + cow,9) = HMIRuntime.Tags("ZLAN1_3_KYSSLL_1").Read
        .cells(a + cow,10) = HMIRuntime.Tags("ZLAN1_3_ZD1_1").Read
        .cells(a + cow,11) = HMIRuntime.Tags("ZLAN1_3_ZD2_1").Read
        .cells(a + cow,12) = HMIRuntime.Tags("ZLAN1_3_ZD3_1").Read
        .cells(a + cow,13) = HMIRuntime.Tags("ZLAN1_3_OIL_SUPPLY_TMP_1").Read
        .cells(a + cow,14) = HMIRuntime.Tags("ZLAN1_3_MOTER_DE_TMP_1").Read
        .cells(a + cow,15) = HMIRuntime.Tags("AI_2_AI_KYJ_WATER_PRESS_IN1").Read
        
        .cells(a + cow,16) = HMIRuntime.Tags("ZLAN1_3_SYSTEM_PRE_2").Read
        .cells(a + cow,17) = HMIRuntime.Tags("ZLAN1_3_KYSSLL_2").Read
        .cells(a + cow,18) = HMIRuntime.Tags("ZLAN1_3_ZD1_2").Read
        .cells(a + cow,19) = HMIRuntime.Tags("ZLAN1_3_ZD2_2").Read
        .cells(a + cow,20) = HMIRuntime.Tags("ZLAN1_3_ZD3_2").Read
        .cells(a + cow,21) = HMIRuntime.Tags("ZLAN1_3_OIL_SUPPLY_TMP_2").Read
        .cells(a + cow,22) = HMIRuntime.Tags("ZLAN1_3_MOTER_DE_TMP_2").Read
        .cells(a + cow,23) = HMIRuntime.Tags("AI_2_AI_KYJ_WATER_PRESS_IN2").Read
        
        
        .cells(a + cow,24) = HMIRuntime.Tags("ZLAN1_3_SYSTEM_PRE_3").Read
        .cells(a + cow,25) = HMIRuntime.Tags("ZLAN1_3_KYSSLL_3").Read
        .cells(a + cow,26) = HMIRuntime.Tags("ZLAN1_3_ZD1_3").Read
        .cells(a + cow,27) = HMIRuntime.Tags("ZLAN1_3_ZD2_3").Read
        .cells(a + cow,28) = HMIRuntime.Tags("ZLAN1_3_ZD3_3").Read
        .cells(a + cow,29) = HMIRuntime.Tags("ZLAN1_3_OIL_SUPPLY_TMP_3").Read
        .cells(a + cow,30) = HMIRuntime.Tags("ZLAN1_3_MOTER_DE_TMP_3").Read
        .cells(a + cow,31) = HMIRuntime.Tags("AI_2_AI_KYJ_WATER_PRESS_IN3").Read
        
        
        .cells(a + cow,32) = HMIRuntime.Tags("ZLAN1_3_SYSTEM_PRE_4").Read
        .cells(a + cow,33) = HMIRuntime.Tags("ZLAN1_4_LTLS_4").Read
        .cells(a + cow,34) = HMIRuntime.Tags("ZLAN1_3_ZD1_4").Read
        .cells(a + cow,35) = HMIRuntime.Tags("ZLAN1_3_ZD2_4").Read
        .cells(a + cow,36) = HMIRuntime.Tags("ZLAN1_3_ZD3_4").Read
        .cells(a + cow,37) = HMIRuntime.Tags("ZLAN1_3_OIL_SUPPLY_TMP_4").Read
        .cells(a + cow,38) = HMIRuntime.Tags("ZLAN1_3_MOTER_DE_TMP_4").Read
        .cells(a + cow,39) = HMIRuntime.Tags("AI_2_AI_KYJ_WATER_PRESS_IN4").Read
        
        .cells(a + cow,40) = HMIRuntime.Tags("ZLAN1_3_SYSTEM_PRE_8").Read
        .cells(a + cow,41) = HMIRuntime.Tags("ZLAN1_3_KYSSLL_8").Read
        .cells(a + cow,42) = HMIRuntime.Tags("ZLAN1_3_ZD1_8").Read
        .cells(a + cow,43) = HMIRuntime.Tags("ZLAN1_3_ZD2_8").Read
        .cells(a + cow,44) = HMIRuntime.Tags("ZLAN1_3_ZD3_8").Read
        .cells(a + cow,45) = HMIRuntime.Tags("ZLAN1_3_OIL_SUPPLY_TMP_8").Read
        .cells(a + cow,46) = HMIRuntime.Tags("ZLAN1_3_MOTER_DE_TMP_8").Read
        .cells(a + cow,47) = HMIRuntime.Tags("AI_2_AI_KYJ_WATER_PRESS_IN8").Read
        
    End With
    
    objexcelapp.ActiveWorkbook.Save
    objexcelapp.Workbooks.Close
    objexcelapp.Quit
    Set objexcelapp = Nothing
End Function
           

動作觸發周期為每小時的00:05秒,如下圖6所示:

Wincc 7.5 SP1使用VBS建立Excel日報表并顯示在畫面

5 <制作報表畫面>

Wincc報表畫面分幾項功能:

  • 點選“實時報表”按鈕,展示今日運作資料
  • 周遊檔案夾下所有報表檔案(htm格式)到清單框中,選中後點選“曆史報表查詢”按鈕

5.1 控件添加

  • **Web控件:**Microsoft Web Browser,“myweb”
  • **清單框控件:**Microsoft Lisview Control,“listbox1”
  • **按鈕控件:**Button(“實時報表”、“曆史報表查詢”)

    控件添加方式

    在 ActiveX 控件上右鍵,選擇“添加/删除”,然後在 OCX 控件清單中選擇

    Microsoft Lisview Control 和 Microsoft Web Browser。如下圖7所

    示:

    Wincc 7.5 SP1使用VBS建立Excel日報表并顯示在畫面

5.2 腳本

  • 窗體腳本

    窗體打開後,執行web控件加載“實時報表”,同時向清單框循環添加檔案夾下周遊到所有報表名稱。

    “窗體對象”——“其他”——“打開畫面”,執行VB腳本,如下所示:

Sub OnOpen()                                                
	On Error Resume Next
	Dim fso, f, f1, fc, N 
    Dim lst,wbCtrl

	Set lst = ScreenItems("listbox1")
	Set wbCtrl = ScreenItems("myweb")
	
	Set fso = CreateObject("scripting.FileSystemObject")
	Set f = fso.GetFolder("E:\報表\web格式")
	Set fc = f.Files
	
	N = 0
	For Each f1 In fc   
	    N = N + 1
	    lst.Index N
	    lst.Text f1.name
	Next
    lst.NumberLines =N
	lst.SelIndex ="1"
	lst.Sort = 1
	
	wbCtrl.Navigate HMIRuntime.ActiveProject.Path & "\report\日報表\web\智慧空壓站運作日報表.htm"

End Sub
           
  • 按鈕“實時報表”VB腳本
Sub OnClick(Byval Item)  
  
	On Error Resume Next
	item.Enabled = False
	Dim lst,wbCtrl
	Dim Value1
	Set wbCtrl = ScreenItems("myweb")
	Set lst = ScreenItems("listbox1")
	Value1 = lst.SelText
	
	wbCtrl.Navigate HMIRuntime.ActiveProject.Path & "\report\日報表\web\智慧空壓站運作日報表.htm"
	item.Enabled = True

End Sub
           
  • 按鈕“曆史報表查詢”VB腳本
Sub OnClick(Byval Item)  
	On Error Resume Next
	item.Enabled = False                                
	Dim lst,wbCtrl
	Dim Value1
	Set wbCtrl = ScreenItems("myweb")
	Set lst = ScreenItems("listbox1")
	
	Value1 = lst.SelText
	wbCtrl.Navigate "E:\報表\web格式\" & Value1
	item.Enabled = True
End Sub
           

6 <運作結果>

Wincc 7.5 SP1使用VBS建立Excel日報表并顯示在畫面

繼續閱讀