<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > OPC服務(wù)器的研究及其在CAN總線(xiàn)系統中的實(shí)現

OPC服務(wù)器的研究及其在CAN總線(xiàn)系統中的實(shí)現

作者: 時(shí)間:2009-09-29 來(lái)源:網(wǎng)絡(luò ) 收藏

1技術(shù)簡(jiǎn)介

本文引用地址:http://dyxdggzs.com/article/163548.htm

  1.1什么是

  (OLEforProcessControl),即用于過(guò)程控制的對象鏈接與嵌入技術(shù),是一種規范,是在工業(yè)控制和生產(chǎn)自動(dòng)化領(lǐng)域中使用的硬件和軟件的接口標準。OPC以組件對象模型和分布式組件對象模型(COM/DCOM)技術(shù)為基礎,采用客戶(hù)/(Client/Server)的模式,定義了一組COM對象接口標準。

  OPC規范是由世界范圍內自動(dòng)化領(lǐng)域中處于領(lǐng)導地位的硬件和軟件開(kāi)發(fā)商,在微軟的協(xié)作下制定的,并且已經(jīng)得到越來(lái)越多的客戶(hù)和硬件制造商的認可。

  1.2OPC的意義

  在傳統的控制中,針對同一個(gè)硬件設備,每個(gè)應用軟件都要根據自己的需求開(kāi)發(fā)一套硬件驅動(dòng)程序。這不僅加大了開(kāi)發(fā)和維護費用,而且帶來(lái)了訪(fǎng)問(wèn)沖突問(wèn)題。

  OPC技術(shù)將各個(gè)硬件設備驅動(dòng)程序和通訊程序封裝成獨立的OPC,上層應用軟件(作為OPC客戶(hù)端)可以不關(guān)心硬件的性能特點(diǎn),而通過(guò)標準的OPC接口訪(fǎng)問(wèn)OPC。

  這樣不僅解決了上述問(wèn)題,而且了軟件的“即插即用”。OPC相當于一塊軟件“主板”,它能夠直接與現場(chǎng)的PLC、工業(yè)網(wǎng)絡(luò )、數據采集和WindowsCE設備連接,快速有效地獲取現場(chǎng)實(shí)時(shí)數據。PC機內的各種監視、控制和管理等應用軟件則像是插在OPC主板上的軟件“芯片”,芯片可以通過(guò)OPC獲得現場(chǎng)實(shí)時(shí)數據,芯片之間也可以按照OPC協(xié)議進(jìn)行通訊,從而軟件的“即插即用”。

  1.3OPC對象與接口

  OPC的核心是COM/DCOM技術(shù)。在COM模型中,軟件的功能被分解為一些組件,這些組件通過(guò)COM協(xié)議在一定條件下連接起來(lái),相應的功能。COM對象分為客戶(hù)端和服務(wù)器兩類(lèi),客戶(hù)端通過(guò)COM接口訪(fǎng)問(wèn)服務(wù)器[2]。

  OPC數據訪(fǎng)問(wèn)規范描述了OPC服務(wù)器需要實(shí)現的COM對象接口,它定義了定制接口(custominterface)和自動(dòng)化接口(automationinterface)[1]。OPC客戶(hù)程序通過(guò)接口與服務(wù)器通訊,間接讀取數據。OPC服務(wù)器必須實(shí)現定制接口,也可以有選擇地實(shí)現自動(dòng)化接口。一般來(lái)說(shuō),自動(dòng)化接口能為VB等高級語(yǔ)言客戶(hù)程序提供極大的便利,但數據傳輸效率較低;而定制接口則為用C/C++語(yǔ)言編寫(xiě)的程序帶來(lái)靈活高效的調用手段。

  OPC客戶(hù)程序訪(fǎng)問(wèn)服務(wù)器時(shí),創(chuàng )建一個(gè)服務(wù)器對象(這里指的是邏輯對象,目的是利用這個(gè)邏輯對象建立與實(shí)際服務(wù)器的連接),調用這個(gè)服務(wù)器對象的接口,服務(wù)器對象創(chuàng )建組對象并返回組對象的指針,客戶(hù)程序獲得組對象的指針后調用其接口。

  注意,OPC項并不是OPC客戶(hù)直接操作的對象,因為OPC項沒(méi)有定義外部接口,對象的所有操作都是通過(guò)包容該項的組對象進(jìn)行的。

2OPC數據訪(fǎng)問(wèn)服務(wù)器的結構及設計步驟

  2.1OPC數據訪(fǎng)問(wèn)服務(wù)器的結構


圖1OPC數據訪(fǎng)問(wèn)服務(wù)器的結構

  本文實(shí)現的OPC數據訪(fǎng)問(wèn)服務(wù)器具有數據采集的功能,提供符合OPC規范的定制接口。主要由OPC服務(wù)器對象、OPC組對象、OPC項對象和針對(ControllerAreaNetwork控制器局域網(wǎng))通訊卡編寫(xiě)的I/O動(dòng)態(tài)鏈接庫(DLL)組成,采用如圖1所示的結構。

  OPC服務(wù)器對象是客戶(hù)端與服務(wù)器交互的首要對象??蛻?hù)端通過(guò)訪(fǎng)問(wèn)服務(wù)器對象的接口函數與之進(jìn)行交互。一個(gè)服務(wù)器對象里可以設置一個(gè)以上的組對象。OPC服務(wù)器對象的主要功能是:①創(chuàng )建和管理OPC組對象;②管理服務(wù)器內部的狀態(tài)信息;③將服務(wù)器的錯誤代碼翻譯成描述性語(yǔ)句;④瀏覽服務(wù)器內部的數據組織結構。

  OPC組對象用于組織管理服務(wù)器內部的實(shí)時(shí)數據信息,它是OPC項對象的集合。正因為有了組對象,OPC應用程序就可以成批地對所需要的數據進(jìn)行訪(fǎng)問(wèn),也可以以組為單位啟動(dòng)或停止數據訪(fǎng)問(wèn)。其主要功能是:①管理組對象內部的狀態(tài)信息;②創(chuàng )建和管理項對象;③OPC服務(wù)器內部的實(shí)時(shí)數據存取服務(wù)(同步或異步方式)。

  OPC服務(wù)器對象和組對象支持的接口由OPC規范定義,但并未規定具體如何實(shí)現,需要開(kāi)發(fā)人員自己完成。

  OPC項則與現場(chǎng)設備中的模塊相對應,它包含數據項的值(value)、品質(zhì)(quality)和時(shí)間戳(timestamp)。

  I/ODLL是針對具體硬件設備開(kāi)發(fā)的驅動(dòng)程序,實(shí)現從現場(chǎng)設備讀取數據的功能。

  2.2實(shí)現OPC數據訪(fǎng)問(wèn)服務(wù)器的主要步驟:

  2.2.1獲得并注冊OPC標準組件

  根據COM規范,COM服務(wù)器可分為進(jìn)程內服務(wù)器、本地服務(wù)器和遠程服務(wù)器。后兩種服務(wù)器與客戶(hù)程序運行在不同的進(jìn)程空間,屬于進(jìn)程外服務(wù)器。為了實(shí)現進(jìn)程間通訊,需要用到代理/存根模塊。代理/存根模塊由接口描述語(yǔ)言(IDL)直接生成。OPC基金會(huì )為每種OPC服務(wù)器提供了相應的代理/存根動(dòng)態(tài)鏈接庫,這些文件可以在OPC基金會(huì )的網(wǎng)站(www.opcfoundation.org)上免費下載。

  注意,設計OPC服務(wù)器時(shí)可以在OPC對象上增加接口以滿(mǎn)足特定的要求,但不能修改標準的OPCIDL文件或相應的proxy/stubDLL。新增的接口描述應定義在獨立的IDL文件中,并由該文件生成獨立的代理/存根模塊來(lái)完成接口的調用工作。

  組件的注冊將在后面介紹。

  2.2.2編寫(xiě)OPC服務(wù)器代碼

  首先定義0PC數據服務(wù)器的名稱(chēng)(ProgID)和類(lèi)標識(CLSID),實(shí)現COM庫的初始化功能和0PC數據服務(wù)器類(lèi)廠(chǎng)對象的接口功能。然后實(shí)現OPC對象和數據緩沖區。接下來(lái)針對具體硬件編寫(xiě)I/ODLL,實(shí)現數據的實(shí)時(shí)讀取。這項工作是十分繁重的,要求開(kāi)發(fā)人員具有良好的COM編程知識,具體過(guò)程限于篇幅不能詳述,這里指出兩點(diǎn)引起注意:

 ?、湃治ㄒ粯俗R符(GUID)

  GUID是為每個(gè)COM對象提供的十六字節標識數。COM類(lèi)至少有兩個(gè)GUID:類(lèi)標識(CLSID)和接口標識(IID)。CLSID用于標識COM類(lèi),登記在Windows注冊表中,包含指向包括COM類(lèi)的DLL或EXE組件的路徑。IID用于標識該類(lèi)的接口,被應用程序用來(lái)查詢(xún)和觸發(fā)該類(lèi)的方法,也登記在注冊表中。由于對象類(lèi)是由GUID標識的,所以必須保證它們的唯一性,才能使最終用戶(hù)在使用由不同軟件商開(kāi)發(fā)的組件時(shí)不會(huì )發(fā)生沖突。

  可以使用宏DEFINE_GUID(name,long,word,word,word,byte1,…,byte8)

  其中name是標識數的名字,其余參數是實(shí)際的ID碼。類(lèi)標識的命名慣例是CLSID_ClassName,而接口ID的命名慣例是IID_InterfaceName。

  有兩種途徑來(lái)獲得GUID:

 ?、費icrosoftVisualC++提供了兩個(gè)工具來(lái)產(chǎn)生GUID:UUIDGen.exe和GUIDGen.exe(大小寫(xiě)沒(méi)有影響)。前者是一個(gè)命令行程序,直接產(chǎn)生一個(gè)GUID;后者是一個(gè)基于對話(huà)框的應用程序,運行UUIDGen.exe,產(chǎn)生一個(gè)CreateGUID對話(huà)框。它提供四種格式,選定之后,按NewGUID鍵產(chǎn)生新的GUID,顯示在Result欄中;按Copy鍵可以復制產(chǎn)生的結果。

 ?、诶肅OM庫提供的API函數來(lái)產(chǎn)生GUID:

  HRESULTCoCreateGuid(GUID*pguid)

  如果創(chuàng )建GUID成功,則函數返回S_OK,并且pguid將指向所得到的GUID值。

  


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>