這里主要討論的是OPC Data Access 2.0服務(wù)器的開(kāi)發(fā),在掌握了這個(gè)最常用的OPC服務(wù)器開(kāi)發(fā)之后,對其它類(lèi)型的OPC服務(wù)器,如A&E、HDA等就可以觸類(lèi)旁通了。
一個(gè)OPC服務(wù)器的開(kāi)發(fā),主要包括兩大部分的工作:OPC接口的實(shí)現和設備驅動(dòng)部分的開(kāi)發(fā)。
OPC接口的實(shí)現,實(shí)質(zhì)上就是按照OPC標準進(jìn)行COM接口開(kāi)發(fā),對于大多數的OPC服務(wù)器開(kāi)發(fā)者來(lái)說(shuō),我認為沒(méi)有必要涉足。目前市場(chǎng)上有很多OPC服務(wù)器開(kāi)發(fā)工具,國內外都有,當然價(jià)格也不盡相同,調研一下的話(huà)應該會(huì )找到適合自己的。有必要進(jìn)行OPC接口開(kāi)發(fā)的大致有這幾種情況:1、有實(shí)力的大公司,OPC相關(guān)產(chǎn)品較多,需要對OPC技術(shù)進(jìn)行深入了解;2、OPC服務(wù)器開(kāi)發(fā)工具廠(chǎng)商;3、對OPC技術(shù)感興趣的個(gè)人、院校及研究機構。除此之外,一般沒(méi)有必要一頭扎進(jìn)COM的泥沼,去和內存分配、線(xiàn)程管理等繁瑣的事務(wù)打交道。
所以,當決定為設備/程序開(kāi)發(fā)OPC服務(wù)器時(shí),首先要選擇一款OPC服務(wù)器開(kāi)發(fā)工具。(目前流行的OPC DA 2.0服務(wù)器開(kāi)發(fā)工具的結構大同小異,kevin所在的公司也有這類(lèi)產(chǎn)品,為避免廣告之嫌,這里就不做詳細介紹了。)
為了更好地理解OPC服務(wù)器開(kāi)發(fā)工具的結構并合理使用,最好先了解OPC服務(wù)器的結構模型,這里簡(jiǎn)單說(shuō)一下。OPC(DA 2.0)里主要定義了兩個(gè)對象:OPCServer 和 OPCGroup。OPCServer對象是OPC服務(wù)器的核心,它提供的接口函數主要包括對OPCGroup對象的管理、OPCItem屬性查詢(xún)、連接點(diǎn)管理、以及地址空間瀏覽(可選)等。OPCGroup 對象的主要作用是管理一組數據項(Item),包括數據項的同步/異步訪(fǎng)問(wèn)、添加刪除、屬性查詢(xún)等。從客戶(hù)程序角度看,訪(fǎng)問(wèn)一個(gè)OPC服務(wù)器的過(guò)程大致是首先創(chuàng )建一個(gè) OPCServer 對象,然后通過(guò)它創(chuàng )建一個(gè) OPCGroup,在其中添加想要訪(fǎng)問(wèn)的數據項,之后利用訂閱回調機制周期性獲取動(dòng)態(tài)數據或通過(guò)讀寫(xiě)接口直接訪(fǎng)問(wèn)數據項。
在OPC服務(wù)器的實(shí)現中,組對象的管理是關(guān)鍵,不同客戶(hù)程序可能創(chuàng )建多個(gè)組對象,每個(gè)組對象包含的數據項、更新周期都由客戶(hù)程序決定,不盡相同,需分別處理。所幸的是大部分OPC服務(wù)器開(kāi)發(fā)工具都已實(shí)現了這一部分,并進(jìn)行了封裝。用戶(hù)開(kāi)發(fā)OPC服務(wù)器時(shí)可把主要精力放在現場(chǎng)數據的讀寫(xiě)上。目前大部分的OPC服務(wù)器開(kāi)發(fā)工具都提供了一些類(lèi)對象或API形式的函數,用戶(hù)只需調用這些函數即可完成從現場(chǎng)數據到OPC服務(wù)器(通常是內部緩沖區)的數據更新。
在開(kāi)始開(kāi)發(fā)一個(gè)OPC服務(wù)器之前,用戶(hù)還要確定服務(wù)器的運行形式。OPC服務(wù)器做為一個(gè)COM組件,運行方式主要包括進(jìn)程內(DLL)、進(jìn)程外(EXE)以及服務(wù)(Service)。這里的進(jìn)程內/外是相對于客戶(hù)程序說(shuō)的,當OPC服務(wù)器是進(jìn)程內組件時(shí),它運行在客戶(hù)程序的進(jìn)程里(遠程連接時(shí)是宿主程序(host)的進(jìn)程),而我們通常接觸到的OPC服務(wù)器一般都是進(jìn)程外組件。選擇哪一種形式要看具體的應用需求,進(jìn)程內形式適合輕量級的小型服務(wù)器,特別是當底層設備具有較高的性能,支持并發(fā)多連接訪(fǎng)問(wèn),OPC客戶(hù)及服務(wù)器程序處于同一計算機上時(shí),可采用進(jìn)程內形式。其它情況下進(jìn)程外形式可能更適合一些。簡(jiǎn)言之,當你不清楚到底那種更合適時(shí),就選擇進(jìn)程外方式。服務(wù)形式主要是和進(jìn)程外形式比較的,它在后臺運行,沒(méi)有用戶(hù)界面。當OPC服務(wù)器計算機可能在沒(méi)有用戶(hù)登錄,或者需要經(jīng)常切換登錄用戶(hù)時(shí),服務(wù)形式的OPC服務(wù)器是最合適的。無(wú)論那種形式,都與設備驅動(dòng)開(kāi)發(fā)的關(guān)系不大,大部分的OPC服務(wù)器開(kāi)發(fā)工具都帶有每種形式的服務(wù)器例程,用戶(hù)可在開(kāi)發(fā)時(shí)參考。
開(kāi)發(fā)一個(gè)OPC服務(wù)器時(shí),首先通常要確定地址空間結構。OPC DA 2.0規定了兩種地址空間的組織形式:Flat(平坦的) 和 Hierarchical(分等級的)??梢岳斫鉃槲覀兺ǔKf(shuō)的“列表型”和“樹(shù)狀型”。雖說(shuō)OPC DA 2.0里把IOPCBrowseServerAddressSpace接口定義為Optional,即可選的,但目前大部分OPC服務(wù)器開(kāi)發(fā)工具都實(shí)現了這個(gè)接口,樹(shù)狀地址空間有利于客戶(hù)程序瀏覽查詢(xún),特別是當數據項總數較多時(shí),Flat 形式不利于數據項的分類(lèi)、管理。所以建議定義樹(shù)狀地址空間。具體的空間結構因底層設備的特性而異,OPC沒(méi)有嚴格要求。借用OPC標準里的例子,比如:
<ROOT>
PLC_STATION_1 (branch)
ANALOG_VALUES (branch)
40001 (leaf)
40002 (leaf)
...
DISCRETE_VALUES (branch)
...
設計好地址空間結構之后,就要實(shí)現最主要的數據讀寫(xiě)功能了(以后繼續)。
BTW,有朋友曾在論壇里提到“通用”OPC服務(wù)器,我想可能是指Kepware之類(lèi)的OPC服務(wù)器套件,支持當前很多主流的設備。但這也是包含了多家廠(chǎng)商設備驅動(dòng)的結果?;蛘咂渌尼槍δ承┩ㄓ?、公開(kāi)的協(xié)議,比如Modbus,開(kāi)發(fā)的服務(wù)器,但顯然它不能適應所有的設備??梢哉f(shuō),只要有私有協(xié)議的存在,就沒(méi)有真正意義上的通用OPC服務(wù)器。OPC標準的根本目的是提供設備驅動(dòng)程序(軟件)與客戶(hù)軟件之間的互操作性。
refrence:http://blog.gkong.com/more.asp?name=kking&id=30090
聯(lián)系客服