"# VisualHMI LUA \u505a Modbus \u4e00\u4e3b\u591a\u4ece\uff1astart_read\/select_slave \u5b9e\u6218\u4e0e\u5751\n\n> 2026-08-04 | 2026-08-04\n> https:\/\/www.modbus.cn\/en\/49944.html\n\n**LUA \u811a\u672c, \u4e32\u53e3\u5c4f\/HMI \u5f00\u53d1**\n\n---\n\n\u524d\u9762\u8bb2\u4e86\u5c4f\u5728\u5de5\u7a0b\u91cc\u914d Modbus \u4e3b\u4ece\uff0c\u4f46\u78b0\u5230\"\u4e00\u4e3b\u591a\u4ece + \u590d\u6742\u903b\u8f91\"\uff08\u6bd4\u5982\u8bfb\u4e24\u4e2a\u4ece\u673a\u7684\u7535\u91cf\u6c42\u548c\u3001\u6309\u6761\u4ef6\u5199\u5bc4\u5b58\u5668\u3001\u6279\u91cf\u5199\u7ebf\u5708\uff09\uff0c\u5149\u9760\u753b\u9762\u7ed1\u53d8\u91cf\u4e0d\u591f\uff0c\u5f97\u7528 LUA \u811a\u672c\u63a5\u7ba1\u901a\u4fe1\u3002\u8fd9\u7bc7\u628a Modbus \u76f8\u5173\u7684 LUA API \u8bb2\u900f\uff0c\u4ee3\u7801\u90fd\u662f\u5927\u5f69\u6587\u6863\u91cc\u7684\u771f\u5b9e\u4f8b\u7a0b\uff0c\u6211\u52a0\u4e86\u5de5\u7a0b\u5e08\u89c6\u89d2\u7684\u6ce8\u89e3\u548c\u8e29\u5751\u63d0\u793a\u3002\n\n**\u26a0\ufe0f \u9002\u7528\u8303\u56f4\uff1a** HMI&amp;M&amp;Dx \u7cfb\u5217\u3002\u793a\u4f8b\u662f Modbus \u4e24\u4e2a\u4ece\u7ad9\uff0c\u7ad9\u53f7 10 \u548c 20\uff0c\u903b\u8f91\u5bf9 FX2N\/FX3U \u4e3b\u4ece\u540c\u6837\u9002\u7528\u3002\n\n## \u4e00\u3001\u6838\u5fc3\u901a\u4fe1 API\n\n### 1.1 start_read \u2014\u2014 \u540e\u53f0\u81ea\u52a8\u8f6e\u8be2\uff08\u6700\u5e38\u7528\uff09\n\n\u4e3b\u673a\u6a21\u5f0f\u4e0b\u5468\u671f\u6027\u8bfb\u4ece\u673a\u5bc4\u5b58\u5668\u7684\u8c03\u5ea6\u51fd\u6570\u3002\u8c03\u7528\u540e\u7cfb\u7edf\u628a\u5b83\u52a0\u8fdb\u901a\u4fe1\u961f\u5217\uff0c\u6bcf\u4e2a\u5468\u671f\u81ea\u52a8\u53d1\u8bf7\u6c42\uff0c\u8fd4\u56de\u6570\u636e\u5199\u8fdb HMI \u5185\u5b58\u955c\u50cf\uff0c\u4f60\u7528 `get_uint16`\/`get_float` \u76f4\u63a5\u8bfb\u7f13\u5b58\uff0c**\u6ca1\u6709\u901a\u4fe1\u5ef6\u8fdf**\u3002\n\n```\n`start_read(index, vtype, addr, quantity, cycle, cycle_run, mode)`\n```\n\n\u53c2\u6570\u7c7b\u578b\u8bf4\u660e\n\nindexnumber\u4efb\u52a1\u7d22\u5f15 0~127\uff0cstop_read \u65f6\u7528\nvtypenumber\u6570\u636e\u7c7b\u578b VT_3x \/ VT_4x \u7b49\naddrnumber\u5bc4\u5b58\u5668\u5730\u5740\nquantitynumber\u8bfb\u53d6\u6570\u91cf 1~120\ncyclenumber\u8f6e\u8be2\u5468\u671f\u500d\u6570\uff0c0=\u6bcf\u5468\u671f\u90fd\u8bfb\ncycle_runnumber\u5468\u671f\u5185\u7b2c\u51e0\u6b21\u6267\u884c\uff080-based\uff0c\u9700 &lt; cycle\uff09\nmodenumber0=\u6301\u7eed\u8bfb(\u9ed8\u8ba4) \/ 1=\u4ec5\u8bfb\u4e00\u6b21\n\n**\ud83d\udca1 \u8c03\u5ea6\u7cbe\u9ad3\uff1a** cycle\/cycle_run \u7528\u6765\u5206\u9ad8\u4f4e\u9891\u3002\u9ad8\u9891\u53d8\u91cf\uff08\u901f\u5ea6\u3001\u6e29\u5ea6\uff09cycle=0 \u6bcf\u5468\u671f\u8bfb\uff1b\u4f4e\u9891\u53d8\u91cf\uff08\u7d2f\u8ba1\u91cf\u3001\u72b6\u6001\u5b57\uff09cycle=5, cycle_run=4 \u6bcf 5 \u5468\u671f\u8bfb\u4e00\u6b21\uff0c**\u964d\u603b\u7ebf\u8d1f\u8f7d**\u3002\u4f8b\uff1a\n\n`start_read(0, VT_4x, 0x1000, 10)` \u2192 \u6bcf\u5468\u671f\u8bfb 4x1000~1009\n\n`start_read(1, VT_4x, 0x2000, 10, 3, 2)` \u2192 \u6bcf 3 \u5468\u671f\u3001\u7b2c 3 \u4e2a\u5468\u671f\u8bfb 4x2000~2009\n\n### 1.2 \u5176\u5b83\u7ba1\u7406\u51fd\u6570\n\n- `stop_read(index)`\uff1a\u505c\u5355\u4e2a\u8f6e\u8be2\u4efb\u52a1\uff0c\u7f13\u5b58\u4fdd\u7559\u6700\u540e\u4e00\u6b21\u503c\n- `stop_all_read()`\uff1a\u4e00\u952e\u505c\u5168\u90e8\uff0c\u9002\u5408\u590d\u4f4d\/\u6025\u505c\n- `set_auto_read(en)`\uff1a1=\u542f\u7528\u753b\u9762\u7ed1\u5b9a\u53d8\u91cf\u81ea\u52a8\u8bfb\uff08\u9ed8\u8ba4\uff09\uff0c0=\u53ea\u9760\u811a\u672c `start_read` \u63a5\u7ba1\uff0c\u9002\u5408\u9ad8\u5e26\u5bbd\u573a\u666f\u53bb\u5197\u4f59\n\n### 1.3 select_slave \u2014\u2014 \u5207\u6362\u4ece\u7ad9\uff08\u5173\u952e\uff09\n\n\u591a\u4ece\u673a\u4e0b\uff0c`select_slave(slave_id)` \u4e34\u65f6\u6307\u5b9a\u540e\u7eed `get_xxx\/set_xxx` \u8bbf\u95ee\u54ea\u4e2a\u4ece\u673a\u3002**\u6ce8\u610f slave_id \u662f\u4ece\u673a\u5217\u8868\u4e0b\u6807\uff0c\u4e0d\u662f Modbus \u7ad9\u53f7\uff01**\n\n\u672f\u8bed\u542b\u4e49\u793a\u4f8b\n\n\u4ece\u673a\u7d22\u5f15 slave_idHMI \u5185\u90e8\u5217\u8868\u4e0b\u6807 0,1,20 = \u7b2c\u4e00\u4e2a\u4ece\u673a\nModbus \u7ad9\u53f7\u8bbe\u5907\u7269\u7406\u5730\u574010, 33\n\n**\u26a0\ufe0f \u6700\u5bb9\u6613\u9519\u7684\u70b9\uff1a** slave_id=0 \u5bf9\u5e94\u7ad9\u53f7 10\uff0cslave_id=1 \u5bf9\u5e94\u7ad9\u53f7 33\uff0c\u8fd9\u4e2a\u6620\u5c04\u5728\u5de5\u7a0b\u914d\u7f6e\u91cc\u5b9a\u3002\u811a\u672c\u91cc\u586b\u9519\u4e0b\u6807\u5c31\u8bfb\u5230\u522b\u7684\u4ece\u673a\u53bb\u4e86\uff0c\u67e5\u534a\u5929\u4ee5\u4e3a\u662f\u534f\u8bae\u95ee\u9898\u3002\n\n## \u4e8c\u3001LUA \u8bfb\u5bc4\u5b58\u5668\uff08\u5e26\u5728\u7ebf\u5224\u65ad\uff09\n\n\u8bfb\u4e4b\u524d\u4e24\u4ef6\u4e8b\u4e0d\u80fd\u7701\uff1a**\u5224\u65ad\u4ece\u673a\u5728\u7ebf** + **\u9009\u5bf9\u4ece\u7ad9**\u3002\u5728\u7ebf\u72b6\u6001\u5b58\u5728\u7cfb\u7edf\u53d8\u91cf `VT_LW 0x01A3` \u7684\u5bf9\u5e94\u4f4d\u3002\n\n```\n-- \u8bfb\u4fdd\u6301\u5bc4\u5b58\u5668 4x\nfunction mb_read_reg_03(slave, addr)\n  local onlineState = get_uint16(VT_LW, 0x01A3)   -- \u4ece\u673a\u5728\u7ebf\u72b6\u6001\u5b57\n  if ((onlineState &gt;&gt; slave) &amp; 0x01) == 0x01 then  -- \u8be5\u4ece\u673a\u5728\u7ebf\n    select_slave(slave)                            -- \u5207\u5230\u8fd9\u4e2a\u4ece\u673a\n    return get_uint16(VT_4x, addr)                 -- \u8bfb\u7f13\u5b58\n  else\n    return false\n  end\nend\n\n-- \u8bfb\u4e24\u4e2a\u4ece\u673a\u7535\u91cf\u6c42\u548c\uff0c\u5199\u56de LW \u533a\nfunction on_run(screen)\n  local Energy1 = mb_read_reg_03(0, 0x0000)\n  local Energy2 = mb_read_reg_03(1, 0x0000)\n  if Energy1 ~= false and Energy2 ~= false then\n    set_uint16(VT_LW, 0x1000, Energy1 + Energy2)\n  end\nend\n```\n\n## \u4e09\u3001LUA \u5199\u5bc4\u5b58\u5668\n\n```\n-- \u5199\u5355\u4e2a\u4fdd\u6301\u5bc4\u5b58\u5668 0x06\nfunction mb_write_reg_06(slave, addr, value)\n  local onlineState = get_uint16(VT_LW, 0x01A3)\n  if ((onlineState &gt;&gt; slave) &amp; 0x01) == 0x01 then\n    feed_dog()              -- \u5582\u72d7\uff0c\u9632\u811a\u672c\u5361\u6b7b\u770b\u95e8\u72d7\u590d\u4f4d\n    select_slave(slave)\n    set_uint16(VT_4x, addr, value)\n    return true\n  else\n    return false\n  end\nend\n```\n\n**\u26a0\ufe0f \u91cd\u70b9\uff1a\u5199\u4e4b\u524d\u52a1\u5fc5 feed_dog()\u3002** LUA \u811a\u672c\u8dd1\u5728\u5c4f\u7684\u5b9e\u65f6\u4efb\u52a1\u91cc\uff0c\u957f\u65f6\u95f4\u4e0d\u5582\u72d7\u4f1a\u88ab\u770b\u95e8\u72d7\u5f53\u6b7b\u5faa\u73af\u5e72\u6389\uff0c\u5c4f\u91cd\u542f\u3002\u51e1\u662f\u5faa\u73af\u6216\u8017\u65f6\u903b\u8f91\uff0c\u95f4\u9694\u91cc\u52a0 feed_dog\u3002\n\n\u4e00\u4e2a\u79f0\u91cd\u6821\u51c6\u7684\u5b9e\u4f8b\uff08\u4e09\u79cd\u6821\u51c6\u6a21\u5f0f\uff09\uff0c\u5c55\u793a `on_update` \u56de\u8c03\u91cc\u6839\u636e LW \u53d8\u91cf\u505a\u5206\u652f\u5199\uff1a\n\n```\nfunction on_update(slave, vtype, addr)\n  if vtype == VT_LW and addr == 0x1004 then\n    local mode = get_uint16(VT_LW, 0x1003)\n    if mode == 0 then\n      mb_write_reg_06(0, 0x1002, 57)            -- \u96f6\u70b9\u6821\u51c6\n    elseif mode == 1 then\n      local w = get_uint16(VT_LW, 0x1005)        -- \u781d\u7801\u6821\u51c6\n      mb_write_reg_06(0, 0x1002, w)\n    elseif mode == 2 then\n      local c = get_uint16(VT_LW, 0x1006)        -- \u5b9e\u7269\u6821\u51c6\n      local s = get_uint16(VT_LW, 0x1007)\n      if c &gt; 0 and s &gt; 0 then\n        mb_write_reg_06(0, 0x1002, (s*w)\/\/c)\n      end\n    end\n  end\nend\n```\n\n## \u56db\u3001\u6279\u91cf\u5199\u7ebf\u5708\uff080x0F \u5c01\u88c5\uff09\n\nVisualHMI \u6279\u91cf\u5199\u7ebf\u5708\u6700\u5c0f\u5355\u4f4d\u662f 16 \u4f4d\u5bf9\u9f50\u3002\u4e0b\u9762\u8fd9\u4e2a\u51fd\u6570\u662f\u5927\u5f69\u5c01\u88c5\u7684\uff08**\u975e\u7cfb\u7edf API\uff0c\u81ea\u5df1\u5199\u7684**\uff09\uff0c\u6f14\u793a\u5982\u4f55\u628a 14 \u4e2a\u7ebf\u5708\u503c\u5408\u5e76\u5199\u5165\uff1a\n\n```\nmb_write_coil_15(slave_id, addr, coilsTb)\n-- slave_id: \u4ece\u7ad9\u7d22\u5f15; addr: \u8d77\u59cb\u5730\u5740; coilsTb: \u7ebf\u5708\u503c\u8868\n```\n\n**\u8c03\u8bd5\u63d0\u793a\uff1a** \u8054\u673a\u9a8c\u8bc1\u7528 Modbus Slave \u8f6f\u4ef6 + \u865a\u62df\u4e32\u53e3\u5bf9\uff0c\u8ba9\u5c4f\u5f53\u4e3b\u673a\u3001\u7535\u8111\u5f53\u4ece\u673a\uff0c\u5b9e\u65f6\u770b\u603b\u7535\u538b\/\u603b\u7535\u91cf\u53d8\u5316\u3002\u6bd4\u76f4\u63a5\u4e0a\u771f\u673a\u5feb\u5f97\u591a\u3002\n\n\u672c\u6587\u6574\u7406\u81ea \u5e7f\u5dde\u5927\u5f69\u79d1\u6280 VisualHMI \u5f00\u53d1\u6587\u6863 LUA \u6559\u7a0b\u300cModbus \u5e94\u7528\u300d\u7ae0\u8282\uff0c\u4ee3\u7801\u4e0e API \u5747\u6309\u539f\u6587\u4fdd\u771f\uff0c\u7248\u6743\u5f52\u5927\u5f69\u79d1\u6280\u6240\u6709\uff0c\u6b64\u5904\u52a0\u5de5\u7a0b\u5e08\u6ce8\u89e3\u4e0e\u91cd\u70b9\u6807\u6ce8\uff0c\u4ec5\u4f9b\u5b66\u4e60\u53c2\u8003\u3002\n\n---\n*modbus.cn*\n"