修改协调器PAN ID和Channel,协调器广播至所有的设备重启加入新建后的网络,修改不成功
理想状态:
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区清除入网信息,同时也要接受新的参数?
谢谢大家!鞠躬!鞠躬!鞠躬!
该问题已解决。
哥们,我遇到和你一样的情况,协调器修改panid和信道没有问题,通过串口可以看到数据修改了,而且重启之后也是修改的值,终端设备这边也显示修改了,但是却不能和协调器组网。把协调器的信道和PANID修改到原来的值时,终端设备就可以自动入网了,不知道为什么?请大神指点一二,不胜感谢,,,,,,
我也遇到了相同的问题,希望能指点一下下。
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
明白啦?
有问题再找我。
看我上面的回答。
使能全部信道
f8wConfig.cfg
-DDEFAULT_CHANLIST=0x07FFF000 //排除11信道
需要哪个就加上,不需要就不用加。
还有啊,我明明是个妹子!
好的,谢啦
晕,不好意思,误会,总之谢谢啦,上周六我的这个问题也解决了,受了你的不少启发
xiaozhang4美女,我的终端设备重新组网之后,一直在不断的发data request请求,有没有办法让它不发呢,我的QQ778146520,加个好友吧
data request是它本身zstack里的话吗?我没遇到过啊,是谁发给谁的呢?我给你留个邮箱,zxp113@126.com。我们可以一起探讨一下。
同学你好,我想请问下,协调器如何广播修改信道的信息给其他节点?广播的信息包括什么?在哪里编写这部分代码?我还是小白,所以问题比较多,麻烦详细讲一下吧,十分感谢!
你可以参考一下http://bbs.feibit.com/thread-8632-1-1.html这篇文章,很不错哦
谢谢你的分享~很有用,有问题再跟你讨论~
漂亮妹子你好啊@@我想请问一下你能不能把你的程序给我借鉴一下?我最近在做毕业设计,在网上找不到类似的程序可以参考,浪费了很多时间都没弄明白要怎么编程序,真的很烦恼。如果方便的话借我借鉴一下吧,万分感谢!么么哒~~