VisualHMI 的脚本语言是 Lua——轻量、解释执行、上手快。工程→脚本编程里打开编辑器,默认生成 main.lua,包含加密开关、数据类型声明和常用回调函数。这篇讲清楚 LUA 工程的骨架和调试方法。
1. main.lua 的结构
新建工程默认生成 main.lua,分三部分:
- 加密开关:
_ENCRYPT_ = 0。设为 1 后编译生成的 private 资源包里 lua 文件加密,实体屏上电解密运行 - 数据类型声明:按所选协议自动生成。Modbus 协议:VT_LW=1(变量地址)、VT_RW=2(FLASH存储)、VT_0x=10(线圈)、VT_1x=11(输入点)、VT_3x=12(输入寄存器)、VT_4x=13(保持寄存器)。FX2N 协议:VT_X=10(输入位)、VT_Y=11(输出位)、VT_S=12(状态位)、VT_M=13(辅助位)、VT_D=14(数据)、VT_T=15(定时器值)、VT_C=16(计数器)
- 系统回调函数:on_init()、on_run(screen)、on_update(slave,vtype,addr)、on_draw(screen_id,control_id)

2. 编辑与查错
2.1 编辑器
除了自带的脚本编辑器,可以用 NotePad++、Lua editor、VS Code 等第三方工具。注意:多个编辑器同时打开同一项目,自动保存可能导致代码不同步、文件编码(UTF8/GB2312)异常。



2.2 查错(无断点调试)
Lua 是解释性语言,逻辑错误只能在运行时发现,不支持断点调试。错误信息在虚拟屏设置窗口或实体屏调试串口显示。常见报错:
- nil 错误:
attempt to call a nil value——变量/函数未定义、空表。例:mb_write_reg_06 为 nil说明这个函数没找到 - 类型错误:
number expected, got string——参数类型不对 - 重启:表格过大内存溢出、循环体过大触发看门狗复位

实体屏调试:屏上有 TTL 调试串口(HMI80480M070 的 J2 排针,方孔 GND、圆孔 TX),USB 转 TTL 接 115200/8N1 ASCII 显示。个别多串口型号调试串口被占用为第 2 路,不支持调试输出。

3. 分模块管理
功能复杂时建议拆多 lua 文件。在工程目录建 *.lua,on_init 里 dofile 加载:
function on_init()
dofile("wbrCom.lua")
dofile("dp.lua")
dofile("gui.lua")
dofile("ota.lua")
dofile("file.lua")
dofile("wbrCfg.lua")
set_string(VT_LW, regAddr.mcu_ver, "V"..ProductKey.v)
uart_setup(1, 115200, 8, 0, 0)
end

Lua 脚本三大坑:①函数名拼错直接 nil 报错(大小写敏感);②on_run 里别做耗时操作和 delay_ms();③全局变量别滥用,容易内存泄漏触发看门狗。
整理自 广州大彩科技 VisualHMI 开发文档(hmi-doc.gz-dc.com)LUA 教程「关于LUA」,版权归大彩科技所有。
发表回复