4寸触摸屏Lu스크립트实现数值判断输出控制Modbus릴레이

무료무료 기술 자료

이 글은 바로 읽을 수 있으며 기초 학습과 검색 유입에 적합합니다.

4寸触摸屏Lu脚本实现数值判断输出控制Modbus继电器
代码说明: 当您运行这段Lua代码,它将在每隔1秒钟的定时回调函数中执行以下操作: 1. 重新读取各个保持寄存器的值,这些寄存器存储了不同센서的데이터,如湿度、温度和연기感应器等。 2. 获取文本控件的数值,这些数值是您在界面上设置的阈值,用于判断是否满足条件以控制线圈的状态。 3. 根据条件判断,将根据不同的条件设置线圈的状态,以控制相应的设备。例如,如果湿度值高于阈值,代码会打开相应的线圈,表示设备正在运行,并将文本控件显示为"运行中"。如果湿度值低于阈值减3,代码会关闭线圈,表示设备已停止,并将文本控件显示为"已停止"。 4. 通过这些操作,您可以根据센서的데이터状态,实时控制设备的运行状态,同时通过文本控件在界面上清晰地표시 장치的状态信息。这使您能够实现设备的自动控制和状态显示,以满足不同条件下的需求。  
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스크립트进阶技巧

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

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

完整的Lua编程参考文档和示例代码,可访问 modbus.cn 开发文档专区获取最신버전本。

相关标签
실제 프로젝트에 이 자료를 활용하시겠습니까?

도구 센터에서 프레임 분석, CRC 검증, 장비 디버깅을 진행하거나 요청을 제출하여 선정 및 연동 제안을 받아보세요.

엔지니어 회원

이 글을 실행 가능한 디버깅 자료로 활용하세요

가입하면 고급 프레임 분석, 자료 패키지 다운로드, 코드 예제, 엔지니어링 사례, 우선 기술 지원을 이용할 수 있어 실제 프로젝트 납품에 적합합니다.

고급 도구 무제한 이용
자료 패키지와 코드 패키지
완전한 엔지니어링 사례 라이브러리
우선 기술 지원 채널

发表回复

이메일 주소는 공개되지 않습니다. 必填项已用 * 标注