Доброго времени суток.
Есть контроллер в котором реализована собственная ретрансляция по modbus. Выглядит это так - одна modbus-команда обёрнута в другую. ПЛК извлекает из внешней команды внутреннюю и выполняет её. Затем в такой же обёртке возвращается ответ.
От приложения на LabVIEW требуется записывать в COM-порт и считывать modbus-команды, не соответствующие стандарту modbus.
В наличии - LabVIEW 2020 с пакетом DSC.
Подскажите, пожалуйста, какой программный инструмент использовать для решения этой задачи? Может есть библиотеки, позволяющие передавать в COM-порт произвольную команду modbus?
Инструмент для работы с COM-портом через RS-485
-
Borjomy_1
- doctor

- Сообщения: 2311
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 33 раза
- Поблагодарили: 37 раз
Re: Инструмент для работы с COM-портом через RS-485
ищите древнюю библиотеку "NI Modbus.llb" изготовления аж Labview 8.6. Это комплект для работы с COM и TCP, полностью с исходниками. Ее достаточно просто модифицировать под свои нужды.
- Вложения
-
- NI Modbus.llb
- взято из под Labview 2020
- (2.43 МБ) 30 скачиваний
-
rsv
- advanced

- Сообщения: 189
- Зарегистрирован: 18 июл 2019, 13:53
- Версия LabVIEW: 2020
- Откуда: Россия, Ижевск
- Благодарил (а): 39 раз
- Контактная информация:
Re: Инструмент для работы с COM-портом через RS-485
Спасибо, буду разбираться. Я начал смотреть на VISA, но пока не смог осмыслить, подойдёт она мне или нет...
-
alerm
- leader

- Сообщения: 703
- Зарегистрирован: 02 май 2012, 21:28
- Награды: 1
- Версия LabVIEW: 20
- Благодарил (а): 70 раз
- Поблагодарили: 12 раз
- Контактная информация:
Re: Инструмент для работы с COM-портом через RS-485
Вот ещё можно попробовать
ni_lib_modbus_library-1.2.1.42.vip
ni_lib_modbus_library-1.2.1.42.vip
-
rsv
- advanced

- Сообщения: 189
- Зарегистрирован: 18 июл 2019, 13:53
- Версия LabVIEW: 2020
- Откуда: Россия, Ижевск
- Благодарил (а): 39 раз
- Контактная информация:
Re: Инструмент для работы с COM-портом через RS-485
С помощью технологии VISA удалось записывать в COM-порт произвольную строку и считывать. Приложил скриншот и vi в архиве. Модуль создан на основе штатного примера из LabVIEW.
- Вложения
-
VISA.7z- (20.57 КБ) 6 скачиваний
-
IvanLis
- guru

- Сообщения: 5689
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 35 раз
- Поблагодарили: 128 раз
Re: Инструмент для работы с COM-портом через RS-485
Не нужно выкладывать неудачные примеры, если у Вас получилось, это случайность и с закономерностью не имеет никакой связи.rsv писал(а): 09 апр 2026, 10:08 С помощью технологии VISA удалось записывать в COM-порт произвольную строку и считывать. Приложил скриншот и vi в архиве. Модуль создан на основе штатного примера из LabVIEW.
1. Если в строке будет терминальный бит, он по умолчанию "\n" = LF, то строка полностью принята не будет.
2. Если за указанное время delay строка полностью не будет передана, то и принята полностью не будет.
3. Это уже мелочи, но если в буфере была информация до начала записи, то строка будет искажена.
Если Вы хотите передать строку полностью, то вначале нужно передать ее длину в байтах, а потом ожидать определенное количество байт, все просто.... как то так, если без остальных настроек
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение Картинку или Файл
Как добавить в сообщение Видео
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение Картинку или Файл
Как добавить в сообщение Видео
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
rsv
- advanced

- Сообщения: 189
- Зарегистрирован: 18 июл 2019, 13:53
- Версия LabVIEW: 2020
- Откуда: Россия, Ижевск
- Благодарил (а): 39 раз
- Контактная информация:
Re: Инструмент для работы с COM-портом через RS-485
Спасибо за советы и пример.
Т.к. приведённый код работал, то у меня не было оснований считать это случайностью и неудачным примером.IvanLis писал(а): 09 апр 2026, 20:41 Не нужно выкладывать неудачные примеры, если у Вас получилось, это случайность и с закономерностью не имеет никакой связи.
Я правильно понимаю, что буфер порта VISA работает по принципу FIFO - при считывании порции данных эти данные удаляются из буфера и на их место приходят следующие в очереди? Данные накапливаются в буфере пока не будут считаны?IvanLis писал(а): 09 апр 2026, 20:41 Если Вы хотите передать строку полностью, то вначале нужно передать ее длину в байтах, а потом ожидать определенное количество байт, все просто....
-
IvanLis
- guru

- Сообщения: 5689
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 35 раз
- Поблагодарили: 128 раз
Re: Инструмент для работы с COM-портом через RS-485
В принципе да, за исключением того, что размер буфера не безграничен.rsv писал(а): 15 апр 2026, 15:16 Я правильно понимаю, что буфер порта VISA работает по принципу FIFO - при считывании порции данных эти данные удаляются из буфера и на их место приходят следующие в очереди? Данные накапливаются в буфере пока не будут считаны?
Обычно он 4096 byte, но не факт, порты могут запоминать предыдущие настройки.
Но при необходимости можно размер изменить используя функцию VISA Set I/O Buffer Size Function
Если Вам прям большие объемы передавать нужно, то делайте это блоками (пакетами). Мне ни разу не приходилось увеличивать размер буфера, всегда получается влезть в этот размер.
Вам например кажется, что Вы в Modbus сразу 1000 регистров пишите, а на самом деле все разбивается на пакеты. Там ограничение PDU 253 byte на транзакцию, это получается примерно 123 регистра.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение Картинку или Файл
Как добавить в сообщение Видео
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение Картинку или Файл
Как добавить в сообщение Видео
Конвертация / версий (форматов) VI
Как правильно задать вопрос...