|
Тоже столкнулся с такой проблемой:
Есть устройства с серийным номером (МАК), которые просто подключаются к RS485 в произвольном порядке.
Надо было без "беготни" по точкам определять конфигурацию сети, и назначать сетевые адреса (1..30).
Решил эту проблему не слишком корректно, но зато работает и быстро :)
ограничения:
1. работает только в одном сегменте RS485 (но у меня мастерами являются мосты Ethernet-> RS485, посему проблем с масштабированием нет)
2. необходима подтяжка линий RS485 (ибо в процессе сканирования линия должна находиться в состоянии 1)
Алгоритм примерно такой:
Мастер посылает слейвам широковещательную команду чтения конфигурации.
Устройства запускают цикл анализа состояния линии (бит RX) с дискретностью 100 мкс.
То устройство, счетчик цикла которого сравнивается с серийным номером, посылает пакет мастеру с преамбулой и признаком окончания. Тут же устройству и назначается сетевой номер. Мастер просто принимает этот пакет.
Остальные устройства, если обнаружили 0 (старт бит) в линии, делают паузу чуть более времени передачи пакета и продолжаеют прослушивание до окончания цикла.
Мастер тоже ждет время, необходимое для окончания сканирования всех серийных номеров ( с моем примере 10000, уходит на это всего примерное секунда)
Всякие тонкости в примере.
До этого пробовал всякие хэш функции и пр. - ненадежно и медленно. Разлуливать коллизии тоже не прокатывает в RS485...
У меня работает. Удачи.
Гудвин.
E-mail: info@telesys.ru