跳到主要内容

4G+LoRa多电机温振(Z004B)

[TOC]

一、实现功能简介

基于 FlexLua 《DTU01万能采集器》和《DTU02万能网关》实现 LoRa 无线采集多个电机温振数据,并将采集到的每台电机数据(温度/振动速度/振动位移/振动加速度)通过 4G 无线传输的方式,以 Json 数据格式通过 Mqtt 上报给云服务器。

pic2

通信数据传输格式举例如下:

--LrAddr=1 的 DTU01 采集器上报电机1、电机2、电机3的传感器数据(上报周期1分钟)
{"LrAddr":1,"Dev":"MOTOR_1","Data":{"Temp":39.7, "Speed":20.6, "Dp":90.3, "Acc":6.1},"Err":null}
{"LrAddr":1,"Dev":"MOTOR_2","Data":{"Temp":40.1, "Speed":11.3, "Dp":100.2, "Acc":4.8},"Err":null}
{"LrAddr":1,"Dev":"MOTOR_3","Data":{"Temp":31.2, "Speed":10.9, "Dp":105.1, "Acc":5.9},"Err":null}

--LrAddr=2 的 DTU01 采集器上报电机4的传感器数据(上报周期1分钟)
{"LrAddr":2,"Dev":"MOTOR_4","Data":{"Temp":37.7, "Speed":20.6, "Dp":92.3, "Acc":7.1},"Err":null}

--LrAddr=3 的 DTU01 采集器上报电机5的传感器数据(上报周期1分钟)
{"LrAddr":3,"Dev":"MOTOR_5","Data":{"Temp":39.4, "Speed":22.6, "Dp":90.3, "Acc":6.5},"Err":null}

--LrAddr=4 的 DTU01 采集器上报电机6的传感器数据(上报周期1分钟)
--表示电机温度=39.2度,振动速度=20.3mm/s,振动位移=90.5um,振动加速度=6.1g
{"LrAddr":4,"Dev":"MOTOR_6","Data":{"Temp":39.2, "Speed":20.3, "Dp":90.5, "Acc":6.1},"Err":null}

"LrAddr" :可用来标识是哪一台 DTU01 LoRa 采集器

"Dev" :可用来标识这台 DTU01 采集器采集的是什么传感器

"Data" :中包含的是传感器结果数值

"Err":中包含的是故障信息,如果 "Data" = null,则 "Err" 中将包含错误信息,否则平时都是 null

二、实现方法

实现点实现参考文档
DTU01 万能采集器 + 电机温振传感器M004A 文档:仁科 WZ 温振变送器(Lora主动传输章节)
DTU02 万能网关C000A 文档:Lora 转 4G 网关 Json 透传网

提示:如果采集点( DTU01 + 传感器 )需要由 12v 电池长期低功耗供电,除了在 DTU01 采集器源代码的配置信息中将 "SysSleepEn "参数设置成1外,还需要进一步参考《DTU01直流供电和电池低功耗供电说明》文档在硬件上做一些调整,该文档可在 {FlexLua开源网盘}->{Hardware}->{DTU01万能采集器}->{DTU01硬件使用指导书} 文件夹中找到。

三、源代码

虽然参考上面给出的文档开发者即可以实现整个项目,但为了节省开发者时间,在{FlexLua开源网盘} -> {Application} -> {Z004B} 文件夹中也准备好了 DTU01 和 DTU02 的源代码以供开发者参考。

DTU01源代码

DTU01 文件夹中一共提供了四套 DTU01 源代码,这四套代码基本上相似,都是参考 {FlexLua开源网盘} -> {Software} -> {DTU01万能采集器} -> {RS485} -> {Lora主动发送} -> main.lua 修改而来,这四个代码不同之处如下表:

源代码名称配置信息不同处代码不同处
电机1-3LoraAddr = 1
SysDevName1 = "MOTOR_1"
SysDevName2 = "MOTOR_2"
SysDevName3 = "MOTOR_3"
有三个采集函数:
ModbusToJson_1(),ModbusToJson_2(),ModbusToJson_3(),
用来采集电机1/2/3,并在 while 大循环中分别调用了这三个采集函数
电机4LoraAddr = 2
SysDevName = "MOTOR_4"
只有一个采集函数: ModbusToJson() 用来采集电机4,
并在 while 大循环中调用了这个采集函数
电机5LoraAddr = 3
SysDevName = "MOTOR_5"
只有一个采集函数: ModbusToJson()) 用来采集电机5,
并在 while 大循环中调用了这个采集函数
电机6LoraAddr = 4
SysDevName = "MOTOR_6"
只有一个采集函数: ModbusToJson()) 用来采集电机6,
并在 while 大循环中调用了这个采集函数

提示:当开发者需要增加新的采集器时,基于源代码参考上表修改即可。

DTU02源代码

DTU02 源代码完全复制了 {FlexLua开源网盘} -> {Software} -> {DTU02万能网关} -> {LORA_4G_MQTT} -> main.lua 代码文件,但开发者需要根据实际情况正确填写源代码中的 Mqtt 配置信息。

DTU01源代码 & DTU02源代码

如果有多个像本文章描述的 Lora 网络同时共存(既多个 DTU02 网关共存),为了实现多网络的共存,需要将 DTU01 和 DTU02 源代码中的 LoraSubNetID(Lora 子网 ID) 配置参数设置为其他值,但同一 Lora 网络中的 DTU01 和 DTU02 的 LoraSubNetID 值必须相同。