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.

[参考译文] CC2652P:为什么 ZC 自动向 ZED 发送休假请求?

Guru**** 2455560 points
Other Parts Discussed in Thread: CC2652P, CC2340R5

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1501709/cc2652p-why-zc-send-a-leave-request-to-zed-automatically

器件型号:CC2652P
主题中讨论的其他器件: CC2340R5

工具/软件:

尊敬的 TI 团队:我仅使用了一个 CC2652P ZC 和一个 CC2340R5 ZED 测试、这两个器件每50ms 就一次相互发送 ZCL 数据。  经过大约4小时的测试后、ZC 会自动向 ZED 发送离网请求(重新加入字段为1)。 请帮助我分析导致这种现象发生的原因。  我已将 Sniff 日志添加到附件中。

注意:在 ZC 项目中、终端设备超时设置为9-512分钟。  

 e2e.ti.com/.../leave-request-log.zip

顺便说一下,  对于 CC2340 Zed 项目,当我从函数 zbos_signal_handler ()收到 ZB_ZDO_SIGNAL_LEAVE 通知时,我能做什么来知道重新连接是是是是还是否, 你能给我一个例子吗

我尝试了以下方法、但它不起作用。

用例 ZB_ZDO_SIGNAL_LEASE:

zb_zdo_signal_leave_params_t *req_param = ZB_BUF_GET_PARAM (param、ZB_zdo_signal_leave_params_t);

 Log_printf (Log_printf Module_Zigbee_App、Log_info、"leave_type (%d)"、req_param->leave_type);

}

休息;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Senjin:

    默认 ZC 的终端设备超时设置由 ZED 发出的 Nd 设备超时请求重写。

    256分钟相当接近您对4小时操作后出现的问题的观察、请注意、来自 ZED 的专用群集 ZCL 消息不足以重置 ZC 上的超时计时器。  以下是来自 F2 SDK 中 zglobals.h 的注释摘录

    //=======    Child Aging PARENT ROUTER (ZR/ZC) configuration   ========
    // You can setup a router to support Child Table Aging in 1 of 2 modes of
    // operation.  The first mode is NWK_PARENT_INFO_END_DEVICE_TIMEOUT_MSG and it
    // expects end devices to use End Device timeout message periodically as a means of a keep-alive
    // notification to the parent.  The other mode is NWK_PARENT_INFO_MAC_DATA_POLL
    // which uses the end device's MAC POLL request as the keep-alive notification.
    // The first method is preferred for new devices that will be RxOnIdle = FALSE as
    // it does not requires constantly sending data request frames other than needed by polling data from parent.
    // The second method is compatible with older end devices without the need for
    // specific child aging support.
    //
    // The method supported by the router (or coordinator) is determined at build time
    // by setting zgNwkParentInformation to either NWK_PARENT_INFO_END_DEVICE_TIMEOUT_MSG
    // or NWK_PARENT_INFO_MAC_DATA_POLL.
    //
    // End device built with Child Table Aging support both methods, the method is
    // determined by the parent and communicated at run-time.
    #if ( ZG_BUILD_RTR_TYPE )
    uint8_t zgNwkParentInformation = NWK_PARENT_INFO_MAC_DATA_POLL;

    因此、除了通过增加 F3 SDK 工程 ti_zigbee_config.h 中 ED_TIMEOUT_VALUE 的值来延迟问题之外(这只会延迟问题)、您还应该考虑允许 ZED 根据您的 F2 ZC 首选项偶尔发送数据请求或结束设备超时请求。

    下面是一段代码摘录、我尚未对处理 ZB_ZDO_SIGNAL_LEFT 消息进行全面评估:

        case ZB_ZDO_SIGNAL_LEAVE:
        {
          zb_zdo_app_signal_hdr_t *sg_p = NULL;
          zb_zdo_signal_leave_params_t *leave_params = NULL;
    
          zb_get_app_signal(param, &sg_p);
          leave_params = ZB_ZDO_SIGNAL_GET_PARAMS(sg_p, zb_zdo_signal_leave_params_t);
          //...
        }

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ryan、

    我想进一步询问、对于 CC2340R5 ZED 器件、如何发送 数据请求或终端设备超时请求。 在我的工程中、rx_alwasy_on 设置为 true、我使用以下 API 接口进行测试、但我没有观察到器件发送存活检测数据包。  

    ZB_set_keepalive_timeout (ZB_muss_to_beacon_interval (ED_POL_rate));

    我尝试使用 ZB_set_keepaliive_mode ()将模式设置为 ED_TIMEOUT_REQUEST_keepalive、但仍然以相同的方式工作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Senjin:

    我可以观察到我的 Always-On Zed 仍然使用 v8.40 F3 SDK 以默认速率发送数据请求。

    #elif defined ZB_ED_ROLE
      zb_set_network_ed_role(DEFAULT_CHANLIST);
    
      /* Set end-device configuration parameters */
      zb_set_ed_timeout(ED_TIMEOUT_VALUE);
      zb_set_rx_on_when_idle(ED_RX_ALWAYS_ON);
    //#if ( ED_RX_ALWAYS_ON == ZB_FALSE )
      zb_set_keepalive_timeout(ZB_MILLISECONDS_TO_BEACON_INTERVAL(ED_POLL_RATE));
    #ifdef DISABLE_TURBO_POLL
      // Disable turbo poll feature
      zb_zdo_pim_permit_turbo_poll(ZB_FALSE);
      zb_zdo_pim_set_long_poll_interval(ED_POLL_RATE);
    #endif // DISABLE_TURBO_POLL
    //#endif // ED_RX_ALWAYS_ON
    #endif //ZB_ED_ROLE

    您能帮助确定我们的两种设置之间的差异吗?

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、  
    我想出了如何重现这个问题
    1、在 syscfg 配置中、启用 zigbeee->设备类型、并同时选择 ZigBee 终端设备和 ZigBee 路由器。

    2.修改源代码并将设备设置为 ZigBee 终端设备模式。

    #ifdef ZB_COORDINATOR_ROLE
      zb_set_network_coordinator_role(DEFAULT_CHANLIST);
    #ifdef DEFAULT_NWK_KEY
      zb_uint8_t nwk_key[16] = DEFAULT_NWK_KEY;
      zb_secur_setup_nwk_key(nwk_key, 0);
    #endif //DEFAULT_NWK_KEY
      zb_set_max_children(MAX_CHILDREN);
    
    //#elif defined ZB_ROUTER_ROLE && !defined ZB_COORDINATOR_ROLE
    //  zb_set_network_router_role(DEFAULT_CHANLIST);
    //  zb_set_max_children(MAX_CHILDREN);
    
    //#elif defined ZB_ED_ROLE
    #elif defined ZB_ROUTER_ROLE
      zb_set_network_ed_role(DEFAULT_CHANLIST);
    
      /* Set end-device configuration parameters */
      zb_set_ed_timeout(ED_TIMEOUT_VALUE);
      zb_set_rx_on_when_idle(ED_RX_ALWAYS_ON);
    //#if ( ED_RX_ALWAYS_ON == ZB_FALSE )
      zb_set_keepalive_timeout(ZB_MILLISECONDS_TO_BEACON_INTERVAL(ED_POLL_RATE));
    #ifdef DISABLE_TURBO_POLL
      // Disable turbo poll feature
      zb_zdo_pim_permit_turbo_poll(ZB_FALSE);
      zb_zdo_pim_set_long_poll_interval(ED_POLL_RATE);
    #endif // DISABLE_TURBO_POLL
    #endif // ED_RX_ALWAYS_ON
    //#endif //ZB_ED_ROLE
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 Senjin、有了这些附加信息、我还能够复制行为。  我已通知 Zigbee 研发团队提供有关最佳分辨率路径的建议。

    同时、作为一种权变措施、您是否能够在发送休假请求时尽可能提高超时率(ED_AGING_TIMEOUT_16384MIN)并启动器件重新加入?  实际上、每273小时应用运行中就会出现短暂的停顿(~10s 暂停)。

    此致、
    Ryan