《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 設(shè)計應(yīng)用 > 利用OPC實現(xiàn)VC應(yīng)用程序與PLC的數(shù)據(jù)交換
利用OPC實現(xiàn)VC應(yīng)用程序與PLC的數(shù)據(jù)交換
摘要: VC(Visual C++)是功能強大的一種Windows應(yīng)用程序可視化軟件開發(fā)工具。VC支持面向?qū)ο蟮脑O(shè)計方法,并可以使用功能強大的微軟基礎(chǔ)類庫MFC(Micro - soft foundation class)。并且由于Microsoft公司在操作市場上的壟斷地位,用VC開發(fā)出來的軟件穩(wěn)定性好、可移植性強,而且軟件與硬件相互獨立[1],可以用來開發(fā)控制系統(tǒng)的上層管理系統(tǒng)。RSView32是作為一種專門用于工業(yè)控制的組態(tài)軟件,不僅包含了大量圖形開發(fā)工具和現(xiàn)成圖形庫,使用戶能夠方便的進行系統(tǒng)開發(fā),而且還可以對報警、活動記錄、事件、歷史趨勢等進行組態(tài),是一個功能強大的工業(yè)自動化產(chǎn)品[2],因此可以很方便地對下層設(shè)備進行組態(tài)。在實際系統(tǒng)開發(fā)時,利用OPC技術(shù)把兩種工具有效的結(jié)合起來,使上層的VC程序通過RSView32間接地與下層PLC進行數(shù)據(jù)通信,以獲取令人滿意的結(jié)果。
Abstract:
Key words :

1  引言
VC(Visual  C++)是功能強大的一種Windows應(yīng)用程序可視化軟件開發(fā)工具。VC支持面向?qū)ο蟮脑O(shè)計方法,并可以使用功能強大的微軟基礎(chǔ)類庫MFC(Micro - soft foundation class)。并且由于Microsoft公司在操作市場上的壟斷地位,用VC開發(fā)出來的軟件穩(wěn)定性好、可移植性強,而且軟件與硬件相互獨立[1],可以用來開發(fā)控制系統(tǒng)的上層管理系統(tǒng)。RSView32是作為一種專門用于工業(yè)控制的組態(tài)軟件,不僅包含了大量圖形開發(fā)工具和現(xiàn)成圖形庫,使用戶能夠方便的進行系統(tǒng)開發(fā),而且還可以對報警、活動記錄、事件、歷史趨勢等進行組態(tài),是一個功能強大的工業(yè)自動化產(chǎn)品[2],因此可以很方便地對下層設(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)在Active)、COM(部件對象模型)和DCOM(分布式部件對象模型)技術(shù)所要求的功能制定的一個開放和互用式的用戶界面標(biāo)準(zhǔn),它保證了自動化/控制應(yīng)用程序和區(qū)域系統(tǒng)/設(shè)備之間的互用。它以O(shè)LE/COM機制作為應(yīng)用程序級的通訊標(biāo)準(zhǔn),采用 CLIENT/SERVER模式,典型的OPC體系結(jié)構(gòu)如圖1所示:

 

 

圖1     典型的OPC體系結(jié)構(gòu)
OPC規(guī)范中提供了兩套接口方案,即定制接口和自動化接口。定制接口效率高,通過該接口能夠發(fā)揮OPC服務(wù)器的最佳性能,采用C++語言的客戶一般采用定制接口方案;自動化接口使解釋性語言和宏語言訪問OPC服務(wù)器成為可能,采用VB等語言的客戶一般采用自動化接口。
OPC 數(shù)據(jù)存取服務(wù)器由三類對象組成:服務(wù)器(Server)、組(Group)、數(shù)據(jù)項(Item)。服務(wù)器對象用于指出特定的OPC服務(wù)器應(yīng)用程序名,并作為組對象的容器;組對象存儲由若干Item組成的Group信息并邏輯組織數(shù)據(jù)項;數(shù)據(jù)項對象()存儲具體的Item的定義、數(shù)據(jù)值、狀態(tài)值等信息,一個 Item就代表一個具體的過程變量。OPC客戶應(yīng)用程序要獲取OPC服務(wù)器的數(shù)據(jù),必須事先指定服務(wù)器應(yīng)用程序所在的計算機名(服務(wù)器應(yīng)用程序和客戶應(yīng)用程序不在同一臺PC上)、OPC數(shù)據(jù)訪問服務(wù)器名和該服務(wù)器提供的OPC項的定義。
建立OPC連接后,客戶應(yīng)用程序一般可以通過三種方式從OPC 服務(wù)器讀取數(shù)據(jù):使用同步接口IOPC- SyncIO,簡單有效,適合于只讀取少量數(shù)據(jù)的客戶程序;使用接口IOPCCallback的“訂閱”的功能OnChange,每當(dāng)數(shù)據(jù)有變化時,服務(wù)器自動通知客戶;使用異步接口IOPCASyncIO2,可以直接與物理設(shè)備通訊,速度慢但數(shù)據(jù)精確度高。

3  RSView32作為OPC服務(wù)器
西門子專門用于工業(yè)控制的通用組態(tài)軟件之一RSView32支持OPC技術(shù),它可以用作一個OPC客戶和外部OPC服務(wù)器軟件通信,也可以作為一個OPC服務(wù)器和其它第三方支持OPC技術(shù)的軟件進行連接。本文中RSView32作為服務(wù)器,VC應(yīng)用程序作為客戶端,采用C/S模式實現(xiàn)兩者之間的數(shù)據(jù)交換
3.1  使RSView32作為OPC服務(wù)器[4]
用下列方法之一使RSView32作為OPC服務(wù)器:
(1) 選擇“啟動”編輯器里“啟動”頁上的“OPC/DDE服務(wù)器”復(fù)選框;
(2) 發(fā)出RTDataServerOn命令(從命令行或另一個 RSView32組件里,使用RTDataServerOff命令可以取消此功能),這將允許其它應(yīng)用程序讀取數(shù)值但不能改變它;
(3) 發(fā)出RTDataWriteEnable命令(從命令行或另一個RSView32組件里,使用RTDataWriteDisable命令可以取消此功能),這允許從外部OPC應(yīng)用程序?qū)懭耄愿淖僐SView32的標(biāo)記值。
3.2  建立 OPC 客戶項目[4]
VC應(yīng)用程序要從RSView32取得數(shù)據(jù),必須使用下列信息:
服務(wù)器:RSI.RSView32OPCTagServer;
類型:本機/遠(yuǎn)程;
服務(wù)器計算機名或地址:如果客戶和服務(wù)器在同一計算機上,這項可以是空白。
訪問路徑:項目名;
更新速率:一個以秒為單位的速率;
條目:標(biāo)記名。可以通過查看RSView32的標(biāo)簽數(shù)據(jù)庫獲得。

4  VC應(yīng)用程序作為OPC客戶端的程序?qū)崿F(xiàn)
在VC環(huán)境中使用定制接口開發(fā)OPC客戶應(yīng)用程序,下面是程序?qū)崿F(xiàn)的關(guān)鍵步驟。
4.1  包含OPC頭文件
開發(fā)OPC客戶應(yīng)用程序,除了需要OPC接口外,還需要在程序中包含OPC標(biāo)準(zhǔn)庫文件,可以從OPC基金會網(wǎng)站(網(wǎng)址:www.opcfoundation.org)下載這些文件:
#include "opcda_i.c"    OPC數(shù)據(jù)存取接口
#include "opcda.h"      OPC數(shù)據(jù)存取2.0頭文件
#include "opccomn_i.c"  OPC公共接口定義
#include "opccomn.h"    OPC公共頭文件
4.2  初始化COM支持庫
由于OPC是基于COM技術(shù)制定,所以在使用接口類之前必須首先使用CoInitialize(NULL)函數(shù)初始化COM庫,如果成功,函數(shù)返回值等于S_ OK。
4.3  連接opc服務(wù)器
OPC 客戶能夠連接到OPC服務(wù)器上,并建立OPC組和OPC數(shù)據(jù)項,這是OPC數(shù)據(jù)訪問的基礎(chǔ),如果沒有這個機制,數(shù)據(jù)訪問的其它機能不可能實現(xiàn)[4]。連接 OPC服務(wù)器,OPC客戶需要事先指定計算機名(如果OPC服務(wù)器和OPC客戶不在同一臺計算機上)和OPC數(shù)據(jù)訪問服務(wù)器名 (RSI.RSView32OPCTagServer)。實現(xiàn)代碼如下:
ConnectToServer(/*in */LPOLESTR ProgID,/*in*/ BOOL IsRemote,/*out */ IUnknown **ppUnknown)
{
CLSID OPCCLSID;
HRESULT hRet=CLSIDFromProgID(ProgID,&OPCCLSID);
//將字符串ProgID轉(zhuǎn)換為唯一OPCCLSID
if(IsRemote)
//opc服務(wù)器和opc客戶不在同一臺計算機上
{  
COSERVERINFO ServerInfo;
memset(&ServerInfo,0,sizeof(ServerInfo));
ServerInfo.pwszName=T2OLE("ServerComouter");
MULTI_QI qi[1];
memset(qi, 0, sizeof(qi));
qi[0].pIID=&IID_IUnknown;
HRESULT hRet=CoCreateInstanceEx(OPCCLSID,NULL,CLSCTX_REMOTE_SERVER,
&ServerInfo,1,qi);
*ppUnknown=qi[0].pItf;
}
else
//opc服務(wù)器和opc客戶在同一臺計算機上
{
hRet=CoCreateInstance(OPCCLSID,NULL,CLSCTX_LOCAL_SERVER,IID_IUnknown,
(void **)ppUnknown);
}
}

4.4  創(chuàng)建OPC組
IOPCServer接口的AddGroup()方法可以創(chuàng)建一個有指定名稱和屬性的OPC組。在調(diào)用該方法之前,可以使用上一步得到的Iunknown接口指針,通過QueryInterface()方法請求IOPCServer接口指針。代碼如下:  
ppUnknown->QueryInterface(IID_IOPCServer,(void **)&pServer);
//得到IOPCServer接口指針
pServer->AddGroup(L"",TRUE,500,1235,&lTimeBias,&fTemp,0,&hOPCServerGroup,  &dwActualRate,IID_IOPCItemMgt,& pOPCItemMgt);
4.5  添加數(shù)據(jù)項
IOPCItemMgt接口的AddItem()方法可以添加具有特殊屬性的指定數(shù)量的數(shù)據(jù)項。
pOPCItemMgt->AddItems(ItemNumber,ItemArray,
(OPCITEMRESULT**)&pItemResult,(HRESULT **)&pErrors);
ItemArray 為OPCITEMDEF類型結(jié)構(gòu)數(shù)組,它包含數(shù)據(jù)項的詳細(xì)信息,客戶需要知道要進行交換的數(shù)據(jù)在RSView32標(biāo)簽數(shù)據(jù)庫中的名稱、數(shù)據(jù)類型及作為 OPC服務(wù)器的RSView32項目名稱。添加數(shù)據(jù)項之前,要用這些數(shù)據(jù)項信息對ItemArray結(jié)構(gòu)數(shù)組進行初始化。
4.6  數(shù)據(jù)交換
成功地增加完所需要的數(shù)據(jù)項后,OPC客戶(VC應(yīng)用程序)和OPC服務(wù)器(RSView32)就可以進行數(shù)據(jù)交換了。在數(shù)據(jù)量不大的情況下,可以使用 IOPCSyncIO同步接口的Write()和Read()兩個方法進行數(shù)據(jù)的讀寫操作,從而實現(xiàn)OPC客戶(VC應(yīng)用程序)和OPC服務(wù)器 (RSView32)之間的數(shù)據(jù)交換。代碼如下:
ppUnknown->QueryInterface(IID_IOPCSyncIO,(void **)&pOPCSync);
//得到IOPCSyncIO接口指針
pOPCSync->Read(OPC_DS_CACHE,ReadNumber,hServerRead,&pItemValue,&pErrors);
//讀ReadNumber個數(shù)據(jù)
pOPCSync->Write(WriteNumber,hServerWrite,WriteValue,&pErrors);
//寫WriteNumber個數(shù)據(jù)
4.7  釋放接口指針
在VC應(yīng)用程序停止運行之前必須使用Release()方法刪除已創(chuàng)建的OPC對象并釋放內(nèi)存。

 

5  結(jié)束語
OPC技術(shù)規(guī)范把硬件供應(yīng)商和應(yīng)用軟件開發(fā)者分離開來,使得雙方的工作效率都有了很大提高。軟件開發(fā)商無需了解硬件的實質(zhì)和操作過程,就能訪問OPC數(shù)據(jù)服務(wù)器中的數(shù)據(jù),尤其是開發(fā)商在已使用了組態(tài)軟件進行實時監(jiān)控的過程控制系統(tǒng)基礎(chǔ)上,用C++等高級語言開發(fā)系統(tǒng)時,大大簡化了過去從設(shè)備傳輸數(shù)據(jù)的復(fù)雜過程。在某鋁廠的自動配料系統(tǒng)開發(fā)中,應(yīng)用OPC技術(shù)方便地實現(xiàn)了VC應(yīng)用程序和RSView32的數(shù)據(jù)交換,間接地實現(xiàn)了VC應(yīng)用程序與PLC的通信,獲得了很好的結(jié)果。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲欧美日韩成人| 亚洲一区二区三区中文字幕在线 | 国产亚洲精品久| 国产精品久久久久一区| 欧美日韩在线精品| 欧美日韩国产成人在线免费 | 国产精品一区二区久久| 国产精品久久二区二区| 欧美日韩综合| 欧美日韩在线一区二区三区| 欧美人牲a欧美精品| 欧美精品久久久久久久免费观看| 欧美va天堂va视频va在线| 免费久久99精品国产自| 美女露胸一区二区三区| 免费在线观看精品| 欧美激情一区二区三区在线视频观看| 奶水喷射视频一区| 欧美精品一区二区三区在线播放| 欧美福利一区| 欧美裸体一区二区三区| 欧美午夜精品理论片a级大开眼界| 欧美无乱码久久久免费午夜一区| 欧美视频一区二区在线观看| 国产精品久久福利| 国产欧美日韩伦理| 国语自产精品视频在线看抢先版结局 | 午夜精品一区二区在线观看| 欧美一区二区成人6969| 久久er精品视频| 久久五月天婷婷| 欧美不卡激情三级在线观看| 欧美日本不卡| 国产精品日本精品| 国内精品久久久久久久影视麻豆| 在线看欧美视频| 99视频有精品| 亚洲欧美在线x视频| 亚洲高清不卡在线观看| 亚洲精品自在在线观看| 亚洲一区二区三区四区五区午夜 | 午夜精品一区二区三区在线播放| 久久精品国产999大香线蕉| 久久最新视频| 欧美人成在线视频| 国产精品一区免费视频| 狠狠色综合色综合网络| 亚洲精品在线观| 午夜国产精品影院在线观看 | 欧美不卡在线视频| 欧美午夜精品久久久久久久| 国产视频一区在线观看| 亚洲高清在线观看| 亚洲视频 欧洲视频| 久久岛国电影| 一区二区三区视频在线| 欧美在线综合视频| 欧美激情五月| 国产日产欧产精品推荐色| 亚洲第一主播视频| 亚洲一区二区三区四区在线观看 | 在线观看欧美亚洲| 亚洲视频一二区| 亚洲电影免费观看高清完整版在线观看 | 欧美片第一页| 国产综合色一区二区三区 | 中文无字幕一区二区三区| 欧美一区二视频| 中文欧美在线视频| 久久一区中文字幕| 国产精品久久中文| 亚洲黄色有码视频| 欧美中在线观看| 亚洲免费在线精品一区| 欧美成人一区二区三区在线观看| 国产精品毛片在线看| 亚洲国产mv| 欧美一区二区三区精品电影| 一区二区精品国产| 久久免费高清视频| 国产精品美女久久福利网站| 亚洲激情不卡| 久久激情久久| 欧美一区二区三区男人的天堂| 欧美精品久久一区| 激情文学综合丁香| 午夜精品久久久久久久白皮肤 | 99热精品在线| 亚洲精品资源美女情侣酒店| 久久精品一二三区| 国产精品人人做人人爽人人添| 亚洲精品欧美专区| 亚洲国产日韩欧美在线图片| 欧美在线观看天堂一区二区三区| 欧美剧在线免费观看网站| 在线成人免费视频| 欧美在线三级| 久久精品成人| 国产欧美日本一区二区三区| 一区二区三区黄色| 国产精品99久久久久久久女警| 免费观看成人网| 狠狠爱www人成狠狠爱综合网| 亚洲字幕在线观看| 亚洲一卡二卡三卡四卡五卡| 欧美另类一区二区三区| 亚洲福利视频三区| 亚洲激情视频在线| 麻豆精品91| 在线观看亚洲精品视频| 久久精品人人做人人综合| 久久精品人人做人人爽电影蜜月| 国产精品推荐精品| 亚洲免费伊人电影在线观看av| 亚洲欧美日韩在线观看a三区| 欧美性感一类影片在线播放| 9i看片成人免费高清| 亚洲小视频在线| 欧美三级视频在线播放| 一本大道久久a久久精二百| 一区二区三区www| 欧美日韩三级视频| 夜夜嗨av一区二区三区| 亚洲网站在线观看| 国产精品久久久亚洲一区 | 欧美一区二区啪啪| 国产麻豆精品视频| 欧美一区二区黄色| 久久精品一区二区| 黄色另类av| 亚洲肉体裸体xxxx137| 欧美大片免费观看| 亚洲美女啪啪| 亚洲视频在线免费观看| 欧美性事在线| 午夜精品理论片| 久久久久免费视频| 亚洲国产精品va| 一区二区三区久久精品| 国产精品久久99| 香蕉成人伊视频在线观看| 久久蜜桃av一区精品变态类天堂| 精品成人久久| 99视频精品全国免费| 欧美日韩综合久久| 午夜久久资源| 欧美大尺度在线| 日韩亚洲视频| 欧美在线观看日本一区| 尤物精品国产第一福利三区 | 亚洲一区二区三区四区在线观看 | 亚洲精品老司机| 亚洲欧美另类中文字幕| 国产日韩三区| 亚洲精品视频在线播放| 欧美视频一区在线| 欧美亚洲综合网| 欧美成人第一页| 在线亚洲一区| 久久综合国产精品| 日韩网站在线看片你懂的| 亚洲欧美在线免费| 国内精品写真在线观看| 一区二区三区国产精品| 国产精品永久免费在线| 91久久一区二区| 国产精品福利影院| 久久国产精品亚洲va麻豆| 欧美人与禽猛交乱配| 亚洲欧美日韩在线高清直播| 久久一区中文字幕| 一本色道**综合亚洲精品蜜桃冫 | 国产精品国产三级国产普通话三级| 午夜欧美理论片| 欧美国产日韩视频| 午夜久久久久| 欧美日韩国产综合在线| 欧美在线国产精品| 欧美视频日韩| 亚洲国产精品一区二区三区| 国产精品xvideos88| 91久久中文字幕| 国产精品影音先锋| 亚洲美女尤物影院| 国产一区二区三区网站| 在线视频欧美精品| 精品999成人| 午夜精品视频在线| 亚洲精品乱码久久久久久日本蜜臀| 欧美一区二区三区婷婷月色 | 9久re热视频在线精品| 久久亚洲精选| 亚洲一区国产视频| 欧美人在线观看| 亚洲高清毛片| 国产午夜精品视频免费不卡69堂| 日韩视频一区| 在线播放视频一区| 久久成人免费日本黄色| 一区二区三区视频在线播放|