"# VisualHMI \u5173\u4e8e LUA\uff1amain.lua \u7ed3\u6784\u3001\u6570\u636e\u7c7b\u578b\u58f0\u660e\u3001\u67e5\u9519\u4e0e\u5206\u6a21\u5757\n\n> 2026-08-04 | 2026-08-04\n> http:\/\/www.modbus.cn\/en\/51492.html\n\n**LUA \u811a\u672c, \u4e32\u53e3\u5c4f\/HMI \u5f00\u53d1**\n\n---\n\nVisualHMI \u7684\u811a\u672c\u8bed\u8a00\u662f **Lua**\u2014\u2014\u8f7b\u91cf\u3001\u89e3\u91ca\u6267\u884c\u3001\u4e0a\u624b\u5feb\u3002\u5de5\u7a0b\u2192\u811a\u672c\u7f16\u7a0b\u91cc\u6253\u5f00\u7f16\u8f91\u5668\uff0c\u9ed8\u8ba4\u751f\u6210 `main.lua`\uff0c\u5305\u542b\u52a0\u5bc6\u5f00\u5173\u3001\u6570\u636e\u7c7b\u578b\u58f0\u660e\u548c\u5e38\u7528\u56de\u8c03\u51fd\u6570\u3002\u8fd9\u7bc7\u8bb2\u6e05\u695a LUA \u5de5\u7a0b\u7684\u9aa8\u67b6\u548c\u8c03\u8bd5\u65b9\u6cd5\u3002\n\n## 1. main.lua \u7684\u7ed3\u6784\n\n\u65b0\u5efa\u5de5\u7a0b\u9ed8\u8ba4\u751f\u6210 `main.lua`\uff0c\u5206\u4e09\u90e8\u5206\uff1a\n\n- **\u52a0\u5bc6\u5f00\u5173**\uff1a`_ENCRYPT_ = 0`\u3002\u8bbe\u4e3a 1 \u540e\u7f16\u8bd1\u751f\u6210\u7684 private \u8d44\u6e90\u5305\u91cc lua \u6587\u4ef6\u52a0\u5bc6\uff0c\u5b9e\u4f53\u5c4f\u4e0a\u7535\u89e3\u5bc6\u8fd0\u884c- **\u6570\u636e\u7c7b\u578b\u58f0\u660e**\uff1a\u6309\u6240\u9009\u534f\u8bae\u81ea\u52a8\u751f\u6210\u3002Modbus \u534f\u8bae\uff1aVT_LW=1\uff08\u53d8\u91cf\u5730\u5740\uff09\u3001VT_RW=2\uff08FLASH\u5b58\u50a8\uff09\u3001VT_0x=10\uff08\u7ebf\u5708\uff09\u3001VT_1x=11\uff08\u8f93\u5165\u70b9\uff09\u3001VT_3x=12\uff08\u8f93\u5165\u5bc4\u5b58\u5668\uff09\u3001VT_4x=13\uff08\u4fdd\u6301\u5bc4\u5b58\u5668\uff09\u3002FX2N \u534f\u8bae\uff1aVT_X=10\uff08\u8f93\u5165\u4f4d\uff09\u3001VT_Y=11\uff08\u8f93\u51fa\u4f4d\uff09\u3001VT_S=12\uff08\u72b6\u6001\u4f4d\uff09\u3001VT_M=13\uff08\u8f85\u52a9\u4f4d\uff09\u3001VT_D=14\uff08\u6570\u636e\uff09\u3001VT_T=15\uff08\u5b9a\u65f6\u5668\u503c\uff09\u3001VT_C=16\uff08\u8ba1\u6570\u5668\uff09- **\u7cfb\u7edf\u56de\u8c03\u51fd\u6570**\uff1aon_init()\u3001on_run(screen)\u3001on_update(slave,vtype,addr)\u3001on_draw(screen_id,control_id)\n\n![main.lua \u81ea\u52a8\u751f\u6210](https:\/\/www.modbus.cn\/wp-content\/uploads\/2026\/08\/visualhmi\/lu000c_1.gif)\n\n## 2. \u7f16\u8f91\u4e0e\u67e5\u9519\n\n### 2.1 \u7f16\u8f91\u5668\n\n\u9664\u4e86\u81ea\u5e26\u7684\u811a\u672c\u7f16\u8f91\u5668\uff0c\u53ef\u4ee5\u7528 NotePad++\u3001Lua editor\u3001VS Code \u7b49\u7b2c\u4e09\u65b9\u5de5\u5177\u3002\u6ce8\u610f\uff1a**\u591a\u4e2a\u7f16\u8f91\u5668\u540c\u65f6\u6253\u5f00\u540c\u4e00\u9879\u76ee\uff0c\u81ea\u52a8\u4fdd\u5b58\u53ef\u80fd\u5bfc\u81f4\u4ee3\u7801\u4e0d\u540c\u6b65\u3001\u6587\u4ef6\u7f16\u7801\uff08UTF8\/GB2312\uff09\u5f02\u5e38**\u3002\n\n![NotePad++](https:\/\/www.modbus.cn\/wp-content\/uploads\/2026\/08\/visualhmi\/lu000c_2.gif)\n\n![Lua editor](https:\/\/www.modbus.cn\/wp-content\/uploads\/2026\/08\/visualhmi\/lu000c_3.png)\n\n![VS Code](https:\/\/www.modbus.cn\/wp-content\/uploads\/2026\/08\/visualhmi\/lu000c_4.png)\n\n### 2.2 \u67e5\u9519\uff08\u65e0\u65ad\u70b9\u8c03\u8bd5\uff09\n\nLua \u662f\u89e3\u91ca\u6027\u8bed\u8a00\uff0c\u903b\u8f91\u9519\u8bef\u53ea\u80fd\u5728\u8fd0\u884c\u65f6\u53d1\u73b0\uff0c**\u4e0d\u652f\u6301\u65ad\u70b9\u8c03\u8bd5**\u3002\u9519\u8bef\u4fe1\u606f\u5728\u865a\u62df\u5c4f\u8bbe\u7f6e\u7a97\u53e3\u6216\u5b9e\u4f53\u5c4f\u8c03\u8bd5\u4e32\u53e3\u663e\u793a\u3002\u5e38\u89c1\u62a5\u9519\uff1a\n\n- **nil \u9519\u8bef**\uff1a`attempt to call a nil value`\u2014\u2014\u53d8\u91cf\/\u51fd\u6570\u672a\u5b9a\u4e49\u3001\u7a7a\u8868\u3002\u4f8b\uff1a`mb_write_reg_06 \u4e3a nil` \u8bf4\u660e\u8fd9\u4e2a\u51fd\u6570\u6ca1\u627e\u5230- **\u7c7b\u578b\u9519\u8bef**\uff1a`number expected, got string`\u2014\u2014\u53c2\u6570\u7c7b\u578b\u4e0d\u5bf9- **\u91cd\u542f**\uff1a\u8868\u683c\u8fc7\u5927\u5185\u5b58\u6ea2\u51fa\u3001\u5faa\u73af\u4f53\u8fc7\u5927\u89e6\u53d1\u770b\u95e8\u72d7\u590d\u4f4d\n\n![\u865a\u62df\u5c4f\u62a5\u9519](https:\/\/www.modbus.cn\/wp-content\/uploads\/2026\/08\/visualhmi\/lu000c_5.png)\n\n**\u5b9e\u4f53\u5c4f\u8c03\u8bd5**\uff1a\u5c4f\u4e0a\u6709 TTL \u8c03\u8bd5\u4e32\u53e3\uff08HMI80480M070 \u7684 J2 \u6392\u9488\uff0c\u65b9\u5b54 GND\u3001\u5706\u5b54 TX\uff09\uff0cUSB \u8f6c TTL \u63a5 115200\/8N1 ASCII \u663e\u793a\u3002\u4e2a\u522b\u591a\u4e32\u53e3\u578b\u53f7\u8c03\u8bd5\u4e32\u53e3\u88ab\u5360\u7528\u4e3a\u7b2c 2 \u8def\uff0c\u4e0d\u652f\u6301\u8c03\u8bd5\u8f93\u51fa\u3002\n\n![\u5b9e\u4f53\u5c4f\u8c03\u8bd5\u53e3](https:\/\/www.modbus.cn\/wp-content\/uploads\/2026\/08\/visualhmi\/lu000c_6.gif)\n\n## 3. \u5206\u6a21\u5757\u7ba1\u7406\n\n\u529f\u80fd\u590d\u6742\u65f6\u5efa\u8bae\u62c6\u591a lua \u6587\u4ef6\u3002\u5728\u5de5\u7a0b\u76ee\u5f55\u5efa `*.lua`\uff0con_init \u91cc dofile \u52a0\u8f7d\uff1a\n\n```\nfunction on_init()\n  dofile(\"wbrCom.lua\")\n  dofile(\"dp.lua\")\n  dofile(\"gui.lua\")\n  dofile(\"ota.lua\")\n  dofile(\"file.lua\")\n  dofile(\"wbrCfg.lua\")\n  set_string(VT_LW, regAddr.mcu_ver, \"V\"..ProductKey.v)\n  uart_setup(1, 115200, 8, 0, 0)\nend\n```\n\n![\u5206\u6a21\u5757](https:\/\/www.modbus.cn\/wp-content\/uploads\/2026\/08\/visualhmi\/lu000c_7.png)\n\nLua \u811a\u672c\u4e09\u5927\u5751\uff1a**\u2460\u51fd\u6570\u540d\u62fc\u9519\u76f4\u63a5 nil \u62a5\u9519\uff08\u5927\u5c0f\u5199\u654f\u611f\uff09\uff1b\u2461on_run \u91cc\u522b\u505a\u8017\u65f6\u64cd\u4f5c\u548c delay_ms()\uff1b\u2462\u5168\u5c40\u53d8\u91cf\u522b\u6ee5\u7528\uff0c\u5bb9\u6613\u5185\u5b58\u6cc4\u6f0f\u89e6\u53d1\u770b\u95e8\u72d7**\u3002\n\n\u6574\u7406\u81ea \u5e7f\u5dde\u5927\u5f69\u79d1\u6280 VisualHMI \u5f00\u53d1\u6587\u6863\uff08hmi-doc.gz-dc.com\uff09LUA \u6559\u7a0b\u300c\u5173\u4e8eLUA\u300d\uff0c\u7248\u6743\u5f52\u5927\u5f69\u79d1\u6280\u6240\u6709\u3002\n\n---\n*modbus.cn*\n"