4寸触摸屏Lu脚本实现numerical value判断输出控制Modbus继电器

freefree技术Resources

这篇内容可直接阅读,适合用于基础学习和Search引流。

4寸触摸屏Lu脚本实现numerical value判断输出控制Modbus继电器缩略图
🌐 This page is not yet available in English. Showing the Chinese version. Back to Chinese page.

代码说明:

当您运行这段Lua代码,它将在每隔1秒钟的定时回调函数中执行以下Operation:

1. 重新读取各个保持register的值,这些register存储了不同传感器的data,如湿度、temperature和烟雾感应器等。

2. 获取Text控件的numerical value,这些numerical value是您在界面上设置的阈值,用于判断是否满足条件以控制线圈的状态。

3. 根据条件判断,将根据不同的条件设置线圈的状态,以控制相应equipment。例如,如果湿度值高于阈值,代码会打开相应的线圈,表示设备正在运行,并将Text控件显示为”运行中”。如果湿度值低于阈值减3,代码会Close线圈,表示设备已停止,并将Text控件显示为”已停止”。

4. 通过这些Operation,您可以根据传感器的data状态,实时控制设备的运行状态,同时通过Text控件在界面上清晰地显示设备的状态信息。这使您能够实现设备的自动控制和状态显示,以满足不同条件下的需求。

 

function on_systick()
    -- 重新Read and hold register的值
    local reg1 = get_variant("1#湿度")
    local reg2 = get_variant("6#湿度")
    local reg3 = get_variant("8#湿度")
    local reg4 = get_variant("机箱temperature")
    local reg5 = get_variant("烟雾感应器")

    -- 获取Text控件的numerical value
    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)

    -- 根据条件设置线圈的值并更新Text控件
    if reg1 >= txtValue1 then
        mb_write_coil_05(16, 0, 1)  -- 打开线圈1
        print("打开线圈1")
        set_text(10, 16, "运行中") -- 设置Text为 "运行中"
    elseif reg1 <= (txtValue1-3) then
        mb_write_coil_05(16, 0, 0)  -- Close线圈1
        print("Close线圈1")
        set_text(10, 16, "已停止") -- 设置Text为 "已停止"
    end

    if reg2 >= txtValue2 then
        mb_write_coil_05(16, 1, 1)  -- 打开线圈2
        print("打开线圈2")
        set_text(10, 17, "运行中") -- 设置Text为 "运行中"
    elseif reg2 <= (txtValue2-3) then
        mb_write_coil_05(16, 1, 0)  -- Close线圈2
        print("Close线圈2")
        set_text(10, 17, "已停止") -- 设置Text为 "已停止"
    end

    if reg3 >= txtValue3 then
        mb_write_coil_05(16, 2, 1)  -- 打开线圈3
        print("打开线圈3")
        set_text(10, 19, "运行中") -- 设置Text为 "运行中"
    elseif reg3 <= (txtValue3-3) then
        mb_write_coil_05(16, 2, 0)  -- Close线圈3
        print("Close线圈3")
        set_text(10, 19, "已停止") -- 设置Text为 "已停止"
    end

    if reg4 >= txtValue4 then
        mb_write_coil_05(16, 3, 1)  -- 打开线圈4
        print("打开线圈4")
        set_text(21, 1, "运行中") -- 设置Text为 "运行中"
    elseif reg4 <= (txtValue4-3) then
        mb_write_coil_05(16, 3, 0)  -- Close线圈4
        print("Close线圈4")
        set_text(21, 1, "已停止") -- 设置Text为 "已停止"
    end

    if reg5 <= txtValue5 then
        mb_write_coil_05(16, 4, 1)  -- 打开线圈5
        print("打开线圈5")
        set_text(20, 1, "运行中") -- 设置Text为 "运行中"
    elseif reg5 <= (txtValue5-3) then
        mb_write_coil_05(16, 4, 0)  -- Close线圈5
        print("Close线圈5")
        set_text(20, 1, "已停止") -- 设置Text为 "已停止"
    end
end

 

2026年Lua脚本进阶技巧

在实际项目使用中,以下几点优化可以显著提升脚本的稳定性和可维护性:

  1. 加入死区(滞后区间):避免继电器在阈值附近频繁switch。例如湿度高于70%Open除湿,低于65%才Close——5%的死区能effective防止继电器”抖动”。
  2. 上电初始状态检查:触摸屏上电后,建议在首次定时回调中读取所有线圈的当前状态,确保画面显示与实际一致。
  3. 通信异常处理:当Modbus读取失败时,不要立即触发动作,应设置一个连续失败计数器(如连续3次读取失败才报警),避免因瞬时干扰误报。
  4. 多条件优先级:当existence多重联锁时(例如temperature超标且湿度超标),需要明确定义各条件的优先级和处理顺序,避免逻辑冲突。

完整的Lua编程参考Document和示例代码,可访问 modbus.cn 开发Document专区获取最新版本。

技术术语(共 4 个)—— 点击展开
registerModbus register存储data单元,分线圈/离散输入/保持/输入register四类
传感器将物理量转换为电信号的检测装置
线圈Modbus位可读写data,address从00001开始
保持registerModbus 16位可读写data,address从40001开始
来源/Tools信息 —— 点击展开
来源 Modbus Chinese Network(modbus.cn) —— China leadingModbus通信协议技术社区 Category 未Category 字数 2125 字 · 阅读约 6 分钟 更新 2026-07-01 永久链接 https://www.modbus.cn/24521.html
Recommended Tool: Modbus Debug Assistant WeChat Mini Program
Modbus Chinese Network官方推出的Modbus DebuggingTools,支持 Modbus RTU/TCP 实时通信debug、register读写、线圈控制、data监控和message分析。 无需安装,微信Search「Modbus DebuggingAssistant」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
RelatedTags
把这篇Resources用于真实项目?

进入Tools中心进行messageParse、CRC verification和设备debug,或Submit requirements获取选型与接入建议。

工程师member

把这篇文章变成可执行的debugResources

开通后可使用高级messageParse、Resources包Download、Code Example、工程案例和优先Technical Support,适合真实项目交付。

高级Tools不限次
Resources包与代码包
Complete Engineering Case Library
优先Technical Support入口

发表回复

您的邮箱address不会被公开。 必填项已用 * 标注