Zigbee路由产品不走路由中继
我现在是打开了加密,
协调器限定了zgApsUseExtendedPANID[Z_EXTADDR_LEN]
路由指定ExtendedPANID
并在预编译里面添加了 NV_RESTORE、 HOLD_AUTO_START
以上这些会影响走路由中继吗?
中继功能还需要打开哪些预编译选项?
需要设置什么东西吗
这些东西跟了路由中继没什么关系,不需要做什么设置。ZigBee协议栈,网络做路由的功能是默认就有的
首先谢谢你的回答:
我测试的ti官方给的协议栈,然后做测试 路由设备发送数据到网络地址0x0000 协调器接收 发现距离远了以后,走路由也是这个问题 很不稳定,
会出现通讯一会(几分钟或十几分钟具体时间不定)就会丢包,然后过上十几二十秒就又恢复,基本上就是这样循环掉线上线,我该怎么解决这个问题呢?
你说的距离远了以后,会有这个问题,是不是单跳的距离并无法达到这么远,硬件的射频性能,两点之间中建的阻挡,等等。
是不是说在近距离的情况下,这个路由的转发就不会有问题的,这样至少说明算法软件的处理是没有问题的。
距离远了有问题,主要是发送出去没ACK,还是数据都发不出了?
距离近的时候通过抓包工具看,数据是走路由的,还算稳定,
距离远是 我把一个路由节点放到单跳不能通讯的地方,然后再协调器和这个路由节点之间 在放上两个路由节点,想让数据通过路由过来,但是数据是偶尔能够通过路由过来到协调器,数据发送一会 就又发送不过来了,就这样断断续续,造成通讯不正常,
我在ZStack-CC2530-2.5.1a 协议栈里面的 SampleApp 里面改的,
我测试让路由节点2S发送两个字节,路由节点发送函数
uint8 ledBuf[2] = {0};
SampleAppPeriodicCounter ^= 1;
// if(SampleAppPeriodicCounter)
// P1 |= 0x01;
// else
// P1 &= ~0x01;
// ledBuf[0] = SampleAppPeriodicCounter;
// ledBuf[1] = 0xff;
if(SampleAppPeriodicCounter)
P1 |= 0x02;
else
P1 &= ~0x02;
ledBuf[1] = SampleAppPeriodicCounter;
ledBuf[0] = 0xff;
SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;
SampleApp_Periodic_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
SampleApp_Periodic_DstAddr.addr.shortAddr = 0x0000;
if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,
SAMPLEAPP_PERIODIC_CLUSTERID,
2,
(uint8*)ledBuf,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
else
{
// Error occurred in request to send.
}
协调器接收后就指示灯闪烁
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
uint16 flashTime;
switch ( pkt->clusterId )
{
case SAMPLEAPP_PERIODIC_CLUSTERID:
if(pkt->cmd.Data[0] == 1)
P1 |= 0x01;
else if(pkt->cmd.Data[0] == 0)
P1 &= ~0x01;
if(pkt->cmd.Data[1] == 1)
P1 |= 0x02;
else if(pkt->cmd.Data[1] == 0)
P1 &= ~0x02;
break;
case SAMPLEAPP_FLASH_CLUSTERID:
flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );
HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );
break;
}
}
现在的现象就是,距离远一点,迫使它走路由中继 , 协调器端的指示灯,正常闪烁一会然后常亮或长灭一会,就这样断断续续的 ,也没有规律