-
uint8 osal_start_reload_timer( uint8 taskID, uint16 event_id, uint16 timeout_value )
-
本帖最后由 mocai 于 2017-11-20 17:03 编辑
使用CC2530芯片,ZStack-CC2530-2.5.1a协议栈。为了减少Zigbee终端和协调器间的时延,将Zigbee终端设置为一直接受消息,即在f8w.Config.cfg中设置了-DRFD_RCVC_ALWAYS_ON=TRUE,其他不修改。
我发现在主控计算机不停的通过串口发心跳包给Coordinator,Coordinator再通过无线转发心跳数据包给EndDevice,然后EndDevice通过无线发心跳回复包给Coordinator,Coordinator再将该数据包通过串口发送给主控计算机。在该情况下,如果EndDevice再开启定时器不停的给Coordinator发ADC数据采集包,Coordinator再通过串口发送ADC数据采集包给主控计算机,那么就会频繁的出现orphan notification或者beacon,然后EndDevice再以孤儿的形式重新入网。
(该情况下,
Coordinator作用:
1.通过串口接受主控计算机发来的心跳包,并将该心跳包通过广播发送给EndDevice;
2.接受EndDevice的心跳回复包,并将该心跳回复包串口转发给主控计算机;
3.接受EndDevice的ADC数据采集宝,并将该ADC数据采集包通过串口转发给主控计算机。
EndDevice作用:
1.接受Coordinator发来的心跳数据包,并回复心跳回复包给Coordinator;
2.通过定时器,每几秒发送一次ADC采集数据包给Coordinator。
)
但如果心跳包是Coordinator中通过定时器不停的发给EndDevice的哈,那么即便EndDevice开启定时器不停的给Coordinator发ADC数据采集包,Coordinator再通过串口发送ADC数据采集包给主控计算机。如果是这个情况,那么网络状态比较稳定。
(
该情况下,
Coordinator作用:
1.开启定时器,每5s广播一个心跳包给所有EndDevice;
2.接受EndDevice的心跳回复包,并将该心跳回复包串口转发给主控计算机;
3.接受EndDevice的ADC数据采集宝,并将该ADC数据采集包通过串口转发给主控计算机。
EndDevice作用:
1.接受Coordinator发来的心跳数据包,并回复心跳回复包给Coordinator;
2.通过定时器,每几秒发送一次ADC采集数据包给Coordinator。
)
所以,是因为主控计算机和Coordinator频繁的串口通信导致的终端频繁成孤儿节点么?如果不是,那么为什么会出现第一种的情况?第一种情况的抓包情况如图所示
-
对不起,发现不是定时器的问题。抱歉
-
youxias 发表于 2017-11-2 11:14
newChannel=0x01000000;//要改的新信道
osal_nv_write(ZCD_NV_CHANLIST,0,sizeof(newChannel),&newChann ...
谢谢您的回复,我已经实现了我想要的功能。我开始想实现的功能只是使终端设备在我的子网之间切换而已。
-
zhaojun_xf 发表于 2017-10-30 09:20
玩zigbee抓包还是要用Ubiqua,比较直观,每个数据都有完整的解释,TI的抓包工具最多就够入门,不够专业。
Ubiqua这个软件连破解版都要钱啊,还不便宜
-
nicole088 发表于 2017-10-22 15:33
感觉不是多个定时器的问题。
1、产生 RECEIVE_TIME事件后,你做了通道的切换。这个时候协调器和终端节点就 ...
第一个定时器起的作用是如果5秒没有接收到数据包,就会触发RECEIVE_TIME事件,然后才会通道切换。一般情况下5s内一定会有数据包,然后重启RECEIVE_TIME定时器。第二个定时器是实现定时上传数据的功能。
-
协议栈Tools中f8wConfig.cfg文件中如下图所示的代码应该对楼主有所帮助
-
多撒阿萨德 发表于 2017-7-21 12:06
您好~我想请问一下具体是调整了哪些参数?
-DRFD_RCVC_ALWAYS_ON=FALSE
-
该问题已基本解决,就在.cfg中的一个参数可以设置~~~谢谢~
-
lyzhangxiang 发表于 2017-7-18 13:08
由于你采用的是ed
ED的数据接收时poll方式的,数据没有第一时间发送给ed而是缓存起来
等ed过来poll看是否 ...
我抓包后,协调器每次发送一个数据,终端都会等到一个Data request包发出去,然后协调器再重发这个数据包,然后终端才处理这个数据包。每两个Data request包之间间隔在f8wConfig.cfg文件中。我查资料这个Data request包类似心跳包一样。我把DRFD_RCVC_ALWAYS_ON设置为true之后,终端从接收包到发出数据包的间隔就只有几毫秒了。如果要调整poll间隔事件的话,需要调整那个参数?谢谢
-
mocai 发表于 2017-5-25 22:07
ZDNwkConfig.h 和 ZDNwkConfig.lib这两个文件定义是什么样子的呀?
您看我这有可以修改panid么?
[mw_shl ...
这个如果你直接这么重启,可能会因为extendedPANID的原因连不上,最好把这个extendedPANID给写了~
-
问题我也不知道怎么解决的,但后面没有遇到这种问题。我把IAR关了,串口助手关了,重新打开好像就可以了
-
这个好像是协议栈默认的吧~我也不确定
-
我也遇到这种传输时长比较长的问题。我猜测会不会是终端休眠的原因。但我也不知道是不是这个,好希望可以让终端不数据包biubiubiu的快速的发~~~~
-
如附件图片所示
-
谢谢~
-
ZDNwkConfig.h 和 ZDNwkConfig.lib这两个文件定义是什么样子的呀?
您看我这有可以修改panid么?
void Set_Panid(uint16 u16NewPanid)
{
uint8 u8BackCode;
_NIB.nwkPanId = u16NewPanid;
uint16 pan_id;
pan_id = u16NewPanid;//你想要的ID
//zb_WriteConfiguration(ZCD_NV_PANID, sizeof(uint16), &pan_id) ;
osal_nv_item_init(ZCD_NV_PANID , sizeof(uint16) , NULL);
u8BackCode = osal_nv_write( ZCD_NV_PANID , 0 , sizeof(uint16) , &pan_id); //写Flash中和PANID存储有关的部分
NLME_RestoreFromNV();//重启后才会启用新的PAN_ID,不然只是修改了NV里面的数据。
if(u8BackCode == ZSUCCESS)
{
NLME_UpdateNV(0x01); //指示将网络的相关信息写入Flash中
HAL_SYSTEM_RESET(); //重启系统
}
}复制代码
-
由于我的协议栈是ZStack-CC2530-2.5.1a,没有了sapi.h里面的一些以zb_开头的函数。
-
我也想知道,战略mark
-
wateras1 发表于 2016-5-3 10:48
通过串口发送,具体命令就自己定义了
你好,我想知道在ZigBee定义一个用于切换channel的函数,在这个函数里面需要如何操作,即需要调用哪些协议栈提供的函数?谢谢