Нужна помощь в получении фактического значения с сервера OPC

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


person Sean    schedule 12.08.2019    source источник
comment
Метод .ToString() по умолчанию для экземпляра объекта вернет имя типа экземпляра, что, вероятно, и происходит здесь. Я не знаю библиотеки Opc, но, судя по краткому гуглу, возможно, OPC_Not_Applicable[0].Value.ToString(); здесь подойдет?   -  person steve16351    schedule 12.08.2019
comment
Значение. порция работать не будет. Пункт не содержит определения значения .....   -  person Sean    schedule 12.08.2019


Ответы (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 будет содержать искомое значение.

person div    schedule 12.08.2019
comment
Спасибо. Я нашел логику, но часть ее была закомментирована. Теперь я знаю, над чем работать. - person Sean; 13.08.2019