LoraWAN论坛

标题: LoRaWAN 的防冲突机制是什么,节点避免碰撞如何选择信道 [打印本页]

作者: BeyondDream    时间: 2020-2-12 17:22
标题: LoRaWAN 的防冲突机制是什么,节点避免碰撞如何选择信道
本帖最后由 BeyondDream 于 2024-1-4 09:44 编辑

请问 LoRaWAN 的防冲突机制是什么?另外网关有 8 个信道,节点上行数据时怎么选择使用哪个信道呢?
关于无线电冲突避免,经典的答案在:《LoRaWan终端如何处理通信碰撞http://lora.timeddd.com/forum.php?mod=viewthread&tid=51

LoRaWAN 防冲突的机制是 ALOHA 算法,节点上行频率是“随机”选择 8 通道中的一个。

ALOHA 协议原理:很简单,只要用户有数据要发送,就尽管让他们发送。规定时间内若收到应答,表示发送成功,否则重发。
重发策略:等待一段随机的时间,然后重发;如再次冲突,则再等待一段随机的时间,直到重发成功为止。
优点:简单易行。
详情链接:https://blog.csdn.net/jiangjunjie_2005/article/details/54176245

[attach]563[/attach]

请参考《扩展 LoRa 容量_降低冲突丢包》
http://www.rimelink.com/nd.jsp?fromColId=107&id=48#_np=107_316


作者: BeyondDream    时间: 2020-2-12 17:26
本帖最后由 BeyondDream 于 2021-8-3 17:11 编辑

图1  8 通道随机上行_理想顺序

[attach]319[/attach]

图2  8 通道随机上行_现实顺序

[attach]320[/attach]

图3  8 通道随机上行_冲突丢包

[attach]321[/attach]

信道就像车道,如下图所示,SX130x 的 8 信道可以并行 8 辆汽车,SX127x/SX126x 的 1 信道只能并行 1 辆汽车。

[attach]489[/attach]

作者: BeyondDream    时间: 2020-2-18 10:04
本帖最后由 BeyondDream 于 2020-2-18 10:53 编辑

其实节点每次上报都是“随机”选择信道的,它的实现代码如下:
Channel = enabledChannels[randr( 0, nbEnabledChannels - 1 )];
randr() 是一个随机函数,上面的代码语句表示:从可用的信道中随机选择一个频点上报

比如 A 和 B 节点第一次都选择了 3 信道,第二次它们随机选择(比如:A 选择 5,B 选择 7)
当然,第二次它们也可能冲突,我们可以算下概率,因为有 8 通道,每个节点有 8 种可能,那么两者同时冲突的概率是 1/(8*8)=1/64

作者: ronronner    时间: 2020-5-7 14:42
谢谢分享,学习了!
作者: tomi    时间: 2022-10-3 22:22
如果数据重发需要单片机参与还是模块自动进行!
作者: BeyondDream    时间: 2022-10-6 08:25
本帖最后由 BeyondDream 于 2022-10-6 08:28 编辑
tomi 发表于 2022-10-3 22:22
如果数据重发需要单片机参与还是模块自动进行!
数据重发是 LoRaWAN 模组自动完成。更多详情请参考:
《节点如何发送 Confirmed 数据包并接收 loraserver 下发的 Ack 》http://lora.timeddd.com/forum.php?mod=viewthread&tid=903
《LoRaWAN协议中终端和网关通信会收到网关的ACK回应吗 》 http://lora.timeddd.com/forum.php?mod=viewthread&tid=422






欢迎光临 LoraWAN论坛 (http://lora.timeddd.com/) Powered by Discuz! X3.3