跳到主要内容

以太网+LoRa水表电表(Z005C)

[TOC]

一、实现功能简介

基于 FlexLua 《DTU01万能采集器》和《DTU02万能网关》实现 LoRa 多点采集水表、电表数据(相电压/相电流/频率/功率因素/有功功率/有功电度累计值)。服务器借助 DTU02 LoRa 网关通过以太网 TCP + Json 下发查询命令,相应的 DTU01 采集器收到命令后借助 DTU02 Lora 网关向服务器回复水表电表数据,详细流程如下图:

pic3

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

--服务器希望读取Lora地址为 3 的DTU01采集器下的 水表2 传感器数据
{"LrAddr":3,"Dev":"SENSOR_SB2"}
----随后,Lora地址为 3 的DTU01采集器向服务器回复 水表2 的传感器数据
--水表用量:12345.67立方米
{"LrAddr":3,"Dev":"SENSOR_SB2","Data":{"Water":12345.67},"Err":null}

--服务器希望读取Lora地址为 1 的DTU01采集器下的 电表2 的传感器数据
{"LrAddr":1,"Dev":"SENSOR_DB2"}
--随后,Lora地址为 1 的DTU01采集器向服务器回复 电机2 的传感器数据
--电表:相电压/相电流/频率/功率因素/有功功率/有功电度累计值
{"LrAddr":1,"Dev":"SENSOR_DB2","Data":{"ULNAvg":219.35,"IAvg":0.01,"F":50.49,"PF":0.0,"P":0.0,"Ep":0.05},"Err":null}

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

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

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

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

二、实现方法

实现点实现参考文档
DTU01 万能采集器 + 电表M000A 文档:拓普瑞 TP613 电表(Lora被动传输章节)
DTU01 万能采集器 + 水表M000D文档:正泰 LXSY 水表(Lora被动传输章节)
DTU02 万能网关C000C 文档:Lora 转 以太网 Json 透传网关

三、源代码

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

DTU01源代码

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

源代码名称配置信息不同处代码不同处
电表1
电表2
水表1
LoraAddr = 1
SysDevName1 = "SENSOR_DB1"
SysDevName2 = "SENSOR_DB2"
SysDevName3 = "SENSOR_SB1"
有三个采集函数:
ModbusToJson_DB1(),ModbusToJson_DB2(),ModbusToJson_SB1(),
采集电表1/电表2/水表2,并在 LoraProcess() 函数中分别调用了这三个
采集函数
电表3LoraAddr = 2
SysDevName = "SENSOR_DB3"
只有一个采集函数: ModbusToJson() 用来采集电表3,
并在 LoraProcess() 函数中调用了这个采集函数
水表2LoraAddr = 3
SysDevName = "SENSOR_SB2"
只有一个采集函数: ModbusToJson()) 用来采集水表2,
并在 LoraProcess() 函数中调用了这个采集函数
电表4LoraAddr = 4
SysDevName = "SENSOR_DB4"
只有一个采集函数: ModbusToJson()) 用来采集电表4,
并在 LoraProcess() 函数中调用了这个采集函数

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

DTU02源代码

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

DTU01源代码 & DTU02源代码

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