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.

关于使用ZDP_NwkAddrReq函数获取休眠终端的短地址

大家好,我在使用ZDP_NwkAddrReq函数通过IEEE地址获取节点短地址时遇到了问题:

需要让终端节点的-DRFD_RCVC_ALWAYS_ON=TRUE   才能成功获取到短地址。=FALSE时则不行。

想请教一下用什么办法可以用IEEE地址获取到 休眠 节点的短地址。

不管怎么样先在这里谢谢各位了!

  • 论坛有类似问题,解答请看这边: https://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/t/91221.aspx

  • Viki Shi 你好,谢谢你在百忙之中回答我的问题。

    这篇帖子我看了,原帖的发起者到最后也是遇到和我一样的疑问,按照原帖里VV说的进行操作,的确可以是在 -DRFD_RCVC_ALWAYS_ON=TRUE时获取到终端的短地址,但当 -DRFD_RCVC_ALWAYS_ON=FALSE时则没办法。

    我也是着将ZDP_NwkAddrReq函数中dstAddr.addr.shortAddr=NWK_BROADCAST_SHORTADDR_DEVRXON

    改为

    dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVALL;

    依旧无法实现。

  • 大家好……

    请问有人知道么……

    谢谢了。

  • -DRFD_RCVC_ALWAYS_ON=FALSE的时候,你的POLL_RATE是多少,如果子设备没有向父设备进行data request的话,父设备是不会把广播数据发送给休眠的设备的。

    另外父设备给子设备保存数据的最长时间是7.5s,如果超时就直接把数据丢了。

  • 关于您说的7.5s,是固定的吗?有办法修改这个timeout值吗?

  • 可以改。

    在  f8wConfig.cfg 的    -DNWK_INDIRECT_MSG_TIMEOUT=

  • 暂时告一段落,做一下小总结。

    通过IEEE地址获取网络地址的方法:

    //与用SmartRF Flash 读出来的IEEE地址是反过来的
    uint8 pDestination[] ={0x34,0xB1,0xC4,0x08,0x00,0x4B,0x12,0x00};
    

    调用函数发送请求:

     if ( keys & HAL_KEY_SW_6 )
      {
        //按键S1
        ZDP_NwkAddrReq(pDestination,ZDP_ADDR_REQTYPE_SINGLE,0,0);
        
        
      }

    在ZDApp_ProcessMsgCBs()的case NWK_addr_rsp:

    ZDO_NwkIEEEAddrResp_t *My_pAddrRsp= ZDO_ParseAddrRsp(inMsg);
    mu_addr=My_pAddrRsp->nwkAddr;
    break;

    网络地址则保存至mu_addr

    经测试,可以获取休眠节点的网络地址并进行通讯。

  • 您怎么确定是这个的? 默认值为7,单位应该是ms吧?

    最大值是65536,怎么换算成7.5s呢?

    /* Default indirect message holding timeout value:
    * 1-65535 (0 -> 65536) X CNT_RTG_TIMER X RTG_TIMER_INTERVAL
    */
    -DNWK_INDIRECT_MSG_TIMEOUT=7

    CNT_RTG_TIMER的定义没有找到,RTG_TIMER_INTERVAL的定义为1000。

    如果真的是7.5s,即使RFD_RCVC_ALWAYS_ON为false,ZE 1s查询一次,也应该能收到父节点的包啊。


  • 只要你的节点在正常的data request父设备就可以收到数据的,跟-DRFD_RCVC_ALWAYS_ON设置成false或者true没有关系的。

    所以还是好好观察下空中的报文,节点有没有在发送data request'

  • 怎么解决的,我也遇到这样的问题了,睡眠情况下查不到短地址,求共享方法。

  • jinghuan hao 你好。

    节点被唤醒后向协调器发出Data request,协调器可以获取到短地址的。

    我设置了 -DRFD_RCVC_ALWAYS_ON=FALSE

    -DPOLL_RATE=1000

    也就是睡眠节点每隔1s醒来一次,向父节点询问一次信息,协调器是可以获取到短地址的。具体操作我在上面有说。

  • 能发给我分工程文件吗?我折腾了半天,楞是没有结果,不知道哪里配置错了?1047381010@qq.com

    谢谢。低功耗没研究过,节点怎么唤醒的?自己唤醒,还是外部中断唤醒,醒来后是协议自动发送Data request,还是要自己要写发送函数?