微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 请问一下网络地址的问题。

请问一下网络地址的问题。

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

各位大侠好,我进入WSN不是很久,因需要,我设计了一个节点上的程序,让其实现路由和终端功能的切换,切换代码是

void ChangeNodeType(uint8 nodeType)

 {     

   uint8 logicalType = nodeType;         

 zb_WriteConfiguration(ZCD_NV_LOGICAL_TYPE, sizeof(uint8), &logicalType);        

 zb_ReadConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions );       

 startOptions = ZCD_STARTOPT_AUTO_START;     

 zb_WriteConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions );    

 zb_SystemReset();

 }

使用的平台是CC2430, ZStack-CC2430-1.4.3-1.2.1 ,切换好像实现了,但是加大节点数量和测试时间后,发现全负荷工作几个小时后,就有节点掉线,难以入网的情况,检查数据发现,有的节点的网络地址出现了0x FF FE,好像到了最大值,不知道是不是节点网络地址的回收出现问题?另外我想通过程序指定各节点的网络地址,不管节点是路由还是终端,都保持我指定的节点短地址不变(因为我们用的节点数量不是很多,不超过100个,可以人为保证网络地址不冲突),不需要TI的网络地址分配,回收,冲突监测等过程,不知道在哪里去修改?

请指教!谢谢。

坐等,自己顶一下。我的问题如果不是网络地址的问题,那节点掉线就一直上不来(肯定有电),是什么原因呢。我就加了个 软重启的函数zb_SystemReset(),但是如果硬件Reset一下后,就可以正常入网通讯了,但是时间长了之后又会出现某个节点掉线上不来。此过程中协调器是一直正常工作的。

呼唤达人

节点在切换以后,有没有重新入网?

      感谢VV的回复!

      一般情况下应该是重新入网了,因为每次软重启,节点的类型都变了,从理论上说,分配给路由和终端的网络地址应该是不一样的,但是节点在切换类型之后,有时候网络地址变了,有时候没有变,但是采集的数据都发送给协调器了,所以我认为它是入网了,要是没入网怎么会有采集数据来?测试时,我是采用了5个节点,每节点都是半分钟切换一次,像这样大概要6~8小时就会出现有的节点消息了(没数据上来),但是都有电,我认为这时候可能是入网失败了。然后就一直没有,如果硬件Reset一下,马上就又入网了。之后这个问题又会跑到别的节点上,已经测试好久了,每次都会出现,不知道测试现象我说清楚了没?

类型切换,分配的地址一样是正常的,因为父设备是有保存的,而且会根据IEEE做比对的。

没数据上来的时候,网络中节点的状态是什么,能否抓下包看看

好的,我现在正在抓包,现在只设置了一个节点工作,要等到它掉线才能看到需要的东西,但是您说的网络中节点的状态是在哪个字段呢?

       想抓包也不太好弄啊,测试工作太需要耐心了。

       因为原实验方案是1协调器+5个节点;经过6~10小时后,每次都会出现某1、2个节点掉线,如果按照这个方案抓包,因为时间长,掉线时间和节点均不能确定,节点掉线之后别的节点还正常工作,所以掉线节点出问题时的包会被后续正常数据包湮没,所以我把实验方案是1协调器+1个节点,专抓这个节点的数据包。可是已经不休不眠的工作了近30小时了,单个节点的话,它工作正常,一直都是半分钟重启变换类型一次,没出问题。

       节点多才会出问题,每次测试都会,但是要等6~10小时的样子,出问题的节点也是随机的,造成看目的包困难;只测试单个节点,好像问题不能出现,怎么办?

      另一个现象,单个节点测试时,不管是作为路由还是终端,它的网络地址始终都是00 01,如果是多个节点测试的话,有的节点的网络地址有时不会改变,有时候会变。

上次图片不清楚,重新发一次。

这是测试单个节点工作的抓包截图(帖子中如果看不清,请点击图片一下即可放大显示)

这是串口接收的数据截图:

数据格式为7字节,01(自定义)+51(节点编号)+00 01(节点的网络地址)+01/02(节点类型)+ 11 22 (自定义数据),可以看到,数据都收到13万字节了,基本都在正常工作。

能不能把抓包文件另存为,用附件上传啊,这样图片发送看不到解析的数据的。

谢谢!

6201.20150616 1105.txt

 

VV大侠您好!

        这一周都在做测试抓包,测试说明和数据,抓包文件见附件,测试说明里面应该说得比较清楚了,帖子里就不赘述了,真想邀请您来武汉出差^_^,抓包数据文件大小25M,超过允许的20M了,能给我个邮箱或者QQ什么的吗?我的QQ是1553867265,非常感谢。

抓包数据怎么是 .txt格式的。

你可以上传到网盘,我去下载就可以了

感谢VV!

上面那个txt文件不是抓包文件,只是测试环境、平台、部分串口数据、抓包环境,问题说明等等。

前天糊涂了,没想到把抓包文件压缩一下,汗...

今天附上数据抓包文件,太感谢您了。

另外如果您能抽出时间的话,真诚邀请您到我们这里来指导一下(会议、调研、交流都行吧),食宿和往返交通都我们来出吧。0005.20150617 001.rar

 

VV大神,上面那个抓包文件能打开么?找到我程序的病根了吗?好几天没动静,帖子一下子沉好远...

如果做路由和终端设备的切换,长时间的测试,这个问题是否还存在?

另外在抓包的文件中,没有看到设备掉线后rejoin的情况,你的协议栈既然已经使能了NV_RESTORE的话,应该会有rejoin的

你的路由和终端设备切换,是通过什么方式触发的?

To VV, 您晚上不睡觉的么?1:40,不能不佩服!

        如果仅做一个节点上的路由和终端功能的切换,实验采用一个协调器 + 一个节点(节点上切换路由和终端),好像没遇到这个问题,在上面数据抓包之前我特地测了一下,结果直到节点电源耗光(30多个小时的样子)也没有出现这个问题。只有多个节点才会有。

      另外,我的协议中没有用到NV_RESTORE,这个我确定,用了NV_RESTORE的话,切换无效。

     路由和终端设备切换,我是通过自编函数实现的:

void ChangeNodeType(uint8 nodeType)

 {    

          uint8 status = 0x01;   //SUCCESS:0x00;  FAILURE:0x01    

          uint8 logicalType = nodeType;      //通过参数nodeType改变节点类型,01为Router, 02为End

          osal_nv_write(ZCD_NV_LOGICAL_TYPE, 0, sizeof(logicalType), &logicalType);        

         status = osal_nv_item_init( ZCD_NV_STARTUP_OPTION, sizeof(startOptions), &startOptions );    

         if ( status == ZSUCCESS )    

         {      

                      osal_nv_read( ZCD_NV_STARTUP_OPTION, 0, sizeof(startOptions), &startOptions);      

                     startOptions = ZCD_STARTOPT_AUTO_START;

                     //自启动写入NV      

                     osal_nv_write(ZCD_NV_STARTUP_OPTION, 0, sizeof(startOptions), &startOptions);      

                    osal_set_event(GenericApp_TaskID, SYSTEM_RESTART);     //自定义重启事件,该事件处理函数中就一句:SystemReset();

            }   

 }

 

在程序初始化是我是设置NV中的ZCD_NV_LOGICAL_TYPE为读操作,上述函数在定时器中被调用,测试时30秒调用一次。

就这样。

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

网站地图

Top