TI中文支持网
TI专业的中文技术问题搜集分享网站

网络地址重复的问题

我有10个终端,同时入网的时候,竟然会有随机两个设备的网络地址是一样的。请问该怎么办?为什么会这样?

Alvin Chen:

请附上抓包文件。

user4711142:

回复 Alvin Chen:

网络地址分配.psd

当终端设别入网后,发送自定以的消息给协调器,协调器串口打印,如下:E10和E1、E9和E2的网络地址相同。

YiKai Chen:

你協議棧板本?

user4711142:

回复 YiKai Chen:

2.5.1a

Alvin Chen:

回复 user4711142:

你的短地址分别为:
0x3713
0x7974
0xB024
0x7975
0xFC4E
0x7972
0x172C
0x7970
0x4035
0x7971
0x35F9
0x31C3
0x55B2
0x796F
0x05D1
没有发现重复

user4711142:

回复 Alvin Chen:

每个终端设别入网发送自己的网络地址和IEEE地址给协调器,协调器进行串口显示。首先IEEE地址没错,证明存储是一一对应的,网络地址有重复,这是为什么讷?而且串口显示的地址都是0x79XX 。

YiKai Chen:

回复 user4711142:

协调器进行串口显示的程序碼可以貼上來看看嘛?

user4711142:

回复 YiKai Chen:

终端发送部分/*********************************************************** @brief 发送本节点的网络地址到协调器* @para  uint8 DeviceType 设备类型:1:终端  2:路由器**********************************************************/#if !defined(ZDO_COORDINATOR)void MyApp_SendShortaddrToCoor(uint8 DeviceType){//  uint8 Info_temp[40]={0};             //用来串口显示的数组  uint8 buf[20]={0};          //存放要发送的信息  uint16 addr=0;              //保存本节点网络地址  uint16 parentsAddr = 0;     //保存父节点网络地址    buf[0]=DeviceType;  switch(DeviceType)         //根据逻辑类型,ID号  {  case MYAPP_DEV_END:    buf[1]=EndDeviceID;    break;  case MYAPP_DEV_ROU:    buf[1]=RouDeviceID;    break;  default:    buf[1]=0;    break;  }  addr = NLME_GetShortAddr();               //获取本节点网络地址  parentsAddr = NLME_GetCoordShortAddr();   //获取本节的父节点网络地址//  sprintf((char*)Info_temp,"parent:%d  local:%d\r\n",parentsAddr,addr);//  HalUARTWrite(0, Info_temp,strlen((char const*)Info_temp)); //显示    buf[2]= HI_UINT16(addr);                  //本节点网络地址高八位  buf[3]= LO_UINT16(addr);                  //本节点网络地址低八位  buf[4]= HI_UINT16(parentsAddr);           //父节点网络地址高八位  buf[5]= LO_UINT16(parentsAddr);           //父节点网络地址低八位  osal_memcpy(&buf[6],NLME_GetExtAddr(),8); //本设备的存储IEEE地址      //设置发送目的地址  MyApp_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;  MyApp_DstAddr.addr.shortAddr = 0x00;  MyApp_DstAddr.endPoint = MYAPP_ENDPOINT;  HalUARTWrite(0,buf,14);  //发送出去  if(AF_DataRequest(&MyApp_DstAddr,           //目的地址                    &MyApp_epDesc,            //设备描述符                    MYAPP_SENDADDR_CLUSTERID, //簇ID                    14,                       //长度                    buf,                      //要发送的数组                    &MyApp_TransID,           //传输序列号                    AF_ACK_REQUEST,                        //发送选项                    AF_DEFAULT_RADIUS)==afStatus_SUCCESS)  {    //成功;  }  else   {  }}#endif

协调器串口显示部分:

  case MYAPP_SENDADDR_CLUSTERID:                    //协调器接收到终端AF发来的网络地址和设备Id号,并将其显示在串口上。      switch(databuf[0])                            //判断设备类型      {      case MYAPP_DEV_END:                           //终端,将数据保存在终端结构体        MyEndDev[(databuf[1]-1)].Type = 'E';        MyEndDev[(databuf[1]-1)].ID = databuf[1];         MyEndDev[(databuf[1]-1)].shortaddr = BUILD_UINT16(databuf[3],databuf[2]);        MyEndDev[(databuf[1]-1)].ParentsShortAddr = BUILD_UINT16(databuf[5],databuf[4]);         osal_memcpy(MyEndDev[(databuf[1]-1)].IeeeAddr,&databuf[6],8);     //保存MAC地址                ChangeHexToChar(My_MAC_addr,MyEndDev[(databuf[1]-1)].IeeeAddr,8);       //将MAC地址转换成字符型式        sprintf((char*)Info_temp,"Type:%c  ID:%3d  ShortAddr:%5d  parents:%5d  IEEE:%s\r\n",MyEndDev[(databuf[1]-1)].Type,MyEndDev[(databuf[1]-1)].ID,MyEndDev[(databuf[1]-1)].shortaddr,MyEndDev[(databuf[1]-1)].ParentsShortAddr,My_MAC_addr);        HalUARTWrite(0,Info_temp,strlen((char const*)Info_temp));                break;              case MYAPP_DEV_ROU:                           //路由器,将数据保存在路由结构体        MyRouDev[(databuf[1]-1)].Type = 'C';        MyRouDev[(databuf[1]-1)].ID = databuf[1];         MyRouDev[(databuf[1]-1)].shortaddr = BUILD_UINT16(databuf[3],databuf[2]);        MyRouDev[(databuf[1]-1)].ParentsShortAddr = BUILD_UINT16(databuf[5],databuf[4]);        osal_memcpy(MyRouDev[(databuf[1]-1)].IeeeAddr,&databuf[6],8);     //保存MAC地址                ChangeHexToChar(My_MAC_addr,MyRouDev[(databuf[1]-1)].IeeeAddr,8);       //将MAC地址转换成字符型式        sprintf((char*)Info_temp,"Type:%c  ID:%3d  ShortAddr:%5d  parents:%5d  IEEE:%s\r\n",MyRouDev[(databuf[1]-1)].Type,MyRouDev[(databuf[1]-1)].ID,MyRouDev[(databuf[1]-1)].shortaddr,MyRouDev[(databuf[1]-1)].ParentsShortAddr,My_MAC_addr);        HalUARTWrite(0,Info_temp,strlen((char const*)Info_temp));        break;              default:        break;      }      break;

Alvin Chen:

回复 user4711142:

估计是你串口打印有问题。

user4711142:

回复 Alvin Chen:

关闭NV_RESTORE后,网络地址分配正常

赞(0)
未经允许不得转载:TI中文支持网 » 网络地址重复的问题
分享到: 更多 (0)