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.

ZigBee各种传输方式的稳定性对比

1.单播/绑定/组播/广播,中单播和绑定是不是一样稳定?组合和广播相对稳定性会差一点?

2.绑定的话,如何去控制一组设备呢?假如环境中有多种设备需要分别控制,比如开关、插座、灯具,

他们都绑定到协调器的话,如何在控制的时候只控制一组?(比如控制灯的时候,开关插座不要被控制)

  • 设置不同的组,分别控制,参考:blog.csdn.net/.../79158107
  • 单播和绑定是一样稳定,组播和广播相对稳定性会差
  • 比如一个环境里有多种终端(开关,插座,灯具)
    在入网的时候他们全部都和协调器绑定了,如果我想控制所有的开关或者插座或者灯具中的一类
    因为绑定后发命令所有的终端都能收到,我是不是通过不同的命令去控制不同类的设备即可?
  • 协调器给终端发送数据,终端非睡眠的,
    1.如果终端没有收到数据,协调器也会Hold 7秒
    2.当终端没有收到时,协调器会重传,这个重传的间隔是多长时间?
    3.如果终端没有收到数据,协调器会Hold 7秒,
    如果此时协调器需要给另一个终端发送数据,假如第二个终端也没收到,
    此时协调器会hold两个终端的数据吗?
  • 1&2、终端是否收到,可以通过MAC ACK判断:

    #define MAC_ACK_WAIT_DURATION             0x40  /* The maximum number of symbols to wait for an acknowledgment frame */

    3、会,用户可以设置hold数据的时间及数量:

    // 1-255 (0 -> 256) X RTG_TIMER_INTERVAL
    // A known shortcoming is that when a message is enqueued as "hold" for a
    // sleeping device, the timer tick may have counted down to 1, so that msg
    // will not be held as long as expected. If NWK_INDIRECT_MSG_TIMEOUT is set to 1
    // the hold time will vary randomly from 0 - CNT_RTG_TIMER ticks.
    // So the hold time will vary within this interval:
    // { (NWK_INDIRECT_MSG_TIMEOUT-1)*CNT_RTG_TIMER,
    //                                    NWK_INDIRECT_MSG_TIMEOUT*CNT_RTG_TIMER }
    #define NWK_INDIRECT_CNT_RTG_TMR    1
    // To hold msg for sleeping end devices for 30 secs:
    // #define CNT_RTG_TIMER            1
    // #define NWK_INDIRECT_MSG_TIMEOUT 30
    // To hold msg for sleeping end devices for 30 mins:
    // #define CNT_RTG_TIMER            60
    // #define NWK_INDIRECT_MSG_TIMEOUT 30
    // To hold msg for sleeping end devices for 30 days:
    // #define CNT_RTG_TIMER            60
    // #define NWK_INDIRECT_MSG_TIMEOUT (30 * 24 * 60)
    // Maximum msgs to hold per associated device.
    #define NWK_INDIRECT_MSG_MAX_PER    3
    // Maximum total msgs to hold for all associated devices.
    #define NWK_INDIRECT_MSG_MAX_ALL    \
                                (NWK_MAX_DATABUFS_TOTAL - NWK_INDIRECT_MSG_MAX_PER)

  • 协调器给终端发数据,为了保证终端收到的稳定性(慢一点没关系)
    1.协调器端增加重发次数,需要改下面的哪个参数?
    -DAPSC_MAX_FRAME_RETRIES=3
    -DNWK_MAX_DATA_RETRIES=3
    -DMAX_POLL_FAILURE_RETRIES=3
    2.#define MAC_ACK_WAIT_DURATION 0x40
    这个参数默认是64毫秒?是否可以改大?64毫秒内没有收到应答会再次发送?
    那睡眠终端64毫秒肯定收不到,怎么处理?
    3.用户可以设置hold数据的时间及数量
    这个是改哪两个参数?
  • 1、MAC_MAX_FRAME_RETRIES
    2、参考:e2e.ti.com/.../756521 没收到可以重传
    3、看上面贴的代码
  • MAC_MAX_FRAME_RETRIES默认的次数是3次?
    如果想增加重传的次数,例如想改为5次
    uint8 i = 5;
    MAC_MlmeSetReq( MAC_MAX_FRAME_RETRIES, &i);
    我在void zclSampleSw_Init( byte task_id )的后面加上上面的代码
    是不是就可以了?
  • MAC_MAX_FRAME_RETRIES的重传间隔是修改MAC_ACK_WAIT_DURATION还是MAC_RESPONSE_WAIT_TIME
    具体怎么改呢?能不能举例说明下?
  • 重传间隔應該是無法修改
  • MAC_MAX_FRAME_RETRIES和下面3个参数有什么区别?
    我这边需要增加重发次数,以提高成功率,
    把MAC_MAX_FRAME_RETRIES改大的同时,下面三个参数哪个需要改大?
    -DAPSC_MAX_FRAME_RETRIES
    -DNWK_MAX_DATA_RETRIES
    -DMAX_POLL_FAILURE_RETRIES
  • APSC_MAX_FRAME_RETRIES是application層的retry
    NWK_MAX_DATA_RETRIES是network層的retry
    MAX_POLL_FAILURE_RETRIES是ZED作polling 失敗的retry

    建議可以加大 NWK_MAX_DATA_RETRIES先試試
  • APSC_MAX_FRAME_RETRIES是application層的retry
    这个我在应用里发数据的时候,协议栈里是怎么知道需不需要重发 的?
    我是用下面的函数发送私有数据的,参数里是怎么和APSC_MAX_FRAME_RETRIES关联起来的
    ZStatus_t zcl_SendReportCmd( uint8 srcEP, afAddrType_t *dstAddr,
    uint16 clusterID, zclReportCmd_t *reportCmd,
    uint8 direction, uint8 disableDefaultRsp, uint8 seqNum )
  • zcl_SendReportCmd里會使能AF_ACK_REQUEST,如果沒收到AF_ACK_REQUEST,就會重发

  • zcl_SendReportCmd里會使能AF_ACK_REQUEST,如果沒收到AF_ACK_REQUEST,就會重发
    1.请问这个发送函数里的重发次数是在哪里设置的?
    2.这个函数使能AF_ACK_REQUEST,是在哪里使能的?
  • 1. 设置APSC_MAX_FRAME_RETRIES
    2. AF_DataRequest里的options參數
  • 我的发送函数参数配置是
    zcl_SendReportCmd( SAMPLESW_ENDPOINT, &zclSampleSw_DstAddr,
    ZCL_CLUSTER_ID_GEN_ON_OFF,
    pReportCmd, ZCL_FRAME_CLIENT_SERVER_DIR, TRUE, bdb_getZCLFrameCounter() );
    能看出来是否启用重发机制吗?对应这个上面函数的哪个参数?
  • zcl_SendReportCmd到最後會調用AF_DataRequest,你可以調試進去就可以看到是否启用重发机制