Вы же dll используете. Вот и васёкMaks1m писал(а): 08 сен 2025, 18:01 Помогите разобраться, причём тут Visual Basic 6? Хорошо, в Windows10 с VB6 не работают функции записи, но с МУ110 я работаю в LabVIEW, что не забыл указать в своём запросе.
Протокол Овен для VISA
-
Artem.spb
- professor

- Сообщения: 3643
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 61 раз
- Поблагодарили: 200 раз
- Контактная информация:
Re: Протокол Овен для VISA
-
dadreamer
- professor

- Сообщения: 3998
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 9
- Версия LabVIEW: 2.5 — 2025
- Благодарил (а): 14 раз
- Поблагодарили: 149 раз
Re: Протокол Овен для VISA
Тут, скорее всего, копи-паста с чужого кейса, где пользователь пытался подключить owen_io.dll к своему проекту на VB, у него не получалось и он обратился в ТП.Библиотека функций WIN DLL реализована на С++ и предназначена для связи с приборами ОВЕН, поддерживающими сетевой интерфейс RS-485 и «токовая петля».
Я уж тоже подзабыл VB, из быстрого гуглинга получается, что есть два типа передачи параметра: по значению (ByVal) и по ссылке (ByRef). Если ByVal не указано, по умолчанию используется ByRef. Попробуйте для параметра value поставить Pass = Pointer to Value. Хотя, это странно, даже в заголовочном файле для WriteFloat24 параметр по значению передаётся. Соглашение о вызовах _stdcall, тоже проверьте.Maks1m писал(а): 08 сен 2025, 18:01Как мне это знание применить к моей проблеме? Что надо исправить? С VB не знаком.
На сайте ещё на .NET есть либа, её пробовали?
-
Maks1m
- interested

- Сообщения: 5
- Зарегистрирован: 04 сен 2025, 12:04
- Версия LabVIEW: 13/17
- Благодарил (а): 1 раз
- Контактная информация:
Re: Протокол Овен для VISA
Точно, там ведь на странице с библиотекой у них С++ указано, не обращал внимания + не очень хотелось верить, что снова от ТП получил копипасту.dadreamer писал(а): 08 сен 2025, 21:34Тут, скорее всего, копи-паста с чужого кейса, где пользователь пытался подключить owen_io.dll к своему проекту на VB, у него не получалось и он обратился в ТП.Библиотека функций WIN DLL реализована на С++ и предназначена для связи с приборами ОВЕН, поддерживающими сетевой интерфейс RS-485 и «токовая петля».
Благодарю за ответ,dadreamer писал(а): 08 сен 2025, 21:34 Я уж тоже подзабыл VB, из быстрого гуглинга получается, что есть два типа передачи параметра: по значению (ByVal) и по ссылке (ByRef). Если ByVal не указано, по умолчанию используется ByRef. Попробуйте для параметра value поставить Pass = Pointer to Value. Хотя, это странно, даже в заголовочном файле для WriteFloat24 параметр по значению передаётся. Соглашение о вызовах _stdcall, тоже проверьте.
На сайте ещё на .NET есть либа, её пробовали?
попробовал передать значение по ссылке, но функция WriteFloat24 вернула -104, т.е. ошибку. Сами значения ошибок пока не смотрел, но полагаю, что в данном случае причина известна.
В соглашениях да, stdcall стоит.
Библиотеку .NET себе скачал, но пока еще не распробовал. Напишу снова в ТП за новой копипастой, а тем временем пойду смотреть как дотнет-либа в LabVIEW используется
-
Maks1m
- interested

- Сообщения: 5
- Зарегистрирован: 04 сен 2025, 12:04
- Версия LabVIEW: 13/17
- Благодарил (а): 1 раз
- Контактная информация:
Re: Протокол Овен для VISA
Круг замкнулся
В ТП ответили, что по ссылке в функции WriteFloat24 нельзя передавать параметр, надо по значению:
Кажется, я угодил в цикл
В ТП ответили, что по ссылке в функции WriteFloat24 нельзя передавать параметр, надо по значению:
Буквально предлагают вернуться к тому варианту, с которым я и обратился изначально к ТП.Ошибка -104 возникает потому, что вы изменили способ передачи параметра value на "Pointer to Value" (Указатель на значение). Функция WriteFloat24 ожидает само число, а не ссылку на него. Верните настройку "Pass" для параметра value обратно на "Value" (Значение).
Когда вы в LabVIEW устанавливаете Pass: Pointer to Value:
LabVIEW выделяет в памяти 4 байта.
Записывает в эту память ваше значение 1.0.
Передает в функцию адрес этой ячейки памяти (указатель).
Функция WriteFloat24 ожидает получить само значение 1.0 (4 байта, представляющие число), а вместо этого получает адрес (4 или 8 байт, которые как число с плавающей точкой являются бессмыслицей). DLL пытается интерпретировать этот адрес как число, формирует некорректный пакет данных для отправки устройству, и в результате вы получаете ошибку от протокола, в данном случае -104.
Откройте окно конфигурации вызова owen_io.dll:WriteFloat24.
Перейдите на вкладку Parameters.
В списке слева выберите параметр value.
Справа установите следующие настройки:
Name: value
Type: Numeric
Data type: 4-byte Single
Pass: Value (Передача по значению)
Именно настройка Pass: Value обеспечит корректную передачу самого числа 1.0 в функцию, как того и ожидает DLL.
Пожалуйста, верните в настройках вызова WriteFloat24 для параметра value способ передачи на "Value". Это должно решить проблему с ошибкой -104 и позволить корректно задать напряжение на выходе МУ110.
Кажется, я угодил в цикл
-
Maks1m
- interested

- Сообщения: 5
- Зарегистрирован: 04 сен 2025, 12:04
- Версия LabVIEW: 13/17
- Благодарил (а): 1 раз
- Контактная информация:
Re: Протокол Овен для VISA
Доброго времени суток!
В ТП начали давать конкретные советы, но пока выход МУ110 хранит тишину.
Тем временем изучаю OwenioNet библиотеку (https://owen.ru/product/biblioteka_win_dll) и пытаюсь параллельно работать с LabVIEW, но споткнулся буквально с порога. С .Net не то, чтобы знаком. Прежде приходилось работать с LTRмодулями от l-card через подключение .Net библиотеки, так там от разработчиков есть очень наглядные примеры в LabVIEW.
В пункте 1 описаны принципы работы с библиотекой. Для отправки запроса на запись параметра используется метод OwenWrite. Вероятно, он-то мне и нужен.
Вызывается данный метод через класс OwenProtocolMaster.

Но чтобы этим пользоваться, нужно создать объект, как я понимаю (что-то надо подать на вход reference). Вот тут у меня и загвоздка. Сам объект класса OwenProtocolMaster у меня создать через ConstructorNode не получается, пишет "This class contains no public constructors".

Есть еще OwenioNet.IO, объект там создаёт класс SerialPortAdapter (по сути стандартный класс SerialPort, который включили в библиотеку Овена)

Через InvokeNode могу закрывать/открывать порт, считывать и записывать массив байт через параметр buffer.
Но к OwenProtocolMaster это не имеет отношения и метод OwenWrite использовать это также не позволит.
В конечном итоге вопрос у меня следующий, помогите советом или небольшим примером: как в LabVIEW реализовать метод OwenWrite? Примеров от разработчика, как я понимаю, на данный момент не существует.
В ТП начали давать конкретные советы, но пока выход МУ110 хранит тишину.
Тем временем изучаю OwenioNet библиотеку (https://owen.ru/product/biblioteka_win_dll) и пытаюсь параллельно работать с LabVIEW, но споткнулся буквально с порога. С .Net не то, чтобы знаком. Прежде приходилось работать с LTRмодулями от l-card через подключение .Net библиотеки, так там от разработчиков есть очень наглядные примеры в LabVIEW.
В пункте 1 описаны принципы работы с библиотекой. Для отправки запроса на запись параметра используется метод OwenWrite. Вероятно, он-то мне и нужен.
Вызывается данный метод через класс OwenProtocolMaster.
Но чтобы этим пользоваться, нужно создать объект, как я понимаю (что-то надо подать на вход reference). Вот тут у меня и загвоздка. Сам объект класса OwenProtocolMaster у меня создать через ConstructorNode не получается, пишет "This class contains no public constructors".
Есть еще OwenioNet.IO, объект там создаёт класс SerialPortAdapter (по сути стандартный класс SerialPort, который включили в библиотеку Овена)
Через InvokeNode могу закрывать/открывать порт, считывать и записывать массив байт через параметр buffer.
Но к OwenProtocolMaster это не имеет отношения и метод OwenWrite использовать это также не позволит.
В конечном итоге вопрос у меня следующий, помогите советом или небольшим примером: как в LabVIEW реализовать метод OwenWrite? Примеров от разработчика, как я понимаю, на данный момент не существует.
Последний раз редактировалось Maks1m 10 сен 2025, 08:23, всего редактировалось 3 раза.
-
dadreamer
- professor

- Сообщения: 3998
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 9
- Версия LabVIEW: 2.5 — 2025
- Благодарил (а): 14 раз
- Поблагодарили: 149 раз
Re: Протокол Овен для VISA
Наверно, как-то так, но проверить не на чем.При работе с .NET узлами не забывайте уничтожать ссылки, когда они становятся не нужны - Dispose/Free (если есть такой метод), затем Close Ref. Серые входы можно не подключать, тогда там будут значения по умолчанию или NULL.
-
Maks1m
- interested

- Сообщения: 5
- Зарегистрирован: 04 сен 2025, 12:04
- Версия LabVIEW: 13/17
- Благодарил (а): 1 раз
- Контактная информация:
Re: Протокол Овен для VISA
Премного благодарен, не знал, что invoke может и таким образом работать, без прямого подключения ссылки сверхуdadreamer писал(а): 10 сен 2025, 17:52 Наверно, как-то так, но проверить не на чем.Untitled 1.viПри работе с .NET узлами не забывайте уничтожать ссылки, когда они становятся не нужны - Dispose/Free (если есть такой метод), затем Close Ref. Серые входы можно не подключать, тогда там будут значения по умолчанию или NULL.
Пока получилось вот такое: Ошибок не вызывает, связь ПК с прибором имеется (судя по гаснущему индикатору "Авария"), но и напряжение на выходе аналогично не генерирует. Вероятно, снова что-то упускаю.
В папке лежит еще OwenioNet.DataConverter. Я вручную конвертировал в PIC-формат, но может там по аналогии с OwenIO надо не байты посылать, а ASCII-кодировку, попробую через данную библиотеку.
Последний раз редактировалось Maks1m 11 сен 2025, 06:27, всего редактировалось 3 раза.
-
Maks1m
- interested

- Сообщения: 5
- Зарегистрирован: 04 сен 2025, 12:04
- Версия LabVIEW: 13/17
- Благодарил (а): 1 раз
- Контактная информация:
Re: Протокол Овен для VISA
В общем, через протокол ОВЕН никак, что с длл, что с дотнет. Техподдержка 5 из 5, с 10-го числа так и не отписалась, повторное обращение просто заигнорила. Ждать ответа или нет - непонятно
Зато через Modbus никаких проблем. Использовал библиотеку с гитхаба под LabVIEW: https://github.com/NISystemsEngineering ... Modbus-API
Пример генерации 3,5В на 4-м выходе МУ110: Полагаю, что новую линейку МУ110 H/W 2.0 производитель в свое время недотестировал со своим же протоколом и библиотекой, а конкретно функционал записи. По модбасу работает, "и так сойдет" (с).
Подвожу итог своего небольшого приключения: если кто-то столкнулся с аналогичной проблемой при использовании МУ110 H/W 2.0, то просто не теряйте времени с ОВЕН-протоколом.
Зато через Modbus никаких проблем. Использовал библиотеку с гитхаба под LabVIEW: https://github.com/NISystemsEngineering ... Modbus-API
Пример генерации 3,5В на 4-м выходе МУ110: Полагаю, что новую линейку МУ110 H/W 2.0 производитель в свое время недотестировал со своим же протоколом и библиотекой, а конкретно функционал записи. По модбасу работает, "и так сойдет" (с).
Подвожу итог своего небольшого приключения: если кто-то столкнулся с аналогичной проблемой при использовании МУ110 H/W 2.0, то просто не теряйте времени с ОВЕН-протоколом.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение