一个OPC服务器的简单实例_第1页
一个OPC服务器的简单实例_第2页
一个OPC服务器的简单实例_第3页
一个OPC服务器的简单实例_第4页
一个OPC服务器的简单实例_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、首 先 我 们 先 来 看 一 下 什 么 是 OPCOPC (OLE for Process Control用于过程控制的 OLE谑基于 Microsoft 公司的DNA( Distributed Internet Application )构架和COM( Component Object Model )技术的一个工业标准接口,是根据易于扩展性而设计的。再 来 了 解 一 下 OPC 的 用 途OPC主要适用于过程控制和制造自动化等应用领域。OPC是以OLE/COMfl制作为应用程序的通讯标准。OLE/CO谑一种客户/服务器 模式,具有语言无关性、代码重用性、易于集成性等优点。OPCE范了接

2、口函数,不管现场设备以何种形式存在,客户都以统一的方式去访问, 从而保证软件对客户的透明性,使得用户完全从低层的开发中脱离出来然 后 我 们 再 来 看 看 OPC Ser ver 的 组 成 一个设备的OPCServer主要有两部组成,一是 OPCB准接口的 实现;二是与硬件设备的通信模块。实 现 OPC 标 准 接 口在这些接口中,IOPCServer 是 OPCServer 的主接口,通过它实现 OPCServer 在操作系统中的安装和注册。此接口是必须要实现的,其所有方法也必须实现。其它的接口都是可选的我们就不做介绍了,下 面 主 要 来 介 绍 如 何 实 现 I OPCServer

3、 接 口 。在 I OPCServer 接 口 中 共 有 六 个 法 :1 、 I OPCSer v er : : AddGr oup HRESULT AddGroup( in, string LPCWSTR szName, i n BOOL bAct i ve, i n DWOR D d wRe q u e s t e d U p d a t e Ra t e , i n OPCHANDLE hCl i ent Group, u n i q ue , i n L ONG * pTi meBi as , i n FLOAT * pPer cent Deadband , i n DWORD d

4、 wL CI D, out OPCHANDLE * phSer ver Gr ou p, o u t D WOR D * p Re v i s e d U p d a t e Ra t e , i n REFI I D r i i d, out , i i d_i s ( r i i d) L PUNKNOWN * pp Unk ;此方法是在OPCServer 上建立一个组。下在我们来实现这个方法: .首先要对组名(szName)进行检查,看是否有效或是否已经有这个 组。i f ( szName ! = NULL)Req u e st edNa me = sz Name ;if( Req ue

5、st edNameRequestedName = pSvrObject->DefaultGroupName();elseRequestedName = pSvrObject->DefaultGroupName();f or ( i =0 ; i Numbr Gr ou ps ( ) ; i + )pGr ou p = pSvr Obj ect - >Get Gr oup( i ) ;i f ( Re q ue s t e d Name = = p Gr ou p - >Name) r et ur n ( OPC_E_DUPLI CATENAME) ;这需要在内存中维护

6、OPC Group期)的列表(还要有OPC项的列表)。如果szName(组名)正确并且没有建立过该组,就开始根据传过来的参数进行组的建立,建立好后将该组加到自己的组列表中以备后用。i f ( ( d wRe q u e s t ed Up d a t e Rat e = = 0 )| |( dwRequest edUpdat eRat e < pApp- >Ser ver Ti ck Rat e) )Act ual Rat e = pApp- >Se r ver Ti c kRat e;elseAc t ual Rat e = d wReq uest ed Updat eRa

7、t e;Mi n Rat e = pAp p- >Ser ver Ti ck Rat e;Act ual Rat e +=( Mi nRat e/ 2) ;Act ua l Rat e / =MinRate;Act ua l Rat e * =MinRate;i f ( p Rev i s ed Upd ateRate )* pRev i s ed Updat eRat e=Actual Rat e;pGr ou p = n ew ( COPCGr ou p) ;i f ( pGr ou p = NULL) r et ur n ( E_OUTOFMEMORY) ;pGr o u p- &

8、gt; Name = Re q ue s t ed Name ; pGr o u p- >pSv r Obj ect = p Svr Obj ect ; pGr oup- >Mar ked Fo r Del et i on = FALSE;pGr oup- >Cl i ent Gr oup Hand l e = hCl i ent Gr ou p;pGr oup- >Updat eRat e = Act ual Rat e;pGr ou p- >I sAct i v e = bAct i ve ;i f ( pPercent Deadband) pGr o up-

9、 >Deadband = * pPer cent Deadband;elsepGr ouppGr oup-if (pGr oup- >Ti- >Dead>LCI DpTi mme Bi as =eband =;= dwLCI D;eBi as)* pTi me Bi as ;lsef t i me (&t i me b uf f e rpGr ou p- >Ti meBi aspServerStatus->dwServerState = pApp->ServerState;/ e n d RWDpSer ver St at us- >dw

10、Gr oup Cou nt = 0;p S e r v e r S t a t u s - > d wB a n d Wi d t h = 0 ;p Se r v e r St at u s - >wMaj or Ve r s i o n = 0 ;p Se r v e r St at u s - >wMi nor Ve r s i o n = 0 ;pSer v er St at u s - >wBu i l d Nu mb e r = 0 ; pSer ver St at us- >wRese r ve d = 42 ;返回服务器状态ppServerSt at

11、 uspServerSt at us;5、 I OPCSe r v er : : Remove Gr ou p HRESULT RemoveGroup( in OPCHANDLE hServerGroup, i n BOOL bFor ce ;从服务器中删除指定组 在组列表中找到指定的组,并将其删除。f or ( i =0 ; i Nu mbr Gr ou ps ( ) ; i + )pGr ou p = pSvr Obj ect - >Get Gr oup( i ) ;if (groupHandleID = pGroup->ServerGroupHandle)pSv r Obj

12、ect - >Remove Gr ou p( i ) ;/ i f no outstandi ng references/ del ete i ti f ( pGr oup- >Ref Count =0)p Sv r Obj ec t - >L oc kGr ou p L i s t ( ) ;del et e ( pGr oup) ;pSv r Obj e ct - >Un l oc k Gr oup Li st ( ) ;el se i f ( bForce)( ( CObj ect * ) pGr ou p) ;elsepGr ou p- >Mar ked

13、For Del et i on = TRUE;pGr oup- >pSvr Obj ect = NULL;ret ur n ( OPC_S_I NUSE) ;r et u r n ( S_OK) ;6 、 I OPCSe r v e r : : Cr e a t e Gr o u p En u me r at o rHRESULTCreateGroupEnumerator( in OPCENUMSCOdPwEScope, i n REFI I D r i i d, out , i i d_i s ( r i i d) LPUNKNOWN* ppUnk ;为 Server 上 所 提 供

14、的 组 建 立 不 同 的 列 举 器 。i f ( r i i d = I I D_I En u mUn k n own )p En u me r at o r = new( COPCGr ou p Enu m) ;1 f ( pEn u mer at o r = = NULL) r et ur n ( E_OUTOFMEMORY) ;pEnu mer at or - >p Sv r Obj ect = pSv r Obj ect ;pEnumerator->AddRef(); / will increment reference count/ / f or bot h t he

15、 enumer at or & ser ver/ CopyGroupList will AddRef Each Group enumeratedpSvr Obj ect - >Copy Gr oup Li st ( dwScope , &( pEn u me r at o r - > Gr o u p Li s t ) ) ;* ppUnk = pEnu mer at or ;i f ( pEn u mer at o r - > ( )>0 )r et u r n ( S_OK) ;elseret ur n ( S_FALSE) ;i f ( r i i

16、 d = I I D_I En u mSt r i ng )pSt r En u me r at o r = n ew( CI OPCSt r i n g En u m) ;i f ( p St r En u me r at or = = NULL ) r et ur n ( E_OUTOFMEMORY) ;pSt r En u mer at or - >Add Ref ( ) ;pSvr Obj ect - >CopyGr o up NameLi s t ( dwScope , &( p St r En u me r at or - > NameL i s t )

17、) ;* ppUnk = pSt r En umer at or ;i f ( p St r En u me r at or - > ( )>0 )r et u r n ( S_OK) ;elser et ur n ( S_FALSE) ;上面是直接使用CO岐术进行开发的,这要求你必须熟悉CO成 术。如果你对COW是很了解那也没关系,可以选择 OPC Server的 开发工具,你只需要简单的调用开发工具的函数就可以实现OPCServer 中 的 所 有 接 口 。我们虽然实现了IOPCServer 接口中的所有方法,但它只是OPCClient 与我们通信的一个桥梁,最主要的还是我们要自己维护好OPCGr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论