本文主要是介绍LoRaWAN协议-自适应速率(ADR)技术,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
1 前言
2 网络容量优化
3 使用限制
4 如何实施ADR
4.1 通知支持ADR
4.2 ADR调整
4.3 ADR回退
5 ADR命令
5.1 LinkADRReq
5.2 LinkADRAns
1 前言
我们知道LoRa在不同的调制参数下,其传输速率和传输距离是有很大的差别。可以看下表中的数据:
- SF越大,同样发射功率下,链路预算就越高,意味着可传输的距离就越远
- 但同时,SF越大,传输速率就越低,TOA需要的时间就越大,从而功耗更高,信道占用更大
显然靠近网关的终端器件(节点)不需要 SF12 的高链路预算;在这种情况下,使用 ADR 可以优化用于每个节点的 SF,在保证通信质量稳定的情况下并最大程度地提高传输速率从而降低功耗和信道占用。
PS:ADR优化的是节点上行链路的速率配置;下行链路时节点侧是接收状态,功耗影响比较小,默认使用最大链路预算DR_0(一般为SF12)。
2 网络容量优化
通过上图的场景,来了解ADR应用在网络容量的优化。
- 当只有一个网关G1时,各节点设备随机放置在不同的环境中:室外,室内,深度室内。开启ADR后,所有节点的逐步优化至最佳。距离远的或者深度室内的节点会使用更高的SF,距离近的或者室外节点使用更低的SF。
- 所有终端节点都自动选择合适的SF,从而增加信道容量,降低功耗
- 随着节点数量的增加,或者节点布置离G1距离太远无法通信,此时增加新的网关G2进行扩容
- G2网关不仅可以为由于距离过远无法连接G1的节点提供服务;同时对于已经连接G1的节点,经过ADR的调整,更接近G2的节点此时可以降低SF,进一步增加了信道容量。
3 使用限制
移动节点不适用于ADR,主要基于以下几方面考量
- 部分国家ISM频段不允许网关进行全双工模式,意味着网关下行时是无法监听上行数据的。在多节点场景下,ADR命令交互需要使用到下行链路,此时会导致上行链路的数据的丢失。
- CLASS A类设备工作模式,限制了网关下行链路的可确定性。只有A类设备主动发起上行链路并打开接收窗口时,网关才能传递NS的命令。这样会导致调整的速率值不能及时通过网关下发给节点
- 节点位置相对于网关经常变化,那么基于上次的ADR调制往往会很快失效,导致丢包或者链路预算的浪费
4 如何实施ADR
4.1 通知支持ADR
无论是服务器端还是节点端,都是通过上下链路帧中的ADR位置1告知对方,自己支持ADR。可回顾《LoRaWAN协议-MAC帧格式详解》
4.2 ADR调整
当NS(网络服务器)接收到上行链路帧中的ADR位被置1时,表示节点支持ADR。NS开始动态管理网络内所有节点的通信速率及功率。节点设备的数据通过网关向上发送消息,网关仅传递消息而不处理数据。网关可以将节点数据包转换为 IP 数据包发送到网络服务器。这些 IP 数据包中还包含了时间戳,RSSI和SNR等信息。最终NS根据接收信号的质量,确定最佳节点数据速率应为多少(即扩频因子SF),从而下发LinkADRReq命令来调整节点的速率和功率。
- 节点上行链路数据是可以被多个网关收到,所有收到数据的网关都会将数据打包为IP数据包发给NS,具体可以参考《Lora技术-什么是LoRaWAN》
- 一旦网络服务器积累了多个结果,它将计算这些结果的中值,并确定可用的链路预算和可支持的最高数据速率,以及误差余量,以允许通道特性发生波动。在下一个上行链路之后,会根据需要将更改数据速率的 MAC 命令向下发送到终端器件。
4.3 ADR回退
试想这样的场景,节点设备入网后,通过NS侧的ADR已优化至最佳速率,比如SF7。但此时由于各种原因,导致上行链路丢失,此时就需要节点侧能够自主进行ADR回退。
节点侧ADR回退流程:
- 节点内部会维护一个计数器ADRACKCnt,每发送一次上行链路数据,ADRACKCnt会加1(重发的数据包不算)。
- 当ADRACKCnt >= ADR_ACK_LIMIT时,节点会在后续的上行链路帧中,将ADRACKReq 位置1,表示希望服务器尽快回复。
- 节点设备继续发送上行链路数据包并等待响应;当ADRACKCnt >= ADR_ACK_LIMIT + ADR_ACK_DELAY时,意味着节点(ADR_ACK_LIMIT + ADR_ACK_DELAY)次上行链路后,都未收到一次服务器的下行链路数据包。此时节点需主动降速一级,提高链路预算。
PS:图中未包含重发的上行链路,重发相关内容可以参考5.1节中的NBTrans
- 后续上行链路帧的ADRACKReq 位会一直置1,在接下来的ADR_ACK_DELAY次通信中,如果节点一直未收到服务端的响应,会一直降速下去直至最低。
- 当速率降低到规范允许的最低值后,在接下来的ADR_ACK_DELAY次通信中还是未收到服务端的下行链路数据包时,设备节点就会陆续将重发次数,通道掩码,发射功率都恢复为默认值
- 在上述所有过程中,如果收到一次服务端的下行链路数据包,节点侧的ADRACKCnt会清零,并且数据帧的ADRACKReq 位也会清零
- ADR_ACK_LIMIT默认值为64,ADR_ACK_DELAY默认值为32
5 ADR命令
5.1 LinkADRReq
NS(网络服务器)使用MAC命令LinkADRReq要求节点设备调整发送上行链路时的数据速率,发射功率,可使用通道,重发次数。
PS:即使终端设备不支持ADR,也需接收并处理LinkADRReq命令,用于更新上行通道和重发次数
- 该命令CID为0x03,其命令字段包含DataRate_TXPower,ChMask,Redudancy
1)DataRate
- 占用DataRate_TXPower字段中的高4bit,表示终端器件在发送上行链路时应使用的新数据速率
- 其值范围为0~15,具体含义需查询RP002-1.0.3 LoRaWAN 地区参数,下面是EU863区域的数据
2)TXpower
- 占用DataRate_TXPower字段中的低4bit,表示终端器件在发送上行链路时应使用的新发射功率
- 其值范围为0~15,具体表示多大的功率需要查RP002-1.0.3 LoRaWAN 地区参数,下表是区域EU863对应的数据。
3)ChMask & ChMaskCntl
- 共同指示终端器件在发送上行链路时应使用的通道,具体数组含义需查询RP002-1.0.3 LoRaWAN 地区参数
- ChMaskCntl - 不同值表示不同的通道组,比如US902区域的通道组
- ChMask - 表示通道组中哪些通道使用,哪些通道屏蔽
4)NBTrans
- 该字段告诉终端器件应该为每个上行链路帧进行多少次传输。网络服务器使用此设置来增加和减少重新传输的次数,以控制网络流量和冗余。
- 如果NBTrans设置次数大于1时,则在发送上行链路时需遵循:
a. 照常使用跳频。
b. 等待 RX2 到期后再重新传输。
c. 在 RX1 或 RX2 期间接收到下行链路时,停止重传相同的上行链路帧。
5.2 LinkADRAns
终端器件通过 ADR 应答 (LinkADRAns) MAC 命令发送回网络服务器来响应 LinkADRReq 命令
- CID为0x03,命令字段Status为1字节,包含功率确认(PowerACK),速率确认(DataRataACK),信道掩码确认(ChannelMaskACK)
- 节点设备如果支持ADR(即上行链路帧中ADR位置1),则必须所有参数调整都能实施,才回复LinkADRAns(所有ACK字段置1),并更新配置
- 节点设备如果不支持ADR,则只需对满足的参数进行配置,并只对允许的功能ACK位置1
这篇关于LoRaWAN协议-自适应速率(ADR)技术的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!