Речь пойдет о китайском модуле реле с управлением через RS485/Modbus.
ссылка на Aliexpress https://aliexpress.ru/item/1005005307818322.html
Модуль предназначен для подключения в сеть RS485 с протоколом Modbus. Единственная его функция - управлять реле. Питание модуля от 12В.
Сам модуль выполнен достаточно качественно. В наличии все защитные диоды. Пайка качественная. МК STM32F030F4. Все как-бы заработало сразу, но очень быстро обнаружились проблемы.
1-я проблема. защитные супрессоры на каналах A B (RS485) впаяны вверх ногами. Т.е. в прямом включении диодов. Это ограничивает входной сигнал и перегружает хост драйвер, если соединить GND модуля и хоста. Как ни странно, даже с таким "зажатым" сигналом модуль продолжал работать. Видимо драйверу 485 хватало для распознавания полезного сигнала.
2-я проблема. Адрес устройства по умолчанию = 0x01. Чтобы назначить модулю новый адрес Modbus, нужно подключить его к хост-контроллеру и командой 0x10H на адрес 0x00 прописать регистр 0x00 нужным новым адресом (примеры ниже). Так вот после выключения питания модуль "забывает" присвоенный ему адрес. Это делает его абсолютно бесполезным.
Теперь решение проблем. Первая решается очевидно. Перепаиваем супрессоры.
![
](https://)
Вторая проблема сложнее. Нужно заменить код прошивки. Потыкав мультиметром выясняется куда и что подключено.
В МК STM32F030 нет EEPROM и на борту нет внешней памяти, поэтому просто используем последний килобайт флеш памяти для хранения адреса. Все-же молодцы STM сделав возможным прописывать "на лету" свой флеш.
Пишем код, заливаем в МК. На модуле сбоку выведен SWD интерфейс. Поэтому все просто.
С кодом я особо не мудрил. Поддерживается функция 0x05 Write Single coil. По адресу coil 0x00 управление реле. В ответ придет эхо отправленной команды. По всем остальным адресам coil ничего не произойдет, просто придет эхо. Можно использовать для определения, что модуль online. Вторая команда на смену адреса модуля такая-же, как и было у китайцев в описании. Только теперь адрес пишется во флеш. В общем-то и все. Можно покупать модуль и тратить минут пять на его переделку, потому как вариантов на Алиэкспресс я и не нашел.
Вот проект под CubeIDE. Внутри есть готовый файл для прошивки \relay\Debug\relay.hex.
Примеры команд
Set the address to: 01
00 10 00 00 00 01 02 00 01 6A 00// Modified to 01
Set the address to: 02
00 10 00 00 00 01 02 00 02 2A 01// Modified to 02
Set the address to: 03
00 10 00 00 00 01 02 00 03 EB C1// Modified to 03
Relay No. 1 is on: 01 05 00 01 FF 00 DD FA
Relay No. 1 is closed: 01 05 00 01 00 00 9C 0A
//-------------------------------------------
Relay No. 2 is on: 01 05 00 02 FF 00 2D FA
Relay No. 2 is closed: 01 05 00 02 00 00 6C 0A
//-------------------------------------------
Relay No. 3 is open: 01 05 00 03 FF 00 7C 3A
Relay No. 3 is closed: 01 05 00 03 00 00 3D CA
//-------------------------------------------
Relay No. 4 is on: 01 05 00 04 FF 00 CD FB
Relay No. 4 is closed: 01 05 00 04 00 00 8C 0B