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.

ZStack每级的最大路由器个数问题

我有个疑问,还请论坛的高手帮忙解答下,谢谢。

在ZStack的nwk_globals.c文件里面有如下定义:

#if ( STACK_PROFILE_ID == ZIGBEEPRO_PROFILE )
  uint8 CskipRtrs[1] = {0};
  uint8 CskipChldrn[1] = {0};
#elif ( STACK_PROFILE_ID == HOME_CONTROLS )
  uint8 CskipRtrs[MAX_NODE_DEPTH+1] = {6,6,6,6,6,0};
  uint8 CskipChldrn[MAX_NODE_DEPTH+1] = {20,20,20,20,20,0};
#elif ( STACK_PROFILE_ID == GENERIC_STAR )
  uint8 CskipRtrs[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
  uint8 CskipChldrn[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
#elif ( STACK_PROFILE_ID == NETWORK_SPECIFIC )
  uint8 CskipRtrs[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
  uint8 CskipChldrn[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
#endif // STACK_PROFILE_ID

如果是HOME_CONTROLS时,默认的路由深度为5级,每级最多的路由节点数为6.

那如果profile为ZIGBEEPRO_PROFILE时,每级的最大路由节点数怎么确定呢?

还有ZStack里面的这个宏定义:#define NWK_MAX_ROUTERS           6也是表示每级最大路由器节点数为6,那这个宏与前面的数组有什么关系呢?

我实际测试:STACK_PROFILE_ID == ZIGBEEPRO_PROFILE的情况下,网络中有70多个路由器,协调器下就挂了18个路由器。从这个现象看#define NWK_MAX_ROUTERS           6这个宏定义好像没有作用。而且这种profile下的 路由器和子节点数组定义如下:

  uint8 CskipRtrs[1] = {0};
  uint8 CskipChldrn[1] = {0};

这是什么原因呢?

  • @bx da,

    请问你的协议栈版本是多少?

    目前协议协议栈里面,一个路由器下面最多可以接多少路由,就是最多能接多少个设备数了,

    定义在nwk_globals.h 

    // Maximum number in tables
    #if !defined( NWK_MAX_DEVICE_LIST )
    #define NWK_MAX_DEVICE_LIST 20 // Maximum number of devices in the
    // Assoc/Device list.
    #endif

  • VV你好,

    谢谢你的解答,我现在用的协议栈版本是2.5.1.a,那是不是这个宏定义#define NWK_MAX_ROUTERS           6已经没有作用呢?

    从下面这段代码看:

    #if ( STACK_PROFILE_ID == ZIGBEEPRO_PROFILE )
      uint8 CskipRtrs[1] = {0};
      uint8 CskipChldrn[1] = {0};
    #elif ( STACK_PROFILE_ID == HOME_CONTROLS )
      uint8 CskipRtrs[MAX_NODE_DEPTH+1] = {6,6,6,6,6,0};
      uint8 CskipChldrn[MAX_NODE_DEPTH+1] = {20,20,20,20,20,0};
    #elif ( STACK_PROFILE_ID == GENERIC_STAR )
      uint8 CskipRtrs[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
      uint8 CskipChldrn[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
    #elif ( STACK_PROFILE_ID == NETWORK_SPECIFIC )
      uint8 CskipRtrs[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
      uint8 CskipChldrn[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
    #endif // STACK_PROFILE_ID

    是不是我把STACK_PROFILE_ID设置为HOME_CONTROLS每个路由器下能挂载的最大路由器个数为6,最多设备数为20,MAX_NODE_DEPTH为5?

    如果STACK_PROFILE_ID设置为ZIGBEEPRO_PROFILE,这些数组定义和NWK_MAX_ROUTERS就没有作用了?

  • 是的 没有作用的

  • 为什么我的程序里边连了16个就不行了  我的NWK_MAX_DEVICE_LIST就是20

  • 可能是AssociatedDevList满了

  • 最大路由级数一般多少合理?

  • VV,你好!

    如果STACK_PROFILE_ID设置为ZIGBEEPRO_PROFILE话,能否设置每级EndDevice和Router的数量,我担心设备太多时,End把所有位置都占了,导致Router入不了网。