Aprus Lua-FinsTCP配置说明

概述

本章主要为Aprus Lua-FinsTCP协议的相关配置说明,该协议主要针对支持(欧姆龙)FinsTCP协议的设备。Aprus适配器可通过FinsTCP协议与对接设备进行通信。而其中Aprus的Lua包含apru.luaconfig.lua两个文件,客户只需配置config.lua就可以对支持Fins-TCP协议的设备进行数据采集。如需修改aprus.lua文件的内容时,请咨询相关的技术人员,随意修改会导致适配器不能正常工作,所以此文档主要介绍config.lua内容。

1 aprus.lua配置说明

Demo 示例

package.cpath="/home/zdw/test/lib/x86/output/lua-cjson/lib/?.so;./?.so"
package.path="./?.lua"
cjson = require "cjson"
config = require "config"
require "finstcp"

function act_control(m, json)
    for k,v in pairs(json) do
        if k ~= "Act" then
            finstcp.write(finstcpobj, cjson.encode({["name"] = k, ["val"] = v}))
        end
    end
end

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

function mqttsys_handle(m, code)
    if code == 0 then    
        finstcp.stop(finstcpobj)
    elseif code == 1 then
        finstcp.run(finstcpobj)
    end    
end

function finstcp_handle(obj, name, code, data)
    mqtt.publish(m1, name, "r", data)        
end

function finstcp_load_collectnodes(obj, nodes)
    for k,v in pairs(nodes) do
        finstcp.addcnode(obj,cjson.encode(v))    
    end    
end

function finstcp_load_varnodes(obj, nodes)
    for k,v in pairs(nodes) do
        finstcp.addvnode(obj,cjson.encode(v))
    end    
end

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

function start()
    init()

    finstcpobj = finstcp.new("finstcp")
    finstcp.config(finstcpobj, cjson.encode(config.finstcp.Device))
    finstcp_load_collectnodes(finstcpobj,config.finstcp.ColNode)
    finstcp_load_varnodes(finstcpobj,config.finstcp.VarNode)

    mqtt.run(m1)
    while true do
        local r = user.waitmsg()

        if r.from == "mqtt-sys" then
            mqttsys_handle(r.session, r.code)

        elseif r.from == "mqtt-msg" then
            mqttdata_handle(r.session, r.topic, r.payload)

        elseif r.from == "finstcp" then
            finstcp_handle(r.obj, r.name, r.code, r.data)
        end
    end
end

start()

Aprus Lua-FinsTCP配置说明

1. aprus.lua配置说明

1.1 导入finstcp协议支持库

  1. 语句: require "finstcp"
    说明: 导入finstcp协议支持库

1.2 加载config.lua配置文件

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

1.3 创建finstcp对象

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

1.4 配置finstcp对象接口参数

  1. 语句: finstcp.config(finstcpobj, cjson.encode(config.finstcp.Device))
    说明: 配置finstcp通信网卡参数

1.5 添加finstcp采集节点

  1. 语句: finstcp_load_collectnodes(finstcpobj,config.finstcp.ColNode)
    说明: 添加config.lua中所配置的采集节点

1.6 添加finstcp上报变量节点

  1. 语句: finstcp_load_varnodes(finstcpobj,config.finstcp.VarNode)
    说明: 添加config.lua中所配置的变量节点

1.7 运行finstcp实例

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

1.8 暂停finstcp实例

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

1.9 等待finstcp事件

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

1.10 finstcp事件处理

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

1.11 mqtt数据上报

  1. 语句:
    function finstcp_handle(obj, name, code, data)
        mqtt.publish(m1, name, "r", data)        
    end
    说明: 若无需特殊处理,则直接将事件数据通过mqtt发送;如需要二次处理可将data展开做分析

1.12 反向控制

  1. 语句: finstcp.write(finstcpobj, cjson.encode({["name"] = k, ["val"] = v}))
    说明: 反向控制时调用的finstcp写入接口

2. config.lua配置说明

2.1 Aprus: 接口属性

Demo示例:

Aprus={
    ipmode="manual",                    -- auto/manual/none
    inet_addr="192.168.250.234",
    netmask="255.255.255.0",
    luaver="V00.R",
    devinfo="finstcpDev",                
},

1. Aprus: 接口属性

  1. ipmode

    • 值: "auto"/"manual"/"none"
    • 说明: ip获取方式
  2. inet_addr

    • 值: "192.168.250.234"
    • 说明: Aprus的IP地址
  3. netmask

    • 值: "255.255.255.0"
    • 说明: 子网掩码
  4. luaver

    • 值: "MAX.LUA.V032700.R"
    • 说明: Aprus的Lua版本信息,根据实际脚本自行填写
  5. devinfo

    • 值: "finstcpDev"
    • 说明: 与Aprus对接设备,可根据需求自行填写

2. finstcp-Device: 接口属性

  1. ip

    • 值: 字符串
    • 说明: 设备的ip
  2. port

    • 值: 字符串
    • 说明: 设备的端口号

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

  1. ID

    • 值: 整型:0~n
    • 说明: PLC单元号
  2. reg

    • 值: 字符串:A/D/C/W/H/
    • 说明: 寄存器类型
  3. addr

    • 值: 整型:0~n
    • 说明: 采集起始地址
  4. ctype(选填)

    • 值: 字符串:word(默认)/bit
    • 说明: bit:以位为单位采集; word:以双字节为单位采集
  5. bitn

    • 值: 整型:0~15
    • 说明: 位偏移量
  6. cnt

    • 值: 整型:1~n
    • 说明: 采集单位数

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

  1. ID

    • 值: 整型:0~n
    • 说明: PLC单元号
  2. reg

    • 值: 字符串:A/D/C/W/H/
    • 说明: 寄存器类型
  3. addr

    • 值: 整型:0~n
    • 说明: 数据起始地址
  4. ctype(选填)

    • 值: 字符串:word(默认)/bit
    • 说明: 用于关联对应的采集节点
  5. dtype

    • 值: 字符串:
      • bit/byte/ubyte/short/ushort/int/uint/long/ulong/float/double/bytes
    • 说明: 变量类型
  6. len(选填)

    • 值: 整型:1~n
    • 说明: 数据长度,仅当数据类型为bytes时有效,用于指定字符串长度
  7. bitn(选填)

    • 值: 整型:0~15
    • 说明: 位偏移量,当数据类型为bit时有效
  8. cycle

    • 值: 整型:0~n
    • 说明: 单位:秒 精度:0.1
      • 等于0:即指定上报类型为改变上报
      • 大于0:即指定上报周期
  9. name

    • 值: 字符串:上报名称
  10. offset

    • 值: + - * / ~ 数字(例如:offset="*10; +5.123; ~1" 表示乘以10 再加5.123 结果保留1位小数)
文档更新时间: 2025-01-10 16:16   作者:CGL