蘇 震,徐新樂,王克偉,孫 林,應(yīng)小昆,曹 虎,沈明艷
(中國(guó)兵器工業(yè)新技術(shù)推廣研究所,北京 100089)
?
基于VB的WinCC數(shù)據(jù)歸檔及報(bào)表輸出的研究和應(yīng)用
蘇震,徐新樂,王克偉,孫林,應(yīng)小昆,曹虎,沈明艷
(中國(guó)兵器工業(yè)新技術(shù)推廣研究所,北京 100089)
摘要:隨著信息化步伐的加快,企業(yè)對(duì)生產(chǎn)數(shù)據(jù)歸檔的要求越來(lái)越高,利用傳統(tǒng)方式實(shí)現(xiàn)WinCC數(shù)據(jù)歸檔已不能滿足生產(chǎn)需要。為了解決WinCC數(shù)據(jù)歸檔過程中無(wú)法記錄文本型數(shù)據(jù),不能隨意查詢、更改歸檔數(shù)據(jù)等問題,采用了應(yīng)用開發(fā)效率高的VB軟件和數(shù)據(jù)存儲(chǔ)功能強(qiáng)大的SQL軟件對(duì)WinCC進(jìn)行二次開發(fā)的可行方案。該方案實(shí)現(xiàn)了對(duì)WinCC過程數(shù)據(jù)的高級(jí)歸檔,滿足了企業(yè)對(duì)數(shù)據(jù)歸檔的要求,同時(shí)避免了使用西門子專用歸檔選件帶來(lái)的高開發(fā)成本。目前,該方案已在工程應(yīng)用中取得了較好效果,具有一定的應(yīng)用推廣價(jià)值。
關(guān)鍵詞:WinCC;數(shù)據(jù)歸檔;VB;SQL;ADO
WinCC是西門子公司在自動(dòng)化領(lǐng)域一款功能強(qiáng)大的HMI組態(tài)監(jiān)控軟件,它可以歸檔生產(chǎn)過程數(shù)據(jù)到SQL數(shù)據(jù)庫(kù),并以曲線或者表格的形式顯示出來(lái);但WinCC過程數(shù)據(jù)歸檔無(wú)法記錄文本類型的數(shù)據(jù),且本文涉及的SQL是由SIEMENS為WinCC做了二次開發(fā)的,采用了一些獨(dú)有的技術(shù),只能通過WinCC DataMonitor系統(tǒng)組件和系統(tǒng)選件Connectivity Pack才能實(shí)現(xiàn)歸檔數(shù)據(jù)的訪問[1]。使用這2個(gè)工具都需要購(gòu)買授權(quán)軟件,而且僅能只讀訪問,WinCC禁止用戶對(duì)其歸檔數(shù)據(jù)進(jìn)行修改和復(fù)雜查詢,并且WinCC自帶的報(bào)表功能格式死板,缺乏靈活性。為了彌補(bǔ)這些不足,可利用VB這類開發(fā)工具實(shí)現(xiàn)對(duì)WinCC的二次開發(fā),將WinCC、VB和SQL有機(jī)集成,實(shí)現(xiàn)WinCC數(shù)據(jù)高級(jí)歸檔。
1系統(tǒng)概述
某熱處理生產(chǎn)線的控制系統(tǒng)采用西門子公司現(xiàn)場(chǎng)控制設(shè)備搭建,主要實(shí)現(xiàn)溫度、壓力和流量等數(shù)據(jù)的監(jiān)控,現(xiàn)場(chǎng)信號(hào)由AI通道和ModBus轉(zhuǎn)Profibus-DP通道送到300PLC主站,PLC把各站送來(lái)的數(shù)據(jù)按要求處理后,通過以太網(wǎng)送到上位機(jī)WinCC,對(duì)這些數(shù)據(jù)進(jìn)行分析處理后進(jìn)行儲(chǔ)存和報(bào)表輸出。整個(gè)系統(tǒng)結(jié)構(gòu)示意圖如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)示意圖
2技術(shù)策略
2.1ADO
ADO是一種程序?qū)ο螅糜诒硎居脩魯?shù)據(jù)庫(kù)中的數(shù)據(jù)結(jié)構(gòu)和所包含的數(shù)據(jù)。在Microsoft Visual Basic編輯器中,可以使用ADO對(duì)象以及ADO的附加組件(稱為Microsoft ADO Extensions for DLL and Security(ADOX))來(lái)創(chuàng)建、修改、查詢和檢驗(yàn)數(shù)據(jù)庫(kù),或者訪問外部數(shù)據(jù)源,還可在代碼中使用ADO來(lái)操作數(shù)據(jù)庫(kù)中的數(shù)據(jù)。也就是說,ADO是一個(gè)面向?qū)ο蟮腃OM組件庫(kù),用ADO訪問數(shù)據(jù)庫(kù),就是利用ADO對(duì)象來(lái)操作數(shù)據(jù)庫(kù)中的數(shù)據(jù)。它的最大特點(diǎn)是簡(jiǎn)單、易用。
2.2VB和SQL
Visual Basic是由Microsoft公司開發(fā)的一種基于BISIC可視化、面向?qū)ο蠛筒捎檬录?qū)動(dòng)方式的結(jié)構(gòu)化高級(jí)編程設(shè)計(jì)語(yǔ)言,可用于開發(fā)Windows環(huán)境下的各類應(yīng)用程序[2]。VB作為一款應(yīng)用成熟、穩(wěn)定易學(xué)的開發(fā)工具,與ADO是完全兼容的。
結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language,SQL)是一種特殊目的的編程語(yǔ)言,是一種數(shù)據(jù)庫(kù)查詢和程序設(shè)計(jì)語(yǔ)言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。SQL語(yǔ)言以其好學(xué)好用、結(jié)構(gòu)簡(jiǎn)單和兼容性強(qiáng)等特點(diǎn)在其他領(lǐng)域得到了廣泛應(yīng)用,SQL支持包括字符型、文本型、數(shù)值型、邏輯型和日期型等幾乎所有常用數(shù)據(jù)類型。
2.3歸檔模型
系統(tǒng)通過PLC等控制器采集現(xiàn)場(chǎng)數(shù)據(jù)到自身存儲(chǔ)器,上位機(jī)WinCC和下位機(jī)通信實(shí)現(xiàn)現(xiàn)場(chǎng)監(jiān)控,VB通過ADO對(duì)象訪問數(shù)據(jù)并進(jìn)行分析處理,將數(shù)據(jù)存儲(chǔ)到指定的SQL數(shù)據(jù)庫(kù)中,最后通過對(duì)SQL數(shù)據(jù)庫(kù)的操作實(shí)現(xiàn)對(duì)過程數(shù)據(jù)的高級(jí)歸檔和報(bào)表輸出。數(shù)據(jù)歸檔模型如圖2所示。
圖2 數(shù)據(jù)歸檔模型
3高級(jí)歸檔的實(shí)現(xiàn)
報(bào)表系統(tǒng)通過PLC采集現(xiàn)場(chǎng)數(shù)據(jù),應(yīng)用VB軟件中的ADO數(shù)據(jù)接口訪問WinCC中的數(shù)據(jù),經(jīng)過分析處理存入SQL數(shù)據(jù)庫(kù)中,然后通過VB軟件對(duì)SQL數(shù)據(jù)庫(kù)進(jìn)行查詢,將查詢結(jié)果傳輸?shù)娇丶?本系統(tǒng)采用Microsoft Windows Common Controls 6.0控件)中以報(bào)表的形式顯示、輸出。
使用ADO技術(shù)開發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序主要有2種方法:1)在應(yīng)用程序中使用ActiveX控件,該方法可以最大程度地簡(jiǎn)化應(yīng)用程序設(shè)計(jì),只需要將ADO控件的屬性設(shè)置好,便可以訪問數(shù)據(jù)庫(kù)中的數(shù)據(jù);2)在應(yīng)用程序中直接聲明或新建ADO對(duì)象對(duì)數(shù)據(jù)進(jìn)行操作。第1種方法的特點(diǎn)是操作簡(jiǎn)單,但是效率低,對(duì)程序的控制相對(duì)較弱;第2種方法對(duì)程序的操作要靈活的多,效率高。本文采用第2種方法進(jìn)行開發(fā)。
3.1連接到數(shù)據(jù)源
首先,配置SQL數(shù)據(jù)庫(kù)的環(huán)境。在SQL中建立數(shù)據(jù)庫(kù),起名為report6182,并根據(jù)需求在數(shù)據(jù)庫(kù)中建立2個(gè)數(shù)據(jù)表(area1data、area2data)及其關(guān)系。然后,在VB環(huán)境下進(jìn)行數(shù)據(jù)庫(kù)的連接。
要使用ADO對(duì)象應(yīng)先為當(dāng)前工程引用ADO對(duì)象庫(kù),方法是:執(zhí)行“工程”菜單中的“引用”命令,在對(duì)話框中選中“Microsoft ActiveX Data Object 2.0 Library”。隨后開發(fā)數(shù)據(jù)庫(kù)源連接對(duì)象代碼,在該對(duì)象中配置數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序、數(shù)據(jù)庫(kù)服務(wù)器地址、數(shù)據(jù)庫(kù)名稱、數(shù)據(jù)庫(kù)端口號(hào)以及用戶名和密碼,配置信息正確后即可連接成功。代碼如下:
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指定訪問數(shù)據(jù)源的命令
數(shù)據(jù)庫(kù)連接成功后,就可以通過ADO進(jìn)行數(shù)據(jù)的采集、處理和轉(zhuǎn)存了。在VB軟件中加入計(jì)時(shí)器控件,利用計(jì)時(shí)器時(shí)間和邏輯判斷語(yǔ)句,按照用戶要求在指定條件下按指定周期采集WinCC中的變量值,進(jìn)行求和、平均等處理后寫入數(shù)據(jù)庫(kù),以備報(bào)表查詢。讀取變量主要代碼如下:
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將命令執(zhí)行結(jié)果顯示輸出
將數(shù)據(jù)庫(kù)中的數(shù)據(jù)查詢出來(lái)的結(jié)果送到Microsoft Windows Common Controls 6.0控件中進(jìn)行顯示輸出(見圖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(, , "時(shí)間", 2200)
Set clmX = .listTables.ColumnHeaders.Add(, , "厚度", 800)
Set clmX = .listTables.ColumnHeaders.Add(, , "批號(hào)", 1500)
Set clmX = .listTables.ColumnHeaders.Add(, , "動(dòng)作", 800)
Set clmX = .listTables.ColumnHeaders.Add(, , "一區(qū)上溫度", 1200)
Set clmX = .listTables.ColumnHeaders.Add(, , "一區(qū)下溫度", 1200)
Set clmX = .listTables.ColumnHeaders.Add(, , "二區(qū)上溫度", 1200)
Set clmX = .listTables.ColumnHeaders.Add(, , "二區(qū)下溫度", 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中各項(xiàng)生產(chǎn)過程數(shù)據(jù),就可以在VB軟件中構(gòu)造不同的SQL語(yǔ)句來(lái)實(shí)現(xiàn)復(fù)雜報(bào)表的各種功能,構(gòu)造SQL語(yǔ)句通式如下:strSql = "select 選擇內(nèi)容 from 表名 where 條件",查詢界面如圖4所示。按用戶要求,使用printer或者將數(shù)據(jù)送入Excel軟件中排版并進(jìn)行打印。
圖4 查詢界面
4結(jié)語(yǔ)
在ADO技術(shù)的基礎(chǔ)上,應(yīng)用VB軟件實(shí)現(xiàn)了WinCC數(shù)據(jù)的高級(jí)歸檔。該方案解決了WinCC不能歸檔文本型變量的問題,結(jié)構(gòu)簡(jiǎn)單,制作報(bào)表方便,便于修改、刪除歸檔中的數(shù)據(jù),具有良好的接口,也有很強(qiáng)的可擴(kuò)展性和通用性,可直接移植到其他項(xiàng)目。實(shí)踐證明,該方案不必采購(gòu)WinCC的授權(quán)軟件就可實(shí)現(xiàn)WinCC數(shù)據(jù)高級(jí)歸檔和輸出,具有一定的推廣應(yīng)用價(jià)值。
參考文獻(xiàn)
[1] 西門子(中國(guó))有限公司自動(dòng)化與驅(qū)動(dòng)集團(tuán). 深入淺出西門子WinCC V6[M]. 北京:北京航空航天大學(xué)出版社,2004.
[2] 李明輝,張秦. 利用VB實(shí)現(xiàn)WinCC數(shù)據(jù)高級(jí)歸檔的研究和應(yīng)用[J]. 自動(dòng)化儀表,2012(6):36-37.
責(zé)任編輯鄭練
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
作者簡(jiǎn)介:蘇震(1985-),男,工程師,碩士,主要從事控制理論與控制工程等方面的研究。
中圖分類號(hào):TP 311
文獻(xiàn)標(biāo)志碼:A