我使用的是Z-Stack Mesh 1.0.0协议栈,在设置信道和PAN_ID的时候,使用方法如下:
//设置PAN_ID和Channel
void Set_Panid(uint16 panid,uint32 Channel)
{ _NIB.nwkPanId = panid; _NIB.channelList=Channel; NLME_UpdateNV(0x01);
SystemReset();}
读取信道和PAN_ID
osal_memcpy(&channel, &_NIB.channelList, sizeof(uint32)); //获取到channel 终端节点读出来是默认信道
osal_memcpy(&PAN_ID, &_NIB.nwkPanId, sizeof(uint16)); //获取到PAN ID
在协调器和终端节点的预编译中均加入了NV_RESTORE
现象是,协调器的信道和PAN_ID可以修改,终端节点的PAN_ID可以修改,但是终端节点的信道不能修改
问题:
1、终端节点的PAN_ID可以修改,但是如果不修改,终端节点的PAN_ID也不是cfg当中的值,我尝试修改cfg的PAN_ID,下载给终端节点,则无法与协调器通信,所以我就不明白了,终端节点的PAN_ID到底是像协调器一样,从cfg当中获取默认值(结果发现并不是),还是搜索同信道的协调器的PAN_ID并加入网络(但是修改终端节点的PAN_ID,信道与协调器一致的情况下,并不能加入协调器),我想知道如何通过程序给终端节点一个固定的PAN_ID?
上述的结论我是通过文章开头的代码测试的,统一信道下的协调器和终端节点,不同PAN_ID,结果读取终端节点的PAN_ID,转换成字符串 显示为>>>? ,如果在cfg中,俩个的PAN_ID为同一个值,则读取的就是设置的这个PAN_ID
2、终端节点的信道是默认的信道,无法修改,我想知道如何通过程序修改终端节点的信道?
Viki Shi:
参考这边进行修改:blog.csdn.net/…/69664976
YiKai Chen:
一般Zigbee网络中的PANID以及channel都是由协调器組网時決定,终端节点只是在入网時掃描所有的信道去選一個開放中的PANID以及channel去入网,為什麼你要通过程序给终端节点一个固定的PAN_ID及修改终端节点的信道?
user3812753:
回复 Viki Shi:
谢谢您的回复,我看了一下,还是有帮助的,我现在的疑问是:如果我在一个房间内,有50套zigbee设备(内含协调器和终端节点),可是咱的cfg只有25个信道,就算我的PAN_ID不一样,终端节点会在终端节点的信道内随机连接协调器,该如何区分出来我的50套设备呢?
user3812753:
回复 user3812753:
我现在的疑问是:如果我在一个房间内,有50套zigbee设备(内含协调器和终端节点),可是咱的cfg只有25个信道,就算我的PAN_ID不一样,终端节点会在终端节点的信道内随机连接协调器,该如何区分出来我的50套设备呢?
Viki Shi:
回复 user3812753:
一般做法是,每个网络的coordinator不会一直开启permit join,可以在终端入网的时候只开启它想要加入的那个网络,其他网络关闭permit join,同时终端和协调器都开启NV RESTORE,这样即便后面有其他网络,此终端也会记住当前网络的信息,并在断开后再次加入
user3812753:
回复 Viki Shi:
因为我这个是一个教学应用,在教室里面可能有很多组设备同时开启,有没有方法改哪个函数,让终端节点的PAN_ID为cfg中的默认值,而不是自动扫描匹配,我用的是Z-Stack Mesh 1.0.0,这样只要是同一组的就可以通过信道和PAN_ID区分,不然光信道不够分啊
YiKai Chen:
回复 user3812753:
Viki描述的方法就是一般标准作法、一樣也可以達成你的目的
user3812753:
回复 Viki Shi:
每个网络的coordinator不会一直开启permit join,可以在终端入网的时候只开启它想要加入的那个网络,其他网络关闭permit join,这个是改哪个函数
Viki Shi:
回复 user3812753:
NLME_PermitJoiningRequest
YiKai Chen:
回复 user3812753:
可以透過ZDP_MgmtPermitJoinReq控制