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


原文地址:https://blog.csdn.net/u011638175/article/details/122240091
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/412789

相关文章

Python中高级文本模式匹配与查找技术指南

《Python中高级文本模式匹配与查找技术指南》文本处理是编程世界的永恒主题,而模式匹配则是文本处理的基石,本文将深度剖析PythonCookbook中的核心匹配技术,并结合实际工程案例展示其应用,希... 目录引言一、基础工具:字符串方法与序列匹配二、正则表达式:模式匹配的瑞士军刀2.1 re模块核心AP

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Python实现PDF按页分割的技术指南

《Python实现PDF按页分割的技术指南》PDF文件处理是日常工作中的常见需求,特别是当我们需要将大型PDF文档拆分为多个部分时,下面我们就来看看如何使用Python创建一个灵活的PDF分割工具吧... 目录需求分析技术方案工具选择安装依赖完整代码实现使用说明基本用法示例命令输出示例技术亮点实际应用场景扩

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议

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

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