zstack如何取消data request

  data request是zigbee协议栈中,终端节点向其父节点发送的数据请求,目的是看父节点中有没有发送给自己的数据包。因为终端节点可能会经常进入休眠,休眠的时候如果父节点接收到了给终端节点的数据包,会暂时保存,等到它唤醒再给它。这个道理很简单,如果终端节点是个孩子,平时没事都睡觉,可能会有人给它送信。如果它睡着的时候有发给他的信件,就会由他的父亲保存信件,等到孩子(定时)醒了,就告诉父亲“我醒了,有没有给我的信呢?”这句“我醒了”,就相当于data request。
  抓包的时候可以看到data request。过多的data request看着很烦人,并且data request是要求返回数据的,会加重父节点的负担,那么如何取消data request呢?
  首先,编译选项中应当去掉xNWK_AUTO_POLL:
zstack如何取消data request_第1张图片
  然后在f8wConfig.cfg将DPOLL_RATE设置为0
这里写图片描述

  但是,这两处修改完之后,并不能完全取消data request。这是因为节点只要唤醒(可能是因为别的业务,比如定时唤醒,采集数据),就会询问是否有给自己的消息,只是不再定时询问而已。如果想完全取消data request。可以在f8wConfig.cfg将另一个配置修改一下:

/* This is used after receiving a data confirmation to poll immediately
 * for response messages...in milliseconds
 */
-DRESPONSE_POLL_RATE=0

  注意,这么做有一个弊端,就是节点几乎接收不到所有的广播消息了。因为绝大多数的时候节点都是再休眠,且不再询问是否有自己的消息。
  如果还想接收广播消息,就要不再休眠,即取消省电模式,但是会增加功耗。在f8wConfig.cfg修改:(如果必要还需取消条件编译POWER_SAVING)

-DRFD_RCVC_ALWAYS_ON=TRUE
//-DRFD_RCVC_ALWAYS_ON=FALSE

 个人认为,取消data request只适合那些不处理任何命令,只上报数据的节点。如果实在需要节点处理命令并且不发data request,那么只能不休眠,但是这样做还不如把节点变为路由器。路由器不会休眠。

你可能感兴趣的:(ZigBee)