追梦的专栏

http://hi.csdn.net/jinglidong

关于OPC自动化接口编程(OPCDAAuto.dll)几点注意问题
 

为了能够在工作中方便的应用OPC和充分的理解OPC的开发流程、内部机制,这两天正在研究开发OPC客户端程序,一般我们开发OPC客户端程序有以下几种方式:

(1)       使用OPCNetAPI,需要用到OPCNetAPI.dll,OPCNetAPI.Com.dll

(2)       使用自动化接口,需要用到OPCDAAuto.dll

(3)       使用自定义接口,需要用到多个Wrapper:OpcRcw.Ae.dll,OpcRcw.Batch.dll,OpcRcw.Comn.dll,OpcRcw.Da.dll,OpcRcw.Dx.dll,OpcRcw.Hda.dll,OpcRcw.Sec.dll

相关资料可以到http://www.opcfoundation.org/去找,注册成为会员,可以下载一些东西,但是有些是收费的。

 

我用的是OPCDAAuto.dll,版本是:2.2.5.30。大家可以到网上去下载,网上版本有可能是2.0.0.0的。网上也有相关的

DEMO例子也,但是大家都是用的VB.NET和VB开发的比较多,用C#的比较少,即使有,代码写的也比较混乱,并且没有使

用的一些注意事项。我是用C#开发的,但是,也只是在试验阶段,下一步准备做一个公司内部通用的DLL.

 

经过试验,注意事项如下:

(1)用SyncRead(组的同步读)和AsyncRead(组的异步读)读取服务数据

 c#代码原形:

SyncRead (short source,int NumItems,ref Arrray ServerHandles,out Values,out Errors,out Qualities,out

TimeStamps);

AsyncRead(int NumItems,ref Arrray ServerHandles,out Errors,int TransactionID,out int CancelID);

大家可以看出这两个函数里边都有一个ref Arrray ServerHandles,

如果我们在向函数传递参数的时候,

写成:

int[] handle=new int []{item.ServerHandle};

System.Array ServerHandles=(System.Array)handle;

这时候会出现“参数不正确”的错误异常。

 

应该改成:


int[] handle=new int []{/*函数内部数据下标是从1开始的,所以要把第0位空出来*/0,item.ServerHandle};

System.Array ServerHandles=(System.Array)handle;

 


OPCDAAuto.dll内部源码:

for (LONG ii = 1; ii <= NumItems; ii++)

{
  LONG hHandle = NULL;
  SafeArrayGetElement(*ppServerHandles, &ii, &hHandle);

  phHandles[ii-1] = hInvalidHandle;
  ppItems[ii-1]   = NULL;

  COPCItem* pItem = LookupItem(hHandle);
 
  if (pItem != NULL)
  {
   phHandles[ii-1] = pItem->GetServerHandle();
   ppItems[ii-1]   = pItem;
  }

}

 

(2)AsyncRead(组的异步读)读取服务数据

当用异步读取数据的时候,必须把相应的组的IsSubscribed参数设置为true,以订阅状态方式读取数据;当我们用异步方式

读取数据就会有一个异步读取完成的事件:

声明:

group.AsyncReadComplete +=new

OPCAutomation .DIOPCGroupEvent_AsyncReadCompleteEventHandler (AsyncReadComplete);

实现:

private void AsyncReadComplete(int TransactionID, int NumItems, ref System.Array ClientHandles, ref

System.Array ItemValues, ref System.Array Qualities, ref System.Array TimeStamps, ref System.Array

Errors)

{}

 

 

刚刚学习客户端开发,把遇到的问题整理一下,做一下笔记,同时也供大家一起学习。革命尚未成功,同志仍需努力!


网名:唯笑志在

QQ:504547114

 

阅读更多
个人分类: vc++
想对作者说点什么? 我来说一句

OPCDAAuto.dll

2013年11月07日 228KB 下载

OPCDAAuto.dll(v2.2.5.30)

2012年10月22日 228KB 下载

OPCDAAuto.dll 2.2.5.2版

2014年10月28日 228KB 下载

OPCDAAuto.dll OPC开发用动态库

2016年02月16日 228KB 下载

OPCDAAuto 组件以及开发手册

2016年03月31日 263KB 下载

没有更多推荐了,返回首页

不良信息举报

关于OPC自动化接口编程(OPCDAAuto.dll)几点注意问题

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭