理想状态:
1. 协调器连接串口,通过上位机打开协调器的com口,同时终端也入网了。
2. 通过协调器发送广播给所有在同一网络的终端,内容是即将要修改的信道号。
3. 终端接收到广播
4. 终端修改信道成功
现在的问题是:
1.2.3都解决了,通过调试能看到终端收到了协调器发的广播。但是信道没修改成功。
问题详细:
_NIB.nwkLogicalChannel = 17; //17是新修改的信道号
NLME_UpdateNV(0x01); //0x01的定义是保存网络层NIB
SystemReset(); //重启后,保存的信息生效
这段代码没有问题,因为我用串口直接改协调器是可以的,从没有出错过,重启后很快就能组网。
我烧板子的时候信道=26,代码中更改成12。
当终端把这段代码走完后,信道改了,也确实保存了,但是不能入网,此时协调器也改成和终端同样的信道号,终端不断的发送重启的信息,我打印出log看NV区的信道也确实是我刚才改的。当我一旦把协调器的信道恢复成初始信道26时,终端自动的将自己信道恢复成26并入网。也就是说终端只记得他之前入网的信道,不管自己的信道是多少,只要之前的网络还在,就自适应自我调整去加入,我觉得很神奇!!! 我怀疑是因为nv_restore.我查了很久,查到了一句话:
加入这个宏定义好处肯定是有的,但是问题也来了,如果终端想加入别的协调器网络,既是PANID和频道都一样,不管重启多少次都不会加入新的协调器中。
但是nv_restore不能去掉,还有别的功能是依赖于它的。
我又找到一个函数:
application wants to delete the stored NV information It just needs to set the ZCD_NV_STARTUP_OPTION as explained below and do a reset.
"If the application would like to force a "new" join, the application should set the ZCD_STARTOPT_DEFAULT_NETWORK_STATE bit in the ZCD_NV_STARTUP_OPTION NV item before calling this function. "New" join means to not restore the network state of the device. Use zgWriteStartupOptions() to set these options
[zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE);]
我把这一句放到了修改信道的前面,但是SystemReset()后又恢复到了初始的信道号。
有没有什么方法可以让nv区清除入网信息,同时也要接受新的参数?
谢谢大家!!!鞠躬!鞠躬!鞠躬!
xiao zhang4:
该问题已解决。
Guanqiang li:
回复 xiao zhang4:
哥们,我遇到和你一样的情况,协调器修改panid和信道没有问题,通过串口可以看到数据修改了,而且重启之后也是修改的值,终端设备这边也显示修改了,但是却不能和协调器组网。把协调器的信道和PANID修改到原来的值时,终端设备就可以自动入网了,不知道为什么??请大神指点一二,不胜感谢,,,,,,
lei:
回复 xiao zhang4:
我也遇到了相同的问题,希望能指点一下下。
xiao zhang4:
回复 Guanqiang li:
tools–>f8wConfig.cfg
-DDEFAULT_CHANLIST=0x07FFF800 使能全部信道
就可以了
如果你不想要第几信道,就在这个总值里面减掉就可以了。
比如:
//-DDEFAULT_CHANLIST=0x02000000 // 25 – 0x19//-DDEFAULT_CHANLIST=0x01000000 // 24 – 0x18//-DDEFAULT_CHANLIST=0x00800000 // 23 – 0x17//-DDEFAULT_CHANLIST=0x00400000 // 22 – 0x16//-DDEFAULT_CHANLIST=0x00200000 // 21 – 0x15//-DDEFAULT_CHANLIST=0x00100000 // 20 – 0x14//-DDEFAULT_CHANLIST=0x00080000 // 19 – 0x13//-DDEFAULT_CHANLIST=0x00040000 // 18 – 0x12//-DDEFAULT_CHANLIST=0x00020000 // 17 – 0x11//-DDEFAULT_CHANLIST=0x00010000 // 16 – 0x10//-DDEFAULT_CHANLIST=0x00008000 // 15 – 0x0F//-DDEFAULT_CHANLIST=0x00004000 // 14 – 0x0E//-DDEFAULT_CHANLIST=0x00002000 // 13 – 0x0D//-DDEFAULT_CHANLIST=0x00001000 // 12 – 0x0C//-DDEFAULT_CHANLIST=0x00000800 // 11 – 0x0B
只需要用11,12信道,就是:
-DDEFAULT_CHANLIST=0x000001800
明白啦?
有问题再找我。
xiao zhang4:
回复 lei:
看我上面的回答。
xiao zhang4:
回复 Guanqiang li:
使能全部信道
f8wConfig.cfg
-DDEFAULT_CHANLIST=0x07FFF000 //排除11信道
需要哪个就加上,不需要就不用加。
xiao zhang4:
回复 Guanqiang li:
还有啊,我明明是个妹子!!!
Guanqiang li:
回复 xiao zhang4:
好的,谢啦
Guanqiang li:
回复 xiao zhang4:
晕,不好意思,误会,总之谢谢啦,上周六我的这个问题也解决了,受了你的不少启发
Guanqiang li:
回复 xiao zhang4:
xiaozhang4美女,我的终端设备重新组网之后,一直在不断的发data request请求,有没有办法让它不发呢,我的QQ778146520,加个好友吧