用VB實現(xiàn)WinCC歸檔數(shù)據(jù)的復(fù)雜報表
最近在看WinCC如何做外部報表,網(wǎng)上找了一篇文章,供大家參考。
引言:
Siemens公司的WinCC是一個優(yōu)秀的工控組態(tài)軟件,廣泛應(yīng)用于各種工業(yè)控制系統(tǒng)的數(shù)據(jù)采集及監(jiān)控,具有良好的人機(jī)界面、靈活的組態(tài)功能。WinCC本身也具有報表和曲線處理功能,但 WinCC V6.0以前的版本沒有嵌入VB腳本功能,且其歸檔數(shù)據(jù)不能直接被SQL server數(shù)據(jù)庫所用。對于一些較復(fù)雜的數(shù)據(jù)處理功能(如數(shù)據(jù)查詢、數(shù)據(jù)備份、報表打印等)用WinCC實現(xiàn)就顯得力不從心。同時,WinCC在處理報表時不能對歷史數(shù)據(jù)進(jìn)行任意查詢和過濾,且報表格式設(shè)計也不夠靈活方便,無法滿足項目要求。
1.系統(tǒng)概述
本系統(tǒng)是將WinCC從PLC采集過來的過程數(shù)據(jù)通過VB編程進(jìn)行歸檔、查詢、過濾、報表打印。在每次試驗前,先要清空WinCC歸檔數(shù)據(jù)庫和Access臨時數(shù)據(jù)庫,以保證每一次試驗數(shù)據(jù)的有效性和完整性。試驗結(jié)束后,可立即進(jìn)行數(shù)據(jù)處理(備份、查詢、過濾、打?。?。也可對備份的歷史數(shù)據(jù)進(jìn)行查詢和報表打印。由于Excel實現(xiàn)報表功能非常強(qiáng)大,且VB的可擴(kuò)展性強(qiáng),可以利用Excel作為OLE服務(wù)器,實現(xiàn)VB與Excel的集成,所以各種復(fù)雜的報表可以很容易的實現(xiàn)。系統(tǒng)主要界面如下 :
圖一:新試驗起始畫面
圖二:數(shù)據(jù)查詢畫面
2. ODBC的配置連接和DAO
2.1 ODBC(Open Database Connectivity)配置
ODBC是一個用于訪問數(shù)據(jù)庫的統(tǒng)一標(biāo)準(zhǔn)接口,是Microsoft Windows的開放服務(wù)體系WOSA(Windows OpenServices Architecture)中有關(guān)數(shù)據(jù)庫的一個組成部分。ODBC需要連接數(shù)據(jù)源,選擇相應(yīng)的驅(qū)動程序。本系統(tǒng)數(shù)據(jù)源配置在ODBC Config 對話框中進(jìn)行,配置數(shù)據(jù)庫文件名(此處輸入Siemens組態(tài)軟件Wincc自動生成存檔的過程數(shù)據(jù)庫《項目名》RT.DB)和路徑。并在類型(Description)中輸入Wincc5.0 。在Access中通過“獲取外部數(shù)據(jù)“連接到在ODBC 管理器中建立的數(shù)據(jù)源。這樣即使Wincc退出后,Access仍然與過程數(shù)據(jù)庫保持后臺動態(tài)連接。
2.2 DAO(dataaccessobjects)
VB訪問數(shù)據(jù)庫的方法有多種,訪問的數(shù)據(jù)庫類型也有多種。DAO(dataaccess objects)是一種基于Jet 數(shù)據(jù)庫引擎的面向?qū)ο蠼涌?,它提供了完整的管理一個關(guān)系型數(shù)據(jù)庫所需的全部操作屬性和方法。DAO可以識別ODBC數(shù)據(jù)庫。
3. VB創(chuàng)建數(shù)據(jù)庫和Excel報表
3.1創(chuàng)建數(shù)據(jù)庫、添加記錄
Siemens組態(tài)軟件Wincc自動生成歸檔的過程數(shù)據(jù)庫《項目名》RT.DB,每一個標(biāo)簽變量對應(yīng)一個表,需將若干個表匯總成為一個總表,另外需建一個包含變量名稱、代號、允許值等字段的表。上述過程采用VB編程,用前面介紹的的DAO創(chuàng)建數(shù)據(jù)庫、創(chuàng)建表、添加字段等來完成。并將Access中不同的采樣周期對應(yīng)數(shù)據(jù)添加到臨時數(shù)據(jù)庫中,然后進(jìn)行備份、查詢和報表處理等。主要程序如下:
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數(shù)據(jù)查詢和過濾
使用SQL語句實現(xiàn)時間段和數(shù)據(jù)過濾時間的子查詢,并將查詢結(jié)果放在建立的臨時查詢表中,再將臨時查詢表的記錄顯示。
Set queryTemp =db.CreateQueryDef(“”, “SELECT * FROM 運(yùn)行數(shù)據(jù) WHERE 時間 IN ( SELECT 時間 From 運(yùn)行數(shù)據(jù) WHERE 時間 between #” & strStart & “# and #” &strEnd & “# ) and Val(序號) Mod ” & Tim& “=” & numMod & “ ORDER BY 時間 ”)
3.3生成Excel報表
由于生成的報表比較復(fù)雜,所以先在Excel中按照用戶的要求作好一個模板(后綴為.xlt),對于報表中不固定的部分,需要VB程序動態(tài)生成。由于本項目過程變量數(shù)目及采樣值較多,在VB程序中需同時控制Excel的Sheet和Page。整個過程都是后臺調(diào)用Excel。
1)啟動Excel、復(fù)制模板:
SetobjNew = New Excel.Application
SetobjNew = CreateObject(“Excel.application”)
FileCopystrS, strD ‘復(fù)制模板
SetobjEW = objNew.Workbooks.Open(strD) objNew.Visible = False
2)按要求將查詢結(jié)果送到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)設(shè)置紙張、打印預(yù)覽和打?。?/p>
objEW.ActiveSheet.PageSetup.Orientation= xlLandscape ‘設(shè)置紙張方向為橫向
objEW.ActiveSheet.PageSetup.PaperSize= xlPaperA4 ’設(shè)置紙張尺寸為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.結(jié)束語:
本系統(tǒng)將WinCC從PLC采集過來的過程數(shù)據(jù),通過VB編程進(jìn)行歸檔、查詢、過濾、報表打印,以及對歷史數(shù)據(jù)查詢、過濾、報表打印。系統(tǒng)充分利用Excel非常強(qiáng)大的報表處理功能,以及VB的可擴(kuò)展性強(qiáng),將VB與Excel集成,以實現(xiàn)用戶所要求的報表;同時,實現(xiàn)了數(shù)據(jù)靈活備份,解決了工程實際問題。目前該系統(tǒng)已投入運(yùn)行,性能良好。
-
WinCC
+關(guān)注
關(guān)注
6文章
204瀏覽量
47995 -
VB編程
+關(guān)注
關(guān)注
0文章
44瀏覽量
8414
原文標(biāo)題:用VB實現(xiàn)WinCC歸檔數(shù)據(jù)的復(fù)雜報表
文章出處:【微信號:GKYXT1508,微信公眾號:工控云學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論