报错:OPC读完成报错 索引超出数组界限

报错:OPC读完成报错 索引超出数组界限,第1张

报错:OPC读完成报错 索引超出数组界限

C# opc客户端访问opc服务器 ,OPC读数据时报错
这些错误是我经历过的报错,记录一下

环境

PLC:S7-200 PC Access SMART
DLL:注册并引用 OPCDAAuto.dll
语言:C#
实现功能:通过OPC,实现对PLC进行读写

系统报错

索引超出数组界限

出现原因
//报错代码
private void AsyncReadComplete(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps, ref Array Errors)
        {
            for (int i = 0; i <= NumItems; i++)
            {
                num[i] = Convert.ToString(ItemValues.GetValue(i));
            }
        }

//正确代码
private void AsyncReadComplete(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps, ref Array Errors)
        {
            for (int i = 1; i <= NumItems; i++)
            {
                num[i - 1] = Convert.ToString(ItemValues.GetValue(i));
            }
        }

在读完成事件中报的错。从PLC中读到了20个数,对应的准备了长度为20的数组,存读到的数。

长度为20的数组,索引是0-19。
NumItems的值是从1-20

在报错代码中,方法GetValue(i),i第一次循环的值是0,NumItems没有0这个值,所以报错

解决方法

方法GetValue(i),让i第一次循环变成1

//正确代码
private void AsyncReadComplete(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps, ref Array Errors)
        {
            for (int i = 1; i <= NumItems; i++)
            {
                num[i - 1] = Convert.ToString(ItemValues.GetValue(i));
            }
        }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5436361.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存