实现自适应数据率(ADR)¶
本文深入了解自适应数据速率(ADR)的特征LoRaWAN®终端设备软件开发人员和管理人员的团队建设罗拉®设备实现的1.0.4 LoRaWAN链路层规范。您将了解什么是ADR,学习何时使用ADR的最佳实践,学习如何实现它在你的终端设备。
在阅读本文之后,您应该处理ADR所需的基础知识,从宣布你的终端设备应该实现ADR,处理网络服务器发送终端设备的MAC命令,重新连接与网络服务器的ADR补偿方案。
已经在使用的软件等LoRaMAC-Node™处理美国存托凭证吗?这篇文章将给你的背景你需要了解软件是如何工作的,检查代码,获得信心你的终端设备标准和最佳实践后LoRaWAN链路层中定义的规范。
ADR及其主要优点¶
自适应数据速率(ADR)描述了方案,网络服务器单独控制数据速率,射频传输能量,通道使用,每个网络中的终端设备发送的数量在发送上行链路。
网络服务器使用接收信号强度指示(RSSI)的从一个终端设备接收到的消息确定如何关闭终端设备到最近的网关(s)。这允许网络服务器为每个终端设备选择最合适的设置。
ADR的好处是,它有助于维护终端设备的电池寿命,减少干扰,给网络上的所有终端设备成功沟通的最好机会。
默认使用ADR上行之前设置¶
ADR更改默认设置一个终端设备使用时发送上行链路。使用前的设置定义的ADR,终端设备应用程序将开始使用下面描述的默认设置。以下是每个类别的默认设置。你的终端设备应该从这些设置时首先开启或重置。
根据不同地区的默认设置。找到你所在地区的设置、下载最新的LoRaWAN区域参数文档的LoRaWAN为开发人员页面上罗拉联盟®的网站。
默认的发射功率¶
使用终端设备能够支持的最大的功率,是允许的地区运营。找到你所在地区的指南的最新LoRaWAN区域参数文档部分数据速率和输出设备输出功率编码。例如,如果你的设备是注定eu863 - 870地区,RP002-1.0.3引用文件,你将咨询部分2.4.3 eu863 - 870数据速率和输出设备输出功率编码,26页。
默认的数据速率¶
默认的数据速率取决于设备的激活方法。
设备所使用激活激活个性化(ABP),默认的数据率是最低数据率允许终端设备将操作在该地区。最小数据率允许在最新LoRaWAN区域中指定参数文件,在部分地区,享有数据速率和输出设备输出功率编码。
使用无线设备被激活激活(OTAA),默认的数据率是在连接过程中派生的数据速率。
默认发送的¶
默认的(NBTrans)是一个(1)。
决定何时实现ADR¶
如果你的设备总是静态(即。,in the same fixed location), then you should always use ADR.
如果你的移动终端设备,例如,如果它是一个地理位置跟踪器,ADR不会适合你的用例。ADR在使用时,网络服务器调整率的数据,发射功率和通道计划利用上行链路的接收信号强度来确定接近或远离网关设备似乎是。如果设备移动网络服务器之前计算和传播新设置,这些设置将不适合新的位置。
移动终端设备不一定是在连续运动,他们可能需要定期发送上行消息期间,当他们是静态的。在时期设备是静态的,将受益于使用ADR。如果可能的话,代码设计你的终端设备,这样可以确定出设备目前在运动。如果您的终端设备可以确定它的状态,那么您可以使用ADR当设备是静态的,停止使用ADR设备时。
如何实现美国存托凭证¶
网络服务器表明它是否能支持ADR在任何给定的时间通过设置ADR在下行。ADR是通过框架控制(FCtrl框架的)字段标题(FHDR),如下列图所示。
ADR位将支持ADR网络服务器时,它将被设置在网络服务器不支持美国存托凭证。通常情况下,网络服务器只是暂时中止支持ADR。
无论美国存托凭证传递的网络服务器,如果终端设备是静态的,最好的做法是尝试实现ADR。
实现ADR,终端设备需要做到以下几点:
通知网络服务器,它可以和准备使用ADR通过美国存托凭证。学习更多的通知网络服务器,终端设备准备使用ADR本文的部分。
监听链接ADR请求(
LinkADRReq
在下行MAC命令。实现更改如果可能的话,和应对网络服务器。看到处理ADR MAC命令为更多的信息。一旦修改默认设置,实现ADR补偿(如果新设置离开终端设备无法与网络服务器再一次)。有关更多信息,请参见ADR补偿。
即使最终的设备是不使用ADR(例如,如果它是移动),它仍然应该倾听LinkADRReq
MAC在下行命令,接受并实施渠道面具控制变化。
通知网络服务器,终端设备准备使用ADR¶
终端设备表示能力,可以使用ADR通过设置ADR在上行链路。帧的ADR是通过控制(FCtrl框架的)字段标题(FHDR),如下列图所示。
ADR位设置为显示终端设备准备使用ADR。只有设置ADR位如果设备是移动,因此无法实现ADR。
处理ADR MAC命令¶
ADR MAC命令应即使处理终端设备不是通过ADR在上行链路。甚至在运动设备不使用ADR仍然应该更新他们的渠道计划从网络服务器响应请求的ADR MAC命令。
在本节中,我们描述ADR MAC命令和如何根据LoRaWAN 1.0.4规范处理它们。你不需要处理这些命令自己,除非你自己编写LoRaWAN堆栈在你的终端设备。不过,您可以确认您所使用的库实现了ADR通过检查数据包,比较他们与下面的规范。
ADR MAC命令传递到终端设备在下行,同样所有MAC命令传递。有两个方法可用于发送MAC命令:内部帧选项(录像)领域的同时,其他数据发送帧内有效负载(FRMPayload),或作为一个单独的框架内下行负载。
当MAC命令发送与其他数据下行(也称为肩扛)、帧选项的长度(FOptsLenMAC载荷)字段将被设置为一个值大于零(0)。MAC命令自己发送的录像帧头。的命令录像字段将不会被加密。
当MAC命令发送在一个单独的下行,帧端口(FPortMAC载荷)字段设置为0,和FRMPayload在MAC载荷包含MAC命令。此外,录像在帧头将缺席,和FOptsLen领域框架控制将被设置为0。
MAC命令可以发送单独或一组并发MAC命令。所有MAC命令开始一个八位字节包含命令标识符(CID)表明MAC命令类型将会在随后的八位字节。下面的八位字节的长度取决于MAC命令类型识别前CID。链接ADR请求MAC指令(LinkADRReq
)是由CID战斗识别标识0 x03
有四个八位字节,见下图,这显示的结构LinkADRReq
命令。
如上图所示,这些领域的兴趣LinkADRReq
MAC命令:
数据率(DataRate),在被请求的数据率和TX输出功率(DataRate_TXPower)字段
LinkADRReq
命令。这表明新数据速率终端设备发送上行链路时应该使用。看到处理数据速度更新为更多的信息。TX输出功率(TXPower),在DataRate_TXPower字段
LinkADRReq
命令。这表明新发射功率终端设备发送上行链路时应该使用。看到处理TX输出功率更新为更多的信息。通道面具控制(ChMaskCntl)冗余场和通道面具(ChMask)字段
LinkADRReq
命令。在一起,这些表明渠道终端设备发送上行链路时应该使用。看到处理通道面具更新为更多的信息。每个上行帧的传输数量(NBTrans),在冗余字段
LinkADRReq
命令。这表明每一个上行的次数将被重新传输。看到处理NBTrans更新为更多的信息。
最后设备响应LinkADRReq
命令通过发送链接ADR的答案(LinkADRAns
回到网络服务器)MAC命令。一个LinkADRAns
包括两个八位字节。第一个包含CID,这表明MAC命令类型。第二个八隅体状态,表明请求被接受变化。
处理与LinkADRAns LinkADRReq MAC命令和响应¶
处理的步骤LinkADRReq
MAC命令取决于一个或多个LinkADRReq
命令发送的下行。
如果有多个LinkADRReq
命令在下行,采取以下行动的每个命令块,不是最后一个命令:
过程通道面具控制和通道掩码更新,如果提供的。这样做,即使最终的设备是不使用美国存托凭证,而不是通过ADR在上行链路。
如果一个通道面具更新了
LinkADRReq
的反应,LinkADRAns
命令,接受或拒绝面具更新频道。
如果有一个单身LinkADRReq
在下行,或如果这是最后一个命令在一块多LinkADRReq
命令,采取以下行动:
检查数据速率、TX输出功率NBTrans更新命令和决定是否可以应用,指导后的部分处理TX输出功率更新,处理数据速度更新,处理NBTrans更新在下面。
检查通道面具控制和通道面具更新和确定它是否可以应用请求的更改,以下的指导处理通道面具更新。
下一步取决于你是否通过ADR在上行链路:
如果终端设备通过ADR在上行链路:
如果所有的更新可以应用:
应用所有更新和回应
LinkADRAns
命令接受请求的更新。如果有任何的更新不能应用:
不适用任何更新和回复
LinkADRAns
命令拒绝请求的更新。
如果终端设备没有通过美国存托凭证在上行链路:
如果通道面具控制和通道面具可以应用更新:
应用更新和回应
LinkADRAns
命令接受通道面具控制和通道面具更新通过设置ChannelMaskACK1,拒绝任何其他更新请求。如果通道面具控制和通道面具更新不能应用:
不适用的更新和回复
LinkADRAns
拒绝所有请求命令更新。
处理TX输出功率更新¶
TX输出功率配置(TXPower)中找到所请求的数据速率和TX输出功率(DataRate_TXPower链接的)字段ADR请求MAC命令(LinkADRReq
)。当转换为小数,这将是一个数字0到15之间。
你需要TX输出功率在消息映射到一个真实的配置。取决于你的映射区域和最新LoRaWAN区域中指定参数文档。定位部分题为数据速率和输出设备输出功率编码你的地区。表10的RP002-1.0.3 LoRaWAN区域参数文档显示以下TXPower EU863配置代码。
如果TX中指定的输出功率
LinkADRReq
是一个电力终端设备可以使用:如果满足其他条件(如所描述的部分处理与LinkADRAns LinkADRReq MAC命令和响应),那么终端设备应设置为运行在指定的TX输出功率。
当发送
LinkADRAns
命令,如果其他条件得到满足(如中描述处理与LinkADRAns LinkADRReq MAC命令和响应),命令将被接受PowerACK应该设置为1位确认你能够接受请求。
如果TX中指定的输出功率
LinkADRReq
TX输出功率高于末端设备可以使用:如果满足其他条件(如所描述的部分处理与LinkADRAns LinkADRReq MAC命令和响应),那么终端设备应设置为最高可能的权力运作。
当发送
LinkADRAns
命令,如果满足其他条件(如部分中描述处理与LinkADRAns LinkADRReq MAC命令和响应),命令将被接受PowerACK应该设置为1位确认你能够接受请求,即使实际的功率将低于所要求的功率。
如果TX中指定的输出功率
LinkADRReq
命令是一个TX输出功率低于最终的设备可以使用:终端设备应继续操作之前配置TX输出功率。
当发送
LinkADRAns
命令,PowerACK不应该设置。因为你不能接受这个更新,你可能无法接受其他请求的情况下你必须接受或拒绝所有请求。阅读更多关于请求的处理组合处理与LinkADRAns LinkADRReq MAC命令和响应。
如果TX输出功率15 (0 xf):
忽略这一领域;认为这是一样的,如果没有请求改变TX输出功率。终端设备应继续操作之前配置TX输出功率。
处理数据速度更新¶
数据速率配置(DataRate)中找到所请求的数据速率和TX输出功率(DataRate_TXPower链接的)字段ADR请求MAC命令(LinkADRReq
)转换为小数,这将是一个数字0到15之间。
你需要消息中的数据速率映射到一个特定的配置。配置取决于你的地区和发现的最新LoRaWAN区域参数文档。例如,见表8的RP002-1.0.3 LoRaWAN区域参数下面的文档。定位部分题为数据速率和输出设备输出功率编码)地区最终将部署的设备。
如果消息中指定的数据速率是一个数字0到14:
检查
LinkADRReq
命令对任何通道面具控制和通道掩码更新,所述处理通道面具更新,并确保所支持的数据速率要求渠道将启用这个请求。
如果所请求的数据速率可以支持:
如果其他条件得到满足,(如中描述处理与LinkADRAns LinkADRReq MAC命令和响应),那么终端设备应设置为运行在指定的数据速率。
当发送
LinkADRAns
,如果其他条件得到满足(如部分中描述处理与LinkADRAns LinkADRReq MAC命令和响应),命令将被接受DataRateACK应该设置为1位确认数据率已成功设置。
如果所请求的数据速率不能支持:
终端设备应继续操作之前配置的数据率。
当发送
LinkADRAns
命令,DataRateACK不应该设置。因为你不能接受这个更新,你可能无法接受其他请求的情况下你必须接受或拒绝所有请求。阅读更多关于请求的处理组合处理与LinkADRAns LinkADRReq MAC命令和响应。
如果数据率是15 (0 xf)
忽略这一领域。如果认为这是一样的请求没有做出改变的数据率。终端设备应继续操作之前配置的数据率。
处理通道面具更新¶
英吉利海峡面具控制(ChMaskCntl)中发现的冗余ADR的联系请求MAC命令(领域LinkADRReq
)。英吉利海峡面具(ChMask)中发现的ChMask场的LinkADRReq
命令。英吉利海峡面具控制定义应该如何解释通道面具。当转换为十进制,通道面具控制将是一个0到7之间。
通道面具控制字段的意义取决于该地区的终端设备,并在最新的LoRaWAN区域参数文档。定位部分题为LinkAdrReq命令您的最终设备部署的地区。
eu863 - 870,文档解释说:
一个ChMaskCntl值0指示设备检查结束ChMask实地了解渠道打开或关闭,通道0和15之间。
一个ChMaskCntl价值6指示终端设备将在所有渠道,和忽视ChMask字段。
对于us902 - 928,ChMaskCntl改变了组织的渠道ChMask应该申请,如表19所示的RP002-1.0.3 LoRaWAN区域参数文档:
eu863 - 870之间的区别和us902 - 928说明检查的重要性ChMaskCntl和使用LoRaWAN区域参数文档解释输出。
通道掩码字段是一个位掩码定义的通道被英吉利海峡面具应该用于发送上行链路控制。可用的频道是由“1”表示。位设置为0意味着通道不应使用。0用来识别通道1,15是用来识别16频道。如果一些面具1000年0000年0000年0001年
然后只应该使用16通道1和通道。
如果通道面具控制和通道面具使通道定义,可以启用:
检查
LinkADRReq
命令任何数据率和TX输出功率更新,部分中描述处理数据速度更新和处理TX输出功率更新,确保渠道要求兼容的数据率和TX输出功率。
如果启用了渠道要求兼容结果数据率和TX输出功率:
如果其他条件都满足(如中描述处理与LinkADRAns LinkADRReq MAC命令和响应),终端设备渠道应该启用。
当发送
LinkADRAns
,如果其他条件得到满足(如中描述处理与LinkADRAns LinkADRReq MAC命令和响应),命令将被接受ChannelMaskACK应该设置为1位确认你能够接受请求。
如果通道请求启用不兼容的数据速率和TX输出功率:
终端设备通道应保持不变。
当发送
LinkADRAns
命令,ChannelMaskACK不应该设置。如果一个数据速率更新请求,DataRateACK不应该设置。如果TX的输出要求,PowerACK不应该被设置。
如果通道面具控制和通道面具结果在所有渠道被禁用,或使一个未定义的通道:
终端设备通道应保持不变。
当发送
LinkADRAns
命令,ChannelMaskACK不应该设置。因为你不能接受这个更新,你可能无法接受其他请求的情况下你必须接受或拒绝所有请求。阅读更多关于请求的处理组合处理与LinkADRAns LinkADRReq MAC命令和响应。
处理NBTrans更新¶
每上行传输帧的数量(NBTrans)字段中冗余ADR的联系请求MAC命令(领域LinkADRReq
)。当转换为十进制,NBTrans领域将是一个0到15之间。
的NBTrans字段告诉终端设备多少应该为每个上行帧传输。这个设置是网络服务器所使用的增加和减少的数量,控制网络流量和冗余。
的映射NBTrans字段如下:
0:使用的默认值NBTrans,也就是1。
保护:使用价值,所以,发送一个传输,2,发送两个传输,15。
如果使用一个值大于1,您还应该发送上行链路时遵循以下规则:
像往常一样使用跳频。
等到RX2重传之前已经过期。
当收到下行RX1或RX2期间,停止传输相同的上行帧。
ADR补偿¶
当终端设备不再使用默认TX输出功率,数据速率,渠道计划,或NBTrans,实现ADR补偿。
请注意
即使设备移动和没有实现ADR,通道计划仍然可以被修改,所以ADR补偿仍应被使用。
你不需要实现ADR补偿(除非你在编写自己的堆栈LoRaWAN终端设备)。然而,您可以确认您所使用的库实现了ADR补偿正确通过检查数据包和比较它们与下面的规范。
有三个变量在整个过程中,你需要引用存储在终端设备和更新。
ADR_ACK_LIMIT:这是独特的上行链路的总数,终端设备发送之前没有收到响应网络应该被迫回应通过设置ADRACKReq一些。这个数字是在部分地区参数中定义的文档默认设置。在RP002-1.0.3版本中,ADR_ACK_LIMIT设置为64。
ADR_ACK_DELAY:下行帧总数不包含一个回应ADRACKReq位之前,是可以尝试重新连接。网络服务器需要回应ADR_ACK_DELAY下行帧后ADRACKReq设置一些。因此,网络服务器和终端设备应使用相同的设置。这个数字是在部分地区参数中定义的文档默认设置。在RP002-1.0.3版本,ADR_ACK_DELAY设置为32。
ADRACKCnt:数一数的柜台前发送的上行链路接收下行。这个开始被设置为0。
请注意
LoRaWAN 1.1允许ADR_ACK_LIMIT和ADR_ACK_DELAY定义的网络服务器和OTAA过程中传递给终端设备。MAC命令存在改变的价值ADR_ACK_LIMIT和ADR_ACK_DELAY,使用ADRParamSetupReq
和ADRParamSetupAns
,所以这些应该默认为64和32岁的分别,然后应该更新的基础上ADRParamSetupReq
如果实现LoRaWAN 1.1版。
ADR补偿流¶
每当应用程序修改默认设置来响应LinkADRReq
MAC命令,设置ADRACKCnt0并重启这个流。
当发送一个新的上行帧,LoRaWAN标准要求您增加上行帧计数器。当你增加上行帧计数器递增ADRACKCnt1。
发送上行后,两个接收(RX)窗口允许您处理服务器响应。当第二个RX窗口关闭,下一步取决于终端设备收到下行响应的两RX窗口。
如果终端设备没有收到回复,要么两个RX窗口:
如果美国存托凭证确认请求(ADRACKReq)当前没有被设置在上行链路,即。,如果the end device is not specifically requesting a response from the server yet:
如果ADRACKCnt > = ADR_ACK_LIMIT,即,如果ADR_ACK_LIMIT(64)上行链路发送没有收到回应:
设置ADRACKReq在所有上行传输。这告诉服务器,终端设备希望服务器响应上行链路。
的位置ADRACKReq在上行链路从终端设备发送到网络服务器
如果ADRACKReq目前在上行链路,即。,如果the end device is requesting a response from the server:
如果ADRACKCnt > = ADR_ACK_LIMIT + ADR_ACK_DELAY,即,一个fter theADR_ACK_LIMIT(64)没有反应,上行链路ADRACKReq设置请求从服务器响应,已经ADR_ACK_DELAY(32)额外的上行链路没有响应从服务器:
将发射功率设置为默认设置的操作区域,所描述的部分默认的发射功率。
当一个进一步ADR_ACK_DELAY(32)额外的上行链路发送没有响应从服务器:
改变数据速率下数据率的地区。接下来的数据率在最近使用指定LoRaWAN区域参数文件,在部分地区,享有数据速率和输出设备输出功率编码。例如,如果您的设备是注定eu863 - 870区域引用文档RP002-1.0.3,你会2.4.3咨询部分,eu863 - 870数据速率和输出设备输出功率编码,26页。
如果终端设备已经运行在最低的数据速率,跳到第4步。
重复步骤2,步进数据速率每次的进一步下降ADR_ACK_DELAY(32)额外的上行链路发送没有响应从服务器,直到你达到最低的数据速率。
当下一次ADR_ACK_DELAY(32)额外的上行链路发送没有响应从服务器:
如果终端设备接收两个RX窗口内的响应,或者在任何时候在终端设备接收下行ADR补偿:
重置ADRACKCnt为0。这个重启倒扣流。
清除ADRACKReq如果它正在设置。
下表显示了一个示例ADR补偿,一个设备EU863地区。
ADRACKCnt |
ADRACKReq |
数据速率 |
发射功率 |
NbTrans |
渠道 |
---|---|---|---|---|---|
0到63 |
0 |
DR2 |
马克斯9 dBm |
3 |
使用一个通道面具 |
64年 |
更改为1 |
DR2 |
马克斯9 dBm |
3 |
使用一个通道面具 |
65年到95年 |
1 |
DR2 |
马克斯9 dBm |
3 |
使用一个通道面具 |
96年 |
1 |
DR2 |
更改为默认情况下,例如,马克斯-14 dBm |
3 |
使用一个通道面具 |
97年到127年 |
1 |
DR2 |
Max -14 dBm |
3 |
使用一个通道面具 |
128年 |
1 |
改为根据DR1 |
Max -14 dBm |
3 |
使用一个通道面具 |
129年到159年 |
1 |
根据DR1 |
Max -14 dBm |
3 |
使用一个通道面具 |
160年 |
1 |
改为DR0 |
Max -14 dBm |
3 |
使用一个通道面具 |
161年到191年 |
1 |
DR0 |
Max -14 dBm |
3 |
使用一个通道面具 |
192年 |
1 |
DR0 |
Max -14 dBm |
更改为1 |
更改为默认频道 |
193年开始,直到恢复连接 |
1 |
DR0 |
Max -14 dBm |
1 |
默认频道 |
结论¶
在本文中您已经了解了什么是ADR,使用ADR的最佳实践,以及如何实现美国存托凭证在你的终端设备。无论你是使用一个开源LoRaWAN软件包或你自己的软件来处理罗拉MAC层和ADR,您可以验证您的软件是正确传递ADR到网络服务器,处理LinkADRReq
MAC的命令,实现ADR补偿。
读了1.0.4 LoRaWAN链路层规范和下载和阅读LoRaWAN区域参数的文档罗拉联盟LoRaWAN供开发人员使用页面来了解其他方面的罗拉MAC层和视图的源材料。
下载LoRaMac-Node终端设备堆栈实现查看ADR是如何实现的一个例子在罗拉MAC层实现LoRaWAN链路层规范1.0.4 C。