首先说下我想实现什么:
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参数,我有点不懂这个是啥意思,会不会跟我上面的问题有关?
user5302099:
问题已经解决,可以去我的博客中查看相关步骤blog.csdn.net/…/80019403