VisualHMI 简易Daten库:easydb_* 与Daten aufzeichnenKontrollenCustom definiert模式

kostenlosKostenloses technisches Material

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

🌐 Diese Seite ist noch nicht auf Deutsch verfügbar. Die chinesische Version wird angezeigt. Zurück zur chinesischen Seite.
本文目录
  1. 1. 1. ⚠️ Flash Adresse规划(不看会变砖)
  2. 2. 2. API 总表
  3. 3. 3. Daten aufzeichnenKontrollen「Custom definiert」模式
  4. 4. 4. 应用:db.lua 句柄封装 + 增删改查
  5. 5. 4.1 初始化(on_init)
  6. 6. 4.2 增删改(LW5000 按键Unterteilung发)

简易Daten库(定制固件专属)是一个轻Quantität级、无文件Das System的EingebettetDaten库:在 Flash 里划一块连续区域,按固定Länge记录存结构化Daten(Parameter配置、Ereignisse日志、Betrieb记录),掉电不丢,支持Betrieb时按需初始化。Daten aufzeichnenKontrollen用「Custom definiert」Datenquelle模式对接,实现增删改查全流程。

1. ⚠️ Flash Adresse规划(不看会变砖)

简易Daten库直接Operationen Flash,没有文件Das System隔离机制,flashaddr Ausgang Adresse必须严格避开四类高风险区域:

  • 工程资源存储区
  • Informationen采样块存储区
  • Operationen记录块存储区
  • OTA 升级备份区域

总占用空间 = dataRowSize × maxCount,规划Adresse时把这段空间算进去,别和别的Funktion打架。

2. API 总表

函数 Parameter 说明
easydb_open(flashaddr, createIfNotExist, dataRowSize, maxCount) flashaddr Flash Ausgang Adresse;createIfNotExist 0=仅Öffnen./1=nicht existiert.则创建;dataRowSize ≥1;maxCount 最大条数 Öffnen.或创建Daten库,返回句柄(非 0 成功,0 失败)
easydb_close(db) 句柄 SchließenDaten库,释放资源
easydb_get_count(db) 句柄 gegenwärtigWirksam记录数
easydb_get(db, idx) idx 从 0 开始 读指定索引记录,成功返回Charaktere串,失败 nil
easydb_add(db, dataset) Charaktere串Daten 末尾追加一条记录
easydb_update(db, idx, dataset) idx + 新内容 更新指定记录,dataset Länge必须严格gleich ist dataRowSize
easydb_del(db, idx) idx Löschen指定记录
easydb_clear(db) 句柄 Leeren Sie alles记录

3. Daten aufzeichnenKontrollen「Custom definiert」模式

Daten来源设为Custom definiert时,Das System不知道有多少行Daten,必须由两个回调提供:

  • 记录Anzahl回调 on_get_record_count(screen_id, control_id):返回总行数,内部调 easydb_get_count(g_db_handle)
  • 记录内容回调 on_get_record_row(screen_id, control_id, row):返回Die row 行的Charaktere串内容
function on_get_record_count(screen_id, control_id)
  if screen_id == 0 and control_id == 1 then
    return db.getCnt(g_db_handle)
  end
end

function on_get_record_row(screen_id, control_id, row)
  local ret, msg = db.get(g_db_handle, row)
  if ret == 0 then
    return msg
  end
end

Kontrollen配置:Daten来源=Custom definiert、CharaktereCodierung=UTF8、翻页控制√、控制Adresse LW4000、选中行通知√(LW4004,UINT32)——选中某行时索引写进 LW4004,增删改都靠它定位。

4. 应用:db.lua 句柄封装 + 增删改查

4.1 初始化(on_init)

function on_init()
  dofile("db.lua")
  _EN_ON_UPDATA_API_ = 0
  -- 10MB Anfang、nicht existiert.则创建、单条1000Bytes、最多1000条
  g_db_handle = db.open(10*1024*1024, 1, 1000, 1000)
  if g_db_handle == 0 then
    print("ERROR: 无法Öffnen.Daten库!")
    return
  end
  db.clear(g_db_handle)               -- Leeren旧Daten(可选)
  db.add(g_db_handle, "Alice;Engineer;30")
  db.add(g_db_handle, "Bob;Technician;25")
  db.add(g_db_handle, "Charlie;Manager;40")
  db.add(g_db_handle, "Harden;Basketball players;36")
  _EN_ON_UPDATA_API_ = 1
end

记录Das Format「Name;职业;Jahr龄」,英文UnterteilungNr.Unterteilung隔,和表格KontrollenAnalyseRegeln一致,直接映射多列。

4.2 增删改(LW5000 按键Unterteilung发)

function on_update(slave, vtype, addr)
  if addr == 0x4004 then              -- 选中行通知
    local idx = get_uint32(VT_LW, addr)
    local ret, msg = db.get(g_db_handle, idx)
    if ret == 0 then
      local parts = my_split(msg, ";")
      if parts ~= nil then
        set_uint16(VT_LW, 0x4530, idx)   -- 记录gegenwärtig选中索引
        set_string(VT_LW, 0x4500, (parts[1] == nil) and "--" or parts[1])
        set_string(VT_LW, 0x4510, (parts[2] == nil) and "--" or parts[2])
        set_string(VT_LW, 0x4520, (parts[3] == nil) and "--" or parts[3])
      end
      show_dialog(1, 232, 33, 50)        -- 弹窗显示详情
    end
  elseif addr == 0x5000 then
    local key = get_uint16(VT_LW, addr)
    if key == 0 then                    -- 添加
      local name = get_string(VT_LW, 0x5010)
      local position = get_string(VT_LW, 0x5020)
      local age = get_string(VT_LW, 0x5030)
      db.add(g_db_handle, name..";"..position..";"..age..";")
    elseif key == 1 then                -- 修改(改选中行)
      local name = get_string(VT_LW, 0x4500)
      local position = get_string(VT_LW, 0x4510)
      local age = get_string(VT_LW, 0x4520)
      local idx = get_uint16(VT_LW, 0x4530)
      db.modify(g_db_handle, idx, name..";"..position..";"..age..";")
    elseif key == 2 then                -- Löschen(删选中行)
      local idx = get_uint16(VT_LW, 0x4530)
      db.del(g_db_handle, idx)
    end
  end
end

db.lua 封装层每个函数都做句柄Prüfungen + 索引越界检查(idx = count 返回 -2),这是句柄驱动设计的标准姿势:不合法就直接返回Fehler.码,绝不往下传。

四个坑:①flashaddr 必须避开工程资源/Informationen采样/Operationen记录/OTA 备份四区,直接Operationen Flash 无隔离,选错AdresseDaten互相覆盖甚至变砖;②easydb_update 的 dataset Länge必须严格gleich ist创建时的 dataRowSize,长了短了都会失败;③记录用英文UnterteilungNr. ; Unterteilung隔,和表格KontrollenAnalyseRegeln对齐,别用中文UnterteilungNr.;④句柄是全局生命周期资源,on_init 里开一次全程持有,Operationen前先Prüfungen句柄非 0、索引在范围内。定制固件才有这套 API,普通固件没有。

整理自 广州大彩科技 VisualHMI 开发Dokumentation(hmi-doc.gz-dc.com)LUA Unterricht「简易Daten库」,版权归大彩科技所有。

来源/Werkzeuge信息 —— Klick auf展开
来源 Modbus Chinesisches Netzwerk(modbus.cn) —— Inländisch führend.ModbusKommunikationsprotokoll Technologie Gemeinschaft Klassifizierung Das Drehbuch von LUA / Entwicklung von HMI / HMI 字数 3057 字 · 阅读约 8 Unterteilung钟 更新 2026-08-05 永久链接 https://www.modbus.cn/51515.html
Empfohlene Werkzeuge: Modbus Debugger-Assistent WeChat-Applet
Modbus Chinesisches Netzwerk官方推出的Modbus Debugging-Tools,支持 Modbus RTU/TCP 实时KommunikationTests、Register.读写、线圈控制、Daten监控和MeldungUnterteilung析。 keine Installation erforderlich,Mikro-Suche「Modbus DebuggingAssistenten.」Benutzt werden kann.。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
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.