利用OPC實現(xiàn)VC應用程序與PLC的數(shù)據(jù)交換_第1頁
利用OPC實現(xiàn)VC應用程序與PLC的數(shù)據(jù)交換_第2頁
利用OPC實現(xiàn)VC應用程序與PLC的數(shù)據(jù)交換_第3頁
利用OPC實現(xiàn)VC應用程序與PLC的數(shù)據(jù)交換_第4頁
全文預覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、利用OPC實現(xiàn)VC應用程序與PLC的數(shù)據(jù)交換關(guān)鍵詞: OPC   RSView32   VC應用程序   可編程控制器1  引言VC(Visual C+)是功能強大的一種Windows應用程序可視化軟件開發(fā)工具。VC支持面向?qū)ο蟮脑O(shè)計方法,并可以使用功能強大的微軟基礎(chǔ)類庫MFC(Micro-soft foundation class)。并且由于Microsoft公司在操作市場上的壟斷地位,用VC開發(fā)出來的軟件穩(wěn)定性好、可移植性強,而且軟件與硬件相

2、互獨立,可以用來開發(fā)控制系統(tǒng)的上層管理系統(tǒng)。RSView32是作為一種專門用于工業(yè)控制的組態(tài)軟件,不僅包含了大量圖形開發(fā)工具和現(xiàn)成圖形庫,使用戶能夠方便的進行系統(tǒng)開發(fā),而且還可以對報警、活動記錄、事件、歷史趨勢等進行組態(tài),是一個功能強大的工業(yè)自動化產(chǎn)品,因此可以很方便地對下層設(shè)備進行組態(tài)。在實際系統(tǒng)開發(fā)時,利用OPC技術(shù)把兩種工具有效的結(jié)合起來,使上層的VC程序通過RSView32間接地與下層PLC進行數(shù)據(jù)通信,以獲取令人滿意的結(jié)果。2  OPC介紹OPC(OLE for Process Control)是根據(jù)Microsoft的OLE(現(xiàn)在A

3、ctive)、COM(部件對象模型)和DCOM(分布式部件對象模型)技術(shù)所要求的功能制定的一個開放和互用式的用戶界面標準,它保證了自動化/控制應用程序和區(qū)域系統(tǒng)/設(shè)備之間的互用。它以O(shè)LE/COM機制作為應用程序級的通訊標準,采用CLIENT/SERVER模式,典型的OPC體系結(jié)構(gòu)如圖1所示:                        圖1 &

4、#160;   典型的OPC體系結(jié)構(gòu)OPC規(guī)范中提供了兩套接口方案,即定制接口和自動化接口。定制接口效率高,通過該接口能夠發(fā)揮OPC服務器的最佳性能,采用C+語言的客戶一般采用定制接口方案;自動化接口使解釋性語言和宏語言訪問OPC服務器成為可能,采用VB等語言的客戶一般采用自動化接口。OPC數(shù)據(jù)存取服務器由三類對象組成:服務器(Server)、組(Group)、數(shù)據(jù)項(Item)。服務器對象用于指出特定的OPC服務器應用程序名,并作為組對象的容器;組對象存儲由若干Item組成的Group信息并邏輯組織數(shù)據(jù)項;數(shù)據(jù)項對象()存儲具體的Item的定義、數(shù)據(jù)值、狀態(tài)值等

5、信息,一個Item就代表一個具體的過程變量。OPC客戶應用程序要獲取OPC服務器的數(shù)據(jù),必須事先指定服務器應用程序所在的計算機名(服務器應用程序和客戶應用程序不在同一臺PC上)、OPC數(shù)據(jù)訪問服務器名和該服務器提供的OPC項的定義。建立OPC連接后,客戶應用程序一般可以通過三種方式從OPC服務器讀取數(shù)據(jù):使用同步接口IOPC-SyncIO,簡單有效,適合于只讀取少量數(shù)據(jù)的客戶程序;使用接口IOPCCallback的“訂閱”的功能OnChange,每當數(shù)據(jù)有變化時,服務器自動通知客戶;使用異步接口IOPCASyncIO2,可以直接與物理設(shè)備通訊,速度慢但數(shù)據(jù)精確度高。3  R

6、SView32作為OPC服務器西門子專門用于工業(yè)控制的通用組態(tài)軟件之一RSView32支持OPC技術(shù),它可以用作一個OPC客戶和外部OPC服務器軟件通信,也可以作為一個OPC服務器和其它第三方支持OPC技術(shù)的軟件進行連接。本文中RSView32作為服務器,VC應用程序作為客戶端,采用C/S模式實現(xiàn)兩者之間的數(shù)據(jù)交換。3.1  使RSView32作為OPC服務器 用下列方法之一使RSView32作為OPC服務器: (1) 選擇“啟動”編輯器里“啟動”頁上的“OPC/DDE服務器”復選框; (2) 發(fā)出RTDataServerO

7、n命令(從命令行或另一個RSView32組件里,使用RTDataServerOff命令可以取消此功能),這將允許其它應用程序讀取數(shù)值但不能改變它; (3) 發(fā)出RTDataWriteEnable命令(從命令行或另一個RSView32組件里,使用RTDataWriteDisable命令可以取消此功能),這允許從外部OPC應用程序?qū)懭?,以改變RSView32的標記值。3.2  建立 OPC 客戶項目 VC應用程序要從RSView32取得數(shù)據(jù),必須使用下列信息:  服務器:RSI.RSView32OPCTagS

8、erver;  類型:本機/遠程;  服務器計算機名或地址:如果客戶和服務器在同一計算機上,這項可以是空白。  訪問路徑:項目名;  更新速率:一個以秒為單位的速率;  條目:標記名。可以通過查看RSView32的標簽數(shù)據(jù)庫獲得。4  VC應用程序作為OPC客戶端的程序?qū)崿F(xiàn)在VC環(huán)境中使用定制接口開發(fā)OPC客戶應用程序,下面是程序?qū)崿F(xiàn)的關(guān)鍵步驟。4.1  包含OPC頭文件 開發(fā)OPC客戶應用程序,除了需要OPC接口外,還需要在程序中包含OPC標準

9、庫文件,可以從OPC基金會網(wǎng)站(網(wǎng)址:)下載這些文件:#include "opcda_i.c"    OPC數(shù)據(jù)存取接口#include "opcda.h"      OPC數(shù)據(jù)存取2.0頭文件#include "opccomn_i.c"  OPC公共接口定義#include "opccomn.h" 

10、60;  OPC公共頭文件4.2  初始化COM支持庫由于OPC是基于COM技術(shù)制定,所以在使用接口類之前必須首先使用CoInitialize(NULL)函數(shù)初始化COM庫,如果成功,函數(shù)返回值等于S_ OK。4.3  連接opc服務器OPC客戶能夠連接到OPC服務器上,并建立OPC組和OPC數(shù)據(jù)項,這是OPC數(shù)據(jù)訪問的基礎(chǔ),如果沒有這個機制,數(shù)據(jù)訪問的其它機能不可能實現(xiàn)。連接OPC服務器,OPC客戶需要事先指定計算機名(如果OPC服務器和OPC客戶不在同一臺計算機上)和OPC數(shù)據(jù)訪問服務器名(RSI.RSView32OPC

11、TagServer)。實現(xiàn)代碼如下:                        ConnectToServer(/*in */LPOLESTR ProgID,/*in*/ BOOL            &

12、#160;            IsRemote,/*out */ IUnknown *ppUnknown)                            &#

13、160;                   CLSID OPCCLSID;                        HRESULT hRet=

14、CLSIDFromProgID(ProgID,&OPCCLSID);                        /將字符串ProgID轉(zhuǎn)換為唯一OPCCLSID               

15、0;        if(IsRemote)                        /opc服務器和opc客戶不在同一臺計算機上            

16、                                       COSERVERINFO ServerInfo;      &

17、#160;                 memset(&ServerInfo,0,sizeof(ServerInfo);                        Serve

18、rInfo.pwszName=T2OLE("ServerComouter");                        MULTI_QI qi1;               

19、;         memset(qi, 0, sizeof(qi);                        qi0.pIID=&IID_IUnknown;      

20、60;                 HRESULT                         hRet=CoCreateInstanceEx(OPCCLSID,NULL,

21、CLSCTX_REMOTE_SERVER,                        &ServerInfo,1,qi);                   

22、;     *ppUnknown=qi0.pItf;                                         

23、60;       else                        /opc服務器和opc客戶在同一臺計算機上              &#

24、160;                                 hRet=CoCreateInstance(OPCCLSID,NULL,CLSCTX_LOCAL_SERVER,IID_IUnknown,     

25、;                   (void *)ppUnknown);                           

26、;                      4.4  創(chuàng)建OPC組IOPCServer接口的AddGroup()方法可以創(chuàng)建一個有指定名稱和屬性的OPC組。在調(diào)用該方法之前,可以使用上一步得到的Iunknown接口指針,通過QueryInterface()方法請求IOPCServer接口指針。代碼如下:    

27、60;                                              ppUnknown->QueryIn

28、terface(IID_IOPCServer,(void                         *)&pServer);                 

29、0;      /得到IOPCServer接口指針                        pServer->AddGroup(L"",TRUE,500,1235,&lTimeBias,&fTemp,0,&hOPCServerGroup,

30、60;                         &dwActualRate,IID_IOPCItemMgt,& pOPCItemMgt);4.5  添加數(shù)據(jù)項IOPCItemMgt接口的AddItem()方法可以添加具有特殊屬性的指定數(shù)量的數(shù)據(jù)項。pOPCItemMgt->AddItems

31、(ItemNumber,ItemArray,(OPCITEMRESULT*)&pItemResult,(HRESULT *)&pErrors);ItemArray為OPCITEMDEF類型結(jié)構(gòu)數(shù)組,它包含數(shù)據(jù)項的詳細信息,客戶需要知道要進行交換的數(shù)據(jù)在RSView32標簽數(shù)據(jù)庫中的名稱、數(shù)據(jù)類型及作為OPC服務器的RSView32項目名稱。添加數(shù)據(jù)項之前,要用這些數(shù)據(jù)項信息對ItemArray結(jié)構(gòu)數(shù)組進行初始化。4.6  數(shù)據(jù)交換成功地增加完所需要的數(shù)據(jù)項后,OPC客戶(VC應用程序)和OPC服務器(RSView32)就可以進行數(shù)據(jù)交換了。在數(shù)據(jù)量

32、不大的情況下,可以使用IOPCSyncIO同步接口的Write()和Read()兩個方法進行數(shù)據(jù)的讀寫操作,從而實現(xiàn)OPC客戶(VC應用程序)和OPC服務器(RSView32)之間的數(shù)據(jù)交換。代碼如下:                        ppUnknown->QueryInterface(IID_IOPCSyncIO,(void                         *)&pOPCSync);                     

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論