Есть приложение wpf, которое общается с устройством, которое подключается по rs485 и работает по протоколу modbus.
Пример чтения регистров:
запрос - 01 03 00 00 00 02 C4 0B
Где:
Первый байт - номер устройства (адрес)
Второй байт - номер функции (03 = чтение регистров)
Третий и четвертый - адрес начала регистров (0000)
Пятый и шестой - количество регистров (0002)
Последние два байта - контрольная сумма.
Ранее было известно какой адрес был у устройства. После прихода новых железок, адреса стали меняться, а широковещательный запрос (0х00) стал не проходить. Нужно реализовать настройку на работающее устройство.
У меня есть команда на чтение byte {}= (0х01, 0x03,0x00 ,0x00, 0x00, 0x02, 0xC4, 0х0B)
Все классно, если известен адрес. Но как сделать корректно перебор адресов? т.е. сначала отправляем (0х01, 0x03,0x00 ,0x00, 0x00, 0x02, 0xC4, 0х0B), если нет ответа (0х02, 0x03,0x00 ,0x00, 0x00, 0x02, ..,..),если нет (0х03, 0x03,0x00 ,0x00, 0x00, 0x02, ..,..) итд.
Адрес находится в диапазоне от 1 до 254, т.е. занимает 1 байт.
ПО стандарту modbus должно быть до 247 вроде бы, хотя если железка не полностью соответствует стандарту может и 254. Другого способа нет. Хотя возможно есть другой способ подключения. У меня например встречался прибор при подключении по USB которому ни адрес ни скорость не нужен, да их надо указать, но можно любые. может и там также?
Сборка персонального компьютера от Artline: умный выбор для современных пользователей