当前位置: 首页 > 工具软件 > ember-table > 使用案例 >

Zigbee | Ember | polling 机制与协调器管理子节点

陆涵畅
2023-12-01

Ember Polling

      子节点与父节点通过polling机制确保彼此在网络状态,子节点通过定期发送Data request来确保自己在线。而父节点则通过获取data request维护child table,否则,如果子节点意外离网又没有通知父节点,则子节点路由长期占有child table,影响其他设备加入网络。

 

  • ZED:

      通过宏定义

      EMBER_AF_PLUGIN_END_DEVICE_SUPPORT_LONG_POLL_INTERVAL_SECONDS,来决定data request的时间间隔;


  • ZC/ZR:

      ZC或者ZR要求他们的ZED设备在End Device Poll Timeout时间内进行poll。这个时间由两个宏定义决定:

           EMBER_END_DEVICE_POLL_TIMEOUT  // 默认5s

           EMBER_END_DEVICE_POLL_TIMEOUT_SHIFT // 默认6

      时间计算5*(2^6) = 320s

      即,如果在320s内无法收到poll信息,则将ZED从child table中移除,(很可能会转移到另一个list中,当设备再次rejoin时,如果    此时ZC/ZR可加入设备数量没有达到限制,则允许该设备再次回来)。

      如果子节点poll成功了,父节点重置Timeout,同时,当该子节点收到Ack时(802.15.4 Ack),子节点重置timeout。为了配合那些non-sleepy end device(且不支持polling机制),父节点当收到子节点任何消息的时候都会重置timeout。

      公式中两个参数的最大值分别为255s和14,也就是总共48.36天。

 

和TI Z-Stack2.6.1比较

       TIMEOUT_COUNTER_MAX = TIMEOUT_COUNTER_MAX(默认为60),在协议栈运行过程中是动态变化的,协议栈中有一个1分钟的循环timer event,当timer event触发的时候,会去检测在这个在一分钟是否有收到Data Request,或者其他数据,如果没有的话就会把timeout counter – 1,如果连续60分钟没有收到的话,就把这个节点放到另外一个not child的list里面去了(有需要再清初),在中途只要收到一条来自这个节点的数据,这个counter立刻被Reset成功初始化60,这个值就是通过endDevKaTimeout获得的。

 类似资料: