本文目录
- 1. 1. API
- 2. 2. Flash 地址避让
- 3. 3. 案例:人员名单管理
在 Flash 里建轻量数据库(定制固件专属):追加、更新、删除、清空记录,配合数据记录控件的”自定义”模式,实现配方、日志、名单管理。
1. API
| 函数 | 说明 |
|---|---|
| easydb_open(flashaddr, createIfNotExist, dataRowSize, maxCount) | 打开/创建数据库,返回句柄;总占用 = dataRowSize × maxCount |
| easydb_close(db) | 关闭 |
| easydb_get_count(db) | 记录条数 |
| easydb_get(db, idx) | 读取第 idx 条,返回字符串或 nil |
| easydb_add(db, dataset) | 追加一条记录 |
| easydb_update(db, idx, dataset) | 更新第 idx 条(长度必须严格 = dataRowSize) |
| easydb_del(db, idx) | 删除 |
| easydb_clear(db) | 清空 |

2. Flash 地址避让
flashaddr 必须避开四类区域:工程资源区、资料采样块、操作记录块、OTA 备份区。建议选工程尾部靠后的空闲区,先算好占用(dataRowSize × maxCount)。
3. 案例:人员名单管理
数据记录控件”自定义”模式 + 数据库:控件显示用回调取数,增删改用按钮。
g_db_handle = nil
function on_init()
g_db_handle = easydb_open(0x480000, 1, 64, 100) -- 每条64字节, 最多100条
end
-- 数据记录控件"自定义"模式回调
function on_get_record_count(screen_id, control_id)
return easydb_get_count(g_db_handle)
end
function on_get_record_row(screen_id, control_id, row)
return easydb_get(g_db_handle, row) -- 返回 "姓名;职业;年龄"
end
-- 按钮操作
function on_update(slave, vtype, addr)
if vtype == VT_LW and addr == 0x1000 then
local key = get_uint16(VT_LW, 0x1000)
if key == 1 then
easydb_add(g_db_handle, "张三;工程师;30")
elseif key == 2 then
easydb_update(g_db_handle, 0, "李四;经理;40")
elseif key == 3 then
easydb_del(g_db_handle, 0)
elseif key == 4 then
easydb_clear(g_db_handle)
end
redraw() -- 刷新控件
end
end

数据库三个坑:①flashaddr 一定要避开工程资源/资料采样/操作记录/OTA 四区,算好占用别越界;②update 的 dataset 长度必须严格等于 dataRowSize;③记录用分号分隔字段(「姓名;职业;年龄」),控件端按分号拆列显示。
整理自 广州大彩科技 VisualHMI 开发文档(hmi-doc.gz-dc.com)LUA 教程「简易数据库」,版权归大彩科技所有。
发表回复