用VB實現WinCC歸檔數據的復雜報表
最近在看WinCC如何做外部報表,網上找了一篇文章,供大家參考。
引言:
Siemens公司的WinCC是一個優秀的工控組態軟件,廣泛應用于各種工業控制系統的數據采集及監控,具有良好的人機界面、靈活的組態功能。WinCC本身也具有報表和曲線處理功能,但 WinCC V6.0以前的版本沒有嵌入VB腳本功能,且其歸檔數據不能直接被SQL server數據庫所用。對于一些較復雜的數據處理功能(如數據查詢、數據備份、報表打印等)用WinCC實現就顯得力不從心。同時,WinCC在處理報表時不能對歷史數據進行任意查詢和過濾,且報表格式設計也不夠靈活方便,無法滿足項目要求。
1.系統概述
本系統是將WinCC從PLC采集過來的過程數據通過VB編程進行歸檔、查詢、過濾、報表打印。在每次試驗前,先要清空WinCC歸檔數據庫和Access臨時數據庫,以保證每一次試驗數據的有效性和完整性。試驗結束后,可立即進行數據處理(備份、查詢、過濾、打印)。也可對備份的歷史數據進行查詢和報表打印。由于Excel實現報表功能非常強大,且VB的可擴展性強,可以利用Excel作為OLE服務器,實現VB與Excel的集成,所以各種復雜的報表可以很容易的實現。系統主要界面如下 :
圖一:新試驗起始畫面
圖二:數據查詢畫面
2. ODBC的配置連接和DAO
2.1 ODBC(Open Database Connectivity)配置
ODBC是一個用于訪問數據庫的統一標準接口,是Microsoft Windows的開放服務體系WOSA(Windows OpenServices Architecture)中有關數據庫的一個組成部分。ODBC需要連接數據源,選擇相應的驅動程序。本系統數據源配置在ODBC Config 對話框中進行,配置數據庫文件名(此處輸入Siemens組態軟件Wincc自動生成存檔的過程數據庫《項目名》RT.DB)和路徑。并在類型(Description)中輸入Wincc5.0 。在Access中通過“獲取外部數據“連接到在ODBC 管理器中建立的數據源。這樣即使Wincc退出后,Access仍然與過程數據庫保持后臺動態連接。
2.2 DAO(dataaccessobjects)
VB訪問數據庫的方法有多種,訪問的數據庫類型也有多種。DAO(dataaccess objects)是一種基于Jet 數據庫引擎的面向對象接口,它提供了完整的管理一個關系型數據庫所需的全部操作屬性和方法。DAO可以識別ODBC數據庫。
3. VB創建數據庫和Excel報表
3.1創建數據庫、添加記錄
Siemens組態軟件Wincc自動生成歸檔的過程數據庫《項目名》RT.DB,每一個標簽變量對應一個表,需將若干個表匯總成為一個總表,另外需建一個包含變量名稱、代號、允許值等字段的表。上述過程采用VB編程,用前面介紹的的DAO創建數據庫、創建表、添加字段等來完成。并將Access中不同的采樣周期對應數據添加到臨時數據庫中,然后進行備份、查詢和報表處理等。主要程序如下:
SetWs = DBEngine.Workspaces(0)
Set dataBase = Ws.CreateDatabase(dataBasePath,dbLangGeneral, dbVersion60)
Set Table = dataBase.CreateTableDef(TableName)
Do Until recordTemp.EOF
Rs.AddNew:Rs(1) = recordTemp(0)
Rs.Update:recordTemp.MoveNext
Loop
3.2數據查詢和過濾
使用SQL語句實現時間段和數據過濾時間的子查詢,并將查詢結果放在建立的臨時查詢表中,再將臨時查詢表的記錄顯示。
Set queryTemp =db.CreateQueryDef(“”, “SELECT * FROM 運行數據 WHERE 時間 IN ( SELECT 時間 From 運行數據 WHERE 時間 between #” & strStart & “# and #” &strEnd & “# ) and Val(序號) Mod ” & Tim& “=” & numMod & “ ORDER BY 時間 ”)
3.3生成Excel報表
由于生成的報表比較復雜,所以先在Excel中按照用戶的要求作好一個模板(后綴為.xlt),對于報表中不固定的部分,需要VB程序動態生成。由于本項目過程變量數目及采樣值較多,在VB程序中需同時控制Excel的Sheet和Page。整個過程都是后臺調用Excel。
1)啟動Excel、復制模板:
SetobjNew = New Excel.Application
SetobjNew = CreateObject(“Excel.application”)
FileCopystrS, strD ‘復制模板
SetobjEW = objNew.Workbooks.Open(strD) objNew.Visible = False
2)按要求將查詢結果送到Excel的各個Range或Cells中:
Fori = 3 To 16
objEW.Sheets(1).Cells(4+ k * 33, i) = c(i - 2, 1): Next I
3)刪除多余的模板:
objEW.Sheets(1).Range(“A”& Trim$(Str$(k)) & “:” & “P660”).Select objNew.Selection.EntireRow.Delete
Selection.DeleteShift:=xlUp
4)設置紙張、打印預覽和打印:
objEW.ActiveSheet.PageSetup.Orientation= xlLandscape ‘設置紙張方向為橫向
objEW.ActiveSheet.PageSetup.PaperSize= xlPaperA4 ’設置紙張尺寸為A4
objNew.Visible= True
objEW.Sheets(1).PrintPreview
objNew.Visible= False
objEW.Sheets(1).PrintOut
objNew.DisplayAlerts= False: objNew.Quit objNew.DisplayAlerts= True:
SetobjNew = Nothing
KillApp.Path + “\temp1.xls” ‘刪除臨時模板
4.結束語:
本系統將WinCC從PLC采集過來的過程數據,通過VB編程進行歸檔、查詢、過濾、報表打印,以及對歷史數據查詢、過濾、報表打印。系統充分利用Excel非常強大的報表處理功能,以及VB的可擴展性強,將VB與Excel集成,以實現用戶所要求的報表;同時,實現了數據靈活備份,解決了工程實際問題。目前該系統已投入運行,性能良好。
-
WinCC
+關注
關注
6文章
204瀏覽量
47997 -
VB編程
+關注
關注
0文章
44瀏覽量
8414
原文標題:用VB實現WinCC歸檔數據的復雜報表
文章出處:【微信號:GKYXT1508,微信公眾號:工控云學堂】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論