Die Register-Operations - API ist das ganze Zuhause für LUA-Lesen und Schreiben von Daten: die set / get-Serie deckt alle Datentypen ab, set _ bit verarbeitet Bits, set _ array schreibt Massen. Der Kernmechanismus erinnert sich:get_xxx liest alles aus dem lokalen HMI-Cache (Speicherspiegel), ohne serielle Frames zu senden- Null Kommunikationskosten.
1. Lese-Mechanismus (wichtig)
Die get_xxx () - Serie von Funktionensendet keine seriellen Portanfragen。HMI Hintergrund-Aufgaben lesen automatisch Kommunikationsvariablen von der SPS (Modbus 3x / 4x usw.) und zwischen, Skript-Lese - nur-Cache - Zwischenspeicher nach dem Engineering-Konfiguration - Polling-Zyklus. Der Vorteil besteht darin, dass die Skriptlogik keine Kommunikationsstürme verursacht - Sie werden den Bus nicht zehntausendmal sprengen.
2. API Gesamtübersicht
| Funktion | Bereich / Beschreibung | Adressspann |
|---|---|---|
set_bit(vtype,addr,value,count) | Massenbits Schreiben, Wert Niedriges Count-Bits Entsprechen hintereinander folgenden Bits von addr (count1 ~ 16); get_bit gibt 0/1 | 1 |
set/get_uint16 | 0 ~ 65535, Überbereichsbeschneiden & 0xFFFF | 1 |
set/get_int16 | 0 ~ 4294967295 | 1 |
set/get_uint32 | 0~4294967295 | +2 |
set/get_int32 | -2^31 ~ 2^31 - 1 | +2 |
set/get_uint64 | 0 ~ 2^64 - 1 | +4 |
set/get_int64 | -2^63 ~ 2^63-1 | +4 |
set/get_float | IEEE 754 Single Precision | +2 |
set/get_double | IEEE 754 Double Precision | +4 |
set_string(vtype,addr,str) | Maximal 2 Kbytes, UTF - 8 / GBK; get_string Standard 128 Bytes Maximal 2048, abgeschnitten | Batch-Schreiben nach Länge |
set_uint16_ex(vtype,addr,v1,...,vN) | , bis zu 120 Registers | N |
set_array(vtype,addr,buff) | Lua table (Word-Array), bis zu 120 Wörter empfangen | N |
3. vtype-Wert (je nach Protokoll)
| Konstante | Bedeutung |
|---|---|
| VT_0x | Spule |
| VT_1x | Eingang |
| VT_M | FX3U internes Relais |
| VT_3x | Eingangsregister |
| VT_4x | Haltenregister |
| VT_D | FX3U D-Register |
| VT_LW | Interne Variablen (Stromausfall nicht gespeichert) |
| VT_RW | Stromausfall-Speicherbereich |
Data Replication Case (12 - Group-Mode - Common Routine)
Häufigste Anforderungen: externes Schreiben von Daten an LW, Verschiebung von Skripten an eine andere Adresse oder Umwandlung von Formaten. Die Routine ist in on _ update, um vtype == VT _ LW und die Quelladresse zu beurteilen, und das Ziel mit get zu lesen und zu schreiben:
function on_update(slave, vtype, addr)
if vtype == VT_LW then
if addr == 0x1000 then
set_uint16(VT_LW, 0x1001, get_uint16(VT_LW, 0x1000)) -- uint16 复制
elseif addr == 0x1004 then
set_uint32(VT_LW, 0x1006, get_uint32(VT_LW, 0x1004)) -- uint32(跨度+2)
elseif addr == 0x101C then
set_float(VT_LW, 0x101E, get_float(VT_LW, 0x101C)) -- float(跨度+2)
elseif addr == 0x1030 then
set_string(VT_LW, 0x1040, get_string(VT_LW, 0x1030, 16)) -- string(跨度16)
end
end
end
-- 批量写:addr==0x1050 且值为偶数时写 10 个寄存器
function on_update(slave, vtype, addr)
if vtype == VT_LW and addr == 0x1050 then
local v = get_uint16(VT_LW, 0x1050)
if v % 2 == 0 then
set_uint16_ex(VT_LW, 0x1060, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
-- 或
set_array(VT_LW, 0x1060, {10, 20, 30, 40, 50, 60, 70, 80, 90, 100})
end
end
endAus dem LUA-Tutorial "Register-Betrieb" von Guangzhou Dacai Technology VisualHMI-Entwicklungsdokument (hmi-doc.gz-dc.com) zusammengestellt, das Urheberrecht liegt bei Dacai Technology.
Antwort veröffentlichen