關 閉

新聞中心

EEPW首頁 > 工控自動化 > 設計應用 > OPC服務器的研究及其在CAN總線系統(tǒng)中的實現(xiàn)

OPC服務器的研究及其在CAN總線系統(tǒng)中的實現(xiàn)

作者: 時間:2009-09-29 來源:網絡 收藏

1技術簡介

本文引用地址:http://butianyuan.cn/article/163548.htm

  1.1什么是

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

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

  1.2OPC的意義

  在傳統(tǒng)的控制中,針對同一個硬件設備,每個應用軟件都要根據自己的需求開發(fā)一套硬件驅動程序。這不僅加大了開發(fā)和維護費用,而且?guī)砹嗽L問沖突問題。

  OPC技術將各個硬件設備驅動程序和通訊程序封裝成獨立的OPC,上層應用軟件(作為OPC客戶端)可以不關心硬件的性能特點,而通過標準的OPC接口訪問OPC。

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

  1.3OPC對象與接口

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

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

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

  注意,OPC項并不是OPC客戶直接操作的對象,因為OPC項沒有定義外部接口,對象的所有操作都是通過包容該項的組對象進行的。

2OPC數(shù)據訪問服務器的結構及設計步驟

  2.1OPC數(shù)據訪問服務器的結構


圖1OPC數(shù)據訪問服務器的結構

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

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

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

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

  OPC項則與現(xiàn)場設備中的模塊相對應,它包含數(shù)據項的值(value)、品質(quality)和時間戳(timestamp)。

  I/ODLL是針對具體硬件設備開發(fā)的驅動程序,實現(xiàn)從現(xiàn)場設備讀取數(shù)據的功能。

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

  2.2.1獲得并注冊OPC標準組件

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

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

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

  2.2.2編寫OPC服務器代碼

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

  ⑴全局唯一標識符(GUID)

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

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

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

  有兩種途徑來獲得GUID:

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

 ?、诶肅OM庫提供的API函數(shù)來產生GUID:

  HRESULTCoCreateGuid(GUID*pguid)

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

  


上一頁 1 2 下一頁

評論


相關推薦

技術專區(qū)

關閉