Lua 编程在工业 RS485 + 4G 采集电表数据中的应用


一、如何采集

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}

3060707a9279e3564b8a5217d28ac427.jpeg

注意:上图中的传感器代表“电表”

二、电表

521da5e0a4dbc95e2ed299415986ddb2.jpeg

电表说明书资料可在 {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 文档中找到



  • 24
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值