微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > 修改协调器PAN ID和Channel,协调器广播至所有的设备重启加入新建后的网络

修改协调器PAN ID和Channel,协调器广播至所有的设备重启加入新建后的网络

时间:10-02 整理:3721RD 点击:

理想状态:


  • 协调器连接串口,通过上位机打开协调器的com口,同时终端也入网了。

  • 通过协调器发送广播给所有在同一网络的终端,内容是即将要修改的信道号和panid。(以下只用修改信道号)

  • 终端接收到广播

  • 终端修改信道成功




现在的问题是:


1.2.3都解决了,通过调试能看到终端收到了协调器发的广播。但是信道没修改成功。



问题详细:


_NIB.nwkLogicalChannel =17; //17是新修改的信道号


NLME_UpdateNV(0x01); //0x01的定义是保存网络层NIB


SystemReset(); //重启后,保存的信息生效



这段代码没有问题,因为我用串口直接改协调器是可以的,从没有出错过,重启后很快就能组网。

我烧板子的时候信道=26,代码中更改成12。



当终端把这段代码走完后,信道改了,也确实保存了,但是不能入网,此时协调器也改成和终端同样的信道号,终端不断的发送重启的信息,我打印出log看NV区的信道也确实是我刚才改的。当我一旦把协调器的信道恢复成初始信道26时,终端自动的将自己信道恢复成26并入网。也就是说终端只记得他之前入网的信道,不管自己的信道是多少,只要之前的网络还在,就自适应自我调整去加入,我觉得很神奇!! 我怀疑是因为nv_restore.我查了很久,查到了一句话:


加入这个宏定义好处肯定是有的,但是问题也来了,如果终端想加入别的协调器网络,既是PANID和频道都一样,不管重启多少次都不会加入新的协调器中。


但是nv_restore不能去掉,还有别的功能是依赖于它的。


我又找到一个函数:


applicationwants to delete the stored NV information It just needs to set theZCD_NV_STARTUP_OPTION as explained below and do a reset.


"Ifthe application would like to force a "new" join, the applicationshould set the ZCD_STARTOPT_DEFAULT_NETWORK_STATE bit in theZCD_NV_STARTUP_OPTION NV item before calling this function. "New"join means to not restore the network state of the device. UsezgWriteStartupOptions() to set these options


[zgWriteStartupOptions(ZG_STARTUP_SET,ZCD_STARTOPT_DEFAULT_NETWORK_STATE);]


我把这一句放到了修改信道的前面,但是SystemReset()后又恢复到了初始的信道号。



有没有什么方法可以让nv区清除入网信息,同时也要接受新的参数?



谢谢大家!!鞠躬!鞠躬!鞠躬!

帖子里有一张图,在这补上

求帮忙

这个功能我三年前就实现过,给你提个小建议,协调器需要首先重启,你的终端接收到修改PANID和CHANNEL的信息后,SystemReset(); 最好设置个定时器1s后启动试下。

谢谢,我已经解决了,问题是信道要全部能使才能使用。谢谢你哦。

我想请问一下这个 _NIB.nwkLogicalChannel是从哪里来的?在协议栈里面也找不到啊?求教一下!

楼主怎么解决的,能不能详细说一下呢?

楼主,你好,我十分想知道你调试的方法 ,“打印出log看NV区的信道”,是否需要什么工具。因为我有时想知道节点是否更新了数据,但不知道怎么读出来。谢谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top