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终端PanID出现的问题

/*

在程序运行中修改zigbee PanId  Chanel出现的问题:

测试方式:

终端1:在f8wConfig.cfg文件中设置 PanID = 0x2345  chanel = 0x0D

终端2:在f8wConfig.cfg文件中设置 PanID = 0x1234  chanel = 0x0F

协调器:在f8wConfig.cfg文件中设置 PanID = 0x2345  chanel = 0x0D

1、先协调器上电,再将两个终端上电,此时终端1能够加入到网络中 并且通信正常

2、通过串口修改协调器的PanID chanel  代码如下:      

     _NIB.nwkPanId=0x1234;    

     _NIB.nwkLogicalChannel=0x0F;    

     NLME_UpdateNV(0x01);    

     SystemResetSoft();     这时候终端2能够加入到网络并且通信正常

3、通过串口修改终端1的PanID chenel  代码如下:

      _NIB.nwkPanId=0x1234;     

      _NIB.nwkLogicalChannel=0x0F;     

      NLME_UpdateNV(0x01);    

      SystemResetSoft();     这时候终端1无法加入到协调器组建的网络中,这是为什么呢?    

      程序degbug的时候 _NIB.nwkPanId=0x1234   _NIB.nwkLogicalChannel=0x0F值是对的

4、如果把协调器的PanID chanel 再修改为PanID = 0x2345  chanel = 0x0D   

     终端2的此时无法加入到网络中 正常!!

    此时如果把终端1的PanID设为0x2345    chanel设为0x0D 那么终端1就又能跟协调器通信了

    很怪异的问题,我该怎么修改zigbee终端的PANID 和 chanel(程序运行中)

*/

  • 修改PANID的时候,把下面的代码也加上

    zgDefaultChannelList = MyNewDesiredChannel;

    osal_nv_write(ZCD_NV_CHANLIST, 0, osal_nv_item_len( ZCD_NV_CHANLIST ), &zgDefaultChannelList);

    zgConfigPANID = MyNewPanId;

    osal_nv_write(ZCD_NV_PANID, 0, osal_nv_item_len( ZCD_NV_PANID ), &zgConfigPANID);

    另外问下你用的协议栈版本,还有能不把每个过程用抓包看下,具体的数据包交互是什么,这样比较清楚到底发生了什么。

  • @VV

    协议栈用的是2.5.1a   我抓了一包数据 详见附件!!

    数据1.psd
  • @VV   有看到我的回复么。。。。。

     

    能从抓到的数据看出是什么问题来么?  

    debug的时候  _NIB.nwkPanId      _NIB.nwkLogicalChannel两个值都是我设置的值  但就是不能加入网络!!

    如果我再从这个值再改回跟f8wConfig.cfg文件中设置的值一样 就能正常工作了    这什么情况啊?

    我加了你给的几行代码也还是没效果。。。

    求助....

  • @VV

    为什么我问的问题 就没有回应了啊 ? 这个问题到现在也没有解决。。。

    VV,你这边能不能提供一个demo给我啊?实在不知道是怎么回事。

  • 你的终端1设备以前是否加过其他的网络,如果是的话,那么除了保存PANID,Channel以外,还有一个变量ExtendPANID,一般每个网络的ExtendPANID都是Coordinator的MAC地址。

  • hi VV:

    zgDefaultChannelList = 0x00002000;      

    osal_nv_write(ZCD_NV_CHANLIST, 0, osal_nv_item_len( ZCD_NV_CHANLIST ), &zgDefaultChannelList);      

    zgConfigPANID = 0x2233;      

    osal_nv_write(ZCD_NV_PANID, 0, osal_nv_item_len( ZCD_NV_PANID ), &zgConfigPANID);

    SystemReset();

    上次你让我加入这段代码,加入之后 有这样一个现象:

    在f8wconfig文件中设置PanId=0x1345  channelList=0x00002000;

    用按键将panId修改为0x2233后,channelList不变,这个时候如果重新启动,有时候能成功加入2233的网络,有时候不能。重新断电测试多次,发现基本上有两次就能成功加入到2233网络一次,这个是由于什么原因出现的呢?

    debug发现,当startmode为mode_resume的时候 好像都成功了  为mode_rejoin的时候 都失败了!!

    另,你说的ExtendPanId是什么意思,例如有两个协调器A、B  当终端1加入A之后,通过按键修改 要让终端1加入B协调器,我要将协调器B的ExtendPanId写入到终端1 NV中么?

    关于在程序运行中修改PanId、channel、或者设备类型 是否可以提供一个标准的demo,出现这种修改之后无法加入网络的问题 确实很头疼,调试花掉的时间确实很多...

    在MT任务中貌似有修改PanId的函数 但是好像也没有效果啊!

    还请VV继续为我解答一下我的问题  谢谢了!!

  • 我也遇到了类似的问题,通过串口修改pan_id和channel,新的pan_id和channel都不起作用,在f8wConfig.cfg中手动修改,编译,重新下载,用_NIB.nwkLogicalChannel和_NIB.nwkPanId读取,还是以前的的panid 和channel,在f8wConfig.cfg中的修改也没起作用,也很头疼,项目卡在这了。楼主的问题如果解决了,分享下方法,谢谢

  • @xie

    还没解决 我也是卡在这了 ,vv大神又潜水了...   @VV

     

  • @xueshi xie

    你的问题解决了么?交流一下??

  • 没解决呢啊,有方法大家出来分享下啊

  • 如果你解决了别忘了分享啊,谢谢啦

  • 这个问题倒是解决了,你没有解决的话 可以加我QQ(645919447)  交流一下!

  • 没解决了,现在已经不做这个了

  • 刚刚接触ZigBee,也遇到了类似的问题,时间过去很久了,不知道楼主是否还能看到,问题是否得到解决?是怎么解决的?
  • 一般是不見這樣隨意更動PANID和channel的,有什麼特別的原因要這樣做嘛?
  • @YiKai Chen 你好,我描述一下我问题的具体情况吧.
    网络中有一个协调器A,两个终端设备B和C,其中B和C成功加入A的网络,通信正常;之后通过A修改了PANID,在新的网络中B和C也可以正常入网;但是我发现,假如在修改PANID之前将B设备断电,然后修改PANID,再次将B上电后,B就无法成功入网,需要重新烧录.这个问题不知道有什么好的方法解决?
    另外一个问题是:在修改PANID后我调用的SystemReset()函数,在不断电的情况下B和C都能很快的加入到新网络,之后如果保持B和C不动,将协调器A断电一段时间之后上电,此时B和C都不能重新加入网络,都需要将B和C重新断电再上电才能加入网络?
    说了这么多,不知道表述是否能让你看懂,这两个问题,希望能到的支持,先谢谢了!
  • 你試試不要使能NV_RESTORE看看,但是還是不建議你任意更動PANID啊