千家信息网

OPC自动化接口编程需要注意哪些问题

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这篇文章主要介绍"OPC自动化接口编程需要注意哪些问题"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"OPC自动化接口编程需要注意哪些问题"文章能帮助大家解决问
千家信息网最后更新 2025年02月04日OPC自动化接口编程需要注意哪些问题

这篇文章主要介绍"OPC自动化接口编程需要注意哪些问题"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"OPC自动化接口编程需要注意哪些问题"文章能帮助大家解决问题。

注意事项如下:

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

c#代码原形:

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

TimeStamps);

AsyncRead(int NumItems,ref Arrray ServerHandles,outErrors,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)

{}

关于"OPC自动化接口编程需要注意哪些问题"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

0