VisualHMI 自由Die SerieVereinbarung(主动):uart_recv/calc_crc16 与 XGUS 映射

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. 1. 新增 API(相对被动模式)
  2. 2. 2. ⚠️ 关键前置:禁用Empfang回调
  3. 3. 3. 案例:XGUS Vereinbarung映射zuDas SystemRegister.
  4. 4. 3.1 XGUS 帧Das Format
  5. 5. 3.2 初始化:Laden XGUS.lua
  6. 6. 3.3 指令Analyse:AdresseUnterteilung流
  7. 7. 3.4 主动Senden Sie:XGUS:dataSend(addr, data)

自由Die SerieVereinbarung(主动)是Vorheriger Artikel「被动」的进阶:HMI 不只EmpfangAusrüstung主动发的Daten,还能主动向Ausrüstung发查询帧、读Antwort,HMI 当总线主。核心 API 是 uart_recv(),配合协程+元表搭一个非阻塞Kommunikation框架,对接 XGUS 私有Vereinbarung。适用 HMI&M 系列&Dx 系列。

1. 新增 API(相对被动模式)

函数 Parameter 说明
uart_rxsize(ch) ch Die SerieNr.,通常 0 查询Empfang缓冲区待读Anzahl der Bytes。返回 N 表示有 N Bytes,0 表示无新Daten
uart_recv(ch, size) size 期望LesenAnzahl der Bytes,必须 ≥1 主动从Empfang缓冲区读指定AnzahlBytes。返回下标从 1 的Bytes表,如 {0xAA,0x55,0x01,0x02}
uart_rxclear(ch) ch Die SerieNr. LeerenEmpfang缓冲区。Kommunikation初始化/Fehler.恢复/Vereinbarung同步时清残留
calc_crc16(data) data Bytes表,下标从 1 Modbus CRC-16 Prüfberechnung,返回 0~65535,低Bytes在前(符合 Modbus 小端序)

另外 uart_send(ch, packet) 和被动模式一样:向指定Die Serie通道发Anzahl der Bytes组,packet 下标从 1 开始,每元素 0~255。ch=0 主Die Serie,1/2…副Die Serie(依硬件型Nr.)。通道必须处于自由Vereinbarung模式(未被 Modbus/XGUS 等Das SystemVereinbarung占用)。

2. ⚠️ 关键前置:禁用Empfang回调

主动读Die Serie必须先在工程属性里:Die Serie设置 → Empfang回调 → 禁用(新版软件有这个选项)。不禁用的话,uart_recv() 和 on_uart_recv 回调会抢Daten,帧全乱。

VisualHMI 自由Die SerieVereinbarung(主动):uart_recv/calc_crc16 与 XGUS 映射插图

3. 案例:XGUS Vereinbarung映射zuDas SystemRegister.

目标:把 XGUS Vereinbarung中Adresse ≥0x1000 的读写,映射zu HMI Das SystemRegister. LW1000~LWFFFF。外部Ausrüstung用 XGUS 帧读写 HMI 内部变Quantität,HMI 也主动给Ausrüstung发读写Bitte。

3.1 XGUS 帧Das Format

Feld Länge 说明
帧头 2 Bytes 0x5AA5
Länge 1 Byte 指令+Daten+Prüfungen的Anzahl der Bytes
指令 1 Byte 0x82 写 / 0x83 读(0x80/0x81 另有用)
Daten 最大 249 Bytes Adresse(2Bytes) + Daten内容(nBytes),Länge = n+2
CRC 2 Bytes(可选) CRC-16 (x16+x15+x2+1)

例:向变QuantitätAdresse 0x1000 Wert schreiben 2(不aktiviert. CRC):5A A5 05 82 10 00 00 02——05 是Länge(指令1+Adresse2+Daten2),按字写入。

3.2 初始化:Laden XGUS.lua

官方提供了基于协程+元表的 XGUS.lua 框架。main.lua 里创建实例:

function on_init()
  dofile("XGUS.lua")
  xgus = XGUS:new(0, 0x55AA, true, true)
  -- Parameter:Die SerieNr., 帧头, Öffnen.CRC, Öffnen.写应答
end

-- on_run 里跑协程,非阻塞轮询
_EN_SET_DATA_ = false
function on_run(screen)
  _EN_SET_DATA_ = true
  xgus:run()
  _EN_SET_DATA_ = false
end

XGUS:run() 用协程实现:检查Seriöse Daten → 凑够「帧头+指令+Länge+Adresse」6 Bytes → Analyse → 按Länge收剩余Daten → CRC-Prüfung → 处理。协程可以打断/恢复任务,不阻塞 on_run 主循环,适合耗时流程。

3.3 指令Analyse:AdresseUnterteilung流

function XGUS:processMsg()
  local func = self.func
  if func == XGUSFunction.write then
    -- 写指令
    if self.addr >= 0x1000 then
      -- 用户Register.区:AnalyseDaten写入 LW
      local datas = {}
      for i = 1, write_count do
        datas[i] = self.req[5+i*2]<>8), (self.head&0xFF), 0x03, 0x82, 0x4F, 0x4B})
    end
  elseif func == XGUSFunction.read then
    -- 读指令
    if self.addr >= 0x1000 then
      -- 组应答Frame:读 LW 值回发
      local datas = {(self.head>>8), (self.head&0xFF), 4+self.req[7]*2,
                     0x83, (self.addr>>8), (self.addr&0xFF), (self.req[7]*2)&0xFF}
      for i = 1, self.req[7] do
        local num = get_uint16(VT_LW, self.addr+(i-1))
        datas[6+i*2] = (num>>8) & 0xFF
        datas[7+i*2] = num & 0xFF
      end
      self:sendMsg(datas)
    else
      on_cmd_resp_xgus(self.addr, self.req[7], func, {})
    end
  end
end

-- Das SystemRegister.区读写回调(main.lua 里定义)
function on_cmd_resp_xgus(addr, count, wr, data)
  if wr == 0x82 then
    print("write addr num : "..count)
  elseif wr == 0x83 then
    print("read addr num : "..count)
  end
end

3.4 主动Senden Sie:XGUS:dataSend(addr, data)

主动向Ausrüstung发写指令,data 可以是 number 或 table:

-- 写单个值
xgus:dataSend(0x1000, 1234)
-- 写一组值(table)
xgus:dataSend(0x2000, {0x12, 0x34, 0x56})

-- 内部 send():开 CRC 时自动补 2 BytesPrüfungen再 uart_send
function XGUS:send(resp)
  if self.crc == true then
    resp[3] = resp[3] + 2   -- Länge加 CRC 2 Bytes
    local crc_buff = {}
    for i = 4, #resp do crc_buff[i-3] = resp[i] end
    local crc_check = calc_crc16(crc_buff)
    resp[#resp+1] = (crc_check>>0) & 0xFF
    resp[#resp+1] = (crc_check>>8) & 0xFF
  end
  uart_send(self.port, resp)
end
四个坑:①不禁用Empfang回调就 uart_recv,帧必乱——工程属性→Die Serie设置→Empfang回调→禁用;②calc_crc16 低Bytes在前,组帧时先发低 8 位再发高 8 位;③主动读要防Ausrüstung无Antwort——XGUS:wait() 有超时机制(内部 get_tick_count schlecht值判断),自己写Vereinbarung务必加超时,不然 on_run 卡死;④Adresse ≥0x1000 才走 LW 映射,kleiner als 0x1000 走 on_cmd_resp_xgus 回调自己处理。副Die Serie用之前必须 uart_setup 初始化。

整理自 广州大彩科技 VisualHMI 开发Dokumentation(hmi-doc.gz-dc.com)LUA Unterricht「自由Die SerieVereinbarung(主动)」,版权归大彩科技所有。

Techniken术语(共 2 个)—— Klick auf展开
Register.Modbus Register.存储Daten单元,Unterteilung线圈/离散输入/保持/输入Register.四类
Die SerieBerechnung机与外部Ausrüstung进行串行Kommunikation的物理Schnittstelle
来源/Werkzeuge信息 —— Klick auf展开
来源 Modbus Chinesisches Netzwerk(modbus.cn) —— Inländisch führend.ModbusKommunikationsprotokoll Technologie Gemeinschaft Klassifizierung Das Drehbuch von LUA / Entwicklung von HMI / HMI 字数 2873 字 · 阅读约 8 Unterteilung钟 更新 2026-08-05 永久链接 https://www.modbus.cn/51514.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.