modbus转发大成项目

一、物理结构

二、项目描述

      由于客户空压机更新换代,但是PLC过保修期无法更新维护,因此需要将新型号的空压机的数据模拟成为旧型号的空压机供PLC采集数据;

三、实现原理

       左侧萨震空压机(新型号空压机)(含温度模块)经过AS-1的485-1采集modbus_RTU的数据,同时开启modbus服务器(TCP)供AS-2的modbus_TCP采集数据;而后AS-2经过地址映射(模拟为寿力空压机(旧型号))、modbus服务器(RTU)供PLC和温度模块采集数据

四、lua脚本

1.AS-1 lua脚本

1.1 Aprus.lua

package.cpath = "./?.so"
package.path = "./?.lua"
cjson = require "cjson"
config = require "config"
require "modbus"
require "ModbusServer"


function PrintTable(tbl, level, filteDefault) --打印表
    local msg = ""
    filteDefault = filteDefault or true       --默认过滤关键字(DeleteMe, _class_type)
    level = level or 1
    local indent_str = ""
    for i = 1, level do
        indent_str = indent_str .. "  "
    end

    print(indent_str .. "{")
    for k, v in pairs(tbl) do
        if filteDefault then
            if k ~= "_class_type" and k ~= "DeleteMe" then
                local item_str = string.format("%s%s = %s", indent_str .. " ", tostring(k), tostring(v))
                print(item_str)
                if type(v) == "table" then
                    PrintTable(v, level + 1)
                end
            end
        else
            local item_str = string.format("%s%s = %s", indent_str .. " ", tostring(k), tostring(v))
            print(item_str)
            if type(v) == "table" then
                PrintTable(v, level + 1)
            end
        end
    end
    print(indent_str .. "}")
end

--日志函数
function LOG(fmt, ...)
    user.log(string.format(fmt, ...))
end

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

----------------------------------
---回调函数
----------------------------------
--mqtt回调函数
function mqttCB_recvMsg(m, topic, data)
    local json = cjson.decode(data)
    if json.Act == "Control" then
        act_control(m, json)
    end
end

function mqttCB_disConnect(session)
    LOG("mqtt_disconnected !!!")
    LOG("LuaCB SUCCESS")
end

function mqttCB_connect(session)
    LOG("mqtt_connected !!!")
    LOG("LuaCB SUCCESS")
end

--modbus写入点位校验
function modbus_writeNode_verify(Wnode)
    local MBWnode = config.Modbus.node.write
    local flag_verify = false
    for index, value in ipairs(MBWnode) do
        if Wnode.ID == value.ID and Wnode.reg == value.reg and Wnode.addr >= value.addr and Wnode.addr < value.addr + value.cnt - 1 and Wnode.addr + Wnode.cnt <= value.cnt + value.addr then
            flag_verify = true
        end
    end

    return flag_verify
end

--写入点位校验
function writeNode_verify(Wnode)
    local flag_verify = false
    flag_verify = modbus_writeNode_verify(Wnode)

    return flag_verify
end

--modbusSvr回调函数
function modbusServerCB_write(session, ID, reg, addr, cnt, data)
    local Wnode = { ID = tonumber(ID), reg = tostring(reg), addr = tonumber(addr), cnt = tonumber(cnt) }
    if writeNode_verify(Wnode) then
        -- LOG("[Lua] [Write] SUCCESS Over before return ")
        LOG("[modbusServerCB_write] Wnode <" ..
            "ID:" .. Wnode.ID .. " Reg:" .. Wnode.reg .. " Addr:" .. Wnode.addr .. " Cnt:" .. Wnode.cnt .. "> SUCCESS")
        modbus.writeNode(modbusObj, cjson.encode(Wnode), data)
    else
        LOG("[Lua] [Write] Failed Over before return ")
        LOG("[modbusServerCB_write] ERROR Wnode Verify <" ..
            "ID:" .. Wnode.ID .. " Reg:" .. Wnode.reg .. " Addr:" .. Wnode.addr .. " Cnt:" .. Wnode.cnt .. ">")
    end
    -- LOG("[modbusServerCB_write] return ")
end

----------------------------------
---模块加载结点
----------------------------------
--modbus加载结点
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, v.db)
    end
end

--modbus加载结点
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

--modbusSvr加载结点
function MBserver_load_station(svr, cfg)
    for k, v in pairs(cfg)
    do
        -- LOG("<load Station" .. cjson.encode(v) .. ">")
        ModbusServer.setStation(svr, cjson.encode(v))
    end
end

----------------------------------
---mqtt初始化
----------------------------------
function mqtt_init()
    LOG("MqttInit")
    mqtt3Obj = mqtt.new()
    mqtt.regCB(mqtt3Obj, "recvMsg", mqttCB_recvMsg)
    -- mqtt.config(mqtt3Obj, "", "gards.mixyun.com", "31883", "aprusdev@aprus", "mixlinker123")

    mqtt.config(mqtt3Obj, "", "10.168.1.100", "1883", "box@aprus", "mixlinker123")
    mqtt.run(mqtt3Obj)
end

--modbus初始化
function modbus_init()
    MBCfg = config.Modbus
    modbusObj = modbus.new(MBCfg.device.type)
    -- modbus.debug(modbusObj, 0x01010101)
    -- modbus.config(modbusObj, MBCfg.device.ip, MBCfg.device.port, MBCfg.device.ifname)

    modbus.config(modbusObj, MBCfg.device.rate, MBCfg.device.databit, MBCfg.device.stopbit, MBCfg.device.parity)
    modbus_load_collectnodes(modbusObj, MBCfg.node.collect)
    modbus_load_varnodes(modbusObj, MBCfg.node.variable)
    modbus.run(modbusObj)
end

--modbusSvr初始化
function modbusServer_init()
    MBSvrCfg = config.ModbusServer

    mbSvrObj = ModbusServer.new("ModbusServer")
    --ModbusServer.debug(mbSvrObj, 0x01010101) --ModbusServer显示详尽的调试信息
    ModbusServer.config(mbSvrObj, cjson.encode(MBSvrCfg.ServerConfig))
    MBserver_load_station(mbSvrObj, MBSvrCfg.Stations)
    ModbusServer.debug(mbSvrObj, 0x01) --ModbusServer显示详尽的调试信息
    -- ModbusServer.regCB(mbSvrObj, "write", modbusServerCB_write)
    ModbusServer.run(mbSvrObj)
end

----------------------------------
---模块初始化
----------------------------------
function module_init()
    modbus_init()
    modbusServer_init()
end

----------------------------------
--网口初始化
----------------------------------
function eth_init()
    EthCfg = config.Aprus.eth
    user.ipconfig_eth0(EthCfg.ipmode, EthCfg.inet_addr, EthCfg.netmask, EthCfg.gateway, EthCfg.dns)
end

--加载数据中心的数据块
function loadDatabase(dbs)
    for k, v in pairs(dbs)
    do
        DataCenter.addDB(cjson.encode(v))
    end
end

-- 加载地址映射配置
function loadAddrMaps(maps)
    -- 如果 maps 是 nil,直接返回
    if not maps then
        return
    end

    for _, map in ipairs(maps) do
        -- 查找源数据库配置以获取类型和大小
        local src_cfg = nil
        for _, db in ipairs(config.DataCenter.DB) do
            if db.db_name == map.db_src then
                src_cfg = db
                break
            end
        end

        if not src_cfg then
            LOG("[loadAddrMaps] Source DB %s not found, skip", map.db_src)
            goto continue
        end

        -- 1. 添加基础配置
        local base_cfg = {
            db_src = map.db_src,
            db_dest = map.db_dest,
            db_type = src_cfg.db_type,
            count = src_cfg.count,
            enable = map.enable and 1 or 0
        }
        local ret = DataCenter.addAddrMapBase(cjson.encode(base_cfg))
        if ret ~= 0 then
            LOG("[loadAddrMaps] Add base config failed for %s, skip", map.db_src)
            goto continue
        end

        -- 2. 添加地址映射表
        local mappings_cfg = {}
        for src_addr, dest_addr in pairs(map.addr_maps) do
            mappings_cfg["addr_" .. src_addr .. "_dest"] = dest_addr
        end
        ret = DataCenter.addAddrMapMappings(cjson.encode(mappings_cfg))
        if ret ~= 0 then
            LOG("[loadAddrMaps] Add mappings failed for %s, skip", map.db_src)
            goto continue
        end

        -- -- 3. 添加转发偏移配置
        local forward_cfg = {}
        if map.forward_offsets then
            for src_addr, offsets in pairs(map.forward_offsets) do
                local offset_str = ""
                for i, op in ipairs(offsets) do
                    if i > 1 then
                        offset_str = offset_str .. ","
                    end
                    offset_str = offset_str .. op[1] .. op[2]
                end
                forward_cfg["addr_" .. src_addr .. "_forward_offset"] = offset_str
            end
        end
        ret = DataCenter.addAddrMapForwardOffsets(cjson.encode(forward_cfg))
        if ret ~= 0 then
            LOG("[loadAddrMaps] Add forward offsets failed for %s, skip", map.db_src)
            goto continue
        end

        -- -- 4. 添加控制配置(偏移+节点)
        -- local control_cfg = {}
        -- if map.control_nodes then
        --     for src_addr, ctrl in pairs(map.control_nodes) do
        --         -- 控制偏移
        --         if ctrl.offsets then
        --             local offset_str = ""
        --             for i, op in ipairs(ctrl.offsets) do
        --                 if i > 1 then
        --                     offset_str = offset_str .. ","
        --                 end
        --                 offset_str = offset_str .. op[1] .. op[2]
        --             end
        --             control_cfg["addr_" .. src_addr .. "_control_offset"] = offset_str
        --         end
        --         -- 控制节点
        --         if ctrl.node then
        --             local node = ctrl.node
        --             control_cfg["addr_" .. src_addr .. "_control_node"] = string.format(
        --                 '{"ID":%d,"reg":"%s","addr":%d,"cnt":%d,"method":"%s"}',
        --                 node.ID, node.reg, node.addr, node.cnt, node.method or "none"
        --             )
        --         end
        --     end
        -- end
        -- ret = DataCenter.addAddrMapControl(cjson.encode(control_cfg))
        -- if ret ~= 0 then
        --     LOG("[loadAddrMaps] Add control config failed for %s, skip", map.db_src)
        --     goto continue
        -- end

        -- 5. 添加目标节点配置
        -- local dest_cfg = {}
        -- if map.dest_nodes then
        --     for src_addr, node in pairs(map.dest_nodes) do
        --         dest_cfg["addr_" .. src_addr .. "_dest_node"] = string.format(
        --             '{"ID":%d,"reg":"%s","addr":%d,"cnt":%d,"method":"%s"}',
        --             node.ID, node.reg, node.addr, node.cnt, node.method or "none"
        --         )
        --     end
        -- end
        -- ret = DataCenter.addAddrMapDestNodes(cjson.encode(dest_cfg))
        -- if ret ~= 0 then
        --     LOG("[loadAddrMaps] Add dest nodes failed for %s, skip", map.db_src)
        --     goto continue
        -- end

        -- 6. 提交映射配置
        ret = DataCenter.commitAddrMap()
        if ret ~= 0 then
            LOG("[loadAddrMaps] Commit map failed for %s", map.db_src)
        else
            LOG("[loadAddrMaps] Loaded map successfully: %s->%s", map.db_src, map.db_dest)
        end

        ::continue::
    end
end

-- 加载位地址映射配置
function loadAddrMapsBit(bit_maps)
    -- 如果 bit_maps 是 nil,直接返回
    if not bit_maps then
        return
    end

    for _, bit_map_group in ipairs(bit_maps) do
        if not bit_map_group.enable then
            goto continue
        end

        -- 查找源数据库和目标数据库配置
        local src_cfg = nil
        local dest_cfg = nil
        for _, db in ipairs(config.DataCenter.DB) do
            if db.db_name == bit_map_group.db_src then
                src_cfg = db
            end
            if db.db_name == bit_map_group.db_dest then
                dest_cfg = db
            end
            if src_cfg and dest_cfg then
                break
            end
        end

        if not src_cfg or not dest_cfg then
            LOG("[loadAddrMapsBit] Source or dest DB not found, skip group")
            goto continue
        end

        -- 处理每个位映射配置
        for _, bit_map in ipairs(bit_map_group) do
            -- 确定映射类型
            local map_type = 0 -- 默认short->short
            if src_cfg.db_type == "short" and dest_cfg.db_type == "bit" then
                map_type = 1 -- short->bit
            elseif src_cfg.db_type == "bit" and dest_cfg.db_type == "short" then
                map_type = 2 -- bit->short
            end

            -- 构建位映射配置
            local bit_cfg = {
                db_src = bit_map_group.db_src,
                db_dest = bit_map_group.db_dest,
                enable = bit_map_group.enable and 1 or 0,
                is_offset = bit_map.is_offset and 1 or 0,
                map_type = map_type,
                src_addr = {
                    addr = tonumber(bit_map.src_addr.addr) or 0, -- 确保是数字
                    dBit = tonumber(bit_map.src_addr.dBit) or 0
                },
                dest_addr = {
                    addr = tonumber(bit_map.dest_addr.addr) or 0,
                    dBit = tonumber(bit_map.dest_addr.dBit) or 0
                }
            }
            -- local bit_cfg = {
            --     db_src = bit_map_group.db_src,
            --     db_dest = bit_map_group.db_dest,
            --     enable = bit_map_group.enable and 1 or 0,
            --     is_offset = bit_map.is_offset and 1 or 0,
            --     map_type = map_type,
            --     src_addr = {
            --         addr = bit_map.src_addr.addr,
            --         dBit = bit_map.src_addr.dBit
            --     },
            --     dest_addr = {
            --         addr = bit_map.dest_addr.addr,
            --         dBit = bit_map.dest_addr.dBit
            --     }
            -- }
            PrintTable(bit_cfg)
            -- 添加到位映射
            local ret = DataCenter.addAddrMapBit(cjson.encode(bit_cfg))
            if ret ~= 0 then
                LOG("[loadAddrMapsBit] Add bit map failed: %s->%s",
                    bit_map_group.db_src, bit_map_group.db_dest)
            else
                LOG("[loadAddrMapsBit] Added bit map: %s->%s, src=%d.%d, dest=%d.%d SUCCESS",
                    bit_map_group.db_src, bit_map_group.db_dest,
                    bit_map.src_addr.addr, bit_map.src_addr.dBit,
                    bit_map.dest_addr.addr, bit_map.dest_addr.dBit)
            end
        end

        ::continue::
    end
end

function loadControlConfig(control_configs)
    -- 所有变量均在函数开头定义并初始化
    local ret = 0
    local enable_val = 1
    local node_base = {}
    local node_base_name = ""
    local control_config = nil
    local config_idx = 0
    local control_node = nil
    local node_idx = 0
    local addr_base = {}
    local dest_node = nil
    local dest_idx = 0
    local add_dest_node_params = {}
    local obj_index = 1
    local offsets = {}
    local offset = nil
    local add_offset_params = {}
    modbusObjs = { modbusObj }
    -- 1. 参数合法性检查
    if not control_configs or type(control_configs) ~= "table" then
        LOG("[loadControlConfig] Argument is not a valid table.")
        return nil
    end

    -- 如果传入的是一个空table,直接返回成功
    if #control_configs == 0 then
        LOG("[loadControlConfig] No control configurations to load.")
        return ""
    end

    -- 检查全局modbus对象数组是否存在(这部分逻辑请根据你的实际情况确认)
    -- 注意:modbusObjs 应该在调用此函数前就已正确初始化
    if not modbusObjs or type(modbusObjs) ~= "table" then
        LOG("[loadControlConfig] Global 'modbusObjs' array is not properly initialized.")
        return nil
    end

    LOG("[loadControlConfig] Starting to load control configurations...")

    -- 3. 遍历所有控制配置
    for node_idx, node_ctrl in ipairs(control_configs) do
        -- 检查单个控制配置的完整性
        -- if not node_ctrl.name or type(node_ctrl.name) ~= "string" then
        --     LOG("[loadControlConfig] The " ..
        --         config_idx .. "th control config is missing or has an invalid 'name' field.")
        --     return nil
        -- end
        -- if not node_ctrl.db_src or type(node_ctrl.db_src) ~= "string" then
        --     LOG("[loadControlConfig] Control config '" ..
        --         node_ctrl.name .. "' is missing or has an invalid 'db_src' field.")
        --     return nil
        -- end
        -- if not node_ctrl.nodes or type(node_ctrl.nodes) ~= "table" then
        --     LOG("[loadControlConfig] Control config '" ..
        --         node_ctrl.name .. "' is missing or has an invalid 'nodes' field.")
        --     return nil
        -- end

        LOG("[loadControlConfig] Processing control config: " .. node_ctrl.name)

        -- 3.1 添加控制配置(调用C接口)
        enable_val = node_ctrl.enable ~= nil and (node_ctrl.enable and 1 or 0) or 1
        node_base = {
            name = node_ctrl.name,
            db_src = node_ctrl.db_src,
            enable = enable_val
        }
        LOG("[loadControlConfig] [Step 1-nodeBase [" ..
            "node_idx = " .. node_idx .. " ;]" .. "Add control config: " .. cjson.encode(node_base))
        node_base_name = DataCenter.addControlConfig(cjson.encode(node_base))
        if not node_base_name then
            LOG("[loadControlConfig] Failed to add control config '" .. node_ctrl.name .. "'.")
            return nil
        end

        -- 3.2 遍历当前控制配置下的所有控制节点
        for addr_idx, addr_ctrl in ipairs(node_ctrl.addrs) do
            if not addr_ctrl.src_addr or not addr_ctrl.dest_nodes then
                LOG("[loadControlConfig] Skipping invalid node (index: " ..
                    addr_idx .. ") in config '" .. node_ctrl.name .. "'.")
                goto continue_node_loop
            end

            -- 3.2.1 添加控制节点(调用C接口)
            addr_base = {
                config_name = node_base_name,
                addr_type = addr_ctrl.addr_type or "short",
                db_src_type = addr_ctrl.db_src_type or "short",
                addr = addr_ctrl.src_addr.addr or 0,
                dBit = addr_ctrl.src_addr.dBit or 0
            }
            LOG("[loadControlConfig] [Step 2-addrBase/" ..
                "node_idx = %d ;, addr_idx = %d ;" .. "] Add control node: " .. cjson.encode(addr_base), node_idx,
                addr_idx)
            ret = DataCenter.addControlNode(cjson.encode(addr_base))
            if ret ~= 0 then
                LOG("[loadControlConfig] Failed to add control node for config '" ..
                    node_base_name .. "', Error code: " .. ret)
                return nil
            end

            -- 3.2.2 遍历当前控制节点下的所有目标节点
            for dest_idx, dest_node in ipairs(addr_ctrl.dest_nodes) do
                -- 3.2.2.1 添加目标节点(调用C接口)
                add_dest_node_params = {
                    config_name = node_base_name,
                    src_addr = addr_ctrl.src_addr.addr or 0,
                    src_dBit = addr_ctrl.src_addr.dBit or 0,
                    ID = dest_node.ID,
                    reg = dest_node.reg,
                    addr = dest_node.addr,
                    cnt = dest_node.cnt or 1,
                    method = dest_node.method or "modbus"
                }
                LOG("[loadControlConfig] [Step 3-addr-destAddr/" ..
                    "node_idx = " ..
                    node_idx ..
                    " ;addr_idx = " ..
                    addr_idx ..
                    " ;dest_idx = " .. dest_idx .. " ;] Add destination node: " .. cjson.encode(add_dest_node_params))

                -- 从全局modbus对象数组中获取对应的对象
                obj_index = dest_node.obj or 1 -- 默认使用第一个Modbus对象

                if type(obj_index) ~= "number" or obj_index < 1 or obj_index > #modbusObjs then
                    LOG("[loadControlConfig] Invalid modbus obj index '" ..
                        tostring(obj_index) .. "' for destination node in config: " .. node_base_name)
                    return nil
                end

                Obj_ctrl = modbusObjs[obj_index]

                DataCenter.addDestNode(Obj_ctrl, cjson.encode(add_dest_node_params))

                -- -- 3.2.2.2 如果有偏移操作,为目标节点添加偏移
                -- if dest_node.dOffset and type(dest_node.dOffset) == "table" then
                --     -- 兼容 dOffset 是一个操作数或一个操作数数组的情况
                --     offsets = type(dest_node.dOffset[1]) == "table" and dest_node.dOffset or { dest_node.dOffset }

                --     for _, offset in ipairs(offsets) do
                --         add_offset_params = {
                --             config_name = node_base_name,
                --             src_addr = addr_ctrl.src_addr.addr or 0,
                --             src_dBit = addr_ctrl.src_addr.dBit or 0,
                --             dest_addr = dest_node.addr or 0,
                --             op = offset.op or "+",
                --             value = offset.value or 0.0
                --         }
                --         LOG("[loadControlConfig] [Step 4/" ..
                --             addr_idx ..
                --             ".2." ..
                --             addr_idx ..
                --             "." .. dest_idx .. "] Add destination offset: " .. cjson.encode(add_offset_params))
                --         ret = DataCenter.addDestOffset(cjson.encode(add_offset_params))
                --         if ret ~= 0 then
                --             LOG("[loadControlConfig] Failed to add destination offset for config '" ..
                --                 node_base_name .. "', Error code: " .. ret)
                --             return nil
                --         end
                --     end
                -- end
            end
            ::continue_node_loop::
        end

        LOG("[loadControlConfig] Control config '" .. node_base_name .. "' loaded successfully.")
    end

    LOG("[loadControlConfig] All control configurations have been processed.")
    -- 返回最后一个成功加载的配置名称
    return control_configs[#control_configs].name
end

-- 数据中心地址映射主函数
function dataCenter_addrMap()
    local ret = DataCenter.addrMapProcess()
    if ret ~= 0 then
        LOG("[dataCenter_addrMap] Process failed with code %d", ret)
    end
end

----------------------------------
--数据中心初始化
----------------------------------
function dataCenter_init()
    loadDatabase(config.DataCenter.DB)
    LOG("[dataCenter_init] DataCenter initialized")
end

--------------------------------
---mixctrl 系统初始化
--------------------------------
function mixctrl_init()
    -- user.remoteSvr(cjson.encode(config.remoteSvr))
    dataCenter_init()
    mqtt_init()
    module_init()
    -- eth_init()
    -- timer_init()
end

--------------------------------
---mixctrl 系统启动
--------------------------------
function mixctrl_start()
    os.execute("usleep 20000")

    os.execute("ip route del 10.168.1.1/32 dev eth0 2>/dev/null")
    os.execute("ip route add 10.168.1.0/24 dev eth0 2>/dev/null")
    os.execute("ifconfig eth0 10.168.1.10 netmask 255.255.255.0 2>/dev/null")
    os.execute("ifconfig eth0:9 192.168.123.100>/dev/null")
    -- 初始化地址映射
    local ret = DataCenter.addrMapInit()
    if ret ~= 0 then
        LOG("[mixctrl_start] Init failed with code %d", ret)
        return false
    end

    -- 开启错误日志(默认已开启)
    DataCenter.setAddrMapDebug(0, 1)
    -- -- 开启信息日志
    -- DataCenter.setAddrMapDebug(1, 1)
    -- -- 开启接收详情日志
    -- DataCenter.setAddrMapDebug(2, 1)
    -- -- 开启发送详情日志
    -- DataCenter.setAddrMapDebug(3, 1)

    -- 加载地址映射
    -- loadAddrMaps(config.DataCenter.addr_Maps)

    -- 加载位地址映射
    -- loadAddrMapsBit(config.DataCenter.addr_Maps_bit)

    DataCenter.controlInit()
    DataCenter.setControlDebug(0x01010101)
    loadControlConfig(config.DataCenter.control_nodes)
    -- 关联Modbus写入对象到控制节点(示例:实际应根据节点ID关联对应的会话)
    -- ModbusSession.attachToControlNodes()

    while true do
        --    dataCenter_addrMap()
        DataCenter.controlProcess()
        os.execute("usleep 300000")
    end
end

--------------------------------
--mixctrl系统主流程
--------------------------------
mixctrl_init()

mixctrl_start()

1.2 config.lua

return
{
    AprusX = {
        ipmode = "none", --auto/manual/none
        inet_addr = "192.168.1.234",
        netmask = "255.255.255.0",
        luaver = "V00.R",
        devinfo = "ForwardTCPDev",
    },

    DataCenter = {
        DB = {
            -- db1
            { db_name = "db1_AO",        db_type = "short", addr = 0, count = 100 },
            { db_name = "db2_AO",        db_type = "short", addr = 0, count = 100 },
            { db_name = "db3_AO",        db_type = "short", addr = 0, count = 100 },
            { db_name = "db1_6_AO_dest", db_type = "short", addr = 0, count = 100 },
            { db_name = "db2_6_AO_dest", db_type = "short", addr = 0, count = 100 },
            { db_name = "db3_6_AO_dest", db_type = "short", addr = 0, count = 100 },

        },
        --控制节点:当src_addr的值改变时,按控制节点的规则进行控制
        control_nodes =
        {
            --modbusSvr_485-1_ID-1
            {
                enable = true,
                db_src = "db1_6_AO_dest",
                name = "Control_Start_Stop_TCP_1_ID_1",
                addrs =
                {
                    {
                        addr_type = "short",
                        src_addr = { addr = 0 }, --dBit可以不存在,默认为0
                        -- src_val = { 1, 2 }, --可以不存在,拿到多少写入多少
                        dest_nodes =
                        {
                            --控制结点的值偏移,可以不偏移也可以偏移,从src地址拿到的值运算后写入目标地址
                            { ID = 1, reg = "6", addr = 30, dtype = "ushort", dStyle = { "L1_6_30" }, method = "modbus", obj = 1 },
                        }
                    },
                }
            },

            --modbusSvr_485-1_ID-2
            {
                enable = true,
                db_src = "db2_6_AO_dest",
                name = "Control_Start_Stop_TCP_1_ID_2",
                addrs =
                {
                    {
                        addr_type = "short",
                        src_addr = { addr = 0 }, --dBit可以不存在,默认为0
                        -- src_val = { 1, 2 }, --可以不存在,拿到多少写入多少
                        dest_nodes =
                        {
                            --控制结点的值偏移,可以不偏移也可以偏移,从src地址拿到的值运算后写入目标地址
                            { ID = 2, reg = "6", addr = 30, dtype = "ushort", dStyle = { "L1_6_30" }, method = "modbus", obj = 1 },
                        }
                    },
                }
            },


            --modbusSvr_485-1_ID-3
            {
                enable = true,
                db_src = "db3_6_AO_dest",
                name = "Control_Start_Stop_TCP_1_ID_3",
                addrs =
                {
                    {
                        addr_type = "short",
                        src_addr = { addr = 0 }, --dBit可以不存在,默认为0
                        -- src_val = { 1, 2 }, --可以不存在,拿到多少写入多少
                        dest_nodes =
                        {
                            --控制结点的值偏移,可以不偏移也可以偏移,从src地址拿到的值运算后写入目标地址
                            { ID = 3, reg = "6", addr = 30, dtype = "ushort", dStyle = { "L1_6_30" }, method = "modbus", obj = 1 },
                        }
                    },
                }
            },

        }
    },

    ModbusServer =
    {
        ServerConfig =
        {
            type = "tcp",
            ip = "192.168.123.10",
            port = 8000,
            ifname = "eth0",
            -- type = "rtu", --"rtu"/"ascii"
            -- rs485 = 2,
            -- rate = 9600,
            -- databit = 8,
            -- stopbit = 1,
            -- parity = "None", -- None/Odd/Even
        },
        Stations =
        {
            --{station=站号(必要), db1=可读写开关量(非必要), db2=只读开关量(非必要), db3=可读写16位数据(非必要), db4=只读16位数据(非必要)},
            --例1: {station=1, db1="AXio_DO_2", db2="AXio_DI_4", db3="AXio_AO_n", db4="AXio_AI_4"},
            --例2: {station=2, db1="DB_1_100", db2="DB_2_100", db3="DB_3_100", db4="DB_4_100"},
            --采集不映射,仅最后映射
            { station = 1, db3 = "db1_AO", db6 = "db1_6_AO_dest" },
            { station = 2, db3 = "db2_AO", db6 = "db2_6_AO_dest" },
            { station = 3, db3 = "db3_AO", db6 = "db3_6_AO_dest" },
        },
    },

    Modbus = {
        device = {
            type = "rtu", --"rtu"/"ascii"
            rate = 9600,
            databit = 8,
            stopbit = 1,
            parity = "None", -- None/Odd/Even
        },
        node = {
            collect = {
                { ID = 1, reg = "3", addr = 0, cnt = 64, db = "db1_AO" }, -- db1_AO count=100
                { ID = 2, reg = "3", addr = 0, cnt = 64, db = "db2_AO" }, -- db1_AO count=100
                { ID = 3, reg = "3", addr = 0, cnt = 64, db = "db3_AO" }, -- db1_AO count=100
            },
            variable = {

                { ID = 1, reg = "3", addr = 0,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_0" },    dOffset = { { "/", 100 } } },               --机组排气压力_Mpa;采集到的值*145.04 后转到 1从站,3功能码,13寄存器地址中
                { ID = 1, reg = "3", addr = 1,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_1" },    dOffset = { { "/", 10 } } },                --排气温度_℃;采集到的值 后转到 1从站,3功能码,11寄存器地址中给
                { ID = 1, reg = "3", addr = 2,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_2" },    dOffset = { { "/", 100 } } },               --油气桶压力_Mpa;采集到的值*145.04 后转到 1从站,3功能码,14寄存器地址中
                { ID = 1, reg = "3", addr = 3,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_3" },    dOffset = { { "/", 10 } } },                --油分后温度_℃;采集到的值 后转到 1从站,3功能码,12寄存器地址中
                { ID = 1, reg = "3", addr = 4,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_4" },    dOffset = { { "/", 10 } } },                --A相绕组温度_℃;采集到的值 后转到 1从站,3功能码,15寄存器地址中
                { ID = 1, reg = "3", addr = 5,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_5" },    dOffset = { { "/", 10 } } },                --B相绕组温度_℃;采集到的值 后转到 1从站,3功能码,16寄存器地址中
                { ID = 1, reg = "3", addr = 6,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_6" },    dOffset = { { "/", 10 } } },                --C相绕组温度_℃;采集到的值 后转到 1从站,3功能码,19寄存器地址中
                { ID = 1, reg = "3", addr = 7,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_7" },    dOffset = { { "/", 10 } } },                --进线电压_V;采集到的值 后转到 1从站,3功能码,7寄存器地址中
                { ID = 1, reg = "3", addr = 8,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_8" },    dOffset = { { "/", 10 } } },                --进线电流_A;采集到的值 后转到 1从站,3功能码,8寄存器地址中
                { ID = 1, reg = "3", addr = 9,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_9" },    dOffset = { { "/", 100 } } },               --主机变频器运行频率_HZ
                { ID = 1, reg = "3", addr = 10, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_10" },   dOffset = { { "/", 100 } } },               --主机变频器给定频率_HZ
                { ID = 1, reg = "3", addr = 11, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_11" },   dOffset = { { "/", 10 } } },                --主机变频器母线电压_V
                { ID = 1, reg = "3", addr = 12, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_12" },   dOffset = { { "/", 1 } } },                 --主机变频器输出电压_V
                { ID = 1, reg = "3", addr = 13, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_13" },   dOffset = { { "/", 10 } } },                --主机变频器运行电流_A
                { ID = 1, reg = "3", addr = 14, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_14" },   dOffset = { { "/", 1 } } },                 --主机变频器运行转速_rpm
                { ID = 1, reg = "3", addr = 15, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_15" },   dOffset = { { "/", 1000 } } },              --主机变频器输出功率_KW
                { ID = 1, reg = "3", addr = 17, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_17" },   dOffset = { { "/", 100 } } },               --风机变频器输出频率_HZ
                { ID = 1, reg = "3", addr = 20, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_20" },   dOffset = { { "/", 1 } } },                 --风机变频器输出电压_V
                { ID = 1, reg = "3", addr = 21, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_21" },   dOffset = { { "/", 10 } } },                --风机变频器输出电流_A
                { ID = 1, reg = "3", addr = 22, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_22" },   dOffset = { { "/", 1 } } },                 --风机变频器运行转速_Rpm
                { ID = 1, reg = "3", addr = 23, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_23" },   dOffset = { { "/", 1000 } } },              --风机变频器输出功率_KW
                { ID = 1, reg = "3", addr = 38, dtype = "uint",   format = "ABCD",  pMode = { 1, 3 },         dStyle = { "L1_3_38" },     dOffset = { { "/", 1 } } }, --机组运行时间_小时
                { ID = 1, reg = "3", addr = 40, dtype = "uint",   format = "ABCD",  pMode = { 1, 3 },         dStyle = { "L1_3_40" },     dOffset = { { "/", 1 } } }, --机组加载时间_小时
                { ID = 1, reg = "3", addr = 42, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_42" },   dOffset = { { "/", 100 } } },               --恒定压力_Mpa
                { ID = 1, reg = "3", addr = 43, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_43" },   dOffset = { { "/", 100 } } },               --卸载压力_Mpa
                { ID = 1, reg = "3", addr = 44, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_44" },   dOffset = { { "/", 100 } } },               --加载压力_Mpa
                { ID = 1, reg = "3", addr = 45, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_45" },   dOffset = { { "/", 1 } } },                 --油滤使用时间_小时
                { ID = 1, reg = "3", addr = 46, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_46" },   dOffset = { { "/", 1 } } },                 --空滤使用时间_小时
                { ID = 1, reg = "3", addr = 47, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_47" },   dOffset = { { "/", 1 } } },                 --油分器使用时间_小时
                { ID = 1, reg = "3", addr = 48, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_48" },   dOffset = { { "/", 1 } } },                 --润滑油使用时间_小时
                { ID = 1, reg = "3", addr = 49, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_49" },   dOffset = { { "/", 1 } } },                 --润滑脂使用时间_小时
                { ID = 1, reg = "3", addr = 50, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_50" },   dOffset = { { "/", 1 } } },                 --润滑脂使用时间_小时
                { ID = 1, reg = "3", addr = 51, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_51" },   dOffset = { { "/", 10 } } },                --电机轴承温度_℃
                { ID = 1, reg = "3", addr = 52, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_52" },   dOffset = { { "/", 10 } } },                --注油压力_Mpa
                { ID = 1, reg = "3", addr = 53, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_53" },   dOffset = { { "/", 10 } } },                --油分后压力_Mpa
                { ID = 1, reg = "3", addr = 54, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_54" },   dOffset = { { "/", 10 } } },                --主机前振动_mm/s
                { ID = 1, reg = "3", addr = 55, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_55" },   dOffset = { { "/", 10 } } },                --主机后振动_mm/s
                { ID = 1, reg = "3", addr = 56, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_56" },   dOffset = { { "/", 10 } } },                --电机前振动_mm/s
                { ID = 1, reg = "3", addr = 57, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_57" },   dOffset = { { "/", 10 } } },                --电机后振动_mm/s
                { ID = 1, reg = "3", addr = 58, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_58" },   dOffset = { { "/", 10 } } },                --进气压差_KPA
                { ID = 1, reg = "3", addr = 59, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_59" },   dOffset = { { "/", 10 } } },                --冷却器前端温度_℃
                { ID = 1, reg = "3", addr = 60, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_60" },   dOffset = { { "/", 10 } } },                --冷却器后端温度_℃
                { ID = 1, reg = "3", addr = 62, dtype = "uint",   format = "ABCD",  pMode = { 1, 3 },         dStyle = { "L1_3_62" },     dOffset = { { "/", 1 } } }, --累计电量_Kwh

                { ID = 1, reg = "3", addr = 38, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L1_3_38_H" }, dOffset = { { "/", 1 } } },                 --机组运行时间H_小时;采集到的值 后转到 1从站,3功能码,1寄存器地址中
                { ID = 1, reg = "3", addr = 39, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L1_3_38_L" }, dOffset = { { "/", 1 } } },                 --机组运行时间L_小时;采集到的值 后转到 1从站,3功能码,0寄存器地址中
                { ID = 1, reg = "3", addr = 40, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L1_3_39_H" }, dOffset = { { "/", 1 } } },                 --机组加载时间H_小时;采集到的值 后转到 1从站,3功能码,3寄存器地址中
                { ID = 1, reg = "3", addr = 41, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L1_3_39_L" }, dOffset = { { "/", 1 } } },                 --机组加载时间L_小时;采集到的值 后转到 1从站,3功能码,2寄存器地址中

                { ID = 1, reg = "6", addr = 30, dtype = "ushort", pMode = { 0, 0 }, dStyle = { "L1_6_30" },   dOffset = { { "/", 1 } } },                 --控制地址;modbus server 1从站,6功能码,0寄存器,收到值为1时实际给 L1_6_30 下发控制值为 1;modbus server 1从站,6功能码,0寄存器,收到值为2时实际给 L1_6_30 下发控制值为 2

                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 0,         pMode = { 1, 10 },        dStyle = { "L1_3_25_0" } },                 --主电机冷却(独立)风机过载
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 1,         pMode = { 1, 10 },        dStyle = { "L1_3_25_1" } },                 --空滤保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 2,         pMode = { 1, 10 },        dStyle = { "L1_3_25_2" } },                 --油滤保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 3,         pMode = { 1, 10 },        dStyle = { "L1_3_25_3" } },                 --油滤压差故障
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 4,         pMode = { 1, 10 },        dStyle = { "L1_3_25_4" } },                 --冷却水断流/水压低
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 5,         pMode = { 1, 10 },        dStyle = { "L1_3_25_5" } },                 --空滤压差故障
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 6,         pMode = { 1, 10 },        dStyle = { "L1_3_25_6" } },                 --主电机变频器故障/主电机过载
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 7,         pMode = { 1, 10 },        dStyle = { "L1_3_25_7" } },                 --急停按钮按下
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 8,         pMode = { 1, 10 },        dStyle = { "L1_3_25_8" } },                 --主电机PTC温度开关保护
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 9,         pMode = { 1, 10 },        dStyle = { "L1_3_25_9" } },                 --电源相序错误/欠压/过压保护
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 10,        pMode = { 1, 10 },        dStyle = { "L1_3_25_10" } },                --油分器保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 11,        pMode = { 1, 10 },        dStyle = { "L1_3_25_11" } },                --润滑油更换/保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 12,        pMode = { 1, 10 },        dStyle = { "L1_3_25_12" } },                --润滑脂更换/保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 13,        pMode = { 1, 10 },        dStyle = { "L1_3_25_13" } },                --整机保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 14,        pMode = { 1, 10 },        dStyle = { "L1_3_25_14" } },                --排气压力预警
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 15,        pMode = { 1, 10 },        dStyle = { "L1_3_25_15" } },                --排气压力过高报警停机
                { ID = 1, reg = "3", addr = 26, dtype = "bit",    dBit = 0,         pMode = { 1, 10 },        dStyle = { "L1_3_26_0" } },                 --排气温度高预警
                { ID = 1, reg = "3", addr = 26, dtype = "bit",    dBit = 1,         pMode = { 1, 10 },        dStyle = { "L1_3_26_1" } },                 --排气温度高报警停机
                { ID = 1, reg = "3", addr = 26, dtype = "bit",    dBit = 2,         pMode = { 1, 10 },        dStyle = { "L1_3_26_2" } },                 --电柜排风扇过载
                { ID = 1, reg = "3", addr = 26, dtype = "bit",    dBit = 3,         pMode = { 1, 10 },        dStyle = { "L1_3_26_3" } },                 --冷却风机变频器故障/冷却水流缺水
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 8,         pMode = { 1, 10 },        dStyle = { "L1_3_28_8" } },                 --主机变频器启动输出
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 12,        pMode = { 1, 10 },        dStyle = { "L1_3_28_12" } },                --系统运行
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 13,        pMode = { 1, 10 },        dStyle = { "L1_3_28_13" } },                --系统故障
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 14,        pMode = { 1, 10 },        dStyle = { "L1_3_28_14" } },                --主机冷却(独立)风机运行输出
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 15,        pMode = { 1, 10 },        dStyle = { "L1_3_28_15" } },                --加载阀输出
                { ID = 1, reg = "3", addr = 29, dtype = "bit",    dBit = 8,         pMode = { 1, 10 },        dStyle = { "L1_3_29_8" } },                 --主机变频器运行反馈
                { ID = 1, reg = "3", addr = 29, dtype = "bit",    dBit = 9,         pMode = { 1, 10 },        dStyle = { "L1_3_29_9" } },                 --主机变频器故障
                { ID = 1, reg = "3", addr = 29, dtype = "bit",    dBit = 10,        pMode = { 1, 10 },        dStyle = { "L1_3_29_10" } },                --冷却风机运行
                { ID = 1, reg = "3", addr = 29, dtype = "bit",    dBit = 11,        pMode = { 1, 10 },        dStyle = { "L1_3_29_11" } },                --冷却变频器故障
                { ID = 1, reg = "3", addr = 30, dtype = "bit",    dBit = 0,         pMode = { 1, 10 },        dStyle = { "L1_3_30_0" } },                 --开机_控制位
                { ID = 1, reg = "3", addr = 30, dtype = "bit",    dBit = 1,         pMode = { 1, 10 },        dStyle = { "L1_3_30_1" } },                 --停机_控制位
                { ID = 1, reg = "3", addr = 30, dtype = "bit",    dBit = 2,         pMode = { 1, 10 },        dStyle = { "L1_3_30_2" } },                 --故障复位_控制位

                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 0,         pMode = { 2, 0 },         dStyle = { "L1_3_25_0" } },                 --主电机冷却(独立)风机过载
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 1,         pMode = { 2, 0 },         dStyle = { "L1_3_25_1" } },                 --空滤保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 2,         pMode = { 2, 0 },         dStyle = { "L1_3_25_2" } },                 --油滤保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 3,         pMode = { 2, 0 },         dStyle = { "L1_3_25_3" } },                 --油滤压差故障
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 4,         pMode = { 2, 0 },         dStyle = { "L1_3_25_4" } },                 --冷却水断流/水压低
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 5,         pMode = { 2, 0 },         dStyle = { "L1_3_25_5" } },                 --空滤压差故障
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 6,         pMode = { 2, 0 },         dStyle = { "L1_3_25_6" } },                 --主电机变频器故障/主电机过载
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 7,         pMode = { 2, 0 },         dStyle = { "L1_3_25_7" } },                 --急停按钮按下
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 8,         pMode = { 2, 0 },         dStyle = { "L1_3_25_8" } },                 --主电机PTC温度开关保护
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 9,         pMode = { 2, 0 },         dStyle = { "L1_3_25_9" } },                 --电源相序错误/欠压/过压保护
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 10,        pMode = { 2, 0 },         dStyle = { "L1_3_25_10" } },                --油分器保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 11,        pMode = { 2, 0 },         dStyle = { "L1_3_25_11" } },                --润滑油更换/保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 12,        pMode = { 2, 0 },         dStyle = { "L1_3_25_12" } },                --润滑脂更换/保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 13,        pMode = { 2, 0 },         dStyle = { "L1_3_25_13" } },                --整机保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 14,        pMode = { 2, 0 },         dStyle = { "L1_3_25_14" } },                --排气压力预警
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 15,        pMode = { 2, 0 },         dStyle = { "L1_3_25_15" } },                --排气压力过高报警停机
                { ID = 1, reg = "3", addr = 26, dtype = "bit",    dBit = 0,         pMode = { 2, 0 },         dStyle = { "L1_3_26_0" } },                 --排气温度高预警
                { ID = 1, reg = "3", addr = 26, dtype = "bit",    dBit = 1,         pMode = { 2, 0 },         dStyle = { "L1_3_26_1" } },                 --排气温度高报警停机
                { ID = 1, reg = "3", addr = 26, dtype = "bit",    dBit = 2,         pMode = { 2, 0 },         dStyle = { "L1_3_26_2" } },                 --电柜排风扇过载
                { ID = 1, reg = "3", addr = 26, dtype = "bit",    dBit = 3,         pMode = { 2, 0 },         dStyle = { "L1_3_26_3" } },                 --冷却风机变频器故障/冷却水流缺水
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 8,         pMode = { 2, 0 },         dStyle = { "L1_3_28_8" } },                 --主机变频器启动输出
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 12,        pMode = { 2, 0 },         dStyle = { "L1_3_28_12" } },                --系统运行
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 13,        pMode = { 2, 0 },         dStyle = { "L1_3_28_13" } },                --系统故障
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 14,        pMode = { 2, 0 },         dStyle = { "L1_3_28_14" } },                --主机冷却(独立)风机运行输出
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 15,        pMode = { 2, 0 },         dStyle = { "L1_3_28_15" } },                --加载阀输出
                { ID = 1, reg = "3", addr = 29, dtype = "bit",    dBit = 8,         pMode = { 2, 0 },         dStyle = { "L1_3_29_8" } },                 --主机变频器运行反馈
                { ID = 1, reg = "3", addr = 29, dtype = "bit",    dBit = 9,         pMode = { 2, 0 },         dStyle = { "L1_3_29_9" } },                 --主机变频器故障
                { ID = 1, reg = "3", addr = 29, dtype = "bit",    dBit = 10,        pMode = { 2, 0 },         dStyle = { "L1_3_29_10" } },                --冷却风机运行
                { ID = 1, reg = "3", addr = 29, dtype = "bit",    dBit = 11,        pMode = { 2, 0 },         dStyle = { "L1_3_29_11" } },                --冷却变频器故障
                { ID = 1, reg = "3", addr = 30, dtype = "bit",    dBit = 0,         pMode = { 2, 0 },         dStyle = { "L1_3_30_0" } },                 --开机_控制位
                { ID = 1, reg = "3", addr = 30, dtype = "bit",    dBit = 1,         pMode = { 2, 0 },         dStyle = { "L1_3_30_1" } },                 --停机_控制位
                { ID = 1, reg = "3", addr = 30, dtype = "bit",    dBit = 2,         pMode = { 2, 0 },         dStyle = { "L1_3_30_2" } },                 --故障复位_控制位


                { ID = 2, reg = "3", addr = 0,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_0" },    dOffset = { { "/", 100 } } },               --机组排气压力_Mpa;采集到的值*145.04 后转到 1从站,3功能码,13寄存器地址中
                { ID = 2, reg = "3", addr = 1,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_1" },    dOffset = { { "/", 10 } } },                --排气温度_℃;采集到的值 后转到 1从站,3功能码,11寄存器地址中给
                { ID = 2, reg = "3", addr = 2,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_2" },    dOffset = { { "/", 100 } } },               --油气桶压力_Mpa;采集到的值*145.04 后转到 1从站,3功能码,14寄存器地址中
                { ID = 2, reg = "3", addr = 3,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_3" },    dOffset = { { "/", 10 } } },                --油分后温度_℃;采集到的值 后转到 1从站,3功能码,12寄存器地址中
                { ID = 2, reg = "3", addr = 4,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_4" },    dOffset = { { "/", 10 } } },                --A相绕组温度_℃;采集到的值 后转到 1从站,3功能码,15寄存器地址中
                { ID = 2, reg = "3", addr = 5,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_5" },    dOffset = { { "/", 10 } } },                --B相绕组温度_℃;采集到的值 后转到 1从站,3功能码,16寄存器地址中
                { ID = 2, reg = "3", addr = 6,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_6" },    dOffset = { { "/", 10 } } },                --C相绕组温度_℃;采集到的值 后转到 1从站,3功能码,19寄存器地址中
                { ID = 2, reg = "3", addr = 7,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_7" },    dOffset = { { "/", 10 } } },                --进线电压_V;采集到的值 后转到 1从站,3功能码,7寄存器地址中
                { ID = 2, reg = "3", addr = 8,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_8" },    dOffset = { { "/", 10 } } },                --进线电流_A;采集到的值 后转到 1从站,3功能码,8寄存器地址中
                { ID = 2, reg = "3", addr = 9,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_9" },    dOffset = { { "/", 100 } } },               --主机变频器运行频率_HZ
                { ID = 2, reg = "3", addr = 10, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_10" },   dOffset = { { "/", 100 } } },               --主机变频器给定频率_HZ
                { ID = 2, reg = "3", addr = 11, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_11" },   dOffset = { { "/", 10 } } },                --主机变频器母线电压_V
                { ID = 2, reg = "3", addr = 12, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_12" },   dOffset = { { "/", 1 } } },                 --主机变频器输出电压_V
                { ID = 2, reg = "3", addr = 13, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_13" },   dOffset = { { "/", 10 } } },                --主机变频器运行电流_A
                { ID = 2, reg = "3", addr = 14, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_14" },   dOffset = { { "/", 1 } } },                 --主机变频器运行转速_rpm
                { ID = 2, reg = "3", addr = 15, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_15" },   dOffset = { { "/", 1000 } } },              --主机变频器输出功率_KW
                { ID = 2, reg = "3", addr = 17, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_17" },   dOffset = { { "/", 100 } } },               --风机变频器输出频率_HZ
                { ID = 2, reg = "3", addr = 20, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_20" },   dOffset = { { "/", 1 } } },                 --风机变频器输出电压_V
                { ID = 2, reg = "3", addr = 21, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_21" },   dOffset = { { "/", 10 } } },                --风机变频器输出电流_A
                { ID = 2, reg = "3", addr = 22, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_22" },   dOffset = { { "/", 1 } } },                 --风机变频器运行转速_Rpm
                { ID = 2, reg = "3", addr = 23, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_23" },   dOffset = { { "/", 1000 } } },              --风机变频器输出功率_KW
                { ID = 2, reg = "3", addr = 38, dtype = "uint",   format = "ABCD",  pMode = { 1, 3 },         dStyle = { "L2_3_38" },     dOffset = { { "/", 1 } } }, --机组运行时间_小时
                { ID = 2, reg = "3", addr = 40, dtype = "uint",   format = "ABCD",  pMode = { 1, 3 },         dStyle = { "L2_3_40" },     dOffset = { { "/", 1 } } }, --机组加载时间_小时
                { ID = 2, reg = "3", addr = 42, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_42" },   dOffset = { { "/", 100 } } },               --恒定压力_Mpa
                { ID = 2, reg = "3", addr = 43, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_43" },   dOffset = { { "/", 100 } } },               --卸载压力_Mpa
                { ID = 2, reg = "3", addr = 44, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_44" },   dOffset = { { "/", 100 } } },               --加载压力_Mpa
                { ID = 2, reg = "3", addr = 45, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_45" },   dOffset = { { "/", 1 } } },                 --油滤使用时间_小时
                { ID = 2, reg = "3", addr = 46, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_46" },   dOffset = { { "/", 1 } } },                 --空滤使用时间_小时
                { ID = 2, reg = "3", addr = 47, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_47" },   dOffset = { { "/", 1 } } },                 --油分器使用时间_小时
                { ID = 2, reg = "3", addr = 48, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_48" },   dOffset = { { "/", 1 } } },                 --润滑油使用时间_小时
                { ID = 2, reg = "3", addr = 49, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_49" },   dOffset = { { "/", 1 } } },                 --润滑脂使用时间_小时
                { ID = 2, reg = "3", addr = 50, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_50" },   dOffset = { { "/", 1 } } },                 --润滑脂使用时间_小时
                { ID = 2, reg = "3", addr = 51, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_51" },   dOffset = { { "/", 10 } } },                --电机轴承温度_℃
                { ID = 2, reg = "3", addr = 52, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_52" },   dOffset = { { "/", 10 } } },                --注油压力_Mpa
                { ID = 2, reg = "3", addr = 53, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_53" },   dOffset = { { "/", 10 } } },                --油分后压力_Mpa
                { ID = 2, reg = "3", addr = 54, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_54" },   dOffset = { { "/", 10 } } },                --主机前振动_mm/s
                { ID = 2, reg = "3", addr = 55, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_55" },   dOffset = { { "/", 10 } } },                --主机后振动_mm/s
                { ID = 2, reg = "3", addr = 56, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_56" },   dOffset = { { "/", 10 } } },                --电机前振动_mm/s
                { ID = 2, reg = "3", addr = 57, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_57" },   dOffset = { { "/", 10 } } },                --电机后振动_mm/s
                { ID = 2, reg = "3", addr = 58, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_58" },   dOffset = { { "/", 10 } } },                --进气压差_KPA
                { ID = 2, reg = "3", addr = 59, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_59" },   dOffset = { { "/", 10 } } },                --冷却器前端温度_℃
                { ID = 2, reg = "3", addr = 60, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_60" },   dOffset = { { "/", 10 } } },                --冷却器后端温度_℃
                { ID = 2, reg = "3", addr = 62, dtype = "uint",   format = "ABCD",  pMode = { 1, 3 },         dStyle = { "L2_3_62" },     dOffset = { { "/", 1 } } }, --累计电量_Kwh

                { ID = 2, reg = "3", addr = 38, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L2_3_38_H" }, dOffset = { { "/", 1 } } },                 --机组运行时间H_小时;采集到的值 后转到 1从站,3功能码,1寄存器地址中
                { ID = 2, reg = "3", addr = 39, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L2_3_38_L" }, dOffset = { { "/", 1 } } },                 --机组运行时间L_小时;采集到的值 后转到 1从站,3功能码,0寄存器地址中
                { ID = 2, reg = "3", addr = 40, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L2_3_39_H" }, dOffset = { { "/", 1 } } },                 --机组加载时间H_小时;采集到的值 后转到 1从站,3功能码,3寄存器地址中
                { ID = 2, reg = "3", addr = 41, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L2_3_39_L" }, dOffset = { { "/", 1 } } },                 --机组加载时间L_小时;采集到的值 后转到 1从站,3功能码,2寄存器地址中

                { ID = 2, reg = "6", addr = 30, dtype = "ushort", pMode = { 0, 0 }, dStyle = { "L2_6_30" },   dOffset = { { "/", 1 } } },                 --控制地址;modbus server 1从站,6功能码,0寄存器,收到值为1时实际给 L2_6_30 下发控制值为 1;modbus server 1从站,6功能码,0寄存器,收到值为2时实际给 L2_6_30 下发控制值为 2

                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 0,         pMode = { 1, 10 },        dStyle = { "L2_3_25_0" } },                 --主电机冷却(独立)风机过载
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 1,         pMode = { 1, 10 },        dStyle = { "L2_3_25_1" } },                 --空滤保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 2,         pMode = { 1, 10 },        dStyle = { "L2_3_25_2" } },                 --油滤保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 3,         pMode = { 1, 10 },        dStyle = { "L2_3_25_3" } },                 --油滤压差故障
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 4,         pMode = { 1, 10 },        dStyle = { "L2_3_25_4" } },                 --冷却水断流/水压低
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 5,         pMode = { 1, 10 },        dStyle = { "L2_3_25_5" } },                 --空滤压差故障
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 6,         pMode = { 1, 10 },        dStyle = { "L2_3_25_6" } },                 --主电机变频器故障/主电机过载
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 7,         pMode = { 1, 10 },        dStyle = { "L2_3_25_7" } },                 --急停按钮按下
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 8,         pMode = { 1, 10 },        dStyle = { "L2_3_25_8" } },                 --主电机PTC温度开关保护
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 9,         pMode = { 1, 10 },        dStyle = { "L2_3_25_9" } },                 --电源相序错误/欠压/过压保护
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 10,        pMode = { 1, 10 },        dStyle = { "L2_3_25_10" } },                --油分器保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 11,        pMode = { 1, 10 },        dStyle = { "L2_3_25_11" } },                --润滑油更换/保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 12,        pMode = { 1, 10 },        dStyle = { "L2_3_25_12" } },                --润滑脂更换/保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 13,        pMode = { 1, 10 },        dStyle = { "L2_3_25_13" } },                --整机保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 14,        pMode = { 1, 10 },        dStyle = { "L2_3_25_14" } },                --排气压力预警
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 15,        pMode = { 1, 10 },        dStyle = { "L2_3_25_15" } },                --排气压力过高报警停机
                { ID = 2, reg = "3", addr = 26, dtype = "bit",    dBit = 0,         pMode = { 1, 10 },        dStyle = { "L2_3_26_0" } },                 --排气温度高预警
                { ID = 2, reg = "3", addr = 26, dtype = "bit",    dBit = 1,         pMode = { 1, 10 },        dStyle = { "L2_3_26_1" } },                 --排气温度高报警停机
                { ID = 2, reg = "3", addr = 26, dtype = "bit",    dBit = 2,         pMode = { 1, 10 },        dStyle = { "L2_3_26_2" } },                 --电柜排风扇过载
                { ID = 2, reg = "3", addr = 26, dtype = "bit",    dBit = 3,         pMode = { 1, 10 },        dStyle = { "L2_3_26_3" } },                 --冷却风机变频器故障/冷却水流缺水
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 8,         pMode = { 1, 10 },        dStyle = { "L2_3_28_8" } },                 --主机变频器启动输出
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 12,        pMode = { 1, 10 },        dStyle = { "L2_3_28_12" } },                --系统运行
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 13,        pMode = { 1, 10 },        dStyle = { "L2_3_28_13" } },                --系统故障
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 14,        pMode = { 1, 10 },        dStyle = { "L2_3_28_14" } },                --主机冷却(独立)风机运行输出
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 15,        pMode = { 1, 10 },        dStyle = { "L2_3_28_15" } },                --加载阀输出
                { ID = 2, reg = "3", addr = 29, dtype = "bit",    dBit = 8,         pMode = { 1, 10 },        dStyle = { "L2_3_29_8" } },                 --主机变频器运行反馈
                { ID = 2, reg = "3", addr = 29, dtype = "bit",    dBit = 9,         pMode = { 1, 10 },        dStyle = { "L2_3_29_9" } },                 --主机变频器故障
                { ID = 2, reg = "3", addr = 29, dtype = "bit",    dBit = 10,        pMode = { 1, 10 },        dStyle = { "L2_3_29_10" } },                --冷却风机运行
                { ID = 2, reg = "3", addr = 29, dtype = "bit",    dBit = 11,        pMode = { 1, 10 },        dStyle = { "L2_3_29_11" } },                --冷却变频器故障
                { ID = 2, reg = "3", addr = 30, dtype = "bit",    dBit = 0,         pMode = { 1, 10 },        dStyle = { "L2_3_30_0" } },                 --开机_控制位
                { ID = 2, reg = "3", addr = 30, dtype = "bit",    dBit = 1,         pMode = { 1, 10 },        dStyle = { "L2_3_30_1" } },                 --停机_控制位
                { ID = 2, reg = "3", addr = 30, dtype = "bit",    dBit = 2,         pMode = { 1, 10 },        dStyle = { "L2_3_30_2" } },                 --故障复位_控制位

                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 0,         pMode = { 2, 0 },         dStyle = { "L2_3_25_0" } },                 --主电机冷却(独立)风机过载
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 1,         pMode = { 2, 0 },         dStyle = { "L2_3_25_1" } },                 --空滤保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 2,         pMode = { 2, 0 },         dStyle = { "L2_3_25_2" } },                 --油滤保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 3,         pMode = { 2, 0 },         dStyle = { "L2_3_25_3" } },                 --油滤压差故障
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 4,         pMode = { 2, 0 },         dStyle = { "L2_3_25_4" } },                 --冷却水断流/水压低
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 5,         pMode = { 2, 0 },         dStyle = { "L2_3_25_5" } },                 --空滤压差故障
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 6,         pMode = { 2, 0 },         dStyle = { "L2_3_25_6" } },                 --主电机变频器故障/主电机过载
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 7,         pMode = { 2, 0 },         dStyle = { "L2_3_25_7" } },                 --急停按钮按下
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 8,         pMode = { 2, 0 },         dStyle = { "L2_3_25_8" } },                 --主电机PTC温度开关保护
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 9,         pMode = { 2, 0 },         dStyle = { "L2_3_25_9" } },                 --电源相序错误/欠压/过压保护
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 10,        pMode = { 2, 0 },         dStyle = { "L2_3_25_10" } },                --油分器保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 11,        pMode = { 2, 0 },         dStyle = { "L2_3_25_11" } },                --润滑油更换/保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 12,        pMode = { 2, 0 },         dStyle = { "L2_3_25_12" } },                --润滑脂更换/保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 13,        pMode = { 2, 0 },         dStyle = { "L2_3_25_13" } },                --整机保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 14,        pMode = { 2, 0 },         dStyle = { "L2_3_25_14" } },                --排气压力预警
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 15,        pMode = { 2, 0 },         dStyle = { "L2_3_25_15" } },                --排气压力过高报警停机
                { ID = 2, reg = "3", addr = 26, dtype = "bit",    dBit = 0,         pMode = { 2, 0 },         dStyle = { "L2_3_26_0" } },                 --排气温度高预警
                { ID = 2, reg = "3", addr = 26, dtype = "bit",    dBit = 1,         pMode = { 2, 0 },         dStyle = { "L2_3_26_1" } },                 --排气温度高报警停机
                { ID = 2, reg = "3", addr = 26, dtype = "bit",    dBit = 2,         pMode = { 2, 0 },         dStyle = { "L2_3_26_2" } },                 --电柜排风扇过载
                { ID = 2, reg = "3", addr = 26, dtype = "bit",    dBit = 3,         pMode = { 2, 0 },         dStyle = { "L2_3_26_3" } },                 --冷却风机变频器故障/冷却水流缺水
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 8,         pMode = { 2, 0 },         dStyle = { "L2_3_28_8" } },                 --主机变频器启动输出
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 12,        pMode = { 2, 0 },         dStyle = { "L2_3_28_12" } },                --系统运行
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 13,        pMode = { 2, 0 },         dStyle = { "L2_3_28_13" } },                --系统故障
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 14,        pMode = { 2, 0 },         dStyle = { "L2_3_28_14" } },                --主机冷却(独立)风机运行输出
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 15,        pMode = { 2, 0 },         dStyle = { "L2_3_28_15" } },                --加载阀输出
                { ID = 2, reg = "3", addr = 29, dtype = "bit",    dBit = 8,         pMode = { 2, 0 },         dStyle = { "L2_3_29_8" } },                 --主机变频器运行反馈
                { ID = 2, reg = "3", addr = 29, dtype = "bit",    dBit = 9,         pMode = { 2, 0 },         dStyle = { "L2_3_29_9" } },                 --主机变频器故障
                { ID = 2, reg = "3", addr = 29, dtype = "bit",    dBit = 10,        pMode = { 2, 0 },         dStyle = { "L2_3_29_10" } },                --冷却风机运行
                { ID = 2, reg = "3", addr = 29, dtype = "bit",    dBit = 11,        pMode = { 2, 0 },         dStyle = { "L2_3_29_11" } },                --冷却变频器故障
                { ID = 2, reg = "3", addr = 30, dtype = "bit",    dBit = 0,         pMode = { 2, 0 },         dStyle = { "L2_3_30_0" } },                 --开机_控制位
                { ID = 2, reg = "3", addr = 30, dtype = "bit",    dBit = 1,         pMode = { 2, 0 },         dStyle = { "L2_3_30_1" } },                 --停机_控制位
                { ID = 2, reg = "3", addr = 30, dtype = "bit",    dBit = 2,         pMode = { 2, 0 },         dStyle = { "L2_3_30_2" } },                 --故障复位_控制位

                { ID = 3, reg = "3", addr = 0,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_0" },    dOffset = { { "/", 100 } } },               --机组排气压力_Mpa;采集到的值*145.04 后转到 1从站,3功能码,13寄存器地址中
                { ID = 3, reg = "3", addr = 1,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_1" },    dOffset = { { "/", 10 } } },                --排气温度_℃;采集到的值 后转到 1从站,3功能码,11寄存器地址中给
                { ID = 3, reg = "3", addr = 2,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_2" },    dOffset = { { "/", 100 } } },               --油气桶压力_Mpa;采集到的值*145.04 后转到 1从站,3功能码,14寄存器地址中
                { ID = 3, reg = "3", addr = 3,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_3" },    dOffset = { { "/", 10 } } },                --油分后温度_℃;采集到的值 后转到 1从站,3功能码,12寄存器地址中
                { ID = 3, reg = "3", addr = 4,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_4" },    dOffset = { { "/", 10 } } },                --A相绕组温度_℃;采集到的值 后转到 1从站,3功能码,15寄存器地址中
                { ID = 3, reg = "3", addr = 5,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_5" },    dOffset = { { "/", 10 } } },                --B相绕组温度_℃;采集到的值 后转到 1从站,3功能码,16寄存器地址中
                { ID = 3, reg = "3", addr = 6,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_6" },    dOffset = { { "/", 10 } } },                --C相绕组温度_℃;采集到的值 后转到 1从站,3功能码,19寄存器地址中
                { ID = 3, reg = "3", addr = 7,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_7" },    dOffset = { { "/", 10 } } },                --进线电压_V;采集到的值 后转到 1从站,3功能码,7寄存器地址中
                { ID = 3, reg = "3", addr = 8,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_8" },    dOffset = { { "/", 10 } } },                --进线电流_A;采集到的值 后转到 1从站,3功能码,8寄存器地址中
                { ID = 3, reg = "3", addr = 9,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_9" },    dOffset = { { "/", 100 } } },               --主机变频器运行频率_HZ
                { ID = 3, reg = "3", addr = 10, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_10" },   dOffset = { { "/", 100 } } },               --主机变频器给定频率_HZ
                { ID = 3, reg = "3", addr = 11, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_11" },   dOffset = { { "/", 10 } } },                --主机变频器母线电压_V
                { ID = 3, reg = "3", addr = 12, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_12" },   dOffset = { { "/", 1 } } },                 --主机变频器输出电压_V
                { ID = 3, reg = "3", addr = 13, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_13" },   dOffset = { { "/", 10 } } },                --主机变频器运行电流_A
                { ID = 3, reg = "3", addr = 14, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_14" },   dOffset = { { "/", 1 } } },                 --主机变频器运行转速_rpm
                { ID = 3, reg = "3", addr = 15, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_15" },   dOffset = { { "/", 1000 } } },              --主机变频器输出功率_KW
                { ID = 3, reg = "3", addr = 17, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_17" },   dOffset = { { "/", 100 } } },               --风机变频器输出频率_HZ
                { ID = 3, reg = "3", addr = 20, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_20" },   dOffset = { { "/", 1 } } },                 --风机变频器输出电压_V
                { ID = 3, reg = "3", addr = 21, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_21" },   dOffset = { { "/", 10 } } },                --风机变频器输出电流_A
                { ID = 3, reg = "3", addr = 22, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_22" },   dOffset = { { "/", 1 } } },                 --风机变频器运行转速_Rpm
                { ID = 3, reg = "3", addr = 23, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_23" },   dOffset = { { "/", 1000 } } },              --风机变频器输出功率_KW
                { ID = 3, reg = "3", addr = 38, dtype = "uint",   format = "ABCD",  pMode = { 1, 3 },         dStyle = { "L3_3_38" },     dOffset = { { "/", 1 } } }, --机组运行时间_小时
                { ID = 3, reg = "3", addr = 40, dtype = "uint",   format = "ABCD",  pMode = { 1, 3 },         dStyle = { "L3_3_40" },     dOffset = { { "/", 1 } } }, --机组加载时间_小时
                { ID = 3, reg = "3", addr = 42, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_42" },   dOffset = { { "/", 100 } } },               --恒定压力_Mpa
                { ID = 3, reg = "3", addr = 43, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_43" },   dOffset = { { "/", 100 } } },               --卸载压力_Mpa
                { ID = 3, reg = "3", addr = 44, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_44" },   dOffset = { { "/", 100 } } },               --加载压力_Mpa
                { ID = 3, reg = "3", addr = 45, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_45" },   dOffset = { { "/", 1 } } },                 --油滤使用时间_小时
                { ID = 3, reg = "3", addr = 46, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_46" },   dOffset = { { "/", 1 } } },                 --空滤使用时间_小时
                { ID = 3, reg = "3", addr = 47, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_47" },   dOffset = { { "/", 1 } } },                 --油分器使用时间_小时
                { ID = 3, reg = "3", addr = 48, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_48" },   dOffset = { { "/", 1 } } },                 --润滑油使用时间_小时
                { ID = 3, reg = "3", addr = 49, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_49" },   dOffset = { { "/", 1 } } },                 --润滑脂使用时间_小时
                { ID = 3, reg = "3", addr = 50, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_50" },   dOffset = { { "/", 1 } } },                 --润滑脂使用时间_小时
                { ID = 3, reg = "3", addr = 51, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_51" },   dOffset = { { "/", 10 } } },                --电机轴承温度_℃
                { ID = 3, reg = "3", addr = 52, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_52" },   dOffset = { { "/", 10 } } },                --注油压力_Mpa
                { ID = 3, reg = "3", addr = 53, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_53" },   dOffset = { { "/", 10 } } },                --油分后压力_Mpa
                { ID = 3, reg = "3", addr = 54, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_54" },   dOffset = { { "/", 10 } } },                --主机前振动_mm/s
                { ID = 3, reg = "3", addr = 55, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_55" },   dOffset = { { "/", 10 } } },                --主机后振动_mm/s
                { ID = 3, reg = "3", addr = 56, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_56" },   dOffset = { { "/", 10 } } },                --电机前振动_mm/s
                { ID = 3, reg = "3", addr = 57, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_57" },   dOffset = { { "/", 10 } } },                --电机后振动_mm/s
                { ID = 3, reg = "3", addr = 58, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_58" },   dOffset = { { "/", 10 } } },                --进气压差_KPA
                { ID = 3, reg = "3", addr = 59, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_59" },   dOffset = { { "/", 10 } } },                --冷却器前端温度_℃
                { ID = 3, reg = "3", addr = 60, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_60" },   dOffset = { { "/", 10 } } },                --冷却器后端温度_℃
                { ID = 3, reg = "3", addr = 62, dtype = "uint",   format = "ABCD",  pMode = { 1, 3 },         dStyle = { "L3_3_62" },     dOffset = { { "/", 1 } } }, --累计电量_Kwh

                { ID = 3, reg = "3", addr = 38, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L3_3_38_H" }, dOffset = { { "/", 1 } } },                 --机组运行时间H_小时;采集到的值 后转到 1从站,3功能码,1寄存器地址中
                { ID = 3, reg = "3", addr = 39, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L3_3_38_L" }, dOffset = { { "/", 1 } } },                 --机组运行时间L_小时;采集到的值 后转到 1从站,3功能码,0寄存器地址中
                { ID = 3, reg = "3", addr = 40, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L3_3_39_H" }, dOffset = { { "/", 1 } } },                 --机组加载时间H_小时;采集到的值 后转到 1从站,3功能码,3寄存器地址中
                { ID = 3, reg = "3", addr = 41, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L3_3_39_L" }, dOffset = { { "/", 1 } } },                 --机组加载时间L_小时;采集到的值 后转到 1从站,3功能码,2寄存器地址中

                { ID = 3, reg = "6", addr = 30, dtype = "ushort", pMode = { 0, 0 }, dStyle = { "L3_6_30" },   dOffset = { { "/", 1 } } },                 --控制地址;modbus server 1从站,6功能码,0寄存器,收到值为1时实际给 L3_6_30 下发控制值为 1;modbus server 1从站,6功能码,0寄存器,收到值为2时实际给 L3_6_30 下发控制值为 2

                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 0,         pMode = { 1, 10 },        dStyle = { "L3_3_25_0" } },                 --主电机冷却(独立)风机过载
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 1,         pMode = { 1, 10 },        dStyle = { "L3_3_25_1" } },                 --空滤保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 2,         pMode = { 1, 10 },        dStyle = { "L3_3_25_2" } },                 --油滤保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 3,         pMode = { 1, 10 },        dStyle = { "L3_3_25_3" } },                 --油滤压差故障
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 4,         pMode = { 1, 10 },        dStyle = { "L3_3_25_4" } },                 --冷却水断流/水压低
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 5,         pMode = { 1, 10 },        dStyle = { "L3_3_25_5" } },                 --空滤压差故障
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 6,         pMode = { 1, 10 },        dStyle = { "L3_3_25_6" } },                 --主电机变频器故障/主电机过载
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 7,         pMode = { 1, 10 },        dStyle = { "L3_3_25_7" } },                 --急停按钮按下
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 8,         pMode = { 1, 10 },        dStyle = { "L3_3_25_8" } },                 --主电机PTC温度开关保护
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 9,         pMode = { 1, 10 },        dStyle = { "L3_3_25_9" } },                 --电源相序错误/欠压/过压保护
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 10,        pMode = { 1, 10 },        dStyle = { "L3_3_25_10" } },                --油分器保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 11,        pMode = { 1, 10 },        dStyle = { "L3_3_25_11" } },                --润滑油更换/保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 12,        pMode = { 1, 10 },        dStyle = { "L3_3_25_12" } },                --润滑脂更换/保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 13,        pMode = { 1, 10 },        dStyle = { "L3_3_25_13" } },                --整机保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 14,        pMode = { 1, 10 },        dStyle = { "L3_3_25_14" } },                --排气压力预警
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 15,        pMode = { 1, 10 },        dStyle = { "L3_3_25_15" } },                --排气压力过高报警停机
                { ID = 3, reg = "3", addr = 26, dtype = "bit",    dBit = 0,         pMode = { 1, 10 },        dStyle = { "L3_3_26_0" } },                 --排气温度高预警
                { ID = 3, reg = "3", addr = 26, dtype = "bit",    dBit = 1,         pMode = { 1, 10 },        dStyle = { "L3_3_26_1" } },                 --排气温度高报警停机
                { ID = 3, reg = "3", addr = 26, dtype = "bit",    dBit = 2,         pMode = { 1, 10 },        dStyle = { "L3_3_26_2" } },                 --电柜排风扇过载
                { ID = 3, reg = "3", addr = 26, dtype = "bit",    dBit = 3,         pMode = { 1, 10 },        dStyle = { "L3_3_26_3" } },                 --冷却风机变频器故障/冷却水流缺水
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 8,         pMode = { 1, 10 },        dStyle = { "L3_3_28_8" } },                 --主机变频器启动输出
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 12,        pMode = { 1, 10 },        dStyle = { "L3_3_28_12" } },                --系统运行
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 13,        pMode = { 1, 10 },        dStyle = { "L3_3_28_13" } },                --系统故障
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 14,        pMode = { 1, 10 },        dStyle = { "L3_3_28_14" } },                --主机冷却(独立)风机运行输出
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 15,        pMode = { 1, 10 },        dStyle = { "L3_3_28_15" } },                --加载阀输出
                { ID = 3, reg = "3", addr = 29, dtype = "bit",    dBit = 8,         pMode = { 1, 10 },        dStyle = { "L3_3_29_8" } },                 --主机变频器运行反馈
                { ID = 3, reg = "3", addr = 29, dtype = "bit",    dBit = 9,         pMode = { 1, 10 },        dStyle = { "L3_3_29_9" } },                 --主机变频器故障
                { ID = 3, reg = "3", addr = 29, dtype = "bit",    dBit = 10,        pMode = { 1, 10 },        dStyle = { "L3_3_29_10" } },                --冷却风机运行
                { ID = 3, reg = "3", addr = 29, dtype = "bit",    dBit = 11,        pMode = { 1, 10 },        dStyle = { "L3_3_29_11" } },                --冷却变频器故障
                { ID = 3, reg = "3", addr = 30, dtype = "bit",    dBit = 0,         pMode = { 1, 10 },        dStyle = { "L3_3_30_0" } },                 --开机_控制位
                { ID = 3, reg = "3", addr = 30, dtype = "bit",    dBit = 1,         pMode = { 1, 10 },        dStyle = { "L3_3_30_1" } },                 --停机_控制位
                { ID = 3, reg = "3", addr = 30, dtype = "bit",    dBit = 2,         pMode = { 1, 10 },        dStyle = { "L3_3_30_2" } },                 --故障复位_控制位

                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 0,         pMode = { 2, 0 },         dStyle = { "L3_3_25_0" } },                 --主电机冷却(独立)风机过载
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 1,         pMode = { 2, 0 },         dStyle = { "L3_3_25_1" } },                 --空滤保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 2,         pMode = { 2, 0 },         dStyle = { "L3_3_25_2" } },                 --油滤保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 3,         pMode = { 2, 0 },         dStyle = { "L3_3_25_3" } },                 --油滤压差故障
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 4,         pMode = { 2, 0 },         dStyle = { "L3_3_25_4" } },                 --冷却水断流/水压低
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 5,         pMode = { 2, 0 },         dStyle = { "L3_3_25_5" } },                 --空滤压差故障
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 6,         pMode = { 2, 0 },         dStyle = { "L3_3_25_6" } },                 --主电机变频器故障/主电机过载
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 7,         pMode = { 2, 0 },         dStyle = { "L3_3_25_7" } },                 --急停按钮按下
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 8,         pMode = { 2, 0 },         dStyle = { "L3_3_25_8" } },                 --主电机PTC温度开关保护
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 9,         pMode = { 2, 0 },         dStyle = { "L3_3_25_9" } },                 --电源相序错误/欠压/过压保护
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 10,        pMode = { 2, 0 },         dStyle = { "L3_3_25_10" } },                --油分器保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 11,        pMode = { 2, 0 },         dStyle = { "L3_3_25_11" } },                --润滑油更换/保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 12,        pMode = { 2, 0 },         dStyle = { "L3_3_25_12" } },                --润滑脂更换/保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 13,        pMode = { 2, 0 },         dStyle = { "L3_3_25_13" } },                --整机保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 14,        pMode = { 2, 0 },         dStyle = { "L3_3_25_14" } },                --排气压力预警
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 15,        pMode = { 2, 0 },         dStyle = { "L3_3_25_15" } },                --排气压力过高报警停机
                { ID = 3, reg = "3", addr = 26, dtype = "bit",    dBit = 0,         pMode = { 2, 0 },         dStyle = { "L3_3_26_0" } },                 --排气温度高预警
                { ID = 3, reg = "3", addr = 26, dtype = "bit",    dBit = 1,         pMode = { 2, 0 },         dStyle = { "L3_3_26_1" } },                 --排气温度高报警停机
                { ID = 3, reg = "3", addr = 26, dtype = "bit",    dBit = 2,         pMode = { 2, 0 },         dStyle = { "L3_3_26_2" } },                 --电柜排风扇过载
                { ID = 3, reg = "3", addr = 26, dtype = "bit",    dBit = 3,         pMode = { 2, 0 },         dStyle = { "L3_3_26_3" } },                 --冷却风机变频器故障/冷却水流缺水
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 8,         pMode = { 2, 0 },         dStyle = { "L3_3_28_8" } },                 --主机变频器启动输出
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 12,        pMode = { 2, 0 },         dStyle = { "L3_3_28_12" } },                --系统运行
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 13,        pMode = { 2, 0 },         dStyle = { "L3_3_28_13" } },                --系统故障
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 14,        pMode = { 2, 0 },         dStyle = { "L3_3_28_14" } },                --主机冷却(独立)风机运行输出
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 15,        pMode = { 2, 0 },         dStyle = { "L3_3_28_15" } },                --加载阀输出
                { ID = 3, reg = "3", addr = 29, dtype = "bit",    dBit = 8,         pMode = { 2, 0 },         dStyle = { "L3_3_29_8" } },                 --主机变频器运行反馈
                { ID = 3, reg = "3", addr = 29, dtype = "bit",    dBit = 9,         pMode = { 2, 0 },         dStyle = { "L3_3_29_9" } },                 --主机变频器故障
                { ID = 3, reg = "3", addr = 29, dtype = "bit",    dBit = 10,        pMode = { 2, 0 },         dStyle = { "L3_3_29_10" } },                --冷却风机运行
                { ID = 3, reg = "3", addr = 29, dtype = "bit",    dBit = 11,        pMode = { 2, 0 },         dStyle = { "L3_3_29_11" } },                --冷却变频器故障
                { ID = 3, reg = "3", addr = 30, dtype = "bit",    dBit = 0,         pMode = { 2, 0 },         dStyle = { "L3_3_30_0" } },                 --开机_控制位
                { ID = 3, reg = "3", addr = 30, dtype = "bit",    dBit = 1,         pMode = { 2, 0 },         dStyle = { "L3_3_30_1" } },                 --停机_控制位
                { ID = 3, reg = "3", addr = 30, dtype = "bit",    dBit = 2,         pMode = { 2, 0 },         dStyle = { "L3_3_30_2" } },                 --故障复位_控制位

            },
        },
    },
}

2.AS-2lua脚本

2.1 aprus.lua

package.cpath = "./?.so"
package.path = "./?.lua"
cjson = require "cjson"
config = require "config"
require "modbus"
require "ModbusServer"


function PrintTable(tbl, level, filteDefault) --打印表
    local msg = ""
    filteDefault = filteDefault or true       --默认过滤关键字(DeleteMe, _class_type)
    level = level or 1
    local indent_str = ""
    for i = 1, level do
        indent_str = indent_str .. "  "
    end

    print(indent_str .. "{")
    for k, v in pairs(tbl) do
        if filteDefault then
            if k ~= "_class_type" and k ~= "DeleteMe" then
                local item_str = string.format("%s%s = %s", indent_str .. " ", tostring(k), tostring(v))
                print(item_str)
                if type(v) == "table" then
                    PrintTable(v, level + 1)
                end
            end
        else
            local item_str = string.format("%s%s = %s", indent_str .. " ", tostring(k), tostring(v))
            print(item_str)
            if type(v) == "table" then
                PrintTable(v, level + 1)
            end
        end
    end
    print(indent_str .. "}")
end

--日志函数
function LOG(fmt, ...)
    user.log(string.format(fmt, ...))
end

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

----------------------------------
---回调函数
----------------------------------
--mqtt回调函数
function mqttCB_recvMsg(m, topic, data)
    local json = cjson.decode(data)
    if json.Act == "Control" then
        act_control(m, json)
    end
end

function mqttCB_disConnect(session)
    LOG("mqtt_disconnected !!!")
    LOG("LuaCB SUCCESS")
end

function mqttCB_connect(session)
    LOG("mqtt_connected !!!")
    LOG("LuaCB SUCCESS")
end

--modbus写入点位校验
function modbus_writeNode_verify(Wnode)
    local MBWnode = config.Modbus.node.write
    local flag_verify = false
    for index, value in ipairs(MBWnode) do
        if Wnode.ID == value.ID and Wnode.reg == value.reg and Wnode.addr >= value.addr and Wnode.addr < value.addr + value.cnt - 1 and Wnode.addr + Wnode.cnt <= value.cnt + value.addr then
            flag_verify = true
        end
    end

    return flag_verify
end

--写入点位校验
function writeNode_verify(Wnode)
    local flag_verify = false
    flag_verify = modbus_writeNode_verify(Wnode)

    return flag_verify
end

--modbusSvr回调函数
function modbusServerCB_write(session, ID, reg, addr, cnt, data)
    local Wnode = { ID = tonumber(ID), reg = tostring(reg), addr = tonumber(addr), cnt = tonumber(cnt) }
    if writeNode_verify(Wnode) then
        -- LOG("[Lua] [Write] SUCCESS Over before return ")
        LOG("[modbusServerCB_write] Wnode <" ..
            "ID:" .. Wnode.ID .. " Reg:" .. Wnode.reg .. " Addr:" .. Wnode.addr .. " Cnt:" .. Wnode.cnt .. "> SUCCESS")
        modbus.writeNode(modbusObj, cjson.encode(Wnode), data)
    else
        LOG("[Lua] [Write] Failed Over before return ")
        LOG("[modbusServerCB_write] ERROR Wnode Verify <" ..
            "ID:" .. Wnode.ID .. " Reg:" .. Wnode.reg .. " Addr:" .. Wnode.addr .. " Cnt:" .. Wnode.cnt .. ">")
    end
    -- LOG("[modbusServerCB_write] return ")
end

----------------------------------
---模块加载结点
----------------------------------
--modbus加载结点
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, v.db)
    end
end

--modbus加载结点
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

--modbusSvr加载结点
function MBserver_load_station(svr, cfg)
    for k, v in pairs(cfg)
    do
        -- LOG("<load Station" .. cjson.encode(v) .. ">")
        ModbusServer.setStation(svr, cjson.encode(v))
    end
end

----------------------------------
---mqtt初始化
----------------------------------
function mqtt_init()
    LOG("MqttInit")
    mqtt3Obj = mqtt.new()
    mqtt.regCB(mqtt3Obj, "recvMsg", mqttCB_recvMsg)
    -- mqtt.config(mqtt3Obj, "", "gards.mixyun.com", "31883", "aprusdev@aprus", "mixlinker123")

    mqtt.config(mqtt3Obj, "", "10.168.1.100", "1883", "box@aprus", "mixlinker123")
    mqtt.run(mqtt3Obj)
    user.ipconfig_eth0("manual", "10.168.1.11", "255.255.255.0", "", "114.114.114.114")
end

--modbus初始化
function modbus_init()
    MBCfg = config.Modbus
    modbusObj = modbus.new(MBCfg.device.type)
    -- modbus.debug(modbusObj, 0x01010101)
    modbus.config(modbusObj, MBCfg.device.ip, MBCfg.device.port, MBCfg.device.ifname)

    -- modbus.config(modbusObj, MBCfg.device.rate, MBCfg.device.databit, MBCfg.device.stopbit, MBCfg.device.parity)
    modbus_load_collectnodes(modbusObj, MBCfg.node.collect)
    modbus_load_varnodes(modbusObj, MBCfg.node.variable)
    modbus.run(modbusObj)
end

--modbusSvr初始化
function modbusServer_init()
    MBSvrCfg = config.ModbusServer

    mbSvrObj = ModbusServer.new("ModbusServer")
    -- ModbusServer.debug(mbSvrObj, 0x01010101) --ModbusServer显示详尽的调试信息
    ModbusServer.config(mbSvrObj, cjson.encode(MBSvrCfg.ServerConfig))
    MBserver_load_station(mbSvrObj, MBSvrCfg.Stations)
    ModbusServer.debug(mbSvrObj, 0x01) --ModbusServer显示详尽的调试信息
    -- ModbusServer.regCB(mbSvrObj, "write", modbusServerCB_write)
    ModbusServer.run(mbSvrObj)


    MBSvrCfg = config.ModbusServer_2

    mbSvrObj = ModbusServer.new("ModbusServer")
    -- ModbusServer.debug(mbSvrObj, 0x01010101) --ModbusServer显示详尽的调试信息
    ModbusServer.config(mbSvrObj, cjson.encode(MBSvrCfg.ServerConfig))
    MBserver_load_station(mbSvrObj, MBSvrCfg.Stations)
    ModbusServer.debug(mbSvrObj, 0x01) --ModbusServer显示详尽的调试信息
    -- ModbusServer.regCB(mbSvrObj, "write", modbusServerCB_write)
    ModbusServer.run(mbSvrObj)
end

----------------------------------
---模块初始化
----------------------------------
function module_init()
    modbus_init()
    modbusServer_init()
end

----------------------------------
--网口初始化
----------------------------------
function eth_init()
    EthCfg = config.Aprus.eth
    user.ipconfig_eth0(EthCfg.ipmode, EthCfg.inet_addr, EthCfg.netmask, EthCfg.gateway, EthCfg.dns)
end

--加载数据中心的数据块
function loadDatabase(dbs)
    for k, v in pairs(dbs)
    do
        DataCenter.addDB(cjson.encode(v))
    end
end

-- 加载地址映射配置
function loadAddrMaps(maps)
    -- 如果 maps 是 nil,直接返回
    if not maps then
        return
    end

    for _, map in ipairs(maps) do
        -- 查找源数据库配置以获取类型和大小
        local src_cfg = nil
        for _, db in ipairs(config.DataCenter.DB) do
            if db.db_name == map.db_src then
                src_cfg = db
                break
            end
        end

        if not src_cfg then
            LOG("[loadAddrMaps] Source DB %s not found, skip", map.db_src)
            goto continue
        end

        -- 1. 添加基础配置
        local base_cfg = {
            db_src = map.db_src,
            db_dest = map.db_dest,
            db_type = src_cfg.db_type,
            count = src_cfg.count,
            enable = map.enable and 1 or 0
        }
        local ret = DataCenter.addAddrMapBase(cjson.encode(base_cfg))
        if ret ~= 0 then
            LOG("[loadAddrMaps] Add base config failed for %s, skip", map.db_src)
            goto continue
        end

        -- 2. 添加地址映射表
        local mappings_cfg = {}
        for src_addr, dest_addr in pairs(map.addr_maps) do
            mappings_cfg["addr_" .. src_addr .. "_dest"] = dest_addr
        end
        ret = DataCenter.addAddrMapMappings(cjson.encode(mappings_cfg))
        if ret ~= 0 then
            LOG("[loadAddrMaps] Add mappings failed for %s, skip", map.db_src)
            goto continue
        end

        -- -- 3. 添加转发偏移配置
        local forward_cfg = {}
        if map.forward_offsets then
            for src_addr, offsets in pairs(map.forward_offsets) do
                local offset_str = ""
                for i, op in ipairs(offsets) do
                    if i > 1 then
                        offset_str = offset_str .. ","
                    end
                    offset_str = offset_str .. op[1] .. op[2]
                end
                forward_cfg["addr_" .. src_addr .. "_forward_offset"] = offset_str
            end
        end
        ret = DataCenter.addAddrMapForwardOffsets(cjson.encode(forward_cfg))
        if ret ~= 0 then
            LOG("[loadAddrMaps] Add forward offsets failed for %s, skip", map.db_src)
            goto continue
        end

        -- -- 4. 添加控制配置(偏移+节点)
        -- local control_cfg = {}
        -- if map.control_nodes then
        --     for src_addr, ctrl in pairs(map.control_nodes) do
        --         -- 控制偏移
        --         if ctrl.offsets then
        --             local offset_str = ""
        --             for i, op in ipairs(ctrl.offsets) do
        --                 if i > 1 then
        --                     offset_str = offset_str .. ","
        --                 end
        --                 offset_str = offset_str .. op[1] .. op[2]
        --             end
        --             control_cfg["addr_" .. src_addr .. "_control_offset"] = offset_str
        --         end
        --         -- 控制节点
        --         if ctrl.node then
        --             local node = ctrl.node
        --             control_cfg["addr_" .. src_addr .. "_control_node"] = string.format(
        --                 '{"ID":%d,"reg":"%s","addr":%d,"cnt":%d,"method":"%s"}',
        --                 node.ID, node.reg, node.addr, node.cnt, node.method or "none"
        --             )
        --         end
        --     end
        -- end
        -- ret = DataCenter.addAddrMapControl(cjson.encode(control_cfg))
        -- if ret ~= 0 then
        --     LOG("[loadAddrMaps] Add control config failed for %s, skip", map.db_src)
        --     goto continue
        -- end

        -- 5. 添加目标节点配置
        -- local dest_cfg = {}
        -- if map.dest_nodes then
        --     for src_addr, node in pairs(map.dest_nodes) do
        --         dest_cfg["addr_" .. src_addr .. "_dest_node"] = string.format(
        --             '{"ID":%d,"reg":"%s","addr":%d,"cnt":%d,"method":"%s"}',
        --             node.ID, node.reg, node.addr, node.cnt, node.method or "none"
        --         )
        --     end
        -- end
        -- ret = DataCenter.addAddrMapDestNodes(cjson.encode(dest_cfg))
        -- if ret ~= 0 then
        --     LOG("[loadAddrMaps] Add dest nodes failed for %s, skip", map.db_src)
        --     goto continue
        -- end

        -- 6. 提交映射配置
        ret = DataCenter.commitAddrMap()
        if ret ~= 0 then
            LOG("[loadAddrMaps] Commit map failed for %s", map.db_src)
        else
            LOG("[loadAddrMaps] Loaded map successfully: %s->%s", map.db_src, map.db_dest)
        end

        ::continue::
    end
end

-- 加载位地址映射配置
function loadAddrMapsBit(bit_maps)
    -- 如果 bit_maps 是 nil,直接返回
    if not bit_maps then
        return
    end

    for _, bit_map_group in ipairs(bit_maps) do
        if not bit_map_group.enable then
            goto continue
        end

        -- 查找源数据库和目标数据库配置
        local src_cfg = nil
        local dest_cfg = nil
        for _, db in ipairs(config.DataCenter.DB) do
            if db.db_name == bit_map_group.db_src then
                src_cfg = db
            end
            if db.db_name == bit_map_group.db_dest then
                dest_cfg = db
            end
            if src_cfg and dest_cfg then
                break
            end
        end

        if not src_cfg or not dest_cfg then
            LOG("[loadAddrMapsBit] Source or dest DB not found, skip group")
            goto continue
        end

        -- 处理每个位映射配置
        for _, bit_map in ipairs(bit_map_group) do
            -- 确定映射类型
            local map_type = 0 -- 默认short->short
            if src_cfg.db_type == "short" and dest_cfg.db_type == "bit" then
                map_type = 1 -- short->bit
            elseif src_cfg.db_type == "bit" and dest_cfg.db_type == "short" then
                map_type = 2 -- bit->short
            end

            -- 构建位映射配置
            local bit_cfg = {
                db_src = bit_map_group.db_src,
                db_dest = bit_map_group.db_dest,
                enable = bit_map_group.enable and 1 or 0,
                is_offset = bit_map.is_offset and 1 or 0,
                map_type = map_type,
                src_addr = {
                    addr = tonumber(bit_map.src_addr.addr) or 0, -- 确保是数字
                    dBit = tonumber(bit_map.src_addr.dBit) or 0
                },
                dest_addr = {
                    addr = tonumber(bit_map.dest_addr.addr) or 0,
                    dBit = tonumber(bit_map.dest_addr.dBit) or 0
                }
            }
            -- local bit_cfg = {
            --     db_src = bit_map_group.db_src,
            --     db_dest = bit_map_group.db_dest,
            --     enable = bit_map_group.enable and 1 or 0,
            --     is_offset = bit_map.is_offset and 1 or 0,
            --     map_type = map_type,
            --     src_addr = {
            --         addr = bit_map.src_addr.addr,
            --         dBit = bit_map.src_addr.dBit
            --     },
            --     dest_addr = {
            --         addr = bit_map.dest_addr.addr,
            --         dBit = bit_map.dest_addr.dBit
            --     }
            -- }
            PrintTable(bit_cfg)
            -- 添加到位映射
            local ret = DataCenter.addAddrMapBit(cjson.encode(bit_cfg))
            if ret ~= 0 then
                LOG("[loadAddrMapsBit] Add bit map failed: %s->%s",
                    bit_map_group.db_src, bit_map_group.db_dest)
            else
                LOG("[loadAddrMapsBit] Added bit map: %s->%s, src=%d.%d, dest=%d.%d SUCCESS",
                    bit_map_group.db_src, bit_map_group.db_dest,
                    bit_map.src_addr.addr, bit_map.src_addr.dBit,
                    bit_map.dest_addr.addr, bit_map.dest_addr.dBit)
            end
        end

        ::continue::
    end
end

function loadControlConfig(control_configs)
    -- 所有变量均在函数开头定义并初始化
    local ret = 0
    local enable_val = 1
    local node_base = {}
    local node_base_name = ""
    local control_config = nil
    local config_idx = 0
    local control_node = nil
    local node_idx = 0
    local addr_base = {}
    local dest_node = nil
    local dest_idx = 0
    local add_dest_node_params = {}
    local obj_index = 1
    local offsets = {}
    local offset = nil
    local add_offset_params = {}
    modbusObjs = { modbusObj }
    -- 1. 参数合法性检查
    if not control_configs or type(control_configs) ~= "table" then
        LOG("[loadControlConfig] Argument is not a valid table.")
        return nil
    end

    -- 如果传入的是一个空table,直接返回成功
    if #control_configs == 0 then
        LOG("[loadControlConfig] No control configurations to load.")
        return ""
    end

    -- 检查全局modbus对象数组是否存在(这部分逻辑请根据你的实际情况确认)
    -- 注意:modbusObjs 应该在调用此函数前就已正确初始化
    if not modbusObjs or type(modbusObjs) ~= "table" then
        LOG("[loadControlConfig] Global 'modbusObjs' array is not properly initialized.")
        return nil
    end

    LOG("[loadControlConfig] Starting to load control configurations...")

    -- 3. 遍历所有控制配置
    for node_idx, node_ctrl in ipairs(control_configs) do
        -- 检查单个控制配置的完整性
        -- if not node_ctrl.name or type(node_ctrl.name) ~= "string" then
        --     LOG("[loadControlConfig] The " ..
        --         config_idx .. "th control config is missing or has an invalid 'name' field.")
        --     return nil
        -- end
        -- if not node_ctrl.db_src or type(node_ctrl.db_src) ~= "string" then
        --     LOG("[loadControlConfig] Control config '" ..
        --         node_ctrl.name .. "' is missing or has an invalid 'db_src' field.")
        --     return nil
        -- end
        -- if not node_ctrl.nodes or type(node_ctrl.nodes) ~= "table" then
        --     LOG("[loadControlConfig] Control config '" ..
        --         node_ctrl.name .. "' is missing or has an invalid 'nodes' field.")
        --     return nil
        -- end

        LOG("[loadControlConfig] Processing control config: " .. node_ctrl.name)

        -- 3.1 添加控制配置(调用C接口)
        enable_val = node_ctrl.enable ~= nil and (node_ctrl.enable and 1 or 0) or 1
        node_base = {
            name = node_ctrl.name,
            db_src = node_ctrl.db_src,
            enable = enable_val
        }
        LOG("[loadControlConfig] [Step 1-nodeBase [" ..
            "node_idx = " .. node_idx .. " ;]" .. "Add control config: " .. cjson.encode(node_base))
        node_base_name = DataCenter.addControlConfig(cjson.encode(node_base))
        if not node_base_name then
            LOG("[loadControlConfig] Failed to add control config '" .. node_ctrl.name .. "'.")
            return nil
        end

        -- 3.2 遍历当前控制配置下的所有控制节点
        for addr_idx, addr_ctrl in ipairs(node_ctrl.addrs) do
            if not addr_ctrl.src_addr or not addr_ctrl.dest_nodes then
                LOG("[loadControlConfig] Skipping invalid node (index: " ..
                    addr_idx .. ") in config '" .. node_ctrl.name .. "'.")
                goto continue_node_loop
            end

            -- 3.2.1 添加控制节点(调用C接口)
            addr_base = {
                config_name = node_base_name,
                addr_type = addr_ctrl.addr_type or "short",
                db_src_type = addr_ctrl.db_src_type or "short",
                addr = addr_ctrl.src_addr.addr or 0,
                dBit = addr_ctrl.src_addr.dBit or 0
            }
            LOG("[loadControlConfig] [Step 2-addrBase/" ..
                "node_idx = %d ;, addr_idx = %d ;" .. "] Add control node: " .. cjson.encode(addr_base), node_idx,
                addr_idx)
            ret = DataCenter.addControlNode(cjson.encode(addr_base))
            if ret ~= 0 then
                LOG("[loadControlConfig] Failed to add control node for config '" ..
                    node_base_name .. "', Error code: " .. ret)
                return nil
            end

            -- 3.2.2 遍历当前控制节点下的所有目标节点
            for dest_idx, dest_node in ipairs(addr_ctrl.dest_nodes) do
                -- 3.2.2.1 添加目标节点(调用C接口)
                add_dest_node_params = {
                    config_name = node_base_name,
                    src_addr = addr_ctrl.src_addr.addr or 0,
                    src_dBit = addr_ctrl.src_addr.dBit or 0,
                    ID = dest_node.ID,
                    reg = dest_node.reg,
                    addr = dest_node.addr,
                    cnt = dest_node.cnt or 1,
                    method = dest_node.method or "modbus"
                }
                LOG("[loadControlConfig] [Step 3-addr-destAddr/" ..
                    "node_idx = " ..
                    node_idx ..
                    " ;addr_idx = " ..
                    addr_idx ..
                    " ;dest_idx = " .. dest_idx .. " ;] Add destination node: " .. cjson.encode(add_dest_node_params))

                -- 从全局modbus对象数组中获取对应的对象
                obj_index = dest_node.obj or 1 -- 默认使用第一个Modbus对象

                if type(obj_index) ~= "number" or obj_index < 1 or obj_index > #modbusObjs then
                    LOG("[loadControlConfig] Invalid modbus obj index '" ..
                        tostring(obj_index) .. "' for destination node in config: " .. node_base_name)
                    return nil
                end

                Obj_ctrl = modbusObjs[obj_index]

                DataCenter.addDestNode(Obj_ctrl, cjson.encode(add_dest_node_params))

                -- -- 3.2.2.2 如果有偏移操作,为目标节点添加偏移
                -- if dest_node.dOffset and type(dest_node.dOffset) == "table" then
                --     -- 兼容 dOffset 是一个操作数或一个操作数数组的情况
                --     offsets = type(dest_node.dOffset[1]) == "table" and dest_node.dOffset or { dest_node.dOffset }

                --     for _, offset in ipairs(offsets) do
                --         add_offset_params = {
                --             config_name = node_base_name,
                --             src_addr = addr_ctrl.src_addr.addr or 0,
                --             src_dBit = addr_ctrl.src_addr.dBit or 0,
                --             dest_addr = dest_node.addr or 0,
                --             op = offset.op or "+",
                --             value = offset.value or 0.0
                --         }
                --         LOG("[loadControlConfig] [Step 4/" ..
                --             addr_idx ..
                --             ".2." ..
                --             addr_idx ..
                --             "." .. dest_idx .. "] Add destination offset: " .. cjson.encode(add_offset_params))
                --         ret = DataCenter.addDestOffset(cjson.encode(add_offset_params))
                --         if ret ~= 0 then
                --             LOG("[loadControlConfig] Failed to add destination offset for config '" ..
                --                 node_base_name .. "', Error code: " .. ret)
                --             return nil
                --         end
                --     end
                -- end
            end
            ::continue_node_loop::
        end

        LOG("[loadControlConfig] Control config '" .. node_base_name .. "' loaded successfully.")
    end

    LOG("[loadControlConfig] All control configurations have been processed.")
    -- 返回最后一个成功加载的配置名称
    return control_configs[#control_configs].name
end

-- 数据中心地址映射主函数
function dataCenter_addrMap()
    local ret = DataCenter.addrMapProcess()
    if ret ~= 0 then
        LOG("[dataCenter_addrMap] Process failed with code %d", ret)
    end
end

----------------------------------
--数据中心初始化
----------------------------------
function dataCenter_init()
    loadDatabase(config.DataCenter.DB)
    LOG("[dataCenter_init] DataCenter initialized")
end

--------------------------------
---mixctrl 系统初始化
--------------------------------
function mixctrl_init()
    -- user.remoteSvr(cjson.encode(config.remoteSvr))
    dataCenter_init()
    mqtt_init()
    module_init()
    -- eth_init()
    -- timer_init()
end

--------------------------------
---mixctrl 系统启动
--------------------------------
function mixctrl_start()
    os.execute("usleep 20000")

    os.execute("ip route del 10.168.1.1/32 dev eth0 2>/dev/null")
    os.execute("ip route add 10.168.1.0/24 dev eth0 2>/dev/null")
    os.execute("ifconfig eth0 10.168.1.11 netmask 255.255.255.0 2>/dev/null")
    --os.execute("ifconfig eth0:9 down 2>/dev/null")
    os.execute("ifconfig eth0:9 192.168.123.101>/dev/null")
    -- 初始化地址映射
    local ret = DataCenter.addrMapInit()
    if ret ~= 0 then
        LOG("[mixctrl_start] Init failed with code %d", ret)
        return false
    end

    -- 开启错误日志(默认已开启)
    DataCenter.setAddrMapDebug(0, 1)
    -- -- 开启信息日志
    -- DataCenter.setAddrMapDebug(1, 1)
    -- -- 开启接收详情日志
    -- DataCenter.setAddrMapDebug(2, 1)
    -- -- 开启发送详情日志
    -- DataCenter.setAddrMapDebug(3, 1)

    -- 加载地址映射
    loadAddrMaps(config.DataCenter.addr_Maps)

    -- 加载位地址映射
    loadAddrMapsBit(config.DataCenter.addr_Maps_bit)
    DataCenter.controlInit()
    DataCenter.setControlDebug(0x01010101)
    loadControlConfig(config.DataCenter.control_nodes)
    while true do
        dataCenter_addrMap()
        DataCenter.controlProcess()
        os.execute("usleep 300000")
    end
end

--------------------------------
--mixctrl系统主流程
--------------------------------
mixctrl_init()

mixctrl_start()

2.2 config.lua

return
{
    AprusX = {
        ipmode = "none", --auto/manual/none
        inet_addr = "192.168.1.234",
        netmask = "255.255.255.0",
        luaver = "V00.R",
        devinfo = "ForwardTCPDev",
    },

    DataCenter = {
        DB = {
            -- db1
            { db_name = "db1_AO",        db_type = "short", addr = 0, count = 100 },
            { db_name = "db2_AO",        db_type = "short", addr = 0, count = 100 },
            { db_name = "db3_AO",        db_type = "short", addr = 0, count = 100 },
            { db_name = "db1_AO_dest",   db_type = "short", addr = 0, count = 100 },
            { db_name = "db2_AO_dest",   db_type = "short", addr = 0, count = 100 },
            { db_name = "db3_AO_dest",   db_type = "short", addr = 0, count = 100 },
            { db_name = "db1_6_AO_dest", db_type = "short", addr = 0, count = 100 },
            { db_name = "db2_6_AO_dest", db_type = "short", addr = 0, count = 100 },
            { db_name = "db3_6_AO_dest", db_type = "short", addr = 0, count = 100 },
            { db_name = "db11_AI_dest",  db_type = "short", addr = 0, count = 100 },
            { db_name = "db12_AI_dest",  db_type = "short", addr = 0, count = 100 },
            { db_name = "db13_AI_dest",  db_type = "short", addr = 0, count = 100 },

        },

        --同类型地址映射
        addr_Maps = {
            --[[
                1.控制配置(源数据)(modbus客户端配置)
                那么其中的地址也是addr_maps中的源地址,即addr_maps中的左侧的地址
            --]]

            --[[
                2.转发配置(目标地址)(modbusSvr的配置)
                那么其中的地址也是addr_maps中的源地址,即addr_maps中的左侧的地址
            --]]

            --3.偏移不针对bit,仅针对short

            --4.偏移,short的范围是两个字节,超出范围数据会丢失,不正确;

            --5.不论是转发配置还是控制配置,都需要在addr_maps中配置地址映射,若不映射仅配置相同地址即可,如[13] = 13,

            --6.不配做地址映射的地址的数据,在控制配置(源数据)(modbus客户端配置)为modbus客户端的数据;而转发的数据则无数据为0

            -- db1_AO
            {
                enable = true,
                db_src = "db1_AO",
                db_dest = "db1_AO_dest",
                addr_maps = {
                    [0] = 13, --机组排气压力_Mpa;采集到的值*145.04 后转到 1从站,3功能码,13寄存器地址中
                    [1] = 11, --排气温度_℃;采集到的值 后转到 1从站,3功能码,11寄存器地址中给
                    [2] = 14, --油气桶压力_Mpa;采集到的值*145.04 后转到 1从站,3功能码,14寄存器地址中
                    [3] = 12, --油分后温度_℃;采集到的值 后转到 1从站,3功能码,12寄存器地址中
                    [4] = 15, --A相绕组温度_℃;采集到的值 后转到 1从站,3功能码,15寄存器地址中
                    [5] = 16, --B相绕组温度_℃;采集到的值 后转到 1从站,3功能码,16寄存器地址中
                    [6] = 19, --C相绕组温度_℃;采集到的值 后转到 1从站,3功能码,19寄存器地址中
                    [7] = 7, --进线电压_V;采集到的值 后转到 1从站,3功能码,7寄存器地址中
                    [8] = 8, --进线电流_A;采集到的值 后转到 1从站,3功能码,8寄存器地址中
                    [38] = 1, --机组运行时间H_小时;采集到的值 后转到 1从站,3功能码,1寄存器地址中
                    [39] = 0, --机组运行时间L_小时;采集到的值 后转到 1从站,3功能码,0寄存器地址中
                    [40] = 3, --机组加载时间H_小时;采集到的值 后转到 1从站,3功能码,3寄存器地址中
                    [41] = 2, --机组加载时间L_小时;采集到的值 后转到 1从站,3功能码,2寄存器地址中
                },
                --[[
                    2.转发配置(源地址)(modbusSvr的配置)
                    那么其中的地址也是addr_maps中的目标地址,即addr_maps中的左侧的地址
                --]]
                forward_offsets = {
                    -- [0] = { { "*", 1000 }, { "/", 2 } }, --4.偏移,short的范围是两个字节,超出范围数据会丢失,不正确;
                    [0] = { { "*", 145.04 }, { "/", 100 } },
                    [2] = { { "*", 145.04 }, { "/", 100 } },
                    [1] = { { "/", 10 }, { "+", 20 } },
                    [3] = { { "/", 10 }, { "+", 20 } },
                    [4] = { { "/", 10 }, { "+", 20 } },
                    [5] = { { "/", 10 }, { "+", 20 } },
                    [6] = { { "/", 10 }, { "+", 20 } },
                },
            },


            -- db2_AO
            {
                enable = true,
                db_src = "db2_AO",
                db_dest = "db2_AO_dest",
                addr_maps = {
                    [0] = 13, --机组排气压力_Mpa;采集到的值*145.04 后转到 1从站,3功能码,13寄存器地址中
                    [1] = 11, --排气温度_℃;采集到的值 后转到 1从站,3功能码,11寄存器地址中给
                    [2] = 14, --油气桶压力_Mpa;采集到的值*145.04 后转到 1从站,3功能码,14寄存器地址中
                    [3] = 12, --油分后温度_℃;采集到的值 后转到 1从站,3功能码,12寄存器地址中
                    [4] = 15, --A相绕组温度_℃;采集到的值 后转到 1从站,3功能码,15寄存器地址中
                    [5] = 16, --B相绕组温度_℃;采集到的值 后转到 1从站,3功能码,16寄存器地址中
                    [6] = 19, --C相绕组温度_℃;采集到的值 后转到 1从站,3功能码,19寄存器地址中
                    [7] = 7, --进线电压_V;采集到的值 后转到 1从站,3功能码,7寄存器地址中
                    [8] = 8, --进线电流_A;采集到的值 后转到 1从站,3功能码,8寄存器地址中
                    [38] = 1, --机组运行时间H_小时;采集到的值 后转到 1从站,3功能码,1寄存器地址中
                    [39] = 0, --机组运行时间L_小时;采集到的值 后转到 1从站,3功能码,0寄存器地址中
                    [40] = 3, --机组加载时间H_小时;采集到的值 后转到 1从站,3功能码,3寄存器地址中
                    [41] = 2, --机组加载时间L_小时;采集到的值 后转到 1从站,3功能码,2寄存器地址中
                },
                --[[
                    2.转发配置(源地址)(modbusSvr的配置)
                    那么其中的地址也是addr_maps中的目标地址,即addr_maps中的左侧的地址
                --]]
                forward_offsets = {
                    -- [0] = { { "*", 1000 }, { "/", 2 } }, --4.偏移,short的范围是两个字节,超出范围数据会丢失,不正确;
                    [0] = { { "*", 145.04 }, { "/", 100 } },
                    [2] = { { "*", 145.04 }, { "/", 100 } },
                    [1] = { { "/", 10 }, { "+", 20 } },
                    [3] = { { "/", 10 }, { "+", 20 } },
                    [4] = { { "/", 10 }, { "+", 20 } },
                    [5] = { { "/", 10 }, { "+", 20 } },
                    [6] = { { "/", 10 }, { "+", 20 } },
                },
            },


            -- db3_AO
            {
                enable = true,
                db_src = "db3_AO",
                db_dest = "db3_AO_dest",
                addr_maps = {
                    [0] = 13, --机组排气压力_Mpa;采集到的值*145.04 后转到 1从站,3功能码,13寄存器地址中
                    [1] = 11, --排气温度_℃;采集到的值 后转到 1从站,3功能码,11寄存器地址中给
                    [2] = 14, --油气桶压力_Mpa;采集到的值*145.04 后转到 1从站,3功能码,14寄存器地址中
                    [3] = 12, --油分后温度_℃;采集到的值 后转到 1从站,3功能码,12寄存器地址中
                    [4] = 15, --A相绕组温度_℃;采集到的值 后转到 1从站,3功能码,15寄存器地址中
                    [5] = 16, --B相绕组温度_℃;采集到的值 后转到 1从站,3功能码,16寄存器地址中
                    [6] = 19, --C相绕组温度_℃;采集到的值 后转到 1从站,3功能码,19寄存器地址中
                    [7] = 7, --进线电压_V;采集到的值 后转到 1从站,3功能码,7寄存器地址中
                    [8] = 8, --进线电流_A;采集到的值 后转到 1从站,3功能码,8寄存器地址中
                    [38] = 1, --机组运行时间H_小时;采集到的值 后转到 1从站,3功能码,1寄存器地址中
                    [39] = 0, --机组运行时间L_小时;采集到的值 后转到 1从站,3功能码,0寄存器地址中
                    [40] = 3, --机组加载时间H_小时;采集到的值 后转到 1从站,3功能码,3寄存器地址中
                    [41] = 2, --机组加载时间L_小时;采集到的值 后转到 1从站,3功能码,2寄存器地址中
                },
                --[[
                    2.转发配置(源地址)(modbusSvr的配置)
                    那么其中的地址也是addr_maps中的目标地址,即addr_maps中的左侧的地址
                --]]
                forward_offsets = {
                    -- [0] = { { "*", 1000 }, { "/", 2 } }, --4.偏移,short的范围是两个字节,超出范围数据会丢失,不正确;
                    [0] = { { "*", 145.04 }, { "/", 100 } },
                    [2] = { { "*", 145.04 }, { "/", 100 } },
                    [1] = { { "/", 10 }, { "+", 20 } },
                    [3] = { { "/", 10 }, { "+", 20 } },
                    [4] = { { "/", 10 }, { "+", 20 } },
                    [5] = { { "/", 10 }, { "+", 20 } },
                    [6] = { { "/", 10 }, { "+", 20 } },
                },
            },



            -- db1_AO
            {
                enable = true,
                db_src = "db1_AO",
                db_dest = "db11_AI_dest",
                addr_maps = {
                    [51] = 3, --油分后温度_℃;采集到的值 后转到 12从站,4功能码,3寄存器地址中
                    [4] = 0, --A相绕组温度_℃;采集到的值 后转到 12从站,4功能码,0寄存器地址中
                    [5] = 1, --B相绕组温度_℃;采集到的值 后转到 12从站,4功能码,1寄存器地址中
                    [6] = 2, --C相绕组温度_℃;采集到的值 后转到 12从站,4功能码,2寄存器地址中

                },
                --[[
                    2.转发配置(源地址)(modbusSvr的配置)
                    那么其中的地址也是addr_maps中的目标地址,即addr_maps中的左侧的地址
                --]]
                forward_offsets = {
                    [51] = { { "*", 1 } },
                    [4] = { { "*", 1 } },
                    [5] = { { "*", 1 } },
                    [6] = { { "*", 1 } },
                },
            },


            -- db2_AO
            {
                enable = true,
                db_src = "db2_AO",
                db_dest = "db12_AI_dest",
                addr_maps = {
                    [51] = 3, --油分后温度_℃;采集到的值 后转到 12从站,4功能码,3寄存器地址中
                    [4] = 0, --A相绕组温度_℃;采集到的值 后转到 12从站,4功能码,0寄存器地址中
                    [5] = 1, --B相绕组温度_℃;采集到的值 后转到 12从站,4功能码,1寄存器地址中
                    [6] = 2, --C相绕组温度_℃;采集到的值 后转到 12从站,4功能码,2寄存器地址中

                },
                --[[
                    2.转发配置(源地址)(modbusSvr的配置)
                    那么其中的地址也是addr_maps中的目标地址,即addr_maps中的左侧的地址
                --]]
                forward_offsets = {
                    [51] = { { "*", 1 } },
                    [4] = { { "*", 1 } },
                    [5] = { { "*", 1 } },
                    [6] = { { "*", 1 } },
                },
            },


            -- db3_AO
            {
                enable = true,
                db_src = "db3_AO",
                db_dest = "db13_AI_dest",
                addr_maps = {
                    [51] = 3, --油分后温度_℃;采集到的值 后转到 12从站,4功能码,3寄存器地址中
                    [4] = 0, --A相绕组温度_℃;采集到的值 后转到 12从站,4功能码,0寄存器地址中
                    [5] = 1, --B相绕组温度_℃;采集到的值 后转到 12从站,4功能码,1寄存器地址中
                    [6] = 2, --C相绕组温度_℃;采集到的值 后转到 12从站,4功能码,2寄存器地址中

                },
                --[[
                    2.转发配置(源地址)(modbusSvr的配置)
                    那么其中的地址也是addr_maps中的目标地址,即addr_maps中的左侧的地址
                --]]
                forward_offsets = {
                    [51] = { { "*", 1 } },
                    [4] = { { "*", 1 } },
                    [5] = { { "*", 1 } },
                    [6] = { { "*", 1 } },
                },
            },
        },

        --位址映射
        addr_Maps_bit =
        {
            {
                enable = true,
                db_src = "db1_AO",
                db_dest = "db1_AO_dest",
                --short->short
                {       --系统运行:采集到的值后转到 1从站,3功能码,23寄存器地址,bit9位
                    --需考虑src和dest的类型,short(中的bit)-->short(中的bit); short-->bit;
                    is_offset = false, --值是否反相
                    src_addr = { addr = 28, dBit = 12 },
                    dest_addr = { addr = 23, dBit = 9 },
                },
                { --故障输出:采集到的值后转到 1从站,3功能码,23寄存器地址,bit13位
                    src_addr = { addr = 28, dBit = 13 },
                    dest_addr = { addr = 23, dBit = 13 },
                },
                { --加载阀输出:采集到的值后转到 1从站,3功能码,23寄存器地址,bit10位
                    src_addr = { addr = 28, dBit = 15 },
                    dest_addr = { addr = 23, dBit = 10 },
                },
            },


            {
                enable = true,
                db_src = "db2_AO",
                db_dest = "db2_AO_dest",
                --short->short
                {       --系统运行:采集到的值后转到 1从站,3功能码,23寄存器地址,bit9位
                    --需考虑src和dest的类型,short(中的bit)-->short(中的bit); short-->bit;
                    is_offset = false, --值是否反相
                    src_addr = { addr = 28, dBit = 12 },
                    dest_addr = { addr = 23, dBit = 9 },
                },
                { --故障输出:采集到的值后转到 1从站,3功能码,23寄存器地址,bit13位
                    src_addr = { addr = 28, dBit = 13 },
                    dest_addr = { addr = 23, dBit = 13 },
                },
                { --加载阀输出:采集到的值后转到 1从站,3功能码,23寄存器地址,bit10位
                    src_addr = { addr = 28, dBit = 15 },
                    dest_addr = { addr = 23, dBit = 10 },
                },
            },


            {
                enable = true,
                db_src = "db3_AO",
                db_dest = "db3_AO_dest",
                --short->short
                {       --系统运行:采集到的值后转到 1从站,3功能码,23寄存器地址,bit9位
                    --需考虑src和dest的类型,short(中的bit)-->short(中的bit); short-->bit;
                    is_offset = false, --值是否反相
                    src_addr = { addr = 28, dBit = 12 },
                    dest_addr = { addr = 23, dBit = 9 },
                },
                { --故障输出:采集到的值后转到 1从站,3功能码,23寄存器地址,bit13位
                    src_addr = { addr = 28, dBit = 13 },
                    dest_addr = { addr = 23, dBit = 13 },
                },
                { --加载阀输出:采集到的值后转到 1从站,3功能码,23寄存器地址,bit10位
                    src_addr = { addr = 28, dBit = 15 },
                    dest_addr = { addr = 23, dBit = 10 },
                },
            },
        },

        --控制节点:当src_addr的值改变时,按控制节点的规则进行控制
        control_nodes =
        {
            --modbusSvr_485-1_ID-1
            {
                enable = true,
                db_src = "db1_6_AO_dest",
                name = "Control_Start_Stop_485_1_ID_1",
                addrs =
                {
                    {
                        addr_type = "short",
                        src_addr = { addr = 0 }, --dBit可以不存在,默认为0
                        -- src_val = { 1, 2 }, --可以不存在,拿到多少写入多少
                        dest_nodes =
                        {
                            --控制结点的值偏移,可以不偏移也可以偏移,从src地址拿到的值运算后写入目标地址
                            { ID = 1, reg = "6", addr = 0, dtype = "ushort", dStyle = { "L1_6_30" }, method = "modbus", obj = 1 },
                        }
                    },
                }
            },

            --modbusSvr_485-1_ID-2
            {
                enable = true,
                db_src = "db2_6_AO_dest",
                name = "Control_Start_Stop_485_1_ID_2",
                addrs =
                {
                    {
                        addr_type = "short",
                        src_addr = { addr = 0 }, --dBit可以不存在,默认为0
                        -- src_val = { 1, 2 }, --可以不存在,拿到多少写入多少
                        dest_nodes =
                        {
                            --控制结点的值偏移,可以不偏移也可以偏移,从src地址拿到的值运算后写入目标地址
                            { ID = 2, reg = "6", addr = 0, dtype = "ushort", dStyle = { "L1_6_30" }, method = "modbus", obj = 1 },
                        }
                    },
                }
            },


            --modbusSvr_485-1_ID-3
            {
                enable = true,
                db_src = "db3_6_AO_dest",
                name = "Control_Start_Stop_485_1_ID_3",
                addrs =
                {
                    {
                        addr_type = "short",
                        src_addr = { addr = 0 }, --dBit可以不存在,默认为0
                        -- src_val = { 1, 2 }, --可以不存在,拿到多少写入多少
                        dest_nodes =
                        {
                            --控制结点的值偏移,可以不偏移也可以偏移,从src地址拿到的值运算后写入目标地址
                            { ID = 3, reg = "6", addr = 0, dtype = "ushort", dStyle = { "L1_6_30" }, method = "modbus", obj = 1 },
                        }
                    },
                }
            },

            --modbusSvr_485-2_ID-1
            {
                enable = true,
                db_src = "db1_6_AO_dest",
                name = "Control_Start_Stop_485_2_ID_1",
                addrs =
                {
                    {
                        addr_type = "short",
                        src_addr = { addr = 0 }, --dBit可以不存在,默认为0
                        -- src_val = { 1, 2 }, --可以不存在,拿到多少写入多少
                        dest_nodes =
                        {
                            --控制结点的值偏移,可以不偏移也可以偏移,从src地址拿到的值运算后写入目标地址
                            { ID = 1, reg = "6", addr = 0, dtype = "ushort", dStyle = { "L1_6_30" }, method = "modbus", obj = 1 },
                        }
                    },
                }
            },

            --modbusSvr_485-2_ID-2
            {
                enable = true,
                db_src = "db2_6_AO_dest",
                name = "Control_Start_Stop_485_2_ID_2",
                addrs =
                {
                    {
                        addr_type = "short",
                        src_addr = { addr = 0 }, --dBit可以不存在,默认为0
                        -- src_val = { 1, 2 }, --可以不存在,拿到多少写入多少
                        dest_nodes =
                        {
                            --控制结点的值偏移,可以不偏移也可以偏移,从src地址拿到的值运算后写入目标地址
                            { ID = 2, reg = "6", addr = 0, dtype = "ushort", dStyle = { "L1_6_30" }, method = "modbus", obj = 1 },
                        }
                    },
                }
            },


            --modbusSvr_485-2_ID-3
            {
                enable = true,
                db_src = "db3_6_AO_dest",
                name = "Control_Start_Stop_485_2_ID_3",
                addrs =
                {
                    {
                        addr_type = "short",
                        src_addr = { addr = 0 }, --dBit可以不存在,默认为0
                        -- src_val = { 1, 2 }, --可以不存在,拿到多少写入多少
                        dest_nodes =
                        {
                            --控制结点的值偏移,可以不偏移也可以偏移,从src地址拿到的值运算后写入目标地址
                            { ID = 3, reg = "6", addr = 0, dtype = "ushort", dStyle = { "L1_6_30" }, method = "modbus", obj = 1 },
                        }
                    },
                }
            },
        }
    },

    ModbusServer =
    {
        ServerConfig =
        {
            type = "rtu", --"rtu"/"ascii"
            rs485 = 1,
            rate = 9600,
            databit = 8,
            stopbit = 1,
            parity = "None", -- None/Odd/Even
        },
        Stations =
        {
            --{station=站号(必要), db1=可读写开关量(非必要), db2=只读开关量(非必要), db3=可读写16位数据(非必要), db4=只读16位数据(非必要)},
            --例1: {station=1, db1="AXio_DO_2", db2="AXio_DI_4", db3="AXio_AO_n", db4="AXio_AI_4"},
            --例2: {station=2, db1="DB_1_100", db2="DB_2_100", db3="DB_3_100", db4="DB_4_100"},
            -- 站配置(关联dest库)
            { station = 1,  db3 = "db1_AO_dest",   db6 = "db1_6_AO_dest" },
            { station = 2,  db3 = "db2_AO_dest",   db6 = "db2_6_AO_dest" },
            { station = 3,  db3 = "db3_AO_dest",   db6 = "db3_6_AO_dest" },
            { station = 11, db3 = "db1_6_AO_dest", db4 = "db11_AI_dest" },
            { station = 12, db3 = "db2_6_AO_dest", db4 = "db12_AI_dest" },
            { station = 13, db3 = "db3_6_AO_dest", db4 = "db13_AI_dest" },
        },
    },


    ModbusServer_2 =
    {
        ServerConfig =
        {
            type = "rtu", --"rtu"/"ascii"
            rs485 = 2,
            rate = 9600,
            databit = 8,
            stopbit = 1,
            parity = "None", -- None/Odd/Even
        },
        Stations =
        {
            --{station=站号(必要), db1=可读写开关量(非必要), db2=只读开关量(非必要), db3=可读写16位数据(非必要), db4=只读16位数据(非必要)},
            --例1: {station=1, db1="AXio_DO_2", db2="AXio_DI_4", db3="AXio_AO_n", db4="AXio_AI_4"},
            --例2: {station=2, db1="DB_1_100", db2="DB_2_100", db3="DB_3_100", db4="DB_4_100"},
            -- 站配置(关联dest库)
            { station = 1,  db3 = "db1_AO_dest",   db6 = "db1_6_AO_dest" },
            { station = 2,  db3 = "db2_AO_dest",   db6 = "db2_6_AO_dest" },
            { station = 3,  db3 = "db3_AO_dest",   db6 = "db3_6_AO_dest" },
            { station = 11, db3 = "db1_6_AO_dest", db4 = "db11_AI_dest" },
            { station = 12, db3 = "db2_6_AO_dest", db4 = "db12_AI_dest" },
            { station = 13, db3 = "db3_6_AO_dest", db4 = "db13_AI_dest" },
        },
    },

    Modbus = {
        device = {
            type = "tcp",
            ip = "192.168.123.10",
            port = "8000",
            ifname = "eth0",
            -- type = "rtu", --"rtu"/"ascii"
            -- rate = 9600,
            -- databit = 8,
            -- stopbit = 1,
            -- parity = "None", -- None/Odd/Even
        },
        node = {
            collect = {
                { ID = 1, reg = "3", addr = 0, cnt = 64, db = "db1_AO" }, -- db1_AO count=100
                { ID = 2, reg = "3", addr = 0, cnt = 64, db = "db2_AO" }, -- db1_AO count=100
                { ID = 3, reg = "3", addr = 0, cnt = 64, db = "db3_AO" }, -- db1_AO count=100
            },
            variable = {

                { ID = 1, reg = "3", addr = 0,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_0" },    dOffset = { { "/", 100 } } },               --机组排气压力_Mpa;采集到的值*145.04 后转到 1从站,3功能码,13寄存器地址中
                { ID = 1, reg = "3", addr = 1,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_1" },    dOffset = { { "/", 10 } } },                --排气温度_℃;采集到的值 后转到 1从站,3功能码,11寄存器地址中给
                { ID = 1, reg = "3", addr = 2,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_2" },    dOffset = { { "/", 100 } } },               --油气桶压力_Mpa;采集到的值*145.04 后转到 1从站,3功能码,14寄存器地址中
                { ID = 1, reg = "3", addr = 3,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_3" },    dOffset = { { "/", 10 } } },                --油分后温度_℃;采集到的值 后转到 1从站,3功能码,12寄存器地址中
                { ID = 1, reg = "3", addr = 4,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_4" },    dOffset = { { "/", 10 } } },                --A相绕组温度_℃;采集到的值 后转到 1从站,3功能码,15寄存器地址中
                { ID = 1, reg = "3", addr = 5,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_5" },    dOffset = { { "/", 10 } } },                --B相绕组温度_℃;采集到的值 后转到 1从站,3功能码,16寄存器地址中
                { ID = 1, reg = "3", addr = 6,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_6" },    dOffset = { { "/", 10 } } },                --C相绕组温度_℃;采集到的值 后转到 1从站,3功能码,19寄存器地址中
                { ID = 1, reg = "3", addr = 7,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_7" },    dOffset = { { "/", 10 } } },                --进线电压_V;采集到的值 后转到 1从站,3功能码,7寄存器地址中
                { ID = 1, reg = "3", addr = 8,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_8" },    dOffset = { { "/", 10 } } },                --进线电流_A;采集到的值 后转到 1从站,3功能码,8寄存器地址中
                { ID = 1, reg = "3", addr = 9,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_9" },    dOffset = { { "/", 100 } } },               --主机变频器运行频率_HZ
                { ID = 1, reg = "3", addr = 10, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_10" },   dOffset = { { "/", 100 } } },               --主机变频器给定频率_HZ
                { ID = 1, reg = "3", addr = 11, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_11" },   dOffset = { { "/", 10 } } },                --主机变频器母线电压_V
                { ID = 1, reg = "3", addr = 12, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_12" },   dOffset = { { "/", 1 } } },                 --主机变频器输出电压_V
                { ID = 1, reg = "3", addr = 13, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_13" },   dOffset = { { "/", 10 } } },                --主机变频器运行电流_A
                { ID = 1, reg = "3", addr = 14, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_14" },   dOffset = { { "/", 1 } } },                 --主机变频器运行转速_rpm
                { ID = 1, reg = "3", addr = 15, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_15" },   dOffset = { { "/", 1000 } } },              --主机变频器输出功率_KW
                { ID = 1, reg = "3", addr = 17, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_17" },   dOffset = { { "/", 100 } } },               --风机变频器输出频率_HZ
                { ID = 1, reg = "3", addr = 20, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_20" },   dOffset = { { "/", 1 } } },                 --风机变频器输出电压_V
                { ID = 1, reg = "3", addr = 21, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_21" },   dOffset = { { "/", 10 } } },                --风机变频器输出电流_A
                { ID = 1, reg = "3", addr = 22, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_22" },   dOffset = { { "/", 1 } } },                 --风机变频器运行转速_Rpm
                { ID = 1, reg = "3", addr = 23, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_23" },   dOffset = { { "/", 1000 } } },              --风机变频器输出功率_KW
                { ID = 1, reg = "3", addr = 38, dtype = "uint",   format = "ABCD",  pMode = { 1, 3 },         dStyle = { "L1_3_38" },     dOffset = { { "/", 1 } } }, --机组运行时间_小时
                { ID = 1, reg = "3", addr = 40, dtype = "uint",   format = "ABCD",  pMode = { 1, 3 },         dStyle = { "L1_3_40" },     dOffset = { { "/", 1 } } }, --机组加载时间_小时
                { ID = 1, reg = "3", addr = 42, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_42" },   dOffset = { { "/", 100 } } },               --恒定压力_Mpa
                { ID = 1, reg = "3", addr = 43, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_43" },   dOffset = { { "/", 100 } } },               --卸载压力_Mpa
                { ID = 1, reg = "3", addr = 44, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_44" },   dOffset = { { "/", 100 } } },               --加载压力_Mpa
                { ID = 1, reg = "3", addr = 45, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_45" },   dOffset = { { "/", 1 } } },                 --油滤使用时间_小时
                { ID = 1, reg = "3", addr = 46, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_46" },   dOffset = { { "/", 1 } } },                 --空滤使用时间_小时
                { ID = 1, reg = "3", addr = 47, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_47" },   dOffset = { { "/", 1 } } },                 --油分器使用时间_小时
                { ID = 1, reg = "3", addr = 48, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_48" },   dOffset = { { "/", 1 } } },                 --润滑油使用时间_小时
                { ID = 1, reg = "3", addr = 49, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_49" },   dOffset = { { "/", 1 } } },                 --润滑脂使用时间_小时
                { ID = 1, reg = "3", addr = 50, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_50" },   dOffset = { { "/", 1 } } },                 --润滑脂使用时间_小时
                { ID = 1, reg = "3", addr = 51, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_51" },   dOffset = { { "/", 10 } } },                --电机轴承温度_℃
                { ID = 1, reg = "3", addr = 52, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_52" },   dOffset = { { "/", 10 } } },                --注油压力_Mpa
                { ID = 1, reg = "3", addr = 53, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_53" },   dOffset = { { "/", 10 } } },                --油分后压力_Mpa
                { ID = 1, reg = "3", addr = 54, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_54" },   dOffset = { { "/", 10 } } },                --主机前振动_mm/s
                { ID = 1, reg = "3", addr = 55, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_55" },   dOffset = { { "/", 10 } } },                --主机后振动_mm/s
                { ID = 1, reg = "3", addr = 56, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_56" },   dOffset = { { "/", 10 } } },                --电机前振动_mm/s
                { ID = 1, reg = "3", addr = 57, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_57" },   dOffset = { { "/", 10 } } },                --电机后振动_mm/s
                { ID = 1, reg = "3", addr = 58, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_58" },   dOffset = { { "/", 10 } } },                --进气压差_KPA
                { ID = 1, reg = "3", addr = 59, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_59" },   dOffset = { { "/", 10 } } },                --冷却器前端温度_℃
                { ID = 1, reg = "3", addr = 60, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L1_3_60" },   dOffset = { { "/", 10 } } },                --冷却器后端温度_℃
                { ID = 1, reg = "3", addr = 62, dtype = "uint",   format = "ABCD",  pMode = { 1, 3 },         dStyle = { "L1_3_62" },     dOffset = { { "/", 1 } } }, --累计电量_Kwh

                { ID = 1, reg = "3", addr = 38, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L1_3_38_H" }, dOffset = { { "/", 1 } } },                 --机组运行时间H_小时;采集到的值 后转到 1从站,3功能码,1寄存器地址中
                { ID = 1, reg = "3", addr = 39, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L1_3_38_L" }, dOffset = { { "/", 1 } } },                 --机组运行时间L_小时;采集到的值 后转到 1从站,3功能码,0寄存器地址中
                { ID = 1, reg = "3", addr = 40, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L1_3_39_H" }, dOffset = { { "/", 1 } } },                 --机组加载时间H_小时;采集到的值 后转到 1从站,3功能码,3寄存器地址中
                { ID = 1, reg = "3", addr = 41, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L1_3_39_L" }, dOffset = { { "/", 1 } } },                 --机组加载时间L_小时;采集到的值 后转到 1从站,3功能码,2寄存器地址中

                { ID = 1, reg = "6", addr = 30, dtype = "ushort", pMode = { 0, 0 }, dStyle = { "L1_6_30" },   dOffset = { { "/", 1 } } },                 --控制地址;modbus server 1从站,6功能码,0寄存器,收到值为1时实际给 L1_6_30 下发控制值为 1;modbus server 1从站,6功能码,0寄存器,收到值为2时实际给 L1_6_30 下发控制值为 2

                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 0,         pMode = { 1, 10 },        dStyle = { "L1_3_25_0" } },                 --主电机冷却(独立)风机过载
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 1,         pMode = { 1, 10 },        dStyle = { "L1_3_25_1" } },                 --空滤保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 2,         pMode = { 1, 10 },        dStyle = { "L1_3_25_2" } },                 --油滤保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 3,         pMode = { 1, 10 },        dStyle = { "L1_3_25_3" } },                 --油滤压差故障
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 4,         pMode = { 1, 10 },        dStyle = { "L1_3_25_4" } },                 --冷却水断流/水压低
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 5,         pMode = { 1, 10 },        dStyle = { "L1_3_25_5" } },                 --空滤压差故障
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 6,         pMode = { 1, 10 },        dStyle = { "L1_3_25_6" } },                 --主电机变频器故障/主电机过载
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 7,         pMode = { 1, 10 },        dStyle = { "L1_3_25_7" } },                 --急停按钮按下
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 8,         pMode = { 1, 10 },        dStyle = { "L1_3_25_8" } },                 --主电机PTC温度开关保护
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 9,         pMode = { 1, 10 },        dStyle = { "L1_3_25_9" } },                 --电源相序错误/欠压/过压保护
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 10,        pMode = { 1, 10 },        dStyle = { "L1_3_25_10" } },                --油分器保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 11,        pMode = { 1, 10 },        dStyle = { "L1_3_25_11" } },                --润滑油更换/保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 12,        pMode = { 1, 10 },        dStyle = { "L1_3_25_12" } },                --润滑脂更换/保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 13,        pMode = { 1, 10 },        dStyle = { "L1_3_25_13" } },                --整机保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 14,        pMode = { 1, 10 },        dStyle = { "L1_3_25_14" } },                --排气压力预警
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 15,        pMode = { 1, 10 },        dStyle = { "L1_3_25_15" } },                --排气压力过高报警停机
                { ID = 1, reg = "3", addr = 26, dtype = "bit",    dBit = 0,         pMode = { 1, 10 },        dStyle = { "L1_3_26_0" } },                 --排气温度高预警
                { ID = 1, reg = "3", addr = 26, dtype = "bit",    dBit = 1,         pMode = { 1, 10 },        dStyle = { "L1_3_26_1" } },                 --排气温度高报警停机
                { ID = 1, reg = "3", addr = 26, dtype = "bit",    dBit = 2,         pMode = { 1, 10 },        dStyle = { "L1_3_26_2" } },                 --电柜排风扇过载
                { ID = 1, reg = "3", addr = 26, dtype = "bit",    dBit = 3,         pMode = { 1, 10 },        dStyle = { "L1_3_26_3" } },                 --冷却风机变频器故障/冷却水流缺水
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 8,         pMode = { 1, 10 },        dStyle = { "L1_3_28_8" } },                 --主机变频器启动输出
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 12,        pMode = { 1, 10 },        dStyle = { "L1_3_28_12" } },                --系统运行
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 13,        pMode = { 1, 10 },        dStyle = { "L1_3_28_13" } },                --系统故障
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 14,        pMode = { 1, 10 },        dStyle = { "L1_3_28_14" } },                --主机冷却(独立)风机运行输出
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 15,        pMode = { 1, 10 },        dStyle = { "L1_3_28_15" } },                --加载阀输出
                { ID = 1, reg = "3", addr = 29, dtype = "bit",    dBit = 8,         pMode = { 1, 10 },        dStyle = { "L1_3_29_8" } },                 --主机变频器运行反馈
                { ID = 1, reg = "3", addr = 29, dtype = "bit",    dBit = 9,         pMode = { 1, 10 },        dStyle = { "L1_3_29_9" } },                 --主机变频器故障
                { ID = 1, reg = "3", addr = 29, dtype = "bit",    dBit = 10,        pMode = { 1, 10 },        dStyle = { "L1_3_29_10" } },                --冷却风机运行
                { ID = 1, reg = "3", addr = 29, dtype = "bit",    dBit = 11,        pMode = { 1, 10 },        dStyle = { "L1_3_29_11" } },                --冷却变频器故障
                { ID = 1, reg = "3", addr = 30, dtype = "bit",    dBit = 0,         pMode = { 1, 10 },        dStyle = { "L1_3_30_0" } },                 --开机_控制位
                { ID = 1, reg = "3", addr = 30, dtype = "bit",    dBit = 1,         pMode = { 1, 10 },        dStyle = { "L1_3_30_1" } },                 --停机_控制位
                { ID = 1, reg = "3", addr = 30, dtype = "bit",    dBit = 2,         pMode = { 1, 10 },        dStyle = { "L1_3_30_2" } },                 --故障复位_控制位

                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 0,         pMode = { 2, 0 },         dStyle = { "L1_3_25_0" } },                 --主电机冷却(独立)风机过载
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 1,         pMode = { 2, 0 },         dStyle = { "L1_3_25_1" } },                 --空滤保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 2,         pMode = { 2, 0 },         dStyle = { "L1_3_25_2" } },                 --油滤保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 3,         pMode = { 2, 0 },         dStyle = { "L1_3_25_3" } },                 --油滤压差故障
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 4,         pMode = { 2, 0 },         dStyle = { "L1_3_25_4" } },                 --冷却水断流/水压低
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 5,         pMode = { 2, 0 },         dStyle = { "L1_3_25_5" } },                 --空滤压差故障
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 6,         pMode = { 2, 0 },         dStyle = { "L1_3_25_6" } },                 --主电机变频器故障/主电机过载
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 7,         pMode = { 2, 0 },         dStyle = { "L1_3_25_7" } },                 --急停按钮按下
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 8,         pMode = { 2, 0 },         dStyle = { "L1_3_25_8" } },                 --主电机PTC温度开关保护
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 9,         pMode = { 2, 0 },         dStyle = { "L1_3_25_9" } },                 --电源相序错误/欠压/过压保护
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 10,        pMode = { 2, 0 },         dStyle = { "L1_3_25_10" } },                --油分器保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 11,        pMode = { 2, 0 },         dStyle = { "L1_3_25_11" } },                --润滑油更换/保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 12,        pMode = { 2, 0 },         dStyle = { "L1_3_25_12" } },                --润滑脂更换/保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 13,        pMode = { 2, 0 },         dStyle = { "L1_3_25_13" } },                --整机保养时间到
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 14,        pMode = { 2, 0 },         dStyle = { "L1_3_25_14" } },                --排气压力预警
                { ID = 1, reg = "3", addr = 25, dtype = "bit",    dBit = 15,        pMode = { 2, 0 },         dStyle = { "L1_3_25_15" } },                --排气压力过高报警停机
                { ID = 1, reg = "3", addr = 26, dtype = "bit",    dBit = 0,         pMode = { 2, 0 },         dStyle = { "L1_3_26_0" } },                 --排气温度高预警
                { ID = 1, reg = "3", addr = 26, dtype = "bit",    dBit = 1,         pMode = { 2, 0 },         dStyle = { "L1_3_26_1" } },                 --排气温度高报警停机
                { ID = 1, reg = "3", addr = 26, dtype = "bit",    dBit = 2,         pMode = { 2, 0 },         dStyle = { "L1_3_26_2" } },                 --电柜排风扇过载
                { ID = 1, reg = "3", addr = 26, dtype = "bit",    dBit = 3,         pMode = { 2, 0 },         dStyle = { "L1_3_26_3" } },                 --冷却风机变频器故障/冷却水流缺水
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 8,         pMode = { 2, 0 },         dStyle = { "L1_3_28_8" } },                 --主机变频器启动输出
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 12,        pMode = { 2, 0 },         dStyle = { "L1_3_28_12" } },                --系统运行
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 13,        pMode = { 2, 0 },         dStyle = { "L1_3_28_13" } },                --系统故障
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 14,        pMode = { 2, 0 },         dStyle = { "L1_3_28_14" } },                --主机冷却(独立)风机运行输出
                { ID = 1, reg = "3", addr = 28, dtype = "bit",    dBit = 15,        pMode = { 2, 0 },         dStyle = { "L1_3_28_15" } },                --加载阀输出
                { ID = 1, reg = "3", addr = 29, dtype = "bit",    dBit = 8,         pMode = { 2, 0 },         dStyle = { "L1_3_29_8" } },                 --主机变频器运行反馈
                { ID = 1, reg = "3", addr = 29, dtype = "bit",    dBit = 9,         pMode = { 2, 0 },         dStyle = { "L1_3_29_9" } },                 --主机变频器故障
                { ID = 1, reg = "3", addr = 29, dtype = "bit",    dBit = 10,        pMode = { 2, 0 },         dStyle = { "L1_3_29_10" } },                --冷却风机运行
                { ID = 1, reg = "3", addr = 29, dtype = "bit",    dBit = 11,        pMode = { 2, 0 },         dStyle = { "L1_3_29_11" } },                --冷却变频器故障
                { ID = 1, reg = "3", addr = 30, dtype = "bit",    dBit = 0,         pMode = { 2, 0 },         dStyle = { "L1_3_30_0" } },                 --开机_控制位
                { ID = 1, reg = "3", addr = 30, dtype = "bit",    dBit = 1,         pMode = { 2, 0 },         dStyle = { "L1_3_30_1" } },                 --停机_控制位
                { ID = 1, reg = "3", addr = 30, dtype = "bit",    dBit = 2,         pMode = { 2, 0 },         dStyle = { "L1_3_30_2" } },                 --故障复位_控制位


                { ID = 2, reg = "3", addr = 0,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_0" },    dOffset = { { "/", 100 } } },               --机组排气压力_Mpa;采集到的值*145.04 后转到 1从站,3功能码,13寄存器地址中
                { ID = 2, reg = "3", addr = 1,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_1" },    dOffset = { { "/", 10 } } },                --排气温度_℃;采集到的值 后转到 1从站,3功能码,11寄存器地址中给
                { ID = 2, reg = "3", addr = 2,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_2" },    dOffset = { { "/", 100 } } },               --油气桶压力_Mpa;采集到的值*145.04 后转到 1从站,3功能码,14寄存器地址中
                { ID = 2, reg = "3", addr = 3,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_3" },    dOffset = { { "/", 10 } } },                --油分后温度_℃;采集到的值 后转到 1从站,3功能码,12寄存器地址中
                { ID = 2, reg = "3", addr = 4,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_4" },    dOffset = { { "/", 10 } } },                --A相绕组温度_℃;采集到的值 后转到 1从站,3功能码,15寄存器地址中
                { ID = 2, reg = "3", addr = 5,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_5" },    dOffset = { { "/", 10 } } },                --B相绕组温度_℃;采集到的值 后转到 1从站,3功能码,16寄存器地址中
                { ID = 2, reg = "3", addr = 6,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_6" },    dOffset = { { "/", 10 } } },                --C相绕组温度_℃;采集到的值 后转到 1从站,3功能码,19寄存器地址中
                { ID = 2, reg = "3", addr = 7,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_7" },    dOffset = { { "/", 10 } } },                --进线电压_V;采集到的值 后转到 1从站,3功能码,7寄存器地址中
                { ID = 2, reg = "3", addr = 8,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_8" },    dOffset = { { "/", 10 } } },                --进线电流_A;采集到的值 后转到 1从站,3功能码,8寄存器地址中
                { ID = 2, reg = "3", addr = 9,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_9" },    dOffset = { { "/", 100 } } },               --主机变频器运行频率_HZ
                { ID = 2, reg = "3", addr = 10, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_10" },   dOffset = { { "/", 100 } } },               --主机变频器给定频率_HZ
                { ID = 2, reg = "3", addr = 11, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_11" },   dOffset = { { "/", 10 } } },                --主机变频器母线电压_V
                { ID = 2, reg = "3", addr = 12, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_12" },   dOffset = { { "/", 1 } } },                 --主机变频器输出电压_V
                { ID = 2, reg = "3", addr = 13, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_13" },   dOffset = { { "/", 10 } } },                --主机变频器运行电流_A
                { ID = 2, reg = "3", addr = 14, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_14" },   dOffset = { { "/", 1 } } },                 --主机变频器运行转速_rpm
                { ID = 2, reg = "3", addr = 15, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_15" },   dOffset = { { "/", 1000 } } },              --主机变频器输出功率_KW
                { ID = 2, reg = "3", addr = 17, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_17" },   dOffset = { { "/", 100 } } },               --风机变频器输出频率_HZ
                { ID = 2, reg = "3", addr = 20, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_20" },   dOffset = { { "/", 1 } } },                 --风机变频器输出电压_V
                { ID = 2, reg = "3", addr = 21, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_21" },   dOffset = { { "/", 10 } } },                --风机变频器输出电流_A
                { ID = 2, reg = "3", addr = 22, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_22" },   dOffset = { { "/", 1 } } },                 --风机变频器运行转速_Rpm
                { ID = 2, reg = "3", addr = 23, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_23" },   dOffset = { { "/", 1000 } } },              --风机变频器输出功率_KW
                { ID = 2, reg = "3", addr = 38, dtype = "uint",   format = "ABCD",  pMode = { 1, 3 },         dStyle = { "L2_3_38" },     dOffset = { { "/", 1 } } }, --机组运行时间_小时
                { ID = 2, reg = "3", addr = 40, dtype = "uint",   format = "ABCD",  pMode = { 1, 3 },         dStyle = { "L2_3_40" },     dOffset = { { "/", 1 } } }, --机组加载时间_小时
                { ID = 2, reg = "3", addr = 42, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_42" },   dOffset = { { "/", 100 } } },               --恒定压力_Mpa
                { ID = 2, reg = "3", addr = 43, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_43" },   dOffset = { { "/", 100 } } },               --卸载压力_Mpa
                { ID = 2, reg = "3", addr = 44, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_44" },   dOffset = { { "/", 100 } } },               --加载压力_Mpa
                { ID = 2, reg = "3", addr = 45, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_45" },   dOffset = { { "/", 1 } } },                 --油滤使用时间_小时
                { ID = 2, reg = "3", addr = 46, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_46" },   dOffset = { { "/", 1 } } },                 --空滤使用时间_小时
                { ID = 2, reg = "3", addr = 47, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_47" },   dOffset = { { "/", 1 } } },                 --油分器使用时间_小时
                { ID = 2, reg = "3", addr = 48, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_48" },   dOffset = { { "/", 1 } } },                 --润滑油使用时间_小时
                { ID = 2, reg = "3", addr = 49, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_49" },   dOffset = { { "/", 1 } } },                 --润滑脂使用时间_小时
                { ID = 2, reg = "3", addr = 50, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_50" },   dOffset = { { "/", 1 } } },                 --润滑脂使用时间_小时
                { ID = 2, reg = "3", addr = 51, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_51" },   dOffset = { { "/", 10 } } },                --电机轴承温度_℃
                { ID = 2, reg = "3", addr = 52, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_52" },   dOffset = { { "/", 10 } } },                --注油压力_Mpa
                { ID = 2, reg = "3", addr = 53, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_53" },   dOffset = { { "/", 10 } } },                --油分后压力_Mpa
                { ID = 2, reg = "3", addr = 54, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_54" },   dOffset = { { "/", 10 } } },                --主机前振动_mm/s
                { ID = 2, reg = "3", addr = 55, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_55" },   dOffset = { { "/", 10 } } },                --主机后振动_mm/s
                { ID = 2, reg = "3", addr = 56, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_56" },   dOffset = { { "/", 10 } } },                --电机前振动_mm/s
                { ID = 2, reg = "3", addr = 57, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_57" },   dOffset = { { "/", 10 } } },                --电机后振动_mm/s
                { ID = 2, reg = "3", addr = 58, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_58" },   dOffset = { { "/", 10 } } },                --进气压差_KPA
                { ID = 2, reg = "3", addr = 59, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_59" },   dOffset = { { "/", 10 } } },                --冷却器前端温度_℃
                { ID = 2, reg = "3", addr = 60, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L2_3_60" },   dOffset = { { "/", 10 } } },                --冷却器后端温度_℃
                { ID = 2, reg = "3", addr = 62, dtype = "uint",   format = "ABCD",  pMode = { 1, 3 },         dStyle = { "L2_3_62" },     dOffset = { { "/", 1 } } }, --累计电量_Kwh

                { ID = 2, reg = "3", addr = 38, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L2_3_38_H" }, dOffset = { { "/", 1 } } },                 --机组运行时间H_小时;采集到的值 后转到 1从站,3功能码,1寄存器地址中
                { ID = 2, reg = "3", addr = 39, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L2_3_38_L" }, dOffset = { { "/", 1 } } },                 --机组运行时间L_小时;采集到的值 后转到 1从站,3功能码,0寄存器地址中
                { ID = 2, reg = "3", addr = 40, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L2_3_39_H" }, dOffset = { { "/", 1 } } },                 --机组加载时间H_小时;采集到的值 后转到 1从站,3功能码,3寄存器地址中
                { ID = 2, reg = "3", addr = 41, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L2_3_39_L" }, dOffset = { { "/", 1 } } },                 --机组加载时间L_小时;采集到的值 后转到 1从站,3功能码,2寄存器地址中

                { ID = 2, reg = "6", addr = 30, dtype = "ushort", pMode = { 0, 0 }, dStyle = { "L2_6_30" },   dOffset = { { "/", 1 } } },                 --控制地址;modbus server 1从站,6功能码,0寄存器,收到值为1时实际给 L2_6_30 下发控制值为 1;modbus server 1从站,6功能码,0寄存器,收到值为2时实际给 L2_6_30 下发控制值为 2

                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 0,         pMode = { 1, 10 },        dStyle = { "L2_3_25_0" } },                 --主电机冷却(独立)风机过载
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 1,         pMode = { 1, 10 },        dStyle = { "L2_3_25_1" } },                 --空滤保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 2,         pMode = { 1, 10 },        dStyle = { "L2_3_25_2" } },                 --油滤保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 3,         pMode = { 1, 10 },        dStyle = { "L2_3_25_3" } },                 --油滤压差故障
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 4,         pMode = { 1, 10 },        dStyle = { "L2_3_25_4" } },                 --冷却水断流/水压低
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 5,         pMode = { 1, 10 },        dStyle = { "L2_3_25_5" } },                 --空滤压差故障
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 6,         pMode = { 1, 10 },        dStyle = { "L2_3_25_6" } },                 --主电机变频器故障/主电机过载
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 7,         pMode = { 1, 10 },        dStyle = { "L2_3_25_7" } },                 --急停按钮按下
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 8,         pMode = { 1, 10 },        dStyle = { "L2_3_25_8" } },                 --主电机PTC温度开关保护
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 9,         pMode = { 1, 10 },        dStyle = { "L2_3_25_9" } },                 --电源相序错误/欠压/过压保护
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 10,        pMode = { 1, 10 },        dStyle = { "L2_3_25_10" } },                --油分器保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 11,        pMode = { 1, 10 },        dStyle = { "L2_3_25_11" } },                --润滑油更换/保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 12,        pMode = { 1, 10 },        dStyle = { "L2_3_25_12" } },                --润滑脂更换/保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 13,        pMode = { 1, 10 },        dStyle = { "L2_3_25_13" } },                --整机保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 14,        pMode = { 1, 10 },        dStyle = { "L2_3_25_14" } },                --排气压力预警
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 15,        pMode = { 1, 10 },        dStyle = { "L2_3_25_15" } },                --排气压力过高报警停机
                { ID = 2, reg = "3", addr = 26, dtype = "bit",    dBit = 0,         pMode = { 1, 10 },        dStyle = { "L2_3_26_0" } },                 --排气温度高预警
                { ID = 2, reg = "3", addr = 26, dtype = "bit",    dBit = 1,         pMode = { 1, 10 },        dStyle = { "L2_3_26_1" } },                 --排气温度高报警停机
                { ID = 2, reg = "3", addr = 26, dtype = "bit",    dBit = 2,         pMode = { 1, 10 },        dStyle = { "L2_3_26_2" } },                 --电柜排风扇过载
                { ID = 2, reg = "3", addr = 26, dtype = "bit",    dBit = 3,         pMode = { 1, 10 },        dStyle = { "L2_3_26_3" } },                 --冷却风机变频器故障/冷却水流缺水
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 8,         pMode = { 1, 10 },        dStyle = { "L2_3_28_8" } },                 --主机变频器启动输出
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 12,        pMode = { 1, 10 },        dStyle = { "L2_3_28_12" } },                --系统运行
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 13,        pMode = { 1, 10 },        dStyle = { "L2_3_28_13" } },                --系统故障
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 14,        pMode = { 1, 10 },        dStyle = { "L2_3_28_14" } },                --主机冷却(独立)风机运行输出
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 15,        pMode = { 1, 10 },        dStyle = { "L2_3_28_15" } },                --加载阀输出
                { ID = 2, reg = "3", addr = 29, dtype = "bit",    dBit = 8,         pMode = { 1, 10 },        dStyle = { "L2_3_29_8" } },                 --主机变频器运行反馈
                { ID = 2, reg = "3", addr = 29, dtype = "bit",    dBit = 9,         pMode = { 1, 10 },        dStyle = { "L2_3_29_9" } },                 --主机变频器故障
                { ID = 2, reg = "3", addr = 29, dtype = "bit",    dBit = 10,        pMode = { 1, 10 },        dStyle = { "L2_3_29_10" } },                --冷却风机运行
                { ID = 2, reg = "3", addr = 29, dtype = "bit",    dBit = 11,        pMode = { 1, 10 },        dStyle = { "L2_3_29_11" } },                --冷却变频器故障
                { ID = 2, reg = "3", addr = 30, dtype = "bit",    dBit = 0,         pMode = { 1, 10 },        dStyle = { "L2_3_30_0" } },                 --开机_控制位
                { ID = 2, reg = "3", addr = 30, dtype = "bit",    dBit = 1,         pMode = { 1, 10 },        dStyle = { "L2_3_30_1" } },                 --停机_控制位
                { ID = 2, reg = "3", addr = 30, dtype = "bit",    dBit = 2,         pMode = { 1, 10 },        dStyle = { "L2_3_30_2" } },                 --故障复位_控制位

                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 0,         pMode = { 2, 0 },         dStyle = { "L2_3_25_0" } },                 --主电机冷却(独立)风机过载
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 1,         pMode = { 2, 0 },         dStyle = { "L2_3_25_1" } },                 --空滤保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 2,         pMode = { 2, 0 },         dStyle = { "L2_3_25_2" } },                 --油滤保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 3,         pMode = { 2, 0 },         dStyle = { "L2_3_25_3" } },                 --油滤压差故障
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 4,         pMode = { 2, 0 },         dStyle = { "L2_3_25_4" } },                 --冷却水断流/水压低
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 5,         pMode = { 2, 0 },         dStyle = { "L2_3_25_5" } },                 --空滤压差故障
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 6,         pMode = { 2, 0 },         dStyle = { "L2_3_25_6" } },                 --主电机变频器故障/主电机过载
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 7,         pMode = { 2, 0 },         dStyle = { "L2_3_25_7" } },                 --急停按钮按下
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 8,         pMode = { 2, 0 },         dStyle = { "L2_3_25_8" } },                 --主电机PTC温度开关保护
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 9,         pMode = { 2, 0 },         dStyle = { "L2_3_25_9" } },                 --电源相序错误/欠压/过压保护
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 10,        pMode = { 2, 0 },         dStyle = { "L2_3_25_10" } },                --油分器保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 11,        pMode = { 2, 0 },         dStyle = { "L2_3_25_11" } },                --润滑油更换/保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 12,        pMode = { 2, 0 },         dStyle = { "L2_3_25_12" } },                --润滑脂更换/保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 13,        pMode = { 2, 0 },         dStyle = { "L2_3_25_13" } },                --整机保养时间到
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 14,        pMode = { 2, 0 },         dStyle = { "L2_3_25_14" } },                --排气压力预警
                { ID = 2, reg = "3", addr = 25, dtype = "bit",    dBit = 15,        pMode = { 2, 0 },         dStyle = { "L2_3_25_15" } },                --排气压力过高报警停机
                { ID = 2, reg = "3", addr = 26, dtype = "bit",    dBit = 0,         pMode = { 2, 0 },         dStyle = { "L2_3_26_0" } },                 --排气温度高预警
                { ID = 2, reg = "3", addr = 26, dtype = "bit",    dBit = 1,         pMode = { 2, 0 },         dStyle = { "L2_3_26_1" } },                 --排气温度高报警停机
                { ID = 2, reg = "3", addr = 26, dtype = "bit",    dBit = 2,         pMode = { 2, 0 },         dStyle = { "L2_3_26_2" } },                 --电柜排风扇过载
                { ID = 2, reg = "3", addr = 26, dtype = "bit",    dBit = 3,         pMode = { 2, 0 },         dStyle = { "L2_3_26_3" } },                 --冷却风机变频器故障/冷却水流缺水
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 8,         pMode = { 2, 0 },         dStyle = { "L2_3_28_8" } },                 --主机变频器启动输出
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 12,        pMode = { 2, 0 },         dStyle = { "L2_3_28_12" } },                --系统运行
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 13,        pMode = { 2, 0 },         dStyle = { "L2_3_28_13" } },                --系统故障
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 14,        pMode = { 2, 0 },         dStyle = { "L2_3_28_14" } },                --主机冷却(独立)风机运行输出
                { ID = 2, reg = "3", addr = 28, dtype = "bit",    dBit = 15,        pMode = { 2, 0 },         dStyle = { "L2_3_28_15" } },                --加载阀输出
                { ID = 2, reg = "3", addr = 29, dtype = "bit",    dBit = 8,         pMode = { 2, 0 },         dStyle = { "L2_3_29_8" } },                 --主机变频器运行反馈
                { ID = 2, reg = "3", addr = 29, dtype = "bit",    dBit = 9,         pMode = { 2, 0 },         dStyle = { "L2_3_29_9" } },                 --主机变频器故障
                { ID = 2, reg = "3", addr = 29, dtype = "bit",    dBit = 10,        pMode = { 2, 0 },         dStyle = { "L2_3_29_10" } },                --冷却风机运行
                { ID = 2, reg = "3", addr = 29, dtype = "bit",    dBit = 11,        pMode = { 2, 0 },         dStyle = { "L2_3_29_11" } },                --冷却变频器故障
                { ID = 2, reg = "3", addr = 30, dtype = "bit",    dBit = 0,         pMode = { 2, 0 },         dStyle = { "L2_3_30_0" } },                 --开机_控制位
                { ID = 2, reg = "3", addr = 30, dtype = "bit",    dBit = 1,         pMode = { 2, 0 },         dStyle = { "L2_3_30_1" } },                 --停机_控制位
                { ID = 2, reg = "3", addr = 30, dtype = "bit",    dBit = 2,         pMode = { 2, 0 },         dStyle = { "L2_3_30_2" } },                 --故障复位_控制位

                { ID = 3, reg = "3", addr = 0,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_0" },    dOffset = { { "/", 100 } } },               --机组排气压力_Mpa;采集到的值*145.04 后转到 1从站,3功能码,13寄存器地址中
                { ID = 3, reg = "3", addr = 1,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_1" },    dOffset = { { "/", 10 } } },                --排气温度_℃;采集到的值 后转到 1从站,3功能码,11寄存器地址中给
                { ID = 3, reg = "3", addr = 2,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_2" },    dOffset = { { "/", 100 } } },               --油气桶压力_Mpa;采集到的值*145.04 后转到 1从站,3功能码,14寄存器地址中
                { ID = 3, reg = "3", addr = 3,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_3" },    dOffset = { { "/", 10 } } },                --油分后温度_℃;采集到的值 后转到 1从站,3功能码,12寄存器地址中
                { ID = 3, reg = "3", addr = 4,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_4" },    dOffset = { { "/", 10 } } },                --A相绕组温度_℃;采集到的值 后转到 1从站,3功能码,15寄存器地址中
                { ID = 3, reg = "3", addr = 5,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_5" },    dOffset = { { "/", 10 } } },                --B相绕组温度_℃;采集到的值 后转到 1从站,3功能码,16寄存器地址中
                { ID = 3, reg = "3", addr = 6,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_6" },    dOffset = { { "/", 10 } } },                --C相绕组温度_℃;采集到的值 后转到 1从站,3功能码,19寄存器地址中
                { ID = 3, reg = "3", addr = 7,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_7" },    dOffset = { { "/", 10 } } },                --进线电压_V;采集到的值 后转到 1从站,3功能码,7寄存器地址中
                { ID = 3, reg = "3", addr = 8,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_8" },    dOffset = { { "/", 10 } } },                --进线电流_A;采集到的值 后转到 1从站,3功能码,8寄存器地址中
                { ID = 3, reg = "3", addr = 9,  dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_9" },    dOffset = { { "/", 100 } } },               --主机变频器运行频率_HZ
                { ID = 3, reg = "3", addr = 10, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_10" },   dOffset = { { "/", 100 } } },               --主机变频器给定频率_HZ
                { ID = 3, reg = "3", addr = 11, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_11" },   dOffset = { { "/", 10 } } },                --主机变频器母线电压_V
                { ID = 3, reg = "3", addr = 12, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_12" },   dOffset = { { "/", 1 } } },                 --主机变频器输出电压_V
                { ID = 3, reg = "3", addr = 13, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_13" },   dOffset = { { "/", 10 } } },                --主机变频器运行电流_A
                { ID = 3, reg = "3", addr = 14, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_14" },   dOffset = { { "/", 1 } } },                 --主机变频器运行转速_rpm
                { ID = 3, reg = "3", addr = 15, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_15" },   dOffset = { { "/", 1000 } } },              --主机变频器输出功率_KW
                { ID = 3, reg = "3", addr = 17, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_17" },   dOffset = { { "/", 100 } } },               --风机变频器输出频率_HZ
                { ID = 3, reg = "3", addr = 20, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_20" },   dOffset = { { "/", 1 } } },                 --风机变频器输出电压_V
                { ID = 3, reg = "3", addr = 21, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_21" },   dOffset = { { "/", 10 } } },                --风机变频器输出电流_A
                { ID = 3, reg = "3", addr = 22, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_22" },   dOffset = { { "/", 1 } } },                 --风机变频器运行转速_Rpm
                { ID = 3, reg = "3", addr = 23, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_23" },   dOffset = { { "/", 1000 } } },              --风机变频器输出功率_KW
                { ID = 3, reg = "3", addr = 38, dtype = "uint",   format = "ABCD",  pMode = { 1, 3 },         dStyle = { "L3_3_38" },     dOffset = { { "/", 1 } } }, --机组运行时间_小时
                { ID = 3, reg = "3", addr = 40, dtype = "uint",   format = "ABCD",  pMode = { 1, 3 },         dStyle = { "L3_3_40" },     dOffset = { { "/", 1 } } }, --机组加载时间_小时
                { ID = 3, reg = "3", addr = 42, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_42" },   dOffset = { { "/", 100 } } },               --恒定压力_Mpa
                { ID = 3, reg = "3", addr = 43, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_43" },   dOffset = { { "/", 100 } } },               --卸载压力_Mpa
                { ID = 3, reg = "3", addr = 44, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_44" },   dOffset = { { "/", 100 } } },               --加载压力_Mpa
                { ID = 3, reg = "3", addr = 45, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_45" },   dOffset = { { "/", 1 } } },                 --油滤使用时间_小时
                { ID = 3, reg = "3", addr = 46, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_46" },   dOffset = { { "/", 1 } } },                 --空滤使用时间_小时
                { ID = 3, reg = "3", addr = 47, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_47" },   dOffset = { { "/", 1 } } },                 --油分器使用时间_小时
                { ID = 3, reg = "3", addr = 48, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_48" },   dOffset = { { "/", 1 } } },                 --润滑油使用时间_小时
                { ID = 3, reg = "3", addr = 49, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_49" },   dOffset = { { "/", 1 } } },                 --润滑脂使用时间_小时
                { ID = 3, reg = "3", addr = 50, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_50" },   dOffset = { { "/", 1 } } },                 --润滑脂使用时间_小时
                { ID = 3, reg = "3", addr = 51, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_51" },   dOffset = { { "/", 10 } } },                --电机轴承温度_℃
                { ID = 3, reg = "3", addr = 52, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_52" },   dOffset = { { "/", 10 } } },                --注油压力_Mpa
                { ID = 3, reg = "3", addr = 53, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_53" },   dOffset = { { "/", 10 } } },                --油分后压力_Mpa
                { ID = 3, reg = "3", addr = 54, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_54" },   dOffset = { { "/", 10 } } },                --主机前振动_mm/s
                { ID = 3, reg = "3", addr = 55, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_55" },   dOffset = { { "/", 10 } } },                --主机后振动_mm/s
                { ID = 3, reg = "3", addr = 56, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_56" },   dOffset = { { "/", 10 } } },                --电机前振动_mm/s
                { ID = 3, reg = "3", addr = 57, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_57" },   dOffset = { { "/", 10 } } },                --电机后振动_mm/s
                { ID = 3, reg = "3", addr = 58, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_58" },   dOffset = { { "/", 10 } } },                --进气压差_KPA
                { ID = 3, reg = "3", addr = 59, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_59" },   dOffset = { { "/", 10 } } },                --冷却器前端温度_℃
                { ID = 3, reg = "3", addr = 60, dtype = "short",  pMode = { 1, 3 }, dStyle = { "L3_3_60" },   dOffset = { { "/", 10 } } },                --冷却器后端温度_℃
                { ID = 3, reg = "3", addr = 62, dtype = "uint",   format = "ABCD",  pMode = { 1, 3 },         dStyle = { "L3_3_62" },     dOffset = { { "/", 1 } } }, --累计电量_Kwh

                { ID = 3, reg = "3", addr = 38, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L3_3_38_H" }, dOffset = { { "/", 1 } } },                 --机组运行时间H_小时;采集到的值 后转到 1从站,3功能码,1寄存器地址中
                { ID = 3, reg = "3", addr = 39, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L3_3_38_L" }, dOffset = { { "/", 1 } } },                 --机组运行时间L_小时;采集到的值 后转到 1从站,3功能码,0寄存器地址中
                { ID = 3, reg = "3", addr = 40, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L3_3_39_H" }, dOffset = { { "/", 1 } } },                 --机组加载时间H_小时;采集到的值 后转到 1从站,3功能码,3寄存器地址中
                { ID = 3, reg = "3", addr = 41, dtype = "ushort", pMode = { 1, 3 }, dStyle = { "L3_3_39_L" }, dOffset = { { "/", 1 } } },                 --机组加载时间L_小时;采集到的值 后转到 1从站,3功能码,2寄存器地址中

                { ID = 3, reg = "6", addr = 30, dtype = "ushort", pMode = { 0, 0 }, dStyle = { "L3_6_30" },   dOffset = { { "/", 1 } } },                 --控制地址;modbus server 1从站,6功能码,0寄存器,收到值为1时实际给 L3_6_30 下发控制值为 1;modbus server 1从站,6功能码,0寄存器,收到值为2时实际给 L3_6_30 下发控制值为 2

                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 0,         pMode = { 1, 10 },        dStyle = { "L3_3_25_0" } },                 --主电机冷却(独立)风机过载
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 1,         pMode = { 1, 10 },        dStyle = { "L3_3_25_1" } },                 --空滤保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 2,         pMode = { 1, 10 },        dStyle = { "L3_3_25_2" } },                 --油滤保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 3,         pMode = { 1, 10 },        dStyle = { "L3_3_25_3" } },                 --油滤压差故障
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 4,         pMode = { 1, 10 },        dStyle = { "L3_3_25_4" } },                 --冷却水断流/水压低
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 5,         pMode = { 1, 10 },        dStyle = { "L3_3_25_5" } },                 --空滤压差故障
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 6,         pMode = { 1, 10 },        dStyle = { "L3_3_25_6" } },                 --主电机变频器故障/主电机过载
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 7,         pMode = { 1, 10 },        dStyle = { "L3_3_25_7" } },                 --急停按钮按下
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 8,         pMode = { 1, 10 },        dStyle = { "L3_3_25_8" } },                 --主电机PTC温度开关保护
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 9,         pMode = { 1, 10 },        dStyle = { "L3_3_25_9" } },                 --电源相序错误/欠压/过压保护
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 10,        pMode = { 1, 10 },        dStyle = { "L3_3_25_10" } },                --油分器保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 11,        pMode = { 1, 10 },        dStyle = { "L3_3_25_11" } },                --润滑油更换/保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 12,        pMode = { 1, 10 },        dStyle = { "L3_3_25_12" } },                --润滑脂更换/保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 13,        pMode = { 1, 10 },        dStyle = { "L3_3_25_13" } },                --整机保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 14,        pMode = { 1, 10 },        dStyle = { "L3_3_25_14" } },                --排气压力预警
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 15,        pMode = { 1, 10 },        dStyle = { "L3_3_25_15" } },                --排气压力过高报警停机
                { ID = 3, reg = "3", addr = 26, dtype = "bit",    dBit = 0,         pMode = { 1, 10 },        dStyle = { "L3_3_26_0" } },                 --排气温度高预警
                { ID = 3, reg = "3", addr = 26, dtype = "bit",    dBit = 1,         pMode = { 1, 10 },        dStyle = { "L3_3_26_1" } },                 --排气温度高报警停机
                { ID = 3, reg = "3", addr = 26, dtype = "bit",    dBit = 2,         pMode = { 1, 10 },        dStyle = { "L3_3_26_2" } },                 --电柜排风扇过载
                { ID = 3, reg = "3", addr = 26, dtype = "bit",    dBit = 3,         pMode = { 1, 10 },        dStyle = { "L3_3_26_3" } },                 --冷却风机变频器故障/冷却水流缺水
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 8,         pMode = { 1, 10 },        dStyle = { "L3_3_28_8" } },                 --主机变频器启动输出
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 12,        pMode = { 1, 10 },        dStyle = { "L3_3_28_12" } },                --系统运行
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 13,        pMode = { 1, 10 },        dStyle = { "L3_3_28_13" } },                --系统故障
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 14,        pMode = { 1, 10 },        dStyle = { "L3_3_28_14" } },                --主机冷却(独立)风机运行输出
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 15,        pMode = { 1, 10 },        dStyle = { "L3_3_28_15" } },                --加载阀输出
                { ID = 3, reg = "3", addr = 29, dtype = "bit",    dBit = 8,         pMode = { 1, 10 },        dStyle = { "L3_3_29_8" } },                 --主机变频器运行反馈
                { ID = 3, reg = "3", addr = 29, dtype = "bit",    dBit = 9,         pMode = { 1, 10 },        dStyle = { "L3_3_29_9" } },                 --主机变频器故障
                { ID = 3, reg = "3", addr = 29, dtype = "bit",    dBit = 10,        pMode = { 1, 10 },        dStyle = { "L3_3_29_10" } },                --冷却风机运行
                { ID = 3, reg = "3", addr = 29, dtype = "bit",    dBit = 11,        pMode = { 1, 10 },        dStyle = { "L3_3_29_11" } },                --冷却变频器故障
                { ID = 3, reg = "3", addr = 30, dtype = "bit",    dBit = 0,         pMode = { 1, 10 },        dStyle = { "L3_3_30_0" } },                 --开机_控制位
                { ID = 3, reg = "3", addr = 30, dtype = "bit",    dBit = 1,         pMode = { 1, 10 },        dStyle = { "L3_3_30_1" } },                 --停机_控制位
                { ID = 3, reg = "3", addr = 30, dtype = "bit",    dBit = 2,         pMode = { 1, 10 },        dStyle = { "L3_3_30_2" } },                 --故障复位_控制位

                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 0,         pMode = { 2, 0 },         dStyle = { "L3_3_25_0" } },                 --主电机冷却(独立)风机过载
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 1,         pMode = { 2, 0 },         dStyle = { "L3_3_25_1" } },                 --空滤保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 2,         pMode = { 2, 0 },         dStyle = { "L3_3_25_2" } },                 --油滤保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 3,         pMode = { 2, 0 },         dStyle = { "L3_3_25_3" } },                 --油滤压差故障
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 4,         pMode = { 2, 0 },         dStyle = { "L3_3_25_4" } },                 --冷却水断流/水压低
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 5,         pMode = { 2, 0 },         dStyle = { "L3_3_25_5" } },                 --空滤压差故障
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 6,         pMode = { 2, 0 },         dStyle = { "L3_3_25_6" } },                 --主电机变频器故障/主电机过载
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 7,         pMode = { 2, 0 },         dStyle = { "L3_3_25_7" } },                 --急停按钮按下
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 8,         pMode = { 2, 0 },         dStyle = { "L3_3_25_8" } },                 --主电机PTC温度开关保护
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 9,         pMode = { 2, 0 },         dStyle = { "L3_3_25_9" } },                 --电源相序错误/欠压/过压保护
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 10,        pMode = { 2, 0 },         dStyle = { "L3_3_25_10" } },                --油分器保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 11,        pMode = { 2, 0 },         dStyle = { "L3_3_25_11" } },                --润滑油更换/保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 12,        pMode = { 2, 0 },         dStyle = { "L3_3_25_12" } },                --润滑脂更换/保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 13,        pMode = { 2, 0 },         dStyle = { "L3_3_25_13" } },                --整机保养时间到
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 14,        pMode = { 2, 0 },         dStyle = { "L3_3_25_14" } },                --排气压力预警
                { ID = 3, reg = "3", addr = 25, dtype = "bit",    dBit = 15,        pMode = { 2, 0 },         dStyle = { "L3_3_25_15" } },                --排气压力过高报警停机
                { ID = 3, reg = "3", addr = 26, dtype = "bit",    dBit = 0,         pMode = { 2, 0 },         dStyle = { "L3_3_26_0" } },                 --排气温度高预警
                { ID = 3, reg = "3", addr = 26, dtype = "bit",    dBit = 1,         pMode = { 2, 0 },         dStyle = { "L3_3_26_1" } },                 --排气温度高报警停机
                { ID = 3, reg = "3", addr = 26, dtype = "bit",    dBit = 2,         pMode = { 2, 0 },         dStyle = { "L3_3_26_2" } },                 --电柜排风扇过载
                { ID = 3, reg = "3", addr = 26, dtype = "bit",    dBit = 3,         pMode = { 2, 0 },         dStyle = { "L3_3_26_3" } },                 --冷却风机变频器故障/冷却水流缺水
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 8,         pMode = { 2, 0 },         dStyle = { "L3_3_28_8" } },                 --主机变频器启动输出
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 12,        pMode = { 2, 0 },         dStyle = { "L3_3_28_12" } },                --系统运行
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 13,        pMode = { 2, 0 },         dStyle = { "L3_3_28_13" } },                --系统故障
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 14,        pMode = { 2, 0 },         dStyle = { "L3_3_28_14" } },                --主机冷却(独立)风机运行输出
                { ID = 3, reg = "3", addr = 28, dtype = "bit",    dBit = 15,        pMode = { 2, 0 },         dStyle = { "L3_3_28_15" } },                --加载阀输出
                { ID = 3, reg = "3", addr = 29, dtype = "bit",    dBit = 8,         pMode = { 2, 0 },         dStyle = { "L3_3_29_8" } },                 --主机变频器运行反馈
                { ID = 3, reg = "3", addr = 29, dtype = "bit",    dBit = 9,         pMode = { 2, 0 },         dStyle = { "L3_3_29_9" } },                 --主机变频器故障
                { ID = 3, reg = "3", addr = 29, dtype = "bit",    dBit = 10,        pMode = { 2, 0 },         dStyle = { "L3_3_29_10" } },                --冷却风机运行
                { ID = 3, reg = "3", addr = 29, dtype = "bit",    dBit = 11,        pMode = { 2, 0 },         dStyle = { "L3_3_29_11" } },                --冷却变频器故障
                { ID = 3, reg = "3", addr = 30, dtype = "bit",    dBit = 0,         pMode = { 2, 0 },         dStyle = { "L3_3_30_0" } },                 --开机_控制位
                { ID = 3, reg = "3", addr = 30, dtype = "bit",    dBit = 1,         pMode = { 2, 0 },         dStyle = { "L3_3_30_1" } },                 --停机_控制位
                { ID = 3, reg = "3", addr = 30, dtype = "bit",    dBit = 2,         pMode = { 2, 0 },         dStyle = { "L3_3_30_2" } },                 --故障复位_控制位

            },
        },
    },
}
文档更新时间: 2025-12-01 16:05   作者:CGL