Вход

Просмотр полной версии : Помогите с OwenioNet для .NET C#, ТРМ1 System.TimeoutException



suiginto
08.07.2025, 03:04
Пробую создать приложение с получением данных (температура) от ТРМ1-Щ1.У2.У.RS и их выводом на Visual Studio C# с библиотекой OwenioNet.dll и OwenioNet.DataConverter.dll. Читая описание протокола OWEN и мануал к библиотеке OwenioNet , а также читая форум с поисках рабочего примера я написал следующий код.




int adresTrm = 16; //пробовал писать 0x16 / ошибка также не уходит

SerialPortAdapter spOwen2 = new SerialPortAdapter(3, 9600, Parity.None, 8, StopBits.One);
spOwen2.Open();

var owenProtocol = OwenProtocolMaster.Create(spOwen2);
if (spOwen2.IsOpened != true)
{
MessageBox.Show("Ошибка открытия порта COM1: {0}", spOwen2.ToString());
}

owenProtocol.OwenRead(adresTrm, AddressLengthType.Bits8, "Fun1");//без индекса // тут ошибка System.TimeoutException: "Время ожидания операции истекло."
owenProtocol.OwenRead(adresTrm, AddressLengthType.Bits8, "Fun1", 0x3456);//c индексом

owenProtocol.OwenWrite(adresTrm, AddressLengthType.Bits8, "Fun1", new byte[] { 0x45, 0x87 });//без индекса
owenProtocol.OwenWrite(adresTrm, AddressLengthType.Bits8, "Fun1", new byte[] { 0x45, 0x87 }, 0x3456);//с индексом (это переработанный пример из документации. не думаю что индекс в моём варианте нужен

spOwen2.Close();

На строчке owenProtocol.OwenRead(adresTrm, AddressLengthType.Bits8, "Fun1");
Получил ошибку "System.TimeoutException: "Время ожидания операции истекло.""

Почитал ещё темы у меня честно нет понимания почему так происходит. По задумке как я понял должно работать а оно не работает.
Предполагаю что я пишу неверное адрес но оба варианта не подходят. Ни 16 ни 0x16. (адрес именно такой в настройках ТРМ)
Тип протокола RS-485 на самом ТРМ как я понял надо поставить ASCII.
Owen Monitor например нормально подключается и отображает температуру. Owen Configurator тоже подключается и можно посмотреть конфиги.
А вот программа на C# подключается НО будто бы не получает то что нужно или не отправляет. я не могу понять. Пишу подобные программы впервые. До этого имел опыт разве что работы с ардуинкой.

Я скачал программу Serial Port Monitor, и прослушал порт, что бы понимать что там происходит.
Из того что я понял приложение отправляет в порт сообщение. Но в ответ получает нули. (почему?..) Я тестировал и приём данных и запись. Оба варианта дают ошибку.
В компьютер от ТРМ в USB воткнут вот этот конвертер. (напомню что Owen Monitor с ним нормально работает)
84721


Что я делаю не так? И как должно быть?

Мне нужно всего-то вывести данные с 6 таких ТРМов в приложение большим шрифтом что бы видно было с далека. (поэтому увы Owen Monitor не подходит.)
Задача вроде простая но я стопарюсь на самом старте.



попытка чтения
84719


попытка записи
84720

melky
08.07.2025, 08:38
адрес в приборе настроен на 8 бит или на 11 бит? у Овен протокола вроде два варианта.

suiginto
08.07.2025, 09:31
адрес в приборе настроен на 8 бит или на 11 бит? у Овен протокола вроде два варианта.
Я в Owen monitor видел выбор 8N1, и с этими настройками он работал. Это как раз 8 бит , отсутствие бита четности, и 1 стоповый бит.

melky
08.07.2025, 09:36
Я не про скорость и настройки порта, я про адресацию устройства, для протокола Овен там адрес или 8 бит или 11 бит если не ошибаюсь.


Структура кадра протокола ОВЕН:
Маркер начала кадра — информирует о начале посылки.
Адрес прибора в сети — может быть 8 или 11 бит.
Бит запроса — равен 1, если это команда запроса параметра счётчика, 0 — если это ответ счётчика.

Александр Пинэко-Скворцов
08.07.2025, 10:04
Добрый день.
Обновлённые ТРМ с интерфейсом RS-485 не поддерживают протокол ОВЕН. Только Modbus RTU или Modbus ASCII.

Owen Monitor и Owen Configurator обращаются к прибору по Modbus.

suiginto
08.07.2025, 10:28
Добрый день.
Обновлённые ТРМ с интерфейсом RS-485 не поддерживают протокол ОВЕН. Только Modbus RTU или Modbus ASCII.

Owen Monitor и Owen Configurator обращаются к прибору по Modbus.

Какие тогда есть варианты общения с ним на C#? Что посоветуете для решения задачи?

Александр Пинэко-Скворцов
08.07.2025, 10:34
Какие тогда есть варианты общения с ним на C#? Что посоветуете для решения задачи?

Modbus - открытый протокол. Вы можете поискать реализации библиотек для C# в Интернете.

melky
08.07.2025, 11:07
suiginto вопрос по вашей конечной задаче при реализации на C# ?

как вариант, чтобы не заниматься писаниной всего и вся, используйте в качестве шлюза RapidScada, там Modbus мастер бесплатный из коробки, как и ядро Scada. Далее либо пишите на C# дополнение в Scada в тех частях, которые вам необходимы. Либо забирайте данные теми способами, которые предоставляет Scada.