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.

协调器的热备份

Other Parts Discussed in Thread: Z-STACK

需求:假定一个zigbee系统,由于稳定性的要求。当出现主协调器故障时,备用协调器马上能替代主协调工作,而不影响系统的控制。即冗余要求。

问题:ZIGBEE上要如何实现。

  • 你把原先协调器NV里面的数据读出来写到新的Coordinator里面就可以了

  • 请教VV:

    1、是否将zgItemTable中涉及的ID从NV读出来再写入新的协调器就可做备份协调器了?

    2、直接由协调器添加入网的最大路由器数目是由什么量决定的?协调器中记录的设备信息会越来越多,有一些已经离开网络或者坏掉的设备依然会占用空间。如果网络中有某个设备坏掉了,想将协调器中对其记录的信息删除,以便将空间留给新加入的设备,应该怎么做?具体该擦除哪些空间呢?调用什么函数?

    图1是协调器刚上电,还没有设备加入网络
    图2是IEEE地址为00 12 4B 00 01 4F C3 00的路由器加入网络
    图3是IEEE地址为00 12 4B 00 01 4F C0 8D的路由器加入网络,如方框标注

    由此可以看出入网的设备信息是在XDATA地址为0x105E的位置开始记录,一直到0x117B的存储空间都是空的,
    不知道是否这一部分区域都是用来存储入网信息的?NV各个地址都存了哪些信息?有相关资料推荐吗?

    图3

    图2


  • 哪位高手给解答一下啊

  • 对于子设备的最大数是有

    // Maximum number in tables
    #if !defined( NWK_MAX_DEVICE_LIST )
    #define NWK_MAX_DEVICE_LIST 20 // Maximum number of devices in the
    // Assoc/Device list.
    #endif

    节点的信息在

    AssociatedDevList[x]中

    如果是Z-Stack Home 1.2.0以后的协议栈的话,对end device有child aging功能,当End device长时间没有发送data request以后,父设备会去做删除操作。

  • 如果设备直接从协调器入网,协调器也会有NWK_MAX_DEVICE_LIST的数量限制吗?

    协调器设置了NV_RESTORE,设备掉电之后这些信息应该仍然在NV中存储吧,该怎么从协调器中删除 那些故障的设备信息?

  • 协调器也会有限制的

    不要直接去操作NV里面的东西,会有相关的函数删除子设备信息,在函数里面自动会去NV删除东西的。

    /*
    * Remove a device from the list. Uses the extended address.
    */
    extern byte AssocRemove( byte *extAddr );

  • 关于你提出拷贝原先的协调NV内容。

    目的: 当前主要的是想复制终端的设备信息,让备用协调器的AssociatedDevList中能和原先协调器的一样。(绑定表之类的暂时不考虑)

    测试方式:对比了ZComDef.h文件的条目,利用osal_nv_read从主协调器拷贝出ZCD_NV_ADDRMGR与ZCD_NV_DEVICE_LIST信息,再用osal_nv_write写入备用协调器。但是测试发现备用协调器AssociatedDevLis还是空的。

    问1:我测试的方式是否正确?

    问2:具体需要拷贝哪些NV内容才能实现备份?

    问3:是osal_nv_read函数还是用HalFlashRead去实现拷贝复制?