Получение идентификационной информации Modbus-функция 0x11 Report Slave Identification в поле Additional Data ответного пакета возвращает служебную информацию об устройстве в виде zero-terminated строк в таком порядке: Название устройства (BTE-5DI.21RO.4AI) Версию программного обеспечения Уникальный идентификатор устройства (12-байтное 16-ричное число в виде ASCII-строки) Ответ на этот запрос, отправленный на адрес 0, отправляют все устройства, используя простой механизм избежания коллизий на шине. Таким образом, можно получить список всех устройств этого типа на шине, отправив один запрос и ожидая ответы с таймаутом в 1 сек после каждого. Задание Modbus-адреса по уникальному идентификатору устройства Для задания Modbus-адреса по уникальному идентификатору устройства используется нестандартная функция 0x42. В первых 12 байтах отправляемого пакета должен находиться уникальный идентификатор устройства, в 13-м - назначаемый адрес. Ответ на этот пакет присылает только устройство с заданным уникальным идентификатором.
Комментарии: 12
Dmitry
Хороший вопрос - а что за механизм? Вот допустим, все железки получили широковещательный пакет на запрос ID одновременно. По идее, что им мешает одновременно проверить занятость шины и убедившись, что всё ок, совершенно одновременно начать передачу?
Anonim
Рандомное же время)
Lexszero
говорю же, рандомная задержка
Dmitry
а зачем бродкаст-то? всего 255 устройств — можно каждое опросить
Lexszero
ну так у всех адрес не задан
Dmitry
а пусть задан
Anonim
Ответь потом на вопрос: как рандом делал
Lexszero
http://bpaste.net/show/7ccef42a3971
Dmitry
У F4 серии есть же генератор. А так, вариантов куча. Например, приментить LFSR к CPUID А я бы взял LFSR. Алгоритм там простой
Anonim
Lexszero
мне было максимально лень думать и я взял первый попавшийся кусок кода с вики. worse is better, KISS, вот это все.
Dmitry
А, всё, вопросов нет. Но со стандартом совместимо жуть как плохо, увы