如何开发OPC Server.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如何开发OPC Server

如何开发OPC Server 首先我们先来看一下什么是OPC ???????OPC (OLE for Process Control——用于过程控制的OLE)是基于Microsoft公司的DNA(Distributed Internet Application)构架和COM(Component Object Model)技术的一个工业标准接口,是根据易于扩展性而设计的。 ? 再来了解一下OPC的用途 OPC主要适用于过程控制和制造自动化等应用领域。?OPC是以OLE/COM机制作为应用程序的通讯标准。OLE/COM是一种客户/服务器模式,具有语言无关性、代码重用性、易于集成性等优点。OPC规范了接口函数,不管现场设备以何种形式存在,客户都以统一的方式去访问,从而保证软件对客户的透明性,使得用户完全从低层的开发中脱离出来 然后我们再来看看OPC Server的组成 ???????一个设备的OPC Server主要有两部组成,一是OPC标准接口的实现;二是与硬件设备的通信模块。 ??????实现OPC?标准接口 ? [图1] 在这些接口中,IOPCServer?是OPC Server的主接口,通过它实现OPC Server在操作系统中的安装和注册。此接口是必须要实现的,其所有方法也必须实现。其它的接口都是可选的我们就不做介绍了,下面主要来介绍如何实现IOPCServer接口。 在IOPCServer接口中共有六个法: 1、?IOPCServer::AddGroup HRESULT AddGroup( [in, string] LPCWSTR szName, ?[in] BOOL bActive, [in] DWORD dwRequestedUpdateRate, [in] OPCHANDLE hClientGroup, [unique, in] LONG *pTimeBias, [in] FLOAT * pPercentDeadband, [in] DWORD dwLCID, [out] OPCHANDLE * phServerGroup, [out] DWORD *pRevisedUpdateRate, [in] REFIID riid, [out, iid_is(riid)] LPUNKNOWN * ppUnk ); ???????此方法是在OPC Server上建立一个组。下在我们来实现这个方法: …. …. 首先要对组名(szName)进行检查,看是否有效或是否已经有这个组。 if (szName != NULL) { ??????????????RequestedName = szName; ??????????????if (RequestedName == ) ?????????????????????RequestedName = pSvrObject-DefaultGroupName(); ???????} ???????else ??????????????RequestedName = pSvrObject-DefaultGroupName(); ?????? ???????for (i=0; ipSvrObject-NumbrGroups(); i++) ???????{ ??????????????pGroup = pSvrObject-GetGroup(i); ??????????????if (RequestedName == pGroup-Name) ?????????????????????return (OPC_E_DUPLICATENAME); ???????} ???????这需要在内存中维护OPC Group(组)的列表(还要有OPC?项的列表)。 ???????如果szName(组名)正确并且没有建立过该组,就开始根据传过来的参数进行组的建立,建立好后将该组加到自己的组列表中以备后用。 ??????????????最后将新建组的接口指针返回给客户端。 ????? ? 2、IOPCServer::GetErrorString HRESULT GetErrorString( [in] HRESULT dwError, [in] LCID dwLocale, [out, string] LPWSTR *ppString ); ???????为Server的错误代码返回相应的错误字符串。 ?????? 代码略 3、?IOPCServer::GetGroupByName HRESULT GetGroupByName( [in, string] LPCWSTR szName, [in] REFIID riid, [out, iid_is(riid)] LPUNKNOWN * ppUnk ); 通过指

文档评论(0)

153****9595 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档