APRUS Lua-Modbus3 配置说明

1. 概述

本章主要为APRUS Lua-Modbus3 协议的相关配置说明,该协议主要针对支持(捷豹)3字节浮点数 modbus 协议(汉字温压液晶)(以下简称modbus3)的设备。APRUS适配器可通过modbus3协议与对接设备进行通信。而其中APRUS的Lua包含apru.lua和config.lua两个文件,客户只需配置config.lua就可以对支持modbus3协议的设备进行数据采集。
目前版本支持采集结点起始地址为0开始采集数据,根据相关协议无法自主选择采集点位个数及点位类型;上报类型仅支持float上报;一次采集到的数据包中含有不同的上报值类型,可以通过上报结点的vartype字段进行区分。
如需修改APRUS.lua文件的内容时,请咨询相关的技术人员,随意修改会导致适配器不能正常工作,所以此文档主要介绍config.lua内容。

2. APRUS.lua配置说明

2.1 导入modbus3协议支持库

语句:require "modbus3"
说明:导入modbus3协议支持库

2.2 加载config.lua配置文件

语句:config = require "config"
说明:导入config.lua中的配置信息(下一节介绍config.lua)

2.3 创建modbus3对象

语句:modbus3obj = modbus3.new("modbus3")
说明:创建modbus3对象,返回modbus3obj 供全局使用

2.4 配置modbus3对象接口参数

语句:modbus3.config(modbus3obj, cjson.encode(config.MODBUS3.Device))
说明:配置modbus3通信接口RS485参数

2.5 添加modbus3采集节点

语句:modbus3_load_collectnodes(modbus3obj,config.MODBUS3.ColNode)
说明:添加config.lua中所配置的采集节点

2.6 添加modbus3上报变量节点

语句:modbus3_load_varnodes(modbus3obj,config.MODBUS3.VarNode)
说明:添加config.lua中所配置的变量节点

2.7 运行modbus3实例

语句:modbus3.run(modbus3obj)
说明:在mqtt建立连接后 运行modbus3实例 即开始采集+运算

2.8 暂停modbus3实例

语句:modbus3.stop(modbus3obj)
说明:在mqtt连接断开时 暂停modbus3实例

2.9 设置modbus3实例的调试打印级别

语句:modbus3.debug(modbus3Obj, debugNumber)
说明:启用详细的modbus3调试信息。第一个参数为modbus3.new实例的返回值,第二个参数的值为32位十六进制数字,这个数值分成4个字节,单独每个字节为1时开启对应功能,为0时关闭对应功能。从低位到高4个字节的功能分别是:错误信息、连接信息和一般信息、接收内容详情、发送内容详情。此设置可以帮助您了解设备的运行情况,排查错误,优化性能。请根据需要选择要开启的调试信息级别。

2.10 等待modbus3事件

语句:local msg = user.waitmsg()
说明:启动事件等待,该接口会返回全局各种事件,包括modbus3对象事件

2.11 msg 事件处理

语句:elseif msg.from == "modbus3" then msg_handle(msg.obj, msg.name, msg.code, msg.data)
说明:当接收到msg 对象事件时,调用处理函数modbus3_handle msg.obj 即new时所返回的对象 msg.name 即new时所配置的对象名称 msg.code 事件码 区分改变上报事件 周期上报事件等等 msg.data 事件数据

2.12 mqtt数据上报

语句:

function modbus3_handle(obj, name, code, data)
    mqtt.publish(mqtt3Obj, name, "r", data)        
end

1.13 反向控制(暂不支持)
语句 modbus3.write(modbus3obj, cjson.encode({[“name”] = k, [“val”] = v}))
说明 反向控制时调用的modbus3写入接口

2 config.lua配置说明
Demo示例:

return
{
    AprusX = {
        ipmode = "none", --auto/manual/none
        inet_addr = "192.168.1.234",
        netmask = "255.255.255.0",
        luaver = "V00.R",
        devinfo = "ModbusRtuDev",
    },
    MODBUS3 = {
        Device = {
            portindex = 1,
            rate = 9600,
            databit = 8,
            stopbit = 1,
            parity = "None", -- None/Odd/Even
            queryInterval = 100
        },
        ColNode = {
            { ID = 1, reg = "3", addr = 0, cnt = 20, dbName = "MOBUS_ID1A00B6" },
            -- { ID = 2, reg = "3", addr = 0, cnt = 20, dbName = "MOBUS_ID2A00B6" },
        },
        VarNode = {
            { ID = 1, reg = "3", addr = 0, vartype = "flow",            dtype = "float", cycle = 6, name = "L1_3_0_flow" },
            { ID = 1, reg = "3", addr = 0, vartype = "temperature",     dtype = "float", cycle = 6, name = "L1_3_0_temperature" },
            { ID = 1, reg = "3", addr = 0, vartype = "pressure",        dtype = "float", cycle = 6, name = "L1_3_0_pressure" },
            { ID = 1, reg = "3", addr = 0, vartype = "density",         dtype = "float", cycle = 6, name = "L1_3_0_density" },
            { ID = 1, reg = "3", addr = 0, vartype = "frequency",       dtype = "float", cycle = 6, name = "L1_3_0_frequency " },
            { ID = 1, reg = "3", addr = 0, vartype = "cumulative_flow", dtype = "float", cycle = 6, offset = "*100;+1;~1",          name = "L1_3_0_cumulative_flow" },

            { ID = 2, reg = "3", addr = 0, vartype = "flow",            dtype = "float", cycle = 6, name = "L1_3_0_flow" },
            { ID = 2, reg = "3", addr = 0, vartype = "temperature",     dtype = "float", cycle = 6, name = "L2_3_0_temperature" },
            { ID = 2, reg = "3", addr = 0, vartype = "pressure",        dtype = "float", cycle = 6, name = "L2_3_0_pressure" },
            { ID = 2, reg = "3", addr = 0, vartype = "density",         dtype = "float", cycle = 6, name = "L2_3_0_density" },
            { ID = 2, reg = "3", addr = 0, vartype = "frequency",       dtype = "float", cycle = 6, name = "L2_3_0_frequency " },
            { ID = 2, reg = "3", addr = 0, vartype = "cumulative_flow", dtype = "float", cycle = 6, name = "L2_3_0_cumulative_flow" },

        }
    },
}

1. APRUS: 接口属性

1.1 ipmode
: “auto”/“manual”/“none”
说明: ip获取方式

1.2 inet_addr
: “192.168.1.234”
说明: APRUS的IP地址

1.3 netmask
: “255.255.255.0”
说明: 子网掩码

1.4 luaver
: “MAX.LUA.V032700.R”
说明: APRUS的Lua版本信息,根据实际脚本自行填写

1.5 devinfo
: “modbus3Dev”
说明: 与APRUS对接设备,可根据需求自行填写

2. modbus3-Device: 接口属性

2.1 portindex
: 整型:1/2
说明: RS485-1/ 2接口

2.2 rate
: 整型:2400/4800/…/15200
说明: 波特率

2.3 databit
: 整型:5/6/7/8
说明: 数据位

2.4 stopbit
: 整型:1/2
说明: 停止位

2.5 parity
: 字符串:Even/Odd/None
说明: 校验

3. modbus3-ColNode :采集节点属性

3.1 ID
: 整型:1~n
说明: 设备ID

3.2 reg
: 字符串:3
说明: 寄存器类型

3.3 addr
: 整型:0
说明: 采集起始地址

3.4 cnt
: 整型:20
说明: 采集单位数

3.5 dbname
: 字符串:MOBUS_ID1A00B6
说明: 数据中心的数据库名字(详见数据中心)

4. modbus3-VarNode:上报节点属性

4.1 ID
: 整型:1~n
说明: 设备ID

4.2 reg
: 字符串:3
说明: 寄存器类型

4.3 addr
: 整型:0
说明: 数据起始地址

4.4 vartype
: 字符串:flow /temperature/pressure/density/frequency/cumulative_flow
说明: 上报数据类型:流量值/温度值/压力值/密度值/频率值/累计流量

4.5 dtype
: 字符串:float
说明: 变量类型

4.6 cycle
: 整型:0~n
说明: 单位:秒
等于0:即指定上报类型为改变上报
大于0:即指定上报周期

4.7 offset(选填)
: + - * / ~ 数字
例如: offset=”*10; +5.123; ~1” 表示乘以10 再加5.123 结果保留1位小数

4.8 name
: 字符串:上报名称

文档更新时间: 2025-01-10 17:35   作者:CGL