VisualHMI RW 掉电存储区:Flash 寿命、扇区落盘顺序与セキュリティ初期化

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

RW 区是 HMI 的掉电保存レジスタ:address 0x0000~0x7FFF 共 64KB(32768×2 bytes),基于 Flash 存储,上电デフォルト値 0xFFFF。parameter、配方、実行状態の状態这类「停電不能丢」的データ放这里。但它有寿命和坑,用不好会毁固件。

1. RW 区特性

项目Value
アドレス範囲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 Tutorial「RW存储」,著作権は大彩科技すべての。

Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email address will not be published. Required fields are marked *.