Datenerfassungsteuerelement + record_* API: Verwalten vonhistorischen Datentabellenauf dem HMI - sowohl numerische (wie Spannungskurvendaten) als auch Zeichenfolgen (wie Operationslogs) können gespeichert werden, mit Tabellensteuerelementen, Seitenblättern und Zeitstempel-Positionierung. sn istDatensampelkanal-IndexDer Bereich von 0 bis 19 insgesamt 20 Kanäle, die Steuerungsdatenquelle wählen "Datenerfassung", welche Kanal, die API zu betreiben.
1. record _ * API-Zusammenfassung
| Funktion | Beschreibung |
|---|---|
record_get_count(sn) | Gesamtanzahl der aufgenommenen Kanäle |
record_write_data(sn, data) | Hinzufügen eines Datensatzes, data ist ein Wortarray (Index beginnt bei 1) |
record_read_data(sn, index) | Lesen Sie einen Text und gibt data (Index beginnt bei 1) und timestamp zurück (32 - Bit-Unix - Sekunden) |
record_modify_data(sn, index, data) | Ändern Sie einen Artikel, Index beginnt mit 0, muss < record_get_count(sn) |
record_write_string(sn, strings) | Zeichenfolgen-Einträge hinzufügen, Felder mit Semikolon; Trennung |
record_read_string(sn, index) | Lesen von Zeichenfolgen-Einträgen, Rückgabe von Strings und Timestamp |
record_modify_string(sn, index, strings) | Ändern von Zeichenfolgen-Einträgen |
record_clear(sn) | Leeren von Kanälen alle Datensätze (Werte / Zeichenfolgen) |
und️ Wenn die Proben aktiviert sindden Blockadress-Speichermodusaktiviert hat, wird der Datensatznicht manipuliert- - modify ist gescheitert.
2. Zahlen-Tabellen - Fälle (zufügen / ändern / lesen / löschen / nachprüfen von Einträgen)
Konfiguration der Datenerfassung: Trigger-Sampling, Aufzeichnungsnummer 100, Datenadresse LW2000, UINT16, Datennummer 10, Steueradresse LW1001, Sampling-Steuerungsadresse LW1002, Startmodus OFF → ON. Datensatzsteuerung: Datenquelle „[0] Array", umgekehrte Zeitreihenfolge, Kanalzahl 10, 5 Zeilen pro Seite, Seite umschalten Steuerung LW1004, Seite umschalten zulässig LW1005 (nur Lesen), Zeitstempel-Positionierung LW1006 (UINT32), ausgewählte Zeilen-Benachrichtigung LW1008 (UINT32). 5 Tasten Schreiben LW1000, Konstante 1 = Hinzufügen / 2 = Ändern / 3 = Lesen / 4 = Löschen / 5 = Anzahl der Leseteilen.
addByteRatio = 0 -- 累加器,让每次添加的数据不同
function on_update(slave, vtype, addr)
if vtype == VT_LW then
if addr == 0x1100 then -- 操作按钮
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 -- 第一次 1..10,第二次 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 -- 读取选中行
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 = "时间:"..timeUnix.." 数据:"
for i = 1, 10 do msg = msg..data[i].." " end
set_string(VT_LW, 0x1160, msg)
elseif key == 4 then
record_clear(0) -- 清除
elseif key == 5 then
set_string(VT_LW, 0x1160, "条数:"..record_get_count(0))
end
end
end
endUmgekehrte Tabellen: Zeile 0 ist der neueste Datensatz. Die ausgewählte Zeile zeigt den Anzeigeort, die Umrechnungline = cnt - select - 1。
3.
Datenerfassung: Trigger Sampling, Aufzeichnungsnummer 100, Datenadresse LW3000, STRING, Datennummer 50, Steueradresse LW1501, Sampling-Steuerungsadresse LW1502, Startmodus OFF → ON. Steuerelemente: Datenquelle "[1] Zeichenfolge", Zeichenfolge-Tabelle √, GB-Code,Zeitreihenfolge(Hinweis und Zahlen Fall umgekehrt), Kanalzahl 10, 5 Zeilen pro Seite, Seite umdrehen LW1201, Seite umdrehen zulässig LW1202, Zeitstempel-Positionierung LW1203, ausgewählte Zeilen-Benachrichtigung LW1205. 5 Tasten schreiben 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.."第"..(addStr - 10 + i).."个;"
end
record_write_string(1, dataStr) -- "第1个;...第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 -- 读取
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
endZeichenfolgen-Einträge mit Semikolon; trennen Felder, in Übereinstimmung mit den Regeln der Auflösung von Tabellensteuerelementen. Die Zeilewird nicht umgekehrtund wird direkt LW1205 genommen.
Aus dem VisualHMI-Entwicklungsdokument von Guangzhou Dacai Technology (hmi-doc.gz-dc.com) LUA-Tutorial "Datenprotokolle" zusammengestellt, das Urheberrecht liegt bei Dacai Technology.
Antwort veröffentlichen