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.

[参考译文] CC2530:CC2530上的 ZStack 3.0.2中的用户定义 Cluser (使用命令)

Guru**** 2538950 points
Other Parts Discussed in Thread: CC2530

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/968216/cc2530-user-defined-cluser-with-command-in-zstack-3-0-2-on-cc2530

器件型号:CC2530

大家好、

我正在 使用 CC2530上的 IAR 10和 ZStack 3.0.2进行编程。 示例项目中。 我创建了一个用户群集和命令(收到 cmd Server)。

设置协调器和终端设备之间的连接后、  终端设备可以发送群集("ZCL_CLUSTER_LOW_ON_OFF"和命令"CMD_TOGG")并成功地由协调器接收。   但是,协调器无法接收到我的群集(命令)(即使没有触发协调器上的通信消息)。 但是、"zcl-SendCmd"在终端设备上返回"z_sucess"。

是否有人遇到过类似的问题,以及如何解决? 


提前感谢您的帮助。

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

    您好、Wei、

    您是否使用监听器设备来查看消息是否通过无线方式发送?  您是否能够共享您的自定义 Zigbee 群集实现和 zclSendCmd 语法?  请确保两个器件上都使用了具有支持群集的正确端点。  以下是一些相关的 E2E 主题:

    https://e2e.ti.com/support/wireless-connectivity/zigbee-and-thread/f/158/t/759125 
    https://e2e.ti.com/support/wireless-connectivity/zigbee-and-thread/f/158/t/707353 
    https://e2e.ti.com/support/wireless-connectivity/zigbee-and-thread/f/158/t/765190 
    https://e2e.ti.com/support/wireless-connectivity/zigbee-and-thread/f/158/t/679655 
    https://e2e.ti.com/support/wireless-connectivity/zigbee-and-thread/f/158/t/870940

    此致、
    Ryan

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

    为了补充 Ryan 的建议、我还建议您检查是否使用了正确的源端点和目标端点以及正确的群集。

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

    Ryan 和 Yikai、

    感谢你的答复。 根据您的建议、我再次检查了。 两个终端设备、协调器上的端点都设置正确。 监听器不捕获用户定义的群集和命令(无无线消息捕获)。

    我将代码的一些部分按如下方式进行了处理:

    ->终端设备端:
     在文件"zcl_genericapp_data.c"中、我有以下代码:
             const cid_t zclGenericApp_OutClusterList[]=
             {
             ZCL_CLUSTER_ID_GEN_BASIC、
     
              // GENERICAPP_TODO:在此处添加应用特定输出群集。
              //      有关群集 ID 定义,请参见 zcl.h
              ZCL_CLUSTER_ID_GEN_ON_OFF、
              ZCL_CLUSTER_ID_H2_CMD001、
             };
      在文件"zcl_genericapp.c"中、我有以下代码:
               //每500ms 发送一次切换
               if (Events & SAMPLESW_TOGGLE_TEST_EVT)
              {
                HalUARTWrite (0、"正在发送命令切换\n"、24);
                //工作
                //ZStatus_t s = zclGeneral_SendOnOff_CmdToggle (GENERICAPP_EndPoint、&zclSampleH2_DstAddr、false、0);
                //不工作
                ZStatus_t s = zclGeneral_SendH2CMD_001 (GENERICAPP_ENPOINT、&zclSampleH2_DstAddr、false、0);
                //返回未处理的事件
                返回(事件^ SAMPLESW_TOGGLE_TEST_EVT);
              }
        其中"zclGeneral_SendH2Cmd_001"在"zcl_general.h"中定义如下。
       
       #define zclGeneral_SendH2Cmd_001 (a、b、c、d) zcl_SendCommand ((a)、(b)、ZCL_CLUSTER_ID_H2_CMD001、COMMAND_H2_CMD001、true、 ZCL_FRAME_CLIENT_SERVER_DIR、(c)、0、(d)、0、 空)
       
       客户在"zcl.h"和"zcl_general.h"中定义了 ZCL_cluster_ID_H2_CMD001和 COMMAND_H2_CMD001。
       
       
    ->协调人端:
     在文件"zcl_genericapp_data.c"中、我有以下代码:
     
     
          const cid_t zclGenericApp_InClusterList[]=
          {
                ZCL_CLUSTER_ID_GEN_BASIC、
                ZCL_CLUSTER_ID_GEN_Identify、
     
                // GENERICAPP_TODO:在此处添加应用特定的输入群集。
                //      有关群集 ID 定义,请参见 zcl.h
                ZCL_CLUSTER_ID_GEN_ON_OFF、
                ZCL_CLUSTER_ID_H2_CMD001
          };
          其中"ZCL_CLUSTER_ID_H2_CMD001"是我的集群。
          (笑声)
           const zclAttrRec_t zclGenericApp_Attrs[]=
          {...
          
            {
             ZCL_CLUSTER_ID_H2_CMD001、
             { //属性记录
                ATTRID_H2_CMD001、
                ZCL_datatype_Boolean、
                ACCESS_CONTRAL_READ | ACCESS_CONTRAL_WRITE、
                (空*)&zclSampleUser_H2_Cmd001
             }
          }
          其中"zclSampleUser_H2_Cmd001"是用于处理命令"COMMAND_H2_CMD001"的回调。
     在文件"zcl_genericapp.c"中、我有以下代码:

          静态 zclGeneral_AppCallbacks_t zclGenericApp_CmdCallbacks =
          {
           zclGenericApp_BasicResetCB、            //基本群集复位命令
           空、                                  //标识触发效果命令
           zclSampleLight_H2_OnOffCB、             //开/关集群命令
           空、                                  //开/关集群增强型命令关闭有效
           空、                                  //开/关集群增强了使用 Recall Global Scene 打开的命令
           空,                                  //开/关集群增强命令开,定时关闭
          #ifdef ZCL_LEVEL_CTRL
           空,                                  //级别控制移动到级别命令
           空                                  ,//级别控制移动命令
           空                                  ,//级别控制步骤命令
           空                                  ,//级别控制停止命令
          #endif
          #ifdef ZCL_Groups
           空、                                  //组响应命令
          #endif
          #ifdef ZCL_Scenes
           空、                                 //场景存储请求命令
           空,                                 //场景调用请求命令
           空、                                 //场景响应命令
          #endif
          #ifdef ZCL_ALARMS
           空、                                 //警报(响应)命令
          #endif
          #ifdef SE_UK_EXT
           空,                                 //获取事件日志命令
           空,                                 //发布事件日志命令
          #endif
           空                                 、// RSSI Location 命令
           空                                 、// RSSI 位置响应命令
           zclSampleUser_H2_Cmd001               //H-2 Technik:用户定义的 commnad 001
          };
       在此文件中、实现了我的命令处理程序。

    在文件"zcl_general.h"中、我修改了结构如下:
       typedef 结构
       {
        zclGCb_BasicReset_t              pfnBasicReset;               //基本群集重置命令
        zclGCB_IdentifyTriggerEffect_t   pfnIdentifyTriggerEffect;    //确定触发效果命令
        zclGCb_OnOff_t                   pfnOnOff;                    //开/关群集命令
        zclGCb_OnOffWithEffect_t     pfnOnOff_OffWithEffect;      //开/关集群增强型命令关闭有效
        zclGCB_OnOff_OnWithRecallGlobalScene_t pfnOnOff_OnRecallWithScene_// 开/关集群增强命令结合 Recall Global Scene 打开
        zclGCB_OnOff_OnWithTimedOff_t    pfnOnOff_OnWithTimedOff;     //开/关集群增强命令在 Timed Off 时打开
       #ifdef ZCL_LEVEL_CTRL
        zclGCB_LevelControlMoveToLevel_t pfnLevelControlMoveToLevel;  //级别控制移动到级别命令
        zclGCB_LevelControlMove_t        pfnLevelControlMove;         //级别控制移动命令
        zclGCB_LevelControlStep_t        pfnLevelControlStep;         //级别控制步骤命令
        zclGCB_LevelControlStop_t        pfnLevelControlStop;         //级别控制停止命令
       #endif
       #ifdef ZCL_Groups
        zclGCb_GroupRsp_t                pfnGroupRsp;                 //组响应命令
       #endif
       #ifdef ZCL_Scenes
        zclGCb_SceneStoreReq_t           pfnSceneStoreReq;            // Scene Store Request 命令
        zclGCb_SceneRecallReq_t          pfnSceneRecallReq;           //场景调用请求命令
        zclGCb_SceneRsp_t                pfnSceneRsp;                 // scene response 命令
       #endif
       #ifdef ZCL_ALARMS
        zclGCb_Alarm_t                   pfnAlarm;                    // Alarm (响应)命令
       #endif
       #ifdef SE_UK_EXT
        zclGCb_GetEventLog_t             pfnGetEventLog;              //获取事件日志命令
        zclGCb_PublishEventLog_t         pfnPublishEventLog;          //发布事件日志命令
       #endif
        zclGCb_Location_t                pfnLocation;                 // RSSI Location 命令
        zclGCb_LocationRsp_t             pfnLocationRsp;              // RSSI Location Response 命令
        
        zclGCb_H2md001_t                pfnH2md001;                 //H-2 Technik:命令001
       } zclGeneral_AppCallbacks_t;
                   
       其中   "zclGCb_H2md001_t"定义为"typedef void (* zclGCb_H2md001_t)(uint8 cmd)"
                
                

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

    zclSampleH2_DstAddr 中包含什么内容?

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

    您好、yikai、

    在终端器件侧、使用以下值设置"zclSampleH2_DstAddr":

    void zclGenericApp_Init(字节 task_id )

     
     zclGenericApp_TaskID = task_id;
     
     zclSampleH2_DstAddr.addrMode =(afAddrMode_t) AddrNotPresent;
     zclSampleH2_DstAddr.endpoint = GENERICAPP_ENPOINT;          
     zclSampleH2_DstAddr.addr.shortAddr = 0; //协调器

    我的 clused 在文件"zcl.h"中定义

    #define ZCL_CLUSTER_ID_H2_CMD001                           0x0018  

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

    如果使用 AddrNotPresent,则必须执行绑定。 是否执行绑定?

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

    Yikai、

    在终端设备的 init 函数中、 我调用了

     BDB_StartCommissioning (BDB_commissioning_mode_NWK_Steering | BDB_commissioning_mode_finding_binding);         
           

    在协调器的 init 函数中、我调用了:

     BDB_StartCommissioning (BDB_commissioning_mode_NWK_forming|BDB_commissioning_mode_finding_binding);

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

    我不确定是否会正确绑定到您的自定义群集。 我建议您为您的自定义群集发送绑定请求。

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

    我同意 YK 的观点,即绑定很可能不是在 ZED 上形成的,因此您应该手动创建一个绑定或使用直接寻址。

    此致、
    Ryan

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

    您好、Ryan 和 Yikai、

    我测试了另一个群集(ZCL_CLUSTER_ID_GEN_ON_OFF)和命令(COMMAND_ON)。 它运行良好(使用数据包监听器、短 addr 由协调器分配)。 它是否能证明连接(绑定)正常 ? 您是否知道对最大群集数量是否有任何限制?

    Wei

     

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

    否、它仅证明开/关集群已成功绑定。 不同的群集需要单独绑定。

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

    您的应用程序很可能未超过 NWK_MAX_BINARTing_entries、并且每个端点不支持定义的最大群集数。  每个节点限制为少于255个端点、但这也不是您的问题。  您可以参阅 Zigbee 基础 SLA 以获取手动绑定过程的示例、但请注意、由于器件架构的差异、无法直接复制代码。

    此致、
    Ryan