VisualHMI Modbus: Start _ read Polling, Cycle-Planung und Lesen-Schreiben - Slaves

kostenlosKostenloses technisches Material

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

Modbus-Master - Multi-Slaven: HMI als Modbus-Master abfragt die Register mehrerer Slaves über den Hintergrund start _ read. Die Kernfunktion start _ read erstellt Aufgaben, get _ xxx liest Cache, on _ cmd _ response erhält Ergebnisse - kein Skript blockiert.

1. Start _ read Parameter

start_read(index, vtype, addr, quantity, cycle, cycle_run, mode)
ParameterBeschreibung
indexTask-Index 0 ~ 127, stop _ read (index) Registertyp mit
vtype(VT_0x / VT_3x / VT_4x usw.)
addrStartadresse
quantityLesezahlen 1 ~ 120 Registers
cycleOptional, Multiple Polling-Zyklen (Standard 0 = Jeder Zyklus gelesen)
Cycle _ RunOptional, Ausführung im Zyklus (0 - basiert, muss < cycle)
modeOptional, 0 = dauerhaftes Lesen (Standard) / 1 = nur einmal gelesen (vor create_resp_que())

2. Grundlegende Verwendung

function on_init()
  -- 每周期都读从机0的 4x1000~1009(10个寄存器)
  start_read(0, VT_4x, 0x1000, 10)
  -- 每 3 个周期读一次从机1的 4x2000~2009,且在周期内第3次执行
  start_read(1, VT_4x, 0x2000, 10, 3, 2)
end

function on_run(screen)
  -- 读数据直接拿缓存,零通信开销
  local v = get_uint16(VT_4x, 0x1000)
  local f = get_float(VT_4x, 0x2000)
end

Start _ read erstellt nur Aufgaben, die tatsächlichen Daten werden von get _ xxx aus dem lokalen Cache gelesen - der gleiche Mechanismus wie die Registeroperationen. Um die Lesen-Abschluss - Benachrichtigung zu erhalten, rufen Sie mit on_cmd_resp zurück (mit create_resp_que).

3. Mehr von den Flugzeugen übertragen

-- 8 台从机,每台读 20 个寄存器,错开周期避免总线拥堵
function on_init()
  for i = 0, 7 do
    start_read(i, VT_4x, 0x0000, 20, 8, i)  -- 8周期轮一遍,每周期读一台
  end
end

function on_cmd_resp(slave, vtype, addr, count, ret, wr)
  if ret == 0 then
    -- 第 slave 台从机读取成功,处理数据
  else
    -- 通信异常,标记从机离线
  end
end

Der Slave hat eine begrenzte Busbandbreite, verwendet cycle / cycle _ run, um die Peak-Auslagerung zu lesen; Ausnahme in on_cmd_resp wird ret nicht 0 beurteilt, um Offline-Markup zu machen.

Drei Gruben:1quantity Maximal 120, mehr als die Start_read;2cycle_run muss kleiner als cyclesein, und cycle_run zählt von 0 ab;3stop_read Der Cache behält den letzten Wert, nachdem die Aufgabe beendet wurde- wird nicht auf Null gelöscht, die Offline-Erteilung beruht auf der Ret_cmd_resp.

Aus dem VisualHMI-Entwicklungsdokument von Guangzhou Dacai Technology (hmi-doc.gz-dc.com) LUA-Tutorial "Modbus-One - Master-Multiple - Servants", das Urheberrecht liegt bei Dacai Technology.

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.