摘 要: 重點(diǎn)介紹了在工控組態(tài)軟件WINCC上的數(shù)據(jù)庫(kù)通信方法和采集過(guò)程,基于WINCC組態(tài)軟件的數(shù)據(jù)庫(kù)后臺(tái)是關(guān)系數(shù)據(jù)庫(kù)SQL Server。結(jié)合實(shí)際應(yīng)用來(lái)研究關(guān)系數(shù)據(jù)庫(kù)SQL Server及其優(yōu)化策略和服務(wù)性能。
關(guān)鍵詞: 數(shù)據(jù)庫(kù); SQL Server; WINCC
從WINCC6.0開(kāi)始,就開(kāi)始采用SQL2000SP3做為WINCC的后臺(tái)數(shù)據(jù)了,而這個(gè)SQL2000SP3由Siemens為WINCC做了二次開(kāi)發(fā)。WINCC的數(shù)據(jù)有設(shè)計(jì)時(shí)數(shù)據(jù)庫(kù)和運(yùn)行時(shí)數(shù)據(jù)庫(kù),分別放在相關(guān)的目錄。設(shè)計(jì)時(shí)數(shù)據(jù)庫(kù)沒(méi)有研究的必要性,但運(yùn)行時(shí)數(shù)據(jù)庫(kù)要知道它的名稱(chēng),其名稱(chēng)一般是“CC_工程名_年_月_日_時(shí)_分_秒R”,無(wú)論準(zhǔn)備以DSN或OLEDB的方式訪問(wèn)數(shù)據(jù)庫(kù),都需要該名稱(chēng)。將WINCC激活,然后在“ODBC管理器”或“SQL企業(yè)管理器”下的“DATABASE”可以看到運(yùn)行時(shí)數(shù)據(jù)庫(kù)的名稱(chēng)。其實(shí),WINCC在運(yùn)行時(shí),根據(jù)WINCC的設(shè)置,數(shù)據(jù)歸檔以一定時(shí)間做為基準(zhǔn),形成數(shù)據(jù)片段。在數(shù)據(jù)片段下,有3個(gè)表是用戶(hù)所關(guān)心的:ARCHIVE(用戶(hù)歸檔記錄)、TAGPRESSED(TAGUNPRESSED)(壓縮/非壓縮變量歸檔記錄)和MSARCLONG(報(bào)警記錄)。在這里主要介紹在WINCC項(xiàng)目中的數(shù)據(jù)庫(kù)編程和通信[1]。
1 總體思路
WINCC項(xiàng)目中通用C和VB 兩種語(yǔ)言,所以,采用與數(shù)據(jù)庫(kù)進(jìn)行通信的必要條件就是熟悉這2種語(yǔ)言。作為編程語(yǔ)言來(lái)說(shuō),編程只是最后實(shí)現(xiàn)結(jié)果的方式,重點(diǎn)在于通信方式的建立。下面分別從數(shù)據(jù)通信方式和實(shí)現(xiàn)方法來(lái)介紹。
2 數(shù)據(jù)通信方式
與數(shù)據(jù)庫(kù)通信的數(shù)據(jù)訪問(wèn)接口有以下幾種[2]。
(1)高級(jí)數(shù)據(jù)連接器ADC(Advanced Data Connector):提供綁定ADO數(shù)據(jù)源到窗體的數(shù)據(jù)綁定控件上。ADC主要是一種直接訪問(wèn)或者通過(guò)ADO訪問(wèn)遠(yuǎn)程O(píng)LEDB對(duì)象的技術(shù),它支持主要應(yīng)用在微軟IE瀏覽器上的數(shù)據(jù)綁定控件,是特地為以Web上的瀏覽器為基礎(chǔ)的應(yīng)用程序而設(shè)計(jì)的。
(2)Active數(shù)據(jù)對(duì)象ADO(Active Data Objects):ADO實(shí)際是一種提供訪問(wèn)各種數(shù)據(jù)類(lèi)型的連接機(jī)制。ADO設(shè)計(jì)為一種極簡(jiǎn)單的格式,通過(guò)ODBC的方法同數(shù)據(jù)庫(kù)接口??梢允褂萌魏我环NODBC數(shù)據(jù)源,既適合于SQL Server、Oracle、Access等數(shù)據(jù)庫(kù)應(yīng)用程序,也適合于Excel表格、文本文件、圖形文件和無(wú)格式的數(shù)據(jù)文件。ADO是基于OLEDB之上的技術(shù),因此ADO通過(guò)其內(nèi)部的屬性和方法提供統(tǒng)一的數(shù)據(jù)訪問(wèn)接口方法。
(3)數(shù)據(jù)訪問(wèn)對(duì)象DAO(Data Access Objects):一種面向?qū)ο蟮慕缑娼涌?。通過(guò)DAO/JET功能可以訪問(wèn)ISAM數(shù)據(jù)庫(kù),使用DAO/ODBCDirect功能可以實(shí)現(xiàn)遠(yuǎn)程RDO功能。使用DAO的程序編碼非常簡(jiǎn)單,DAO提供豐富的游標(biāo)(Cursor)類(lèi)型的結(jié)果集和非游標(biāo)(Cursor-Less)類(lèi)型的結(jié)果集,同DDL(數(shù)據(jù)描述語(yǔ)言)的功能類(lèi)似。DAO模型是設(shè)計(jì)關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)結(jié)構(gòu)的對(duì)象類(lèi)的集合,它提供了完成管理這樣一個(gè)系統(tǒng)所需的全部操作的屬性和方法,包括創(chuàng)建數(shù)據(jù)庫(kù),定義表、字段和索引,建立表間的關(guān)系,定位和查詢(xún)數(shù)據(jù)庫(kù)等工具。
(4)數(shù)據(jù)連接性引擎技術(shù)JET(Joint Engine Technology):一種基于工作站通過(guò)DAO的數(shù)據(jù)庫(kù)訪問(wèn)機(jī)制。雖然可以通過(guò)微軟Access提供的ODBC驅(qū)動(dòng)程序訪問(wèn)JET數(shù)據(jù)庫(kù),但使用這些驅(qū)動(dòng)程序在功能上有所限制。JET機(jī)制有自己的查詢(xún)和結(jié)果集處理功能,并可對(duì)同種或異種數(shù)據(jù)源作查詢(xún)處理。
(5)開(kāi)放式的數(shù)據(jù)庫(kù)連接ODBC(Open DataBase Connectivity):一種公認(rèn)的關(guān)系數(shù)據(jù)源的接口界面。它快而輕,并且提供統(tǒng)一接口的界面。ODBC對(duì)任何數(shù)據(jù)源都未作優(yōu)化。
(6)ODBCDirect:一種基于DAO對(duì)象的新的DAO模式,其方法和屬性與RDO功能相同。在有DAO代碼存在的場(chǎng)合使用,可用來(lái)訪問(wèn)遠(yuǎn)程數(shù)據(jù)源。
(7)OLEDB:一種底層數(shù)據(jù)訪問(wèn)界面接口,是用于第三方驅(qū)動(dòng)程序商家開(kāi)發(fā)輸出數(shù)據(jù)源到ADO技術(shù)的應(yīng)用程序,或用于C++的開(kāi)發(fā)者開(kāi)發(fā)定制的數(shù)據(jù)庫(kù)組件。OLEDB不能被VB直接調(diào)用。
(8)遠(yuǎn)程數(shù)據(jù)訪問(wèn)控件RDC(Remote Data Control):一種對(duì)RDO數(shù)據(jù)綁定的控件??梢詫⑻囟ǖ慕Y(jié)果集輸出到數(shù)據(jù)源控件。
(9)遠(yuǎn)程數(shù)據(jù)對(duì)象RDO(Remote Data Objects):遠(yuǎn)程數(shù)據(jù)對(duì)象和集合為使用代碼來(lái)創(chuàng)建和操作一個(gè)遠(yuǎn)程O(píng)DBC數(shù)據(jù)庫(kù)系統(tǒng)的各個(gè)部件提供了一個(gè)框架。對(duì)象和集合都具有描述數(shù)據(jù)庫(kù)的各個(gè)部件特征的屬性以及用來(lái)操作這些部件的方法。可以在對(duì)象和集合之間建立關(guān)系,這些關(guān)系代表了數(shù)據(jù)庫(kù)系統(tǒng)的邏輯結(jié)構(gòu)。RDO是ODBC API的一個(gè)淺層界面接口,是專(zhuān)為訪問(wèn)遠(yuǎn)程O(píng)DBC關(guān)系數(shù)據(jù)源而設(shè)計(jì)的。
(10)VBSQL:Visual Basic結(jié)構(gòu)化查詢(xún)語(yǔ)言,是一種基于API的接口方法,幾乎與C的DB-Library API相同。VBSQL只支持微軟的SQL Server。VBSQL快而且輕,但不支持對(duì)象界面。
盡管數(shù)據(jù)訪問(wèn)方式有多種,但是適合WINCC通信的方式只有ODBC和ADO,這里重點(diǎn)介紹ODBC接口訪問(wèn)方式。
3 實(shí)現(xiàn)方法
ODBC是一種應(yīng)用程序的接口(API),這種接口提供了獨(dú)立于任何數(shù)據(jù)管理系統(tǒng)的應(yīng)用程序編寫(xiě)能力。ODBC通過(guò)ODBC驅(qū)動(dòng)程序?yàn)椴煌臄?shù)據(jù)庫(kù)供應(yīng)商的一組應(yīng)用程序接口提供了特殊的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)。用戶(hù)的應(yīng)用程序使用這組API來(lái)調(diào)度ODBC驅(qū)動(dòng)程序。然后驅(qū)動(dòng)程序通過(guò)SQL語(yǔ)句與DBMS發(fā)生聯(lián)系。
下面介紹ODBC數(shù)據(jù)源。在“我的電腦”中打開(kāi)“控制面板”中的“管理工具”,即可見(jiàn)ODBC數(shù)據(jù)源圖標(biāo)。ODBC數(shù)據(jù)源管理器為配置、添加、刪除各種不同的數(shù)據(jù)源名稱(chēng)提供了最為簡(jiǎn)潔的方法。它使用戶(hù)可以輕松地完成數(shù)據(jù)源的配置工作,用戶(hù)也可以刪除原有的DSN(數(shù)據(jù)源名稱(chēng)),或?qū)ο惹芭渲玫臄?shù)據(jù)源進(jìn)行修改。ODBC數(shù)據(jù)源管理器的具體功能如下[3]。
(1)用戶(hù)DSN:ODBC用戶(hù)數(shù)據(jù)源存儲(chǔ)了如何與指定數(shù)據(jù)提供者連接的信息。用戶(hù)數(shù)據(jù)源只對(duì)當(dāng)前的用戶(hù)可見(jiàn),而且只能應(yīng)用在本機(jī)上;
(2)系統(tǒng)DSN: ODBC系統(tǒng)數(shù)據(jù)源存儲(chǔ)了如何與指定數(shù)
據(jù)提供者連接的信息。系統(tǒng)數(shù)據(jù)源對(duì)當(dāng)前機(jī)器上的所有用戶(hù)可見(jiàn);
(3)文件DSN: ODBC文件數(shù)據(jù)源允許用戶(hù)連接數(shù)據(jù)提供者。文件DSN可以由安裝了相同驅(qū)動(dòng)程序的用戶(hù)共享;
(4)驅(qū)動(dòng)程序: ODBC驅(qū)動(dòng)程序允許那些支持ODBC的程序通過(guò)ODBC數(shù)據(jù)源獲取信息。如果安裝新的驅(qū)動(dòng)程序,要使用其安裝程序;
(5)跟蹤:ODBC跟蹤允許創(chuàng)建調(diào)用ODBC驅(qū)動(dòng)程序的日志,以供技術(shù)人員查看;也可以輔助調(diào)試應(yīng)用程序。Visual Studio跟蹤啟動(dòng)Microsoft Visual Studio的ODBC跟蹤;
(6)連接池:連接池允許應(yīng)用程序重新打開(kāi)連接句柄,此操作將往返過(guò)程存入服務(wù)器。
建立數(shù)據(jù)源:通過(guò)對(duì)在系統(tǒng)DSN中建立SQL Server數(shù)據(jù)源test,連接的數(shù)據(jù)庫(kù)為test,并測(cè)試成功。
查詢(xún)數(shù)據(jù)庫(kù):
Dim cn,strConn,sql,rs
Dim view1,view2
Set cn = CreateObject("ADODB.Connection")
Set rs=CreateObject("ADODB.Recordset")
strConn="test"
sql="select * from student order by id "
cn.ConnectionString=strConn
cn.Open
rs.Open sql,cn
view1=rs.fields("id")
view2=rs("name")
rs.movenext
Set rs=Nothing
Set cn=Nothing
以上是一個(gè)在WINCC中訪問(wèn)數(shù)據(jù)庫(kù)、實(shí)現(xiàn)查詢(xún)功能的簡(jiǎn)單實(shí)例。同樣,也可以實(shí)現(xiàn)插入、刪除、修改等功能。
以上只是初級(jí)的WINCC與數(shù)據(jù)庫(kù)通信,要想提高效率,需要進(jìn)行性能調(diào)校。所謂性能調(diào)校,是指以用戶(hù)期望為依據(jù)進(jìn)行調(diào)校目的方法。然而性能問(wèn)題的癥結(jié)通常不是表象所能顯示出來(lái)的,從不同的方面去看,往往會(huì)有不同的解釋。
數(shù)據(jù)庫(kù)性能調(diào)校的步驟流程“DETECT”為:
(1)Discover the problem,發(fā)現(xiàn)問(wèn)題;
(2)Explore the conditions,探究原因,為問(wèn)題提供明確的定義與定位;
(3)Track down possible approaches,提供可能的解決方案;
(4)Execute the most likely approach,執(zhí)行最有可能的解決方案;
(5)Check for success(如果需要,可重復(fù)之前的步驟),確認(rèn)解決方案成功與否;
(6)Tie up loose ends完成收尾工作。
通過(guò)以上調(diào)校步驟來(lái)對(duì)數(shù)據(jù)庫(kù)性能進(jìn)行優(yōu)化調(diào)校。也可以利用相關(guān)工具進(jìn)行性能調(diào)校,如SQLDiag.exe、性能監(jiān)視器(Performance Monitor)、事件日志與事件查看器(Events Log)、網(wǎng)絡(luò)監(jiān)視器(Network Monitor)、SQL Profiler、索引微調(diào)向?qū)В↖ndex Tuning Wizard)、Query Analyzer、DBCC、Application Center Test和Web Application Stress Tool等。
通過(guò)對(duì)WINCC與數(shù)據(jù)庫(kù)SQL Server進(jìn)行連接的實(shí)例來(lái)說(shuō)明其調(diào)校性能的步驟,實(shí)現(xiàn)了工控組態(tài)軟件WINCC的數(shù)據(jù)庫(kù)通信方法和采集過(guò)程;并就其性能方面進(jìn)行了概述,提到了多種性能調(diào)校工具軟件,對(duì)數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行監(jiān)控和優(yōu)化性能起了一定作用[4]。
參考文獻(xiàn)
[1] 西門(mén)子(中國(guó))自動(dòng)化與驅(qū)動(dòng)集團(tuán).深入淺出西門(mén)子WinCC V6. 北京:北京航空航天大學(xué)出版社,2004.
[2] 牛勇,袁鵬飛.QL Server編程篇[M].北京:電子工業(yè)出版社, 2005.
[3] 鄭劍峰,董國(guó)平.SQL Server開(kāi)發(fā)答疑[M].北京:北京:人民郵電出版社,2006.
[4] 胡百敬.Microsoft SQL Server性能調(diào)校[M].北京:電子工業(yè)出版社,2005.