VisualHMI 关于 LUA:main.lua 结构、데이터유형声明、查错与分模块

무료무료 기술 자료

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

LUA 是 VisualHMI 的스크립트언어,负责把 HMI 从「显示终端」变成「能干活的主机」:프로토콜분석、逻辑判断、데이터运算、文件操作全在스크립트里。先搞懂 main.lua 的程序结构和系统回调,后面所有 API 才有地方放。

1. main.lua 基本结构

_ENCRYPT_ = 0            -- LUA 스크립트加密开关(量产加密置1)
-- 데이터유형定义(随프로토콜变化,Modbus 常用这些)
VT_LW = 1               -- 内部변수(掉电不저장)
VT_RW = 2               -- Flash 掉电저장区
VT_0x = 10              -- 코일
VT_1x = 11              -- 입력
VT_3x = 12              -- 입력 레지스터
VT_4x = 13              -- 유지 레지스터

-- 系统回调函数(自动被调用,不用自己调)
function on_init() end              -- 上电불러오기后执行一次
function on_run(screen) end         -- 周期执行
function on_update(slave,vtype,addr) end  -- 변수变化
function on_draw(screen,control) end      -- 自绘

main.lua 是入口文件,엔지니어링编译时一并打包。大엔지니어링建议分模块:在 on_init 里 dofile("xxx.lua") 拆开,好维护。

2. 편집도구与编码

官方推荐 NotePad++、Lua editor、VS Code 편집스크립트。编码必须注意:文件编码和 HMI 엔지니어링设置要一致(UTF-8 或 GB2312),编码不对중국어会乱码,문자串比较也全错。

3. 查错方法(LUA 没有断点디버깅)

LUA 是解释性언어,不能断点单步。虚拟屏디버깅常见三类异常:

  • nil 值错误:访问了未定义的변수/表元素——先检查변수初始化
  • 유형错误:number 当 table 用、string 拼接 nil——print 打印유형确认
  • 内存溢出重启:全局累积데이터不释放——查循环里是不是一直 table.insert

实体屏디버깅用 TTL 디버깅시리얼 포트 J2,통신 속도 115200 8N1,print 출력走这个口。

VisualHMI 关于 LUA:main.lua 结构、数据类型声明、查错与分模块插图

4. dofile 分模块管理

function on_init()
  dofile("config.lua")     -- 매개변수설정
  dofile("protocol.lua")   -- 프로토콜분석
  dofile("ui.lua")         -- 界面逻辑
end

模块之间共享全局변수,注意命名别冲突(习惯加前缀,如 g_、m_)。

三个坑:①_ENCRYPT_ 置 1 后스크립트被加密,改스크립트要重新编译下载,디버깅期保持 0;②文件编码必须和엔지니어링一致,UTF-8/GB2312 混用중국어全乱;③print 출력走디버깅시리얼 포트 J2(115200 8N1),实体屏看로그接 USB-TTL。

整理自 广州大彩科技 VisualHMI 개발문서(hmi-doc.gz-dc.com)LUA 튜토리얼「什么是LUA」,版权归大彩科技所有。

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

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

엔지니어 회원

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

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

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

답글 작성

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