Ошибка тайм-аута ModBus

Кто-нибудь имеет большой опыт работы с Modbus и RS-485 ???

Моя задача - управлять двигателем постоянного тока с помощью микро PIC24. Настройки двигателя, такие как угол, задержка, пуск/останов, рабочий цикл и т. д., будут отправлены с ПК с помощью Modbus на PIC24.

Система такая:

PIC24 -> UART -> IC MAX3471 -> Преобразователь RS-485 в RJ-45 -> RJ-45 в USB -> ПК (работает утилита modbuspoll)

Используемый формат Modbus — Modbus RTU.

Во-первых, работает функция регистра временного хранения данных Modbus и функция записи одного регистра. Но после того, как я отправил некоторые настройки двигателя с помощью функции записи единого регистра Modbus, двигатель начал работать, и тогда связь Modbus всегда была ошибкой тайм-аута.

И как только произойдет ошибка тайм-аута, в следующий раз, когда я снова включу систему, она будет продолжать выдавать ошибку тайм-аута. введите описание изображения здесьЯ попытался изменить скорость передачи UART с 9600 до 115200. Попробуйте заменить плату преобразователя RS-485 в RJ-45 (на случай, если она сломается), явления просто повторяются.

Может ли кто-нибудь дать мне несколько советов о том, что может быть возможной причиной?

Также я не уверен в этом, в формате Modbus RTU в начале и конце должно быть 28 бит (минимум длина 3 1/2 символа), но должен ли код микро прошивки заботиться об этом, так как при использовании ПК инструмент modbuspoll?

Я прослушиваю сигнал A и B с помощью логического анализатора, если я отправляю какой-либо символ с uC на RS-485 (но не подключен к ПК), символ правильно отображается в строке A и B. Но если я нажимаю сигнал линии A и B, когда я отправляю функцию чтения регистра хранения с ПК с помощью опроса Modbus (выдает ошибку тайм-аута), я получаю какой-то странный сигнал:

введите описание изображения здесь

Таким образом, похоже, проблема не в коде прошивки UC, а в одном из них: конвертере USB в RS-485, прямом кабеле Ethernet или интерфейсной плате RS-485. Вот преобразователь USB в RS-485, который я использовал:введите описание изображения здесь

и плата интерфейса RS-485:введите описание изображения здесь

Ответы (1)

В некоторых случаях пуск двигателя или какие-либо мощные устройства создают помехи при сигнале заземления. Если у вас нет хорошего заземления шасси и экранирования, это повлияет на ваш сигнал.

для отладки: 1) запустите ваш контроллер без большой нагрузки, просто проверьте контроллер со светодиодом или любой небольшой нагрузкой, после включения / выключения светодиода, если у вас есть проблема, у вас проблема с кодом и реализацией .

2) если у вас нет проблем на первом этапе, вы должны проверить заземление и заземление шасси.

Рекомендация : если вы работаете с высоковольтной нагрузкой, в целях безопасности лучше использовать изолированный модуль USB_to_485.

Я тоже больше подозреваю аппаратную проблему, а не код прошивки. Потому что у Modbus нет проблем со связью при использовании USB-модуля последовательного порта (FT232R).
Как правильно заземлить шасси? Должен ли я просто скрутить кабель на винте и подключить его к заземлению моего источника питания?
@Qrenz, какой у тебя тип двигателя? например, Отрежьте длину провода
@M KS: бесщеточный двигатель постоянного тока с редуктором 12 В, диаметр вала 28 мм. Хорошая идея, попробую.
Скорее, вам не следует заземлять сигнальную землю RS-485 непосредственно на шасси. Это заземление должно быть намного раньше, когда заземление входит в подсистему. Однако в случае экранирования его следует заземлить на шасси на одном конце провода.
@Qrenz Я думаю, проблема будет решена, если вы используете изолированный USB_to_serial. Экранирование и заземление имеют много хитростей и зависят от конфигурации вашей схемы и механизма распределения питания.
Сегодня я только что изменил/улучшил свой код прошивки UART, чтобы улучшить буферизацию и обработку переполнения данных. Но все равно выдает ошибку тайм-аута... Крайний срок проекта - конец ноября...
Мне все еще интересно, почему Modbus работает очень гладко, когда я просто использую коммутационную плату FT232R, но продолжаю выдавать ошибку тайм-аута при использовании RS-485?
@Qrenz IS Ft232 base USB_to_485 работает, а другой нет?
@M KS: Это работает очень гладко: uC (код modbus) - UART1 (Tx Rx Gnd) - коммутационная плата FT232R - USB-кабель - ПК (опрос modbus) Но это всегда ошибка тайм-аута: uC (код modbus) - UART2 (Tx Rx EN Gnd 3,3 В) - MAX3471 (на одной плате с uC) - 6 кабелей (AB TxLED RxLED Gnd 3,3 В) - плата RS-485 на RJ-45 - кабель Ethernet, прямой - кабель-переходник RJ-45 на USB - ПК ( опрос Modbus). Менеджер проекта хочет использовать Ethernet RS-485, так как в будущем он планирует управлять более чем одним устройством, он не хочет использовать USB для последовательного соединения. А этот проект фактически остался от бывшего сотрудника, я его продолжаю.
@Qrenz Какой чип внутри (кабель-преобразователь RJ-45 в USB)? Это система на базе FT232? Если у вас есть прицел, проверьте контакт управления направлением на стороне микроконтроллера. задержка в контрольном контакте может повредить пакет Modbus
@M KS Чип основан на FTDI, когда я смотрю на установленный драйвер в диспетчере устройств. Вы имеете в виду, что вывод разрешения для MAX3471 переключается с выхода на вход и наоборот? На данный момент я установил задержку 2 мкс для переключения с приема на передачу и наоборот, этого достаточно? У меня есть только логический анализатор (saleae), я планирую завтра подключить сигнал A и B, чтобы увидеть (потому что, если я правильно помню, я никогда не видел, чтобы светодиод на порту RJ-45 мигал). Кроме того, я только что видел в таблице данных MAX3471 скорость передачи данных fMAX составляет 64 кбит / с, а моя скорость UART была установлена ​​​​на 115200, может быть, мне следует снизить ее до 9600 бит / с?
@Qrenz fMAX - это минимум 64K, это не проблема, некоторые RJ-45 имеют омическое соединение! Проверьте управление RX и TX и Dir с помощью логического анализатора.
@M KS Я проверил сигнал A и B RS-485 с помощью логического анализатора, если я отправляю какой-либо символ из микро, то все в порядке, символ отображается правильно в строке, но проблема в данных, которые были отправлены с ПК сторона, это неправильно отображается в строке... (я отредактировал свой главный вопрос)