Нужна помощь в получении фактического значения с сервера OPC
Я работаю с существующей программой C#, связывающейся с ПЛК через Kepserver (я знаю стороны ПЛК и 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.
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
будет содержать значение, которое вы ищете.