微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > Zigbee路由产品不走路由中继

Zigbee路由产品不走路由中继

时间:10-02 整理:3721RD 点击:

我现在是打开了加密,

协调器限定了zgApsUseExtendedPANID[Z_EXTADDR_LEN]

路由指定ExtendedPANID

并在预编译里面添加了 NV_RESTORE、 HOLD_AUTO_START

以上这些会影响走路由中继吗?

中继功能还需要打开哪些预编译选项?

需要设置什么东西吗

这些东西跟了路由中继没什么关系,不需要做什么设置。ZigBee协议栈,网络做路由的功能是默认就有的

首先谢谢你的回答:

       我测试的ti官方给的协议栈,然后做测试    路由设备发送数据到网络地址0x0000     协调器接收    发现距离远了以后,走路由也是这个问题   很不稳定,

      会出现通讯一会(几分钟或十几分钟具体时间不定)就会丢包,然后过上十几二十秒就又恢复,基本上就是这样循环掉线上线,我该怎么解决这个问题呢?

你说的距离远了以后,会有这个问题,是不是单跳的距离并无法达到这么远,硬件的射频性能,两点之间中建的阻挡,等等。

是不是说在近距离的情况下,这个路由的转发就不会有问题的,这样至少说明算法软件的处理是没有问题的。

距离远了有问题,主要是发送出去没ACK,还是数据都发不出了?

距离近的时候通过抓包工具看,数据是走路由的,还算稳定,

距离远是 我把一个路由节点放到单跳不能通讯的地方,然后再协调器和这个路由节点之间   在放上两个路由节点,想让数据通过路由过来,但是数据是偶尔能够通过路由过来到协调器,数据发送一会   就又发送不过来了,就这样断断续续,造成通讯不正常,

我在ZStack-CC2530-2.5.1a   协议栈里面的 SampleApp 里面改的,

我测试让路由节点2S发送两个字节,路由节点发送函数
    uint8 ledBuf[2] = {0};
  SampleAppPeriodicCounter ^= 1;
//  if(SampleAppPeriodicCounter)
//     P1 |= 0x01;
//  else
//     P1 &= ~0x01;
//  ledBuf[0] = SampleAppPeriodicCounter;
//  ledBuf[1] = 0xff;
  
  if(SampleAppPeriodicCounter)
     P1 |= 0x02;
  else
     P1 &= ~0x02;
  ledBuf[1] = SampleAppPeriodicCounter;
  ledBuf[0] = 0xff;
  
  SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;
  SampleApp_Periodic_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
  SampleApp_Periodic_DstAddr.addr.shortAddr = 0x0000;

  if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,
                       SAMPLEAPP_PERIODIC_CLUSTERID,
                       2,
                       (uint8*)ledBuf,
                       &SampleApp_TransID,
                       AF_DISCV_ROUTE,
                       AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
  {
  }
  else
  {
    // Error occurred in request to send.
  }

协调器接收后就指示灯闪烁

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
  uint16 flashTime;

  switch ( pkt->clusterId )
  {
    case SAMPLEAPP_PERIODIC_CLUSTERID:
        if(pkt->cmd.Data[0] == 1)
            P1 |= 0x01;
        else if(pkt->cmd.Data[0] == 0)
            P1 &= ~0x01;
       
        if(pkt->cmd.Data[1] == 1)
            P1 |= 0x02;
        else if(pkt->cmd.Data[1] == 0)
            P1 &= ~0x02;
      break;

    case SAMPLEAPP_FLASH_CLUSTERID:
      flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );
      HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );
      break;
  }
}

现在的现象就是,距离远一点,迫使它走路由中继 ,   协调器端的指示灯,正常闪烁一会然后常亮或长灭一会,就这样断断续续的 ,也没有规律

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top