我有一个OPC数据收集程序,它从PLC读取标签并记录数据。 该程序使用OPCDaAuto.dll。我无法弄清楚如何读取从SyncRead函数返回的质量代码。
调用SyncRead时,会传递一个空对象来保存质量代码。我不知道该对象返回时该如何处理。
这是对象的声明和函数调用......
static object a; // For Quality Return
MyOPCGroup2.SyncRead((short)OPCAutomation.OPCDataSource.OPCDevice, 9, ref ItemServerHandles, out ItemServerValues, out ItemServerErrors, out a, out b);
我发现了这段代码,试图用它来获得一些见解......
Type myType = a.GetType();
IList<PropertyInfo> props = new List<PropertyInfo>(myType.GetProperties());
foreach (PropertyInfo prop in props)
{
object propValue = prop.GetValue(a, null);
Console.WriteLine("Quality = " + propValue.ToString());
}
它产生以下输出......
Quality = 9
Quality = 9
Quality = 1
Quality = System.Int16[*]
Quality = False
Quality = True
Quality = False
我期待返回9个元素(我正在阅读9个标签),我希望它们的值为192(=好)。 SyncRead正在运行,因为我在ItemServerValues中收到了正确的值。如何获得对象a的质量代码?
答案 0 :(得分:2)
您的第一个代码段(SyncRead)显示基本正确。第二个片段未列出质量,它列出了&#39; a&#39;的.NET属性的值。对象
您需要对返回的&#39; a&#39;进行类型转换或转换。到Int16 [9],然后通过索引来访问它的元素。