使用OPCDaAuto.dll读取Group.SyncRead返回的OPC质量代码

时间:2014-03-20 22:11:34

标签: c# opc

我有一个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的质量代码?

1 个答案:

答案 0 :(得分:2)

您的第一个代码段(SyncRead)显示基本正确。第二个片段未列出质量,它列出了&#39; a&#39;的.NET属性的值。对象

您需要对返回的&#39; a&#39;进行类型转换或转换。到Int16 [9],然后通过索引来访问它的元素。