function on_systick()
-- 重新读取保持寄存器的值
local reg1 = get_variant("1#湿度")
local reg2 = get_variant("6#湿度")
local reg3 = get_variant("8#湿度")
local reg4 = get_variant("机箱温度")
local reg5 = get_variant("연기感应器")
-- 获取文本控件的数值
local txtValue1 = get_value(10, 1)
local txtValue2 = get_value(10, 2)
local txtValue3 = get_value(10, 3)
local txtValue4 = get_value(14, 2)
local txtValue5 = get_value(14, 4)
-- 根据条件设置线圈的值并更新文本控件
if reg1 >= txtValue1 then
mb_write_coil_05(16, 0, 1) -- 打开线圈1
print("打开线圈1")
set_text(10, 16, "运行中") -- 设置文本为 "运行中"
elseif reg1 <= (txtValue1-3) then
mb_write_coil_05(16, 0, 0) -- 关闭线圈1
print("关闭线圈1")
set_text(10, 16, "已停止") -- 设置文本为 "已停止"
end
if reg2 >= txtValue2 then
mb_write_coil_05(16, 1, 1) -- 打开线圈2
print("打开线圈2")
set_text(10, 17, "运行中") -- 设置文本为 "运行中"
elseif reg2 <= (txtValue2-3) then
mb_write_coil_05(16, 1, 0) -- 关闭线圈2
print("关闭线圈2")
set_text(10, 17, "已停止") -- 设置文本为 "已停止"
end
if reg3 >= txtValue3 then
mb_write_coil_05(16, 2, 1) -- 打开线圈3
print("打开线圈3")
set_text(10, 19, "运行中") -- 设置文本为 "运行中"
elseif reg3 <= (txtValue3-3) then
mb_write_coil_05(16, 2, 0) -- 关闭线圈3
print("关闭线圈3")
set_text(10, 19, "已停止") -- 设置文本为 "已停止"
end
if reg4 >= txtValue4 then
mb_write_coil_05(16, 3, 1) -- 打开线圈4
print("打开线圈4")
set_text(21, 1, "运行中") -- 设置文本为 "运行中"
elseif reg4 <= (txtValue4-3) then
mb_write_coil_05(16, 3, 0) -- 关闭线圈4
print("关闭线圈4")
set_text(21, 1, "已停止") -- 设置文本为 "已停止"
end
if reg5 <= txtValue5 then
mb_write_coil_05(16, 4, 1) -- 打开线圈5
print("打开线圈5")
set_text(20, 1, "运行中") -- 设置文本为 "运行中"
elseif reg5 <= (txtValue5-3) then
mb_write_coil_05(16, 4, 0) -- 关闭线圈5
print("关闭线圈5")
set_text(20, 1, "已停止") -- 设置文本为 "已停止"
end
end
2026年Lua스크립트进阶技巧
在实际项目使用中,以下几点优化可以显著提升스크립트的稳定性和可维护性:
- 加入死区(滞后区间):避免릴레이在阈值附近频繁开关。例如湿度高于70%开启除湿,低于65%才关闭——5%的死区能有效防止릴레이"抖动"。
- 上电初始状态检查:触摸屏上电后,建议在首次定时回调中读取所有线圈的当前状态,确保画面显示与实际一致。
- 통신异常处理:当Modbus读取失败时,不要立即触发动作,应设置一个连续失败计数器(如连续3次读取失败才报警),避免因瞬时干扰误报。
- 多条件优先级:当存在多重联锁时(例如温度超标且湿度超标),需要明确定义各条件的优先级和处理顺序,避免逻辑冲突。
完整的Lua编程参考文档和示例代码,可访问 modbus.cn 开发文档专区获取最신버전本。
发表回复