栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

报错: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));
            }
        }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/460854.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号