LoRaWAN协议-自适应速率(ADR)技术

2023-11-22 20:40

本文主要是介绍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)技术的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/412789

相关文章

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

通过cmd获取网卡速率的代码

《通过cmd获取网卡速率的代码》今天从群里看到通过bat获取网卡速率两段代码,感觉还不错,学习bat的朋友可以参考一下... 1、本机有线网卡支持的最高速度:%v%@echo off & setlocal enabledelayedexpansionecho 代码开始echo 65001编码获取: >

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Java使用WebView实现桌面程序的技术指南

《Java使用WebView实现桌面程序的技术指南》在现代软件开发中,许多应用需要在桌面程序中嵌入Web页面,例如,你可能需要在Java桌面应用中嵌入一部分Web前端,或者加载一个HTML5界面以增强... 目录1、简述2、WebView 特点3、搭建 WebView 示例3.1 添加 JavaFX 依赖3

全解析CSS Grid 的 auto-fill 和 auto-fit 内容自适应

《全解析CSSGrid的auto-fill和auto-fit内容自适应》:本文主要介绍了全解析CSSGrid的auto-fill和auto-fit内容自适应的相关资料,详细内容请阅读本文,希望能对你有所帮助... css  Grid 的 auto-fill 和 auto-fit/* 父元素 */.gri

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2