以太网+LoRa多机温振(Z004C)
[TOC]
一、实现功能简介
基于 FlexLua 《DTU01万能采集器》和《DTU02万能网关》实现 LoRa 多点采集电机温振传感器数据(温度/振动速度/振动位移/振动加速度)。服务器借助 DTU02 LoRa 网关通过以太网 TCP + Json 下发查询命令,相应的 DTU01 采集器收到命令后借助 DTU02 Lora 网关向服务器回复电机传感器数据,详细流程如下图:
通信数据传输格式举例如下:
--服务器希望读取Lora地址为 3 的DTU01采集器下的 电机5 传感器数据
{"LrAddr":3,"Dev":"MOTOR_5"}
----随后,Lora地址为 3 的DTU01采集器向服务器回复 电机5 的传感器数据
{"LrAddr":3,"Dev":"MOTOR_5","Data":{"Temp":39.2, "Speed":10.6, "Dp":100.1, "Acc":5.8},"Err":null}
--服务器希望读取Lora地址为 1 的DTU01采集器下的 电机2 的传感器数据
{"LrAddr":1,"Dev":"MOTOR_2"}
--随后,Lora地址为 1 的DTU01采集器向服务器回复 电机2 的传感器数据
{"LrAddr":1,"Dev":"MOTOR_2","Data":{"Temp":38.1, "Speed":12.7, "Dp":90.3, "Acc":6.2},"Err":null}
"LrAddr"
:可用来标识是哪一台 DTU01 LoRa 采集器
"Dev"
:可用来标识这台 DTU01 采集器采集的是什么传感器
"Data"
:中包含的是传感器结果数值
"Err"
:中包含的是故障信息,如果 "Data" = null,则 "Err" 中将包含错误信息,否则平时都是 null
二、实现方法
实现点 | 实现参考文档 |
---|---|
DTU01 万能采集器 + 电机温振传感器 | M004A 文档:仁科 WZ 温振变送器(Lora被动传输章节) |
DTU02 万能网关 | C000C 文档:Lora 转 以太网 Json 透传网关 |
三、源代码
虽然参考上面给出的文档开发者即可以实现整个项目,但为了节省开发者时间,在{FlexLua开源网盘}
-> {Application}
-> {Z004C}
文件夹中也准备好了 DTU01 和 DTU02 的源代码以供开发者参考。
DTU01源代码
DTU01 文件夹中一共提供了四套 DTU01 源代码,这四套代码基本上相似,都是参考 {FlexLua开源网盘}
-> {Software}
-> {DTU01万能采集器}
-> {RS485}
-> {Lora被动发送}
-> main.lua
修改而来,这四个代码不同之处如下表:
源代码名称 | 配置信息不同处 | 代码不同处 |
---|---|---|
电机1-3 | LoraAddr = 1 SysDevName1 = "MOTOR_1" SysDevName2 = "MOTOR_2" SysDevName3 = "MOTOR_3" | 有三个采集函数: ModbusToJson_1(),ModbusToJson_2(),ModbusToJson_3(), 用来采集电机1/2/3,并在 LoraProcess() 函数中分别调用了这三个采集函数 |
电机4 | LoraAddr = 2 SysDevName = "MOTOR_4" | 只有一个采集函数: ModbusToJson() 用来采集电机4, 并在 LoraProcess() 函数中调用了这个采集函数 |
电 机5 | LoraAddr = 3 SysDevName = "MOTOR_5" | 只有一个采集函数: ModbusToJson() 用来采集电机5, 并在 LoraProcess() 函数中调用了这个采集函数 |
电机6 | LoraAddr = 4 SysDevName = "MOTOR_6" | 只有一个采集函数: ModbusToJson() 用来采集电机6, 并在 LoraProcess() 函数中调用了这个采集函数 |
提示:当开发者需要增加新的采集器时,基于源代码参考上表修改即可。
DTU02源代码
DTU02 源代码完全复制了 {FlexLua开源网盘}
-> {Software}
-> {DTU02万能网关}
-> {LORA_ETH_TCPUDP}
-> main.lua
代码文件,但开发者需要根据实际情况正确填写源代码中的以太网配置信息。
DTU01源代码 & DTU02源代码
如果有多个像本文章描述的 Lora 网络同时共存(既多个 DTU02 网关共存),为了实现多网络的共存,需要将 DTU01 和 DTU02 源代码中的 LoraSubNetID(Lora 子网 ID) 配置参数设置为其他值,但同一 Lora 网络中的 DTU01 和 DTU02 的 LoraSubNetID 值必须相同。