VisualHMI RW Power-Off - Speicher: Flash-Lebensdauer, Sector-Down - Reihenfolge und sichere Initialisierung

kostenlosKostenloses technisches Material

Dieser Inhalt ist direkt lesbar und eignet sich für das Grundlagenlernen und die Suche.

RW-Bereich istPower-Out - Speicherregister des HMI: Adresse 0x0000 ~ 0x7FFF Gesamt 64 KB (32768 × 2 Byte), basierend auf Flash-Speicher, Einschalt-Standardwert 0xFFFF. Parameter, Rezeptur, Betriebszustand wie "Stromausfall kann nicht verloren gehen" Daten hier platziert. Aber es hat eine Lebensdauer und Gruben, die mit schlechtem wird die Firmware zerstören.

1. Eigenschaften der RW-Zone

Eintrag值
Adressbereich0x0000 bis 0x7FFF (32768 Wörter)
SpeichermediumFlash (Power-Out - Speicher)
Standard0xFFFF
Flash-Lebensdauerca. 100.000 Löschen
SchreibmechanismusInterne 4KB Schreib-Cache - Warteschlange, das Löschen pro ca. 400 Schreibvorgänge auslöst

2. und️ Tödliche Gefahr: Übermäßiges Löschen zerstört die Firmware

der RW-Region undsind physisch benachbart。Wiederholtes Löschen von RW Wenn es in den Firmware-Bereich verbreitet wird, wird das Gerät direkt beschädigt: schwarzer Bildschirm, keine Firmware Blauer Bildschirm. Es ist eine schwere Verletzung, nicht eine Angst.

Flash drücken.fällt(niedrige Adresse zuerst schreiben), die Flag-Bits über die Sektoren haben einKonsistenzrisiko- zwei Bytes eines Flags fallen in verschiedenen Sektoren, Schreiben halb ausgeschaltet kann halb neu und halb alt.

3. Richtige Nutzung der Haltung

  • Kontinuierliche Adresse zuweisenKonzentrieren Sie sich auf die Parameter, nicht überall.
  • set_array Batch-Schreiben: Schreiben Sie eine Gruppe nach dem anderen
  • Set-Schreiben - Frequenz: Schreiben Sie nur, wenn sich der Wert ändert, nicht periodisch
  • Flag-Bits im gleichen Sektor: Erfordert Atom-Flags zusammen
  • Starten Sie die Grenzwerte überprüfen: Lese RW-Verifizierung der Legitimität (0x55AA Magische Zahl)
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

Empfohlen wird, "das gleiche Sektor-Flagwort + Parameter-Grenze - Überprüfung" Doppel-Strategie: die magische Zahl bestätigt initialisiert, Grenze-Prüfung gegen schmutzige Daten.

Drei eiserne Gesetze:1 Hochfrequenz Echtzeit-Daten - Speicher RW streng verboten- Kurve, Zählung, Echtzeit-Wert LW, nur die Parameter, die aus dem Strom auslassen müssen, werden in RW;2 Beurteilen, ob der Wert sich ändert, bevor er schreibtSchreiben Sie nicht, wenn Sie 100.000 Lebenszeiten nicht durchlaufen.3 Power-On muss die Initialisierung überprüfen, mit 0x55AA magische Zahl + Grenze-Prüf, sonst zum ersten Mal auf dem Strom 0xFFFF gelesen werden.

Aus dem LUA-Tutorial "RW-Speicher" von Guangzhou Dacai Technology VisualHMI-Entwicklungsdokument (hmi-doc.gz-dc.com), das Urheberrecht im Besitz von Dacai Technology.

Sollte man diese Informationen für ein echtes Projekt verwenden?

Gehen Sie zum Tool Center, um Nachrichten zu analysieren, CRC-Prüfungen und Geräte-Debugging zu erledigen, oder senden Sie Anforderungen für Auswahl - und Zugangsvorschläge.

Ingenieur Mitglied

Verwandeln Sie diesen Artikel in ein umsetzbares Debuggermaterial

Erweiterte Nachrichtenanalyse, Paket-Downloads, Codebeispiele, Engineering-Szenarien und Priority-Technischer Support sind für die Real-Projekt - Bereitstellung möglich.

Unbegrenzte Werkzeuge
Datenpaket und Codepaket
Vollständige Engineering Case-Basis
Vorrangiger Zugang zum technischen Support

Antwort veröffentlichen

Ihre E-Mail - Adresse wird nicht öffentlich gemacht. Erforderliche Elemente wurden verwendet * markiert.