"# VisualHMI \u5206\u671f\u5e94\u7528(\u81ea\u5b9a\u4e49)\uff1a\u52a8\u6001\u5bc6\u7801 Lua \u5143\u8868\u65b9\u6848\n\n> 2026-08-04 | 2026-08-04\n> https:\/\/www.modbus.cn\/en\/51596.html\n\n**\u4e32\u53e3\u5c4f\/HMI \u5f00\u53d1, \u5176\u4ed6\u6280\u672f\u8d44\u6599**\n\n---\n\n\u7cfb\u7edf\u5206\u671f\u662f\u300c\u5230\u671f\u524d\u9501\u5b9a\u300d\uff0c\u81ea\u5b9a\u4e49\u5206\u671f\u662f\u300c\u5230\u671f\u624d\u9501\u300d\u2014\u2014\u66f4\u8d34\u5408\u771f\u5b9e\u79df\u8d41\u573a\u666f\u3002\u8fd9\u7bc7\u7528 Lua \u5143\u8868\u5c01\u88c5\uff0c\u5b9e\u73b0\u65f6\u95f4\u7cbe\u51c6\u89e6\u53d1 + \u52a8\u6001\u5bc6\u7801\uff08\u7b97\u6cd5\u5916\u7f6e\uff0c\u4e0d\u9884\u5b58\u9759\u6001\u5bc6\u7801\uff09\u3002\n\n## 1. \u4e24\u79cd\u65b9\u6848\u533a\u522b\n\n\u7ef4\u5ea6\u7cfb\u7edf\u65b9\u6848\uff08\u524d\u7f6e\u9501\u5b9a\uff09\u81ea\u5b9a\u4e49\u65b9\u6848\uff08\u5230\u671f\u9501\u5b9a\uff09\u89e6\u53d1\u65f6\u673a\u914d\u7f6e\u540e\u5373\u751f\u6548\u5f53\u524d\u65f6\u95f4 \u2265 \u622a\u6b62\u65f6\u95f4\u624d\u9501\u7528\u6237\u611f\u77e5\u63d0\u524d\u88ab\u9501\u521a\u597d\u5230\u671f\u88ab\u9501\n\n## 2. \u8bbe\u8ba1\u8981\u70b9\n\n- **\u52a8\u6001\u5bc6\u7801**\uff1a\u7531\u5916\u90e8\u51fd\u6570 password_func(date) \u5b9e\u65f6\u7b97\uff08\u5982\u5e74+\u6708+\u65e5\uff09\uff0c\u4e0d\u9884\u5b58\uff0c\u9632\u9006\u5411- **\u8d85\u7ea7\u5bc6\u7801**\uff1a\u5355\u4e00 uint32\uff0c\u4e00\u952e\u5168\u5c40\u89e3\u9501\uff0c\u73b0\u573a\u8fd0\u7ef4\u515c\u5e95- **\u81ea\u6821\u9a8c\u70ed\u66f4\u65b0**\uff1a\u542f\u52a8\u68c0\u6d4b\u65e5\u671f\u53d8\u66f4\uff0c\u914d\u7f6e\u4fee\u6539\u540e\u81ea\u52a8\u91cd\u5199\u5b58\u50a8- **\u72b6\u6001\u6301\u4e45\u5316**\uff1a\u65f6\u95f4\/\u5f00\u5173\/\u89e3\u9501\u8fdb\u5ea6\u5b58 VT_RW \u975e\u6613\u5931\u533a\uff0c\u6389\u7535\u4e0d\u4e22\n\n## 3. \u5b9e\u4f8b\u5316\uff08main.lua\uff09\n\nStage.new(base_addr, stage_dates, password_func, super_password)\uff1a\n\n```\n-- base_addr: VT_RW \u8d77\u59cb\u5730\u5740\uff0c\u8fde\u7eed\u5b58\u50a8\u6240\u6709\u914d\u7f6e\n-- stage_dates: 3\u671f\u622a\u6b62\u65e5\u671f\u5217\u8868\uff0c\u5fc5\u987b\u9012\u589e\n-- password_func: \u5bc6\u7801\u8ba1\u7b97\u51fd\u6570\n-- super_password: \u8d85\u7ea7\u5bc6\u7801\ndofile(\"stage.lua\")\ng_stage = Stage.new(0x1000,\n  {{2023,11,1},{2023,12,1},{2024,1,1}},\n  function(d) return d[1]+d[2]+d[3] end,\n  123456)\n```\n\n\u6a21\u5757\u7528\u95ed\u5305 + \u5143\u8868 OO \u5b9e\u73b0\uff0c\u652f\u6301 1~10 \u671f\u3001\u72b6\u6001\u5168\u5b58 RW \u533a\u3002\u6838\u5fc3\u5224\u5b9a get_eligible_stage() \u4e25\u683c\u6bd4\u5bf9\u7cfb\u7edf\u65f6\u95f4\u4e0e\u622a\u6b62\u65e5\uff0cnow \u2265 deadline \u624d\u9501\u5c4f\u3002\n\n\u81ea\u5b9a\u4e49\u5206\u671f\u6bd4\u7cfb\u7edf\u5206\u671f\u7075\u6d3b\uff0c\u4ee3\u4ef7\u662f\u8981\u81ea\u5df1\u5199 Lua \u6a21\u5757\uff08stage.lua\uff09\u3002\u6700\u5173\u952e\u7684**\u52a8\u6001\u5bc6\u7801\u4e0d\u9884\u5b58**\u2014\u2014\u5bc6\u7801\u7b97\u51fa\u6765\u5373\u5f03\uff0c\u5373\u4f7f\u88ab\u4eba dump \u51fa RW \u533a\u4e5f\u53ea\u770b\u5230\u67d0\u671f\u7684\u7ed3\u679c\uff0c\u9006\u5411\u4e0d\u51fa\u7b97\u6cd5\u3002\u72b6\u6001\u5fc5\u987b\u843d RW \u533a\uff0c\u5426\u5219\u91cd\u542f\u4e22\u5931\u89e3\u9501\u8fdb\u5ea6\u3002\n\n\u6574\u7406\u81ea \u5e7f\u5dde\u5927\u5f69\u79d1\u6280 VisualHMI \u5f00\u53d1\u6587\u6863\uff08hmi-doc.gz-dc.com\uff09\u5176\u4ed6\u6280\u672f\u6559\u7a0b\u300c\u5206\u671f\u5e94\u7528(RW-\u81ea\u5b9a\u4e49)\u300d\uff0c\u7248\u6743\u5f52\u5927\u5f69\u79d1\u6280\u6240\u6709\u3002\n\n---\n*modbus.cn*\n"