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));
}
}