0

我正在使用现有的 C# 程序通过 Kepserver 与 PLC 通信(我知道 PLC 和 Kepserver 方面,但在 C# 上是新手)。我不断将“Opc.Da.Item”作为值(不是实际的 PLC 值)。我知道这可能是一个基本问题,但是我从哪里得到实际值(我在最后一行逻辑中放了什么)?谢谢你的帮助。

这就是从 OPC 读取数据的其他部分的方式,但我似乎看不出我做错了什么。

我终于回到了这个问题,但仍然有问题。通过下面添加的方法,我在 results[0].value 中得到了一个空值。

private void ReadCompleteCallback_NotApplicable (object clientHandle, Opc.Da.ItemValueResult[] results)
{
HMINotApp_TextBox.Invoke(new EventHandler(delegate { HMINotApp_TextBox.Text = Convert.ToString(results[0].Value); }));
}
Opc.Da.Item[] OPC_NotApplicable = new Opc.Da.Item[1];
OPC_NotApplicable[0] = new Opc.Da.Item();
OPC_NotApplicable[0].ItemName = Brake_Press_ID + "B1156_barcode_DINT_value";
OPC_Not_Applicable.Add(OPC_NotApplicable[0]);
NotApplicable_GroupRead.AddItems(OPC_Not_Applicable.ToArray());
Opc.IRequest req;
NotApplicable_GroupRead.Read(NotApplicable_GroupRead.Items, 123, new Opc.Da.ReadCompleteEventHandler(ReadCompleteCallback_NotApplicable), out req);
label23.Text = OPC_Not_Applicable[0].ToString();

我希望该值为 9999999,但我得到 Opc.Da.Item。

4

1 回答 1

3

您快到了。调用该Read方法时,您提供了一个回调ReadCompleteCallback_NotApplicable。这是在读取请求完成后调用的方法。

由于您似乎没有遇到异常,因此该方法似乎已在某处声明。尝试找到它。如何从该回调中读取项目的示例可能如下所示:

private void ReadCompleteCallback_NotApplicable(object handle, Opc.Da.ItemValueResult[] results)
{
    Console.WriteLine("Read completed.");
    foreach(Opc.Da.ItemValueResult readResult in results)
    {
        Console.WriteLine($"{readResult.ItemName}\tval:{readResult.Value}");
    }
}

因此readResult.Value将包含您正在寻找的值。

于 2019-08-12T21:12:40.747 回答