Инструмент для работы с COM-портом через RS-485

Обсуждение программ, пользовательского обеспечения, операционных систем
Ответить
rsv
advanced
advanced
Сообщения: 189
Зарегистрирован: 18 июл 2019, 13:53
Версия LabVIEW: 2020
Откуда: Россия, Ижевск
Благодарил (а): 39 раз
Контактная информация:

Инструмент для работы с COM-портом через RS-485

Сообщение rsv »

Доброго времени суток.

Есть контроллер в котором реализована собственная ретрансляция по modbus. Выглядит это так - одна modbus-команда обёрнута в другую. ПЛК извлекает из внешней команды внутреннюю и выполняет её. Затем в такой же обёртке возвращается ответ.

От приложения на LabVIEW требуется записывать в COM-порт и считывать modbus-команды, не соответствующие стандарту modbus.

В наличии - LabVIEW 2020 с пакетом DSC.

Подскажите, пожалуйста, какой программный инструмент использовать для решения этой задачи? Может есть библиотеки, позволяющие передавать в COM-порт произвольную команду modbus?
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2311
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 33 раза
Поблагодарили: 37 раз

Re: Инструмент для работы с COM-портом через RS-485

Сообщение Borjomy_1 »

ищите древнюю библиотеку "NI Modbus.llb" изготовления аж Labview 8.6. Это комплект для работы с COM и TCP, полностью с исходниками. Ее достаточно просто модифицировать под свои нужды.
Вложения
NI Modbus.llb
взято из под Labview 2020
(2.43 МБ) 30 скачиваний
rsv
advanced
advanced
Сообщения: 189
Зарегистрирован: 18 июл 2019, 13:53
Версия LabVIEW: 2020
Откуда: Россия, Ижевск
Благодарил (а): 39 раз
Контактная информация:

Re: Инструмент для работы с COM-портом через RS-485

Сообщение rsv »

Borjomy_1 писал(а): 21 янв 2026, 12:31 Ее достаточно просто модифицировать под свои нужды.
Спасибо, буду разбираться. Я начал смотреть на VISA, но пока не смог осмыслить, подойдёт она мне или нет...
Аватара пользователя
alerm

Activity
leader
leader
Сообщения: 703
Зарегистрирован: 02 май 2012, 21:28
Награды: 1
Версия LabVIEW: 20
Благодарил (а): 70 раз
Поблагодарили: 12 раз
Контактная информация:

Re: Инструмент для работы с COM-портом через RS-485

Сообщение alerm »

Вот ещё можно попробовать
ni_lib_modbus_library-1.2.1.42.vip
rsv
advanced
advanced
Сообщения: 189
Зарегистрирован: 18 июл 2019, 13:53
Версия LabVIEW: 2020
Откуда: Россия, Ижевск
Благодарил (а): 39 раз
Контактная информация:

Re: Инструмент для работы с COM-портом через RS-485

Сообщение rsv »

С помощью технологии VISA удалось записывать в COM-порт произвольную строку и считывать. Приложил скриншот и vi в архиве. Модуль создан на основе штатного примера из LabVIEW.
Вложения
Simple Serial.png
VISA.7z
(20.57 КБ) 6 скачиваний
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5689
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 35 раз
Поблагодарили: 128 раз

Re: Инструмент для работы с COM-портом через RS-485

Сообщение IvanLis »

rsv писал(а): 09 апр 2026, 10:08 С помощью технологии VISA удалось записывать в COM-порт произвольную строку и считывать. Приложил скриншот и vi в архиве. Модуль создан на основе штатного примера из LabVIEW.
Не нужно выкладывать неудачные примеры, если у Вас получилось, это случайность и с закономерностью не имеет никакой связи.
1. Если в строке будет терминальный бит, он по умолчанию "\n" = LF, то строка полностью принята не будет.
2. Если за указанное время delay строка полностью не будет передана, то и принята полностью не будет.
3. Это уже мелочи, но если в буфере была информация до начала записи, то строка будет искажена.

Если Вы хотите передать строку полностью, то вначале нужно передать ее длину в байтах, а потом ожидать определенное количество байт, все просто....
string.png
как то так, если без остальных настроек
rsv
advanced
advanced
Сообщения: 189
Зарегистрирован: 18 июл 2019, 13:53
Версия LabVIEW: 2020
Откуда: Россия, Ижевск
Благодарил (а): 39 раз
Контактная информация:

Re: Инструмент для работы с COM-портом через RS-485

Сообщение rsv »

Спасибо за советы и пример.
IvanLis писал(а): 09 апр 2026, 20:41 Не нужно выкладывать неудачные примеры, если у Вас получилось, это случайность и с закономерностью не имеет никакой связи.
Т.к. приведённый код работал, то у меня не было оснований считать это случайностью и неудачным примером.
IvanLis писал(а): 09 апр 2026, 20:41 Если Вы хотите передать строку полностью, то вначале нужно передать ее длину в байтах, а потом ожидать определенное количество байт, все просто....
Я правильно понимаю, что буфер порта VISA работает по принципу FIFO - при считывании порции данных эти данные удаляются из буфера и на их место приходят следующие в очереди? Данные накапливаются в буфере пока не будут считаны?
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5689
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 35 раз
Поблагодарили: 128 раз

Re: Инструмент для работы с COM-портом через RS-485

Сообщение IvanLis »

rsv писал(а): 15 апр 2026, 15:16 Я правильно понимаю, что буфер порта VISA работает по принципу FIFO - при считывании порции данных эти данные удаляются из буфера и на их место приходят следующие в очереди? Данные накапливаются в буфере пока не будут считаны?
В принципе да, за исключением того, что размер буфера не безграничен.
Обычно он 4096 byte, но не факт, порты могут запоминать предыдущие настройки.
Но при необходимости можно размер изменить используя функцию VISA Set I/O Buffer Size Function

Если Вам прям большие объемы передавать нужно, то делайте это блоками (пакетами). Мне ни разу не приходилось увеличивать размер буфера, всегда получается влезть в этот размер.
Вам например кажется, что Вы в Modbus сразу 1000 регистров пишите, а на самом деле все разбивается на пакеты. Там ограничение PDU 253 byte на транзакцию, это получается примерно 123 регистра.
Ответить

Вернуться в «Софт»