一个OPC服务器的简单实例

一个OPC服务器的简单实例

ID:38766826

大小:40.50 KB

页数:7页

时间:2019-06-19

一个OPC服务器的简单实例_第1页
一个OPC服务器的简单实例_第2页
一个OPC服务器的简单实例_第3页
一个OPC服务器的简单实例_第4页
一个OPC服务器的简单实例_第5页
资源描述:

《一个OPC服务器的简单实例》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、首先我们先来看一下什么是OPC  OPC(OLEforProcessControl——用于过程控制的OLE)是基于Microsoft公司的DNA(DistributedInternetApplication)构架和COM(ComponentObjectModel)技术的一个工业标准接口,是根据易于扩展性而设计的。    再来了解一下OPC的用途  OPC主要适用于过程控制和制造自动化等应用领域。OPC是以OLE/COM机制作为应用程序的通讯标准。OLE/COM是一种客户/服务器模式,具有语言无关性、代码重用性、易于集成性等优点。OPC规范了接口函数,不管现场设备以何

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

3、OPCServer::AddGroup  HRESULTAddGroup([in,string]LPCWSTRszName,  [in]BOOLbActive,  [in]DWORDdwRequestedUpdateRate,  [in]OPCHANDLEhClientGroup,  [unique,in]LONG*pTimeBias,  [in]FLOAT*pPercentDeadband,  [in]DWORDdwLCID,  [out]OPCHANDLE*phServerGroup,  [out]DWORD*pRevisedUpdateRate,  [in]R

4、EFIIDriid,  [out,iid_is(riid)]LPUNKNOWN*ppUnk;  此方法是在OPCServer上建立一个组。下在我们来实现这个方法:  ….  ….  首先要对组名(szName)进行检查,看是否有效或是否已经有这个组。  if(szName!=NULL)  {  RequestedName=szName;  if(RequestedName==""  RequestedName=pSvrObject->DefaultGroupName();  }  else  RequestedName=pSvrObject->DefaultGrou

5、pName();    for(i=0;iNumbrGroups();i++)  {  pGroup=pSvrObject->GetGroup(i);  if(RequestedName==pGroup->Name)  return(OPC_E_DUPLICATENAME);  }  这需要在内存中维护OPCGroup(组)的列表(还要有OPC项的列表)。  如果szName(组名)正确并且没有建立过该组,就开始根据传过来的参数进行组的建立,建立好后将该组加到自己的组列表中以备后用。  if((dwRequestedUpdateRate==0)

6、

7、(dwReques

8、tedUpdateRateServerTickRate))  ActualRate=pApp->ServerTickRate;  else  {  ActualRate=dwRequestedUpdateRate;  MinRate=pApp->ServerTickRate;  ActualRate+=(MinRate/2);  ActualRate/=MinRate;  ActualRate*=MinRate;  }  if(pRevisedUpdateRate)  *pRevisedUpdateRate=ActualRate;    pGroup=

9、new(COPCGroup);  if(pGroup==NULL)  return(E_OUTOFMEMORY);    pGroup->Name=RequestedName;  pGroup->pSvrObject=pSvrObject;  pGroup->MarkedForDeletion=FALSE;  pGroup->ClientGroupHandle=hClientGroup;    pGroup->UpdateRate=ActualRate;    pGroup->IsActive=bActive;  if(pPercentDeadband)  pG

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。