原创 物联网系统中Lora组网中的轮询模式实现

2024-9-30 12:05 166 0 分类: 物联网


01

概述


LoRa技术具有远距离、低功耗、多节点、低成本和抗干扰的特点。另一方面,LoRa低速率支持较小的数据传输。

服务器、终端(内置LoRa模块)、网关(或基站)、云四部分组成了LoRa网络。如图

Lora技术可用于很多场合,例如隧道通信、电网监视、电表、水表、智能农业、智能水利、智能交通、智能社区、环境监视、工业自动化测试、水产养殖等电表的数据收集等。


02

轮询模式


轮询的优点在于其简单性和能够同时检查多个设备的能力。它不需要复杂的中断设置和管理,因此更容易实现和维护。轮询的主要缺点是它可能无法及时处理快速变化的事件或数据,因为它只在轮询周期到达时才检查设备状态。

因此,必须注意,如果数据与信号有相关的截止时间(deadlines),那么轮询时间加上响应时间必须始终小于这些截止时间。如果数据到达的速度快于轮询时间,那么数据将会丢失。这在许多应用中可能不是问题,但在某些情况下可能是致命的。

相比之下,中断处理可以立即响应设备状态的变化,因为它是由设备本身触发的。但是,中断处理需要更复杂的设置和管理,包括中断向量的配置、中断服务例程的编写和中断优先级的设置等。此外,如果多个设备同时触发中断,还需要处理中断嵌套和优先级的问题。

因此,在选择使用轮询还是中断处理时,需要根据具体的应用场景和需求进行权衡。

轮询模式:将网关设置为该模式后,连接到网络的节点模块将处于被动状态。此时,网关将根据Web设置发出前导(前导期间与唤醒期间相同),唤醒网络上的所有节点。将数据传输到节点发送数据后,当网关收到来自模块的数据响应时,会立即发送下一个数据。否则,在接收时间到期之前不发送下一个数据。

功能说明:

1.在使用此模式之前,客户必须设置与插座相关的参数。配置完成后,网关进入监视状态,节点连接到网络。网关响应网络信息,保存节点信息。如果网络节点的数目超过0或者数据库能够访问该网络,则该网关将基于设置的唤醒时间、轮询时间和周期来轮询唤醒数据并由用户设置。

2.当节点接收到数据时,节点采取适当的操作并响应相关数据来完成数据交换,然后节点进入睡眠状态,并且网关等待下一个周期中出现第二个唤醒数据。此模式最多可设置16个唤醒数据。一旦完成了对所有节点(存储在数据库中的网络节点)的唤醒数据的轮询,第二个轮询数据将被替换,并重复上述步骤直到下一个轮询周期。完成后,在轮询周期结束之前,将重新开始轮询,从数据库中保存的第一个数据开始启动。

轮询数据设置:由已发布的条目数和轮询数据组成,在被动唤醒模式下启用。

发布的条目数:确定下一轮询数据的数量。例如,如果发布的条目数为4,则仅轮询数据1~4的数据,最多对应16个命令数据,数据格式为“十六进制”,因此请严格以数据格式填写。

轮询数据:用户必须轮询发出的数据或命令。“十六进制”输入,最多64字节。请务必以十六进制格式输入。


03

使用场景


轮询模式适合设备一直在线的情况下,就像是教室里老师挨个点名,学生挨个回答一样,这样子每个人都会在点名的时候进行回答,不会冲突。


04

轮询组件的使用


1 Gitee链接地址

Demo位于amaziot_bloom_os_sdk\products\am-lora-gateway\lora_gateway

Gitee源码地址:https://gitee.com/ning./hongdou

Github源码地址:https://github.com/ayumid/hongdou

编译指令:.\build.bat -l .\amaziot_bloom_os_sdk\products\am-lora-gateway\lora_gateway

2 组件功能介绍

主机按照设置的间隔轮询从机,从机收到主机轮询消息后再上报。

3 代码讲解

1 dtu_lora_call_task_init

功能:该函数用于,初始化轮询任务。

参数:无

返回值:无

示例:

C
dtu_lora_call_task_init();

2 dtu_lora_call_task

功能:该函数用于,轮询主任务。

参数:无

返回值:无

示例:

C
status = OSATaskCreate(&dtu_lora_call_msgq_task_ref, dtu_lora_call_task_stack, DTU_LORA_CALL_TASK_STACK_SIZE, 151, "dtu_lora_call_task", dtu_lora_call_task, NULL);

3 dtu_lora_call_interval_timer_stop

功能:该函数用于,定时器停止。

参数:无

返回值:无

示例:

C
dtu_lora_call_task_init();

4 dtu_lora_call_interval_timer_start

功能:该函数用于,开始轮询定时器。

参数:无

返回值:无

示例:

C
dtu_lora_call_interval_timer_start();

5 dtu_lora_call_interval_timer_init

功能:该函数用于,轮询定时器初始化。

参数:无

返回值:无

示例:

C
dtu_lora_call_task_init();

6 dtu_lora_call_interval_timer_callback

功能:该函数用于,轮询定时器回调函数。

参数:无

返回值:无

示例:

C
OSATimerStart(st_dtu_lora.lora_call_ref, dtu_file_ctx->lora.interval * 200, dtu_file_ctx->lora.interval * 200 , dtu_lora_call_interval_timer_callback, 0);

7 dtu_lora_call_task_send_msgq

功能:该函数用于,定时器超时给主任务发送消息,驱动主任务通过lora模块发送消息。

参数:无

返回值:无

示例:

C
dtu_lora_call_task_send_msgq(&uart_send);

4 Demo实战

参考开源项目Lora网关

注:本文部分内容来源于网络,如有侵权,请及时联系我们。

本文章源自奇迹物联开源的物联网应用知识库Cellular IoT Wiki,更多技术干货欢迎关注收藏Wiki:Cellular IoT Wiki 知识库(https://rckrv97mzx.feishu.cn/wiki/wikcnBvAC9WOkEYG5CLqGwm6PHf)

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
0
关闭 站长推荐上一条 /5 下一条