关于使用 ZigBee PRO / EmberZNet PRO 进行超大型和/或超密集网络设计

网络密度:
虽然网状网络通常通过更多的路由器覆盖来改善(以获得更良好的连接网状网络),但大型楼宇自动化网络(您可能在每个灯镇流器和灯开关中都有无线电)往往过于密集,特别是如果您将所有线路供电设备是路由器。堆栈只能跟踪有限数量的相邻路由器(在 EmberZNet 的情况下为 16 个),并且此邻居表之外的任何节点都将需要多跳路由(通过已知邻居),尽管位于发送方的直接无线电范围内,因为只有在路由发现时已知的邻居才被视为新路由中的潜在下一跳。(您可以通过强制 1 跳源路由到目标来潜在地克服此行为,但目标不在邻居表中,它' 不清楚您将如何评估目标在无线电范围内是否可以到达。最近有一个 EmberZNet 功能请求,建议对传入的链路状态消息进行潜在的堆栈回调,这样一个节点就可以确定谁在直接无线电范围内,即使它不是幸运地位于邻居表中的首选节点之一。虽然这个想法有其优点,但像这样一个非常密集的网络中的节点会听到*大量*传入的链接状态消息,因此应用程序需要管理大量回调活动。)并且,类似地, NWK/APS 广播流量仅在从已知邻居听到数据包时才会重复(否则 NWK 安全帧计数器无法验证,因此恶意注入广播的风险太大),因此广播不会

一种可能的解决方案是使您的具有路由器功能的节点的子集充当终端设备(通常是非休眠 [RxOnWhenIdle] 的,因此它们不必轮询以接收消息/ACK)或非中继路由器。我们的软件在编译/EZSP 配置时支持这两种行为,尽管您如何确定哪些节点和多少应该以这种方式“绝育”取决于系统设计人员,并且通常涉及一些专有方案(由安装程序直接强制执行或通过一些先进的软件算法,在节点进入网络之前考虑一些带外信息)。要使该节点成为非休眠终端设备,只需在您的 AppBuilder 设置中为相关节点选择“终端设备”节点类型(或者如果您以 EMBER_END_DEVICE 身份加入)直接与堆栈交互,而不是使用我们基于 ZCL 的应用程序框架)。要使节点充当非中继路由器,只需为您的 SoC 构建全局定义 EMBER_DISABLE_RELAY,或为 EZSP 主机应用构建将 EzspConfigId EZSP_CONFIG_DISABLE_RELAY 设置为值 0x01。对比这两种解决方案,非休眠终端设备需要将路由器/协调器节点指定为其“父节点”,并且需要定期轮询该节点(或通过它发送消息)——大约每 5 分钟一次,通常- 确保它不会作为一个过时的孩子老化,否则它将失去与网络的连接,并且需要重新加入才能再次获得正确的父连接。终端设备也不直接参与路由,而是将其父节点用作任何传出消息的第一跳或任何传入消息的最后一跳,因此除非由其父节点中继,否则它不会听到广播,需要依靠其父节点进行路由发现,不能使用多对一作为集中器路由,不能作为加入/重新加入终端设备的父级。但是,它也不需要维护邻居表、子表或路由表(减少 RAM 密集型),可以使用我们的“zigbee-pro-leaf-stack”库运行(节省大约 5-比标准 ZigBee Pro 堆栈库高 6KB),不发送链路状态消息,也不会回显广播,因此这些都是优于非中继路由器的潜在优势。非中继路由器使用标准的 EMBER_ROUTER 节点类型,并且加入/行为与标准路由器节点一样,只是它不会中继任何单播流量或路由请求广播或使用任何路由回复来响应路由请求,除非message/route 是节点本身或其终端设备子节点之一。该节点仍然发送链接状态消息,仍然按预期回显广播,并且仍然允许终端设备子节点通过它加入/重新加入(除非 EMBER_MAX_END_DEVICE_CHILDREN 被定义/配置为 0 用于构建)。此外,虽然它不受官方支持,但可以设置/清除允许中继标志 ( 并且仍然允许终端设备子设备通过它加入/重新加入(除非 EMBER_MAX_END_DEVICE_CHILDREN 被定义/配置为 0 用于构建)。此外,虽然它不受官方支持,但可以设置/清除允许中继标志 ( 并且仍然允许终端设备子设备通过它加入/重新加入(除非 EMBER_MAX_END_DEVICE_CHILDREN 被定义/配置为 0 用于构建)。此外,虽然它不受官方支持,但可以设置/清除允许中继标志 (extern int8u emAllowRelay)在 SoC 设备上运行时,而更改节点类型可以在运行时完成,但更繁重,因为它需要离开网络并再次加入新的节点类型。

广播
在任何可感知规模的网络中,应尽可能避免或最小化广播,并且在已知感兴趣的节点与发送者非常接近(在有限的跳数内)的情况下,应限制传播半径。(请参阅上面的说明,由于密度,这些邻居中的跳数略高。)此外,ZigBee Pro 堆栈将广播流量限制为在任何 9 秒窗口内大约 8 个广播,因此任何 NWK 层广播活动(APS 广播,APS任何节点(即使是具有 1 跳半径的节点)的多播、路由发现、ZDO 公告或广播请求、PAN ID/频道/NWK 密钥更新通知)都将计入此限制,并且如果任何节点遇到超过此数量的广播流量,它将丢弃数据包,因为它可以'

虽然广播表(用于跟踪未完成的广播并限制一次可以活动的广播)理论上可以调整大小,但标准 EmberZNet PRO 堆栈不允许这样做,因为更改此参数可能会违反 ZigBee Pro 堆栈合规性并且可能影响与具有不同广播表参数的其他节点(甚至那些运行 EmberZNet PRO 堆栈的节点)的互操作性。然而,一些设计完全专有网络的客户(合规性和第三方互操作性不是这样的问题,并且他们可以指定 PAN 中涉及的所有节点的构建参数)能够从可配置的广播表中受益,以适应广播他们设计的带宽期望,在这种情况下,可以根据具体情况向了解风险的客户提供特殊的堆栈库变体。如果您认为这适用于您,请通过技术支持门户联系您的 Silicon Labs 支持代表 (https://siliconlabs.force.com)。另请注意,即使调整广播表的大小以允许在短时间内在网络中进行更多广播,发送广播也会对网络的吞吐量产生重大影响,并且不打算成为可靠的通信形式,因为没有 ACK是由接收者产生的,因为在中继消息时,并非所有节点都可以使用清晰的通道访问。

路由
您希望在大型网络中看到的一种广播类型,尤其是在楼宇自动化网络中具有中央控制点的广播,是多对一路由请求 (MTORR)。建议让网络中的中央收集/控制点充当网络集中器(例如通过我们的应用程序框架中的集中器支持插件),以使该节点与其他节点之间的通信更有效,从而减少一对一的路由发现非集中器节点的必要和路由表不会因流入/流出这些集中器的通信而过度使用。虽然 MTORR 仍然是广播,并且需要定期刷新/维护到集中器的路由(并从集中器导出反向路由),MTORR 在本质上比 1 对 1 路由请求更具规律性/周期性,并且源自特定点,因此流量影响具有很大的确定性且更易于建模。MTORR 的速率,即使用于纠正非功能性路由,也可以通过集中器支持插件中的最小/最大广播之间的时间参数以及生成 MTORR 以响应路由错误和传递失败的阈值进行调整。随着网络规模和/或集中器数量的增长,将广播之间的最大时间调整为更长很重要,这样网络就不会被几个在短时间内执行周期性 MTORR 的集中器淹没。请注意,您不仅要为 MTORR,还要为偶尔的地址发现(ZDO IEEE 地址请求或网络地址请求)留出足够的广播带宽,堆栈可能需要这些带宽来解析绑定/地址表的节点 ID目的地或(在 IEEE 地址请求的情况下)从非集中器引出单播回复,以便在多对一路由已更改或未知后为集中器的利益生成路由记录。(EmberZNet PRO 5.1.2 及更高版本中的集中器支持插件采用了这种主动源路由修复方式。)堆栈可能需要它来解析绑定/地址表目标的节点 ID,或者(在 IEEE 地址请求的情况下)从非集中器引出单播回复,以便为集中器的利益生成路由记录在多对一路由改变或未知之后。(EmberZNet PRO 5.1.2 及更高版本中的集中器支持插件采用了这种主动源路由修复方式。)堆栈可能需要它来解析绑定/地址表目标的节点 ID,或者(在 IEEE 地址请求的情况下)从非集中器引出单播回复,以便为集中器的利益生成路由记录在多对一路由改变或未知之后。(EmberZNet PRO 5.1.2 及更高版本中的集中器支持插件采用了这种主动源路由修复方式。)

为了确保实现源路由和多对一路由的好处,集中器应确保抑制传出消息的路由发现(不允许设置 EMBER_APS_OPTION_ENABLE_ROUTE_DISCOVERY),而不是从传入路由记录中派生源路由。类似地,与集中器通信的节点也应该在其到集中器的单播中抑制路由发现,而不是等待 MTORR 设置来自集中器的入站路由。虽然这些调整可能会在集中器和伙伴节点之间的初始通信中引入一些延迟(因为正在设置路由),但避免一对一路由发现广播所获得的好处对于网络的可扩展性很重要。如果非集中器节点难以知道哪些目的地是集中器以便在适当的情况下抑制路由发现,则可以使用可选的堆栈回调 emberIncomingManyToOneRouteRequestHandler(),这需要在构建过程中定义 EMBER_APPLICATION_HAS_INCOMING_ROUTE_ERROR_HANDLER。另请注意,如果使用绑定表与集中器通信,则可以在创建 EmberBindingTableEntry 时使用 EMBER_MANY_TO_ONE_BINDING 类型,这将在传递到绑定目标失败时抑制堆栈的正常地址发现,即使启用了 EMBER_APS_OPTION_ENABLE_ADDRESS_DISCOVERY 也是如此。但是,如果为当前单播启用了 EMBER_APS_OPTION_ENABLE_ROUTE_DISCOVERY 或 EMBER_APS_OPTION_FORCE_ROUTE_DISCOVERY 选项,它不会抑制路由发现。

请注意,您的信任中心(协调器)节点应始终实现集中器支持,以便它可以促进对来自加入/重新加入节点的父节点的身份验证请求的响应,这些请求在请求到达时可能尚未在路由表中。未能在信任中心上启用此功能可能会导致通过多个跃点加入节点时出现问题。

资源利用
为了确保集中器有节点的源路由而不必求助于它们,大型网络中集中器节点的应用程序设计者应该努力为资源允许的尽可能多的节点提供源路由。这意味着使用高 RAM 集中器(与低 RAM 集中器相反,它将强制节点为每个单播向集中器发送路由记录,增加流量负载)并将源路由表大小设置为足够大(理想情况下)集中器在 PAN 生命周期内将与之通信的最大预期节点集。对于 SoC 应用程序,这意味着将 EMBER_SOURCE_ROUTE_TABLE_SIZE 设置为尽可能大。(如果预计超过 255 个节点,设计人员可以根据需要更改 app/util/source-route.c 中使用的 SourceRouteTableEntry 表索引的数据类型,以适应 16 位索引。)对于使用 NCP 的 EZSP 主机应用程序,理想情况下,NCP 自己的源路由表应该与 RAM 所能容纳的一样大,即使主机计划自己维护源路由数据,因为在某些情况下(例如信任中心身份验证请求和传入的 ZDO 请求)堆栈需要自己响应而无需主机参与,因此只需要使用 NCP 的可用路由/源路由表来调用路由。(如果您的版本包含此功能,请确保选中 AppBuilder 集中器支持插件中的“在 NCP 处启用集中器支持”选项。)如果主机也计划存储源路由,

另请注意,对于具有许多跃点的大型/密集网络,附加到消息的源路由可能非常大,因此传出源路由单播的最大应用程序有效负载大小将受到此开销的影响。有关有效负载大小的更多信息,请参阅知识库文章(位于community.silabs.com),标题为“安全和非安全模式下 ZigBee 消息有效负载的最大长度是多少? ”。因此,对于具有大负载的某些消息,可能需要分段(可以通过 AppBuilder 的 Fragmentation 插件提供)。

除了源路由开销之外,诸如此类的大型网络应用程序可能还需要考虑增加以下参数(可以通过构建符号重新定义,例如通过 AppBuilder“包含”选项卡的宏部分):

EMBER_PACKET_BUFFER_COUNT - 由于网络大小/密度,更多的流量进出/通过节点意味着更多的数据包数据需要被路由器缓冲。单个数据包缓冲区最多可容纳 32 个字节的数据,因此一个大数据包可能需要多达 4 个数据包缓冲区来存储。对于休眠的终端设备子设备在父设备上缓冲的消息以及堆栈使用的其他瞬态网络数据,也需要数据包缓冲区。对于 EZSP 主机应用,Silicon Labs 建议将 NCP 上任何未使用的 RAM 分配给数据包缓冲区,以确保 NCP 有足够的数据,特别是因为数据包缓冲区还用于存储排队等待传输到主机的 EZSP 帧。(这已经是应用程序框架的默认行为。)应用程序框架对 SoC 构建使用默认的 75 个数据包缓冲区,

EMBER_APS_UNICAST_MESSAGE_COUNT - 任何时候来自发送节点的未决(等待 ACK/超时)APS 单播的数量。默认值为 10。

EMBER_MAX_END_DEVICE_CHILDREN - 单个父路由器/协调器可以支持的终端设备子设备的数量。默认为 6;最大值为 64。

EMBER_BINDING_TABLE_SIZE - 节点可以利用堆栈进行基于绑定的通信的绑定数量。根据用于保存这些的 SimEEPROM 存储模型的限制,最大值为 126,但 EZSP NCP 固件中的最大值为 100(基于 EM260 和 EM351 的固件除外,限制为 12 个绑定)。如果需要超过此数量的绑定,则应用程序将需要自行管理绑定,这可以通过为 SoC 构建定义 EMBER_APPLICATION_HANDLES_BINDING_ZDO_REQUESTS 来实现,或者对于 NCP 构建,通过设置 EzspConfigId EZSP_CONFIG_APPLICATION_ZDO_FLAGS 以包含位掩码 EMBER_APP_HANDLES_ZDO_BINDING_REQUESTS 来实现。此设置将导致所有 clusterId 为 BINDING_TABLE_REQUEST、BIND_REQUEST 或 UNBIND_REQUEST 的 ZDO 请求被传递给 [host] 应用程序进行处理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
目录 第1章 ZigBee技术概述 1.1 ZigBee技术的演变与进展1 1.1.1 ZigBee技术的由来2 1.1.2 ZigBee技术的发展历程2 1.2 ZigBee技术特点5 1.3 ZigBee2007/PRO特性6 1.3.1 ZigBeeZigBee PRO比较6 1.3.2 不同ZigBee版本的兼容分析8 1.4 ZigBee无线网络使用频谱和ISM开放频带16 1.5 ZigBee技术的广阔应用前景17 第2章 低功耗微控制器MSP430与ZigBee芯片CC2520 2.1 低功耗微控制器MSP43022 2.1.1 关键特性22 2.1.2 MSP430模块化架构23 2.1.3 16位RISC先进CPU24 2.1.4 超低功耗性能25 2.1.5 灵活的时钟系统26 2.1.6 智能外设27 2.1.7 MSP430应用29 2.2 MSP430F2618简介29 2.2.1 MSP430F2xxx介绍30 2.2.2 MSP430F2618特性30 2.3 ZigBee芯片CC252031 2.3.1 CC2520的特性32 2.3.2 CC2520引脚描述34 2.3.3 CC2520与CC2420的区别35 2.3.4 CC2520典型设计36 第3章 ZigBee无线网络多功能开发系统 3.1 无线网络ZigBee开发系统平台选择39 3.1.1 如何选择嵌入式无线开发工具和平台40 3.1.2 需要的设备和必要条件42 总结43 3.2 多功能可视化ZigBee无线网络开发系统C51RF3PK44 3.2.1 C51RF3PK仿真器44 3.2.2 网络液晶扩展板45 3.2.3 C51RF3PK电池板51 3.2.4 ZigBee模块53 3.3 图形化ZigBee2007开发系统56 3.3.1 ZigBee模块CC252057 3.3.2 网络液晶扩展板58 3.4 ZigBee软件集成开发平台63 3.4.1 IAR集成开发环境的安装65 3.4.2 添加文件或新建程序文件72 3.4.3 设置工程选项参数74 3.4.4 编译、链接、下载78 3.4.5 仿真调试79 第4章 ZigBee开发入门 4.1 认识ZigBee协议栈88 4.2 ZigBee网络数据传输90 4.2.1 实验目的90 4.2.2 ZigBee数据传输原理解析90 4.2.3 实验设备准备110 4.3 ZigBee协议栈编译/下载111 4.3.1 设备选择及设置111 4.3.2 编译/下载程序112 4.4 ZigBee源代码剖析113 4.4.1 发送一个信息包113 4.4.2 收发数据过程113 4.4.3 接收一个信息包116 4.5 实验流程117 4.5.1 流程图117 4.5.2 路由器代码118 4.5.3 协调器代码120 4.6 ZigBee分析仪分析ZigBee数据包121 4.6.1 协议分析仪121 4.6.2 ZigBee数据格式122 4.6.3 加入网络数据分析125 4.6.4 收发数据分析126 4.7 实验效果128 第5章 ZigBee无线网络开发进阶 5.1 ZigBee协议栈结构129 5.2 ZigBee协议栈实时操作系统132 5.2.1 OS术语介绍132 5.2.2 OSAL API介绍133 5.2.3 OSAL任务142 5.3 ZigBee2006应用接口144 5.3.1 实验目的144 5.3.2 原理介绍144 5.3.3 软件准备SAPI介绍145 5.4 网络形成145 5.4.1 协调器格式化网络146 5.4.2 路由器和终端设备加入网络146 5.4.3 ZDO_StartDevice147 5.5 绑定148 5.5.1 绑定表格149 5.5.2 绑定建立151 5.5.3 绑定解除156 5.6 命令156 5.6.1 命令定义及使用156 5.6.2 串159 5.6.3 ZCL介绍159 5.6.4 Profile介绍160 5.7 灯光控制实验165 5.7.1 APP函数分析165 5.7.2 灯光控制实验过程176 5.7.3 实验总结178 5.8 无线温度传感器实验179 5.8.1 设备179 5.8.2 命令180 5.8.3 发现和绑定180 5.8.4 数据包发送和接收181 第6章 ZigBee2007/PRO入门 6.1 ZigBee2007/PRO入门实验185 6.2 实验设备185 6.2.1 硬件介绍185 6.2.2 硬件组成186 6.3 实验基础知识186 6.3.1 ZigBee2007简介186 6.3.2 ZigBee2007/PRO协议栈简介187 6.3.3 ZigBee设备在Zstack中的体现189 6.4 实验内容191 6.4.1 建立任务192   6.4.2 按键处理函数197   6.4.3 发送函数198   6.4.4 接收处理函数200  6.5 实验步骤和结果200   6.5.1 建立网络200   6.5.2 路由设备加入网络202   6.5.3 发送数据203   6.5.4 退出小组203   6.5.5 加入小组203  6.6 实验拓展204   6.6.1 项目分析204   6.6.2 协调器函数的设计204   6.6.3 路由器设备函数设计205  6.7 实验总结206 第7章 ZigBee2007/PRO进阶  7.1 实验目的207  7.2 实验设备207   7.2.1 硬件介绍207   7.2.2 硬件组成208   7.2.3 ZigBee2007协议栈208  7.3 实验基础知识209   7.3.1 ZigBee PRO简介209   7.3.2 ZigBee PRO中的路由210   7.3.3 ZigBee PRO新功能211   7.3.4 信息包格式211  7.4 实验内容212   7.4.1 初始化任务213   7.4.2 任务处理215   7.4.3 UART_RX_CB_EVT事件219   7.4.4 串口发送函数222   7.4.5 串口接收中断函数223   7.4.6 串口读取函数224   7.4.7 ZigBee发送函数225   7.4.8 ZigBee接收处理函数226  7.5 实验步骤和现象228   7.5.1 建立网络228   7.5.2 路由设备加入网络229   7.5.3 查看网络中节点230   7.5.4 配置地址231   7.5.5 收发数据231  7.6 实验总结233 第8章 ZigBee2007/PRO高级应用——家庭自动化  8.1 家庭自动化概念234  8.2 ZigBee2007/PRO的家庭自动化236  8.3 家庭自动化实验目的236  8.4 家庭自动化体系236  8.5 实验设备237  8.6 家庭自动化实验工程238  8.7 家庭自动化工程剖析239   8.7.1 实验操作流程图240   8.7.2 灯和控制器主函数程序流程图240   8.7.3 其他初始化关键函数242   8.7.4 网络状态变化函数243   8.7.5 绑定相关函数246  8.8 操作系统250   8.8.1 操作系统关键参数251   8.8.2 操作系统关键函数252  8.9 灯设备关键任务256  8.10 控制器关键任务260  8.11 实验操作步骤265  8.12 家庭自动化例程总结268 第9章 ZigBee2007无线传感器网络  9.1 无线传感器网络概述269   9.1.1 什么是无线传感器网络269   9.1.2 无线传感器网络现状270   9.1.3 ZigBee在无线传感器网络上的应用272   9.1.4 ZigBee无线传感器网络系统特点272  9.2 ZigBee2007无线传感器网络实验概述273  9.3 ZigBee2007无线传感器网络硬件设计274   9.3.1 网关底板设计275   9.3.2 传感器底板设计276  9.4 网关与PC机的数据连接281  9.5 ZigBee2007无线传感器网络建立与网络管理287   9.5.1 网络通信过程介绍287   9.5.2 网关网络节点的地址管理288  9.6 网关与节点间的无线采集过程293  9.7 程序编译、下载303  9.8 实验效果304 附录A 网络层所定义的特性常量311 附录B 网络层信息库属性312 参考文献315

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Smartlabs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值