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、终端节点首先以一个较大的睡眠时间timer1定时休眠,唤醒之后向协调器发送传感器数据,并在配置文件中如下设置:

/* The number of milliseconds to wait between data request polls to the coordinator. */
-DPOLL_RATE=0          //关闭终端节点在休眠时不停向协调器发送data request请求,省电

/* This is used after receiving a data indication to poll immediately
* for queued messages...in milliseconds.
*/
-DQUEUED_POLL_RATE=100

/* This is used after receiving a data confirmation to poll immediately
* for response messages...in milliseconds
*/
-DRESPONSE_POLL_RATE=100          //设置终端节点在休眠唤醒之后,发送传感器数据并接收到确认之后,再向协调器发送Data Request请求

2、协调器在接收到终端发送的数据之后,立刻向终端发送一个指令。若此时终端正在休眠,那么暂时保存该指令,直到下次收到终端的Data Request请求再发送给他。

3、如果按照上述的机制执行,比如说timer1是10分钟,那么以终端节点来看得到的结果:

Data1(向协调器发送数据,协调器接收到之后发送指令)----------------(终端休眠10分钟,此时接收不到指令,协调器暂存指令)------------------------------Data2(唤醒之后发送数据,收到确认帧后发送Data Request请求,接收到父节点的指令)

这样看,终端在从协调器发送指令,直到终端接收到数据,其实是接近一个timer1的时长,如果这个timer1更大,那么实时性就满足的不够好了。

4、我在想,可不可以这样设计,在Data1发送数据之后,立刻休眠一个很短的timer2(timer2<<timer1),然后唤醒,但是并不发送数据,只发送Data Request,如果父节点有数据发给他,那么接受,如果没有那么接着进行一个(timer1-timer2)的休眠,下一次依然是唤醒之后发送数据,依次循环。这样可以很大程度上的控制数据的实时性。

 

问题:

1、但是我也不直到该怎么设置,DRESPONSE_POLL_RATE是要在接收到父节点的数据接收确认帧之后才发送Data Request的,不发送数据的话应该是不能触发这个Data Request的发送的吧?那要怎么设置这个“然后唤醒,但是并不发送数据,只发送Data Request,”呢?

2、再就是这个DQUEUED_POLL_RATE参数,我有点不懂这个是啥意思,会不会跟我上面的问题有关?