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)); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)