"# VisualHMI LUA \u544a\u8b66\u96c6\u4e2d\u7ba1\u7406\uff1awarning_set \u6279\u91cf\u89e6\u53d1\u4e0e 8 \u4ece\u673a\u89e3\u6790\n\n> 2026-08-04 | 2026-08-04\n> http:\/\/www.modbus.cn\/en\/51503.html\n\n**LUA \u811a\u672c, \u4e32\u53e3\u5c4f\/HMI \u5f00\u53d1**\n\n---\n\n\u591a\u53f0 PLC \u544a\u8b66\u6570\u91cf\u5e9e\u5927\u65f6\uff0c\u56fe\u5f62\u5316\u544a\u8b66\u914d\u7f6e\u6548\u7387\u4f4e\u3002\u7528 LUA \u811a\u672c\u505a\u544a\u8b66\u96c6\u4e2d\u7ba1\u7406\uff1a`warning_set_mode` \u5f00\u542f\u811a\u672c\u544a\u8b66\uff0c`warning_set` \u6309\u4f4d\u6279\u91cf\u89e6\u53d1\/\u6e05\u9664\uff0c`on_parse_warning` \u52a8\u6001\u751f\u6210\u544a\u8b66\u6587\u672c\u3002\n\n## 1. API\n\n\u51fd\u6570\u8bf4\u660ewarning_set_mode(en)\u544a\u8b66\u6a21\u5f0f\u603b\u5f00\u5173\uff1a1=\u5f00\u542f Lua \u89e3\u6790\u544a\u8b66\u6a21\u5f0f\uff0c0=\u5173\u95ed\u3002\u5fc5\u987b\u5148\u8c03\u7528\uff0c\u5426\u5219 warning_set \u65e0\u6548warning_set(warning_id, value, count)\u6309\u4f4d\u6279\u91cf\u8bbe\u7f6e\uff1avalue \u662f\u4f4d\u63a9\u7801\uff0c\u4f4e count \u4f4d\u5bf9\u5e94\u4ece warning_id \u5f00\u59cb count \u4e2a\u544a\u8b66\uff081=\u89e6\u53d1\uff0c0=\u6e05\u9664\uff09\uff0ccount 1~16on_parse_warning(id, text, screen_id, control_id, p0, p1, p2, p3)\u544a\u8b66\u5185\u5bb9\u52a8\u6001\u89e3\u6790\u56de\u8c03\uff0c\u8fd4\u56de\u81ea\u5b9a\u4e49\u5b57\u7b26\u4e32\uff08\u53ef\u62fc\u63a5\u53d8\u91cf\/\u5355\u4f4d\/\u72b6\u6001\uff09+ \u7f16\u7801\u6807\u5fd7\uff081=UTF8\/0=GBK\uff09\n\n![\u544a\u8b66API](https:\/\/www.modbus.cn\/wp-content\/uploads\/2026\/08\/visualhmi\/lu007_1.png)\n\n## 2. \u573a\u666f\uff1a8 \u53f0 PLC \u544a\u8b66\u96c6\u4e2d\u7ba1\u7406\n\nModbus RTU \u603b\u7ebf\u6302 8 \u53f0 PLC\uff08\u7ad9\u5730\u5740 1~8\uff09\uff0c\u6bcf\u53f0 100 \u4e2a\u540c\u6784\u544a\u8b66\u70b9\uff0c\u544a\u8b66\u8d77\u59cb\u5730\u5740 4x1000\u3001\u8fde\u7eed 6 \u4e2a\u5730\u5740\uff08\u6bcf\u4e2a\u5730\u5740 16 \u4e2a bit \u5bf9\u5e94 16 \u4e2a\u544a\u8b66\uff09\u3002\n\n**\u5de5\u7a0b\u914d\u7f6e**\uff1a\u5de5\u7a0b\u2192\u544a\u8b66\u8bbe\u7f6e\uff0c\u544a\u8b66\u6761\u6570\u8bbe **768**\uff088 \u53f0\u00d796 \u6761\uff0c\u4e0d\u80fd\u5c0f\u4e8e\u5b9e\u9645\u6761\u6570\uff09\u3002\u544a\u8b66\u63a7\u4ef6\u5c5e\u6027\u6309\u9700\u914d\u3002\n\n![\u544a\u8b66\u8bbe\u7f6e](https:\/\/www.modbus.cn\/wp-content\/uploads\/2026\/08\/visualhmi\/lu007_2.png)\n\n## 3. LUA \u5b9e\u73b0\n\n### 3.1 \u521d\u59cb\u5316\n\n```\nfunction on_init()\n  warning_set_mode(1)          -- \u542f\u7528 Lua \u544a\u8b66\u89e3\u6790\n  set_auto_read(0)             -- \u811a\u672c\u63a7\u5236\u8bfb\u53d6\n  create_resp_que()            -- \u961f\u5217\u53d1\u9001, \u4f7f\u80fd\u56de\u8c03 on_cmd_resp\n  for i = 0, 7 do\n    select_slave(i)\n    start_read(i+1, VT_4x, 0x1000, 6)  -- \u8bfb\u4ece\u673a1~8\u7684\u544a\u8b66\n  end\nend\n```\n\n### 3.2 \u89e6\u53d1\/\u89e3\u9664\u544a\u8b66\n\non_cmd_resp \u91cc\u89e3\u6790\u6bcf\u4e2a\u4ece\u673a\u3001\u6bcf\u4e2a\u5bc4\u5b58\u5668\uff080x1000~0x1005\uff09\u3001\u6bcf\u4e2a bit\uff1a\n\n```\n-- \u544a\u8b66\u6587\u672c\u8868: 4x1000 bit0~bit15 ... 4x1005 bit0~bit15 \u517196\u6761\n_warningTb = {\n  \"\u76f8\u5e8f\u4fdd\u62a4\",\"\u6c34\u6d41\u5f00\u5173\u4fdd\u62a4\",\"\u6c34\u4f4d\u5f00\u5173\u4fdd\u62a4\",\"\u5236\u70ed\u51fa\u6c34\u6e29\u5ea6\u8fc7\u9ad8\",\n  \"\u4e0b\u6c34\u6d41\u5f00\u5173\u65ad\u5f00\",\"1#\u7535\u6d41\u6545\u969c\",\"2#\u7535\u6d41\u6545\u969c\",\"\u7ebf\u63a7\u5668\u901a\u8baf\u6545\u969c\",\n  -- ... \u5b8c\u657496\u6761\u89c1\u6e90\u6587\u6863\n}\n\nfunction on_cmd_resp(slave, vtype, addr, count, ret, wr)\n  if ret == 0 and wr == 0 then\n    if vtype == VT_4x and addr == 0x1000 and count == 6 then\n      select_slave(slave)  -- \u4ece\u673a1~8\n      for i = 0, 5 do      -- 6\u4e2a\u544a\u8b66\u5bc4\u5b58\u5668\n        local val = get_uint16(VT_4x, 0x1000 + i)\n        for j = 0, 15 do   -- 16\u4e2abit\n          local idx = i*16 + j + 1\n          -- \u8df3\u8fc7\"\u9884\u7559\"\u4f4d: idx==35, 41~48, 85~96\n          if idx ~= 35 and not (idx &gt;= 41 and idx = 85 and idx &gt; j) &amp; 0x01), 1)\n          end\n        end\n      end\n    end\n  end\nend\n```\n\n### 3.3 \u89e3\u6790\u544a\u8b66\u6587\u672c\uff08\u5e26\u4ece\u673a\u524d\u7f00\uff09\n\n```\nfunction on_parse_warning(id, text, screen_id, control_id, p0, p1, p2, p3)\n  local slaveId = (id \/\/ 96) + 1     -- \u7b2c\u51e0\u4e2a\u4ece\u673a\n  local msgId   = id % 96            -- \u544a\u8b66\u7c7b\u578bID\n  if msgId == 0 then msgId = 96 end\n  local curWarnMsg = \"\u4ece\u673a\" .. string.format(\"%02d\", slaveId) .. \": \" .. _warningTb[msgId]\n  return curWarnMsg, 1               -- \u8fd4\u56deGBK\u7f16\u7801(0=UTF8\/1=GBK)\nend\n```\n\n![\u8fd0\u884c\u9884\u89c8](https:\/\/www.modbus.cn\/wp-content\/uploads\/2026\/08\/visualhmi\/lu007_3.png)\n\n\u544a\u8b66\u96c6\u4e2d\u7ba1\u7406\u4e09\u8981\u70b9\uff1a**\u2460warning_set_mode(1) \u5fc5\u987b\u6700\u5148\u8c03\u7528\uff1b\u2461warning_set \u7684 value \u662f 16 \u4f4d\u63a9\u7801\uff0c\u4e00\u6b21\u6700\u591a\u6279\u91cf\u8bbe 16 \u6761\uff1b\u2462on_parse_warning \u7684\u8fd4\u56de\u7f16\u7801\u53c2\u6570\u522b\u641e\u53cd\u2014\u20141=GBK\u30010=UTF-8\uff0c\u548c\u4e2d\u6587\u663e\u793a\u4e71\u7801\u76f4\u63a5\u76f8\u5173**\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\u544a\u8b66\u8bb0\u5f55\u300d\uff0c\u7248\u6743\u5f52\u5927\u5f69\u79d1\u6280\u6240\u6709\u3002\n\n---\n*modbus.cn*\n"