【问题标题】:Looking for assistance on getting the actual value from OPC server寻求有关从 OPC 服务器获取实际值的帮助
【发布时间】:2019-08-12 19:43:35
【问题描述】:

我正在使用现有的 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。

【问题讨论】:

  • 对象实例上的默认.ToString() 方法将返回实例的类型名称,这可能就是这里发生的情况。我不知道“Opc”库,但从一个简短的谷歌,也许OPC_Not_Applicable[0].Value.ToString(); 可能在这里工作?
  • .Value。部分将不起作用。 “项目不包含价值的定义......”

标签: c# opc opc-da kepserverex


【解决方案1】:

你快到了。在调用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 将包含您要查找的值。

【讨论】:

  • 谢谢。我找到了逻辑,但其中一部分被注释掉了。现在,我知道该做什么了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多