- 1. 1. record_* API 总表
- 2. 2. Zahlenwert表格案例(添加/修改/Lesen/Beseitigung/查条数)
- 3. 3. Charaktere串表格案例
Daten aufzeichnenKontrollen + record_* API:在 HMI 上维护历史Daten表——Zahlenwert型(如电压曲线Daten)和Charaktere串型(如Operationen日志)都能存,配表格Kontrollen显示、翻页、Zeit戳定位。sn 是Informationen采样通道索引,范围 0~19 共 20 通道,KontrollenDaten来源选「Informationen采集」的哪个通道,API 就Operationen哪个。
1. record_* API 总表
| 函数 | 说明 |
|---|---|
record_get_count(sn) |
通道已存记录总条数 |
record_write_data(sn, data) |
追加一条记录,data 为字数组(索引从 1 开始) |
record_read_data(sn, index) |
读一条,返回 data(索引从 1)和 timestamp(32 位 Unix 秒) |
record_modify_data(sn, index, data) |
改一条,index 从 0 开始,须 < record_get_count(sn) |
record_write_string(sn, strings) |
追加Charaktere串记录,Feld用UnterteilungNr. ; Unterteilung隔 |
record_read_string(sn, index) |
读Charaktere串记录,返回 strings 和 timestamp |
record_modify_string(sn, index, strings) |
改Charaktere串记录 |
record_clear(sn) |
Leeren通道所有记录(Zahlenwert/Charaktere串都行) |
⚠️ 若采样已aktiviert.块Adresse存储模式,记录不可篡改——modify 会失败。
2. Zahlenwert表格案例(添加/修改/Lesen/Beseitigung/查条数)
Informationen采集配置:触发采样、记录条数 100、DatenAdresse LW2000、UINT16、Daten个数 10、控制Adresse LW1001、采样控制Adresse LW1002、启动模式 OFF→ON。Daten aufzeichnenKontrollen:Daten来源「[0]Zahlenwert数组」、Zeit逆序、通道数 10、每页 5 行、翻页控制 LW1004、允许翻页 LW1005(只读)、Zeit戳定位 LW1006(UINT32)、选中行通知 LW1008(UINT32)。5 个Knopf写 LW1000,常Quantität 1=添加/2=修改/3=Lesen/4=Beseitigung/5=读条数。
addByteRatio = 0 -- 累加器,让每次添加的Daten不同
function on_update(slave, vtype, addr)
if vtype == VT_LW then
if addr == 0x1100 then -- OperationenKnopf
local key = get_uint16(VT_LW, 0x1100)
local dataTb = {}
if key == 1 then -- 添加
addByteRatio = addByteRatio + 1
for i = 1, 10 do
dataTb[i] = i * addByteRatio -- Die一次 1..10,Die二次 2..20
end
record_write_data(0, dataTb)
elseif key == 2 then -- 修改选中行
local cnt = record_get_count(0)
local line = cnt - get_uint32(VT_LW, 0x1105) - 1 -- 逆序表格行映射
for i = 1, 10 do dataTb[i] = 12345 end
record_modify_data(0, line, dataTb)
elseif key == 3 then -- Lesen选中行
local cnt = record_get_count(0)
local line = cnt - get_uint32(VT_LW, 0x1105) - 1
local data, timeUnix = record_read_data(0, line)
local msg = "Zeit:"..timeUnix.." Daten:"
for i = 1, 10 do msg = msg..data[i].." " end
set_string(VT_LW, 0x1160, msg)
elseif key == 4 then
record_clear(0) -- Beseitigung
elseif key == 5 then
set_string(VT_LW, 0x1160, "条数:"..record_get_count(0))
end
end
end
end
逆序表格的行映射:KontrollenZeit逆序显示,Die 0 行是最新记录。选中行通知给的是显示位置,换算公式 line = cnt - select - 1。
3. Charaktere串表格案例
Informationen采集:触发采样、记录条数 100、DatenAdresse LW3000、STRING、Daten个数 50、控制Adresse LW1501、采样控制Adresse LW1502、启动模式 OFF→ON。Kontrollen:Daten来源「[1]Charaktere串」、Charaktere串表格√、GB CODE、Zeit顺序(注意和Zahlenwert案例的逆序不同)、通道数 10、每页 5 行、翻页 LW1201、允许翻页 LW1202、Zeit戳定位 LW1203、选中行通知 LW1205。5 个Knopf写 LW1200。
addStr = 0
function on_update(slave, vtype, addr)
if vtype == VT_LW and addr == 0x1200 then
local key = get_uint16(VT_LW, 0x1200)
if key == 1 then -- 添加
local cnt = record_get_count(1)
local line = get_uint32(VT_LW, 0x1205) -- 顺序表格不反转
if cnt < line - 1 then return end
addStr = addStr + 10
local dataStr = ""
for i = 1, 10 do
dataStr = dataStr.."Die"..(addStr - 10 + i).."个;"
end
record_write_string(1, dataStr) -- "Die erste;...Die 10.;"
elseif key == 2 then -- 修改
local line = get_uint32(VT_LW, 0x1205)
record_modify_string(1, line, "change;change;change;change;change;change;change;change;change;change;")
elseif key == 3 then -- Lesen
local line = get_uint32(VT_LW, 0x1205)
local dataStr, timeUnix = record_read_string(1, line)
set_string(VT_LW, 0x1260, timeUnix..dataStr)
elseif key == 4 then
record_clear(1)
elseif key == 5 then
set_string(VT_LW, 0x1260, "条数:"..record_get_count(1))
end
end
end
Charaktere串记录用UnterteilungNr. ; Unterteilung隔Feld,和表格KontrollenAnalyseRegeln一致。顺序表格选中行不用反转,直接拿 LW1205。
整理自 广州大彩科技 VisualHMI 开发Dokumentation(hmi-doc.gz-dc.com)LUA Unterricht「Daten aufzeichnen」,版权归大彩科技所有。
Antwort veröffentlichen