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.

[参考译文] LAUNCHXL-CC26X2R1:AF 命令无路由器响应2.

Guru**** 2466550 points
Other Parts Discussed in Thread: SYSCONFIG, Z-STACK

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1113795/launchxl-cc26x2r1-no-router-response-at-af-commands-2

器件型号:LAUNCHXL-CC26X2R1
Thread 中讨论的其他器件:SysConfigZ-stack

这是本主题的直接延续: LAUNCHXL-CC26X2R1:在 AF 命令处没有路由器响应- Zigbee 和 Thread 论坛- Zigbee 和 Thread - TI E2E 支持论坛

我  现在已将 ZCL_CLUSTER_ID_General_ON_OFF 设置为输入和输出集群。

我还禁用了绿色电源、因为它没有使用、并添加了 bdb 通信、它自动执行绑定。

 我在 zclSampleSw_processAfIncomingMsgInd 函数中添加了以下行:

if (afMsg.cmd.DataLength = 3 && afMsg.clusterid = 0x06){
zclSampleSw_DstAddr.addrMode = afMsg.srcAddr.addrMode;
zclSampleSw_DstAddr.endpoint = afMsg.endpoint;
zclSampleSw_DstAddr.addr.shortAddr = afMsg.srcAddr.addr.shortAddr;
Zstackapi_getZCLFrameCounterReq (appServiceTaskId、&rsp);
zclGeneral_SendOnOff_CmdToggle (SAMPLESW_EndPoint、&zclSampleSw_DstAddr、0、rsp.zclFrameCounter);

因此、当我从 ZR 切换继电器时 、ZC 中的 LED 会亮起、但我仍然没有得到它接收到命令并打开 LED 的响应。

这似乎只是 AF 命令上的问题、例如、我始终从 ZDO 命令获取响应

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

    Panagiotis、您好!

    您已将  zclGeneral_SendOnOff_CmdToggle 的 disableDefaultRsp 参数设置为零、因此应该会从 ZC 灯接收默认响应。   zclSampleSw_ProcessIncomingMsg 是否从未输入 zclSampleSw_ProcessInDefaultRspCmd?  您还可以发送读取属性命令或启用器件报告、 Zigbee 基础知识 SLA 中提供了有关这些内容的更多信息。  请尽可能提供监听器日志。

    此致、
    Ryan

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

    您好、Ryan、

    它确实会输入  zclSampleSw_ProcessInDefaultRspCmd、但我不知道如何修改它以发送响应。 请 提供一个示例吗?

    我在没有 第2部分的情况下进行了 Zigbee 基础项目开发、并删除了引用自定义变量的代码、以免触发错误

    您能否进一步说明我如何以及在哪里可以发送读取属性命令?

    我想进一步解释如何在我正在使用的定制应用中进行通信:

    1.按 ZR 的 Toggle Relay

    2. 从 ZC 向 ZR 发送命令(AF 数据请求)以打开 ZCS' LED

    3. ZR 打开 ZCs 的 LED,但不发送对数据请求的响应

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

    您的应用程序步骤和描述令人困惑。 在步骤1中,您可以按从 ZR 切换继电器, 从 ZC 向 ZR 发送命令(AF 数据请求),以便在 步骤2中打开 ZCS' LED。 您是指 从 ZR 向 ZC 发送命令(AF 数据请求)以在 步骤2中打开 ZCS' LED 吗?

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

    您好 YiKai、

    AF 命令确实从 ZR 发送到 ZC。 它在步骤2和3之间发生。 我随附了屏幕截图、其中显示了应用程序注册的命令及其各自的详细信息。 这些是从 ZC 发送到 ZR 的命令。 zclGeneral_SendOnOff_CmdTswitches'结构确实有 af 数据请求、但在应用程序中不显示其响应、  

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

    根据屏幕截图、ZC 通过继电器向 ZR 发送 ON/OFF 命令、然后 ZC 向 ZR 发送 Read 属性以收集 ON/OFF 状态。 我是否正确理解了这一点? 如果是、您的问题是什么?

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

    是的、你是对的。 我的问题是 、即使在打开 ZCS 的 LED 时、我也没有收到响应消息。

    我需要类似这样的回答:

    蓝线是响应、正如您在我发送的前一个屏幕截图中看到的、没有任何响应  

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

    发送开/关命令并读取开/关属性时是否有监听器日志?

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

    我无法使数据包监听器2正常工作。 我遵循了 TI 提供的说明、但它似乎不起作用。

    我可以做的最接近的是应用程序中的日志记录功能、该功能发送以下内容:

    AF_DATA_Request_RSP ({'scAddr':0xeef4、'ClusterId':6})在5.002s 后超时(0个数据包不匹配)

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

    没有监听器日志、我无法判断任何内容。 我建议您再次设置监听器以检查此问题。

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

    当我尝试让监听器运行时、您能回答我问 Ryan 的问题吗?

    "它确实输入 了 zclSampleSw_ProcessInDefaultRspCmd、但我不知道如何修改它以发送响应。 请 提供一个示例吗?"

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

    我无法理解为什么您需要在  zclSampleSw_ProcessInDefaultRspCmd?中发送响应

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

    您是否正在尝试向应用程序通知  zclSampleSw_ProcessInDefaultRspCmd?  可能未定义 MT_AF_CB_FUNC、因此 MT 层不会传输 AF 传入消息。  此外、您的应用程序日志指示禁用了默认响应(帧控制等于0x10)。

    此致、
    Ryan

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

     定义了 MT_AF_CB_FUNC。

    我想补充一点、现在我运行 zc_SW 和 zr_light、这与我以前运行的 zc_light 和 zr_sw 相反。 我这样做、这样我使用的应用程序就更有意义了。

    由于这一变化,我将重新解释 整个事物是如何 运行的,以及 我希望从它中得到什么。 请忽略以前的任何信息或代码

    1.按下 ZR (灯)上的切换继电器

    2.从 ZC (交换机)向 ZR 发送 af 数据请求

    3. ZR LED 已打开

     在 zclSampleLight_processAfIncomingMsgInd 函数中、我添加了以下代码、以便从步骤1切换继电器正常工作

    if (afMsg.cmd.DataLength = 3 && afMsg.clusterid = 0x06){

    zclSampleLight_OnOffCB (COMMAND_ON_OFF_TOGGLE);

    我需要的是第4步(一直到第3步运行的代码)

    4. ZR 对 ZC 的响应表示 af 数据请求已成功

     我很抱歉、我不熟悉 Zigbee

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

    这是为 ZCL_CLUSTER_ID_General_ON_OFF 选项设置 AF_ACK_REQUEST、如 Z-Stack 用户指南的端到端确认部分所述并在 Zigbee 基本项目开发 SLA 的任务2中进行演示

    此致、
    Ryan

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

    我有一些问题:

    1.  应该在哪里配置 端到端确认、zc_SW、zr_light 或两者?

    2.我应该在这个代码段中的"if"内做什么? 请举一个例子。

    case zstackmsg_CmdIDs_AF_DATA_CONFIRM_IND
    
    zstackmsg_afDataConfirmInd_t * Pind =
    (zstackmsg_afDataConfirmInd_t *) pMsg
    if (savedAPSCount == Pind->req.transID)
    
    //在此执行操作
    }
    
    中断

    我还想补充一点、我正在使用 MT 接口。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当我在 ZC 中按下切换继电器时、代码通过 MT_AfDataRequest 运行

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

    启用 APS ACK 请求位在 zc_SW 上最重要、因为您正在从此器件发送开/关命令。  除非报告开/关属性(如 SLA)、否则在 ZR_Light 上启用不会有选择。

    2.仅当您需要从应用程序进行其他 APS ACK 处理时才需要该代码,否则已分别根据  SysConfig/ti_Zstack_config.h 中的 APS 重试/APSC_MAX_FRAME_REQUESS 执行重试。  由于您已启用 MT、因此  应在主机上接收 AF_DATA_CONFIRM MT_AF 回调。

    此致、
    Ryan

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

    总结:

    ZC_SW: 我已按照您发送给我的《Z-Stack 用户指南》中的指南实现了启用 APS ACK 请求位

    ZR_Light:我添加的唯一代码是我之前在 zclSampleLight_processAfIncomingMsgInd 中提到的代码

    那么、从您的第二 个答案中、我实际上需要的唯一代码是端到端指南中的第一个点和第三个点?

    它根本不会输入 MT_AfDataConfirm。 它在 ZR_light 中输入 afDataConfirm,但当它到达  MT_AfDataConfirm 驻留的 if 语句时,它会跳过它。  定义了 MT_AF_CB_FUNC

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

    static zclOptionRec_t zclSampleSw_ZCL_Options[] = {ZCL_CLUSTER_ID_GENERAL_ON_OFF, AF_ACK_REQUEST };
    zcl_registerClusterOptionList( SAMPLESW_ENDPOINT, 1, zclSampleSw_ZCL_Options );

    我希望您调试 zc_SW、而不是 zr_light、因为应该在您的设置中从开关应用中启用 AF ACK 请求。

    此致、
    Ryan

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

    我调试了 zc_SW 并注意到两件事

    在 af 数据请求时,选项 的值为0。 是否应该由于  AF_ACK_REQUEST 而具有0x10?

    我在 af 数据请求的设置下添加了选项= AF_ACK_REQUEST、以便它可以进入此部分

    if (( OPTIONS & AF_ACK_REQUEST )&&
    (req.dstAddr.addrMode!= AddrBroadcast)&&
    ( req.dstAddr.addrMode != AddrGroup ))

    REQ.txOptions |= APS_TX_OPTIONS_ACK;

    我不知道我的做法是否正确、因此我希望对此进行一些澄清。

    2. 在 af 数据请求后,代码 会转到 af 数据确认。 同样、它不会输入 mt af 数据确认、因此我删除了 if 语句、然后它开始使用端点= 9和 zdo  (端点= 0)在所有 af 命令中向自己发送 af_register_rsp。 此外、在 af 命令上、它会多次响应。 也是如此  

    af 和 zdo 命令的 af 响应中有不同的 transID 计数器。 如果我不发送任何内容、它会每10秒发送一次响应

    #if defined ( MT_AF_CB_FUNC )
        /* If MT has subscribed for this callback, don't send as a message. */
    //    if ( AFCB_CHECK(CB_ID_AF_DATA_CNF,*(epDesc->task_id)) )
       // {
          /* Send callback if it's subscribed */
          MT_AfDataConfirm ((void *)msgPtr);
          /* Release the memory. */
          OsalPort_msgDeallocate( (void *)msgPtr );
       // }
      //  else
    #endif
       // {
          /* send message through task message */
         // OsalPort_msgSend( *(epDesc->task_id), (uint8_t *)msgPtr );
       // }

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

    1。针对由   zcl_registerClusterOptionList 指定 AF_ACK_REQUEST 的群集中的 ZCL 消息以及未使用广播/组播寻址的情况、才会设置 APS_TX_OPTIONS_ACK。

    2. 确保您没有从 应用程序注册 ZDO 端点、这是由内部 Z-Stack 库完成的。  您应该为发送/接收 ZCL 命令的端点使用 AF_REGISTER (即 9)。  请务必替换您删除的代码。

    此致、
    Ryan

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

    2.端点被注册的唯一位置是 zclSampleSw_Init

      //Register Endpoint  
      zclSampleSwEpDesc.endPoint = SAMPLESW_ENDPOINT;
      zclSampleSwEpDesc.simpleDesc = &zclSampleSw_SimpleDesc;
      zclport_registerEndpoint(appServiceTaskId, &zclSampleSwEpDesc);

    我仍然没有得到任何答复。  

    当我按下 zc_SW 中的切换继电器时、代码从 zclSampleSw_processAfIncomingMsgInd 传递、这意味着 zr_light 发回一些内容、但应用程序无法捕获。

    此外、我不知道我之前是否提到过它、但应用程序会读取 通过 UART 发生的通信

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

    这就是问题所在、因为此端点是由本地应用程序及其 appServiceTaskId 实体注册的、所以消息不会传递到 MT_TaskID。  这是为了防止两个应用程序(MT 主机和本地)控制同一个端点。  MT 无法订阅此端点的命令、因为它是在其他位置处理的。  这是 MT 接口最适合 ZNP 项目的一个原因、而不适合 ZCL 应用。

    此致、
    Ryan

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

    我通过在  zclSampleSw_processAfIncomingMsgindd 的末尾放置 MT_AfIncomingMsg (&afMsg)来修复它。

    感谢您的帮助!!!