蘇 震,徐新樂,王克偉,孫 林,應小昆,曹 虎,沈明艷
(中國兵器工業新技術推廣研究所,北京 100089)
?
基于VB的WinCC數據歸檔及報表輸出的研究和應用
蘇震,徐新樂,王克偉,孫林,應小昆,曹虎,沈明艷
(中國兵器工業新技術推廣研究所,北京 100089)
摘要:隨著信息化步伐的加快,企業對生產數據歸檔的要求越來越高,利用傳統方式實現WinCC數據歸檔已不能滿足生產需要。為了解決WinCC數據歸檔過程中無法記錄文本型數據,不能隨意查詢、更改歸檔數據等問題,采用了應用開發效率高的VB軟件和數據存儲功能強大的SQL軟件對WinCC進行二次開發的可行方案。該方案實現了對WinCC過程數據的高級歸檔,滿足了企業對數據歸檔的要求,同時避免了使用西門子專用歸檔選件帶來的高開發成本。目前,該方案已在工程應用中取得了較好效果,具有一定的應用推廣價值。
關鍵詞:WinCC;數據歸檔;VB;SQL;ADO
WinCC是西門子公司在自動化領域一款功能強大的HMI組態監控軟件,它可以歸檔生產過程數據到SQL數據庫,并以曲線或者表格的形式顯示出來;但WinCC過程數據歸檔無法記錄文本類型的數據,且本文涉及的SQL是由SIEMENS為WinCC做了二次開發的,采用了一些獨有的技術,只能通過WinCC DataMonitor系統組件和系統選件Connectivity Pack才能實現歸檔數據的訪問[1]。使用這2個工具都需要購買授權軟件,而且僅能只讀訪問,WinCC禁止用戶對其歸檔數據進行修改和復雜查詢,并且WinCC自帶的報表功能格式死板,缺乏靈活性。為了彌補這些不足,可利用VB這類開發工具實現對WinCC的二次開發,將WinCC、VB和SQL有機集成,實現WinCC數據高級歸檔。
1系統概述
某熱處理生產線的控制系統采用西門子公司現場控制設備搭建,主要實現溫度、壓力和流量等數據的監控,現場信號由AI通道和ModBus轉Profibus-DP通道送到300PLC主站,PLC把各站送來的數據按要求處理后,通過以太網送到上位機WinCC,對這些數據進行分析處理后進行儲存和報表輸出。整個系統結構示意圖如圖1所示。

圖1 系統結構示意圖
2技術策略
2.1ADO
ADO是一種程序對象,用于表示用戶數據庫中的數據結構和所包含的數據。在Microsoft Visual Basic編輯器中,可以使用ADO對象以及ADO的附加組件(稱為Microsoft ADO Extensions for DLL and Security(ADOX))來創建、修改、查詢和檢驗數據庫,或者訪問外部數據源,還可在代碼中使用ADO來操作數據庫中的數據。也就是說,ADO是一個面向對象的COM組件庫,用ADO訪問數據庫,就是利用ADO對象來操作數據庫中的數據。它的最大特點是簡單、易用。
2.2VB和SQL
Visual Basic是由Microsoft公司開發的一種基于BISIC可視化、面向對象和采用事件驅動方式的結構化高級編程設計語言,可用于開發Windows環境下的各類應用程序[2]。VB作為一款應用成熟、穩定易學的開發工具,與ADO是完全兼容的。
結構化查詢語言(Structured Query Language,SQL)是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統。SQL語言以其好學好用、結構簡單和兼容性強等特點在其他領域得到了廣泛應用,SQL支持包括字符型、文本型、數值型、邏輯型和日期型等幾乎所有常用數據類型。
2.3歸檔模型
系統通過PLC等控制器采集現場數據到自身存儲器,上位機WinCC和下位機通信實現現場監控,VB通過ADO對象訪問數據并進行分析處理,將數據存儲到指定的SQL數據庫中,最后通過對SQL數據庫的操作實現對過程數據的高級歸檔和報表輸出。數據歸檔模型如圖2所示。

圖2 數據歸檔模型
3高級歸檔的實現
報表系統通過PLC采集現場數據,應用VB軟件中的ADO數據接口訪問WinCC中的數據,經過分析處理存入SQL數據庫中,然后通過VB軟件對SQL數據庫進行查詢,將查詢結果傳輸到控件(本系統采用Microsoft Windows Common Controls 6.0控件)中以報表的形式顯示、輸出。
使用ADO技術開發數據庫應用程序主要有2種方法:1)在應用程序中使用ActiveX控件,該方法可以最大程度地簡化應用程序設計,只需要將ADO控件的屬性設置好,便可以訪問數據庫中的數據;2)在應用程序中直接聲明或新建ADO對象對數據進行操作。第1種方法的特點是操作簡單,但是效率低,對程序的控制相對較弱;第2種方法對程序的操作要靈活的多,效率高。本文采用第2種方法進行開發。
3.1連接到數據源
首先,配置SQL數據庫的環境。在SQL中建立數據庫,起名為report6182,并根據需求在數據庫中建立2個數據表(area1data、area2data)及其關系。然后,在VB環境下進行數據庫的連接。
要使用ADO對象應先為當前工程引用ADO對象庫,方法是:執行“工程”菜單中的“引用”命令,在對話框中選中“Microsoft ActiveX Data Object 2.0 Library”。隨后開發數據庫源連接對象代碼,在該對象中配置數據庫驅動程序、數據庫服務器地址、數據庫名稱、數據庫端口號以及用戶名和密碼,配置信息正確后即可連接成功。代碼如下:
Public cn As New ADODB.Connection
Public WinCC As Object
Set WinCC = CreateObject("WinCC-Runtime-Project")
cn.Open "DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;DATABASE=report6182;
UID=root;PWD=root;OPTION=3;stmt=SET NAMES GBK"
3.2指定訪問數據源的命令
數據庫連接成功后,就可以通過ADO進行數據的采集、處理和轉存了。在VB軟件中加入計時器控件,利用計時器時間和邏輯判斷語句,按照用戶要求在指定條件下按指定周期采集WinCC中的變量值,進行求和、平均等處理后寫入數據庫,以備報表查詢。讀取變量主要代碼如下:
If formercharge <> charge And charge >= 1 Then
If stuff2 = 0 Or chargecount >= Val(tempsectioncount) Then
startrecordtime1 = Format(Now(), "yyyy-mm-dd hh:MM:ss")
sqlstr = "insert into area1data(recordtime,thick,number,action,tem1up,tem1dn,tem2up,tem2dn) values ('" + taketime + "'"
sqlstr = sqlstr + ",'" + Trim(Str(WinCC.getValue("BoardThick"))) + "'"
sqlstr = sqlstr + ",''"
sqlstr = sqlstr + ",'出爐'"
sqlstr = sqlstr + ",'" + Trim(Str(Round(WinCC.getValue("TE101")))) + "'"
sqlstr = sqlstr + ",'" + Trim(Str(Round(WinCC.getValue("TE102")))) + "'"
sqlstr = sqlstr + ",'" + Trim(Str(Round(WinCC.getValue("TE103")))) + "'"
sqlstr = sqlstr + ",'" + Trim(Str(Round(WinCC.getValue("TE104")))) + "')"
End If
cn.Execute sqlstr
End If
3.3將命令執行結果顯示輸出
將數據庫中的數據查詢出來的結果送到Microsoft Windows Common Controls 6.0控件中進行顯示輸出(見圖3)。

圖3 輸出界面
顯示輸出主要代碼如下:
Function displaydata()
Dim recordsetFields As New ADODB.Recordset
recordsetFields.CursorLocation = adUseClient
recordsetFields.Open "select * from area1data order by recordtime desc limit 500", cn, adOpenKeyset, adLockOptimistic
With frmMain
.listTables.ColumnHeaders.Clear
.listTables.ListItems.Clear
.listTables.Refresh
Dim clmX As ColumnHeader
Set clmX = .listTables.ColumnHeaders.Add(, , "一段", 800)
Set clmX = .listTables.ColumnHeaders.Add(, , "時間", 2200)
Set clmX = .listTables.ColumnHeaders.Add(, , "厚度", 800)
Set clmX = .listTables.ColumnHeaders.Add(, , "批號", 1500)
Set clmX = .listTables.ColumnHeaders.Add(, , "動作", 800)
Set clmX = .listTables.ColumnHeaders.Add(, , "一區上溫度", 1200)
Set clmX = .listTables.ColumnHeaders.Add(, , "一區下溫度", 1200)
Set clmX = .listTables.ColumnHeaders.Add(, , "二區上溫度", 1200)
Set clmX = .listTables.ColumnHeaders.Add(, , "二區下溫度", 1200)
For i = 1 To recordsetFields.RecordCount
Set itmX = .listTables.ListItems.Add(, , CStr(i))
itmX.SubItems(1) = NullCellProcess(recordsetFields.fields(1).Value)
itmX.SubItems(2) = NullCellProcess(recordsetFields.fields(2).Value)
itmX.SubItems(3) = NullCellProcess(recordsetFields.fields(3).Value)
itmX.SubItems(4) = NullCellProcess(recordsetFields.fields(4).Value)
itmX.SubItems(5) = NullCellProcess(recordsetFields.fields(5).Value)
itmX.SubItems(6) = NullCellProcess(recordsetFields.fields(6).Value)
itmX.SubItems(7) = NullCellProcess(recordsetFields.fields(7).Value)
itmX.SubItems(8) = NullCellProcess(recordsetFields.fields(8).Value)
recordsetFields.MoveNext
Next
End With
End Function
3.4查詢打印等功能輸出
有了WinCC中各項生產過程數據,就可以在VB軟件中構造不同的SQL語句來實現復雜報表的各種功能,構造SQL語句通式如下:strSql = "select 選擇內容 from 表名 where 條件",查詢界面如圖4所示。按用戶要求,使用printer或者將數據送入Excel軟件中排版并進行打印。

圖4 查詢界面
4結語
在ADO技術的基礎上,應用VB軟件實現了WinCC數據的高級歸檔。該方案解決了WinCC不能歸檔文本型變量的問題,結構簡單,制作報表方便,便于修改、刪除歸檔中的數據,具有良好的接口,也有很強的可擴展性和通用性,可直接移植到其他項目。實踐證明,該方案不必采購WinCC的授權軟件就可實現WinCC數據高級歸檔和輸出,具有一定的推廣應用價值。
參考文獻
[1] 西門子(中國)有限公司自動化與驅動集團. 深入淺出西門子WinCC V6[M]. 北京:北京航空航天大學出版社,2004.
[2] 李明輝,張秦. 利用VB實現WinCC數據高級歸檔的研究和應用[J]. 自動化儀表,2012(6):36-37.
責任編輯鄭練

Research and Application of WinCC Data Archiving and Report Output based on VB
SU Zhen, XU Xinle, WANG Kewei, SUN Lin, YING Xiaokun, CAO Hu, SHEN Mingyan
(Advanced Technology Generalization Institute of CNGC, Beijing 100089, China)
Abstract:With the rapid development of information and the increasing demand for production data archiving, use traditional method to realize WinCC data archiving cannot meet the needs of production. In order to solve the problems of WinCC data archiving such as unable to record text data; cannot query and modify data, a feasible scheme that using VB with high developing efficient and SQL with powerful storage capabilities to secondary development for WinCC was used. The advanced data archiving of WinCC is implemented by this scheme that satisfies data archiving requirement of enterprises while avoid using high cost Siemens exclusive option. Currently it has achieved good results in engineering application and has a certain application value.
Key words:WinCC, data archiving, VB, SQL, ADO
收稿日期:2015-10-09
作者簡介:蘇震(1985-),男,工程師,碩士,主要從事控制理論與控制工程等方面的研究。
中圖分類號:TP 311
文獻標志碼:A