《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 設(shè)計(jì)應(yīng)用 > OPC服務(wù)器的研究及其在CAN總線系統(tǒng)中的實(shí)現(xiàn)
OPC服務(wù)器的研究及其在CAN總線系統(tǒng)中的實(shí)現(xiàn)
摘要: OPC(OLE for Process Control),即用于過(guò)程控制的對(duì)象鏈接與嵌入技術(shù),是一種規(guī)范,是在工業(yè)控制和生產(chǎn)自動(dòng)化領(lǐng)域中使用的硬件和軟件的接口標(biāo)準(zhǔn)。OPC以組件對(duì)象模型和分布式組件對(duì)象模型(COM/DCOM)技術(shù)為基礎(chǔ),采用客戶/服務(wù)器(Client/Server)的模式,定義了一組COM對(duì)象及其接口標(biāo)準(zhǔn)。
Abstract:
Key words :

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

  1.1 什么是OPC

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

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

  1.2 OPC的意義

  在傳統(tǒng)的控制系統(tǒng)中,針對(duì)同一個(gè)硬件設(shè)備,每個(gè)應(yīng)用軟件都要根據(jù)自己的需求開(kāi)發(fā)一套硬件驅(qū)動(dòng)程序。這不僅加大了開(kāi)發(fā)和維護(hù)費(fèi)用,而且?guī)?lái)了訪問(wèn)沖突問(wèn)題。

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

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

  1.3 OPC對(duì)象與接口

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

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

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

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

2 OPC數(shù)據(jù)訪問(wèn)服務(wù)器的結(jié)構(gòu)及設(shè)計(jì)步驟

  2.1 OPC數(shù)據(jù)訪問(wèn)服務(wù)器的結(jié)構(gòu)

 


圖 1 OPC數(shù)據(jù)訪問(wèn)服務(wù)器的結(jié)構(gòu)

 

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

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

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

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

  OPC項(xiàng)則與現(xiàn)場(chǎng)設(shè)備中的模塊相對(duì)應(yīng),它包含數(shù)據(jù)項(xiàng)的值(value)、品質(zhì)(quality)和時(shí)間戳(time stamp)。

  I/O DLL是針對(duì)具體硬件設(shè)備開(kāi)發(fā)的驅(qū)動(dòng)程序,實(shí)現(xiàn)從現(xiàn)場(chǎng)設(shè)備讀取數(shù)據(jù)的功能。

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

  2.2.1 獲得并注冊(cè)O(shè)PC標(biāo)準(zhǔn)組件

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

  注意,設(shè)計(jì)OPC服務(wù)器時(shí)可以在OPC對(duì)象上增加接口以滿足特定的要求,但不能修改標(biāo)準(zhǔn)的OPC IDL文件或相應(yīng)的 proxy/stub DLL。新增的接口描述應(yīng)定義在獨(dú)立的IDL文件中,并由該文件生成獨(dú)立的代理/存根模塊來(lái)完成接口的調(diào)用工作。

  組件的注冊(cè)將在后面介紹。

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

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

  ⑴全局唯一標(biāo)識(shí)符(GUID)

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

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

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

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

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

  ②利用COM庫(kù)提供的API函數(shù)來(lái)產(chǎn)生GUID:

  HRESULT CoCreateGuid (GUID *pguid )

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

⑵OPC組件的注冊(cè)

 

  注冊(cè)表是客戶和組件程序共同訪問(wèn)的信息倉(cāng)庫(kù),通常情況下,當(dāng)組件程序被安裝到計(jì)算機(jī)上之后,必須通過(guò)某種途徑把它的信息注冊(cè)到注冊(cè)表中,然后客戶程序才能根據(jù)注冊(cè)表中的信息對(duì)組件程序進(jìn)行操作。

  根據(jù)COM規(guī)范,組件程序可分為自注冊(cè)組件程序和非自注冊(cè)組件程序。OPC基金會(huì)提供的組件都是自注冊(cè)組件。對(duì)于非自注冊(cè)組件程序,其注冊(cè)過(guò)程與組件程序沒(méi)有直接關(guān)系,必須單獨(dú)進(jìn)行注冊(cè)信息的配置,比如,可以編寫(xiě)一個(gè)注冊(cè)表文件,然后在RegEdit中引入。

  對(duì)于DLL形式的進(jìn)程內(nèi)自注冊(cè)組件,Windows系統(tǒng)提供了RegSvr32.exe注冊(cè)工具進(jìn)行組件注冊(cè)和注銷。組件程序本身必須包含DllRegisterServer和DllUnregisterServer兩個(gè)注冊(cè)表入口函數(shù)。注冊(cè)和注銷的格式分別為:

  RegSvr32 <系統(tǒng)路徑> 

  RegSvr32 /u <系統(tǒng)路徑> 

  對(duì)于EXE形式的進(jìn)程外自注冊(cè)組件,COM規(guī)范規(guī)定,必須支持兩個(gè)命令行參數(shù)/RegServer和/UnregServer(大小寫(xiě)無(wú)關(guān),并且“/”可以用“-”代替),以便完成注冊(cè)和注銷操作。注冊(cè)和注銷的格式分別為:

  <系統(tǒng)路徑> /RegServer

  <系統(tǒng)路徑> /UnregServer

  2.2.3 測(cè)試OPC服務(wù)器

  OPC服務(wù)器經(jīng)過(guò)調(diào)試之后,還需要利用OPC客戶程序?qū)λ闹饕δ苓M(jìn)行測(cè)試。

3 OPC技術(shù)在CAN現(xiàn)場(chǎng)總線系統(tǒng)中的應(yīng)用

  本文開(kāi)發(fā)的OPC服務(wù)器是針對(duì)華控公司的CAN通訊卡編寫(xiě)的,用于從華控的CAN通訊卡和RSM智能模塊組成的現(xiàn)場(chǎng)通訊網(wǎng)絡(luò)中讀取信息。

  3.1 系統(tǒng)組成

  系統(tǒng)主要由上位機(jī), CAN通訊卡,OPC 客戶端,OPC服務(wù)器,RSM智能模塊,通訊媒體等組成。如圖2所示。

 


圖2 系統(tǒng)構(gòu)成

 

  ①上位機(jī)的軟、硬件配置: Microsoft Windows 98/2000 或Windows NT操作系統(tǒng);32M以上內(nèi)存、1G以上可用硬盤(pán)空間、SVGA顯示卡。

 ?、贑AN通訊卡選用華控公司的HK-CAN30B,它是一種將CAN通訊協(xié)議與PC機(jī)PCI總線標(biāo)準(zhǔn)相連接的非智能CAN插卡,通過(guò)該卡可對(duì)工業(yè)現(xiàn)場(chǎng)具有CAN通訊接口的儀表和控制設(shè)備進(jìn)行監(jiān)控。

  ③CAN現(xiàn)場(chǎng)設(shè)備選用華控的RSM智能模塊,每個(gè)模塊都是在一個(gè)嵌入式實(shí)時(shí)多任務(wù)的內(nèi)核管理下周期性工作,按組態(tài)要求定時(shí)地向上發(fā)送和取得數(shù)據(jù)。

 ?、芡ㄓ嵜襟w可以選用雙絞線、帶屏蔽雙絞線等。

 ?、菘蛻舳诉x用力控公司的力控2.6監(jiān)控組態(tài)軟件。力控2.6支持OPC技術(shù)。它作為OPC客戶端,充分利用了OPC服務(wù)器的強(qiáng)大性能,為工程人員提供了方便高效的數(shù)據(jù)訪問(wèn)能力。在力控中可以同時(shí)掛接任意多個(gè)OPC服務(wù)器,每個(gè)OPC服務(wù)器都可以當(dāng)作一個(gè)外部設(shè)備進(jìn)行定義、增加或刪除。

  3.2 OPC 服務(wù)器與客戶端的連接

  3.2.1 定義OPC設(shè)備

  首先在力控導(dǎo)航器窗口中選擇“實(shí)時(shí)數(shù)據(jù)庫(kù)”中的 “I/O設(shè)備驅(qū)動(dòng)”并展開(kāi),出現(xiàn)“OPC”設(shè)備。雙擊“OPC(Client)”,出現(xiàn)I/O設(shè)備定義對(duì)話框。在“設(shè)備名稱”中定義邏輯設(shè)備的名稱(由用戶隨意定義),不妨定義為“OPC”,在“數(shù)據(jù)更新周期”中指定采集周期,填寫(xiě)故障后恢復(fù)查詢的周期和最長(zhǎng)時(shí)間,然后單擊“下一步”,出現(xiàn)OPC設(shè)備定義對(duì)話框。

  力控會(huì)自動(dòng)搜索計(jì)算機(jī)系統(tǒng)中已經(jīng)安裝的所有OPC服務(wù)器。如果OPC服務(wù)器編寫(xiě)無(wú)誤并且注冊(cè)正確,則點(diǎn)擊下拉框“OPC 服務(wù)器”時(shí)會(huì)列出已經(jīng)安裝的所有OPC服務(wù)器的名稱,選擇要使用的OPC服務(wù)器,這里選擇本文設(shè)計(jì)的服務(wù)器“OPC.Server.1”。

  選擇“Server類型”,是“當(dāng)?shù)兀╨ocal)”還是“遠(yuǎn)程(remote)”。在“數(shù)據(jù)訪問(wèn)方式”中選擇“緩沖區(qū)”或“外設(shè)”方式,對(duì)于“緩沖區(qū)”方式,OPC客戶程序?qū)⑼ㄟ^(guò)OPC服務(wù)器的緩沖區(qū)讀取數(shù)據(jù);對(duì)于“外設(shè)”方式,OPC客戶程序?qū)⑼ㄟ^(guò)OPC服務(wù)器直接從設(shè)備讀取數(shù)據(jù)。從設(shè)備直接讀取數(shù)據(jù)速度會(huì)慢一些,一般只有在故障診斷或極特殊的情況下才會(huì)使用。在“死區(qū)百分比”中輸入一個(gè)百分值,表示過(guò)程數(shù)據(jù)值的變化不超出這個(gè)比例將不對(duì)其進(jìn)行數(shù)據(jù)更新。單擊“確定”就完成了OPC設(shè)備的定義。

  3.2.2 對(duì)OPC數(shù)據(jù)項(xiàng)進(jìn)行數(shù)據(jù)連接

  啟動(dòng)力控的數(shù)據(jù)庫(kù)組態(tài)程序DBMan。首先在點(diǎn)組態(tài)中創(chuàng)建所要用的變量,不妨設(shè)為gg1。展開(kāi)“數(shù)據(jù)連接”項(xiàng),已經(jīng)建立的OPC設(shè)備就排列在其中。雙擊我們剛才建立的OPC設(shè)備 “OPC”,則出現(xiàn)“數(shù)據(jù)連接”對(duì)話框。選擇要連接的點(diǎn)參數(shù)gg1后,單擊“增加”按鈕,出現(xiàn)“數(shù)據(jù)項(xiàng)組態(tài)”對(duì)話框。

  如果OPC服務(wù)器支持“瀏覽”功能,雙擊右上側(cè)列表框中的“Root”,列表框會(huì)自動(dòng)列出它提供的數(shù)據(jù)區(qū);如果OPC服務(wù)器不支持“瀏覽”功能,其數(shù)據(jù)項(xiàng)的描述需要用戶根據(jù)OPC服務(wù)器的資料說(shuō)明,在“數(shù)據(jù)項(xiàng)”輸入框內(nèi)手工填寫(xiě)。選擇“數(shù)據(jù)類型”和“讀寫(xiě)權(quán)限”,在“訪問(wèn)路徑”中輸入數(shù)據(jù)的訪問(wèn)路徑(這一項(xiàng)不是必需的,需要填寫(xiě)的,可以參考所使用的OPC服務(wù)器的手冊(cè)),這里不用填寫(xiě)。

  最后單擊“確定”按鈕,就生成了一個(gè)數(shù)據(jù)項(xiàng)的數(shù)據(jù)連接,如圖3所示,從而實(shí)現(xiàn)了與現(xiàn)場(chǎng)實(shí)際信息的連接。

 


圖3 力控?cái)?shù)據(jù)連接結(jié)果

 

  在系統(tǒng)運(yùn)行時(shí),力控和服務(wù)器建立連接,自動(dòng)完成和OPC服務(wù)器之間的數(shù)據(jù)交換。

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

  本文設(shè)計(jì)的OPC數(shù)據(jù)訪問(wèn)服務(wù)器符合OPC規(guī)范,實(shí)現(xiàn)了對(duì)數(shù)據(jù)的實(shí)時(shí)讀寫(xiě),具有實(shí)用價(jià)值??傊辛薕PC規(guī)范,控制系統(tǒng)軟件可以高效、穩(wěn)定地對(duì)硬件設(shè)備進(jìn)行數(shù)據(jù)存取, 系統(tǒng)應(yīng)用軟件之間也可以靈活地進(jìn)行信息交互,極大地提高了控制系統(tǒng)的互操作性和適應(yīng)性。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。