APRUS Lua-Modbus配置说明

概述

文档说明

      APRUS Lua-Modbus协议相关配置说明,APRUS 的Lua包含APRUS.luaconfig.lua两个文件。
      APRUS 通过Modbus协议与支持Modbus协议的设备进行通信,然后配置config.lua即可采集需要的数据。
     如需修改aprus.lua文件的内容时,请咨询相关的技术人员,随意修改会导致适配器不能正常工作,所以此文档主要介绍config.lua内容。

      此文档目的是为了让相关人员清楚如何通过对脚本的配置实现对应协议的数据采集,详细介绍config.lua的相关内容,如遇到新的需求或者处理不当的地方联系相关负责人。

适用对象

本文档的目的读者是所有通过适配器使用Modbus协议进行数据采集的人员。

术语和缩略词

序号 术语名称 其它名称 术语说明
1 APRUS Advanced Programmable Remote Utility Server 高级可编程远程数据适配终端

参考资料

  1. 《HslCommunicationDemo》
  2. 《昆仑通态HMI屏编程软件》

背景介绍

  1. APRUS 在数据获取时,分为两部分,数据采集(CollrReg)和数据上报(CollpReg),为什么要分开呢,主要是由于提升采集效率而设定,数据采集过程中尽可能的把能连续采集的一次采集回来。
  2. 数据上报是将已经采集的数据进行必要的数据处理,然后上报到云端。

配置说明

1 config.lua配置

1.1 适配器属性信息—APRUSX字段

   config.luaAPRUSX表的字段由5大部分组成,ipmode、inet_addr、netmask、Luaver、devinfo分别来介绍这5大部分的功能:

示例:


APRUSX={
    ipmode="Manual",    
    inet_addr="192.168.1.214",
    netmask="255.255.255.0",
    Luaver="MAX.Lua.V010100.R",
    devinfo="ModbusDev",
},

说明:

序号 模块 说明 备注
1 ipmode IP获取方式 默认Manual,不更改
2 Inet_addr APRUS IP 与对接的设备保持相同网段,且同网段内IP不能重复
1 netmask 子网掩码 默认255.255.255.0,一般不修改,除非相同网段内没有足够的IP
4 Luaver 脚本版本号 每次变更脚本都需更新版本,一边区分不同版本的区别;详见图1-1
5 devinfo 设备类型 对接的设备类型
图1-1 Luaver:脚本版本**


      Luaver = "MAPRUS.L.V220.R"
      Luaver设置当前脚本的版本号,每次更新都需要更改并向上增加版本号;
      版本号在增加过程中,只需要修改主/子/阶段版本号即可;
      主/子/阶段版本号不能为0,一般情况下如果只更新config.Lua的配置无需更新主/子版本号;
只要修改阶段版本号就行,版本号一定是要向上叠加,这样才能保证之前的版本有备份,才能自动升级。

1.2 Modbus:设备信息— Device字段

APRUS适配器支持Modbus-RTU和Modbus-TCP协议,根据协议不同有如下两种设备信息配置:

(1) Modbus-RTU
Device={
    type="rtu", -- rtu/tcp
    rate=115200,
    dataBit=8,
    stopBit=1,
    parity="None", -- None/Odd/Even
},
(2) Modbus-TCP
Device={
    type="tcp", -- rtu/tcp
    ip="192.168.1.157",
    port="502",
},

Modbus设备信息:

序号 模块 说明
1 type 字符串; “rtu” / “tcp” Modbus协议类型
2 rate 值;115200/9600/4800等均可用 波特率
3 dataBit 值;5/6/7/8 数据位
4 stopBit 值; 1/2 停止位
5 parity 字符串;”None”/“Odd”/“Even” 校验位
6 ip 字符串; “192.168.1.157” Modbus设备的IP地址
7 port 字符串; “502”/“1024” Modbus设备的端口

1.3 采集、上报结点— Node节点信息

node={
    collect={
        {ID=1, reg="1", addr=0, cnt=50},
    },
    variable={
        {ID=1,reg="1",addr=1,dtype="byte",dBit=0,pMode={1,8},dStyle={"L1_1_1_0"},dOffset={{"*",2}, {"+", 10}},dExt={}},
    },
}
(1) collect:采集结点配置
参数 类型;值 说明
ID 值;ID = 1 设备ID
reg 值;1/2/3/4/5/6/15/16 寄存器功能码
addr 值; 采集地址起始
cnt 值; 采集长度
(2) variable:上报结点配置

variable设置上报配置,上报配置时需要把采集到的数据处理成最终实际使用的数据;
包括数据处理逻辑,上报逻辑,数据分类等等;
由于采集时都是按照双字(short)采集,所以在数据处理的时候要需要注意。

注意:上报配置设置的地址,一定是在采集配置里面有的,否则数据不准确。

参数 类型;值 说明
ID 值;ID = 1 设备ID
reg 字符串;reg=1 Modbus功能码,可选值为1/2/3/4/5/6/15/16
addr 字符串;addr=0 上报地址,需要上报哪个地址设置那个地址
dtype 字符串;dtype=”short” 变量数据类型,可选值为bit, byte, short/ushort, int/uint, float
pMode 值;pMode={1,5} 采集上报方式;
具体含义详见- 附件一:采集上报方式—pMode字段
dOffset 字典;dOffset={{“+”,10},{“*”,5}} 数据偏移,在位处理时通常不需要
具体含义详见 附件二:采集上报数据偏移—dOffset字段
dBit 值;dBit=5 位处理,位标识
具体含义详见 附件三:采集上报位处理—dBit字段
dExt 字典;dExt={0,{0,0},{0,0}} (选填) 改变上报条件限制
具体含义详见 附件四:采集上报改变上报条件限制—dExt字段
dStyle 字符串;dStyle={“L1_3_0_0”} (选填)自行设置
len 值;len=5 字符串长度 ;当dtype为bytes时有效
format 字符串;format = “ABCD” 字节序配置
具体含义详见 附件五:采集上报字节序配置–dExt字段

1.4 config.lua示例脚本(modbus协议)

1.4.1 config.lua示例脚本(RTU基于RS485采集)
return 
{
    AprusX={
        ipmode="none",                    --auto/manual/none
        inet_addr="192.168.1.234",
        netmask="255.255.255.0",
        luaver="V00.R",
        devinfo="ModbusRtuDev",        
    },

    Modbus={
        device={
            type="rtu",        --"rtu"/"ascii"
            rate=9600,
            databit=8,
            stopbit=1,
            parity="None",        -- None/Odd/Even
        },
        node={
            collect={
                {ID=1, reg="1", addr=0, cnt=50},
                {ID=1, reg="2", addr=0, cnt=50},
                {ID=1, reg="3", addr=0, cnt=50},
                {ID=1, reg="4", addr=0, cnt=50},
            },
            variable={
                {ID=1,reg="1",addr=0,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_1_0"}},
                {ID=1,reg="1",addr=1,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_1_1"}},
                {ID=1,reg="1",addr=2,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_1_2"}},
                {ID=1,reg="1",addr=3,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_1_3"}},
                {ID=1,reg="1",addr=4,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_1_4"}},
                {ID=1,reg="1",addr=5,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_1_5"}},
                {ID=1,reg="1",addr=6,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_1_6"}},
                {ID=1,reg="1",addr=7,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_1_7"}},
                {ID=1,reg="1",addr=8,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_1_8"}},
                {ID=1,reg="1",addr=9,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_1_9"}},
                {ID=1,reg="1",addr=10,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_1_10"}},
                {ID=1,reg="1",addr=11,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_1_11"}},
                {ID=1,reg="1",addr=12,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_1_12"}},

                {ID=1,reg="1",addr=12,dtype="bit",dBit=0,pMode={2,0},dStyle={"L1_1_12_C"}},

                {ID=1,reg="2",addr=0,dtype="bit",dBit=0,pMode={1,6},dStyle={"L1_2_0"}},
                {ID=1,reg="2",addr=1,dtype="bit",dBit=0,pMode={1,6},dStyle={"L1_2_1"}},
                {ID=1,reg="2",addr=2,dtype="bit",dBit=0,pMode={1,6},dStyle={"L1_2_2"}},
                {ID=1,reg="2",addr=3,dtype="bit",dBit=0,pMode={1,6},dStyle={"L1_2_3"}},
                {ID=1,reg="2",addr=4,dtype="bit",dBit=0,pMode={1,6},dStyle={"L1_2_4"}},
                {ID=1,reg="2",addr=5,dtype="bit",dBit=0,pMode={1,6},dStyle={"L1_2_5"}},
                {ID=1,reg="2",addr=6,dtype="bit",dBit=0,pMode={1,6},dStyle={"L1_2_6"}},
                {ID=1,reg="2",addr=7,dtype="bit",dBit=0,pMode={1,6},dStyle={"L1_2_7"}},
                {ID=1,reg="2",addr=8,dtype="bit",dBit=0,pMode={1,6},dStyle={"L1_2_8"}},
                {ID=1,reg="2",addr=9,dtype="bit",dBit=0,pMode={1,6},dStyle={"L1_2_9"}},
                {ID=1,reg="2",addr=10,dtype="bit",dBit=0,pMode={1,6},dStyle={"L1_2_10"}},
                {ID=1,reg="2",addr=11,dtype="bit",dBit=0,pMode={1,6},dStyle={"L1_2_11"}},
                {ID=1,reg="2",addr=12,dtype="bit",dBit=0,pMode={1,6},dStyle={"L1_2_12"}},

                {ID=1,reg="2",addr=12,dtype="bit",dBit=0,pMode={2,0},dStyle={"L1_2_12_C"}},


                {ID=1,reg="3",addr=0,dtype="bit",dBit=0,pMode={1,7},dStyle={"L1_3_0_0"}},
                {ID=1,reg="3",addr=0,dtype="bit",dBit=1,pMode={1,7},dStyle={"L1_3_0_1"}},
                {ID=1,reg="3",addr=0,dtype="bit",dBit=2,pMode={1,7},dStyle={"L1_3_0_2"}},
                {ID=1,reg="3",addr=0,dtype="bit",dBit=3,pMode={1,7},dStyle={"L1_3_0_3"}},
                {ID=1,reg="3",addr=0,dtype="bit",dBit=4,pMode={1,7},dStyle={"L1_3_0_4"}},
                {ID=1,reg="3",addr=0,dtype="bit",dBit=5,pMode={1,7},dStyle={"L1_3_0_5"}},
                {ID=1,reg="3",addr=0,dtype="bit",dBit=6,pMode={1,7},dStyle={"L1_3_0_6"}},
                {ID=1,reg="3",addr=0,dtype="bit",dBit=7,pMode={1,7},dStyle={"L1_3_0_7"}},
                {ID=1,reg="3",addr=0,dtype="bit",dBit=8,pMode={1,7},dStyle={"L1_3_0_8"}},
                {ID=1,reg="3",addr=0,dtype="bit",dBit=9,pMode={1,7},dStyle={"L1_3_0_9"}},
                {ID=1,reg="3",addr=0,dtype="bit",dBit=10,pMode={1,7},dStyle={"L1_3_0_10"}},
                {ID=1,reg="3",addr=0,dtype="bit",dBit=11,pMode={1,7},dStyle={"L1_3_0_11"}},
                {ID=1,reg="3",addr=0,dtype="bit",dBit=12,pMode={1,7},dStyle={"L1_3_0_12"}},
                {ID=1,reg="3",addr=0,dtype="bit",dBit=13,pMode={1,7},dStyle={"L1_3_0_13"}},
                {ID=1,reg="3",addr=0,dtype="bit",dBit=14,pMode={1,7},dStyle={"L1_3_0_14"}},
                {ID=1,reg="3",addr=0,dtype="bit",dBit=15,pMode={1,7},dStyle={"L1_3_0_15"}},

                {ID=1,reg="3",addr=0,dtype="bit",dBit=15,pMode={2,0},dStyle={"L1_3_0_15_C"}},

                {ID=1,reg="3",addr=1,dtype="byte", dBit=0, pMode={1,8},dStyle={"L1_3_1_0"}},
                {ID=1,reg="3",addr=1,dtype="byte", dBit=1, pMode={1,8},dStyle={"L1_3_1_1"}},
                {ID=1,reg="3",addr=1,dtype="byte", dBit=1, pMode={2,0},dStyle={"L1_3_1_1_C"}},
                {ID=1,reg="3",addr=1,dtype="byte", pMode={2,0},dStyle={"L1_3_1_C"}},
                {ID=1,reg="3",addr=1,dtype="byte", pMode={1,8},dStyle={"L1_3_1_O1"}, dOffset={{"+",10}}},
                {ID=1,reg="3",addr=1,dtype="byte", pMode={1,8},dStyle={"L1_3_1_O2"}, dOffset={{"/",3}, {"+", 10}}},

                {ID=1,reg="3",addr=2,dtype="ubyte", pMode={1,8},dStyle={"L1_3_2"}},
                {ID=1,reg="3",addr=2,dtype="ubyte", pMode={2,0},dStyle={"L1_3_2_C"}},                
                {ID=1,reg="3",addr=2,dtype="ubyte", pMode={1,8},dStyle={"L1_3_2_O1"}, dOffset={{"+",10}}},
                {ID=1,reg="3",addr=2,dtype="ubyte", pMode={1,8},dStyle={"L1_3_2_O2"}, dOffset={{"*",2.123}, {".", 1}}},

                {ID=1,reg="3",addr=3,dtype="short", pMode={1,8},dStyle={"L1_3_3"}},
                {ID=1,reg="3",addr=3,dtype="short", pMode={2,0},dStyle={"L1_3_3_C"}},                
                {ID=1,reg="3",addr=3,dtype="short", pMode={1,8},dStyle={"L1_3_3_O1"}, dOffset={{"+",10}}},
                {ID=1,reg="3",addr=3,dtype="short", pMode={1,8},dStyle={"L1_3_3_O2"}, dOffset={{"*",2}, {"+", 10}}},

                {ID=1,reg="3",addr=4,dtype="ushort", pMode={1,8},dStyle={"L1_3_4"}},
                {ID=1,reg="3",addr=4,dtype="ushort", pMode={2,0},dStyle={"L1_3_4_C"}},                
                {ID=1,reg="3",addr=4,dtype="ushort", pMode={1,8},dStyle={"L1_3_4_O1"}, dOffset={{"+",10}}},
                {ID=1,reg="3",addr=4,dtype="ushort", pMode={1,8},dStyle={"L1_3_4_O2"}, dOffset={{"*",2}, {"+", 10}}},

                {ID=1,reg="3",addr=5,dtype="int", pMode={1,8},dStyle={"L1_3_5"}},
                {ID=1,reg="3",addr=5,dtype="int", format="ABCD", pMode={1,8},dStyle={"L1_3_5_ABCD"}},                
                {ID=1,reg="3",addr=5,dtype="int", pMode={2,0},dStyle={"L1_3_5_C"}},
                {ID=1,reg="3",addr=5,dtype="int", pMode={1,8},dStyle={"L1_3_5_O1"}, dOffset={{"+",10}}},
                {ID=1,reg="3",addr=5,dtype="int", pMode={1,8},dStyle={"L1_3_5_O2"}, dOffset={{"*",2}, {"+", 10}}},

                {ID=1,reg="3",addr=7,dtype="uint", pMode={1,8},dStyle={"L1_3_7"}},
                {ID=1,reg="3",addr=7,dtype="uint", format="ABCD", pMode={1,8},dStyle={"L1_3_7_ABCD"}},                
                {ID=1,reg="3",addr=7,dtype="uint", pMode={2,0},dStyle={"L1_3_7_C"}},
                {ID=1,reg="3",addr=7,dtype="uint", pMode={1,8},dStyle={"L1_3_7_O1"}, dOffset={{"+",10}}},
                {ID=1,reg="3",addr=7,dtype="uint", pMode={1,8},dStyle={"L1_3_7_O2"}, dOffset={{"*",2}, {"+", 10}}},

                {ID=1,reg="3",addr=9,dtype="float", pMode={1,8},dStyle={"L1_3_9"}},
                {ID=1,reg="3",addr=9,dtype="float", format="ABCD", pMode={1,8},dStyle={"L1_3_9_ABCD"}},                
                {ID=1,reg="3",addr=9,dtype="float", pMode={2,0},dStyle={"L1_3_9_C"}},
                {ID=1,reg="3",addr=9,dtype="float", pMode={1,8},dStyle={"L1_3_9_O1"}, dOffset={{"+",10}}},
                {ID=1,reg="3",addr=9,dtype="float", pMode={1,8},dStyle={"L1_3_9_O2"}, dOffset={{"*",1.5}, {"+", 10}}},
                {ID=1,reg="3",addr=9,dtype="float", pMode={1,8},dStyle={"L1_3_9_O3"}, dOffset={{"*",1.125}, {".", 0}}},
                {ID=1,reg="3",addr=9,dtype="float", pMode={1,8},dStyle={"L1_3_9_O4"}, dOffset={{"*",1.125}, {".", 1}}},
                {ID=1,reg="3",addr=9,dtype="float", pMode={1,8},dStyle={"L1_3_9_O5"}, dOffset={{"*",1.125}, {".", 2}}},                
                {ID=1,reg="3",addr=9,dtype="float", pMode={1,8},dStyle={"L1_3_9_O6"}, dOffset={{"*",1.125}, {".", 3}}},
                {ID=1,reg="3",addr=9,dtype="float", pMode={1,8},dStyle={"L1_3_9_O7"}, dOffset={{".",3}}},

                {ID=1,reg="3",addr=11,dtype="bytes", len=20, pMode={1,8},dStyle={"L1_3_11"}},
                {ID=1,reg="3",addr=11,dtype="bytes", len=20, pMode={2,0},dStyle={"L1_3_11_C"}},                

                {ID=1,reg="4",addr=0,dtype="bit",dBit=0,pMode={1,9},dStyle={"L1_4_0_0"}},
                {ID=1,reg="4",addr=0,dtype="bit",dBit=1,pMode={1,9},dStyle={"L1_4_0_1"}},
                {ID=1,reg="4",addr=0,dtype="bit",dBit=2,pMode={1,9},dStyle={"L1_4_0_2"}},
                {ID=1,reg="4",addr=0,dtype="bit",dBit=3,pMode={1,9},dStyle={"L1_4_0_3"}},
                {ID=1,reg="4",addr=0,dtype="bit",dBit=4,pMode={1,9},dStyle={"L1_4_0_4"}},
                {ID=1,reg="4",addr=0,dtype="bit",dBit=5,pMode={1,9},dStyle={"L1_4_0_5"}},
                {ID=1,reg="4",addr=0,dtype="bit",dBit=6,pMode={1,9},dStyle={"L1_4_0_6"}},
                {ID=1,reg="4",addr=0,dtype="bit",dBit=7,pMode={1,9},dStyle={"L1_4_0_7"}},
                {ID=1,reg="4",addr=0,dtype="bit",dBit=8,pMode={1,9},dStyle={"L1_4_0_8"}},
                {ID=1,reg="4",addr=0,dtype="bit",dBit=9,pMode={1,9},dStyle={"L1_4_0_9"}},
                {ID=1,reg="4",addr=0,dtype="bit",dBit=10,pMode={1,9},dStyle={"L1_4_0_10"}},
                {ID=1,reg="4",addr=0,dtype="bit",dBit=11,pMode={1,9},dStyle={"L1_4_0_11"}},
                {ID=1,reg="4",addr=0,dtype="bit",dBit=12,pMode={1,9},dStyle={"L1_4_0_12"}},
                {ID=1,reg="4",addr=0,dtype="bit",dBit=13,pMode={1,9},dStyle={"L1_4_0_13"}},
                {ID=1,reg="4",addr=0,dtype="bit",dBit=14,pMode={1,9},dStyle={"L1_4_0_14"}},
                {ID=1,reg="4",addr=0,dtype="bit",dBit=15,pMode={1,9},dStyle={"L1_4_0_15"}},

                {ID=1,reg="4",addr=0,dtype="bit",dBit=15,pMode={2,0},dStyle={"L1_4_0_15"}},

                {ID=1,reg="4",addr=1,dtype="byte", pMode={1,8},dStyle={"L1_4_1"}},
                {ID=1,reg="4",addr=1,dtype="byte", pMode={2,0},dStyle={"L1_4_1_C"}},
                {ID=1,reg="4",addr=1,dtype="byte", pMode={1,8},dStyle={"L1_4_1_O1"}, dOffset={{"+",10}}},
                {ID=1,reg="4",addr=1,dtype="byte", pMode={1,8},dStyle={"L1_4_1_O2"}, dOffset={{"*",2}, {"+", 10}}},

                {ID=1,reg="4",addr=2,dtype="ubyte", pMode={1,8},dStyle={"L1_4_2"}},
                {ID=1,reg="4",addr=2,dtype="ubyte", pMode={2,0},dStyle={"L1_4_2_C"}},                
                {ID=1,reg="4",addr=2,dtype="ubyte", pMode={1,8},dStyle={"L1_4_2_O1"}, dOffset={{"+",10}}},
                {ID=1,reg="4",addr=2,dtype="ubyte", pMode={1,8},dStyle={"L1_4_2_O2"}, dOffset={{"*",2}, {"+", 10}}},

                {ID=1,reg="4",addr=3,dtype="short", pMode={1,8},dStyle={"L1_4_3"}},
                {ID=1,reg="4",addr=3,dtype="short", pMode={2,0},dStyle={"L1_4_3_C"}},                
                {ID=1,reg="4",addr=3,dtype="short", pMode={1,8},dStyle={"L1_4_3_O1"}, dOffset={{"+",10}}},
                {ID=1,reg="4",addr=3,dtype="short", pMode={1,8},dStyle={"L1_4_3_O2"}, dOffset={{"*",2}, {"+", 10}}},

                {ID=1,reg="4",addr=4,dtype="ushort", pMode={1,8},dStyle={"L1_4_4"}},
                {ID=1,reg="4",addr=4,dtype="ushort", pMode={2,0},dStyle={"L1_4_4_C"}},                
                {ID=1,reg="4",addr=4,dtype="ushort", pMode={1,8},dStyle={"L1_4_4_O1"}, dOffset={{"+",10}}},
                {ID=1,reg="4",addr=4,dtype="ushort", pMode={1,8},dStyle={"L1_4_4_O2"}, dOffset={{"*",2}, {"+", 10}}},

                {ID=1,reg="4",addr=5,dtype="int", pMode={1,8},dStyle={"L1_4_5"}},
                {ID=1,reg="4",addr=5,dtype="int", format="ABCD", pMode={1,8},dStyle={"L1_4_5_ABCD"}},                
                {ID=1,reg="4",addr=5,dtype="int", pMode={2,0},dStyle={"L1_4_5_C"}},
                {ID=1,reg="4",addr=5,dtype="int", pMode={1,8},dStyle={"L1_4_5_O1"}, dOffset={{"+",10}}},
                {ID=1,reg="4",addr=5,dtype="int", pMode={1,8},dStyle={"L1_4_5_O2"}, dOffset={{"*",2}, {"+", 10}}},

                {ID=1,reg="4",addr=7,dtype="uint", pMode={1,8},dStyle={"L1_4_7"}},
                {ID=1,reg="4",addr=7,dtype="uint", format="ABCD", pMode={1,8},dStyle={"L1_3_7_ABCD"}},                
                {ID=1,reg="4",addr=7,dtype="uint", pMode={2,0},dStyle={"L1_4_7_C"}},
                {ID=1,reg="4",addr=7,dtype="uint", pMode={1,8},dStyle={"L1_4_7_O1"}, dOffset={{"+",10}}},
                {ID=1,reg="4",addr=7,dtype="uint", pMode={1,8},dStyle={"L1_4_7_O2"}, dOffset={{"*",2}, {"+", 10}}},

                {ID=1,reg="4",addr=9,dtype="float", pMode={1,8},dStyle={"L1_4_9"}},
                {ID=1,reg="4",addr=9,dtype="float", format="ABCD", pMode={1,8},dStyle={"L1_4_9_ABCD"}},                
                {ID=1,reg="4",addr=9,dtype="float", pMode={2,0},dStyle={"L1_4_9_C"}},
                {ID=1,reg="4",addr=9,dtype="float", pMode={1,8},dStyle={"L1_4_9_O1"}, dOffset={{"+",10}}},
                {ID=1,reg="4",addr=9,dtype="float", pMode={1,8},dStyle={"L1_4_9_O2"}, dOffset={{"*",1.5}, {"+", 10}}},
                {ID=1,reg="4",addr=9,dtype="float", pMode={1,8},dStyle={"L1_4_9_O3"}, dOffset={{"*",1.125}, {".", 0}}},
                {ID=1,reg="4",addr=9,dtype="float", pMode={1,8},dStyle={"L1_4_9_O4"}, dOffset={{"*",1.125}, {".", 1}}},
                {ID=1,reg="4",addr=9,dtype="float", pMode={1,8},dStyle={"L1_4_9_O5"}, dOffset={{"*",1.125}, {".", 2}}},                
                {ID=1,reg="4",addr=9,dtype="float", pMode={1,8},dStyle={"L1_4_9_O6"}, dOffset={{"*",1.125}, {".", 3}}},

                {ID=1,reg="4",addr=11,dtype="bytes", len=20, pMode={1,8},dStyle={"L1_4_11"}},
                {ID=1,reg="4",addr=11,dtype="bytes", len=20, pMode={2,0},dStyle={"L1_4_11_C"}},


                {ID=1,reg="5",addr=0,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_5_0"}},
                {ID=1,reg="5",addr=1,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_5_1"}},
                {ID=1,reg="5",addr=2,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_5_2"}},
                {ID=1,reg="5",addr=3,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_5_3"}},
                {ID=1,reg="5",addr=4,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_5_4"}},
                {ID=1,reg="5",addr=5,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_5_5"}},
                {ID=1,reg="5",addr=6,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_5_6"}},
                {ID=1,reg="5",addr=7,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_5_7"}},
                {ID=1,reg="5",addr=8,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_5_8"}},
                {ID=1,reg="5",addr=9,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_5_9"}},
                {ID=1,reg="5",addr=10,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_5_10"}},
                {ID=1,reg="5",addr=11,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_5_11"}},
                {ID=1,reg="5",addr=12,dtype="bit",dBit=0,pMode={1,5},dStyle={"L1_5_12"}},                

                {ID=1,reg="6",addr=0,dtype="byte", pMode={2,0},dStyle={"L1_6_0"}},
                {ID=1,reg="6",addr=1,dtype="short", pMode={2,0},dStyle={"L1_6_1"}},

                {ID=1,reg="16",addr=0,dtype="byte", pMode={2,0},dStyle={"L1_16_0"}},
                {ID=1,reg="16",addr=0,dtype="byte", pMode={2,0},dStyle={"L1_16_0_O1"}, dOffset={{"+", 5}}},                

                {ID=1,reg="16",addr=1,dtype="short", pMode={2,0},dStyle={"L1_16_1"}},
                {ID=1,reg="16",addr=1,dtype="short", pMode={2,0},dStyle={"L1_16_1_O1"}, dOffset={{"+", 5}}},                

                {ID=1,reg="16",addr=2,dtype="int", pMode={2,0},dStyle={"L1_16_2"}},
                {ID=1,reg="16",addr=2,dtype="int", pMode={2,0},dStyle={"L1_16_2_O1"}, dOffset={{"+", 5}}},                

                {ID=1,reg="16",addr=9,dtype="float", pMode={2,0},dStyle={"L1_16_9"}},
                {ID=1,reg="16",addr=9,dtype="float", pMode={2,0},dStyle={"L1_16_9_O1"}, dOffset={{"+", 5}}},                                
            },

        },
    },
}
1.4.2 config.lua示例脚本(TCP基于网口、WIFI采集)
return
{
    AprusX = {
        ipmode = "manual", --auto/manual/none
        inet_addr = "192.168.1.234",    --需要额外注意,同一局域网内IP地址切忌一样,导致冲突进而采集数据包紊乱
        netmask = "255.255.255.0",
        luaver = "V00.R",
        devinfo = "ModbusTcpDev",
    },

    Modbus = {
        device = {
            type = "tcp",
            ip = "192.168.1.157",
            port = "502",
            ifname = "eth0",
        },
        node = {
            collect = {
                { ID = 1, reg = "1", addr = 0, cnt = 50 },
                { ID = 1, reg = "2", addr = 0, cnt = 50 },
                { ID = 1, reg = "3", addr = 0, cnt = 50 },
                { ID = 1, reg = "4", addr = 0, cnt = 50 },
            },
            variable = {
                { ID = 1, reg = "1", addr = 0, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_1_0" } },
                { ID = 1, reg = "1", addr = 1, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_1_1" } },
                { ID = 1, reg = "1", addr = 2, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_1_2" } },
                { ID = 1, reg = "1", addr = 3, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_1_3" } },
                { ID = 1, reg = "1", addr = 4, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_1_4" } },
                { ID = 1, reg = "1", addr = 5, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_1_5" } },
                { ID = 1, reg = "1", addr = 6, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_1_6" } },
                { ID = 1, reg = "1", addr = 7, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_1_7" } },
                { ID = 1, reg = "1", addr = 8, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_1_8" } },
                { ID = 1, reg = "1", addr = 9, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_1_9" } },
                { ID = 1, reg = "1", addr = 10, dtype = "bit", dBit = 0,  pMode = { 1, 5 },      dStyle = { "L1_1_10" } },
                { ID = 1, reg = "1", addr = 11, dtype = "bit", dBit = 0,  pMode = { 1, 5 },      dStyle = { "L1_1_11" } },
                { ID = 1, reg = "1", addr = 12, dtype = "bit", dBit = 0,  pMode = { 1, 5 },      dStyle = { "L1_1_12" } },

                { ID = 1, reg = "1", addr = 12, dtype = "bit", dBit = 0,  pMode = { 2, 0 },      dStyle = { "L1_1_12_C" } },

                { ID = 1, reg = "2", addr = 0, dtype = "bit", dBit = 0,   pMode = { 1, 6 },      dStyle = { "L1_2_0" } },
                { ID = 1, reg = "2", addr = 1, dtype = "bit", dBit = 0,   pMode = { 1, 6 },      dStyle = { "L1_2_1" } },
                { ID = 1, reg = "2", addr = 2, dtype = "bit", dBit = 0,   pMode = { 1, 6 },      dStyle = { "L1_2_2" } },
                { ID = 1, reg = "2", addr = 3, dtype = "bit", dBit = 0,   pMode = { 1, 6 },      dStyle = { "L1_2_3" } },
                { ID = 1, reg = "2", addr = 4, dtype = "bit", dBit = 0,   pMode = { 1, 6 },      dStyle = { "L1_2_4" } },
                { ID = 1, reg = "2", addr = 5, dtype = "bit", dBit = 0,   pMode = { 1, 6 },      dStyle = { "L1_2_5" } },
                { ID = 1, reg = "2", addr = 6, dtype = "bit", dBit = 0,   pMode = { 1, 6 },      dStyle = { "L1_2_6" } },
                { ID = 1, reg = "2", addr = 7, dtype = "bit", dBit = 0,   pMode = { 1, 6 },      dStyle = { "L1_2_7" } },
                { ID = 1, reg = "2", addr = 8, dtype = "bit", dBit = 0,   pMode = { 1, 6 },      dStyle = { "L1_2_8" } },
                { ID = 1, reg = "2", addr = 9, dtype = "bit", dBit = 0,   pMode = { 1, 6 },      dStyle = { "L1_2_9" } },
                { ID = 1, reg = "2", addr = 10, dtype = "bit", dBit = 0,  pMode = { 1, 6 },      dStyle = { "L1_2_10" } },
                { ID = 1, reg = "2", addr = 11, dtype = "bit", dBit = 0,  pMode = { 1, 6 },      dStyle = { "L1_2_11" } },
                { ID = 1, reg = "2", addr = 12, dtype = "bit", dBit = 0,  pMode = { 1, 6 },      dStyle = { "L1_2_12" } },

                { ID = 1, reg = "2", addr = 12, dtype = "bit", dBit = 0,  pMode = { 2, 0 },      dStyle = { "L1_2_12_C" } },


                { ID = 1, reg = "3", addr = 0, dtype = "bit", dBit = 0,   pMode = { 1, 7 },      dStyle = { "L1_3_0_0" } },
                { ID = 1, reg = "3", addr = 0, dtype = "bit", dBit = 1,   pMode = { 1, 7 },      dStyle = { "L1_3_0_1" } },
                { ID = 1, reg = "3", addr = 0, dtype = "bit", dBit = 2,   pMode = { 1, 7 },      dStyle = { "L1_3_0_2" } },
                { ID = 1, reg = "3", addr = 0, dtype = "bit", dBit = 3,   pMode = { 1, 7 },      dStyle = { "L1_3_0_3" } },
                { ID = 1, reg = "3", addr = 0, dtype = "bit", dBit = 4,   pMode = { 1, 7 },      dStyle = { "L1_3_0_4" } },
                { ID = 1, reg = "3", addr = 0, dtype = "bit", dBit = 5,   pMode = { 1, 7 },      dStyle = { "L1_3_0_5" } },
                { ID = 1, reg = "3", addr = 0, dtype = "bit", dBit = 6,   pMode = { 1, 7 },      dStyle = { "L1_3_0_6" } },
                { ID = 1, reg = "3", addr = 0, dtype = "bit", dBit = 7,   pMode = { 1, 7 },      dStyle = { "L1_3_0_7" } },
                { ID = 1, reg = "3", addr = 0, dtype = "bit", dBit = 8,   pMode = { 1, 7 },      dStyle = { "L1_3_0_8" } },
                { ID = 1, reg = "3", addr = 0, dtype = "bit", dBit = 9,   pMode = { 1, 7 },      dStyle = { "L1_3_0_9" } },
                { ID = 1, reg = "3", addr = 0, dtype = "bit", dBit = 10,  pMode = { 1, 7 },      dStyle = { "L1_3_0_10" } },
                { ID = 1, reg = "3", addr = 0, dtype = "bit", dBit = 11,  pMode = { 1, 7 },      dStyle = { "L1_3_0_11" } },
                { ID = 1, reg = "3", addr = 0, dtype = "bit", dBit = 12,  pMode = { 1, 7 },      dStyle = { "L1_3_0_12" } },
                { ID = 1, reg = "3", addr = 0, dtype = "bit", dBit = 13,  pMode = { 1, 7 },      dStyle = { "L1_3_0_13" } },
                { ID = 1, reg = "3", addr = 0, dtype = "bit", dBit = 14,  pMode = { 1, 7 },      dStyle = { "L1_3_0_14" } },
                { ID = 1, reg = "3", addr = 0, dtype = "bit", dBit = 15,  pMode = { 1, 7 },      dStyle = { "L1_3_0_15" } },

                { ID = 1, reg = "3", addr = 0, dtype = "bit", dBit = 15,  pMode = { 2, 0 },      dStyle = { "L1_3_0_15_C" } },

                { ID = 1, reg = "3", addr = 1, dtype = "byte", dBit = 0,  pMode = { 1, 8 },      dStyle = { "L1_3_1_0" } },
                { ID = 1, reg = "3", addr = 1, dtype = "byte", dBit = 1,  pMode = { 1, 8 },      dStyle = { "L1_3_1_1" } },
                { ID = 1, reg = "3", addr = 1, dtype = "byte", dBit = 1,  pMode = { 2, 0 },      dStyle = { "L1_3_1_1_C" } },
                { ID = 1, reg = "3", addr = 1, dtype = "byte", pMode = { 2, 0 }, dStyle = { "L1_3_1_C" } },
                { ID = 1, reg = "3", addr = 1, dtype = "byte", pMode = { 1, 8 }, dStyle = { "L1_3_1_O1" }, dOffset = { { "+", 10 } } },
                { ID = 1, reg = "3", addr = 1, dtype = "byte", pMode = { 1, 8 }, dStyle = { "L1_3_1_O2" }, dOffset = { { "/", 3 }, { "+", 10 } } },

                { ID = 1, reg = "3", addr = 2, dtype = "ubyte", pMode = { 1, 8 }, dStyle = { "L1_3_2" } },
                { ID = 1, reg = "3", addr = 2, dtype = "ubyte", pMode = { 2, 0 }, dStyle = { "L1_3_2_C" } },
                { ID = 1, reg = "3", addr = 2, dtype = "ubyte", pMode = { 1, 8 }, dStyle = { "L1_3_2_O1" }, dOffset = { { "+", 10 } } },
                { ID = 1, reg = "3", addr = 2, dtype = "ubyte", pMode = { 1, 8 }, dStyle = { "L1_3_2_O2" }, dOffset = { { "*", 2.123 }, { ".", 1 } } },

                { ID = 1, reg = "3", addr = 3, dtype = "short", pMode = { 1, 8 }, dStyle = { "L1_3_3" } },
                { ID = 1, reg = "3", addr = 3, dtype = "short", pMode = { 2, 0 }, dStyle = { "L1_3_3_C" } },
                { ID = 1, reg = "3", addr = 3, dtype = "short", pMode = { 1, 8 }, dStyle = { "L1_3_3_O1" }, dOffset = { { "+", 10 } } },
                { ID = 1, reg = "3", addr = 3, dtype = "short", pMode = { 1, 8 }, dStyle = { "L1_3_3_O2" }, dOffset = { { "*", 2 }, { "+", 10 } } },

                { ID = 1, reg = "3", addr = 4, dtype = "ushort", pMode = { 1, 8 }, dStyle = { "L1_3_4" } },
                { ID = 1, reg = "3", addr = 4, dtype = "ushort", pMode = { 2, 0 }, dStyle = { "L1_3_4_C" } },
                { ID = 1, reg = "3", addr = 4, dtype = "ushort", pMode = { 1, 8 }, dStyle = { "L1_3_4_O1" }, dOffset = { { "+", 10 } } },
                { ID = 1, reg = "3", addr = 4, dtype = "ushort", pMode = { 1, 8 }, dStyle = { "L1_3_4_O2" }, dOffset = { { "*", 2 }, { "+", 10 } } },

                { ID = 1, reg = "3", addr = 5, dtype = "int", pMode = { 1, 8 }, dStyle = { "L1_3_5" } },
                { ID = 1, reg = "3", addr = 5, dtype = "int", format = "ABCD", pMode = { 1, 8 }, dStyle = { "L1_3_5_ABCD" } },
                { ID = 1, reg = "3", addr = 5, dtype = "int", pMode = { 2, 0 }, dStyle = { "L1_3_5_C" } },
                { ID = 1, reg = "3", addr = 5, dtype = "int", pMode = { 1, 8 }, dStyle = { "L1_3_5_O1" }, dOffset = { { "+", 10 } } },
                { ID = 1, reg = "3", addr = 5, dtype = "int", pMode = { 1, 8 }, dStyle = { "L1_3_5_O2" }, dOffset = { { "*", 2 }, { "+", 10 } } },

                { ID = 1, reg = "3", addr = 7, dtype = "uint", pMode = { 1, 8 }, dStyle = { "L1_3_7" } },
                { ID = 1, reg = "3", addr = 7, dtype = "uint", format = "ABCD", pMode = { 1, 8 }, dStyle = { "L1_3_7_ABCD" } },
                { ID = 1, reg = "3", addr = 7, dtype = "uint", pMode = { 2, 0 }, dStyle = { "L1_3_7_C" } },
                { ID = 1, reg = "3", addr = 7, dtype = "uint", pMode = { 1, 8 }, dStyle = { "L1_3_7_O1" }, dOffset = { { "+", 10 } } },
                { ID = 1, reg = "3", addr = 7, dtype = "uint", pMode = { 1, 8 }, dStyle = { "L1_3_7_O2" }, dOffset = { { "*", 2 }, { "+", 10 } } },

                { ID = 1, reg = "3", addr = 9, dtype = "float", pMode = { 1, 8 }, dStyle = { "L1_3_9" } },
                { ID = 1, reg = "3", addr = 9, dtype = "float", format = "ABCD", pMode = { 1, 8 }, dStyle = { "L1_3_9_ABCD" } },
                { ID = 1, reg = "3", addr = 9, dtype = "float", pMode = { 2, 0 }, dStyle = { "L1_3_9_C" } },
                { ID = 1, reg = "3", addr = 9, dtype = "float", pMode = { 1, 8 }, dStyle = { "L1_3_9_O1" }, dOffset = { { "+", 10 } } },
                { ID = 1, reg = "3", addr = 9, dtype = "float", pMode = { 1, 8 }, dStyle = { "L1_3_9_O2" }, dOffset = { { "*", 1.5 }, { "+", 10 } } },
                { ID = 1, reg = "3", addr = 9, dtype = "float", pMode = { 1, 8 }, dStyle = { "L1_3_9_O3" }, dOffset = { { "*", 1.125 }, { ".", 0 } } },
                { ID = 1, reg = "3", addr = 9, dtype = "float", pMode = { 1, 8 }, dStyle = { "L1_3_9_O4" }, dOffset = { { "*", 1.125 }, { ".", 1 } } },
                { ID = 1, reg = "3", addr = 9, dtype = "float", pMode = { 1, 8 }, dStyle = { "L1_3_9_O5" }, dOffset = { { "*", 1.125 }, { ".", 2 } } },
                { ID = 1, reg = "3", addr = 9, dtype = "float", pMode = { 1, 8 }, dStyle = { "L1_3_9_O6" }, dOffset = { { "*", 1.125 }, { ".", 3 } } },
                { ID = 1, reg = "3", addr = 9, dtype = "float", pMode = { 1, 8 }, dStyle = { "L1_3_9_O7" }, dOffset = { { ".", 3 } } },

                { ID = 1, reg = "3", addr = 11, dtype = "bytes", len = 20, pMode = { 1, 8 },     dStyle = { "L1_3_11" } },
                { ID = 1, reg = "3", addr = 11, dtype = "bytes", len = 20, pMode = { 2, 0 },     dStyle = { "L1_3_11_C" } },

                { ID = 1, reg = "4", addr = 0, dtype = "bit", dBit = 0,   pMode = { 1, 9 },      dStyle = { "L1_4_0_0" } },
                { ID = 1, reg = "4", addr = 0, dtype = "bit", dBit = 1,   pMode = { 1, 9 },      dStyle = { "L1_4_0_1" } },
                { ID = 1, reg = "4", addr = 0, dtype = "bit", dBit = 2,   pMode = { 1, 9 },      dStyle = { "L1_4_0_2" } },
                { ID = 1, reg = "4", addr = 0, dtype = "bit", dBit = 3,   pMode = { 1, 9 },      dStyle = { "L1_4_0_3" } },
                { ID = 1, reg = "4", addr = 0, dtype = "bit", dBit = 4,   pMode = { 1, 9 },      dStyle = { "L1_4_0_4" } },
                { ID = 1, reg = "4", addr = 0, dtype = "bit", dBit = 5,   pMode = { 1, 9 },      dStyle = { "L1_4_0_5" } },
                { ID = 1, reg = "4", addr = 0, dtype = "bit", dBit = 6,   pMode = { 1, 9 },      dStyle = { "L1_4_0_6" } },
                { ID = 1, reg = "4", addr = 0, dtype = "bit", dBit = 7,   pMode = { 1, 9 },      dStyle = { "L1_4_0_7" } },
                { ID = 1, reg = "4", addr = 0, dtype = "bit", dBit = 8,   pMode = { 1, 9 },      dStyle = { "L1_4_0_8" } },
                { ID = 1, reg = "4", addr = 0, dtype = "bit", dBit = 9,   pMode = { 1, 9 },      dStyle = { "L1_4_0_9" } },
                { ID = 1, reg = "4", addr = 0, dtype = "bit", dBit = 10,  pMode = { 1, 9 },      dStyle = { "L1_4_0_10" } },
                { ID = 1, reg = "4", addr = 0, dtype = "bit", dBit = 11,  pMode = { 1, 9 },      dStyle = { "L1_4_0_11" } },
                { ID = 1, reg = "4", addr = 0, dtype = "bit", dBit = 12,  pMode = { 1, 9 },      dStyle = { "L1_4_0_12" } },
                { ID = 1, reg = "4", addr = 0, dtype = "bit", dBit = 13,  pMode = { 1, 9 },      dStyle = { "L1_4_0_13" } },
                { ID = 1, reg = "4", addr = 0, dtype = "bit", dBit = 14,  pMode = { 1, 9 },      dStyle = { "L1_4_0_14" } },
                { ID = 1, reg = "4", addr = 0, dtype = "bit", dBit = 15,  pMode = { 1, 9 },      dStyle = { "L1_4_0_15" } },

                { ID = 1, reg = "4", addr = 0, dtype = "bit", dBit = 15,  pMode = { 2, 0 },      dStyle = { "L1_4_0_15" } },

                { ID = 1, reg = "4", addr = 1, dtype = "byte", pMode = { 1, 8 }, dStyle = { "L1_4_1" } },
                { ID = 1, reg = "4", addr = 1, dtype = "byte", pMode = { 2, 0 }, dStyle = { "L1_4_1_C" } },
                { ID = 1, reg = "4", addr = 1, dtype = "byte", pMode = { 1, 8 }, dStyle = { "L1_4_1_O1" }, dOffset = { { "+", 10 } } },
                { ID = 1, reg = "4", addr = 1, dtype = "byte", pMode = { 1, 8 }, dStyle = { "L1_4_1_O2" }, dOffset = { { "*", 2 }, { "+", 10 } } },

                { ID = 1, reg = "4", addr = 2, dtype = "ubyte", pMode = { 1, 8 }, dStyle = { "L1_4_2" } },
                { ID = 1, reg = "4", addr = 2, dtype = "ubyte", pMode = { 2, 0 }, dStyle = { "L1_4_2_C" } },
                { ID = 1, reg = "4", addr = 2, dtype = "ubyte", pMode = { 1, 8 }, dStyle = { "L1_4_2_O1" }, dOffset = { { "+", 10 } } },
                { ID = 1, reg = "4", addr = 2, dtype = "ubyte", pMode = { 1, 8 }, dStyle = { "L1_4_2_O2" }, dOffset = { { "*", 2 }, { "+", 10 } } },

                { ID = 1, reg = "4", addr = 3, dtype = "short", pMode = { 1, 8 }, dStyle = { "L1_4_3" } },
                { ID = 1, reg = "4", addr = 3, dtype = "short", pMode = { 2, 0 }, dStyle = { "L1_4_3_C" } },
                { ID = 1, reg = "4", addr = 3, dtype = "short", pMode = { 1, 8 }, dStyle = { "L1_4_3_O1" }, dOffset = { { "+", 10 } } },
                { ID = 1, reg = "4", addr = 3, dtype = "short", pMode = { 1, 8 }, dStyle = { "L1_4_3_O2" }, dOffset = { { "*", 2 }, { "+", 10 } } },

                { ID = 1, reg = "4", addr = 4, dtype = "ushort", pMode = { 1, 8 }, dStyle = { "L1_4_4" } },
                { ID = 1, reg = "4", addr = 4, dtype = "ushort", pMode = { 2, 0 }, dStyle = { "L1_4_4_C" } },
                { ID = 1, reg = "4", addr = 4, dtype = "ushort", pMode = { 1, 8 }, dStyle = { "L1_4_4_O1" }, dOffset = { { "+", 10 } } },
                { ID = 1, reg = "4", addr = 4, dtype = "ushort", pMode = { 1, 8 }, dStyle = { "L1_4_4_O2" }, dOffset = { { "*", 2 }, { "+", 10 } } },

                { ID = 1, reg = "4", addr = 5, dtype = "int", pMode = { 1, 8 }, dStyle = { "L1_4_5" } },
                { ID = 1, reg = "4", addr = 5, dtype = "int", format = "ABCD", pMode = { 1, 8 }, dStyle = { "L1_4_5_ABCD" } },
                { ID = 1, reg = "4", addr = 5, dtype = "int", pMode = { 2, 0 }, dStyle = { "L1_4_5_C" } },
                { ID = 1, reg = "4", addr = 5, dtype = "int", pMode = { 1, 8 }, dStyle = { "L1_4_5_O1" }, dOffset = { { "+", 10 } } },
                { ID = 1, reg = "4", addr = 5, dtype = "int", pMode = { 1, 8 }, dStyle = { "L1_4_5_O2" }, dOffset = { { "*", 2 }, { "+", 10 } } },

                { ID = 1, reg = "4", addr = 7, dtype = "uint", pMode = { 1, 8 }, dStyle = { "L1_4_7" } },
                { ID = 1, reg = "4", addr = 7, dtype = "uint", format = "ABCD", pMode = { 1, 8 }, dStyle = { "L1_3_7_ABCD" } },
                { ID = 1, reg = "4", addr = 7, dtype = "uint", pMode = { 2, 0 }, dStyle = { "L1_4_7_C" } },
                { ID = 1, reg = "4", addr = 7, dtype = "uint", pMode = { 1, 8 }, dStyle = { "L1_4_7_O1" }, dOffset = { { "+", 10 } } },
                { ID = 1, reg = "4", addr = 7, dtype = "uint", pMode = { 1, 8 }, dStyle = { "L1_4_7_O2" }, dOffset = { { "*", 2 }, { "+", 10 } } },

                { ID = 1, reg = "4", addr = 9, dtype = "float", pMode = { 1, 8 }, dStyle = { "L1_4_9" } },
                { ID = 1, reg = "4", addr = 9, dtype = "float", format = "ABCD", pMode = { 1, 8 }, dStyle = { "L1_4_9_ABCD" } },
                { ID = 1, reg = "4", addr = 9, dtype = "float", pMode = { 2, 0 }, dStyle = { "L1_4_9_C" } },
                { ID = 1, reg = "4", addr = 9, dtype = "float", pMode = { 1, 8 }, dStyle = { "L1_4_9_O1" }, dOffset = { { "+", 10 } } },
                { ID = 1, reg = "4", addr = 9, dtype = "float", pMode = { 1, 8 }, dStyle = { "L1_4_9_O2" }, dOffset = { { "*", 1.5 }, { "+", 10 } } },
                { ID = 1, reg = "4", addr = 9, dtype = "float", pMode = { 1, 8 }, dStyle = { "L1_4_9_O3" }, dOffset = { { "*", 1.125 }, { ".", 0 } } },
                { ID = 1, reg = "4", addr = 9, dtype = "float", pMode = { 1, 8 }, dStyle = { "L1_4_9_O4" }, dOffset = { { "*", 1.125 }, { ".", 1 } } },
                { ID = 1, reg = "4", addr = 9, dtype = "float", pMode = { 1, 8 }, dStyle = { "L1_4_9_O5" }, dOffset = { { "*", 1.125 }, { ".", 2 } } },
                { ID = 1, reg = "4", addr = 9, dtype = "float", pMode = { 1, 8 }, dStyle = { "L1_4_9_O6" }, dOffset = { { "*", 1.125 }, { ".", 3 } } },

                { ID = 1, reg = "4", addr = 11, dtype = "bytes", len = 20, pMode = { 1, 8 },     dStyle = { "L1_4_11" } },
                { ID = 1, reg = "4", addr = 11, dtype = "bytes", len = 20, pMode = { 2, 0 },     dStyle = { "L1_4_11_C" } },


                { ID = 1, reg = "5", addr = 0, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_5_0" } },
                { ID = 1, reg = "5", addr = 1, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_5_1" } },
                { ID = 1, reg = "5", addr = 2, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_5_2" } },
                { ID = 1, reg = "5", addr = 3, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_5_3" } },
                { ID = 1, reg = "5", addr = 4, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_5_4" } },
                { ID = 1, reg = "5", addr = 5, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_5_5" } },
                { ID = 1, reg = "5", addr = 6, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_5_6" } },
                { ID = 1, reg = "5", addr = 7, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_5_7" } },
                { ID = 1, reg = "5", addr = 8, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_5_8" } },
                { ID = 1, reg = "5", addr = 9, dtype = "bit", dBit = 0,   pMode = { 1, 5 },      dStyle = { "L1_5_9" } },
                { ID = 1, reg = "5", addr = 10, dtype = "bit", dBit = 0,  pMode = { 1, 5 },      dStyle = { "L1_5_10" } },
                { ID = 1, reg = "5", addr = 11, dtype = "bit", dBit = 0,  pMode = { 1, 5 },      dStyle = { "L1_5_11" } },
                { ID = 1, reg = "5", addr = 12, dtype = "bit", dBit = 0,  pMode = { 1, 5 },      dStyle = { "L1_5_12" } },

                { ID = 1, reg = "6", addr = 0, dtype = "byte", pMode = { 2, 0 }, dStyle = { "L1_6_0" } },
                { ID = 1, reg = "6", addr = 1, dtype = "short", pMode = { 2, 0 }, dStyle = { "L1_6_1" } },

                { ID = 1, reg = "16", addr = 0, dtype = "byte", pMode = { 2, 0 }, dStyle = { "L1_16_0" } },
                { ID = 1, reg = "16", addr = 0, dtype = "byte", pMode = { 2, 0 }, dStyle = { "L1_16_0_O1" }, dOffset = { { "+", 5 } } },

                { ID = 1, reg = "16", addr = 1, dtype = "short", pMode = { 2, 0 }, dStyle = { "L1_16_1" } },
                { ID = 1, reg = "16", addr = 1, dtype = "short", pMode = { 2, 0 }, dStyle = { "L1_16_1_O1" }, dOffset = { { "+", 5 } } },

                { ID = 1, reg = "16", addr = 2, dtype = "int", pMode = { 2, 0 }, dStyle = { "L1_16_2" } },
                { ID = 1, reg = "16", addr = 2, dtype = "int", pMode = { 2, 0 }, dStyle = { "L1_16_2_O1" }, dOffset = { { "+", 5 } } },

                { ID = 1, reg = "16", addr = 9, dtype = "float", pMode = { 2, 0 }, dStyle = { "L1_16_9" } },
                { ID = 1, reg = "16", addr = 9, dtype = "float", pMode = { 2, 0 }, dStyle = { "L1_16_9_O1" }, dOffset = { { "+", 5 } } },
            },

        },
    },
}

2 aprus.lua配置

说明:function start() 为主流程入口函数
其他非modbus的实例运行请参考
一、内置的通用Lua API
二、数据中心 API
三、mqtt API
四、aprus.lua示例脚本及其解析
五、config.lua示例脚本及其解析
本文仅介绍modbus实例对象方法

2.1创建Modbus对象实例

功能 创建Modbus对象实例
接口描述 modbusobj = modbus.new(type)
type Modbus设备类型<字符串>,目前支持 “rtu” 设备和 “tcp” 设备

2.2 Modbus对象配置

1) Modbus TCP配置
功能 配置Modbus TCP连接
接口描述 modbus.config(modbusobj, Ip, Port, ifname)
modbusobj Modbus对象实例
Ip Modbus设备IP地址<字符串> 例:”192.168.1.100”
Port Modbus设备端口号<整数> 例:502
ifname Aprus采集Modbus设备的采集口,可选“eth0”,”eth1,”wlan0”
2) Modbus RTU配置
功能 配置Modbus RTU连接
接口描述 modbus.config(modbusobj, rate, databit, stopbit, parity)
modbusobj Modbus对象实例
rate Modbus设备波特率<整数> 例:9600
databit Modbus设备数据位<整数> 例:8
stopbit Modbus设备停止位<整数> 例:1
parity Modbus设备校验位<字符串> 例:”N” (None), “E” (Even), “O” (Odd)
Modbus RTU双485采集接口配置
功能 选择Modbus RTU双485采集接口
接口描述 modbus.select_rs485(modbusobj, "1")
modbusobj Modbus对象实例
参数 参数可填 “1” 或 “2”,不填默认 “1”。 “1”:对应外壳的-485-1。”2”:对应外壳的-485-2
备注 该接口配置只针对拥有两个485采集口的ApursX系列设备

2.3 Modbus 添加采集节点

功能 添加Modbus采集节点
接口描述 modbus.add_collectnode(modbusobj, ID, reg, addr, cnt, delay)
modbusobj Modbus对象实例
ID 节点ID<整数>
reg 寄存器操作码<整数> 例:3 (读保持寄存器)
addr 寄存器地址<整数> 例:1000
cnt 采集长度<整数> 例:10
delay 设置采集周期(单位:ms)<整数>。选填(默认不填表示采集无间隔)

2.4 Modbus 添加变量节点

功能 添加Modbus变量节点
接口描述 modbus.add_collectnode(modbusobj, ID, reg, addr, dtype, dBit, format, len, pMode, dStyle, dOffset, dExt)
modbusobj Modbus对象实例
ID 节点ID<整数>
reg 寄存器操作码<整数> 例:3 (读保持寄存器)
addr 寄存器地址<整数> 例:1000
dtype 变量类型<字符串> 例:”int”
dBit 位偏移 (只有当数据类型为bit时有效 但此字段必须有)
format 采集上报模式<字符串> 例:”raw”
len 变量长度 (只有当数据类型为bytes时有效 但此字段必须有)
pMode 采集上报名称<字符串> 例:”temperature”
dStyle 数据补偿计算<字符串> 例:”+”
dOffset 改变上报条件限制<整数> 例:5
dExt 扩展参数<字符串> 例:”C” (摄氏度)

2.5 Modbus向被指定节点写入数据

功能 向Modbus指定节点写入数据
接口描述 modbus.write(modbusobj, style, val)
modbusobj Modbus对象实例
style 变量名称<字符串> 例:”temperature”
val 变量值<任何合法的数据类型> 例:25

2.6 Modbus 实例启动

功能 启动Modbus实例
接口描述 modbus.run(modbusobj)
modbusobj Modbus对象实例

2.7 Modbus 实例停止

功能 停止Modbus实例
接口描述 modbus.stop(modbusobj)
modbusobj Modbus对象实例

备注 :modbus tcp支持多实例模式,modbus rtu 仅支持单实例模式

2.8 aprus.lua示例脚本

2.8.1 aprus.lua示例脚本(RTU基于RS485采集)
package.cpath="./?.so"
package.path="./?.lua"
cjson = require "cjson"
config = require "config"
require "modbus"

function act_control(m, json)
    for k,v in pairs(json) do
        if k ~= "Act" then
            modbus.write(modbusObj, k, v)
        end
    end
end

function mqttdata_handle(m, topic, data)
    local json = cjson.decode(data)    
    if json.Act == "Control" then
        act_control(m, json)
    end    
end

function mqttsys_handle(m, code)

    if code == 0 then
        -- modbus.stop(modbusObj)
    elseif code == 1 then
    end    
end

function modbusevent_handle(session, code, style_L, val_L, style_E, val_E, z)    
    if code == 15 then
        local json = cjson.encode(mbbuf[session])
        mqtt.publish(mqtt3Obj, mbstr[session], "r", json)    
        mbbuf[session] = {}        
    elseif code > 10 then
        mbbuf[session][style_L] = val_L
        mbbuf[session][style_E] = val_E        
    else 
        local json = cjson.encode({[style_L] = val_L, [style_E] = val_E, ["Z"] = z})
        mqtt.publish(mqtt3Obj, mbstr[session], "r", json)        
    end
end

function modbus_load_collectnodes(session, nodes)
    for k,v in pairs(nodes)
    do
        modbus.add_collectnode(session, v.ID, v.reg, v.addr, v.cnt, v.delay)
    end    
end

function modbus_load_varnodes(session, nodes)
    for k,v in pairs(nodes)
    do
        modbus.add_varnode(session, v.ID, v.reg, v.addr, v.dtype, v.dBit, v.format, v.len, v.pMode, v.dStyle, v.dOffset, v.dExt)
    end    
end

function init()
    mqtt3Obj = mqtt.new() 
    user.setluaver(config.AprusX.luaver)
    user.setdevinfo(config.AprusX.devinfo)
    user.ipconfig(config.AprusX.ipmode, config.AprusX.inet_addr, config.AprusX.netmask)
    mqtt.run(mqtt3Obj)

--    user.reset_eth0()    --if you want to set eth0  use this interface
--    user.ipconfig_eth0("manual", "10.100.1.123", "255.255.255.0", "10.100.1.1", "114.114.114.114")
end

function start()
    init()
----------ModbusRtu Config----------
    MBCfg = config.Modbus

--Init Object
    modbusObj = nil
    mbbuf = { modbusObj }
    mbstr = { modbusObj }

--Config Object
    modbusObj = modbus.new(MBCfg.device.type)
    mbbuf[modbusObj] = {}
    mbstr[modbusObj] = "modbusObj"
--    modbus.select_rs485(modbusObj, "2")    --you can select "1" or "2", default is "1"
    modbus.config(modbusObj, MBCfg.device.rate, MBCfg.device.databit, MBCfg.device.stopbit, MBCfg.device.parity)
    --modbus.delay(modbusObj, 50)    --设置采集间隔。默认值为20mS --必须在添加采集节点前调用
    modbus_load_collectnodes(modbusObj, MBCfg.node.collect)
    modbus_load_varnodes(modbusObj, MBCfg.node.variable)
    modbus.run(modbusObj)
----------------------------------

    while true do
        local msg = user.waitmsg()
        if msg.from == "mqtt-sys" then
            mqttsys_handle(msg.session, msg.code)
        elseif msg.from == "mqtt-msg" then
            mqttdata_handle(msg.session, msg.topic, msg.payload)
        elseif msg.from == "modbus" then
            modbusevent_handle(msg.session, msg.code, msg.style_L, msg.val_L, msg.style_E, msg.val_E, msg.z)
        end
    end
end

start()
2.8.2 aprus.lua示例脚本(TCP基TCP采集)
package.cpath = "./?.so"
package.path = "./?.lua"
cjson = require "cjson"
config = require "config"
require "modbus"

function act_control(m, json)
    for k, v in pairs(json) do
        if k ~= "Act" then
            modbus.write(modbusObj, k, v)
        end
    end
end

function mqttdata_handle(m, topic, data)
    local json = cjson.decode(data)
    if json.Act == "Control" then
        act_control(m, json)
    end
end

function mqttsys_handle(m, code)
    if code == 0 then
        --modbus.stop(modbusObj)
    elseif code == 1 then
        --modbus.run(modbusObj)
    end
end

function modbusevent_handle(session, code, style_L, val_L, style_E, val_E, z)
    if code == 15 then
        local json = cjson.encode(mbbuf[session])
        mqtt.publish(mqtt3Obj, mbstr[session], "r", json)
        mbbuf[session] = {}
    elseif code > 10 then
        mbbuf[session][style_L] = val_L
        mbbuf[session][style_E] = val_E
    else
        local json = cjson.encode({ [style_L] = val_L, [style_E] = val_E, ["Z"] = z })
        mqtt.publish(mqtt3Obj, mbstr[session], "r", json)
    end
end

function modbus_load_collectnodes(session, nodes)
    for k, v in pairs(nodes)
    do
        modbus.add_collectnode(session, v.ID, v.reg, v.addr, v.cnt)
    end
end

function modbus_load_varnodes(session, nodes)
    for k, v in pairs(nodes)
    do
        modbus.add_varnode(session, v.ID, v.reg, v.addr, v.dtype, v.dBit, v.format, v.len, v.pMode, v.dStyle, v.dOffset,
            v.dExt)
    end
end

function init()
    mqtt3Obj = mqtt.new()
    user.setluaver(config.AprusX.luaver)
    user.setdevinfo(config.AprusX.devinfo)
    user.ipconfig(config.AprusX.ipmode, config.AprusX.inet_addr, config.AprusX.netmask)
    mqtt.run(mqtt3Obj)
end

function start()
    init()
    ----------ModbusTcp Config----------
    MBCfg = config.Modbus

    --Init Object
    modbusObj = nil
    mbbuf = { modbusObj }
    mbstr = { modbusObj }

    --Config Object
    modbusObj = modbus.new(MBCfg.device.type)
    mbbuf[modbusObj] = {}
    mbstr[modbusObj] = "modbusObj"
    modbus.config(modbusObj, MBCfg.device.ip, MBCfg.device.port, MBCfg.device.ifname)
    --modbus.delay(modbusObj, 50)    --设置采集间隔。默认值为20mS --必须在添加采集节点前调用
    modbus_load_collectnodes(modbusObj, MBCfg.node.collect)
    modbus_load_varnodes(modbusObj, MBCfg.node.variable)
    ----------------------------------

    modbus.run(modbusObj)
    while true do
        local msg = user.waitmsg()
        if msg.from == "mqtt-sys" then
            mqttsys_handle(msg.session, msg.code)
        elseif msg.from == "mqtt-msg" then
            mqttdata_handle(msg.session, msg.topic, msg.payload)
        elseif msg.from == "modbus" then
            modbusevent_handle(msg.session, msg.code, msg.style_L, msg.val_L, msg.style_E, msg.val_E, msg.z)
        end
    end
end

start()







文档更新时间: 2024-11-15 15:09   作者:CGL