This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Zigbee路由产品不走路由中继

我现在是打开了加密,

协调器限定了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;
      }
    }
    现在的现象就是,距离远一点,迫使它走路由中继 ,   协调器端的指示灯,正常闪烁一会然后常亮或长灭一会,就这样断断续续的 ,也没有规律