Lua 自定义协议
遇到私有协议不用肉眼数字节:写一个 Lua 脚本实现 poll() / decode() 契约,QDebugTool 负责收发调度、超时重试、参数表映射与波形绑定。脚本运行在沙箱内(限额保护),写崩了也不会拖垮软件。

协议脚本契约
| 钩子 | 作用 |
|---|---|
poll() | 按轮询周期定时调用,返回要下发的报文 |
decode | 解析接收流,输出到寄存器区 / 通道区 |
参数表行的地址类型:4x = 脚本输出寄存器区,3x = 脚本输出流通道区——脚本解出的数据直接进参数表、进波形、进组态,和 Modbus 行没有任何区别。
新建连接的「自定义协议」页可选脚本、设轮询周期与超时重试;「导入…」把库外 .lua 复制进脚本库。
脚本编辑器
- 语法高亮、行号、标题栏脏标记
● - 查找/替换/跳转
Ctrl+F / Ctrl+H / Ctrl+G,代码补全Ctrl+Space - 右侧工具箱内置 API 文档:hex 编解码、CRC、SHA-256 等宿主 API,点击查看/插入
- 测试面板:直接调用脚本的
poll()/decode()看返回,离线调试协议逻辑 - 外部修改检测:脚本被其他编辑器改动时自动重载或弹冲突条,提示运行中的设备需重连生效
脚本库两级结构
| 级别 | 路径 | 作用域 |
|---|---|---|
| 项目级 | <项目目录>/scripts/ | 随工程走,拷走工程即带走 |
| 全局 | %APPDATA%/IndustrialDebugTool/IndustrialDebugToolQml/scripts/ | 本机所有工程可用 |
同名时项目级优先。.proj 工程内嵌脚本内容快照,跨机器打开缺文件时按快照自动还原。
删除注意
项目树删除脚本会同时删除磁盘上的 .lua 文件,不可恢复,请先行备份。
组态脚本(事件总线)
脚本首行加 @type:hmi 即为组态脚本,工程中最多指定一个「组态主脚本」(项目树右键 → 设为组态主脚本),作为 HMI 事件宿主。支持事件:onStart/onStop、元件 press/release/valueChanged、screenOpen/screenClose、varChanged、三种定时器。主脚本属性对话框提供总开关 / 订阅清单 / 变量订阅 / 诊断 / REPL 求值。
快速体验
打开 examples/modbus脚本互测.proj:用 Lua 手写的 Modbus 主从协议走 TCP 回环互测,脚本注释完整,是自定义协议的最佳入门模板。