У меня в распоряжении есть целых два старых модуля, которые не поддерживают обновление прошивки, и в них нельзя поменять скорость обмена. Я с интересом залез внутрь самого простого: WB-MR2, не Мини. Модуль собран на контроллере STM32, внутреннее устройство весьма простое, грех не попробовать его похакать.
Первая попытка была сделана в среде Ардуино. К сожалению У неё тяжеленный рантайм, приложение с библиотекой mobdus не влезло в память контроллера. Пришлось осваивать инструментарий от STM.
На даный момент поддерживается только эта плата и её базовый функционал: два реле и две кнопки. Т. е. то, с чего начали. Разработка продолжается, но интересующиеся уже могут заглянуть сюда: https://github.com/Sonic-Amiga/OpenWB
Прошивка распространяется по GPL v3.
Почему я считаю что это интересно:
Ну во-первых потому что я это уже сделал для себя лично.
Можно портировать на другие контроллеры и аппаратную часть. Создавайте свои модули с любым количеством входов и выходов.
Теперь можно экспериментировать с внутренней логикой. Двойное, тройное нажание? Длинное нажатие? Пожалуйста! Хотите управлять внешней нагрузкой по сигналам от датчиков? Нет проблем. Расширяйте функционал уже имеющейся у вас аппаратуры.
Не нравится ModBus? Реализуйте свой протокол, например CAN.
Если кому-то это интересно, добро пожаловать в проект!
Планы:
Совместимость с регистрами конфигурации новых версий.
Поддержка WB-MR3 (мой второй снятый модуль)
Большое спасибо компании WirenBoard за такой дружественный к разработчику девайс!
Моя прошивка заливается через ST-Link. Схема подключения прилагается.
Разумеется, я рассмотрел потроха вашего заливателя. Сам по себе он не интересен и скучен, прошивка зашифрована и расшифровывается уже на борту. Ребята вроде тех, что кололи Энигму, возможно, восстановят бинарник на раз-два, вряд-ли алгоритм мегасложен в силу ограниченности ресурсов устройства. Но я силён в программировании куда больше, чем в криптоанализе, мне было проще написать с нуля. К тому же это уважает Вашу интеллектуальную собственность
В принципе я могу написать и загрузчик, даже совместимый с вашим прошивальщиком (бинари, правда, возьмёт только свои), но мне лень ибо нет острой нужды на данный момент.
Я к тому что новые устройства стереть с помощбю st-link не получится - чип залочен битом защиты. Дешевле заказать непрошитые или сдуть МК и поменять на чистый.
UPD: Непрошитые заказать будет скорее нельзя. Так как тестировать их не получится…
@BrainRoot Если вам интересно, в процессе разработки высветились баги оригинальной прошивки:
Не делает различий между Input registers и Holding registers, отвечает на оба кода функции. Возможно сделано для экономии памяти.
При попытке обратиться к несуществующему регистру выдает InvalidValue; по стандарту должно быть InvalidAddress
Некоторое железо, например вот такой вот адаптер (https://amperkot.ru/msk/catalog/modul_rs485-24327928.html) в сочетании с USB-to-serial на PL2303 производит шум при переключении направления, что выражается в мусоре в хвосте пакета. У меня с оригинальными модулями вообще напрочь теряется связь на скоростях выше 19200. Точнее в одну сторону: команду он примет, а ответ не придёт. Видимо алгоритм другой, мусор сбивает его с толку, он думает что это пакет такой. Я у себя тоже мусор наблюдал в виде одного байта, застрявшего в FIFO. Лечится принудительным Flush порта после обработки пакета. А длину пакета я определяю по коду функции, что немного не совпадает со стандартом, зато работает надёжно.
Что интересно, влияет именно сочетание оборудования. Тот же адаптер RS485 у меня работает в продуктовой инсталляции на RaspberryPi 4 вообще без проблем.
хорошее замечание, за инфу спасибо. у меня много датчиков подключены через такой адаптер к шине modbus (тот же CO2 SenseAir S8, который подключается проще некуда к Modbus через это устройство). Но я на всяких случай решил разделить несколько modbus линий… для всех исполнительных WB-реле у меня одна линия (планирую на больших скоростях), для всем моих датчиков (температуры, co2…) другая линия на скорости 9600.