OPC Client .NET client 类库开发 点击:993 | 回复:1



opc_connect

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 5回
  • 年度积分:0
  • 历史总积分:54
  • 注册:2010年12月08日
发表于:2010-12-17 12:47:20
楼主

1. 背景
OPC Data Access 规范是基于COM/DCOM定义的,因此大多数的OPC DA Server和client都是基于C++开发的,因为C++对COM/DCOM有最好的支持。现在,随着微软的开发平台渐渐的转移到.NET框架上,好多OPC Client程序都需要建立在.NET平台上,用.NET提供的技术开发OPC Client就成为一种需求。网上很多网友都有提过,.NET开发OPC Client不外乎下面三种方法:
• 使用OPCNetAPI 2.0,需要用到OPCNetAPI.dll,OPCNetAPI.Com.dll;
• 使用自动化接口,需要用到OPCDAAuto.dll;
• 使用自定义接口,需要用到多个.NET Wrapper:OpcRcw.Ae.dll,OpcRcw.Batch.dll,OpcRcw.Comn.dll,OpcRcw.Da.dll,OpcRcw.Dx.dll,OpcRcw.Hda.dll,OpcRcw.Sec.dll;

OPCNetAPI 2.0由OPC foundation提供,只有注册会员才能得到,是需要付费的。其他的dll不需要付费,很容易得到。网上有网友已经介绍过使用OPCDAAuto.dll开发.NET Client的方法, 这种方法的优点是比较简单,缺点是不够灵活。本文使用自定义接口,借助OpcRcw.Da.dll,开发出一个OPC .NET Client的类库,可供其他client程序调用。

必要文件:
OpcRcw.Comn.dll --- 包含对IConnectionPointContainer的包装。
OpcRcw.Da.dll ---.NET 对OPC COM 接口 定义的包装。

适应版本:
OPC Data Access specification 2.05

说明:
该类库正在开发中,这是第一个版本,只实现了一些基本功能,好多功能如OPC Browse等还未实现,代码也未经过测试,存在bug在所难免,感兴趣的朋友请继续关注。。。

2. VS2008工程项目文件

3. 基本类库视图

下图是OpcDa.Client组件实现的基本类库:




4. 类库实现的基本功能
OpcServer:
Connect: 连接OPC Server。
Disconnect: 断开Server。
GetStatus: 获得Server的当前状态,返回ServerStatus。
AddGroup: 添加group
RemoveGroup: 删除group
FindGroupByName: 通过名字获取OpcGroup对象

Opc Group:
AddItems: 添加Opc Items到组
RemoveItems: 删除items
AsyncRead: 异步读取Items,调用IOPCAsyncIO2::Read接口
AsyncWrite: 异步写items,调用IOPCAsyncIO2::Write接口
Refresh: 刷新当前group,调用IOPCAsyncIO2::Refresh接口
GetState: 获得当前group状态,返回GroupState
SetState: 设置当前group状态,返回设置后的group状态
DataChanged: 事件,客户端注册,可用来接收OnDataChange事件

5. 类库使用方法
1) 连接OPC DA server
string serverProgID = "OPCSample.OpcDa20Server.1"; // opc da sample server prog id
string hostName = string.Empty; //local server
Type tp = Type.GetTypeFromProgID(serverProgID );
this._opcServer = new OpcServer(tp.GUID.ToString(), hostName );

try
{
    this._opcServer.Connect();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, 
                                         "Error",
                                         MessageBoxButtons.OK,
                                          MessageBoxIcon.Error);
}
2) 断开OPC Server
if (this._opcServer != null)
{
    this._opcServer.Disconnect(); 
    this._opcServer = null;
}

3) 添加Group
string groupName = "grp_0"; // group name
int updateRate = 1000;
bool active = true;
try
{
    OpcGroup grp = this._opcServer.AddGroup(groupName , updateRate , active );
    grp.DataChanged += OnDataChange; //register OnDataChange Event
}
catch (Exception ex)




opcpro

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 48回
  • 年度积分:0
  • 历史总积分:386
  • 注册:2008年9月26日
发表于:2010-12-17 15:47:23
1楼

本人有opc基金会的开发资料,有需求的请联系我(QQ: 250561779).


热门招聘
相关主题

官方公众号

智造工程师