Перейти к содержанию
    

LWMesh 1.2.1

Добрый день!

Возникла проблема с ретрансляцией широковещательных сообщений.

Создал сеть из координатора, роутера и конечного устройства. Когда роутер и конечное устройство в зоне досягаемости координатора - то все работает отлично. Широковещательные сообщения получают все, и все могут отправлять на координатор. В WSN мониторе видим топологию сети "звезда".

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

но при отправке широковещательного сообщения координатором оно не доходит до конечного устройства...
Покажите код инициализации запроса. Вероятнее всего не убрали запрос подтверждения.

 

Нужны ли какие то специальные настройки или отличается ли обработка сообщения конечным устройством от координатора напрямую и при ретрансляции роутером?
Нет, особых настроек не нужно.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да вроде убрал....Вот код:

        appNwkDataReq.dstAddr = 0xffff;
    appNwkDataReq.dstEndpoint = APP_ENDPOINT;
    appNwkDataReq.srcEndpoint = APP_ENDPOINT;
    appNwkDataReq.options = NWK_OPT_BROADCAST_PAN_ID;
    appNwkDataReq.data = (uint8_t *)&appMsg_pwm;
    appNwkDataReq.size = sizeof(appMsg_pwm);
    appNwkDataReq.confirm = appDataConf;

    HAL_LedOn(APP_LED_DATA);
    NWK_DataReq(&appNwkDataReq);

    appState = APP_STATE_WAIT_CONF;

 

Изменено пользователем Arxi

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Убрать, оно не для этого.

 

Хм...откуда я это взял то....То есть достаточно выставить

appNwkDataReq.dstAddr = 0xffff;

И все?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хм...откуда я это взял то....То есть достаточно выставить

appNwkDataReq.dstAddr = 0xffff;

И все?

Ага. И .options = 0.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ага. И .options = 0.

 

Спасибо! Пойду пробовать.

 

 

Все попробовал...все работает как задумано! Еще раз спасибо за помощь)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще вопрос возник...все работает, сообщения по цепочке передаются.

Рассмотрим вариант Сoordinator <---> Router_1 <----> Router_2.

Router_2 не находится в прямой видимости координатора, соответственно сообщения от router_2 в координатор приходят через Router_1. Но как понять что это сообщение от router_2, а не от Router_1?

Как я понимаю, при пересылке сообщения переменная

uint64_t     extAddr;

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

Изменено пользователем Arxi

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

В WSNDemo appMsg.extAddr и appMsg.shortAddr заполняются на передающей стороне и нигде не подменяются.

 

А так же ind->srcAddr в appDataInd() содержит адрес отправителя не зависимо от начинки кадра.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В WSNDemo appMsg.extAddr и appMsg.shortAddr заполняются на передающей стороне и нигде не подменяются.

 

А так же ind->srcAddr в appDataInd() содержит адрес отправителя не зависимо от начинки кадра.

 

То есть получается сообщение не меняется при пересылке?

В описанной мной выше конфигурации сети сообщение от router_1 и router_2 координатор будет получать в том же виде, как если бы они оба были в зоне досягаемости координатора?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть получается сообщение не меняется при пересылке?

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Хорошо, спасибо за ответы. Буду разбираться...Видимо все таки сообщения от routera_2 до координатора не доходят, хотя от router_1, который в зоне прямой видимости - координатор получает сообщения и успешно обрабатывает...

Надо ли указывать что либо при отправке сообщений от роутеров в поле

appNwkDataReq.options

, чтобы происходила ретрансляция до координатора?

 

Сейчас настраиваю отправку так:

appNwkDataReq.dstAddr = 0;
    appNwkDataReq.dstEndpoint = APP_ENDPOINT;
    appNwkDataReq.srcEndpoint = APP_ENDPOINT;
    appNwkDataReq.options = NWK_OPT_ACK_REQUEST | NWK_OPT_ENABLE_SECURITY;
    appNwkDataReq.data = (uint8_t *)&appMsg;
    appNwkDataReq.size = sizeof(appMsg);
    appNwkDataReq.confirm = appDataConf;

Изменено пользователем Arxi

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...