Помогите чайнику, плиз

Добрый день, господа. Вы уж простите, если вопросы, которые я бы хотел прояснить, примитивны, может ответы на них где то рядом, но я их не вижу. Помогите чайнику, дайте ссылочку.
Суть: одна уважаемая организация заказала нам сделать им девайсик. У них умный дом, на Вашем контроллере, протокол modbus rtu. У нас опыта работы с Вашими контроллерами нет, RS485 modbus очень мало.
Был бы очень благодарен за любые советы, которые помогут нам решить эту задачу. Пока есть такие вопросы:

  • составляю таблицу регистров нашего девайса, какие адреса регистров мы можем использовать? есть ли у wirenboard ограничения, запрещенные диапазоны адресов.
  • у wirenboard есть общие для всех Modbus-устройств Wiren Board регистры, например здесь Карта регистров датчика WB-MS v.2 — Wiren Board. Вопрос, все регистры мы должны реализовать в своем девайсе, или какие то можно опустить (кроме modbus адреса, конечно.) Микроконтроллер у нас слабенький, софт на ассемблере, поэтому реализация необязательных функций нежелательно.
    Заранее благодарен за любые ответы.

С вашим девайсиком будет работать наш драйвер wb-mqtt-serial. Для вашего девайсика надо будет создать шаблон. Мы написали шпаргалку по протоколу Modbus. Почитайте все это. Если останутся вопросы - пишите.

Спасибо. Подскажите, оказываете ли Вы, ваша организация, услуги (платные разумеется). Задача согласовать карты регистров и создать шаблон. Запрограммировать интерфейс мы можем. А вот составлении карты регистров, а тем более создании шаблона, для нас дело новое. Хотелось бы избежать ошибок, сделать все грамотно.

Или, может посоветуете к кому можно обратиться?

Так, пойдем по порядку.
У нас поддержка Mosbus полноценная.
То есть работать будет как со всеми типами регистров так и с любыми адресами.
Нежелательно использовать так называемые “стандартные” регистры, их список тут, в таблице “общие”: Карта регистров модулей реле — Wiren Board

Очень прошу - не уподобляйтесь китайцам, предусмотрте настройку скорости шины (ну и стопбиты-четность тоже).
Оно и на Ардуинке реализуется несложно, могу дать пример.
Ну и заготовку шаблона сделаю, при необходимости.

Спасибо.
У нас заказчик, ну очень большая шишка, большой застройщик, сам в этой теме ни бум бум. Но хочет ставить наш девайс в свою систему умного дома. Вы мне подскажите вот что: сделаем мы карту регистров, сделаем драйвер в wirenboard, реализуем софт интерфейса. Но ведь надо же еще как то использовать этот драйвер в системе умного дома. Кто, как это делает? Нужен еще специалист, который сконфигурирует использование нашего девайса?

И еще: в описаниях везде указано, что формат данных 2 байта. Нельзя использовать 1 байт данных? Например u8? У Вас в таблице регистров есть адрес: 130 0x0082 Holding RW u8 Отключение индикатора состояния

Спасибо за ответы.

Когда Вы напишете шаблон (драйвер) своего устройства, обращаться с ним можно будет так же, как с любым другим, подключенным к WB - управлять из интерфейса, обращаться к нему из правил…
Правила - довольно простой движок ECMAScript, уверен что разберётесь.

Ну регистры Modbus сами по себе 16 бит. Можно интерпретировать их и как u8, конечно.
Здесь есть полный список поддерживаемых форматов данных.

1 лайк

Спасибо за ответы.
Скажите, делает ли паузу, и если делает, какую, клиент WB, после получения ответа от одного сервера, перед новым запросом к этому же или другому серверу. Спасибо.

Обычно - нет, никакой паузы, цель - максимально утилизировать шину.

Подскажите, по опыту, как лучше мониторить шину ведомым устройством. Я ведомый. Как определить конец сессии ведущего с другим ведомым? Как определить начало следующего запроса ведущего, который может быть адресован мне. Ведь таймаута нет.

Даже 3,5 байта нет?

Только то, что нужно по стандарту.
Разумеется, тишина в 3.5 символа там есть.

Вы пишете свой стек modbus?

[quote=“Alexander_Rakhman, post:12, topic:14786”]
Вы пишете свой стек modbus?
[/quote]Я делаю софт modbus для небольшого устройства. На слабеньком микроконтроллере, да еще и на ассемблере. Мне надо как то оптимизировать код, поэтому хотел мониторить шину так: идет запрос, адрес не мой, жду таймаут перед следующим запросом, адрес мой - обрабатываю.

Хм. Идея не очень. Например - запросы от мастера могут быть разной длины, напрмиер. Да, 99.9% - это чтение одного -двух регистров, но возможна и запись нескольких, да и ответы от устройств точно будет разной длины.Надо ориентироваться именно на тишину в шине, так вернее.

Спасибо.
“Надо ориентироваться именно на тишину в шине, так вернее.”

Именно это я и имел ввиду, просто некорректно выразился. Я жду таймаут не команды, а тишины. Не мой адрес - жду паузу (тишину). Просто я спросил Вас раньше, делает ли паузу мастер, Вы написали, что нет. “Обычно - нет, никакой паузы”, что меня поставило в ступор, как отслеживать обмен с другими ведомыми.

Пауза определяемая стандартом - да, я имел в виду что драйвер опрашивает регистры устройств шины без(если специально не настроить иное поведение) задержек.

Подскажите, пожалуйста, или дайте ссылку, где то читал не могу найти. Modbus - команда изменения адреса ведомого. Делает ли ведомый ответ? Если делает, какой адрес в ответе, старый или новый? Спасибо.

И если команда записи нового адреса ведомому идет с широковещательным адресом 00? Она выполняется? Какой ответ?

тут все в зависимости от того где в ведомом хранится адрес. Это не определено протоколом, у устройств производства Wirenboard значение адреса хранится/меняется в 0x80, у устройств других производителей, если изменение адреса предусмотрено то может происходить через другой регистр.

“Общие” регистры для устройств нашего производства тут: Таблица общих регистров — Wiren Board

Выполняется, для широковещательной ответа не предусмотрено.

Я не то имел ввиду. Не адрес регистра, а адрес ведомого. Вот мы меняем адрес устройства командой записи: 0х1А 0х06 0х00 0х80 0х00 0х1В CRC, меняем адрес устройства с 1А на 1В. Ответ ведомого 0х?? 0х06 0х00 0х80 0х00 0х1В CRC, какой адрес в начале ответа, старый 1А? или новый 1В?