微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 同一个环境下,有两个协调器,PANID是随机的, 那么终端会加入那个zigbee网络。

同一个环境下,有两个协调器,PANID是随机的, 那么终端会加入那个zigbee网络。

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

请教一下,TI的工程师。

同一个网络下,只有一个协调器,那如果同一个环境下,有两个协调器。 终端加入那个网络?

是进行能量扫描, 加入最近的一个协调器吗?

zigbee节点入网时将选择范围内信号最强的父节点(包括协调器)加入网络吗?

比如一套设备,是由一个协调器和一个终端节点组成。  用户A 购买了一套, 用户B 也购买了一套。 他们所处在同一个环境。

如果节点是连接信号最强的协调器, 难免会出现用户A的终端节点加入了用户B的协调器。 在产品上这是不允许出现的。

请问TI的工程师, 该怎么解决这样的问题?

您可以让终端的PANID固定,这样就会加入特定的协调器组成的网络。

您也可以对您的协调器设置白名单机制,只有特定时间或特定节点可以加入该网络。

PANID固定, 和白名单 感觉都不可取, 设备需要批量生成。

TI 建议使用 EZ-MODE ,解决这个问题吗?  相关介绍文档怎么找?

您可以参考ZigBee Home Automation Specification的Chapter8.  http://zigbee.org/Standards/ZigBeeHomeAutomation/download.aspx 

404 PAGE NOT FOUND

EZMODE 是ZigBee网络里面Commission的一种方式。

具体你可以参考以下几个文档

1)C:\Texas Instruments\Z-Stack Home 1.2.0\Documents\Z-Stack Home Developer's Guide.pdf

2)C:\Texas Instruments\Z-Stack Home 1.2.0\Documents\Z-Stack Home Sample Application User's Guide.pdf

3)ZigBee Home Automation Profile Specification  http://www.zigbee.org/zigbee-for-developers/applicationstandards/zigbeehomeautomation/ 在页面底部注册后可以下载

谢谢 Susan Yang, 我先了解一下。

希望能够帮到您!

再请教一下, cc2530节点 如何只连接 指定协调器(PANID 固定)组建的网络。  上电后,就直接连接指定协调器组建的网络,

可能会有多个协调器, 并且组建的网络信号强度 可能不是最强的。

在f8wconfig.cfg文件中 

/* Define the default PAN ID.
*
* Setting this to a value other than 0xFFFF causes
* ZDO_COORD to use this value as its PAN ID and
* Routers and end devices to join PAN with this ID
*/
-DZDAPP_CONFIG_PAN_ID=0xFFFF

您可以设置自己的PANID,0xFFFF是随机PANID

避免Zigbee节点 加入错误网络, 找了很久资料, Permit Join 和 EZMODE 貌似可行。 

但 Permit Join只能限制Associate Join模式,无法限制恶意的Rejoin模式  。

EZMODE, 粗略看了下, 没看明白。

求助, 该怎么较为简单的解决这个问题?

EZ-MODE可以理解为两个设备都按键启动EZMode,之后一段时间内允许设备加入网络,配对绑定成功后,就可以互相通信了。

互相通信后, 如果设备对应的协调器断电了,或者设备离协调器距离远,导致网络信号比较弱。  

该设备能连接到其他协调器吗?

关于Permit Join,我看到这样一段话:

“使能Permit Join只对新入网的设备有效果,如果是已经入网的设备,即便Permit Join禁止了,也没关系,因为已经入网了。”

那么,如果设备重新上电,并且协调器Permit Join已经禁止, 设备重上电后,还能加入该协调器组建的网络吗?

修改入网机制,协调器拒绝Associate Request,这样可以让所有协调器收到所有节点的Associate Request。然后再根据Associate Request带的IEEE地址,指定哪些协调器允许哪些设备入网。

我可以帮你搞定这个,加我QQ 786416271。

因为已经入网了, 那协调器可以让设备节点退网吗?  退网后,是不是 Permit Join禁止时,就不能加入网络了?

@ Susan Yang  在吗?

万一 A家的终端, 加入了 B家协调器 的网络, 该怎么办? 

是删除B家协调器网络中的A终端吗?

你好, Susan Yang 。

如果万一 A家设备节点 加入了B家协调器的网络, 我在A设备节点上 按键, 让其主动离开 B协调器组建的网络, 重新搜索网络使其正确联网。 并且B协调器 NLME_PermitJoiningRequest(0) 禁止。 你看这样可以吗? 期待你的回复。

主动离开协调器网络

void Meter_Leave(void)

{

 NLME_LeaveReq_t leaveReq;

 osal_memset((uint8 *)&leaveReq,0,sizeof(NLME_LeaveReq_t));

 osal_memcpy(leaveReq.extAddr,NLME_GetExtAddr(),Z_EXTADDR_LEN);

 leaveReq.removeChildren = 1;

 leaveReq.rejoin = 0;

 leaveReq.silent = 0;

 NLME_LeaveReq( &leaveReq );

}

如果加上预编译NV_RESTORE选项, 终端节点上电会自动 加入原来协调器组建的网络吗?  还是选择信号强的网络?  这个时候 可能另一个网络信号很强(默认是加入信号强的网络)。  

这个 预编译NV_RESTORE选项, 是协调器和终端节点 都需要加吧?

可以的,您可以让终端主动退出网络

预编译NV_RESTORE选项后,节点会保存当前的网络信息,即使断电后仍然保持。

预编译NV_RESTORE选项是需要协调器和终端节点都加的

请教一下, 可以动态 设置入网时的 MAC_SPEC_MIN_RECEIVER_SENSITIVITY 这个值吗?

当有设备要入网时, 将这个值改大点(要求靠的很近,信号很强),符合条件则可以入网。

当设备入网成功后, 将这个值还原。

因为终端节点每一次入网, 都需要判断这个 MAC_SPEC_MIN_RECEIVER_SENSITIVITY 值。

这样可行吗?

不建议您这样做,因为信号强度基本上是取决于硬件电路及PCB的设计,软件上的改进非常有限。

加入NV_RESTORE编译选项, 可以帮助终端在重启后也还会连上一次连接的协调器。

我有个问题, 如果当前环境下,有另一个信号更强的协调器, 那么终端重启后会连 上一次链接的协调器, 还是另一个信号更强的协调器?

终端重启后会连接上次连接的协调器,因为其已经保存了之前的PANID等网络参数

使用了NV_RESTORE后, 如果联网错误。 A家设备 联上了 B家协调器。 该怎么纠正这个错误?

1、修改ZCD_NV_STARTUP_OPTION的值,重新加入其他协调器

zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE)  

2、主动退出现在的网络, 重新加入其他协调器。

NLME_LeaveReq_t tmp_LeaveReq;

tmp_LeaveReq.removeChildren = FALSE;

tmp_LeaveReq.rejoin = FALSE;

tmp_LeaveReq.extAddr = NULL;

NLME_LeaveReq(&tmp_LeaveReq);

或者是用其他方法? 

使用了NV_RESTORE后, 基本不会出现联网错误的

因为我们的设备,上电就会去搜索网络, 在密集使用这种设备的环境下, 万一错了, 该怎么解决?

使用了 NV_RESTORE , 还需要使用 Permit Join吗?

@Susan Yang, 是我的问题 没问好吗?  我们的设备上电后,会去搜索zigbee网络, 一段时间后,会进入睡眠状态。   这个时候,有可能连接到其他网络。

如果设备已经连接到正确的网络, 并且加入了NV_RESTORE。 这肯定不会有问题。

在一开始 联网错误了, 那么NV_RESTORE,会再次连接错误的网络。 请教一下 怎么让设备 联网其他协调器?

您可以先看一下官方说明

"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);]."

zGlobals.c中有这两个函数,第二个就是上面所用的函数

uint8 zgReadStartupOptions( void )  //启动时读取ZCD_NV_STARTUP_OPTION的值

uint8 zgWriteStartupOptions( uint8 action, uint8 bitOptions )  //修改ZCD_NV_STARTUP_OPTION的值


@Susan Yang 谢谢你的回复, 我看一下。

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

网站地图

Top