国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于OPC技術(shù)的WinCC實(shí)時(shí)數(shù)據(jù)歸檔

2015-12-15 10:46強(qiáng)明輝張琳琳馬永煒
電氣自動(dòng)化 2015年3期
關(guān)鍵詞:窗體控件客戶端

強(qiáng)明輝,張琳琳,馬永煒

(蘭州理工大學(xué)電氣工程與信息工程學(xué)院,甘肅 蘭州 730050)

0 引言

SIMATIC WinCC是由西門子公司和微軟公司共同開(kāi)發(fā)的一款功能強(qiáng)大的HMI/SCADA應(yīng)用軟件系統(tǒng)[1]。WinCC本身具有自己的歸檔數(shù)據(jù)庫(kù),但其進(jìn)行歸檔后的數(shù)據(jù)庫(kù)為壓縮格式,需要通過(guò)WinCC專門集成的工具分析并顯示數(shù)據(jù),這為第三方的訪問(wèn)帶來(lái)了很多不便。由于WinCC集成了OPC技術(shù),所以可以對(duì)其進(jìn)行二次開(kāi)發(fā)。本文是利用VB編寫(xiě)OPC客戶端,以WinCC作為OPC的服務(wù)器,利用OPC協(xié)議實(shí)現(xiàn)VB和OPC之間的動(dòng)態(tài)數(shù)據(jù)交換,然后通過(guò)VB的ADO數(shù)據(jù)接口,把數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。解決了WinCC實(shí)時(shí)數(shù)據(jù)轉(zhuǎn)存到標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)的難題,為企業(yè)管理和監(jiān)控系統(tǒng)提供了標(biāo)準(zhǔn)的數(shù)據(jù)源。

1 OPC技術(shù)

OPC是針對(duì)于不同供應(yīng)廠商的設(shè)備和應(yīng)用程序之間的軟件接口標(biāo)準(zhǔn)化,使其間的數(shù)據(jù)交換更加簡(jiǎn)單化的目的而提出的。OPC技術(shù)將各個(gè)設(shè)備驅(qū)動(dòng)程序和通訊程序封裝成獨(dú)立的OPC服務(wù)器,OPC客戶端無(wú)需知道系統(tǒng)的性能特點(diǎn),而只需通過(guò)標(biāo)準(zhǔn)的OPC接口訪問(wèn)OPC服務(wù)器[2-5]。

OPC的核心是COM/DCOM技術(shù),COM技術(shù)是一種軟件組件間相互數(shù)據(jù)交換的有效方法,COM對(duì)象分為客戶端和服務(wù)器兩類,客戶端通過(guò)COM接口訪問(wèn)服務(wù)器。

OPC數(shù)據(jù)訪問(wèn)提供從數(shù)據(jù)源讀取和寫(xiě)入特定數(shù)據(jù)的功能。OPC客戶程序通過(guò)接口從服務(wù)器讀取數(shù)據(jù)或?qū)懭霐?shù)據(jù)。在OPC客戶機(jī)訪問(wèn)服務(wù)器時(shí),需要?jiǎng)?chuàng)建一個(gè)服務(wù)器對(duì)象,調(diào)用這個(gè)服務(wù)器對(duì)象的接口,服務(wù)器對(duì)象創(chuàng)建組對(duì)象并返回組對(duì)象的指針,客戶程序獲得組對(duì)象的指針后調(diào)用其接口。OPC客戶程序訪問(wèn)服務(wù)器的結(jié)構(gòu)圖如圖1。

2 WinCC與數(shù)據(jù)庫(kù)的數(shù)據(jù)交換

2.1 WinCC與VB的數(shù)據(jù)交換

2.1.1 WinCC的OPC服務(wù)器設(shè)置

WinCC的OPC服務(wù)器設(shè)置需要分幾步完成:

圖1 OPC客戶程序訪問(wèn)服務(wù)器結(jié)構(gòu)圖

1)在安裝WinCC的時(shí)候需要安裝OPC Server,具體方法是在安裝選項(xiàng)的Communication組件中,選擇OPC Server項(xiàng)。

2)對(duì) WinCC的 OPC服務(wù)器進(jìn)行DCOM設(shè)置。具體方法是單擊“開(kāi)始”菜單并選擇“運(yùn)行”,輸入dcomcnfg,打開(kāi)“組件服務(wù)”對(duì)話框;在此對(duì)話框中,單擊“組件服 務(wù)”——“我 的 電 腦 ”——“DCOM配置”——選擇“OPCServer.WinCC”——右鍵“屬性”按鈕,打開(kāi)“OPCServer.WinCC 屬性”對(duì)話框;在此對(duì)話框中,單擊“安全”選項(xiàng)中自定義啟動(dòng)和激活權(quán)限,在“標(biāo)識(shí)”標(biāo)簽中選擇“交互式用戶”選項(xiàng)。

3)在完成上述步驟以后,打開(kāi)組態(tài)好的WinCC監(jiān)控界面。參數(shù)設(shè)置界面如圖2所示。

2.1.2 OPC客戶端的設(shè)計(jì)及編程

利用Visual Basic開(kāi)發(fā)OPC客戶程序時(shí),要對(duì)DLL進(jìn)行注冊(cè)。具體的方法是從VB菜單中選擇“工程”——“引用”,在可用的引用一覽表中,選擇OPC Automation 2.0后按確定。

圖2 WinCC人機(jī)界面顯示

1)VB窗體設(shè)計(jì)

注冊(cè)完DLL以后,就要設(shè)計(jì)VB的窗體。在窗體上添加兩個(gè)Command按鈕,分別命名為連接服務(wù)器和退出。根據(jù)項(xiàng)目要求,需同步傳輸23個(gè)數(shù)據(jù),在窗體上布局23個(gè)Text控件會(huì)比較麻煩,本文采用編程的方式,在程序運(yùn)行時(shí),將23個(gè)Text控件同時(shí)顯示在窗體上。部分代碼如下:

Load Text1(I)//上載Text控件數(shù)組

Load Label1(I)//上載Label控件數(shù)組

Label1(I).Left=((I-1)10)*(Label1(1).Width+2000)+Label1(1).Left //Label控件的橫坐標(biāo)

Label1(I).Top=((I-1)Mod 10)*(Label1(1).Height+100)+Label1(1).Top//Label控件的縱坐標(biāo)

Text1(I).Left=((I-1)10)*(Text1(1).Width+2200)+Text1(1).Left //Text控件的橫坐標(biāo)

Text1(I).Top=((I-1)Mod 10)*(Text1(1).Height+100)+Text1(1).Top//Text控件的縱坐標(biāo)

Label1(I).Visible=True

Text1(I).Visible=True

VB窗體如圖3。

圖3 VB窗體設(shè)計(jì)

2)OPC客戶端編程

VB的OPC客戶端和OPC服務(wù)器之間數(shù)據(jù)互相通訊的主要源代碼如下:

變量聲明

Dim WithEvents objServer As OPCServer //OPC服務(wù)

Dim WithEvents objGroup As OPCGroup //OPC組

Dim objGroups As OPCGroups

Dim objTestGrp As OPCGroup

Dim objItems As OPCItems

Dim lClientHandles(23)As Long//客戶句柄

Dim ServerHandles()As Long//服務(wù)器句柄

Dim lErrors()As Long

Dim ItemIDs(23)As String//OPC的標(biāo)簽

Dim vtItemValues()As Variant//用于存儲(chǔ)OPC數(shù)據(jù)的地址

Dim a(1 To 23)As Variant

連接服務(wù)器

Set objServer=New OPCServer//創(chuàng)建新的OPC服務(wù)器

objServer.Connect("OPCServer.WinCC.1")

//連接OPC服務(wù)器

If objServer.ServerState=OPCRunning Then

Option1.Value=True//連接服務(wù)器成功的標(biāo)志

添加OPC組和OPC標(biāo)簽

Set objGroups=objServer.OPCGroups//添加一個(gè)OPC組集合

Set objTestGrp=objGroups.Add("TestGrp")

//添加一個(gè)OPC組

Set objItems=objTestGrp.OPCItems//建立OPC標(biāo)簽集合

For I=1 To 23//生成23個(gè)項(xiàng)標(biāo)識(shí)符

ItemIDs(I)="bb"&I

lClientHandles(I)=I

objItems.AddItems 23,ItemIDs,lClientHandles,ServerHandles,lErrors//添加OPC標(biāo)簽

斷開(kāi)服務(wù)器

objItems.Remove 23,ServerHandles,lErrors

//清除OPC的標(biāo)簽

objGroups.Remove"TestGrp"http://清除 OPC 組

objServer.Disconnect//斷開(kāi) OPC 的服務(wù)器

Set objItems=Nothing

Set objTestGrp=Nothing

Set objServer=Nothing

本程序是利用Timer1的Timer事件來(lái)進(jìn)行數(shù)據(jù)更新的顯示,如果數(shù)據(jù)有新的更新就要導(dǎo)入到數(shù)據(jù)庫(kù)中,有關(guān)定時(shí)器的代碼將在下面介紹。

2.2 VB與數(shù)據(jù)庫(kù)的數(shù)據(jù)交換

當(dāng)數(shù)據(jù)由WinCC傳輸?shù)絍B以后,由于VB不是一個(gè)存儲(chǔ)單元,所以要將數(shù)據(jù)存儲(chǔ)到指定的歸檔數(shù)據(jù)庫(kù)中,以備報(bào)表查詢。因?yàn)樵擁?xiàng)目的數(shù)據(jù)量不大,選用Access為歸檔數(shù)據(jù)庫(kù)。

2.2.1 VB訪問(wèn)數(shù)據(jù)庫(kù)的ADO接口

在VB中,常用的數(shù)據(jù)訪問(wèn)接口有下列幾種:Active數(shù)據(jù)對(duì)象ADO,開(kāi)放式數(shù)據(jù)庫(kù)連接ODBC,遠(yuǎn)程數(shù)據(jù)庫(kù)對(duì)象RDO,數(shù)據(jù)庫(kù)訪問(wèn)對(duì)象DAO。其中ADO接口是Microsoft開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序面向?qū)ο蟮男陆涌凇2捎昧薕LE DB的數(shù)據(jù)訪問(wèn)模式,是數(shù)據(jù)訪問(wèn)對(duì)象DAO、遠(yuǎn)程數(shù)據(jù)對(duì)象RDO和開(kāi)放數(shù)據(jù)庫(kù)互聯(lián)ODBC三種方式的擴(kuò)展,具有更加簡(jiǎn)單、靈活的操作性能[6]。

ADO對(duì)象模型定義了一個(gè)可編程的分層對(duì)象集合,主要有三個(gè)對(duì)象成員Connection、Command和Recordset對(duì)象,以及幾個(gè)集合對(duì)象Errors、Parameters和Fileds等組成。

2.2.2 VB利用ADO接口訪問(wèn)數(shù)據(jù)庫(kù)

在VB使用ADO控件訪問(wèn)Access前,先要在Access中進(jìn)行歸檔數(shù)據(jù)庫(kù)環(huán)境設(shè)置。在Access中建立一個(gè)名為溫度的數(shù)據(jù)庫(kù),并在該數(shù)據(jù)庫(kù)的子目錄中新建一張表,命名為現(xiàn)場(chǎng)溫度記錄,這張表用于存儲(chǔ)從WinCC服務(wù)器中獲得的現(xiàn)場(chǎng)溫度數(shù)據(jù)。接著,在VB的開(kāi)發(fā)環(huán)境下開(kāi)發(fā)與數(shù)據(jù)庫(kù)連接的程序,本次使用的VB控件主要是Timer和Adodc,相應(yīng)的程序設(shè)計(jì)步驟如下。

1)建立VB與歸檔數(shù)據(jù)庫(kù)鏈接。在VB中使用Adodc控件前,必須先對(duì)其進(jìn)行設(shè)置,具體方法是:

首先,通過(guò)“工程”——“部件”菜單命令選擇“Microsoft ADO Data Control 6.0(SP6)(OLEDB)”選項(xiàng),將ADO數(shù)據(jù)控件添加到工具箱,點(diǎn)擊ADO數(shù)據(jù)控件,將其添加到窗體上。

然后,設(shè)置Adodc2的ConnectionString屬性,在Adodc2控件上右鍵“Adodc屬性”——使用連接字符串——單擊“生成”按鈕——選擇 Microsoft Jet 4.0 OLE DB Provider——單擊“下一步”按鈕——選擇或輸入數(shù)據(jù)庫(kù)名稱——單擊“測(cè)試連接”按鈕——彈出測(cè)試連接成功對(duì)話框—點(diǎn)擊“確定”按鈕即可。

最后,設(shè)置Adodc2的RecordSource屬性,選擇命令類型為2-adCmdTable,在表名項(xiàng)選擇現(xiàn)場(chǎng)溫度記錄。

根據(jù)工藝要求,本項(xiàng)目需要同步傳輸23個(gè)數(shù)據(jù),所以需要23個(gè)Text控件,這些控件是通過(guò)編程來(lái)顯現(xiàn)在VB的窗體上的,對(duì)于這些控件的ADO屬性設(shè)置,我們也需編程實(shí)現(xiàn),部分代碼如下:

Set Text1(I).DataSource=Adodc2'將所有 Text控件的 DataSource 屬性設(shè)置為Adodc2

設(shè)置所有Text控件的DataFiled屬性

For I=1 To 8

Text1(I).DataField="體熱風(fēng)"& I& "溫度"

Next

For I=9 To 16

Text1(I).DataField="帽熱風(fēng)"&I-8&"溫度"Next

Text1(17).DataField="體水槽溫度"

Text1(18).DataField="體膠罐溫度"

Text1(19).DataField="體膠液溫度"

Text1(20).DataField="帽水槽溫度"

Text1(21).DataField="帽膠罐溫度"

Text1(22).DataField="帽膠液溫度"

Text1(23).DataField="廠房溫度"

2)實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)的存儲(chǔ)。在窗體上插入一個(gè)定時(shí)器控件,命名為Timer1,將其Interval屬性設(shè)置為100,在Timer1_Timer()事件中編程。為了不產(chǎn)生冗余,建了一個(gè)數(shù)據(jù)緩沖數(shù)組,把每次提取出來(lái)的數(shù)據(jù)同之前的數(shù)據(jù)緩沖組中的值作對(duì)比,若不同就插入數(shù)據(jù)庫(kù),同時(shí)更新數(shù)據(jù)緩沖數(shù)組中的值。部分代碼如下:

PrivateSub Timer1_Timer()

Dim Update As Boolean

Dim I As Integer

SyncRead OPCCache,vtItemValues,lErrors

//同步讀取WinCC的數(shù)據(jù)

For I=1 To 23

If vtItemValues(I)<>a(I)Then//將OPC標(biāo)簽數(shù)組中的數(shù)和緩沖數(shù)組中的數(shù)進(jìn)行對(duì)比

Update=True

Exit For

End If

Next

If Update Then

Adodc2.Recordset.AddNew//向 Access數(shù)據(jù)庫(kù)中插入數(shù)據(jù)

Adodc2.Recordset.Fields("日期及時(shí)間")=Now//向 Access數(shù)據(jù)庫(kù)中插入當(dāng)前的日期和時(shí)間

For I=1 To 23

Text1(I).Text=vtItemValues(I)

a(I)=vtItemValues(I)

Next

Adodc2.Recordset.Update//保存插入到數(shù)據(jù)庫(kù)中的數(shù)據(jù)

End If

End Sub

部分實(shí)時(shí)數(shù)據(jù)進(jìn)入表后如圖4。

圖4 數(shù)據(jù)存入Access數(shù)據(jù)庫(kù)

3 實(shí)時(shí)數(shù)據(jù)的查詢

由圖4可知,只要WinCC從下位機(jī)采集的這一組數(shù)據(jù)中的任何一個(gè)數(shù)據(jù)有變化,那么該組數(shù)據(jù)就會(huì)傳入到數(shù)據(jù)庫(kù)中。根據(jù)工藝要求可知,每個(gè)采集點(diǎn)的溫度均有一定的范圍,超過(guò)這個(gè)范圍就會(huì)對(duì)設(shè)備或產(chǎn)品產(chǎn)生一定的損害,所以需建立一個(gè)查詢,當(dāng)溫度高于該范圍時(shí),將其篩選出來(lái),插入到該數(shù)據(jù)庫(kù)的另外一個(gè)表中,供以后的分析。構(gòu)造的SQL語(yǔ)句通式如下:

Insert into+“表名”+select+“選擇內(nèi)容”+from+“表名”+where+“條件”

建立查詢的相關(guān)步驟如下:

1)在數(shù)據(jù)庫(kù)溫度中再建立一張新表,命名為查詢溫度,用來(lái)存儲(chǔ)查詢出來(lái)的超出范圍的溫度。

2)在VB窗體上再布局一個(gè)ADO控件,命名為Adodc1,將其的ConnectionString設(shè)置的與Adodc2一樣,RecordSource屬性設(shè)置為查詢溫度。然后編寫(xiě)代碼:Adodc1.RecordSource="SQL語(yǔ)句"即可以進(jìn)行相關(guān)的查詢。

4 結(jié)束語(yǔ)

利用VB設(shè)計(jì)的OPC客戶端數(shù)據(jù)接口,傳輸數(shù)據(jù)穩(wěn)定,實(shí)時(shí)性好,能同時(shí)傳輸大批量數(shù)據(jù)。ADO數(shù)據(jù)庫(kù)接口簡(jiǎn)單,傳輸穩(wěn)定,實(shí)時(shí)性好,技術(shù)成熟。通過(guò)OPC技術(shù)和ADO接口有效地完成了WinCC到數(shù)據(jù)庫(kù)轉(zhuǎn)儲(chǔ)功能。為企業(yè)進(jìn)一步分析數(shù)據(jù),利用數(shù)據(jù),提供了可靠的數(shù)據(jù)源。

[1]甄立東.西門子 WinCC V7基礎(chǔ)與應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2011.

[2]日本OPC協(xié)會(huì).OPC應(yīng)用程序入門[M].日本:2002.

[3]韋源,于平.Visual Basic程序設(shè)計(jì)基礎(chǔ)[M].北京:清華大學(xué)出版社,2001.

[4]朱翠苗,鄭廣成.VB訪問(wèn)SQL Server數(shù)據(jù)庫(kù)的幾種方案[J].河南科技大學(xué)學(xué)報(bào),2004,3(25):66-69.

[5]林啟寬.用 VB開(kāi)發(fā) WinCC的OPC客戶機(jī)[J].工業(yè)控制計(jì)算機(jī),2006,19(8):80-81.

[6]趙秀梅.基于WinCC工控組態(tài)軟件的關(guān)系數(shù)據(jù)庫(kù)的研究[J].微型機(jī)與應(yīng)用,2010,29(6):1-2.

猜你喜歡
窗體控件客戶端
基于.net的用戶定義驗(yàn)證控件的應(yīng)用分析
如何看待傳統(tǒng)媒體新聞客戶端的“斷舍離”?
試談Access 2007數(shù)據(jù)庫(kù)在林業(yè)檔案管理中的應(yīng)用
關(guān)于.net控件數(shù)組的探討
縣級(jí)臺(tái)在突發(fā)事件報(bào)道中如何應(yīng)用手機(jī)客戶端
孵化垂直頻道:新聞客戶端新策略
大樞紐 云平臺(tái) 客戶端——中央人民廣播電臺(tái)的探索之路
巧設(shè)WPS窗體控件讓表格填寫(xiě)更規(guī)范
基于嵌入式MINIGUI控件子類化技術(shù)的深入研究與應(yīng)用
WinCE.net下圖形用戶界面的開(kāi)發(fā)