目录

Digimesh无线自组网协议和模块

Digimesh是一个由Digi公司提出的具有自组网功能的对等网络协议。在Digimesh网络中,各节点在地位上是相等的,都是可休眠的路由节点。当开启休眠时,协议会自动将网络中的节点同步进行休眠和唤醒。由于Digimesh的这种同步功能,它不像zigbee需要父节点来为休眠的子节点缓存数据,而是可以确保任意节点醒着的时候,其它节点也在唤醒状态。同样地,Digimesh的网络参数由网络ID和信道(跳频时为跳频点)决定,它不需要像zigbee一样,由协调器来建立网络,因此网络中的节点能够是完全对等的关系。

由于ZigBee网络中对于底层的重传,广播次数等都有明确的规定,而Digimesh则完全开放给用户去自定义,因此Digimesh更方便灵活适应不同应用的需求。

Digimesh除了具有自组网功能外,在带宽不足的应用情况下,也能够通过禁用自组网功能,从而实现更高带宽的点对多点的星状态网络。此外,在保留网状网的拓扑情况下,通过灵活调节不同节点的功能,还能实现可控的直接整网广播,在保证覆盖率的同时,进行一点移动节点或高带宽应用的部署。

Digi的XBee Digimesh模块

Digi提供两种不同频段的Digimesh模块:2.4GHz XBee3 Digimesh模块和868MHz,900MHz的次GHz Digimesh模块。其中次GHz的模块包括250mw的XBee 900HP,XBee 868HP和1W发射功率的XBee SX模块。

2.4GHz用的是扩频技术,而次GHz用的是跳频等技术,由于有更高的发射功能和较强的抗干扰能力,次GHz一般用于远距离通讯。

Digimesh的用法

Digimesh首先是一种自组网协议,因此和ZigBee类似,当一个Digimesh网络内部有一个节点出问题时,协议能为各节点的通讯自动寻找新的最佳路径,网络能自愈和自我恢复。

Digimesh并不需要有个角色来建立网络,网络ID和信道(或跳频点)是一个网络的标志,当两个模块的网络ID和信道(或跳频点)相同时,它们就处于同一个网络中,它们之间可不可达完全取决于信号强度,在信号达不到的地方,如果有同网络的节点作为跳点,就可以将网络延展过去。

2.4G的模块有信道(CH)参数,而采用跳频的次GHz模块则对应的是有跳频点参数(HP,CM),1W以上的远距离模块,还有一个空中波特率的参数(BR),为了能正常通信,网络内的节点该参数也需设置成一样。空中波特率越高,带宽也越高,但解码难度也增大,通讯距离相应会缩小,任何应用都应该在通信距离、可靠性和带宽之间作权衡。

HP可以理解为有七套不同中心频率的跳频点,在每套频率点中,还可以选择打开或关闭一些跳频点,这个参数是CM,它可以更灵活地在模块中实施不同国家的无线规约限制(比如禁用一些频点等。)或是通过这个方式指定避开某些干扰频点。

Digimesh的通讯方式有广播和定向单播两种方式。MT和RR决定了这两种通讯方式的最大重传次数。对于指定目标地址的单播,成功收到包后,接收方在底层会有个反馈包,如果发送方没收到反馈包,或是检测到发送失败,底层固件会自动重发,最多会重发RR次。而如果用广播的方式,每个Router会把收到的广播包再转发MT+1次。这是增强距离和可靠些,减少丢包率的参数,但它也会带来带宽的降低。当您需要很密集发送或是需要更可靠的实时性时,应在丢包率和带宽/实时性之间做权衡,合理设置这两个参数。

在Digimesh协议中,虽说是对等网络,每个节点角色相同,但仍有CE这个参数可以指定或限制模块的某些功能。最常用的是Standard Router节点和Non Routing Module节点两种。除此之外,也可以通过CE来指定两个模块的父子关系,子节点会定期向父节点查询是否有自己的数据),在CE参数中,如果指定节点是Non-routing,意味着它不能给其它节点做跳点,并且收到广播包后,它不会去转发。在某些应用场景,当用户需要减少网络中的数据流量,增强实时性时,会变得很有用。

Digimesh协议虽然是对等网络结构,但所有节点都可以同步休眠和唤醒,因此和ZigBee不同,它并不需要父节点为子节点缓存数据(虽然也能够为节点指定这种关系)。在一个稳定的已经同步了的网络中,当某个Digimesh的节点醒来时,意味着网络内的其它节点也处于醒着的状态。当有新节点加入时,需要两三个周期来同步。

由于Digimesh中有这些功能和参数可自定义,它既能用在节点数量多,带宽要求不高的场合,也同样非常合适节点数量较少,效率要求高的场景。

Digimesh网络功能探索

本节将讨论如何管理digimesh网络的一些问题。
当我们说组好一个网络时,意味着网络内各节点的网络ID,信道等已经设置好,并且已经能相互通信。通常一个典型的网络,包括一个API模式的网关和透传或API模式的网络内其它节点。当组好网络时,通常在网关侧,我们能够获取到网内的各个节点,并且可以有效的组织和控制网络内许可节点列表,将不是本网络的模块踢出网络或恢复为组网前状态。 对于一个开启休眠的网络,如果一个网络的网关NI已经预先确定,我们可以检测节点状态,在节点同步时通过ATDNXXXX将网关的目标地址写入到模块中。但更通用的做法是,网关定期广播带NI的组网信息帧,以便让各个节点可以在收到该信息时自动把网关的MAC地址保存下来。

在网关和节点均为透传模式时,由于默认的,节点的DH,DL为0000FFFF,所以我们可以在网关侧用ATAG0000FFFF让节点自动把DHDL写成网关的地址。

同样的,简单用法我们仍可以用ATAG0000FFFF来自动给网内节点设置好网关的目标地址。为了更有效管理网络,Digi有一个专门的AT指令来实现根据NI装载DHDL,这在多个网关组成分层式网络时显得非常有用。一个通常的做法是,当网关首次上电并形成网络后,开始广播SYNCXXXX,首次收到该信息的节点,将会把XXXX作网关的NI,发送ATDNXXXX,从而把网络内NI=XXXX的节点的mac地址自动设置到目标地址上。 而当节点向网关发送数据时,网关将获取到节点的mac地址,由此可在用户程序空间中管理这张表,只对在许可列表的节点进行通信,对于非本网的节点发送退网指令,使其恢复到组网前状态等。

当网络内节点全部是API模式时,在组网阶段,可用ATAG0000FFFF指令或仍由网关发起SYNC信息,各节点收到后便确认了网关的MAC地址,同时返回一个确信信息给网关,以便网关整理网络的节点列表。

此外,可由网关主动发起的网络信息查询,用ATNO04,ATFN,这会返回包括RSSI值的单跳结果,待续。。。

几种典型的应用场景

在电梯管理中,我们可以把TO设置成0x80,在API帧中也用这种方式通信,这是一种直接广播的传输方式,所有的routing 节点会再广播收到的数据,为了减少广播风暴,MT值可以设置为0,并且通过隔数层放置一个router,而其它层则作为no routing点,这样只有router才会把收到的数据再次广播一次,只有匹配目标地址的节点收到数据后才从串口输出。设想一个30层的电梯,每隔5层放置一个router,轿厢也作为router节点,整个网络同时也只有7个点会把收到的不是自己的数据再广播一次,整体能带宽控制得很好。

在隧道通信中,可以在隧道顶上放置router节点,而其它节点只作为non-routing节点。