2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  本 科 生 畢 業(yè) 設(shè) 計(jì)</p><p><b>  (申請(qǐng)學(xué)士學(xué)位)</b></p><p>  論文題目基于Modbus通信協(xié)議的智能儀表OPC服務(wù)器的開發(fā)</p><p>  作者姓名 </p><p>  所學(xué)專業(yè)名稱 自

2、動(dòng) 化 </p><p>  指導(dǎo)教師 </p><p>  2012年5月20日</p><p><b>  目 錄</b></p><p><b>  摘要1</b></p>

3、<p>  Abstract1</p><p><b>  1 緒論2</b></p><p>  1.1 課題的選題背景及意義2</p><p>  1.2 OPC技術(shù)國(guó)內(nèi)外發(fā)展現(xiàn)狀3</p><p>  1.3 本課題主要研究?jī)?nèi)容3</p><p>  2 Modbus總線

4、技術(shù)4</p><p>  2.1 現(xiàn)場(chǎng)總線技術(shù)4</p><p>  2.2 Modbus技術(shù)歷史4</p><p>  2.3 Modbus通信協(xié)議4</p><p>  2.3.1 Modbus數(shù)據(jù)模型4</p><p>  2.3.2 Modbus地址參數(shù)表及通信結(jié)構(gòu)5</p><

5、;p>  2.3.3 Modbus 兼容分類5</p><p>  3 OPC技術(shù)規(guī)范6</p><p>  3.1 OPC技術(shù)歷史6</p><p>  3.2 OPC技術(shù)規(guī)范6</p><p>  3.3 COM技術(shù)7</p><p>  3.4 OPC服務(wù)器數(shù)據(jù)訪問方式8</p>

6、<p>  3.4.1 同步數(shù)據(jù)訪問8</p><p>  3.4.2 異步數(shù)據(jù)訪問9</p><p>  4 Modbus OPC數(shù)據(jù)訪問服務(wù)器的實(shí)現(xiàn)9</p><p>  4.1 OPC服務(wù)器要求分析9</p><p>  4.1.1 OPC服務(wù)器結(jié)構(gòu)框架9</p><p>  4.1.2 OP

7、C服務(wù)器需要實(shí)現(xiàn)的功能11</p><p>  4.2 OPC服務(wù)器開發(fā)步驟12</p><p>  4.3 服務(wù)器組和項(xiàng)屬性實(shí)現(xiàn)12</p><p>  4.4 服務(wù)器與客戶端傳送機(jī)制13</p><p>  4.4.1 服務(wù)器與客戶端異步通報(bào)方式傳送機(jī)制13</p><p>  4.4.2 服務(wù)器與客戶端

8、連接點(diǎn)方式傳送機(jī)制14</p><p>  4.5 OPC對(duì)象和接口15</p><p>  5 OPC服務(wù)器的實(shí)驗(yàn)測(cè)試15</p><p><b>  結(jié)論18</b></p><p><b>  參考文獻(xiàn)18</b></p><p>  附錄1 OPC組件的部分

9、實(shí)現(xiàn)代碼19</p><p>  附錄2 實(shí)驗(yàn)設(shè)備及運(yùn)行環(huán)境21</p><p><b>  致謝22</b></p><p>  基于Modbus通信協(xié)議的智能儀表OPC服務(wù)器的開發(fā)</p><p>  摘要: OPC(OLE for Process Control)是過程控制軟硬件與基于Windows平臺(tái)的應(yīng)用

10、程序之間的通信通道,它已經(jīng)成為現(xiàn)代工業(yè)自動(dòng)化控制領(lǐng)域的標(biāo)準(zhǔn),被廣大廠商和用戶所接受。Modbus通信協(xié)議是監(jiān)控系統(tǒng)自動(dòng)化設(shè)備的通信標(biāo)準(zhǔn),可將Modbus報(bào)文信息傳輸于Internet中。隨著Modbus技術(shù)和OPC技術(shù)的發(fā)展,以及它們?cè)诠I(yè)領(lǐng)域中發(fā)揮的作用日益增加,研究基于Modbus的OPC數(shù)據(jù)訪問服務(wù)器成為了一個(gè)重要課題。</p><p>  本課題在Modbus協(xié)議和OPC規(guī)范基礎(chǔ)上,詳細(xì)介紹了基于Modb

11、us通信協(xié)議的OPC服務(wù)器的原理和開發(fā)過程。具體論述了OPC技術(shù)優(yōu)點(diǎn);OPC傳輸?shù)娜N方法---同步訪問、異步訪問、訂閱實(shí)現(xiàn)過程中的關(guān)鍵技術(shù);以及服務(wù)器實(shí)現(xiàn)過程中的關(guān)鍵技術(shù)。</p><p>  關(guān)鍵詞:Modbus通信協(xié)議;OPC數(shù)據(jù)服務(wù)器;COM;智能儀表</p><p>  OPC Server Development of Intelligent Instrument based

12、on the Modbus Communication Protocol</p><p>  Abstract: OPC (OLE for Process Control) is a process control hardware and software based on Windows platform between the application program and the communicatio

13、n channel, it has become a modern industrial automation and control standards, by the vast number of manufacturers and users to accept. The communication protocol of Modbus is monitoring system automation equipment, comm

14、unications standards, the Modbus can be message transmission in Internet. With the Modbus technology and OPC technology</p><p>  This topic in the Modbus agreement and the OPC standard foundation, described

15、in detail based on the communication protocol of Modbus OPC server principle and development process. Discusses the advantages of OPC technology; OPC transmission for three methods - synchronous access, asynchronous acce

16、ss, subscribe to realize the key technology in the process of server; and the realization of the key technology.</p><p>  Key words: Communication protocol of Modbus; OPC server; COM; Intelligent instrument&

17、lt;/p><p><b>  1 緒論</b></p><p>  1.1 課題的選題背景及意義</p><p>  計(jì)算機(jī)在當(dāng)今工業(yè)自動(dòng)化控制領(lǐng)域中發(fā)揮著日益不可替代的作用,工業(yè)控制領(lǐng)域中各種智能儀表都提供了和計(jì)算機(jī)的通信協(xié)議[1~3]。微電子技術(shù)和計(jì)算機(jī)技術(shù)的不斷發(fā)展,引起了儀表結(jié)構(gòu)的根本性變革,以微型計(jì)算機(jī)(單片機(jī))為主體,將計(jì)算機(jī)技術(shù)和檢

18、測(cè)技術(shù)有機(jī)的結(jié)合,組成新一代“智能化儀表”,在測(cè)量過程自動(dòng)化、測(cè)量數(shù)據(jù)處理及功能多樣化方面與傳統(tǒng)儀表的常規(guī)測(cè)量電路相比較,取得了巨大進(jìn)展。智能儀表不僅能解決傳統(tǒng)儀表不易或不能解決的問題,還能簡(jiǎn)化儀表電路,提高儀表的可靠性,更容易實(shí)現(xiàn)高精度、高性能、多功能的目的。隨著科學(xué)技術(shù)的進(jìn)一步發(fā)展,儀表的智能化程度將越來越高。智能儀表和智能傳感器一般是用在現(xiàn)場(chǎng)總線系統(tǒng)中,這種儀表和傳感器內(nèi)部嵌入的有通信模塊和控制模塊,可以完成數(shù)據(jù)采集,數(shù)據(jù)處理和數(shù)

19、據(jù)通信功能。使計(jì)算機(jī)控制系統(tǒng)成為最為方便的自動(dòng)控制方法。但是在OPC出現(xiàn)之前,工業(yè)領(lǐng)域中用到的很多現(xiàn)場(chǎng)設(shè)備都存在上層軟件和下層硬件不一致性的問題[4~5],對(duì)于不同廠商開發(fā)的不同設(shè)備都必須開發(fā)對(duì)應(yīng)的驅(qū)動(dòng)程序如圖1-1,這樣造成了極大的資源浪費(fèi)和設(shè)備運(yùn)用的局限性。而OPC出現(xiàn)之后的狀況則完全改變?nèi)鐖D1-2。OPC采用客戶機(jī)-服務(wù)器</p><p>  圖1-1 OPC技術(shù)出現(xiàn)之前</p><p&

20、gt;  圖1-2 OPC技術(shù)出現(xiàn)之后</p><p>  1.2 OPC技術(shù)國(guó)內(nèi)外發(fā)展現(xiàn)狀</p><p>  OPC是OPC基金會(huì)組織制定的一套工業(yè)控制領(lǐng)域的開放式標(biāo)準(zhǔn)。它的本質(zhì)是采用了Microsoft公司的OLE/COM和DCOM技術(shù),它包括自動(dòng)化應(yīng)用中使用的有一整套接口、屬性和方法的標(biāo)準(zhǔn)[9]。OPC規(guī)范定義了一個(gè)工業(yè)標(biāo)準(zhǔn)接口,這個(gè)標(biāo)準(zhǔn)使得COM技術(shù)使用于過程控制和制造自動(dòng)化等應(yīng)

21、用領(lǐng)域。OPC建立在OLE規(guī)范之上,它為工業(yè)控制領(lǐng)域提供了一種公用的數(shù)據(jù)訪問機(jī)制,具有語言無關(guān)性、代碼重用性和易于集成性等優(yōu)點(diǎn)[10]。它使廠商不必再為不同的應(yīng)用需求開發(fā)不同的驅(qū)動(dòng)程序,避免了控制系統(tǒng)中同一設(shè)備的不同驅(qū)動(dòng)程序同時(shí)訪問設(shè)備時(shí)造成的沖突問題。OPC規(guī)范以O(shè)LE/DCOM為基礎(chǔ),而OLE/DCOM支持TCP/IP等網(wǎng)絡(luò)協(xié)議,所以可以將各個(gè)子系統(tǒng)分開,分布于網(wǎng)絡(luò)的不同節(jié)點(diǎn)上。OPC保證了軟件對(duì)客戶的透明性,使得用戶完全從低層的開

22、發(fā)中脫離出來。不管過程中采用什么軟件或設(shè)備,OPC為它們提供了公共的接口和以下多種訪問機(jī)制:(1)客戶端和服務(wù)器位于同一臺(tái)計(jì)算機(jī)上;(2)客戶端和服務(wù)器位于不同的計(jì)算機(jī)上;(3)單個(gè)客戶端和多個(gè)服務(wù)器通信;(4)多個(gè)客戶端和單個(gè)服務(wù)器通信;(5)多個(gè)客戶端和多個(gè)服務(wù)器通信[11]。</p><p>  國(guó)外OPC發(fā)展迅速,應(yīng)用也很廣泛,眾多的廠家研發(fā)生產(chǎn)了種類眾多的OPC產(chǎn)品,OPC基金會(huì)從成立開始會(huì)員逐年增加,

23、到目前為止在全球范圍內(nèi)已有300多家公司加入了這個(gè)國(guó)際標(biāo)準(zhǔn)組織。同時(shí)由控制設(shè)備廠商和控制軟件供應(yīng)商提供的OPC產(chǎn)品也日益增加,目前已有600種以上的OPC服務(wù)器產(chǎn)品和OPC應(yīng)用程序產(chǎn)品出現(xiàn)在由OPC基金會(huì)發(fā)行的OPC產(chǎn)品目錄上,促成OPC成為工業(yè)控制過程國(guó)際標(biāo)準(zhǔn)的地位。不過在國(guó)內(nèi)OPC產(chǎn)品開發(fā)目前幾乎還是空白,只有少數(shù)自動(dòng)化軟件和大型硬件廠商實(shí)現(xiàn)了OPC客戶或OPC服務(wù)器功能,市場(chǎng)開拓還處于概念宣傳階段。由于歐美的OPC服務(wù)器價(jià)格比較昂

24、貴,國(guó)內(nèi)也只有極少數(shù)的大型自動(dòng)化工程購(gòu)買并應(yīng)用了OPC產(chǎn)品[12~13]。由于OPC標(biāo)準(zhǔn)的技術(shù)優(yōu)勢(shì)和發(fā)展前景,國(guó)內(nèi)的眾多自動(dòng)化公司已經(jīng)開始積極探索OPC技術(shù)的應(yīng)用開發(fā)。</p><p>  1.3 本課題主要研究?jī)?nèi)容</p><p>  本課題主要研究的是Modbus通信協(xié)議和OPC服務(wù)器的相關(guān)內(nèi)容。首先詳細(xì)論述了Modbus協(xié)議的主要內(nèi)容、歷史和現(xiàn)場(chǎng)總線技術(shù),介紹了Modbus數(shù)據(jù)模型、

25、地址參數(shù)表、通信結(jié)構(gòu)及兼容分類。接著分析了OPC的發(fā)展現(xiàn)狀、COM技術(shù)、接口技術(shù),討論了OPC服務(wù)器的同步數(shù)據(jù)訪問和異步數(shù)據(jù)訪問方式,在此基礎(chǔ)上對(duì)基于Modbus的OPC服務(wù)器的開發(fā)進(jìn)行了深入的研究。研究重點(diǎn)是基于Modbus的OPC服務(wù)器的設(shè)計(jì)和實(shí)現(xiàn)。</p><p>  各章節(jié)主要內(nèi)容如下:</p><p>  第一章:介紹選題背景和意義以及OPC的發(fā)展現(xiàn)狀;</p>&

26、lt;p>  第二章:Modbus通信協(xié)議的技術(shù)歷史和基本內(nèi)容;</p><p>  第三章:OPC服務(wù)器的技術(shù)規(guī)范和數(shù)據(jù)訪問方式;</p><p>  第四章:詳細(xì)論述基于Modbus的OPC服務(wù)器的設(shè)計(jì)實(shí)現(xiàn);</p><p>  第五章:服務(wù)器的實(shí)驗(yàn)測(cè)試。</p><p>  2 Modbus總線技術(shù)</p><

27、p>  2.1 現(xiàn)場(chǎng)總線技術(shù)</p><p>  現(xiàn)場(chǎng)總線技術(shù)是用于過程自動(dòng)化、制造自動(dòng)化等領(lǐng)域的現(xiàn)場(chǎng)智能設(shè)備相互通信的網(wǎng)絡(luò),它作為工業(yè)數(shù)字通信網(wǎng)絡(luò)基礎(chǔ),溝通了生產(chǎn)過程現(xiàn)場(chǎng)及控制設(shè)備之間及其與更高控制管理層次之間的聯(lián)系。它不僅是一個(gè)基層網(wǎng)絡(luò),而且還是一種開放式、新型全分布控制系統(tǒng)。這項(xiàng)以智能控制、數(shù)字通信等技術(shù)為主要內(nèi)容的綜合技術(shù),已經(jīng)受到世界范圍的關(guān)注,成為自動(dòng)化技術(shù)發(fā)展的焦點(diǎn),并將導(dǎo)致自動(dòng)化系統(tǒng)結(jié)構(gòu)與設(shè)

28、備的深刻變革。</p><p>  2.2 Modbus技術(shù)歷史</p><p>  Modbus是由Modicon公司在1978年發(fā)明的,它拉開了工業(yè)網(wǎng)絡(luò)的序幕,是一個(gè)跨時(shí)代、里程碑式的網(wǎng)絡(luò)協(xié)議,他是第一個(gè)真正永業(yè)工業(yè)現(xiàn)場(chǎng)的總線協(xié)議,全球有超過800萬個(gè)安裝的節(jié)點(diǎn),可見其普及的程度相當(dāng)高,已經(jīng)成為事實(shí)上的協(xié)議標(biāo)準(zhǔn)。它有以下三點(diǎn)成功之處:</p><p> ?。?)

29、開放性:用戶可以放心的免費(fèi)使用Modbus協(xié)議,不用繳納費(fèi)用,不會(huì)構(gòu)成侵權(quán);</p><p> ?。?)支持多種電氣接口:RS232,RS422、RS485等,可在雙絞線、光纜、無線射頻等介質(zhì)上傳送;</p><p> ?。?)簡(jiǎn)單易懂:其格式幀是最為簡(jiǎn)單緊湊的協(xié)議,廠商開發(fā)簡(jiǎn)單,用戶使用也方便。</p><p>  2.3 Modbus通信協(xié)議</p>

30、<p>  Modbus是電子控制器應(yīng)用上的通用語言,通過此協(xié)議控制器之間、控制器通過網(wǎng)絡(luò)和其他控制器之間可以通信。它主要針對(duì)單主站和多從站之間的通信規(guī)則作出約定,規(guī)定數(shù)據(jù)傳輸以幀為單位,將報(bào)文作為一幀數(shù)據(jù),報(bào)文是由發(fā)送數(shù)據(jù)、發(fā)送地址、控制信息、校驗(yàn)信息按一定格式組成的數(shù)據(jù)單元。主站發(fā)送報(bào)文后,所有從站都會(huì)接收到報(bào)文,但只有主站發(fā)送的報(bào)文中包含尋址的從站才能執(zhí)行報(bào)文操作,接著將操作結(jié)果返回給主站,如果主站發(fā)送了錯(cuò)誤報(bào)文,從

31、站會(huì)發(fā)送錯(cuò)誤報(bào)告返回給主站。若主站未收到應(yīng)答信息或者響應(yīng)報(bào)文,會(huì)再次發(fā)送報(bào)文給從站。Modbus通信協(xié)議有兩種模式分別為ASCⅡ和RTU,數(shù)據(jù)量小的常用ASCⅡ模式,通信數(shù)據(jù)量大而且是二進(jìn)制時(shí)候用RTU規(guī)約。</p><p>  2.3.1 Modbus數(shù)據(jù)模型</p><p>  Modbus通信協(xié)議中,一般采用面向連接的方法,聯(lián)網(wǎng)時(shí)經(jīng)過建立連接、通信、釋放鏈接三個(gè)步驟。在Modbus變

32、量中可通過明確的“變成路徑”性能獲得,這種性能要求雙方按照通信協(xié)議直到連接終止?!白x寫通用寄存器”功能碼定義可指定一個(gè)32位寄存器地址,用戶寄存器起始地址是十進(jìn)制數(shù)表示的1,而不是像很多其他程序一樣從0開始。</p><p>  Modbus的數(shù)據(jù)模型主要基于以下四個(gè)表:</p><p>  輸入開關(guān)量 單個(gè)位,由I/O系統(tǒng)提供……只讀;</p><p>  輸出

33、開關(guān)量 單個(gè)位,通過應(yīng)用程序可變……讀寫;</p><p>  輸入寄存器 16位量,由I/O體統(tǒng)提供……只讀;</p><p>  輸出寄存器 16位量,通過應(yīng)用程序可變……讀寫。</p><p>  2.3.2 Modbus地址參數(shù)表及通信結(jié)構(gòu)</p><p>  Modbus數(shù)據(jù)模型的基礎(chǔ)是一系列區(qū)別不同類型參數(shù)的地址參數(shù)表,主要

34、由以下四個(gè)參數(shù)表:</p><p>  開關(guān)量型輸入:來自I/O系統(tǒng)的只讀型1位布爾型數(shù)據(jù),地址范圍10001-1FFFF;</p><p>  開關(guān)量型輸出:應(yīng)用程序控制變化的可讀可寫型布爾型數(shù)據(jù),地址范圍00001-0FFFF;</p><p>  輸入寄存器:來自I/O系統(tǒng)的只讀型16位數(shù)據(jù),地址范圍30001-3FFFF;</p><p&

35、gt;  輸出寄存器:由應(yīng)用程序控制變化的可讀可寫型16位數(shù)據(jù),地址范圍40001-4FFFF。</p><p>  Modbus通信結(jié)構(gòu)如圖2-1:</p><p>  圖2-1 Modbus通信結(jié)構(gòu)圖</p><p>  2.3.3 Modbus兼容分類</p><p>  Modbus采用兼容分類來避免與已有的系統(tǒng)發(fā)生沖突,它定義了0級(jí)

36、和1級(jí)類,表示已經(jīng)實(shí)現(xiàn)的應(yīng)用的交易模式,達(dá)到兼容舊系統(tǒng)的目的。2級(jí)類代表一些特殊的功能應(yīng)用,此外還通過分類來識(shí)別一些已經(jīng)存在但不易解釋實(shí)現(xiàn)的交易。</p><p>  0級(jí)是所有服務(wù)器和客戶端都必須實(shí)現(xiàn)的最小功能集。</p><p>  讀多個(gè)寄存器(功能03)</p><p>  寫多個(gè)寄存器(功能16)</p><p>  1級(jí)是常用的附

37、加功能,這些功能被客戶端解釋為輸入輸出的開關(guān)量和模擬量。</p><p><b>  讀線圈(功能01)</b></p><p>  讀離散量輸入(功能02)</p><p>  讀輸入寄存器(功能04)</p><p><b>  寫線圈(功能05)</b></p><p>

38、;  寫單個(gè)寄存器(功能06)</p><p>  讀異常狀態(tài)(功能07)</p><p>  2級(jí)是一組常規(guī)應(yīng)用于人機(jī)接口程序和監(jiān)控程序中的數(shù)據(jù)傳輸功能。</p><p>  寫多個(gè)線圈(功能15)</p><p>  讀文件記錄(功能20)</p><p>  寫文件記錄(功能21)</p><

39、p>  另外,如果過程發(fā)生狀況,則由從機(jī)返回一組例外碼,所有例外通過給請(qǐng)求的函數(shù)碼加0x80來發(fā)送信號(hào),就是將最高位置一。例外響應(yīng)包括不合法的函數(shù),不合法的數(shù)據(jù)值,不合法的數(shù)據(jù)地址,不合法的響應(yīng)長(zhǎng)度,從機(jī)設(shè)備忙,無用的確認(rèn),存儲(chǔ)奇偶錯(cuò)誤,網(wǎng)關(guān)路徑難以獲得,網(wǎng)關(guān)目標(biāo)設(shè)備不能響應(yīng)等。</p><p>  Modbus報(bào)文格式如圖2-2所示。</p><p>  圖2-2 Modbus報(bào)文

40、格式</p><p><b>  3 OPC技術(shù)規(guī)范</b></p><p>  3.1 OPC技術(shù)歷史</p><p>  早期的OPC規(guī)范是由5家工業(yè)軟件制造商組成的OPC小組在1995年開發(fā)的,在1996年8月完成了OPC數(shù)據(jù)訪問標(biāo)準(zhǔn)版本1.0。OPC基金會(huì)在1996年9月24日在美國(guó)達(dá)拉斯舉行了第一次理事會(huì),并在同年10月7日芝加哥的第

41、一次全體大會(huì)上宣告成立?,F(xiàn)在的OPC基金會(huì)的理事會(huì)是由Fisher-Rosement,Honeywell,Interllution,Rockwell,Software,National Instrument以及歐洲代表的Siemens和遠(yuǎn)東代表的東芝組成的。在日本為響應(yīng)以美國(guó)中心的標(biāo)準(zhǔn)活動(dòng),于1996年6月開始基金會(huì)成立的準(zhǔn)備,于1996年10月17日正式成立了日本的OPC基金會(huì)。與此同時(shí)歐洲也成立了自己的OPC基金會(huì)。中國(guó)也由5家公司

42、作為發(fā)起人于2001年12月成立了中國(guó)OPC促進(jìn)會(huì)。</p><p>  3.2 OPC技術(shù)規(guī)范</p><p>  OPC基金會(huì)制定了各種OPC規(guī)范,并且不斷地進(jìn)行升級(jí)和更新以便于適應(yīng)日益變化發(fā)展的工業(yè)自動(dòng)化領(lǐng)域。在設(shè)計(jì)OPC服務(wù)器或者相應(yīng)程序時(shí)要按照規(guī)范去操作,以保證設(shè)備和程序的相互兼容性。</p><p>  OPC規(guī)范包含以下幾個(gè)方面:</p>

43、<p> ?。?)OPC數(shù)據(jù)存取規(guī)范即數(shù)據(jù)訪問標(biāo)準(zhǔn);</p><p> ?。?)OPC報(bào)警與事件規(guī)范即報(bào)警和事件的標(biāo)準(zhǔn);</p><p> ?。?)OPC歷史數(shù)據(jù)存取規(guī)范即歷史數(shù)據(jù)訪問標(biāo)準(zhǔn);</p><p> ?。?)OPC批處理規(guī)范即批處理的標(biāo)準(zhǔn);</p><p> ?。?)OPC安全規(guī)范即安全性的標(biāo)準(zhǔn);</p>

44、<p>  (6)OPC數(shù)據(jù)交換規(guī)范即服務(wù)器間數(shù)據(jù)交換的標(biāo)準(zhǔn);</p><p> ?。?)OPC_XML規(guī)范即過程數(shù)據(jù)的XML標(biāo)準(zhǔn)。</p><p><b>  3.3 COM技術(shù)</b></p><p>  COM是微軟公司倡導(dǎo)的一個(gè)制定軟件的方法,在COM的構(gòu)架下可以開發(fā)出各式各樣的功能專一的組件,然后按照需要將他們結(jié)合起來,構(gòu)成

45、復(fù)雜的應(yīng)用系統(tǒng)。它可以隨時(shí)為系統(tǒng)升級(jí),只需將原系統(tǒng)中的組件用新的更換掉。一個(gè)組件也可以在多個(gè)應(yīng)用系統(tǒng)中重復(fù)利用,還可以很方便的將應(yīng)用系統(tǒng)至于網(wǎng)絡(luò)之中。</p><p>  COM的體系結(jié)構(gòu)有COM的核心、統(tǒng)一數(shù)據(jù)傳輸、智能命名和持久存儲(chǔ)。其中COM核心包括服務(wù)控制管理員、接口基、接口代理和COM庫。其定義了COM對(duì)象與客戶如何通過二進(jìn)制標(biāo)準(zhǔn)接口進(jìn)行交互的標(biāo)準(zhǔn)。COM本身預(yù)定義了一套通用接口,用來建立基于客戶服務(wù)器

46、結(jié)構(gòu)的COM應(yīng)用。接口是用于部件對(duì)象間作用的二進(jìn)制標(biāo)準(zhǔn),每個(gè)接口都包含了一系列函數(shù),這些函數(shù)規(guī)定實(shí)現(xiàn)接口的對(duì)象和用戶使用這些對(duì)象所遵循的協(xié)議,包含接口名、函數(shù)名、參數(shù)名及其類型。</p><p>  下面簡(jiǎn)單介紹一下COM組件、COM對(duì)象和COM接口。COM組件在windows平臺(tái)上可以是DLL文件或者EXE文件,組件為COM對(duì)象提供了活動(dòng)空間,一個(gè)組件程序可以包含多個(gè)COM對(duì)象,COM對(duì)象用接口的方式提供服務(wù),

47、一個(gè)COM對(duì)象可以擁有多個(gè)COM接口。</p><p>  COM支持的是面向?qū)ο蟮慕M件模型,COM組件提供給客戶端的是以對(duì)象形式封閉起來的實(shí)體。客戶端和COM組件程序交換數(shù)據(jù)的實(shí)體是COM對(duì)象,它無需在乎組件模塊的名稱和位置,但要知道和自己交互的COM對(duì)象是哪個(gè),客戶程序通過一個(gè)COM對(duì)象的全局標(biāo)識(shí)符來創(chuàng)建和初始化對(duì)象,并不直接訪問COM組件。</p><p>  COM接口都是從IUn

48、known接口派生的,COM接口實(shí)現(xiàn)了二進(jìn)制的內(nèi)存結(jié)構(gòu)??蛻舫绦蛴弥赶蚪涌跀?shù)據(jù)結(jié)構(gòu)的指針來調(diào)用接口函數(shù),接口指針又指向另一個(gè)指針,這個(gè)指針指向虛函數(shù)表,虛函數(shù)表里面一項(xiàng)由4個(gè)字節(jié)長(zhǎng)的函數(shù)指針組成,每一個(gè)接口的vtable是確定的,COM接口vtable的前三個(gè)指針是QueryInterface、AddRef、Release函數(shù)實(shí)現(xiàn)的地址,函數(shù)指針和對(duì)象的具體實(shí)現(xiàn)連接??蛻糁灰@得了指針就可以調(diào)用到對(duì)象的實(shí)際功能。圖3-1是接口的二進(jìn)制內(nèi)

49、存結(jié)構(gòu):</p><p>  圖3-1 COM接口二進(jìn)制內(nèi)存結(jié)構(gòu)</p><p>  COM規(guī)范用128位全局唯一標(biāo)識(shí)符GUID來標(biāo)識(shí)COM對(duì)象和COM接口,標(biāo)識(shí)的COM對(duì)象為CLSID,標(biāo)識(shí)的COM接口為IID??蛻舫绦蛲ㄟ^指定的CLSID進(jìn)行對(duì)象的創(chuàng)建和初始化工作,客戶程序要使用COM對(duì)象的接口,它必須知道該接口的IID和接口成員函數(shù)。</p><p>  3.

50、4 OPC服務(wù)器數(shù)據(jù)訪問方式</p><p>  OPC數(shù)據(jù)訪問有兩種方式:同步訪問和異步訪問,下面分別介紹。</p><p>  3.4.1 同步數(shù)據(jù)訪問</p><p>  圖3-2 同步數(shù)據(jù)訪問過程</p><p>  同步數(shù)據(jù)訪問過程如圖3-2所示,OPC服務(wù)器按照OPC客戶端的要求把得到的數(shù)據(jù)訪問結(jié)果作為方法參數(shù)返還給OPC客戶端,

51、OPC客戶端在結(jié)果被返還之前必須處于等待狀態(tài)。小批量的數(shù)據(jù)訪問使用這個(gè)方法比較便捷,對(duì)于大批量的數(shù)據(jù),就很占用OPC客戶端的時(shí)間。在OPC數(shù)據(jù)存取規(guī)范中,同步數(shù)據(jù)訪問方法是用IOPCSyncIO接口來實(shí)現(xiàn),IOPCSyncIO接口有兩個(gè)函數(shù):Read和Write。根據(jù)OPC數(shù)據(jù)訪問標(biāo)準(zhǔn),不同的數(shù)據(jù)讀取方式所需要的數(shù)據(jù)源有兩種:從服務(wù)器數(shù)據(jù)緩沖區(qū)讀??;二是從硬件設(shè)備直接讀取。Read同步數(shù)據(jù)讀取可以從數(shù)據(jù)緩沖區(qū)讀取或者硬件設(shè)備直接讀取,從

52、數(shù)據(jù)緩沖區(qū)讀取數(shù)據(jù)時(shí)受組和項(xiàng)狀態(tài)的影響,Write同步寫操作是直接向設(shè)備寫數(shù)據(jù)。</p><p>  3.4.2 異步數(shù)據(jù)訪問</p><p>  圖3-3 異步數(shù)據(jù)訪問過程</p><p>  異步數(shù)據(jù)訪問過程如圖3-3所示,OPC服務(wù)器接收到OPC客戶端要求后,檢查了參數(shù)中的項(xiàng)的服務(wù)器句柄是否有效,然后將方法返回,OPC應(yīng)用程序進(jìn)行處理。當(dāng)OPC服務(wù)器完成數(shù)據(jù)訪

53、問時(shí),觸發(fā)OPC應(yīng)用程序異步訪問的完成,將數(shù)據(jù)結(jié)果返回給OPC應(yīng)用程序。</p><p>  4 Modbus OPC數(shù)據(jù)訪問服務(wù)器的實(shí)現(xiàn)</p><p>  4.1 OPC服務(wù)器要求分析</p><p>  本節(jié)主要介紹OPC服務(wù)器設(shè)計(jì)實(shí)現(xiàn)的主要功能和設(shè)計(jì)環(huán)境以及總體框架,初步構(gòu)建起OPC服務(wù)器設(shè)計(jì)的基礎(chǔ)。</p><p>  4.1.1

54、OPC服務(wù)器結(jié)構(gòu)框架</p><p>  對(duì)于現(xiàn)代化生產(chǎn)來說,利用計(jì)算機(jī)監(jiān)控系統(tǒng)實(shí)時(shí)監(jiān)控現(xiàn)場(chǎng)設(shè)備的運(yùn)行狀態(tài)和數(shù)據(jù)對(duì)提高生產(chǎn)效率有非常大的幫助,上傳來的數(shù)據(jù)可以作為參考來更改現(xiàn)場(chǎng)設(shè)備的運(yùn)行參數(shù)也可快速的查找現(xiàn)場(chǎng)設(shè)備的故障原因,而OPC服務(wù)器就可以辦得到這些。</p><p>  基于Modbus的智能儀表OPC服務(wù)器可以實(shí)現(xiàn)向下和Modbus從設(shè)備的通信,向上可以將實(shí)時(shí)數(shù)據(jù)傳輸?shù)絆PC客戶端

55、。其結(jié)構(gòu)如下圖4-1所示:</p><p>  圖4-1 OPC服務(wù)器結(jié)構(gòu)框架</p><p>  從現(xiàn)場(chǎng)設(shè)備讀取回來的數(shù)據(jù)通過Modbus協(xié)議工業(yè)以太網(wǎng)以數(shù)據(jù)幀的形式傳到OPC服務(wù)器,經(jīng)過服務(wù)器的處理再通過OPC接口上傳到OPC客戶端,這樣就完成了遠(yuǎn)程監(jiān)控現(xiàn)場(chǎng)設(shè)備運(yùn)作狀態(tài)的過程。</p><p>  現(xiàn)在簡(jiǎn)介一下OPC服務(wù)器關(guān)鍵模塊管理模塊的設(shè)計(jì)理念。管理模塊主要

56、處理通道的定義、標(biāo)簽組、標(biāo)簽和邏輯設(shè)備的定義、物理設(shè)備向通道和邏輯設(shè)備的映射、物理設(shè)備數(shù)據(jù)點(diǎn)與OPC Item的映射關(guān)系等方面的設(shè)備和數(shù)據(jù)點(diǎn)的管理功能。OPC服務(wù)器接口接收到客戶端的請(qǐng)求后也必須利用管理模塊提供請(qǐng)求的OPC Item對(duì)應(yīng)的物理設(shè)備數(shù)據(jù)點(diǎn)的信息。其數(shù)據(jù)點(diǎn)監(jiān)視功能使通信模塊在客戶端界面上實(shí)現(xiàn)對(duì)設(shè)備數(shù)據(jù)點(diǎn)的讀寫。</p><p>  如圖4-2所示,它包含通道定義、Modbus從設(shè)備映射、數(shù)據(jù)點(diǎn)映射、模

57、擬變量變換和數(shù)據(jù)點(diǎn)在線監(jiān)視五個(gè)模塊。</p><p>  圖4-2 管理模塊結(jié)構(gòu)</p><p>  通道定義模塊是與遠(yuǎn)程Modbus服務(wù)器的連接屬性的設(shè)置。通道由IP地址、IP端口和連接超時(shí)值組成。對(duì)于每一個(gè)IP地址、IP端口必須定義唯一一個(gè)通道,這樣連接到網(wǎng)絡(luò)上的設(shè)備就可以利用這些信息連接到確定的唯一的OPC服務(wù)器的物理設(shè)備。</p><p>  Modbus從

58、設(shè)備映射模塊主要功能是將物理設(shè)備的信息映射到相應(yīng)的邏輯設(shè)備和通道之中。</p><p>  數(shù)據(jù)點(diǎn)映射模塊將設(shè)備數(shù)據(jù)點(diǎn)直接映射為管理模塊的標(biāo)簽,而標(biāo)簽包含有的信息有:設(shè)備數(shù)據(jù)點(diǎn)具體的地址、儲(chǔ)存區(qū)類型、數(shù)據(jù)類型和讀取權(quán)限。OPC項(xiàng)代表了到數(shù)據(jù)源的連接,相當(dāng)于一個(gè)指針,指向它所對(duì)應(yīng)的標(biāo)簽,通過標(biāo)簽的信息完成連接。</p><p>  物理設(shè)備中的模擬變量是以整數(shù)或者浮點(diǎn)數(shù)的形式讀出的,可是這些

59、值只是存儲(chǔ)區(qū)內(nèi)的一個(gè)相對(duì)量,模擬變量模塊可以將它們經(jīng)過比例變換成為有意義的物理值,還需要定義物理單位、死區(qū)、上溢下溢范圍等信息。</p><p>  數(shù)據(jù)點(diǎn)在線監(jiān)視模塊提供了設(shè)備數(shù)據(jù)點(diǎn)的讀取功能,讓服務(wù)器用戶界面可以實(shí)現(xiàn)數(shù)據(jù)點(diǎn)數(shù)值的在線讀取和寫入。</p><p>  4.1.2 OPC服務(wù)器需要實(shí)現(xiàn)的功能</p><p>  在OPC規(guī)范中可以總結(jié)出OPC服務(wù)器應(yīng)

60、該實(shí)現(xiàn)的幾項(xiàng)基本功能,OPC服務(wù)器要與客戶端實(shí)現(xiàn)連接,數(shù)據(jù)傳輸必須要有這些功能。首先OPC服務(wù)器要在客戶端需要的時(shí)候提供本地連接,以便于客戶端需要連接OPC服務(wù)器的時(shí)候,OPC服務(wù)器能夠被找到,能夠給客戶端提供必要的接口。同時(shí)需要OPC服務(wù)器支持Modbus通信協(xié)議,不需要任何額外的驅(qū)動(dòng)程序,在和Modbus從設(shè)備通信的時(shí)候不需要為每個(gè)通信設(shè)備提供不同的驅(qū)動(dòng)程序;然后OPC服務(wù)器需要提供IOPCServer、IOPCItemMgt、IO

61、PCCGroupStateMgt、IOPCSyncIO等接口的實(shí)現(xiàn),只有實(shí)現(xiàn)了這些接口,客戶端才能夠通過該接口實(shí)現(xiàn)添加刪除服務(wù)器的組對(duì)象,對(duì)組對(duì)象進(jìn)行管理。而且無論是本機(jī)還是遠(yuǎn)程客戶端都能訪問服務(wù)器,支持了遠(yuǎn)程啟動(dòng),即使服務(wù)器不在運(yùn)行狀態(tài),只要有客戶端訪問服務(wù)器,服務(wù)器能夠自行啟動(dòng)。</p><p>  下面是OPC服務(wù)器的幾個(gè)基本概念:</p><p> ?。?)設(shè)備:指連接到OPC服務(wù)

62、器的硬件設(shè)施(如PLC),對(duì)于Modbus OPC服務(wù)器來說,設(shè)備是指Modicon或者其他第三方Modbus兼容硬件。設(shè)備包含事務(wù)處理超時(shí)時(shí)間、連接類型等信息;</p><p> ?。?)通道:通道為OPC服務(wù)器提供連接到硬件設(shè)備的物理連接的信息;</p><p> ?。?)標(biāo)簽組:提供一種將標(biāo)簽成組的方法,用于生成地址空間的。標(biāo)簽組可以讓瀏覽標(biāo)簽的客戶端分層次的仔細(xì)查看標(biāo)簽;</

63、p><p> ?。?)標(biāo)簽:標(biāo)簽用于在OPC服務(wù)器中映射目標(biāo)硬件數(shù)據(jù)點(diǎn)。它的名稱可以取代PLC的以數(shù)字表示的寄存器。</p><p>  4.2 OPC服務(wù)器開發(fā)步驟</p><p> ?。?)定義OPC數(shù)據(jù)服務(wù)器的名稱和類標(biāo)識(shí),然后根據(jù)規(guī)范對(duì)各個(gè)接口ID進(jìn)行定義;</p><p>  (2)實(shí)現(xiàn)OPC數(shù)據(jù)服務(wù)器類廠對(duì)象,創(chuàng)建OPC服務(wù)器對(duì)象;&

64、lt;/p><p> ?。?)設(shè)計(jì)OPC對(duì)象。首先通過繼承IUnknown類派生出OPCServer,OPCGroup和OPCItem 3個(gè)類,分別對(duì)應(yīng)OPC服務(wù)器對(duì)象,組對(duì)象和項(xiàng)對(duì)象,并重載IUnknown類中的接口查詢和引用計(jì)數(shù)函數(shù)。然后將OPC基金會(huì)網(wǎng)站上提供的相應(yīng)的頭文件添加到工程中,通過繼承這些接口派生出新的接口類實(shí)現(xiàn)每個(gè)接口的成員函數(shù)。在OPCServer和OPCGroup類中增加指向相應(yīng)接口類的指針成員

65、變量,接著修改接口查詢函數(shù)。當(dāng)客戶程序查詢某一接口時(shí),實(shí)例化接口類,并返回接口指針變量,客戶程序再通過該接口指針進(jìn)一步調(diào)用接口成員函數(shù);</p><p> ?。?)數(shù)據(jù)存儲(chǔ)區(qū)的設(shè)計(jì)。由于OPC服務(wù)器要對(duì)底層硬件進(jìn)行讀寫操作,又要通過OPC接口與客戶程序進(jìn)行交互,所以對(duì)數(shù)據(jù)存儲(chǔ)區(qū)的操作需要采用多線程模型,以保證數(shù)據(jù)存取的效率。為避免不同線程同時(shí)對(duì)數(shù)據(jù)區(qū)中的數(shù)據(jù)進(jìn)行操作,須考慮對(duì)臨界區(qū)的互斥控制;</p>

66、<p> ?。?)界面設(shè)計(jì)??梢栽O(shè)計(jì)類似Windows中資源管理器的用戶界面,將各數(shù)據(jù)項(xiàng)用樹型結(jié)構(gòu)表示然后設(shè)計(jì)數(shù)據(jù)項(xiàng)和硬件的設(shè)置界面,并與數(shù)據(jù)存儲(chǔ)區(qū)和硬件接口聯(lián)系起來,實(shí)現(xiàn)相應(yīng)的組態(tài)功能。在OPC服務(wù)器程序關(guān)閉時(shí),需要將數(shù)據(jù)項(xiàng)的屬性以及硬件設(shè)置參數(shù)作為組態(tài)文件保存起來,而在程序運(yùn)行時(shí)能自動(dòng)調(diào)入組態(tài)文件完成初始設(shè)置;</p><p>  (6)根據(jù)硬件的種類和特性,自行開發(fā)驅(qū)動(dòng)程序,或者調(diào)用硬件廠商提

67、供的I/ODLL實(shí)現(xiàn)對(duì)現(xiàn)場(chǎng)設(shè)備進(jìn)行設(shè)置以及數(shù)據(jù)存取的功能;</p><p>  (7)獲取OPC標(biāo)準(zhǔn)組件并在服務(wù)器上注冊(cè),然后利用OPC客戶端程序連接OPC服務(wù)器進(jìn)行測(cè)試。</p><p>  4.3 服務(wù)器組和項(xiàng)屬性實(shí)現(xiàn)</p><p>  每個(gè)組有兩個(gè)I/O接口:同步和異步接口。每個(gè)接口有讀、寫兩種函數(shù)。同步函數(shù)在執(zhí)行I/O操作時(shí),會(huì)阻塞當(dāng)前進(jìn)程。同步讀函數(shù)可以

68、指定是讀緩存還是讀設(shè)備,過程如下:讀緩存用于服務(wù)器立即得到最近的數(shù)據(jù),而不執(zhí)行一個(gè)較慢的I/O操作。如果項(xiàng)是不活動(dòng)的,則返回一個(gè)壞的品質(zhì)。讀設(shè)備強(qiáng)迫服務(wù)器從所連的設(shè)備讀取數(shù)據(jù)。因?yàn)檫@種方法較慢,它通常作診斷用。</p><p>  同步寫函數(shù)總是把數(shù)據(jù)寫到設(shè)備上,返回完成狀態(tài)給OPC客戶。同步讀寫函數(shù)獨(dú)立于數(shù)據(jù)連接通知。異步函數(shù)包括讀、寫、刷新和取消。像同步讀寫函數(shù)一樣,異步讀寫函數(shù)也可以操作多個(gè)項(xiàng)不同的是異步函

69、數(shù)請(qǐng)求動(dòng)作,并且立即返回。一個(gè)獨(dú)立的線程按照先后順序處理這些操作,操作結(jié)果按請(qǐng)求登記順序通過連接點(diǎn)通知OPC客戶。讀函數(shù)引起所有的請(qǐng)求數(shù)據(jù)返回,這個(gè)函數(shù)是獨(dú)立于變化驅(qū)動(dòng)通知的。異步寫函數(shù)通過連接點(diǎn)返回給OPC客戶的是I/O函數(shù)操作完后的狀態(tài)。異步刷新函數(shù)僅僅影響變化驅(qū)動(dòng)通知,刷新函數(shù)本質(zhì)上強(qiáng)行更新指定項(xiàng),而不管最近的改變是否通知了OPC客戶。返回給OPC客戶的是最近的值。品質(zhì)是OPC數(shù)據(jù)必要的選項(xiàng),服務(wù)器用品質(zhì)來表示數(shù)據(jù)不可靠或壞的。&

70、lt;/p><p>  句柄是組和項(xiàng)的一個(gè)屬性。組和項(xiàng)都有客戶句柄和服務(wù)器句柄,客戶句柄被OPC客戶分配與一個(gè)對(duì)象關(guān)聯(lián),服務(wù)器在相關(guān)操作中返回這個(gè)句柄,通過句柄來識(shí)別這個(gè)對(duì)象。例如,當(dāng)數(shù)據(jù)返回時(shí),組的句柄在結(jié)構(gòu)的頭部,項(xiàng)的句柄與數(shù)據(jù)相關(guān)。OPC客戶通過這種風(fēng)格來分配句柄使自己工作更有效率。句柄是一個(gè)普通的數(shù)據(jù)結(jié)構(gòu)、一個(gè)索引或偏移量,服務(wù)器通過句柄來聯(lián)系項(xiàng)。OPC客戶在任何操作中,通過傳送句柄來向服務(wù)器表示項(xiàng)。服務(wù)器也

71、采用 OPC客戶一樣的方法來分配句柄。</p><p>  4.4 服務(wù)器與客戶端傳送機(jī)制</p><p>  OPC規(guī)范發(fā)展到目前為止,針對(duì)服務(wù)器與客戶端的數(shù)據(jù)傳送共提出了兩種方法,分別是異步數(shù)據(jù)通報(bào)和連接點(diǎn)方式。其中異步數(shù)據(jù)通報(bào)方式應(yīng)用于符合OPC規(guī)范1.0版本要求的服務(wù)器中,連接點(diǎn)方式用于符合OPC規(guī)范2.0版本要求的服務(wù)器中。OPC服務(wù)器與客戶端數(shù)據(jù)傳送機(jī)制是整個(gè)OPC服務(wù)器開發(fā)過

72、程中的關(guān)鍵技術(shù),下面對(duì)這兩種數(shù)據(jù)傳遞方式分別進(jìn)行討論。</p><p>  4.4.1 服務(wù)器與客戶端異步通報(bào)方式傳送機(jī)制</p><p>  通過異步通報(bào)方式傳送數(shù)據(jù)時(shí),客戶端需要實(shí)現(xiàn)IAdviseSink接口,服務(wù)器端需要實(shí)現(xiàn)IDataObject接口。IAdviseSink接口和IDataObject接口都由COM庫定義。</p><p>  IAdviseS

73、ink接口用于接收異步通報(bào)。異步報(bào)有3種類型:復(fù)合文檔、數(shù)據(jù)變化和視區(qū)變化IAdviseSink的實(shí)現(xiàn)者可以根據(jù)實(shí)際需要讓IAdvieSink接收一種或多種類型的異步通報(bào),IAdvieSink的每一種方法是對(duì)應(yīng)于一種特定通報(bào)的回函數(shù)。當(dāng)觸發(fā)異步通報(bào)發(fā)送的條件滿足后,發(fā)送報(bào)的程序調(diào)用合適的IAdviseSink方法。IDataObject接口它用于處理數(shù)據(jù)變化通報(bào),因而只實(shí)現(xiàn)了IDataObject的DAdvise方法和DUnadvise

74、方法。DAdvise函數(shù)用于建立雙向通信機(jī)制,客戶程序調(diào)用此函數(shù),以便在客戶程序的通報(bào)接收器和對(duì)象之間建立一個(gè)通報(bào)連接,以后當(dāng)對(duì)象中的據(jù)發(fā)生變化時(shí),它可以通知客戶程序的接收器DUnadvise函數(shù)用于取消通報(bào)連接。</p><p>  下面簡(jiǎn)單介紹下一步操作流程:在OPC中,數(shù)據(jù)傳輸是以組為單位進(jìn)行的在實(shí)現(xiàn)異步操作前,客戶和服務(wù)器之間必須以組為單位建立連接,這個(gè)連接是由客戶調(diào)用服務(wù)器的IDataObject接口中

75、的 DAdvise函數(shù)建立的。建立好后,在服務(wù)器方將保存客戶的IAdviseSink接口當(dāng)需要傳輸數(shù)據(jù)時(shí),就使用客戶方的IAdviseSin接口向客戶傳輸數(shù)據(jù)。具體的連接流程:</p><p> ?。?)OPC客戶調(diào)用CoCreateInstance函數(shù)創(chuàng)建服務(wù)器對(duì)象,獲得其接口指針,客戶就可以利用該指針直接調(diào)用接口成員函數(shù)。在服務(wù)器端為客戶生成一個(gè)OPCServer對(duì)象;</p><p>

76、; ?。?)用戶調(diào)用服務(wù)器實(shí)現(xiàn)的IOPCServer::Ad2dGroup()函數(shù)添加組;</p><p> ?。?)客戶調(diào)用服務(wù)器實(shí)現(xiàn)的IOPCSeEver::Ad2dltem()函數(shù)添加項(xiàng);</p><p> ?。?)客戶生成一個(gè)IAdviseSink對(duì)象;</p><p> ?。?)客戶調(diào)用服務(wù)器端實(shí)現(xiàn)的DAdvise函數(shù),與服務(wù)器建立連接。服務(wù)器在OPCGr

77、oup對(duì)象中保存客戶的IAdviseSink對(duì)象和數(shù)據(jù)格式;</p><p>  (6)客戶調(diào)用服務(wù)器IOPCASyncIO發(fā)出讀/寫操作,服務(wù)器給相應(yīng)組和項(xiàng)做異步讀/寫標(biāo)記;</p><p> ?。?)服務(wù)器向通道發(fā)送命令,等待命令返回;</p><p>  (8)服務(wù)器接收通道的讀/寫結(jié)果,給與通道對(duì)應(yīng)的OPC項(xiàng)置讀/寫完成標(biāo)記;</p><

78、p> ?。?)服務(wù)器中建有定時(shí)器,該定時(shí)器定時(shí)掃描OPC項(xiàng)的異步操作標(biāo)記當(dāng)發(fā)現(xiàn)標(biāo)記為完成時(shí),調(diào)用IOPCDataObject中保存的客戶的IAdviseSink對(duì)象的OnDataChange函數(shù),把項(xiàng)的數(shù)據(jù)傳輸給客戶,然后給項(xiàng)的標(biāo)記復(fù)位客戶在OnDataChange 函數(shù)中,按照約定的數(shù)據(jù)格式,獲得異步操作的結(jié)果。</p><p>  4.4.2 服務(wù)器與客戶端連接點(diǎn)方式傳送機(jī)制</p>&l

79、t;p>  一般情況下,服務(wù)器組件提供的接口都是入接口,即組件處于被動(dòng)狀態(tài),等待客戶的請(qǐng)求、然后做出相應(yīng)的反應(yīng)。這樣的結(jié)構(gòu)常常不能滿足實(shí)際的要求,組件對(duì)象也要主動(dòng)的與客戶進(jìn)行通信,所以這就要求對(duì)象能夠提供出接口。如果一個(gè)COM對(duì)象支持一個(gè)或者多個(gè)出接口,我們就稱這樣的對(duì)象為可連接對(duì)象??蛇B接對(duì)象管理所有的出接口。對(duì)應(yīng)每一個(gè)出接口,可連接對(duì)象管理了一個(gè)稱為連接點(diǎn)的對(duì)象,客戶通過連接點(diǎn)對(duì)象建立接收器與可連接對(duì)象的連接。圖4-3就是連接

80、點(diǎn)機(jī)制的具體描述:</p><p>  圖4-3 連接點(diǎn)機(jī)制結(jié)構(gòu)描述</p><p>  如果客戶要使用連接點(diǎn),接收器對(duì)象中就必須實(shí)現(xiàn)IUnknown接口和服務(wù)器的輸出接口??蛻舫绦蜷_始運(yùn)行后,通過可連接對(duì)象接口查詢自己的接口指針,若OPC服務(wù)器提供了該接口的實(shí)現(xiàn),那么客戶就調(diào)用該接口的Advise方法,把在接收器中實(shí)現(xiàn)的IUnknown接口指針傳送給服務(wù)器。服務(wù)器接著獲得輸出接口的指針。

81、所以服務(wù)器需要向客戶端發(fā)送數(shù)據(jù)的時(shí)候就可以調(diào)用輸出接口的方法。</p><p>  4.5 OPC對(duì)象和接口</p><p>  OPC對(duì)象是OPC服務(wù)器程序與客戶程序進(jìn)行交互的部分,需要與數(shù)據(jù)存儲(chǔ)區(qū)和硬件驅(qū)動(dòng)部分相聯(lián)系,以便獲取數(shù)據(jù)區(qū)中的數(shù)據(jù)或直接訪問硬件設(shè)備。實(shí)施步驟分為以下幾個(gè)部分:</p><p> ?。?)繼承OPC規(guī)范中定義的OPCServer類OPCG

82、roup類和OPCItem類,實(shí)現(xiàn)其接口成員函數(shù)。首先從OPC基金會(huì)定義的組對(duì)象接口派生出新的接口類并實(shí)現(xiàn)其成員函數(shù)的功能,然后增加指針成員變量指向這些接口類。最后在組對(duì)象的接口查詢函數(shù)中增加實(shí)例化接口類的代碼。OPC項(xiàng)表示了與數(shù)據(jù)源的連接,數(shù)據(jù)源可以是程序數(shù)據(jù)區(qū)中的數(shù)據(jù)項(xiàng),也可以是某個(gè)硬件設(shè)備中的數(shù)據(jù)。OPC項(xiàng)沒有自己的接口,無需實(shí)現(xiàn)任何接口功能,只需增加相應(yīng)的功能函數(shù)(如根據(jù)OPC項(xiàng)的名稱與數(shù)據(jù)源進(jìn)行連接、讀/寫數(shù)據(jù)源等)。OPC客

83、戶程序?qū)⑼ㄟ^OPC組對(duì)象的接口函數(shù)來間接調(diào)用OPC項(xiàng)的這些成員函數(shù);</p><p> ?。?)定義OPC數(shù)據(jù)服務(wù)器的名稱和類標(biāo)識(shí)。由于服務(wù)器對(duì)象是一個(gè)由客戶程序調(diào)用的COM對(duì)象,因此需要定義一個(gè)類標(biāo)識(shí)。類標(biāo)識(shí)可用VC程序自動(dòng)產(chǎn)生,這樣能夠保證生成的類標(biāo)識(shí)是唯一的。然后根據(jù)規(guī)范對(duì)各個(gè)接口ID進(jìn)行定義;</p><p> ?。?)實(shí)現(xiàn)OPC數(shù)據(jù)服務(wù)器類廠對(duì)象。在COM規(guī)范中,客戶程序是通過類

84、廠創(chuàng)建COM對(duì)象并返回其接口指針的,因此需要為CMyServer類設(shè)計(jì)相應(yīng)的類廠。具體實(shí)現(xiàn)時(shí)先從IClassFactory基類派生出MyOPCClassFactory類,然后重載Create2Instance()成員函數(shù),通過該函數(shù)創(chuàng)建CMyServer服務(wù)器對(duì)象;</p><p> ?。?)將OPC對(duì)象設(shè)計(jì)的頭文件和實(shí)現(xiàn)文件添加到工程中。接著在應(yīng)用程序類的初始化函數(shù)中完成COM庫初始化、類廠注冊(cè)等功能。當(dāng)客戶程

85、序建立連接時(shí),通過類廠注冊(cè)服務(wù)器程序并實(shí)例化一個(gè)服務(wù)器對(duì)象傳遞給客戶程序。</p><p>  5 OPC服務(wù)器的實(shí)驗(yàn)測(cè)試</p><p> ?。?)同步實(shí)例界面,實(shí)現(xiàn)了啟動(dòng)、停止服務(wù)器,同步讀寫操作,并回復(fù)操作結(jié)果,如圖5-1所示。</p><p>  圖5-1 同步實(shí)例界面</p><p>  (2)服務(wù)器界面,主窗口是OPC服務(wù)器程序的

86、起點(diǎn),主要完成OPC服務(wù)器的初始化。主窗口是所有界面元素的組織容器,主要包含設(shè)備地址、設(shè)備樹形列表、標(biāo)簽列表。測(cè)試中成功將數(shù)據(jù)轉(zhuǎn)換為模擬量TAG_I0-TAG_I9,它們分別對(duì)應(yīng)了不同的數(shù)值但擁有相同的質(zhì)量如圖5-2所示。</p><p>  圖5-2 服務(wù)器界面</p><p> ?。?)設(shè)備屬性,可以設(shè)置具體到一臺(tái)設(shè)備的相關(guān)參數(shù),如IP地址、端口號(hào)、設(shè)備號(hào)、網(wǎng)關(guān)設(shè)備、超時(shí)時(shí)間、消息周期

87、等等,如圖5-3所示。</p><p><b>  圖5-3 設(shè)備屬性</b></p><p>  (4)添加組,在圖5-4所示的指定的服務(wù)器里面添加分組并將其命名的操作。</p><p><b>  圖5-4 添加組</b></p><p> ?。?)標(biāo)簽屬性,在圖5-5所示設(shè)定指定標(biāo)簽的名稱、描

88、述、地址、寄存器及數(shù)據(jù)類型等相關(guān)操作。</p><p><b>  圖5-5 標(biāo)簽屬性</b></p><p><b>  結(jié)論</b></p><p>  本文所開發(fā)的OPC服務(wù)器,實(shí)現(xiàn)了與客戶端的連接,并且可以實(shí)現(xiàn)添加或者刪除組和項(xiàng)的操作,經(jīng)過測(cè)試基本擁有了OPC服務(wù)器作為工業(yè)通用數(shù)據(jù)訪問服務(wù)器的功能,實(shí)現(xiàn)了OPC規(guī)范

89、中所規(guī)定的訪問機(jī)制和Modbus/TCP標(biāo)準(zhǔn)規(guī)范中的功能。但測(cè)試中發(fā)現(xiàn)以下幾個(gè)問題:</p><p> ?。?)頻繁的啟動(dòng)停止服務(wù)器時(shí),偶爾出現(xiàn)不能打開的情況;</p><p> ?。?)在數(shù)據(jù)量過大時(shí)候轉(zhuǎn)換不出模擬量;</p><p>  (3)時(shí)間戳部分偶爾出現(xiàn)時(shí)間錯(cuò)誤。</p><p>  由于現(xiàn)場(chǎng)設(shè)備和本人水平有限,對(duì)于以上幾點(diǎn)缺陷沒

90、有進(jìn)行有效的開發(fā),有待以后的研究。通過本次畢業(yè)設(shè)計(jì),我感到自己應(yīng)用基礎(chǔ)知識(shí)及專業(yè)知識(shí)解決問題的能力有了很大的提高,并且這次畢業(yè)設(shè)計(jì)的選題,是一個(gè)很實(shí)際的課題,因此,在我即將工作之前,它是一次重要演練。我想,通過這次畢業(yè)設(shè)計(jì),到了工作單位后,我將能夠更快的適應(yīng)工作崗位和工作要求。我對(duì)自己充滿信心。</p><p><b>  參考文獻(xiàn)</b></p><p>  蔣近,

91、 毛六平, 戴瑜興. 基于Modbus協(xié)議的OPC服務(wù)器的YF發(fā)與研究[J]. 湖南工程學(xué)院學(xué)報(bào), 2005, 6(1): 56-58.</p><p>  馬增良, 蘭斌. OPC 數(shù)據(jù)訪問服務(wù)器實(shí)現(xiàn)機(jī)制研究[J]. 計(jì)算機(jī)工程與應(yīng)用, 2003, 39(21): 65-67.</p><p>  李勤, 黨選舉, 向榮. 基于COM的OPC技術(shù)的研究和實(shí)現(xiàn)[J]. 微計(jì)算機(jī)信息, 20

92、02, 22(16): 18-22.</p><p>  林躍. OPC數(shù)據(jù)服務(wù)器開發(fā)工具研究與實(shí)現(xiàn)[J]. 自動(dòng)化儀表, 2001, 22(9): 7-13.</p><p>  郭紅曉, 莫德舉. OPC技術(shù)及其軟件的開發(fā)[J]. 北京化工大學(xué)學(xué)報(bào)(自然科學(xué)版), 2002, 29(3): 72- 73, 78.</p><p>  馮波, 陳子明, 王偉杰,

93、等. OPC技術(shù)及其在工業(yè)過程控制中的作用[J]. 中山大學(xué)學(xué)報(bào), 2002, 22(3): 169-171.</p><p>  殷衛(wèi)兵, 等. OPC數(shù)據(jù)服務(wù)器分析及程序開發(fā)[J]. 化工自動(dòng)化及儀表, 2003, 30(5): 41-45.</p><p>  潘洪躍. 基于Modbus協(xié)議通信的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)量技術(shù), 2002, 33(4): 35-36.</p>

94、;<p>  Vincent. Interface between OPC server and OPC application program [J]. Industrial automation, 2005, 14(7): 21-26.</p><p>  Martin. The role of OPC in industrial automation[J]. Intelligent contr

95、ol, 2001, 8(7): 11-13.</p><p>  馬龍華, 段建民. OPC數(shù)據(jù)存取規(guī)范的研究和應(yīng)用[J]. 化工自動(dòng)化及儀表, 2002, 29(1): 43-45.</p><p>  傅春霞, 段建民. OPC服務(wù)器的研究及在CAN總線系統(tǒng)中的實(shí)現(xiàn)[J]. 微計(jì)算機(jī)信息(測(cè)控自動(dòng)化), 2003, 19(11): 8-10.</p><p> 

96、 張國(guó)忠, 等. 電力監(jiān)控模塊OPC驅(qū)動(dòng)程序的實(shí)現(xiàn)[J]. 武漢大學(xué)學(xué)報(bào), 2002, 35(2) :54-58.</p><p>  附錄1 OPC組件的部分實(shí)現(xiàn)代碼</p><p>  //聲明工具包的函數(shù)</p><p>  extern HMODULE hLibrary;</p><p>  extern CREATESERVER C

97、reateServer;</p><p>  extern FREESERVER FreeServer;</p><p>  extern SETSERVERSTATE SetServerState;</p><p>  extern SETVERSIONINFO SetVersionInfo;</p><p>  extern ACTIVE

98、CODE ActiveCode;</p><p>  extern SHUTDOWN shutDown;</p><p>  extern REGSERVER RegServer;</p><p>  extern UNREGSERVER UnregServer;</p><p>  extern REGTAG RegTag;</p&g

99、t;<p>  extern REGTAGEX RegTagEx;</p><p>  extern UNREGTAG UnregTag;</p><p>  extern SETTAGQUALIFIER SetTagQualifier;</p><p>  extern ADDTAGPROPERTY AddTagProperty;</p>

100、<p>  extern ADDTAGPROPERTYEX AddTagPropertyEx;</p><p>  extern SETTAGPROPERTY SetTagProperty;</p><p>  extern UPDATETAGWITHTIMESTAMP UpdateTagWithTimeStamp;</p><p>  extern

101、UPDATETAG UpdateTag;</p><p>  extern SETWRITECALLBACK SetWriteCallback;</p><p>  extern SETWRITECALLBACKEX SetWriteCallbackEx;</p><p>  extern SETREADCALLBACK SetReadCallback;</p

102、><p>  extern SETREADCALLBACKEX SetReadCallbackEx;</p><p>  extern SETSERVERNOTIFY SetServerNotify;</p><p>  extern SETGROUPNOTIFY SetGroupNotify;</p><p>  extern SETITEMN

103、OTIFY SetItemNotify;</p><p>  extern SETTAGNOTIFY SetTagNotify;</p><p>  extern SETLOGNOTIFY SetLogNotify;</p><p>  //讀寫回調(diào)函數(shù)類型的聲明</p><p>  extern void __stdcall ReadCal

104、lback(DWORD handle,VARIANT* pNewValue,WORD* Quality, FILETIME* ft, DWORD* pDeviceError);</p><p>  extern void __stdcall WriteCallback(DWORD handle,VARIANT pNewValue,DWORD* pDeviceError);</p><p>

105、  //初始化和反初始化設(shè)置函數(shù)聲明</p><p>  extern BOOL InitOPCDef();</p><p>  extern BOOL FreeOPCDef();</p><p><b>  服務(wù)器通知函數(shù)聲明</b></p><p>  extern void __stdcall ServerNoti

106、fy(DWORD handle, WORD wOperate);</p><p>  //對(duì)OPC服務(wù)器的描述進(jìn)行定義。</p><p> ?。╟onst LPCSTR OPCClsID ="{6E751971-72F1-439F-A6BE-0586D0F86860}";//定義類標(biāo)識(shí)</p><p>  const LPCSTR OPCProg

107、ID="OPC.ASVCDEMO.1";//定義OPC服務(wù)器的名稱</p><p>  const LPCSTR OPCDescr =" Agilewill co.ltd";</p><p>  extern CWnd* m_WND;)</p><p>  在程序文件DASVR.cpp中,添加代碼定義如下函數(shù):讀寫回調(diào)函數(shù)&l

108、t;/p><p>  void __stdcall ReadCallback(DWORD handle,VARIANT* pNewValue,WORD* Quality, FILETIME* ft, DWORD* pDeviceError)</p><p><b>  {</b></p><p><b>  long I;</b&g

109、t;</p><p>  *pDeviceError=-1;</p><p>  for(I=0;I<=TagCount;I++)</p><p><b>  {</b></p><p>  if(TagList[I].hHWND==handle)</p><p><b>  {&

110、lt;/b></p><p>  *pNewValue= TagList[I].vValue;</p><p>  *Quality= TagList[I].lQuality;</p><p>  *ft=TagList[I].ft;</p><p>  *pDeviceError=0;</p><p><

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論