寻求有关从 OPC 服务器获取实际值的帮助
Looking for assistance on getting the actual value from OPC server
我正在使用现有的 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。
你快到了。调用 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
将包含您要查找的值。
我正在使用现有的 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。
你快到了。调用 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
将包含您要查找的值。