This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
请教大家一个问题。我组好的一个zigbee网络,一个协调器和10个路由,可以正常通信。现在我把这个协调器断电,把另一个协调器上电,然后把路由一个个的清除网络,让他们重新入网。这些路由会加入这个新的协调器里面,并且会给协调器发一条入网后的指令。但是协调器只能控制以他为父节点加入网的路由,不能控制通过路由入网的节点,是什么原因?协调器给路由发数据用的是MAC地址
可以看一下这个抓包文件,第75包是这个路由上电入网后给协调器发送的数据,协调器收到后会给路由回一包数据,抓包却看不到回的这包数据,不知道是不是协调器找不到这个路由的网络地址。我协调器给路由发数据前会先调用:ZDP_NwkAddrReq(DestMac, ZDP_ADDR_REQTYPE_SINGLE, 0, 0 );//让MAC地址对应的模块把自己网络短地址回复给我 ,然后30ms后再发数据,按理说不应该找不到网络地址抓包数据1.psd
可能之前描述的可能不太清楚,我把问题再描述一遍:用的协议栈是2.5.1,协调器给路由发数据用的是MAC地址的方式,路由给协调器发数据用短地址方式。现在是一个协调器,10个路由分布在公司,建好了一个网络,可以正常通信。我现在把这个协调器断电,然后换另一个协调器,然后把路由原来的网络信息清除掉,10个路由会加入这个新的协调器网络里面。正常情况下,路由入网后会给协调器发一包数据,协调器收到后会回一包数据。目前协调器可以收到10个路由入网发送的这包数据,串口可以打印这包数据,抓包也可以看到这包数据,并且路由的网络ID也变成了新的网络的ID,可以证明路由设备确实加入了新的网络。但是协调器给部分路由回复的数据抓包看不到,协调器也无法和部分路由通信(只有两个路由可以通信,这两个路由都是已协调器为父节点的,其它路由都是通过路由加入的新网络)。如果把不能通信的路由拔掉放在协调器旁边,重新入网,就可以正常通信了。不知道是什么原因,请大神帮忙分析下
可能之前描述的可能不太清楚,我把问题再描述一遍:用的协议栈是2.5.1,协调器给路由发数据用的是MAC地址的方式,路由给协调器发数据用短地址方式。现在是一个协调器,10个路由分布在公司,建好了一个网络,可以正常通信。我现在把这个协调器断电,然后换另一个协调器,然后把路由原来的网络信息清除掉,10个路由会加入这个新的协调器网络里面。正常情况下,路由入网后会给协调器发一包数据,协调器收到后会回一包数据。目前协调器可以收到10个路由入网发送的这包数据,串口可以打印这包数据,抓包也可以看到这包数据,并且路由的网络ID也变成了新的网络的ID,可以证明路由设备确实加入了新的网络。但是协调器给部分路由回复的数据抓包看不到,协调器也无法和部分路由通信(只有两个路由可以通信,这两个路由都是已协调器为父节点的,其它路由都是通过路由加入的新网络)。如果把不能通信的路由拔掉放在协调器旁边,重新入网,就可以正常通信了。不知道是什么原因,请大神帮忙分析下
抓包檔裡面只看到路由一直在廣播 network address request (這個應該要用單播)還有在route request找協調器,你抓包檔裡面是那個路由沒辦法通信嗎?
准确说是协调器没有把数据发出来,附件是抓包文件,第11到第27是可以正常时抓的数据,第30包开始时无法通信的时候抓的数据,大神可以帮忙看下是哪里不一样吗抓包文件2.zip
你好,Alvin Chen,今天我又把zigbee节点组网的流程重新走了一遍,发现协调器无法和路由通信的现象不是更换协调器造成的。我现在的测试流程是这样的:
测试1、我把协调器和3个路由都擦除重新烧程序,把协调器上电,然后依次给3个路由上电,其中路由0x0af8和0x1280直接以协调器为父节点入网的,另一个路由0x11de是以路由0x1280为父节点入网的。现在现象依然是3个路由都可以给协调器发数据,协调器给路由0x1280通信不成功,抓包现象还是nwk address request 没应答。协调器给路由是MAC地址的方式通信的,路由给协调器是短地址。路由 有获得自己的短地址,程序如下:
if ( (SampleApp_NwkState == DEV_ZB_COORD) || (SampleApp_NwkState == DEV_ROUTER) || (SampleApp_NwkState == DEV_END_DEVICE) )
{
NwkAddr=NLME_GetCoordShortAddr(); //获得自己的短地址
协调器给路由发数据的时候有通过路由的MAC地址去获取短地址,程序如下:
memcpy(SampleApp_DstAddr.addr.extAddr,DestMac,8); //把MAC地址给到发送函数的形参里
LED2 = 0;
ZDP_NwkAddrReq(DestMac, ZDP_ADDR_REQTYPE_SINGLE, 0, 0 );//让MAC地址对应的模块把自己网络短地址回复给我
osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_MY_EVT1 , 30 ); //30ms后启动发送事件
测试2、我让3个路由都已协调器为父节点入网成功后,再把路由的网络清除,然后让他们重新入网,这个时候有两个路由是以协调器为父节点入网,一个以路由为父节点入网,结果是协调器就可以和3个路由都通信了。
根据这两个测试,是不是说明用MAC地址通信的时候,如果节点是通过路由入的网,协调器就无法和其通信呢?请问有什么方法解决呢?还有device announce.是设备入网后自己发出的吧,不需要我来处理?附件是测试1里3个路由入网过程以及协调器给路由0x11de发数据的抓包结果,抓包来看还是和昨天一样的。非常感谢你的帮助。
Alvin Chen 说:你节点也需要擦除网络信息,重新入网,你原来的节点还在原来的网络中无法加入新的网络。
Alvin Chen 说:你节点也需要擦除网络信息,重新入网,你原来的节点还在原来的网络中无法加入新的网络。
Alvin Chen 说:你节点也需要擦除网络信息,重新入网,你原来的节点还在原来的网络中无法加入新的网络。