一、如何采集
Lua 语言运行在 DTU01 采集器上,只需简单的几行代码即可。
采集器通过 RS485 接口和 Modbus-RTU 协议 完成对电表中的相电压、相电流、频率、功率因素、有功功率、有功电度累计值等数据的采集。然后通过 4G + Mqtt 通信将这些数据以 Json 格式发送出去,格式如下:
{"Dev":"TH","Data":{"Ua":220.6,"Ub":221.3,"Uc":221.1,"Ia":0.21,"Ib":0.30,"Ic":0.21,"F":50.03,"PF":0.001,"P":0.021,"Ep":0.05},"Err":null}
注意:上图中的传感器代表“电表”
二、电表
电表说明书资料可在 {FlexLua开源网盘} -> {Spec} -> {M000B} 文件夹中找到:
三、DTU01 采集器 Lua 核心代码
结合电表说明书文档中 Modbus-RTU 协议的细节,电表采集代码如下:
--获取到的Json数据形如:{"Ua":220.6,"Ub":221.3,"Uc":221.1,"Ia":0.21,"Ib":0.30,"Ic":0.21,"F":50.03,"PF":0.001,"P":0.021,"Ep":0.05}
function ModbusToJson()
--配置RS485 Modbus转Json功能,并设置Json字符串最大长度为150字节
LIB_ModbusToJsonConfig(150)--必须小于255
--例如:A相电压寄存器地址0x0061,16bit无符号整数型AB,1位小数,Json名称"Ua"
LIB_ModbusToJsonAdd(0x0061,"U_AB",1,"Ua")--a相电压
LIB_ModbusToJsonAdd(0x0062,"U_AB",1,"Ub")--b相电压
LIB_ModbusToJsonAdd(0x0063,"U_AB",1,"Uc")--c相电压
LIB_ModbusToJsonAdd(0x0064,"U_AB",2,"Ia")--a相电流
LIB_ModbusToJsonAdd(0x0065,"U_AB",2,"Ib")--b相电流
LIB_ModbusToJsonAdd(0x0066,"U_AB",2,"Ic")--c相电流
LIB_ModbusToJsonAdd(0x0077,"U_AB",2,"F")--频率
LIB_ModbusToJsonAdd(0x017F,"S_AB",3,"PF")--总功率因数
LIB_ModbusToJsonAdd(0x016A,"L_ABCD",3,"P")--总有功功率
LIB_ModbusToJsonAdd(0x0000,"L_ABCD",2,"EP")--总有功电度累计值
--参数设置(9600,无校验,1位停止位,功能码"03",从机地址默认0x01,应答最长等待1000ms,包与包最短间隔100ms)
LIB_ModbusToJsonSend("BAUDRATE_9600","NoneParity","StopBit_1","03",0x01,1000,100)
end
完整的代码在 gitee 上的 flexluadisk 开源仓库中可找到:
https://gitee.com/shine_blink/flexluadisk
整个项目的实现文档可以在 www.flexlua.com 中的 M000B 文档中找到