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存储」,版权归大彩科技所有。

실제 프로젝트에 이 자료를 활용하시겠습니까?

도구 센터에서 프레임 분석, CRC 검증, 장비 디버깅을 진행하거나 요청을 제출하여 선정 및 연동 제안을 받아보세요.

엔지니어 회원

이 글을 실행 가능한 디버깅 자료로 활용하세요

가입하면 고급 프레임 분석, 자료 패키지 다운로드, 코드 예제, 엔지니어링 사례, 우선 기술 지원을 이용할 수 있어 실제 프로젝트 납품에 적합합니다.

고급 도구 무제한 이용
자료 패키지와 코드 패키지
완전한 엔지니어링 사례 라이브러리
우선 기술 지원 채널

답글 작성

이메일 주소는 공개되지 않습니다. 必填项已用 * 标注