- 1. 1. Lesen机制(重要)
- 2. 2. API 总表
- 3. 3. vtype 取值(随Vereinbarung变化)
- 4. 4. DatenKopieren.案例(12 组模式通用套路)
Register.Operationen API 是 LUA 读Schreiben von Daten的Alles家当:set/get 系列覆盖所有Datentyp,set_bit 处理位,set_array 批Quantität写。核心机制先记住:get_xxx Alles从 HMI 本地缓存(内存镜像)读,不发Die Serie帧——零Kommunikation开销。
1. Lesen机制(重要)
get_xxx() 系列函数不会实时向 PLC 发Die SerieBitte。HMI 后台任务按工程配置的轮询周期自动从 PLC 读Kommunikation变Quantität(Modbus 的 3x/4x 等)并缓存,Drehbuch只读缓存。好处是避免Drehbuch逻辑造成Kommunikation风暴——你 get 一万次也不会把总线打爆。
2. API 总表
| 函数 | 范围/说明 | Adresse跨度 |
|---|---|---|
set_bit(vtype,addr,value,count) |
批Quantität位写,value 低 count 位对应 addr 起连续位(count 1~16);get_bit 返回 0/1 | 1 |
set/get_uint16 |
0~65535,超范围截断 & 0xFFFF | 1 |
set/get_int16 |
-32768~+32767 | 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 单精度 | +2 |
set/get_double |
IEEE 754 双精度 | +4 |
set_string(vtype,addr,str) |
最大 2K Bytes,UTF-8/GBK;get_string 默认 128 Bytes最大 2048, 截断 | 按Länge |
set_uint16_ex(vtype,addr,v1,...,vN) |
批Quantität写,最多 120 ein Register. | N |
set_array(vtype,addr,buff) |
Empfang Lua table(word 数组),最多 120 字 | N |
3. vtype 取值(随Vereinbarung变化)
| 常Quantität | 含义 |
|---|---|
| VT_0x | 线圈 |
| VT_1x | 输入 |
| VT_M | FX3U 内部Relays. |
| VT_3x | 输入Register. |
| VT_4x | 保持Register. |
| VT_D | FX3U D Register. |
| VT_LW | 内部变Quantität(掉电不保存) |
| VT_RW | 掉电保存区 |
4. DatenKopieren.案例(12 组模式通用套路)
最Häufig的需求:外部给 LW Schreiben von Daten,Drehbuch搬zu另一个Adresse或转换Das Format。套路是 on_update 里判断 vtype==VT_LW 和源Adresse,用 get 读、set 写目标:
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 Kopieren.
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
-- 批Quantität写:addr==0x1050 且值为偶数时写 10 ein Register.
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
end
整理自 广州大彩科技 VisualHMI 开发Dokumentation(hmi-doc.gz-dc.com)LUA Unterricht「Register.Operationen」,版权归大彩科技所有。
Antwort veröffentlichen