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 출력走这个口。

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」,版权归大彩科技所有。
답글 작성