VisualHMI Lua API 大全:回调/Kommunikation/Register.读写函数速查表

kostenlosKostenloses technisches Material

Dieser Inhalt ist direkt lesbar und eignet sich für das Grundlagenlernen und die Suche.

🌐 Diese Seite ist noch nicht auf Deutsch verfügbar. Die chinesische Version wird angezeigt. Zurück zur chinesischen Seite.
本文目录
  1. 1. 0. 基础:自动生成的 main.lua
  2. 2. 1. 常用回调函数(10 个)
  3. 3. 2. 读写Register.函数(32 个)
  4. 4. 2.0 先说两个关键机制(所有 set/get 通用)
  5. 5. 2.1 Kommunikation控制
  6. 6. 2.2 位Operationen
  7. 7. 2.3 Zahlenwert读写(16/32/64 位)
  8. 8. 2.4 Charaktere串与批Quantität
  9. 9. 3. 绘图函数(10 个)
  10. 10. 4. 绘图实例:switch 表驱动

这是 VisualHMI 平台 Lua Drehbuch的vollständig API 手册:10 个Das System回调 + 32 个读写Register.函数 + 10 个绘图函数,共 52 个Schnittstelle。写Drehbuch前先翻这篇,比逐个翻Unterricht快。平台基于 Lua 5.3。

0. 基础:自动生成的 main.lua

菜单 工程→Drehbuch编程 默认生成 main.lua,自动带Vereinbarung对应的Datentyp定义:

ENCRYPT_ = 0        -- LUADrehbuch加密Schalter!
-- Datentyp定义(随Vereinbarung变化,以下为 Modbus)
VT_LW = 1           -- 内部变Quantität
VT_RW = 2           -- FLASH掉电存储
VT_0x = 10          -- 线圈
VT_1x = 11          -- 输入点(离散输入)
VT_3x = 12          -- 输入Register.
VT_4x = 13          -- 保持Register.

function on_init() end
function on_run(screen) end
function on_update(slave,vtype,addr) end
function on_draw(screen_id,control_id) end

FX3U Vereinbarung下还会有 VT_M(内部Relays.)、VT_D(DRegister.)等Typus。on_update 里的 vtype、get/set 函数Die一个Parameter都用这些常Quantität。

1. 常用回调函数(10 个)

回调 触发时机 要点
on_init() Das SystemLaden LUA 后立即执行一次 初始化、dofile Laden其他 lua、写初值
on_run(screen) 每个主循环周期自动调用 核心周期调度。禁止 delay_ms/长循环/网络同步/内部 set_run_cycle();Modbus Hauptstation时别高频写从机(总线堵塞)
on_update(slave,vtype,addr) Register./变Quantität值变化时触发 Daten驱动不轮询。Die Serie/Modbus Hauptstation写入、on_update 内 set_xxx 不触发(防递归);可用全局 EN_ON_UPDATE_API_CB Steuerung Schalter
on_screen_change(screen) 画面Wechselnabgeschlossen.后 初始化/Status同步/资源Laden
on_press(state,x,y) 触摸Status变化,每 100ms 最多一次 state: 0抬起/1按下/2长按(按下只触发一次);底层坐标,点空白也触发
on_usb_inserted(driver) U 盘插入识别 driver 为盘符,M 系列是 “2:”,用全局变Quantität记录
on_usb_removed() U 盘拔出 清盘符全局变Quantität
on_sd_inserted(dir) SD 卡插入识别 dir 盘符,M 系列是 “1:”
on_sd_removed() SD 卡拔出 清盘符全局变Quantität
on_parse_timestamp(screen,control,timestamp) 告警/Daten/Operationen记录表格ZeitFeldDas Format化 control 必须≠0;配 make_datetime(timestamp) 返回Custom definiertZeit串

2. 读写Register.函数(32 个)

2.0 先说两个关键机制(所有 set/get 通用)

机制一:get_xxx() 是零Kommunikation开销的。get 系列Alles从 HMI 本地缓存(内存镜像)读,不产生Die Serie帧。HMI 后台任务按工程配置的轮询周期自动从 PLC 读Kommunikation变Quantität(如 Modbus 的 VT_3x/VT_4x)并缓存。画面Kontrollen绑定了某Adresse,该Adresse就自动进轮询列表;Drehbuch要读没被工程引用的Adresse,用 start_read 显式Bitte同步。

机制二:set_xxx() 不一定发Die Serie帧。只有两个条件同时满足才主动发Meldung:①HMI 是主机模式(Modbus Master/DCBUS/XGUS);②Die Serie通知没被 set_notify(0) 禁止。从机模式下 set 只更新本地镜像。

2.1 Kommunikation控制

函数 Parameter 说明
set_notify(enable) 0禁止/1使能(默认) 全局Die SerieSenden Sie通知Schalter!。set_notify(0) 后 set_xxx 不发Die Serie指令,改完恢复 set_notify(1)
select_slave(slave_id) 从机索引 0 起 多从机模式下Wechseln后续 get/set 访问的从机。slave_id 是工程从机列表数组下标,不是 Modbus 站Nr.
set_endian(en) 0大端(默认)/1小端 多Anzahl der Bytes据(uint16/32/float)与从机交换时的Befehlseite。仅KommunikationVereinbarung涉及多Bytes时生效
start_read(index,vtype,addr,quantity,cycle,cycle_run,mode) index 0~127;quantity 1~120;cycle 轮询倍数(默认0=每周期);cycle_run 周期内Die几次(0-based);mode 0持续/1仅一次 主机模式后台自动轮询。无返回值,Daten用 get_xxx 读缓存。mode=1 需先 create_resp_que()
stop_read(index) 任务索引 Stopp!指定后台Lesen任务,缓存保留最后值
stop_all_read() 停掉所有Drehbuch启动的Lesen任务
set_auto_read(en) 1aktiviert.(默认)/0禁止 画面绑定变Quantität自动轮询的总Schalter!。0 后完全由 start_read 接管
create_resp_que() 创建Antwort队列,配合 start_read(mode=1) 做单次按需Lesen
on_cmd_resp(slave,vtype,addr,count,ret,wr) ret 0成功/1异常;wr 0读/1写 主机模式KommunikationErgebnisAsynchron回调,收zuAntwort或超时触发。判断单次读写成败
set_slave_site(idx,slave_id) idx 从机索引;slave_id 新站Nr.(Modbus 1~247) Betrieb时动态改从机站Nr.,适应现场组网

2.2 位Operationen

函数 Parameter 说明
set_bit(vtype,addr,value,count) value 16位无符Nr.,低 count 位对应目标位(bit0→addr,bit1→addr+1…);count 选填 1~16 批Quantität位写入。Modbus 线圈、FX3U 的 X/Y/S/M 都行。一次Kommunikation写多个Schalter!
get_bit(vtype,addr) 读单一位,返回 0/1。从本地缓存读,零Kommunikation开销

2.3 Zahlenwert读写(16/32/64 位)

函数 Zahlenwert范围 Adresse跨度
set/get_uint16(vtype,addr,value) 0~65535,超出截断 & 0xFFFF 1 ein Register.
set/get_int16(vtype,addr,value) -32768~+32767,超出截断 & 0xFFFF 1 ein Register.
set/get_uint32(vtype,addr,value) 0~4294967295,截断 & 0xFFFFFFFF 2 ein Register.
set/get_int32(vtype,addr,value) -2^31~2^31-1 2 ein Register.
set/get_uint64(vtype,addr,value) 0~2^64-1 4 ein Register.
set/get_int64(vtype,addr,value) -2^63~2^63-1 4 ein Register.
set/get_float(vtype,addr,value) IEEE 754 单精度 2 ein Register.
set/get_double(vtype,addr,value) IEEE 754 双精度 4 ein Register.

所有 get 系列读本地缓存;set 系列Kommunikation触发看「机制二」。

2.4 Charaktere串与批Quantität

函数 Parameter 说明
set_string(vtype,addr,str) str 最大 2K Bytes,UTF-8 或 GBK 写Charaktere串zuAdresseSequenz
get_string(vtype,addr,len) len 选填,默认 128 Bytes,最大 2048 读Charaktere串,自动在 截断
set_uint16_ex(vtype,addr,value1,...,valueN) 最多 120 个值 可变Parameter批Quantität写连续Register.,适合固定Parameter集
set_array(vtype,addr,buff) buff 为 Lua table(word 数组),最多 120 字 table 批Quantität写,适合程序化生成/动态Daten。与 set_uint16_ex 区别在传参方式

3. 绘图函数(10 个)

Alles draw_xxx 必须在 on_draw(screen_id,control_id) 回调里调用才生效,Kontrollen ID 必须 ≠ 0。图层按Kontrollen Z 轴(Herausgeber器叠放顺序)管理,靠判断 control_id Unterteilung层绘制。主动Erfrischen调 redraw()

函数 Parameter 说明
set_pen_color(color) RGB565:高5位R(0~31)/中6位G(0~63)/低5位B(0~31) 设置画笔(前景)颜色。红 0xF800、绿 0x07E0、蓝 0x001F、白 0xFFFF、黑 0x0000
draw_line(x0,y0,x1,y1,width) width 1~10 画直线,颜色取gegenwärtig画笔
draw_rect(x0,y0,x1,y1,fill) fill 1填充/0边框 左上角+右下角坐标
draw_rect_alpha(x0,y0,x1,y1,alpha) alpha 0~255(0透明/255不透明) 半透明实心矩形,遮罩层常用
draw_circle(x,y,r,fill) fill 0实心/非0空心(值作线厚) 圆心+半径
draw_ellipse(x0,y0,x1,y1,fill) fill 0实心/非0空心 外接矩形定义椭圆
draw_image(image_id,frame_id,dstx,dsty,width,height,srcx,srcy) image_id 查 build/image.xml;frame_id 动画帧(非动画=0) 绘制图片,支持缩放+裁剪。image_id 在工程 build 目录 image.xml 里查
draw_text(text,x,y,w,h,font_id,size,color,align,charcode) align 0左/1中/2右;charcode 0=UTF-8(默认)/1=GBK 区域文字绘制,支持多BytesCharaktere
draw_surface(surface,x,y,w,h,srcx,srcy) surface 为画面/画布资源 画面裁剪显示,多图层合成用

4. 绘图实例:switch 表驱动

源文所有绘图Beispiel都是一个套路:on_update 读Knopf键值 → redraw() → on_draw 里按键值查 switch 表选绘制函数。以画线+画圆为例:

draw_type = 0
mode = { line = 1, rect = 2, rect_alpha = 3, circle = 4, ellipse = 5, imageId = 6, text = 7 }

function on_update(slave,vtype,addr)
  if addr == 0x1000 then
    draw_type = get_uint16(VT_LW, addr)  -- 字设置Knopf键值
    redraw()
  end
end

function on_draw(screen_id, control_id)
  local switch = {
    [mode.line] = function(control)
      if screen_id == 0 and control == 1 then
        set_pen_color(0xFFE0)          -- 黄色
        draw_line(225, 253, 405, 253)
        set_pen_color(0xF800)          -- 红色
        draw_line(508, 128, 508, 378, 5)
      end
    end,
    [mode.circle] = function(control)
      if screen_id == 0 and control == 1 then
        draw_circle(300, 253, 100, 0)  -- 实心圆
        draw_circle(450, 253, 150, 1)  -- 空心圆,线厚1
      end
    end,
  }
  if switch[draw_type] then switch[draw_type](control_id) end
end
三个最容易翻车的点:①get_xxx 读的是缓存不是实时值——要读没绑Kontrollen的Adresse,先 start_read 同步;②set_xxx 在从机模式下不发Die Serie帧——MCU 收不zu是正常的,别查半天Porter Rate;③on_run 里严禁 set_run_cycle() 和 delay_ms,调度器会死锁。画图必须放 on_draw 里,Kontrollen ID 非 0。

整理自 广州大彩科技 VisualHMI 开发Dokumentation(hmi-doc.gz-dc.com)LUA Unterricht「Lua DrehbuchAPI函数Schnittstelle」,版权归大彩科技所有。

Techniken术语(共 6 个)—— Klick auf展开
Register.Modbus Register.存储Daten单元,Unterteilung线圈/离散输入/保持/输入Register.四类
PLC可编程逻辑Der Controller,Industrielle Automatisierung控制的核心Ausrüstung
Porter Rate串行Kommunikation每秒传输符Nr.数,Modbus RTU常用9600/19200
Die SerieBerechnung机与外部Ausrüstung进行串行Kommunikation的物理Schnittstelle
线圈Modbus位可读Schreiben von Daten,Adresse从00001开始
保持Register.Modbus 16位可读Schreiben von Daten,Adresse从40001开始
来源/Werkzeuge信息 —— Klick auf展开
来源 Modbus Chinesisches Netzwerk(modbus.cn) —— Inländisch führend.ModbusKommunikationsprotokoll Technologie Gemeinschaft Klassifizierung Das Drehbuch von LUA / Entwicklung von HMI / HMI 字数 4925 字 · 阅读约 13 Unterteilung钟 更新 2026-08-05 永久链接 https://www.modbus.cn/51496.html
Empfohlene Werkzeuge: Modbus Debugger-Assistent WeChat-Applet
Modbus Chinesisches Netzwerk官方推出的Modbus Debugging-Tools,支持 Modbus RTU/TCP 实时KommunikationTests、Register.读写、线圈控制、Daten监控和MeldungUnterteilung析。 keine Installation erforderlich,Mikro-Suche「Modbus DebuggingAssistenten.」Benutzt werden kann.。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
Sollte man diese Informationen für ein echtes Projekt verwenden?

Gehen Sie zum Tool Center, um Nachrichten zu analysieren, CRC-Prüfungen und Geräte-Debugging zu erledigen, oder senden Sie Anforderungen für Auswahl - und Zugangsvorschläge.

Ingenieur Mitglied

Verwandeln Sie diesen Artikel in ein umsetzbares Debuggermaterial

Erweiterte Nachrichtenanalyse, Paket-Downloads, Codebeispiele, Engineering-Szenarien und Priority-Technischer Support sind für die Real-Projekt - Bereitstellung möglich.

Unbegrenzte Werkzeuge
Datenpaket und Codepaket
Vollständige Engineering Case-Basis
Vorrangiger Zugang zum technischen Support

Antwort veröffentlichen

Ihre E-Mail - Adresse wird nicht öffentlich gemacht. Erforderliche Elemente wurden verwendet * markiert.