"# VisualHMI OTA \u5347\u7ea7\uff1aota_init\/ota_write \u4e0e SD \u5361\u81ea\u52a8\u5347\u7ea7\n\n> 2026-08-04 | 2026-08-04\n> http:\/\/www.modbus.cn\/en\/51511.html\n\n**LUA \u811a\u672c, \u4e32\u53e3\u5c4f\/HMI \u5f00\u53d1**\n\n---\n\n\u901a\u8fc7 LUA \u5b9e\u73b0\u8fdc\u7a0b\u56fa\u4ef6\u5347\u7ea7\uff08OTA\uff09\uff1a\u521d\u59cb\u5316\u3001\u5199\u5165\u3001\u6821\u9a8c\u3001\u89e3\u538b\u3001\u91cd\u542f\u3002\u5347\u7ea7\u5305\u653e\u5728 SD \u5361\uff0c\u63d2\u5361\u81ea\u52a8\u68c0\u6d4b\u89e6\u53d1\u3002\n\n## 1. API\n\n\u51fd\u6570\u8bf4\u660eota_init(md5, filesize, addr)\u521d\u59cb\u5316\u5347\u7ea7\uff1amd5 \u4e3a\u56fa\u5b9a\u4e32 \u300c0123456789abcdef\u300d\uff1baddr \u2265 Flash \u603b\u91cf\u4e00\u534aota_write(writeTb)\u5199\u5165\u5347\u7ea7\u6570\u636e\uff08\u5b57\u8282\u8868 \u22642048\uff0c\u4e0d\u8db3\u81ea\u52a8\u8865 0x00\uff09ota_check_upgrade(1)\u6821\u9a8c\u5e76\u5f00\u59cb\u5347\u7ea7ota_destory()\u64e6\u9664\u6b8b\u7559\u5347\u7ea7\u6570\u636eon_ota_progress(status, value)\u5347\u7ea7\u8fdb\u5ea6\u56de\u8c03\n\n## 2. Flash \u89c4\u5212\uff08\u4ee5 HMI80480M070 \u4e3a\u4f8b\uff09\n\n16MB \u603b\u91cf\uff1a\u7cfb\u7edf 1MB + \u5de5\u7a0b 4.38MB = \u5df2\u7528 5.38MB\uff0c\u7a7a\u95f2\u7ea6 10.62MB\u3002\u4f46 **OTA \u5fc5\u987b\u4ece \u22658MB\uff08\u540e\u534a\u90e8\u5206\uff09\u5f00\u59cb**\uff0c\u9632\u6b62\u4e0e\u5de5\u7a0b\u533a\u4ea4\u53c9\u8986\u76d6\uff1bOTA \u5305\u5927\u5c0f\u987b\u5c0f\u4e8e Flash \u4e00\u534a\u3002\u5757\u5730\u5740\u5360\u7528\u9ad8\u5730\u5740\u533a\u4f1a\u5bfc\u81f4\u4e0d\u53ef\u5347\u7ea7\u3002\n\n![Flash\u89c4\u5212](https:\/\/www.modbus.cn\/wp-content\/uploads\/2026\/08\/visualhmi\/lu015_1.png)\n\n## 3. \u8fdb\u5ea6\u56de\u8c03\u72b6\u6001\n\nstatus\u542b\u4e49value1\u6821\u9a8c\u5f00\u59cb02\u6821\u9a8c\u7ed3\u679c0=\u5931\u8d25 \/ 1=\u6210\u529f3\u89e3\u538b\u8fdb\u5ea60~1004\u89e3\u538b\u7ed3\u679c0=\u5931\u8d25 \/ 1=\u6210\u529f\uff08\u5373\u5c06\u91cd\u542f\uff09\n\n## 4. \u6848\u4f8b\uff1aSD \u5361\u81ea\u52a8\u5347\u7ea7\n\n```\n_otaFile = \"1:\/a.bin\"   -- \u91cf\u4ea7\u65f6 ota.bin \u6539\u540d a.bin\n\nfunction on_sd_inserted(dir)\n  -- SD\u5361\u63d2\u5165, \u68c0\u67e5\u5347\u7ea7\u5305\n  list_dir(\"1:\/\")\nend\n\nfunction on_list_dir(path, filename, type, fsize)\n  if filename == \"a.bin\" then\n    start_ota()\n  end\nend\n\nfunction start_ota()\n  file_open(_otaFile, 0)\n  local fsize = file_size()\n  -- addr \u53d6 Flash \u540e\u534a\u90e8\u5206: 16MB \u53d6 8MB=0x800000\n  ota_init(\"0123456789abcdef\", fsize, 0x800000)\n  local remain = fsize\n  while remain &gt; 0 do\n    local n = (remain &gt; 2048) and 2048 or remain\n    local buf = file_read(n)\n    ota_write(buf)\n    remain = remain - n\n  end\n  file_close()\n  ota_check_upgrade(1)\nend\n\nfunction on_ota_progress(status, value)\n  if status == 2 then\n    if value == 0 then\n      print(\"OTA \u6821\u9a8c\u5931\u8d25\")\n      ota_destory()\n    end\n  elseif status == 4 then\n    if value == 0 then print(\"OTA \u89e3\u538b\u5931\u8d25\") end\n  end\nend\n```\n\nOTA \u4e09\u6761\u7ea2\u7ebf\uff1a**\u2460md5 \u53c2\u6570\u5fc5\u987b\u7528\u5b98\u65b9\u56fa\u5b9a\u4e32 \u300c0123456789abcdef\u300d\uff1b\u2461\u8d77\u59cb\u5730\u5740\u5fc5\u987b \u2265 Flash \u4e00\u534a\uff0c\u5426\u5219\u4f1a\u8986\u76d6\u5de5\u7a0b\u533a\u628a\u5c4f\u5237\u6210\u7816\uff1b\u2462\u5347\u7ea7\u5305\u592a\u5927\uff08\u2265\u4e00\u534a Flash\uff09\u4e0d\u53ef\u5347\u7ea7\uff0c\u5148\u67e5\u6587\u4ef6\u5927\u5c0f\u518d\u5f00\u59cb**\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\u300cOTA \u5347\u7ea7\u300d\uff0c\u7248\u6743\u5f52\u5927\u5f69\u79d1\u6280\u6240\u6709\u3002\n\n---\n*modbus.cn*\n"