|
|
  |
Mesh сеть между подвижными объектами., Подходит ли ZigBee? |
|
|
|
Jul 30 2013, 20:02
|

Профессионал
    
Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202

|
QUOTE (Pasha_a13 @ Jul 30 2013, 12:48)  Первый вопрос - я не совсем понял как ведет себя координатор после того как он инициировал route discovery, сколько времени он ожидает route reply от узла назначения и если route reply не пришел(узел назначения вне зоны досягаемости сети либо выключен), то делает ли он повторные попытки поиска узла назначения? Все ответы ожидаются NWK_ROUTE_DISCOVERY_TIMEOUT мс. По истечении этого времени если не было принято ни одного ответа, то запрос подтверждается со статусом NWK_NO_ROUTE_STATUS. Никаких попыток повторно послать запрос не производится - приложение само может это сделать если хочет. Так же можно раскомментировать строку 353 в nwkRouteDiscovery.c, тогда первый же принятый маршрут будет использован для отправки данных, но остальные ответы все-равно будут приняты для поиска более оптимального пути. Недостаток - пакету придется пробиваться сквозь тучу броадкастов от route discovery. QUOTE (Pasha_a13 @ Jul 30 2013, 12:48)  Второй вопрос - "4. If native route discovery is used and received frame had a unicast network address and broadcast MAC address (route discovery). In this case acknowledgment is used to facilitate discovery of the reverse route."(стр.20, вверху) - здесь под acknowledgment понимается пакет route reply или есть еще какие-то другие acknowledgment сообщения? Я просто не совсем понял какие есть acknowledgment пакеты в сети, т.е. в каких случаях они посылаются и понимаются ли под acknowledgment пакеты route reply и route error? В native route discovery нет route request и route reply кадров. Каждый кадр сам себе пробивает дорогу - если маршрут не известен, то он просто отправляется с MAC Dst = 0xffff (broadcast). Таким образом когда кадр доходит до назначения маршрут в одну сторону известен. И чтобы завершить поиск маршрута (найти маршрут назад) отправляется обычное сетевое подтверждение, даже если подтверждение не запрашивали. Так как к подтверждениям применяются те же правила, оно самим фактом доставки прокладывает маршрут.
|
|
|
|
|
Jul 30 2013, 20:38
|
Частый гость
 
Группа: Участник
Сообщений: 166
Регистрация: 8-09-09
Из: Украина
Пользователь №: 52 244

|
Цитата(Taradov Alexander @ Jul 30 2013, 23:02)  Все ответы ожидаются NWK_ROUTE_DISCOVERY_TIMEOUT мс. Спасибо за такой быстрый ответ! Тоесть NWK_ROUTE_DISCOVERY_TIMEOUT это фиксированная величина (1000мс) независимо от количества узлов и скорости передачи данных между узлами? Просто ведь если в сети например 300 узлов, задержка перед ретрансляцией пакета в диапазоне 1..32 мс....пусть мы берем плохой вариант - например средняя задержка 20 мс+5мс(сам пакет)=25 мс. Пусть топология сети выстроена таким образом что она растянута вдоль одной какой-то оси, т.е. узлы выстроены практически в линию. При этом даже если узел назначения будет находиться на расстоянии 50 узлов от координатора, то задержка от момента отправки запроса координатором до момента получения route reply составит 50*25мс*2(туда-обратно)=2500мс. Или подразумевается что пользователь при настройке системы сам устанавливает NWK_ROUTE_DISCOVERY_TIMEOUT исходя из топологии сети и приблизительно оценив возможную задержку? Цитата(Taradov Alexander @ Jul 30 2013, 23:02)  По истечении этого времени если не было принято ни одного ответа, то запрос подтверждается со статусом NWK_NO_ROUTE_STATUS. Никаких попыток повторно послать запрос не производится - приложение само может это сделать если хочет. Запрос подтверждается это имеется ввиду что уровень приложения получит ответ от более низкого уровня а не от другого устройства? Цитата(Taradov Alexander @ Jul 30 2013, 23:02)  Так же можно раскомментировать строку 353 в nwkRouteDiscovery.c, тогда первый же принятый маршрут будет использован для отправки данных, но остальные ответы все-равно будут приняты для поиска более оптимального пути. Недостаток - пакету придется пробиваться сквозь тучу броадкастов от route discovery. Я понял что узел назначения приняв пакет route discovery от одного из узлов ожидает некоторое время других пакетов, тем самым во первых имея альтернативу для выбора пути с лучшими показателями качества, а во вторых за время ожидания большая часть броадкастов перестанет бегать по сети и пакету route reply(unicast)(либо просто пакет подтверждения) проще будет вернуться к кооординатору. Пакет route reply идет без всяких подтверждений? Просто ж во время движения если он наткнется на остатки броадкастов, то координатор его никогда не получит..... Цитата(Taradov Alexander @ Jul 30 2013, 23:02)  В native route discovery нет route request и route reply кадров. Каждый кадр сам себе пробивает дорогу - если маршрут не известен, то он просто отправляется с MAC Dst = 0xffff (broadcast). Я уже перечитал первый абзац и понял что недопонял сходу по поводу отсутствия отдельной процедуры поиска пути - подвело мое не сильно хорошее знание английского  Из каких соображений было выбрано именно чтобы целый пакет пробивал себе путь? Ведь в таком случае пакет может быть довольно большой(много данных) и в процессе пробивания дороги больше вероятность что он побьеться да и больше ж времена передачи пакета. Ведь вроде как удобнее чтобы сначала найти путь а потом юникастом отправить данные к назначению. Цитата(Taradov Alexander @ Jul 30 2013, 23:02)  Таким образом когда кадр доходит до назначения маршрут в одну сторону известен. И чтобы завершить поиск маршрута (найти маршрут назад) отправляется обычное сетевое подтверждение, даже если подтверждение не запрашивали. Так как к подтверждениям применяются те же правила, оно самим фактом доставки прокладывает маршрут. Получается тот бит включения подтверждения указывает нужно ли послать подтверждения после доставки пакета чтобы сформировать путь для дальнейших пакетов или пакет был единичный и повторный путь нам не потребуется, соответственно зачем посылать подтверждение. Я правильно уловил мысль?
Сообщение отредактировал Pasha_a13 - Jul 30 2013, 20:48
|
|
|
|
|
Jul 30 2013, 20:50
|

Профессионал
    
Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202

|
QUOTE (Pasha_a13 @ Jul 30 2013, 13:30)  Или подразумевается что пользователь при настройке системы сам устанавливает NWK_ROUTE_DISCOVERY_TIMEOUT исходя из топологии сети и приблизительно оценив возможную задержку? Именно это и подразумевается. Поэтому оно и вынесено в конфигурационный параметр, а не упрятано в исходниках. QUOTE (Pasha_a13 @ Jul 30 2013, 13:30)  Запрос подтверждается это имеется ввиду что уровень приложения получит ответ от более низкого уровня а не от другого устройства? Нет. На уровне приложения есть возможность запросить подтверждение (NWK_OPT_ACK_REQUEST). Если оно запрошено, то принимающая сторона всегда посылает ответ. Если не запрошено, то ответ будет все-равно послан если nwkDst==<адрес устройства назначения>, а macDst= 0xffff (эта комбинация означает Native Route Discovery). В этом случае запрашивающая сторона ждать ответа не будет, и он просто будет проигнорирован, но как результат его прохождения будет найден маршрут. QUOTE (Pasha_a13 @ Jul 30 2013, 13:30)  Я понял что узел назначения приняв пакет route discovery от одного из узлов ожидает На route discovery узлы отвечают сразу после приема. Часть может и потеряется, часть доедет. На практике все доходить как нужно. Туча броадкастов не так страшна как кажется. QUOTE (Pasha_a13 @ Jul 30 2013, 13:38)  Из каких соображений было выбрано именно чтобы целый пакет пробивал себе путь? Из опыта. На практике кадры почти не бьются никогда, не зависимо от их размера. QUOTE (Pasha_a13 @ Jul 30 2013, 13:38)  Получается тот бит включения подтверждения указывает нужно ли послать подтверждения после доставки пакета чтобы сформировать путь для дальнейших пакетов или пакет был единичный и повторный путь нам не потребуется, соответственно зачем посылать подтверждение. Я правильно уловил мысль? Нет. Бит подтверждения - это именно бит подтверждения. Тот факт, что Ack используется для прокладки маршрута - это просто для удобства. Это могла быть совершенно независимая команда, но весь код для отправки Ack-ов и так есть, почему бы его не использовать?
|
|
|
|
|
Jul 30 2013, 20:59
|
Частый гость
 
Группа: Участник
Сообщений: 166
Регистрация: 8-09-09
Из: Украина
Пользователь №: 52 244

|
Цитата(Taradov Alexander @ Jul 30 2013, 23:50)  Из опыта. На практике кадры почти не бьются никогда, не зависимо от их размера. Вот тут наверное главный момент кроется почему у меня возникли проблема с броадкаст пакетами в моем алгоритме. Где-то я неправильно реализовал сам алгоритм отправки-ретрансляции пакетов. Подскажет пожалуйста как на нижнем уровне происходит отправка-ретрансляция броадкаст(либо других) пакетов? Например мы приняли броадкаст пакет и нам его нужно ретранслировать дальше. При этом мы выбираем случайную задержку а по истечении времени задержки просто посылаем пакет либо по истечении времени задержки мы оцениваем свободу канала(например по наличию несущей) и если она занята то увеличиваем задержку и снова ждем. Либо мы постоянно смотрим наличие несущей...если она есть, то отсчет задержки приостанавливается, когда она исчезает, то продолжается отсчет? Просто у меня были проблемы с определением несущей и я ее не задействовал а только оперировал с задержками. И у меня получались наложения пакетов (я смотрел контрольным приемником все пакеты и видел что происходит явное наложение  )
Сообщение отредактировал Pasha_a13 - Jul 30 2013, 21:01
|
|
|
|
|
Jul 30 2013, 21:09
|

Профессионал
    
Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202

|
QUOTE (Pasha_a13 @ Jul 30 2013, 13:59)  Подскажет пожалуйста как на нижнем уровне происходит отправка-ретрансляция броадкаст(либо других) пакетов? Atmel-овские радио в соответствующем режиме всегда слушают канал, делают небольшую (порядка десятков мкс, единиц мс, прогрессивно увеличивающуюся с числом повторов) задержку если занято пробуют снова. Если за несколько повторов (4 по-умолчанию) не получилось отправить, то они сдаются и устанавливают соответствующий статус. Соответственно стек при приеме броадкаста делает случайную задержку порядка десятков мс и отправляет кадр в радио - дальше оно само как описано выше пытается его послать. Если радио так не может, то нужно то же самое делать программно. Но тут есть туча тонкостей по времянкам и порогам наличия сигнала, которые в IEEE 802.15.4 хорошо выглажены, так что настройки по-умолчанию отлично работают в большинстве случаев.
Сообщение отредактировал Taradov Alexander - Jul 30 2013, 21:10
|
|
|
|
|
Aug 1 2013, 15:37
|
Частый гость
 
Группа: Участник
Сообщений: 166
Регистрация: 8-09-09
Из: Украина
Пользователь №: 52 244

|
В процессе дальнейшей работы над ретрансляцией возникла проблема связанная с асимметричностью каналов - на выходах передатчиков при одинаковых настройках программных мощности на выходе отличаются, а также отличаются входные параметры приемных трактов (возможно связано с разбросом параметров индуктивностей-емкостей). В результате получается следующая ситуация - например есть три узла: узел 1 - координатор, узлы 2 и 3 - конечные устройства. Узел 2 - промежуточный узел, ретранслятор, находиться фактически на промежутке между узлами 1 и 3. Когда узел 1(координатор) выполняет поиск узла 3, то пакет долетает до узла 3, однако у узла 3 передатчик чуток слабее и пакет от узла 3 не достает немного до координатора. В итоге получается последовательность - пакет ушел от узла 1, его приняли узлы 2 и 3. При этом узел 2 готовиться его ретранслировать а узел 3 готовиться ответить. Получается в большинстве случаев(наскоьлко я вижу по информации с логгера) что узел 2 начинает ретранслировать пакет приблизительно в тот момент когда узел 3 еще не ответил на пакет а находиться в режиме ожидания освобождения канала и не принимает пакеты.  И в итоге пакет от ретранслирующего узла теряеться а пакет от конечного узла не долетает до координатора. Подобная ситуация была бы если бы на промежутке между узлом 1 и 3 были два ретранслятора...все равно наиболее вероятно что узел назначения успевал бы ответить только на один запрос пути. Или тут есть какая-то особенность с временными задержками чтобы обеспечить приход всех ретранслированных пакетов к узлу назначения? К сожалению увеличить приемный буфер и создать очередь принятых-готовых к отправке пакетов не представляется возможным в результате ограничения по ресурсам контроллера(ОЗУ). Вообще я так понимаю что правильно было бы сделать чтобы конечное устройство принимало и отвечало на все без исключения пакеты от ретрансляторов-координатора, а уже потом когда все эти ответы придут к координатору то он, выждав предварительно некоторое время чтобы пришли все пакеты, выбрал уже среди них оптимальный путь? Подскажите пожалуйста какие можно придумать еще пути выхода из сложившейся ситуации? Замерять характеристики каналов(уровень сигнала на входе) во время приема пакетов проблематично, иначе бы можно было по этим параметрам вычислять более оптимальный путь и отсекать заведомо слабые каналы связи. Да и впринципе по пути к узлу назначения мне это особо ничего не даст, т.к. туда в данном случае канал получается довольно хороший, туда пакеты доходят...а вот назад...
Сообщение отредактировал Pasha_a13 - Aug 1 2013, 16:09
|
|
|
|
|
Aug 1 2013, 19:24
|
Частый гость
 
Группа: Участник
Сообщений: 166
Регистрация: 8-09-09
Из: Украина
Пользователь №: 52 244

|
Цитата(Taradov Alexander @ Aug 1 2013, 19:19)  Не нужно ждать освобождения канала, так вы никогда ничего не передадите. Нужно быстро (единицы мкс) проверить свободен ли канал, и тут же передавать. Если канал не свободен, то переходить в режим приема и одновременно делать маленькую задержку (десятки мкс - единицы мс) после которой пытаться снова отправить, если после 4 попыток не получилось, то не судьба этот кадр послать - на свалку его. Так а на сетевом уровне задержка все равно остается 10-50 мс или в случае ответа на броадкаст без этой большой задержки нужно передавать? Цитата(Taradov Alexander @ Aug 1 2013, 20:37)  Эти задержки тоже нужны. Алгоритм передачи кадра: 1. Задержка на сетевом уровне (10-50 мс), можно только для броадкастов. 2. Задержка (10 мкс - 5 мс, причем верхняя граница плавно увеличивается с номером повтора начиная с совсем маленькой цифры, типа 20 мкс) 3. Слушаем канал как можно короче, но достаточно долго, чтобы определить наличие других передатчиков. 4. Если уровень ниже порога, то передаем кадр и выходим. 5. Если уровень выше порога: если число попыток < 4 то goto 2 иначе кадр не возможно отправить (Channel Access Failure).
ZigBee радио делают 2-5 автоматически. Спасибо большое за временные характеристики и за алгоритм! А то я когда просматривал спецификацию на физический уровень, то не все временные параметры нашел.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|