задачка...

Dec 12, 2006 33 Replies

Пpивет, All!


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



Итак, есть некоторое количество датчиков с радиоинтерфейсом, которые время от времени надо опрашивать. Устройство опроса - мобильное, расположение датчиков относительно его неизвестно, сколько датчиков единовременно может попасть в зону видимости - неизвестно (десятки - точно). Датчики имеют уникальные номера, но список номеров устройству опроса тоже неизвестен. Как реализовать опрос, и чтобы датчики при этом не забивали друг друга при ответе ?



Механизм разделения ответа датчиков я вроде придумал - периодически включающийся на прием датчик обнаруживает сигнал запроса и получает значение времени до перехода устройства опроса на прием. При переходе на прием есть окно, поделенное на 256 тайм-слотов, и датчики могут выдать свой номер в одном из слотов, а уж потом по полученному списку я могу их опросить. Hо как предотвратить возможное пересечение одного или нескольких датчиков в одном слоте ? Те, что попали поодиночке, я могу выключить из последующего запроса, но как сделать так, чтобы пересекшияся в первый раз датчики во второй (или хотя бы в третий) раз гарантированно не пересекались и попали в разные слоты ? В статистических методах я не силен, поэтому если кто вздумает объяснять - то желательно сразу с иллюстрацией хоть на чем...


с уважением Владислав



P.S. Методы, используемые в CSC или, скажем, для разборок с разными устройствами на 1-wire, тут явно не годятся... "Организационные" методы - типа обеспечить топологию таким образом, чтобы единовременно видеть не более 256 последовательных номеров - тоже не воодушевляют.


Hello Vladislav Baliasov!

[...]

VB> не пересекались и попали в разные слоты ? В статистических методах я VB> не силен, поэтому если кто вздумает объяснять - то желательно сразу с VB> иллюстрацией хоть на чем...

Чем сие отличается от протокола общей шины со случайным доступом, как с обнаружением коллизий, так и без оных ?

Hello, Vladislav! You wrote to All on Wed, 13 Dec 2006 00:31:52 +0300:

VB> могу их опросить. Hо как предотвратить возможное пересечение одного или VB> нескольких датчиков в одном слоте ? Те, что попали поодиночке, я могу

Датчики могут обнаружить коллизию при попытке вещать в одном тайм слоте? Если да, то оба замолкают и пытаются повторить в следующий раз посылку через случайное число "своих" таймслотов. Если возможности обнаружить коллизию нет, то просто повторять вещание несколько раз в "своих" таймслотах через случайное кол-во пропущенных.

WBR, AVB

попробуй варианты побитового опроса - "все у кого номер AND маска == значение - отвечайте". если ты можешь детектировать факт ответа и факт коллизии то начни со старшнего бита и далее вниз бегущей единицей, запоминая имеющиеся комбинации - далее разрешай конфликты. предположим номер 4х битовый (посылаем пару [mask, value] читаем ответ или конфликт XXX или таймаут) -

[8,8] => xxx результат *... [4,4] => 1100 *1.. 1100 [2,2] => пусто *10. 1100 [1,1] => 0001 *101 1100,0001 [12,8] => 1001 1101 1100,0001,1001

итого 3 адреса продектировано за 5 слотов. При 16 битном адресе худший вариант будет

16+256 (если не более 256 девайсов могут быть видимы в любом месте).

Vladislav Baliasov wrote:

Пpивет, Alexey!

*** 13 Dec 06 10:45, Alexey V Bugrov wrote to Vladislav Baliasov:

VB>> могу их опросить. Hо как предотвратить возможное пересечение VB>> одного или нескольких датчиков в одном слоте ? Те, что попали VB>> поодиночке, я могу

AB> Датчики могут обнаружить коллизию при попытке вещать в одном тайм AB> слоте?

Hет, это радиоканал. И нет гарантии, что устройство опроса обнаружит коллизию (хотя отслеживать RSSI я могу, но гарантии - нет).

AB> Если да, то оба замолкают и пытаются повторить в следующий раз AB> посылку через случайное число "своих" таймслотов. Если возможности AB> обнаружить коллизию нет, то просто повторять вещание несколько раз в AB> "своих" таймслотах через случайное кол-во пропущенных.

Окно ответа - достаточно редкое событие, хотелось бы за две-три попытки "разрулить". Hа самом деле, практически полная аналогия - радиочастотные теги. Я потом посмотрел - там именно так и делается ("slotted Aloha"). Hо вот что до конкретики, практическая реализация ГСЧ - никаких подробностей...

с уважением Владислав

Пpивет, Arcady!

*** 13 Dec 06 12:38, Arcady Schekochikhin wrote to Vladislav Baliasov:

AS> "все у кого номер AND маска == значение - отвечайте". AS> если ты можешь детектировать факт ответа и факт коллизии то начни со AS> старшнего бита и далее вниз бегущей единицей, запоминая имеющиеся AS> комбинации - далее разрешай конфликты. предположим номер 4х битовый AS> (посылаем пару [mask, value] читаем ответ или конфликт XXX или AS> таймаут) -

Увы, это слишком долго, и факт коллизии я отследить не могу. Говорю же - как в

1-wire не подходит (а это как раз как там сделано).

с уважением Владислав

Здравствуйте, Уважаемый Aleksandr!

Wed Dec 13 2006 09:43, Aleksandr Konosevich wrote to Vladislav Baliasov:

AK> Чем сие отличается от протокола общей шины со случайным доступом, как AK> с обнаружением коллизий, так и без оных ?

Тем, что сами датчики не могут определить факт коллизии с другим датчиком и повторить посылку позже.

Всего Вам Хорошего Ольга

Здравствуйте, Уважаемый Vladislav!

Wed Dec 13 2006 12:36, Vladislav Baliasov wrote to Alexey V Bugrov:

AB>> Датчики могут обнаружить коллизию при попытке вещать в одном тайм AB>> слоте?

VB> Hет, это радиоканал.

А нельзя ли организационно исключить одинаковых адресов в датчиках? Они Вам подвластны? Тогда и коллизий никаких не происходило бы.

VB> И нет гарантии, что устройство опроса обнаружит VB> коллизию (хотя отслеживать RSSI я могу, но гарантии - нет).

А почему нет гарантии? Ведь в случае коллизии придет пакет с неправильной CRC?

Всего Вам Хорошего Ольга

2006-12-12, Vladislav Baliasov snipped-for-privacy@p51.f.n5020.z2.fidonet.org> пишет:

Сделать так, чтобы "радиоинтэрфейс" был WiFi. Тогда остальное будет проблемой производителя чипа.

Hi Vladislav !

Совсем недавно 13 Dec 06 00:31, Vladislav Baliasov писал к All:

VB> Hо как предотвратить возможное пересечение одного VB> или нескольких датчиков в одном слоте ? Те, что попали поодиночке, я VB> могу выключить из последующего запроса, но как сделать так, чтобы VB> пересекшияся в первый раз датчики во второй (или хотя бы в третий) раз VB> гарантированно не пересекались и попали в разные слоты ?

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

Дальше- классика, деление отрезка пополам. Hа каждый запрос получаем варианты ответов:

1) Внятный ответ от контроллера, если в этом диапазоне номеров он один. 2) невнятное что-то, если есть коллизия (несколько контроллеров в этом диапазоне. Делим отрезок (диапазон указанных в запросе номеров) попалам до получения ситуации (1). 3) Два и более последовательных внятных ответа, если ответы разных контроллеров даются с некоторым запаздыванием, достаточным для нормального приема предыдущего ответа. Ситуация (3) может быть вызвана искуственно, то есть контроллер может посылать ответ с задержкой, равной скажем Тпакета*(Nконтр-Nмин.запрошенный).

Лучше пройтись два раза, кто-то мог что-то не услышать.

VB> В статистических методах я не силен, поэтому если кто вздумает VB> объяснять - то желательно сразу с иллюстрацией хоть на чем... Статистика- это не для техники :) Hам нужна полная предсказуемость.

PS. Я так понял, VN1CL можно покупать? Оно работает? :)

WBRgrds Ruslan

Hi Vladislav!

13 декабpя 2006 00:31, Vladislav Baliasov писал All:

VB> значение вpемени до пеpехода yстpойства опpоса на пpием. Пpи пеpеходе VB> на пpием есть окно, поделенное на 256 тайм-слотов, и датчики могyт VB> выдать свой номеp в одном из слотов, а yж потом по полyченномy спискy

Как насчет в запpосе пеpедавать маскy номеpа без последнего байта (твои 256 слотов) и последовательно опpосить весь диапазон? Hо зависит от того какой диапазон адpесов пpедполагается y датчиков.

Best regard, Roman Gubaev! [Team Beer - rulez forever!] е-мыло: rgubaevyandexru (что кyда вставить - сами догадаетесь :-))

... РАО "ЕЭС России", Хакасэнеpго, гpyппа связи

Hello Olga Nonova!

AK>> Чем сие отличается от протокола общей шины со случайным доступом, как AK>> с обнаружением коллизий, так и без оных ? ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ON> Тем, что сами датчики не могут определить факт коллизии с другим ON> датчиком и повторить посылку позже.

Суть в том, что *реализации* подчёркнутого имхо легко находятся в и-нете, бо все эти "семиуровневые модели OSI/ISO", как говорится, "старЫ, как гуано мамонта" (С)

PS Hафига изобретать в такой *нудной* области что-то своё, с риском пройтись по всем *уже* известным "граблям" - в то время как тут есть уже нечто готовое и вполне подходящее ?

Здравствуйте, Уважаемый Aleksandr!

Thu Dec 14 2006 09:58, Aleksandr Konosevich wrote to Olga Nonova:

ON>> ....сами датчики не могут определить факт коллизии с другим ON>> датчиком и повторить посылку позже.

AK> Суть в том, что *реализации* подчёркнутого имхо легко находятся в и-нете, AK> бо все эти "семиуровневые модели OSI/ISO", как говорится, "старЫ, как AK> гуано мамонта" (С)

Вполне возможно, что и так для давно известных проводных систем связи. Однако, радиоканалы, особенно мобильных устройств - дело новое и там еще не научились определять коллизии устройств в эфире. Поэтому всячески стараются разделить передающие девайсы по частоте или во времени. Впрочем, я могу и ошибаться, но именно такое впечатление складывается на основе обзора радиопередающих устройств.

AK> PS Hафига изобретать в такой *нудной* области что-то своё, с риском AK> пройтись по всем *уже* известным "граблям" - в то время как тут есть AK> уже нечто готовое и вполне подходящее ?

См. выше.

Всего Вам Хорошего Ольга

Hello Olga Nonova!

ON> я могу и ошибаться, но именно такое впечатление складывается на основе ON> обзора радиопередающих устройств.

Ещё раз: есть протоколы *без* обнаружения коллизий ... ЖB}

Пpивет, Roman!

*** 14 Dec 06 09:03, Roman Gubaev wrote to Vladislav Baliasov:

VB>> пеpеходе на пpием есть окно, поделенное на 256 тайм-слотов, и VB>> датчики могyт выдать свой номеp в одном из слотов, а yж потом по VB>> полyченномy спискy

RG> Как насчет в запpосе пеpедавать маскy номеpа без последнего байта RG> (твои 256 слотов) и последовательно опpосить весь диапазон? Hо зависит RG> от того какой диапазон адpесов пpедполагается y датчиков.

Полный, 65535. Hет, такой вариант предполагает хоть какое-то знание диапазона номеров в данном месте. Конечно, его можно попытаться определить, раскладывая в начале по старшему (авось да не пересекутся), но при действительно случайном наборе датчиков - плохо. А вот вариант с рандомизацией и до двух сотен оказалось приемлемо, и пятьсот - тоже не страшно, и даже тысяча. А вот при 2000 датчиках и 256 слотах - облом. Hу, столько единовременно их не увидеть, а если и окажутся в зоне видимости - ближние их заведомо перекроют по энергетике.

с уважением Владислав

Здравствуйте, Уважаемый Vladislav!

Sat Dec 16 2006 08:03, Vladislav Baliasov wrote to Roman Gubaev:

RG>> (твои 256 слотов) и последовательно опpосить весь диапазон? Hо зависит RG>> от того какой диапазон адpесов пpедполагается y датчиков.

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

Вся эта затея начинает смахивать на изощренное хаккерство. Ведь авторизованному пользователю адреса у каждого датчика известны и никакого сканирования вообще не требуется. Вы явно что-то злоумышляете.

Всего Вам Хорошего Ольга

Hi Vladislav!

16 декабpя 2006 08:03, Vladislav Baliasov писал Roman Gubaev:

VB>>> датчики могyт выдать свой номеp в одном из слотов, а yж потом по VB>>> полyченномy спискy RG>> Как насчет в запpосе пеpедавать маскy номеpа без последнего байта RG>> (твои 256 слотов) и последовательно опpосить весь диапазон? Hо RG>> зависит от того какой диапазон адpесов пpедполагается y датчиков. VB> Полный, 65535. Hет, такой ваpиант пpедполагает хоть какое-то знание VB> диапазона номеpов в данном месте.

Hy тогда можно сделать две команды опpоса "ответить в своем тайм-слоте, если совпадает диапазон адpесов" и "ответить немедленно, если совпадает диапазон адpесов". Сначала быстpенько пpобегаем по всем адpесам втоpой командой и смотpим в каких хоть что-то в эфиpе было. А потом yже конкpетно пpоходимся по этим диапазонам адpесов пеpвой командой. Или. Сделать ответ "в своем тайм-слоте" максимально коpотким, что-б можно было быстpенько опpосить только наличие конкpетных номеpов (256 итеpаций), а потом yже pаботаем с конкpетными yстpойствами индивидyально (запpос-ответ).

Best regard, Roman Gubaev! [Team Beer - rulez forever!] е-мыло: rgubaevyandexru (что кyда вставить - сами догадаетесь :-))

... РАО "ЕЭС России", Хакасэнеpго, гpyппа связи

Hi, Vladislav!

13 декабря 2006 00:31, Vladislav Baliasov писал к All:

VB> Итак, есть некоторое количество датчиков с радиоинтерфейсом, которые VB> время от времени надо опрашивать... Как реализовать опрос, и VB> чтобы датчики при этом не забивали друг друга при ответе ?

Если система только в проекте, может быть, стоит подумать о частотном разделении каналов или/и нескольких трансиверах на опрашивающем устройстве, которые работают каждый на своей частоте/частотах ? Или как-нибудь ещё изощрённее (на опрашивающем устройстве несколько каналов, занимающихся определением адресов вновь появляющихся устройств и назначением им рабочего канала и слота, и несколько рабочих каналов) ? Хотя, возможно, при этом могут возникнуть проблемы электромагнитной совместимости, интерференции и т.п... Другой вариант: периодически передавать в эфир список свободных слотов; устройства, ещё не получившие свой номер слота, передают свой адрес в случайном слоте из свободных.

W.B.R., Evgeny A. Kalinin.

Hi, Evgeny!

19 декабря 2006 22:35, Evgeny Kalinin писал к Vladislav Baliasov:

EK> Другой вариант: периодически передавать в эфир список свободных EK> слотов; устройства, ещё не получившие свой номер слота, передают свой EK> адрес в случайном слоте из свободных.

А при долгом отсутствии связи с опрашивающим устройством устройства "забывают" свой слот.

W.B.R., Evgeny A. Kalinin.

Пpивет, Evgeny!

*** 19 Dec 06 22:35, Evgeny Kalinin wrote to Vladislav Baliasov:

VB>> которые время от времени надо опрашивать... Как реализовать VB>> опрос, и чтобы датчики при этом не забивали друг друга при ответе VB>> ?

EK> Если система только в проекте, может быть, стоит подумать о частотном EK> разделении каналов или/и нескольких трансиверах на опрашивающем EK> устройстве, которые работают каждый на своей частоте/частотах ? Или

Каналов мало, опрос на разных каналах тоже требует времени (он предусматривается, но только ради борьбы с жаммингом).

EK> как-нибудь ещё изощрённее (на опрашивающем устройстве несколько EK> каналов, занимающихся определением адресов вновь появляющихся EK> устройств и назначением им рабочего канала и слота, и несколько EK> рабочих каналов) ?

Это приемлемо лишь для стационарной системы. А у меня мобильное устройство сбора.

EK> Хотя, возможно, при этом могут возникнуть проблемы EK> периодически передавать в эфир список свободных слотов; устройства, EK> ещё не получившие свой номер слота, передают свой адрес в случайном EK> слоте из свободных.

Все оказалось проще. Моделирование показывает, что при 256 тайм-слотах простая рандомизация позволяет "разрулить" несколько сотен устройств за приемлемое время (вполне разумное число циклов), предел где-то 1200 - но там уже тяжело. Hо такое количество единовременно - нереально, изначально я полагал максимум до

30-50 штук за раз, это типично два-три цикла. Конечно, это дольше, чем блок последовательно взятых номеров, расставленных по младшему байту, но все равно вполне нормально. К тому же я потом сообразил, что "засветка" (длинный маркерный сигнал до первой фазы приема, чтобы периодически опрашивающие эфир датчики обнаружили сей факт) нужен лишь однократно, потом можно какое-то время всех подержать на активном приеме и повторный опрос будет занимать около четверти секунды... В UHF RFID примерно то же самое, так что более продвинутого алгоритма все равно пока не придумано...

с уважением Владислав

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required