реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> ZigBee BitCloud 1.12.0 Проблемы с координатором.
ZigBeeHelpMe
сообщение Apr 11 2014, 02:43
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 16-10-12
Из: Урал
Пользователь №: 73 966



Стек BitCloud 1.12.0.
Устройства:
1 Координатор;
1 обычный роутер (Rout1);
1 Роутер с обратной связью (Rout2);
3 Конечных устройства.

Статическая адресация.

Потребовалось организовать двустороннюю связь ПК->координатор->роутер (Rout2)
и обратно. Наладить связь и передачу пакетов туда-сюда получилось.
Но возникли две ошибки.
Сеть работает, все хорошо, но если отключить одновременно все роутеры(2 шт.), а потом включить.
Координатор работает 20-40 сек и зависает, после переподключение координатора
роутеры подключаются нормально, а вот все конечные устройства находятся в ступоре (после зависания координатора), даже с оригинальной прошивкой (WSNDemo).
Думаю проблема в координаторе.

Код координатора:

Код
static uint8_t SIZE_DATA = 80;
BEGIN_PACK
typedef struct
{
    uint8_t header[APS_ASDU_OFFSET];                       
    uint8_t data[SIZE_DATA];
    uint8_t footer[APS_AFFIX_LENGTH - APS_ASDU_OFFSET];
} PACK AppMessageBuffer_t;
PACK AppMessageBuffer_t appMessageBuffer;


Код
// Инициализация
case INITIAL_DEVICE_STATE:
      switch (event)
      {
        case APP_PROCESS:
          HAL_StopAppTimer(&deviceTimer);
            
          deviceTimer.interval = APP_TIMER_SENDING_PERIOD;
          deviceTimer.mode     = TIMER_ONE_SHOT_MODE;
          deviceTimer.callback = deviceTimerFired;
          
          // Prefilling request parameters
          messageParams.profileId               = simpleDescriptor.AppProfileId;
          messageParams.dstAddrMode             = APS_SHORT_ADDRESS;
          // Для теста адрес роутера установлен вручную
          messageParams.dstAddress.shortAddress = 0x0012;
          messageParams.dstEndpoint             = 1;
          messageParams.clusterId               = CPU_TO_LE16(1);
          messageParams.srcEndpoint             = simpleDescriptor.endpoint;
          //messageParams.srcEndpoint           = WSNDEMO_ENDPOINT;
          // Длина полезной нагрузки (Без смысла)
          messageParams.asduLength              = sizeof(appMessageBuffer.data);
          // Полезная нагрузка
          messageParams.asdu                    = (uint8_t*)(&appMessageBuffer.data[0]);
          messageParams.txOptions.acknowledgedTransmission = 0;
#ifdef _APS_FRAGMENTATION_
          messageParams.txOptions.fragmentationPermitted = 1;
#endif // _APS_FRAGMENTATION_
#ifdef _HIGH_SECURITY_
          messageParams.txOptions.securityEnabledTransmission = 1;
#endif      
          messageParams.radius                  = 0x0;
          messageParams.APS_DataConf            = APS_DataConf;
          
          appDeviceState = READING_SENSORS_STATE;
          appPostSubTaskTask();
          break;

          default:
          break;
       }


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

Код
// Данные пришедшие с компа обрабатываются здесь (1 раз в секунду)  
void dataUSARTRecived (void *data, uint16_t dataLength)
{
    // Тут парсер данных, отправка дальше после сбора пакета
     .....
    messageParams.asduLength = len;
    // Отправка
    APS_DataReq(&messageParams);
}
Go to the top of the page
 
+Quote Post
ataradov
сообщение Apr 11 2014, 17:44
Сообщение #2


Профессионал
*****

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



QUOTE (ZigBeeHelpMe @ Apr 10 2014, 19:43) *
CODE
// Данные пришедшие с компа обрабатываются здесь (1 раз в секунду)  
void dataUSARTRecived (void *data, uint16_t dataLength)
{
    // Тут парсер данных, отправка дальше после сбора пакета
     .....
    messageParams.asduLength = len;
    // Отправка
    APS_DataReq(&messageParams);
}


От повторного вызова APS_DataReq() до того как вернулось подтверждение нужно защищаться. А подтверждение может не вернуться до 30-50 секунд если адресат не доступен.
Go to the top of the page
 
+Quote Post
ZigBeeHelpMe
сообщение Apr 15 2014, 08:38
Сообщение #3





Группа: Новичок
Сообщений: 8
Регистрация: 16-10-12
Из: Урал
Пользователь №: 73 966



Цитата(Taradov Alexander @ Apr 11 2014, 17:44) *
От повторного вызова APS_DataReq() до того как вернулось подтверждение нужно защищаться. А подтверждение может не вернуться до 30-50 секунд если адресат не доступен.

Спасибо помогло!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01357 секунд с 7
ELECTRONIX ©2004-2016