Aprus Lua-FinsTCP配置说明
概述
本章主要为Aprus Lua-FinsTCP协议的相关配置说明,该协议主要针对支持(欧姆龙)FinsTCP协议的设备。Aprus适配器可通过FinsTCP协议与对接设备进行通信。而其中Aprus的Lua包含apru.lua
和config.lua
两个文件,客户只需配置config.lua
就可以对支持Fins-TCP协议的设备进行数据采集。如需修改aprus.lua
文件的内容时,请咨询相关的技术人员,随意修改会导致适配器不能正常工作,所以此文档主要介绍config.lua
内容。
1 aprus.lua配置说明
- Aprus Lua-FinsTCP配置说明
- 概述
- 1 aprus.lua配置说明
- Demo 示例
- Aprus Lua-FinsTCP配置说明
- 1. aprus.lua配置说明
- 1.1 导入finstcp协议支持库
- 1.2 加载config.lua配置文件
- 1.3 创建finstcp对象
- 1.4 配置finstcp对象接口参数
- 1.5 添加finstcp采集节点
- 1.6 添加finstcp上报变量节点
- 1.7 运行finstcp实例
- 1.8 暂停finstcp实例
- 1.9 等待finstcp事件
- 1.10 finstcp事件处理
- 1.11 mqtt数据上报
- 1.12 反向控制
- 2. config.lua配置说明
- 2.1 Aprus: 接口属性
- 1. Aprus: 接口属性
- 2. finstcp-Device: 接口属性
- 3. finstcp-ColNode :采集节点属性
- 4. finstcp-VarNode:上报节点属性
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协议支持库
- 语句:
require "finstcp"
说明: 导入finstcp协议支持库
1.2 加载config.lua配置文件
- 语句:
config = require "config"
说明: 导入config.lua
中的配置信息(下一节介绍config.lua
)
1.3 创建finstcp对象
- 语句:
finstcpobj = finstcp.new("finstcp")
说明: 创建finstcp对象,返回finstcpobj
供全局使用
1.4 配置finstcp对象接口参数
- 语句:
finstcp.config(finstcpobj, cjson.encode(config.finstcp.Device))
说明: 配置finstcp通信网卡参数
1.5 添加finstcp采集节点
- 语句:
finstcp_load_collectnodes(finstcpobj,config.finstcp.ColNode)
说明: 添加config.lua
中所配置的采集节点
1.6 添加finstcp上报变量节点
- 语句:
finstcp_load_varnodes(finstcpobj,config.finstcp.VarNode)
说明: 添加config.lua
中所配置的变量节点
1.7 运行finstcp实例
- 语句:
finstcp.run(finstcpobj)
说明: 在mqtt建立连接后运行finstcp实例,即开始采集+运算
1.8 暂停finstcp实例
- 语句:
finstcp.stop(finstcpobj)
说明: 在mqtt连接断开时暂停finstcp实例
1.9 等待finstcp事件
- 语句:
local r = user.waitmsg()
说明: 启动事件等待,该接口会返回全局各种事件,包括finstcp对象事件
1.10 finstcp事件处理
- 语句:
说明: 当接收到finstcp对象事件时,调用处理函数finstcp_handleelseif r.from == "finstcp" then finstcp_handle(r.obj, r.name, r.code, r.data)
r.obj
即new时所返回的对象r.name
即new时所配置的对象名称r.code
事件码 区分改变上报事件 周期上报事件等等r.data
事件数据
1.11 mqtt数据上报
- 语句:
说明: 若无需特殊处理,则直接将事件数据通过mqtt发送;如需要二次处理可将data展开做分析function finstcp_handle(obj, name, code, data) mqtt.publish(m1, name, "r", data) end
1.12 反向控制
- 语句:
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: 接口属性
ipmode
- 值:
"auto"/"manual"/"none"
- 说明: ip获取方式
- 值:
inet_addr
- 值:
"192.168.250.234"
- 说明: Aprus的IP地址
- 值:
netmask
- 值:
"255.255.255.0"
- 说明: 子网掩码
- 值:
luaver
- 值:
"MAX.LUA.V032700.R"
- 说明: Aprus的Lua版本信息,根据实际脚本自行填写
- 值:
devinfo
- 值:
"finstcpDev"
- 说明: 与Aprus对接设备,可根据需求自行填写
- 值:
2. finstcp-Device: 接口属性
ip
- 值: 字符串
- 说明: 设备的ip
port
- 值: 字符串
- 说明: 设备的端口号
3. finstcp-ColNode :采集节点属性
ID
- 值: 整型:0~n
- 说明: PLC单元号
reg
- 值: 字符串:
A/D/C/W/H/
- 说明: 寄存器类型
- 值: 字符串:
addr
- 值: 整型:0~n
- 说明: 采集起始地址
ctype(选填)
- 值: 字符串:
word
(默认)/bit
- 说明:
bit
:以位为单位采集;word
:以双字节为单位采集
- 值: 字符串:
bitn
- 值: 整型:0~15
- 说明: 位偏移量
cnt
- 值: 整型:1~n
- 说明: 采集单位数
4. finstcp-VarNode:上报节点属性
ID
- 值: 整型:0~n
- 说明: PLC单元号
reg
- 值: 字符串:
A/D/C/W/H/
- 说明: 寄存器类型
- 值: 字符串:
addr
- 值: 整型:0~n
- 说明: 数据起始地址
ctype(选填)
- 值: 字符串:
word
(默认)/bit
- 说明: 用于关联对应的采集节点
- 值: 字符串:
dtype
- 值: 字符串:
bit/byte/ubyte/short/ushort/int/uint/long/ulong/float/double/bytes
- 说明: 变量类型
- 值: 字符串:
len(选填)
- 值: 整型:1~n
- 说明: 数据长度,仅当数据类型为
bytes
时有效,用于指定字符串长度
bitn(选填)
- 值: 整型:0~15
- 说明: 位偏移量,当数据类型为
bit
时有效
cycle
- 值: 整型:0~n
- 说明: 单位:秒 精度:0.1
- 等于0:即指定上报类型为改变上报
- 大于0:即指定上报周期
name
- 值: 字符串:上报名称
offset
- 值:
+ - * / ~
数字(例如:offset="*10; +5.123; ~1"
表示乘以10 再加5.123 结果保留1位小数)
- 值:
文档更新时间: 2025-01-10 16:16 作者:CGL