1.单播/绑定/组播/广播,中单播和绑定是不是一样稳定?组合和广播相对稳定性会差一点?
2.绑定的话,如何去控制一组设备呢?假如环境中有多种设备需要分别控制,比如开关、插座、灯具,
他们都绑定到协调器的话,如何在控制的时候只控制一组?(比如控制灯的时候,开关插座不要被控制)
Viki Shi:
设置不同的组,分别控制,参考:blog.csdn.net/…/79158107
YiKai Chen:
回复 Viki Shi:
单播和绑定是一样稳定,组播和广播相对稳定性会差
user5367314:
回复 YiKai Chen:
比如一个环境里有多种终端(开关,插座,灯具)
在入网的时候他们全部都和协调器绑定了,如果我想控制所有的开关或者插座或者灯具中的一类
因为绑定后发命令所有的终端都能收到,我是不是通过不同的命令去控制不同类的设备即可?
YiKai Chen:
回复 user5367314:
是的
user5367314:
回复 YiKai Chen:
协调器给终端发送数据,终端非睡眠的,
1.如果终端没有收到数据,协调器也会Hold 7秒
2.当终端没有收到时,协调器会重传,这个重传的间隔是多长时间?
3.如果终端没有收到数据,协调器会Hold 7秒,
如果此时协调器需要给另一个终端发送数据,假如第二个终端也没收到,
此时协调器会hold两个终端的数据吗?
Viki Shi:
回复 user5367314:
1&2、终端是否收到,可以通过MAC ACK判断:
#define MAC_ACK_WAIT_DURATION0x40/* 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_TMR1 // To hold msg for sleeping end devices for 30 secs: // #define CNT_RTG_TIMER1 // #define NWK_INDIRECT_MSG_TIMEOUT 30 // To hold msg for sleeping end devices for 30 mins: // #define CNT_RTG_TIMER60 // #define NWK_INDIRECT_MSG_TIMEOUT 30 // To hold msg for sleeping end devices for 30 days: // #define CNT_RTG_TIMER60 // #define NWK_INDIRECT_MSG_TIMEOUT (30 * 24 * 60) // Maximum msgs to hold per associated device. #define NWK_INDIRECT_MSG_MAX_PER3 // Maximum total msgs to hold for all associated devices. #define NWK_INDIRECT_MSG_MAX_ALL\(NWK_MAX_DATABUFS_TOTAL - NWK_INDIRECT_MSG_MAX_PER)
user5367314:
回复 Viki Shi:
协调器给终端发数据,为了保证终端收到的稳定性(慢一点没关系)
1.协调器端增加重发次数,需要改下面的哪个参数?
-DAPSC_MAX_FRAME_RETRIES=3
-DNWK_MAX_DATA_RETRIES=3
-DMAX_POLL_FAILURE_RETRIES=3
2.#define MAC_ACK_WAIT_DURATION0x40
这个参数默认是64毫秒?是否可以改大?64毫秒内没有收到应答会再次发送?
那睡眠终端64毫秒肯定收不到,怎么处理?
3.用户可以设置hold数据的时间及数量
这个是改哪两个参数?
Viki Shi:
回复 user5367314:
1、MAC_MAX_FRAME_RETRIES
2、参考:e2e.ti.com/…/756521没收到可以重传
3、看上面贴的代码
user5367314:
回复 Viki Shi:
MAC_MAX_FRAME_RETRIES默认的次数是3次?
如果想增加重传的次数,例如想改为5次
uint8 i = 5;
MAC_MlmeSetReq( MAC_MAX_FRAME_RETRIES, &i);
我在void zclSampleSw_Init( byte task_id )的后面加上上面的代码
是不是就可以了?
YiKai Chen:
回复 user5367314:
可以