VisualHMI RW 掉电存储区:Flash 寿命、扇区落盘顺序与安全初始化

免费免费技术资料

这篇内容可直接阅读,适合用于基础学习和搜索引流。

RW 区是 HMI 的掉电保存寄存器:地址 0x0000~0x7FFF 共 64KB(32768×2 字节),基于 Flash 存储,上电默认值 0xFFFF。参数、配方、运行状态这类「断电不能丢」的数据放这里。但它有寿命和坑,用不好会毁固件。

1. RW 区特性

项目
地址范围 0x0000 ~ 0x7FFF(32768 字)
存储介质 Flash(掉电保存)
默认值 0xFFFF
Flash 寿命 约 10 万次擦写
写入机制 内部 4KB 写缓存队列,约每 400 次写入触发一次擦写

2. ⚠️ 致命风险:过度擦写会毁固件

RW 区和固件区物理相邻。反复擦写 RW 如果扩散到固件区,设备直接损坏:黑屏、no firmware 蓝屏。这是硬伤,不是吓唬人。

另外 Flash 按扇区顺序落盘(低地址先写),跨扇区的标志位有一致性风险——一个标志的两个字节落在不同扇区,写一半断电可能半新半旧。

3. 正确使用姿势

  • 地址连续分配:参数集中放一段,别到处撒
  • set_array 批量写:一次写一组,别一个一个 set
  • 控制写入频率:只有值变化才写,别周期刷
  • 标志位放同扇区:需要原子性的标志放一起
  • 启动做边界值检查:上电读 RW 校验合法性(0x55AA 魔数)
function on_init()
  -- 上电检查 RW 是否已初始化(魔数 0x55AA)
  if get_uint16(VT_RW, 0x2000) ~= 0x55AA then
    -- 首次上电,写入默认参数
    set_uint16(VT_RW, 0x2000, 0x55AA)   -- 魔数
    set_uint16(VT_RW, 0x2001, 50)       -- 温度上限默认值
    set_uint16(VT_RW, 0x2002, 4800)     -- 波特率默认值
  else
    -- 已初始化,检查参数边界
    local t = get_uint16(VT_RW, 0x2001)
    if t  100 then
      set_uint16(VT_RW, 0x2001, 50)     -- 越界恢复默认
    end
  end
end

推荐「同扇区标志 + 参数边界检查」双重策略:魔数确认初始化过,边界检查防脏数据。

三个铁律:①严禁高频实时数据存 RW——曲线、计数、实时值放 LW,只有掉电要留的参数才进 RW;②写前先判断值是否变化,没变就别写,10 万次寿命经不起周期刷;③上电必须做初始化检查,用 0x55AA 魔数 + 边界校验,否则首次上电读到 0xFFFF 全乱。

整理自 广州大彩科技 VisualHMI 开发文档(hmi-doc.gz-dc.com)LUA 教程「RW存储」,版权归大彩科技所有。

技术术语(共 2 个)—— 点击展开
寄存器Modbus 寄存器存储数据单元,分线圈/离散输入/保持/输入寄存器四类
波特率串行通信每秒传输符号数,Modbus RTU常用9600/19200
来源/工具信息 —— 点击展开
来源 Modbus中文网(modbus.cn) —— 国内领先的Modbus通信协议技术社区 分类 LUA 脚本 / 串口屏/HMI 开发 字数 1003 字 · 阅读约 3 分钟 更新 2026-08-05 永久链接 https://www.modbus.cn/51493.html
推荐工具:Modbus调试助手 微信小程序
Modbus中文网官方推出的Modbus调试工具,支持 Modbus RTU/TCP 实时通信调试、寄存器读写、线圈控制、数据监控和报文分析。 无需安装,微信搜索「Modbus调试助手」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
📝 作者声明
本文由 Modbus中文网技术团队 原创撰写,内容基于实际项目案例与技术文档,力求为读者提供准确、实用的参考信息。
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

工程师会员

把这篇文章变成可执行的调试资料

开通后可使用高级报文解析、资料包下载、代码示例、工程案例和优先技术支持,适合真实项目交付。

高级工具不限次
资料包与代码包
完整工程案例库
优先技术支持入口

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注