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

本文详细介绍了使用OPCDA自动化接口开发OPC客户端程序的方法,包括使用OPCDAAuto.dll库进行同步和异步读取服务数据的具体步骤及注意事项,特别强调了C#开发环境下的一些细节处理。

为了能够在工作中方便的应用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)

{}

 

转载于:https://my.oschina.net/yichenbaby/blog/2048754

【源码免费下载链接】:https://renmaiwang.cn/s/twv7i OCDPAAuto.dll代表OPC Data Access Automation Library,作为OPC技术的一部分,在工业自动化领域发挥着关键作用。它为不同厂商设备与系统之间的统一通信提供了标准接口。在本文中,我们将深入探讨如何在32位和64位操作系统环境下正确引用和使用该库,并解决可能遇到的技术问题。需要注意的是,Windows系统中的位宽差异对开发流程有重要影响:32位系统支持的最大内存容量为4GB,而64位系统则可配置超过4GB的内存容量。在不同系统架构之间进行OPC服务器与程序组件的兼容性测试时,请确保选择与目标平台一致的版本。例如,在使用64位开发环境时,应连接32位版本的COM组件以访问32位OPC服务器。引用该DLL通常需要通过Visual Studio等IDE提供的“添加引用”功能完成,并建议根据项目的运行环境选择相应的OPCDAAuto.dll版本(如选择32位或64位)。如果遇到版本不兼容问题,可参考相关技术文档获取解决方案。注册OPCDAAuto.dll可通过regsvr32.exe命令行工具实现,在不同系统架构中需要使用特定目录下的该工具:32位系统使用%SystemRoot%\System32目录中的regsvr32.exe,而64位系统则在%SystemRoot%\SysWow64目录下查找。注册过程中如遇到问题,请确保以管理员权限运行命令提示符。开发中可能遇到的问题包括版本不兼容、注册失败、引用错误及接口调用异常等。为有效解决问题,需要具备OPC规范知识以及对COM组件和系统架构的深入理解能力。成功配置后,可通过OPC客户端接口访问目标服务器的数据资源,实现跨平台、跨设备的数据交互功能。此外,压缩包中可能包含针对64位系统开发的具体实现方案或示例代码。通过
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值