扩展 PAN ID 是对于 ZigBee 2007(EmberZNet 3.x 和以后版本)而言属于全新内容的网络参数,它用于 ZigBee 和 ZigBee PRO 功能集中。此扩展 PAN ID [EPID] 可以看作是基本的 16 位 PAN ID [PID] 的扩展。EPID 是在生成个人区域网络 [PAN] 时由 ZigBee 协调器 [ZC] 为整个网络设置的 64 位值,在 PAN 运行时不能更改此值(与 PID 不同)。与 PID 相同的是,同一 PAN 内的所有节点都共享一个 EPID。
与扫描和加入过程不同,EPID 由于在报头中的开销较大(8 字节),因而很少显示于传输的 ZigBee 数据包中。但是在网络更新事务中会使用 EPID,此时网络管理器节点将向 PAN 中的其他设备通知 PID 冲突或信道更改,以便移向新信道和/或 PID 的节点可以将 EPID 的一致性作为条件来查找移动网络。需要注意的是,在节点关联到网络中后,扩展 PAN ID(即使为零)会保存在非易失性存储器中(作为令牌的一部分),因此在设备离开网络之前,它在设备的整个生命周期内都不会改变。
EPID(以及诸如 PID 等的其他信息)将显示在“主动扫描”可见的信标帧结果中,在开始加入时,如果 EPID 在加入请求中为非零,EPID 将会成为主要条件来匹配此节点和要加入的节点(16 位 PAN ID 被有效地忽略)。但是,某些网络(特别是旧式网络)可能不希望(或无法)处理 EPID,因此 EPID 在来自信标帧的网络参数中将为零。如果在 JoinNetwork 操作过程中,所请求的 EPID 都为零,将仅使用 16 位 PAN ID 进行匹配以实现网络关联。
尽管 Ember 提供一些典型实用工具(插件/应用程序/工具/扫描)来扫描网络和解析结果以确定要加入的节点,但此过程通常因应用程序设计和选择网络时所要求的严格级别而不同。(例如,加入设备可能仅需要任何可用的 ZigBee Pro 网络;它可能查找专为所用应用程序设计的封闭网络,而不关心选择哪个封闭网络;或它可能查找具有特定属性的特定封闭网络,如此在家里时我的笔记本电脑就不会加入随便一个家庭 WiFi 网络,而只加入我自己的 WiFi 网络。)
以下指导原则适用于确定在特定 EPID 下 EmberZNet 在组网/入网时的预期行为:
如果在 FormNetwork 过程中为扩展 PAN ID 指定了全零值,则堆栈将为此域生成一个随机的 64 位值。
如果在JoinNetwork过程中为扩展 PAN ID 指定了全零值,则堆栈将使用在 JoinNetwork 参数中指定的 16 位 PAN ID 作为入网过程中选择网络的主要条件。
如果在JoinNetwork过程中为扩展 PAN ID 指定了非零值,则堆栈将使用在 JoinNetwork 参数中指定的 64 位扩展 PAN ID(即使 16 位 PAN ID 为不同的值)作为入网过程中选择网络的主要条件。
PAN ID 是为各网络随机选择的唯一 16 位值,而 EPID 则更多地被用作 WiFi 网络的 SSID 域以便提供用户友好的名称(由制造商或安装人员指定,因此不如前者那么随机)。但是,Ember 不鼓励为所有部署使用固定 EPID,因为(与 PAN ID 冲突不同)如果运行时出现 EPID 冲突,将无法解决(因为没有用于区分 PAN 的其他唯一信息)。希望使用非随机 EPID 的客户应该至少通过协调器或通过某些外部调试工具来扫描网络,检查新 PAN 的首选 EPID 是否未被其他 PAN 使用。一种方法是在组成 PAN 时使用一个小的首选 EPID 集,这样在首选项出现冲突时协调器可以选择其他值。
OEM 制造需要客户安装(非经过培训的安装人员)的消费级产品时,应该特别注意确保 EPID 的多样性,因为互为邻居的两位客户可能购买同一种产品供各自家庭使用,并且会希望将各自的网络彼此隔离。如果这两位邻居使用具有相同 EPID 的 PAN,两位用户都会遇到网络问题,因为两家将会成为一个网络,会出现许多网络地址冲突的情况。
下面是扩展 PAN ID 和标准 PAN ID 差异概览:
EPID 是 64 位;PID 是 16 位
EPID 通常用于匹配所请求网络的堆栈条件;PID 仅在 EPID 全为 0×00 字节时用作匹配条件。
EPID 仅存在于几种数据包(信标帧、网络更新消息)中;PID 存在于几乎所有 802.15.4 帧中(MAC ACK 除外)。
EPID 用作唯一标识网络和解决 PID 冲突的条件;PID 用作无线电接收器对 MAC 目标过滤之用。
EPID 可以在扫描结果中提供网络身份的某些识别信息;PID 始终为完全随机,因此无法判断 PAN “适合”与否。
EPID 可以为 0×0000000000000001 到 0xfffffffffffffffe 之间的任意值(全 0 和全 F 是预留值);PID 可以为 0×0000 – 0xFFFE 之间的任意值(全 F 为预留值)。