首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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}

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

二、电表

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

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OTaEzi8jHYIwaU8p0_fdXjbA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券