AX作为控制器使用
示例场景
如,蔬菜大棚常用温湿度传感器监测大棚温度、湿度。 现添加三色报警灯对大棚温度给出预警设定提示:
- 15 ℃ < 大棚温度 <= 26 ℃
绿灯亮
- 26 ℃ < 大棚温度 <= 30 ℃
黄灯亮
- 30 ℃ < 大棚温度
红灯亮、报警
- 大棚温度 <= 15℃
红灯亮、报警
所需物料
- 智物联MixIOT物联网平台
- 智物联AX适配器
- 三色灯, 购买地址
对接说明
lua示例
aprus.lua
package.cpath="./?.so"
package.path="./?.lua"
cjson = require "cjson"
config = require "config"
require "modbus"
function act_control(m, json)
for k,v in pairs(json) do
if k ~= "Act" then
modbus.write(modbusObj, k, v) --执行写入操作
end
end
end
function mqttdata_handle(m, topic, data)
local json = cjson.decode(data)
if json.Act == "Control" then
act_control(m, json)
end
end
function mqttsys_handle(m, code)
if code == 0 then
modbus.stop(modbusObj)
elseif code == 1 then
modbus.run(modbusObj)
end
end
function modbus_load_collectnodes(session, nodes)
for k,v in pairs(nodes)
do
modbus.add_collectnode(session, v.ID, v.reg, v.addr, v.cnt, v.delay)
end
end
function modbus_load_varnodes(session, nodes)
for k,v in pairs(nodes)
do
modbus.add_varnode(session, v.ID, v.reg, v.addr, v.dtype, v.dBit, v.format, v.len, v.pMode, v.dStyle, v.dOffset, v.dExt)
end
end
function modbusevent_handle(session, code, style_L, val_L, style_E, val_E, z)
if code == 15 then
local json = cjson.encode(mbbuf[session])
mqtt.publish(mqtt3Obj, mbstr[session], "r", json)
mbbuf[session] = {}
elseif code > 10 then
mbbuf[session][style_L] = val_L
mbbuf[session][style_E] = val_E
else
local json = cjson.encode({[style_L] = val_L, [style_E] = val_E, ["Z"] = z})
mqtt.publish(mqtt3Obj, mbstr[session], "r", json)
end
if style_L == "Temp" then --key(style_L) 等于 Temp
W0_Temp = val_L --则把采集的数据赋值给全局变量 Temp
Check_Temperature() --执行温度判断函数
end
end
--[[
** 温度判断函数
]]--
function Check_Temperature()
if W0_Temp > 15 and W0_Temp <= 26 then -- 15 ℃ < 大棚温度 <= 26 ℃ `绿灯亮`
modbus.write(modbusObj, "S_Led", 4) -- S_Led 写入 4 绿灯亮
elseif W0_Temp > 26 and W0_Temp <= 30 then -- 26 ℃ < 大棚温度 <= 30 ℃ `黄灯亮`
modbus.write(modbusObj, "S_Led", 2) -- S_Led 写入 2 黄灯亮
elseif W0_Temp > 30 then -- 30 ℃ < 大棚温度 `红灯亮、报警`
modbus.write(modbusObj, "S_Led", 9) -- S_Led 写入 9 红灯亮、报警
elseif W0_Temp <=15 then -- 大棚温度 <= 15℃ `红灯亮、报警`
modbus.write(modbusObj, "S_Led", 9) -- S_Led 写入 9 红灯亮、报警
end
end
--***
function init()
mqtt3Obj = mqtt.new() --创建一个mqtt实例
mqtt.config(mqtt3Obj,"","xxx.mixiot.top","1883","username","pwd") --上报至指定的物联网平台
user.setluaver(config.AprusX.luaver)
user.setdevinfo(config.AprusX.devinfo)
user.ipconfig(config.AprusX.ipmode, config.AprusX.inet_addr, config.AprusX.netmask)
-- user.reset_eth0() --if you want to set eth0 use this interface
-- user.ipconfig_eth0("manual", "10.100.1.123", "255.255.255.0", "10.100.1.1", "114.114.114.114")
end
function start()
W0_Temp = 0 ------定义一个温度的全局变量-----
init()
----------ModbusRtu Config----------
MBCfg = config.Modbus --config里的配置赋值给MBCfg
--Init Object
modbusObj = nil --初始化 modbusObj
mbbuf = { modbusObj }
mbstr = { modbusObj }
--Config Object
modbusObj = modbus.new(MBCfg.device.type)
mbbuf[modbusObj] = {}
mbstr[modbusObj] = "modbusObj"
--modbus.select_rs485(modbusObj, "2") --you can select "1" or "2", default is "1"
modbus.config(modbusObj, MBCfg.device.rate, MBCfg.device.databit, MBCfg.device.stopbit, MBCfg.device.parity)
modbus_load_collectnodes(modbusObj, MBCfg.node.collect)
modbus_load_varnodes(modbusObj, MBCfg.node.variable)
----------------------------------
mqtt.run(mqtt3Obj)
while true do
local msg = user.waitmsg()
if msg.from == "mqtt-sys" then
mqttsys_handle(msg.session, msg.code)
elseif msg.from == "mqtt-msg" then
mqttdata_handle(msg.session, msg.topic, msg.payload)
elseif msg.from == "modbus" then
modbusevent_handle(msg.session, msg.code, msg.style_L, msg.val_L, msg.style_E, msg.val_E, msg.z)
end
end
end
start()
config.lua
return
{
AprusX={
ipmode="none", --auto/manual/none
inet_addr="192.168.1.234",
netmask="255.255.255.0",
luaver="Temp.L.V100.R",
devinfo="ModbusRtuDev",
},
Modbus={
device={
type="rtu", --"rtu"/"ascii"
rate=9600, --波特率
databit=8, --数据位
stopbit=1, --停止位
parity="None", --奇偶校验 None/Odd/Even
},
node={
collect={
{ID=2, reg="3", addr=0, cnt=2}, --温度传感器
{ID=1, reg="3", addr=16, cnt=1}, --报警灯
},
variable={
{ID=2,reg="3",addr=0,dtype="short",pMode={1,1},dOffset={{"/",10}},dStyle={"Temp"}}, --温度
{ID=2,reg="3",addr=1,dtype="short",pMode={1,1},dOffset={{"/",10}},dStyle={"Humidity"}}, --湿度
{ID=1,reg="3",addr=16,dtype="short",pMode={1,1},dStyle={"Led"}}, --灯
{ID=1,reg="6",addr=16,dtype="short",pMode={1,1},dStyle={"S_Led"}}, --灯,用于写入操作
},
},
},
}
附录
三色灯通信协议资料
文档更新时间: 2024-08-29 10:29 作者:技术支持