一、OPC通信

   OPC——OLE for Process Contrl,微軟公司對(duì)象鏈接和嵌入技術(shù)在過程控制方面的應(yīng)用,是一系列接口、方法和屬性的標(biāo)準(zhǔn)集。它基于OLE、COM、DCOM技術(shù)、XML,采用客戶端/服務(wù)器(Client/Server)結(jié)構(gòu),將通訊協(xié)議與設(shè)備/應(yīng)用隔離的技術(shù)。微軟的OLE、COM定義了各種不同的軟件如何交互使用和分享數(shù)據(jù),從而使得OPC能夠提供通用的接口規(guī)范,用于各種過程控制設(shè)備之間的通訊,不論過程中采用何種應(yīng)用軟件和硬件設(shè)備。

OLE——Object Linking & Embeding,對(duì)象鏈接與嵌入,也就是現(xiàn)在的微軟的ActiveX。


   現(xiàn)在市場(chǎng)上的數(shù)據(jù)源有很多種形式:PLC、DCS、數(shù)據(jù)庫、Scale 、RTU等等。數(shù)據(jù)也可以通過多種媒介傳輸,如以太網(wǎng)、無限通訊、串口通訊等。過程應(yīng)用所依賴的操作系統(tǒng)也可以不同:Unix、Windows。

   過去,設(shè)備供應(yīng)商提供自己的驅(qū)動(dòng)程序來獲取數(shù)據(jù)。但這樣以來,供應(yīng)商就以一種專權(quán)享有的方式儲(chǔ)存下來。當(dāng)用戶每次需要對(duì)系統(tǒng)進(jìn)行改進(jìn)或擴(kuò)張時(shí),用戶就必須和同一家設(shè)備供應(yīng)商聯(lián)系。從另一個(gè)角度來看,在傳統(tǒng)的控制系統(tǒng)中,智能設(shè)備之間及智能設(shè)備與控制系統(tǒng)軟件之間的信息共享是通過驅(qū)動(dòng)程序來實(shí)現(xiàn)的。不同廠家的設(shè)備使用不同的驅(qū)動(dòng)程序,致使工業(yè)控制軟件中包含越來越多的底層通訊模塊。另外,由于相對(duì)特定應(yīng)用的驅(qū)動(dòng)程序一般不支持硬件特點(diǎn)的變化,這樣,使得工業(yè)控制軟、硬件的的升級(jí)和維護(hù)都極為不便。還有,在同一個(gè)時(shí)刻,兩個(gè)客戶應(yīng)用一般不能對(duì)同一個(gè)設(shè)備進(jìn)行讀寫,因?yàn)樗麄儞碛胁煌?、相互?dú)立的驅(qū)動(dòng)程序。同時(shí)對(duì)同一個(gè)設(shè)備進(jìn)行操作,可能會(huì)導(dǎo)致沖突甚至系統(tǒng)崩潰。

   OPC技術(shù)的出現(xiàn)很好的解決了這些問題。OPC技術(shù)的出現(xiàn)解決了這種客戶相對(duì)被動(dòng)的局面,因?yàn)樗且环N技術(shù)平臺(tái)。不論客戶端是誰,不論客戶端使用哪種工程控制軟件,只要它理解OPC語言,都可以順暢無阻的從設(shè)備中取得數(shù)據(jù)。

   作為有20年基礎(chǔ)的強(qiáng)大技術(shù)平臺(tái),OPC擁有一整套包括接口、屬性和方法的標(biāo)準(zhǔn)集。從而提供給用戶用于過程控制和工業(yè)自動(dòng)化應(yīng)用。舉個(gè)例子來說明,在一個(gè)龐大的數(shù)據(jù)共享網(wǎng)絡(luò)中,OPC扮演什么樣的角色。一個(gè)跨國(guó)公司中有來自各個(gè)國(guó)家的人,說不同的母語,但他們卻能很好的交流,這就是英語作為交流平臺(tái)的作用。同樣,OPC就扮演這樣一個(gè)數(shù)據(jù)傳譯器的作用。


1.傳統(tǒng)技術(shù)與OPC技術(shù)

1.1傳統(tǒng)的過程控制系統(tǒng)結(jié)構(gòu)

傳統(tǒng)的過程控制系統(tǒng)是一對(duì)一的系統(tǒng),任何一種HMI等上位監(jiān)控軟件或其它應(yīng)用軟件,在使用某種硬件設(shè)備時(shí)都需要開發(fā)專用的驅(qū)動(dòng)程序。

  

系統(tǒng)構(gòu)建完成后的最終結(jié)果是:

?  1種軟件要使用N類硬件設(shè)備需要開發(fā)N個(gè)驅(qū)動(dòng)程序;

?  M類軟件要使用N類硬件設(shè)備需要開發(fā)M*N個(gè)驅(qū)動(dòng)程序;

?  每增加1個(gè)新的應(yīng)用軟件需要另外開發(fā)N個(gè)硬件設(shè)備的驅(qū)動(dòng)程序;

?  每增加1個(gè)新的硬件設(shè)備需要為M個(gè)軟件開發(fā)新的設(shè)備驅(qū)動(dòng)程序。

在上圖所示的例子中,針對(duì)4種控制設(shè)備所完成的3個(gè)應(yīng)用系統(tǒng)一共需要開發(fā)3*4=12種驅(qū)動(dòng)程序。新增應(yīng)用軟件或者硬件設(shè)備帶來的只會(huì)是驅(qū)動(dòng)程序種類的迅速增長(zhǎng)。


1.2基于OPC技術(shù)的過程控制系統(tǒng)結(jié)構(gòu)

基于OPC技術(shù)的過程控制系統(tǒng)則可以完美地解決傳統(tǒng)方式種的上述問題。

任何一種設(shè)備只需要提供一種驅(qū)動(dòng)就可以供任何軟件系統(tǒng)使用,系統(tǒng)構(gòu)建完成后的最終結(jié)果是:

?  M類軟件要使用N類硬件設(shè)備只需要開發(fā)N個(gè)驅(qū)動(dòng)。

?  每增加1個(gè)新的應(yīng)用軟件不需要另外開發(fā)硬件設(shè)備的驅(qū)動(dòng)程序;

?  每增加1個(gè)新的硬件設(shè)備只需要為開發(fā)1個(gè)新設(shè)備的驅(qū)動(dòng)程序;

在上圖所示的例子中,針對(duì)4種控制設(shè)備所完成的3個(gè)應(yīng)用系統(tǒng)一共僅需要開發(fā)4種驅(qū)動(dòng)程序。新增應(yīng)用軟件或者硬件設(shè)備可以輕松的擴(kuò)展您的系統(tǒng)。



二、應(yīng)用案例介紹

某項(xiàng)目三個(gè)不同的數(shù)據(jù)源:PLC、震動(dòng)觀測(cè)系統(tǒng)、計(jì)算引擎

傳送數(shù)據(jù)到三個(gè)不同的應(yīng)用程序。

基本要求:硬件工作負(fù)荷最小化、軟件應(yīng)用成本最小化、軟件購置成本最小化。

沒有OPC技術(shù)的傳統(tǒng)解決方案:

   讓每一個(gè)控制應(yīng)用程序和通過中間特制驅(qū)動(dòng)或接口(如RDI)從不同數(shù)據(jù)源中提取所需數(shù)據(jù)。舉例來說,Wonderware公司的InTouch人機(jī)界面是用于可視化工業(yè)過程控制的軟件,它需要一個(gè)IO驅(qū)動(dòng),用安全通訊協(xié)議TSAA交流;另一個(gè)驅(qū)動(dòng)通過Modbus通訊協(xié)議從BNC振動(dòng)源中讀取數(shù)據(jù);還需要一個(gè)驅(qū)動(dòng)和Excell電子表格動(dòng)態(tài)交換。這樣以來,每一個(gè)應(yīng)用程序和每一個(gè)數(shù)據(jù)出處都需要一個(gè)中間驅(qū)動(dòng)或者接口。一共需要9個(gè)這樣的接口才能滿足客戶要求,財(cái)力、人力耗費(fèi)較大。當(dāng)以后需要更多的數(shù)據(jù)源或更多的應(yīng)用程序時(shí),將更為麻煩。從技術(shù)角度說,如果兩個(gè)應(yīng)用程序恰好對(duì)同一個(gè)設(shè)備進(jìn)行了訪問或操作,它們相互獨(dú)立的驅(qū)動(dòng)程序可能會(huì)引起訪問上的沖突,從而導(dǎo)致系統(tǒng)出問題。此方案保守估計(jì):10天 5萬美元。


應(yīng)用OPC技術(shù)的解決方案:

   提供3個(gè)OPC服務(wù)器,分別給Triconex PLC,BNC振動(dòng)源和Excell電子表格。這些服務(wù)器是Matrikon公司已經(jīng)開發(fā)好的,針對(duì)不同協(xié)議的數(shù)據(jù)接口,不需要投入開發(fā)費(fèi)用、時(shí)間。作為客戶端的三個(gè)應(yīng)用軟件業(yè)都是支持OPC接口的。這樣以來,OPC服務(wù)器和應(yīng)用軟件之間實(shí)行OPC實(shí)時(shí)數(shù)據(jù)通訊。當(dāng)OPC服務(wù)器接收到來自3個(gè)不同應(yīng)用程序?qū)ν粋€(gè)數(shù)據(jù)點(diǎn)的訪問要求時(shí),數(shù)據(jù)源只需傳輸該數(shù)據(jù)一次到相應(yīng)的OPC服務(wù)器便可滿足應(yīng)用軟件的要求。相比原來的數(shù)據(jù)傳輸量來說,OPC技術(shù)大大減少了對(duì)數(shù)據(jù)源也就是硬件設(shè)備的負(fù)擔(dān),從而延長(zhǎng)了它們的壽命。此方案:2天,1萬美元

快:因?yàn)閼?yīng)用OPC服務(wù)器即用即拿,即插即用。省:因?yàn)殚_發(fā)的人力物力已經(jīng)完成,所需OPC服務(wù)器數(shù)量不會(huì)太多。

這個(gè)案例中,所有的OPC服務(wù)器可以安裝在一臺(tái)PC機(jī)上進(jìn)行操作,彼此互相獨(dú)立。且OPC服務(wù)器并不占用處理器的很多時(shí)間和容量。但霍尼韋爾的PHD數(shù)據(jù)庫必須單獨(dú)安裝在另外一臺(tái)PC機(jī)上,這是因?yàn)榛裟犴f爾要求在安裝它的數(shù)據(jù)庫的機(jī)器上不要安裝其他的服務(wù)器和軟件。

   OPC技術(shù)的廣泛應(yīng)用還在于它非常好的延展性。比如說,隨著客戶業(yè)務(wù)量的增大,客戶希望擴(kuò)大系統(tǒng)規(guī)模,那么客戶所需要做的就是將原有的硬件設(shè)置不斷復(fù)制。雖然連接的硬件設(shè)備可能不同,但是從硬件設(shè)計(jì)的角度講,客戶已經(jīng)節(jié)省了很多時(shí)間和成本。


三、OPC服務(wù)器

在OPC結(jié)構(gòu)中,OPC服務(wù)器扮演十分重要的角色,其所兼容的設(shè)備分類有:

-硬件設(shè)備:DCS,PLC,掃描儀,電子設(shè)備…

-應(yīng)用軟件:HMI,歷史數(shù)據(jù)庫,震動(dòng)檢測(cè)器…

-通訊協(xié)議:DDE,Modbus,ODBC,GenCS…

-操作系統(tǒng):Windows,UNIX,VMS,Macintosh,嵌入式OS…

   即OPC服務(wù)器可以從上面任何一種形式的數(shù)據(jù)產(chǎn)生實(shí)體中讀取數(shù)據(jù)。這個(gè)實(shí)體可以是霍尼韋爾PHD的Application,也可以是Modbus的通訊協(xié)議,還可以是一種PLC,也就是一種Device(硬件設(shè)備),或者是一種Platform.


常用的OPC服務(wù)器

1. Matrikon公司的OPCServer Simulator


   簡(jiǎn)單,單文件注冊(cè)后,各種數(shù)據(jù)類型,各種點(diǎn)類型(只讀點(diǎn),只寫點(diǎn),讀寫點(diǎn))都有了,更好的一點(diǎn)是,如果想做大規(guī)模的測(cè)試,10萬點(diǎn),那么只需要在它的Random下添加任意名稱即可,OPCServer會(huì)自動(dòng)給你建出對(duì)應(yīng)的測(cè)點(diǎn),還是隨機(jī)數(shù)變化。

1.1配置時(shí)的幾個(gè)關(guān)鍵概念

   Alias Group(Group) ——對(duì)Items的分類管理,自定義的。類似于Java中的包。

   Alias (Item) ——一個(gè)Item代表與服務(wù)器進(jìn)行通信的PLC或其它硬件設(shè)備上的一個(gè)地址。與Kepware中的一樣。

配置順序如下(在Alias Configuration下):

New AliasGroup/Alias --> Inset Alias


2.Kepware公司的OPCServer

   一個(gè)商業(yè)軟件,需要花費(fèi)金錢購買License的,但Kepware公司的OPCServer需要花錢的不是OPCServer本身,而是采集驅(qū)動(dòng)。不過Kepware公司的OPCServer提供了不花錢的仿真驅(qū)動(dòng),用來測(cè)試上非常好的。

   缺點(diǎn)就是太龐大,不簡(jiǎn)單,學(xué)習(xí)成本較高。但為了能滿足OPC這類產(chǎn)品的各種測(cè)試,它真的是最佳選擇??梢匀ニ墓俜骄W(wǎng)站下載。

2.1配置時(shí)的幾個(gè)關(guān)鍵概念

   Chanel——通道是一個(gè)從PC到一個(gè)或多個(gè)外部設(shè)備之間的傳播媒介。一個(gè)通道可以用來代表一個(gè)串行端口(一個(gè)安裝在個(gè)人電腦上的卡或是以太網(wǎng)接口)。

Device——設(shè)備代表了與服務(wù)器進(jìn)行通信的PLC或其他硬件。它受限于Channel所選擇的設(shè)備驅(qū)動(dòng)程序(Device driver)。

Group——對(duì)tags的分類管理,自定義的。類似于Java中的包。

   Tag——一個(gè)Tag代表與服務(wù)器進(jìn)行通信的PLC或其它硬件設(shè)備上的一個(gè)地址。服務(wù)器允許動(dòng)態(tài)標(biāo)簽(客戶端自定義創(chuàng)建)和用戶定義的靜態(tài)標(biāo)簽(服務(wù)端管理人員創(chuàng)建的標(biāo)簽)。動(dòng)態(tài)標(biāo)簽是直接進(jìn)入了OPC客戶端和指定設(shè)備存取數(shù)據(jù)。靜態(tài)標(biāo)簽在服務(wù)器被創(chuàng)建的且支持標(biāo)簽擴(kuò)展,他們可以從OPC客戶瀏覽,支持標(biāo)簽瀏覽。

配置順序如下:

New Channel -->New Device --> New Group/Tag --> New Tag


四、OPC客戶端

OPC客戶端同樣扮演重要的角色,是用來從OPC服務(wù)器獲取數(shù)據(jù)的軟件程序

單向地向OPC服務(wù)器發(fā)出請(qǐng)求,服務(wù)器響應(yīng)。

對(duì)OPC而言,最簡(jiǎn)單的應(yīng)用:人機(jī)界面HMI可以看作是連接到OPC服務(wù)器的客戶端應(yīng)用。


常用的OPC客戶端

1 Matrikon公司的OPCClient

   標(biāo)準(zhǔn),穩(wěn)定,單文件,通訊過程的信息還比較豐富。缺點(diǎn)就是大了點(diǎn),2M多。

2 Kepware公司的OPCClient

   功能很強(qiáng)大,標(biāo)準(zhǔn),穩(wěn)定,日志信息很豐富,最推薦的功能是支持對(duì)OPCServer中點(diǎn)名的條件過濾,支持點(diǎn)表的導(dǎo)入導(dǎo)出,支持自動(dòng)導(dǎo)入OPCServer的所有點(diǎn),根據(jù)點(diǎn)表識(shí)別好點(diǎn)壞點(diǎn),按照列排序,用它可以彌補(bǔ)很多國(guó)產(chǎn)組態(tài)軟件不能在線遍歷OPCServer點(diǎn)表的功能、不能過濾OPCServer點(diǎn)的功能、不能識(shí)別OPCServer中好點(diǎn)壞點(diǎn)的功能等。缺點(diǎn)就是非單文件。


工作原理:


詳細(xì)原理圖:

OPC Client和OPC Server配置的安全策略

下表是對(duì) OPC Client 和 OPC Server 所在操作系統(tǒng)之間的安全策略的配置對(duì)應(yīng)說明:


五. Java實(shí)現(xiàn)OPC客戶端

有兩種開源包,分別是JeasyOpc和utgard(Openscada),他們的區(qū)別如下:

   經(jīng)對(duì)比分析,我們采用Utgard(Openscada)開源技術(shù),Openscada可以很好的實(shí)現(xiàn)與OPC服務(wù)器的鏈接及讀寫數(shù)據(jù)等功能,還可以隨時(shí)獲取和修改OPC的Server和Item的屬性狀態(tài)信息。所以它能夠很好的滿足我們的需求,建議使用Openscada。

5.1 Openscada鏈接配置方法

   OPC數(shù)據(jù)存取服務(wù)器由三個(gè)對(duì)象組成:服務(wù)器對(duì)象(Server)、組對(duì)象(Group)和項(xiàng)對(duì)象(Item)。

按說明配置好OPC Server  與 OPC Client 所在電腦的組件服務(wù)配置和防火墻設(shè)置(windows7直接關(guān)閉就行了)注意一定要把本機(jī)希望鏈接OPC服務(wù)的用戶或用戶組添加到DCOM配置列表中,否則鏈接會(huì)失敗。

如果其他都配置好了,運(yùn)行程序還是連接不上的話,首先常看防火墻是否配置(或關(guān)閉)。

OPC對(duì)象——服務(wù)器(OPC  Server)、組(OPC  Group)、項(xiàng)(OPC  Item)。

Openscada開源項(xiàng)目:

  ConnectionInformation中:

    Host——本地主機(jī)/網(wǎng)絡(luò)主機(jī)IP (示例:localhost(默認(rèn))、127.0.0.1)

    Domain——域(默認(rèn)為localhost)

    User——用戶名

    Password——用戶登錄密碼

    Clsid——應(yīng)用在注冊(cè)表中相對(duì)應(yīng)的CLSID值

    Grogid——應(yīng)用在注冊(cè)表中對(duì)應(yīng)的程序名稱

    【Clsid 和 Grogid 作用相同,只要設(shè)置一個(gè)就可以了,如果兩個(gè)都設(shè)置了,程序會(huì)優(yōu)先選擇Clsid。我們建議使用Clsid,因?yàn)槭褂肎rogid時(shí),Openscada的內(nèi)部處理還是會(huì)通過JISystem.getClsidFromProgId( progId )方法將其轉(zhuǎn)換為Clsid,并且還需要進(jìn)行服務(wù)器上用戶的權(quán)限的高級(jí)配置才可以使用。查找Clsid和Grogid的方法:打開注冊(cè)表(regedit)—》在HKEY_CLASSES_ROOT下找到相應(yīng)的OPC服務(wù)器名稱,該名稱就是Grogid,在其目錄下的CLSID的值(右邊區(qū)域)就是Clsid】

5.2 Openscada遠(yuǎn)程鏈接時(shí)常見的問題及解決方法

(1)org.jinterop.dcom.common.JIException: Message not found for errorCode:0xC0000034

原因:未啟動(dòng)RemoteRegistry和Windows Management Instrumentation服務(wù)。

解決方法:打開控制面板,點(diǎn)擊【管理工具】—>>【服務(wù)】,啟動(dòng)RemoteRegistry和Windows ManagementInstrumentation服務(wù)。

 

(2)org.jinterop.dcom.common.JIException:Access is denied, please check whether the [domain-username-password] arecorrect. Also, if not already done please check the GETTING STARTED and FAQsections in readme.htm. They provide information on how to correctly configurethe Windows machine for DCOM access, so as to avoid such exceptions.  [0x00000005]

原因:首先檢查錯(cuò)誤提示的配置信息是否有誤,如果都正確,則原因可能是你訪問的當(dāng)前用戶沒有該訪問權(quán)限。

解決方法:

1、打開注冊(cè)列表,

選擇HKEY_CLASSES_ROOT\CLSID\{76A64158-CB41-11D1-8B02-00600806D9B6}

2、右鍵點(diǎn)擊[權(quán)限]>>【高級(jí)】>>[所有者]>>添加opc用戶到權(quán)限項(xiàng)目中,點(diǎn)擊應(yīng)用,確定。