{"id":49944,"date":"2026-08-04T07:35:01","date_gmt":"2026-08-03T23:35:01","guid":{"rendered":"https:\/\/www.modbus.cn\/49944.html"},"modified":"2026-08-04T07:35:01","modified_gmt":"2026-08-03T23:35:01","slug":"visualhmi-lua-%e5%81%9a-modbus-%e4%b8%80%e4%b8%bb%e5%a4%9a%e4%bb%8e%ef%bc%9astart_read-select_slave-%e5%ae%9e%e6%88%98%e4%b8%8e%e5%9d%91","status":"publish","type":"post","link":"https:\/\/www.modbus.cn\/en\/49944.html","title":{"rendered":"VisualHMI LUA \u505a Modbus \u4e00\u4e3b\u591a\u4ece\uff1astart_read\/select_slave \u5b9e\u6218\u4e0e\u5751"},"content":{"rendered":"<p>\u524d\u9762\u8bb2\u4e86\u5c4f\u5728\u5de5\u7a0b\u91cc\u914d Modbus \u4e3b\u4ece\uff0c\u4f46\u78b0\u5230&#8221;\u4e00\u4e3b\u591a\u4ece + \u590d\u6742\u903b\u8f91&#8221;\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<\/p>\n<div class=\"tip\" style=\"border-left:4px solid #f7941e;padding:10px 14px;background:#fff8ef\">\n<strong>\u26a0\ufe0f \u9002\u7528\u8303\u56f4\uff1a<\/strong> 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<\/div>\n<h2>\u4e00\u3001\u6838\u5fc3\u901a\u4fe1 API<\/h2>\n<h3>1.1 start_read \u2014\u2014 \u540e\u53f0\u81ea\u52a8\u8f6e\u8be2\uff08\u6700\u5e38\u7528\uff09<\/h3>\n<p>\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 <code>get_uint16<\/code>\/<code>get_float<\/code> \u76f4\u63a5\u8bfb\u7f13\u5b58\uff0c<strong>\u6ca1\u6709\u901a\u4fe1\u5ef6\u8fdf<\/strong>\u3002<\/p>\n<pre><code>start_read(index, vtype, addr, quantity, cycle, cycle_run, mode)<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th>\u53c2\u6570<\/th>\n<th>\u7c7b\u578b<\/th>\n<th>\u8bf4\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>index<\/td>\n<td>number<\/td>\n<td>\u4efb\u52a1\u7d22\u5f15 0~127\uff0cstop_read \u65f6\u7528<\/td>\n<\/tr>\n<tr>\n<td>vtype<\/td>\n<td>number<\/td>\n<td>\u6570\u636e\u7c7b\u578b VT_3x \/ VT_4x \u7b49<\/td>\n<\/tr>\n<tr>\n<td>addr<\/td>\n<td>number<\/td>\n<td>\u5bc4\u5b58\u5668\u5730\u5740<\/td>\n<\/tr>\n<tr>\n<td>quantity<\/td>\n<td>number<\/td>\n<td>\u8bfb\u53d6\u6570\u91cf 1~120<\/td>\n<\/tr>\n<tr>\n<td>cycle<\/td>\n<td>number<\/td>\n<td>\u8f6e\u8be2\u5468\u671f\u500d\u6570\uff0c0=\u6bcf\u5468\u671f\u90fd\u8bfb<\/td>\n<\/tr>\n<tr>\n<td>cycle_run<\/td>\n<td>number<\/td>\n<td>\u5468\u671f\u5185\u7b2c\u51e0\u6b21\u6267\u884c\uff080-based\uff0c\u9700 &lt; cycle\uff09<\/td>\n<\/tr>\n<tr>\n<td>mode<\/td>\n<td>number<\/td>\n<td>0=\u6301\u7eed\u8bfb(\u9ed8\u8ba4) \/ 1=\u4ec5\u8bfb\u4e00\u6b21<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"tip\" style=\"border-left:4px solid #f7941e;padding:10px 14px;background:#fff8ef\">\n<strong>\ud83d\udca1 \u8c03\u5ea6\u7cbe\u9ad3\uff1a<\/strong> 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<strong>\u964d\u603b\u7ebf\u8d1f\u8f7d<\/strong>\u3002\u4f8b\uff1a<br \/>\n<code>start_read(0, VT_4x, 0x1000, 10)<\/code> \u2192 \u6bcf\u5468\u671f\u8bfb 4&#215;1000~1009<br \/>\n<code>start_read(1, VT_4x, 0x2000, 10, 3, 2)<\/code> \u2192 \u6bcf 3 \u5468\u671f\u3001\u7b2c 3 \u4e2a\u5468\u671f\u8bfb 4&#215;2000~2009\n<\/div>\n<h3>1.2 \u5176\u5b83\u7ba1\u7406\u51fd\u6570<\/h3>\n<ul>\n<li><code>stop_read(index)<\/code>\uff1a\u505c\u5355\u4e2a\u8f6e\u8be2\u4efb\u52a1\uff0c\u7f13\u5b58\u4fdd\u7559\u6700\u540e\u4e00\u6b21\u503c<\/li>\n<li><code>stop_all_read()<\/code>\uff1a\u4e00\u952e\u505c\u5168\u90e8\uff0c\u9002\u5408\u590d\u4f4d\/\u6025\u505c<\/li>\n<li><code>set_auto_read(en)<\/code>\uff1a1=\u542f\u7528\u753b\u9762\u7ed1\u5b9a\u53d8\u91cf\u81ea\u52a8\u8bfb\uff08\u9ed8\u8ba4\uff09\uff0c0=\u53ea\u9760\u811a\u672c <code>start_read<\/code> \u63a5\u7ba1\uff0c\u9002\u5408\u9ad8\u5e26\u5bbd\u573a\u666f\u53bb\u5197\u4f59<\/li>\n<\/ul>\n<h3>1.3 select_slave \u2014\u2014 \u5207\u6362\u4ece\u7ad9\uff08\u5173\u952e\uff09<\/h3>\n<p>\u591a\u4ece\u673a\u4e0b\uff0c<code>select_slave(slave_id)<\/code> \u4e34\u65f6\u6307\u5b9a\u540e\u7eed <code>get_xxx\/set_xxx<\/code> \u8bbf\u95ee\u54ea\u4e2a\u4ece\u673a\u3002<strong>\u6ce8\u610f slave_id \u662f\u4ece\u673a\u5217\u8868\u4e0b\u6807\uff0c\u4e0d\u662f Modbus \u7ad9\u53f7\uff01<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>\u672f\u8bed<\/th>\n<th>\u542b\u4e49<\/th>\n<th>\u793a\u4f8b<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u4ece\u673a\u7d22\u5f15 slave_id<\/td>\n<td>HMI \u5185\u90e8\u5217\u8868\u4e0b\u6807 0,1,2<\/td>\n<td>0 = \u7b2c\u4e00\u4e2a\u4ece\u673a<\/td>\n<\/tr>\n<tr>\n<td>Modbus \u7ad9\u53f7<\/td>\n<td>\u8bbe\u5907\u7269\u7406\u5730\u5740<\/td>\n<td>10, 33<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"tip\" style=\"border-left:4px solid #f7941e;padding:10px 14px;background:#fff8ef\">\n<strong>\u26a0\ufe0f \u6700\u5bb9\u6613\u9519\u7684\u70b9\uff1a<\/strong> 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<\/div>\n<h2>\u4e8c\u3001LUA \u8bfb\u5bc4\u5b58\u5668\uff08\u5e26\u5728\u7ebf\u5224\u65ad\uff09<\/h2>\n<p>\u8bfb\u4e4b\u524d\u4e24\u4ef6\u4e8b\u4e0d\u80fd\u7701\uff1a<strong>\u5224\u65ad\u4ece\u673a\u5728\u7ebf<\/strong> + <strong>\u9009\u5bf9\u4ece\u7ad9<\/strong>\u3002\u5728\u7ebf\u72b6\u6001\u5b58\u5728\u7cfb\u7edf\u53d8\u91cf <code>VT_LW 0x01A3<\/code> \u7684\u5bf9\u5e94\u4f4d\u3002<\/p>\n<pre><code>-- \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<\/code><\/pre>\n<h2>\u4e09\u3001LUA \u5199\u5bc4\u5b58\u5668<\/h2>\n<pre><code>-- \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<\/code><\/pre>\n<div class=\"tip\" style=\"border-left:4px solid #f7941e;padding:10px 14px;background:#fff8ef\">\n<strong>\u26a0\ufe0f \u91cd\u70b9\uff1a\u5199\u4e4b\u524d\u52a1\u5fc5 feed_dog()\u3002<\/strong> 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<\/div>\n<p>\u4e00\u4e2a\u79f0\u91cd\u6821\u51c6\u7684\u5b9e\u4f8b\uff08\u4e09\u79cd\u6821\u51c6\u6a21\u5f0f\uff09\uff0c\u5c55\u793a <code>on_update<\/code> \u56de\u8c03\u91cc\u6839\u636e LW \u53d8\u91cf\u505a\u5206\u652f\u5199\uff1a<\/p>\n<pre><code>function 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<\/code><\/pre>\n<h2>\u56db\u3001\u6279\u91cf\u5199\u7ebf\u5708\uff080x0F \u5c01\u88c5\uff09<\/h2>\n<p>VisualHMI \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<strong>\u975e\u7cfb\u7edf API\uff0c\u81ea\u5df1\u5199\u7684<\/strong>\uff09\uff0c\u6f14\u793a\u5982\u4f55\u628a 14 \u4e2a\u7ebf\u5708\u503c\u5408\u5e76\u5199\u5165\uff1a<\/p>\n<pre><code>mb_write_coil_15(slave_id, addr, coilsTb)\n-- slave_id: \u4ece\u7ad9\u7d22\u5f15; addr: \u8d77\u59cb\u5730\u5740; coilsTb: \u7ebf\u5708\u503c\u8868<\/code><\/pre>\n<div class=\"tip\" style=\"border-left:4px solid #f7941e;padding:10px 14px;background:#fff8ef\">\n<strong>\u8c03\u8bd5\u63d0\u793a\uff1a<\/strong> \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<\/div>\n<p style=\"color:#888;font-size:13px\">\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<\/p>\n<span id=\"magicpostMarker\"><\/span>","protected":false},"excerpt":{"rendered":"<p>\u524d\u9762\u8bb2\u4e86\u5c4f\u5728\u5de5\u7a0b\u91cc\u914d Modbus \u4e3b\u4ece\uff0c\u4f46\u78b0\u5230&#038;#8221&#8230;<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_members_access_role":[],"_members_access_error":""},"categories":[3131,3126],"tags":[3144,3139,3146,3147,3134,3145,3135],"class_list":["post-49944","post","type-post","status-publish","format-standard","hentry","category-hmi-lua","category-hmi-dev","tag-lua-","tag-modbus-","tag-select_slave","tag-start_read","tag-visualhmi","tag-3145","tag-3135"],"_links":{"self":[{"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/posts\/49944","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/comments?post=49944"}],"version-history":[{"count":0,"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/posts\/49944\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/media?parent=49944"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/categories?post=49944"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/tags?post=49944"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}