TapHome

Modbus-Skripte und Prefetch

Die Skripte eines TapHome-Modbus-Moduls und -Geräts — Initialisierung, Lesen, Wert lesen, Wert schreiben, Service-Attribute und Service-Aktionen — und wie Prefetch und der Registercache sie beeinflussen.

Ein Modbus-Modul und jedes seiner Geräte haben mehrere Skripte, und die Modbus-Funktionen funktionieren in allen. Wie oft die Skripte laufen und welche Register sie vom Bus lesen, hängt vom Abfrageintervall und vom Prefetch-Modus des Geräts ab. Wann jedes Skript läuft und welche Variablen es sieht, ist ausführlich unter Modbus-Integration beschrieben.

Skripte von Modbus-Modulen und -Geräten

Jedes Modbus-Skript hat seinen eigenen Zeitpunkt der Ausführung und seinen typischen Inhalt.

SkriptLäuftTypischer Inhalt
Initialisierung (Modul, Gerät)Einmal nach dem StartMODBUSWNE für Konfigurationsregister.
Lesen (Modul, Gerät)Bei jeder AbfrageAlarmregister und ADDERROR.
Wert lesen (Gerät)Bei jeder AbfrageMODBUSR und eine Umrechnung. Die letzte Anweisung ist der Gerätewert.
Wert schreiben (Gerät)Wenn sich der Wert ändert, und mit Periodic write bei jeder AbfrageMODBUSW der Gerätevariablen, zum Beispiel des Sollwerts.
Service-AttributBeim Öffnen der ServiceeinstellungenMODBUSR, in Text umgewandelt.
Service-AktionBeim Drücken ihrer SchaltflächeMODBUSW mit den Parametern der Aktion, die über ihr Kürzel verfügbar sind.

Hinweise

  • Am Modul oder am Gerät definierte Variablen behalten ihren Wert zwischen den Skriptläufen — nutzen Sie sie, um einen Wert aus einem Leseskript an ein Service-Attribut weiterzugeben. Modulvariablen können ab Core 2026.1, Build 39507, Sammlungen sein.
  • ADDERROR, ADDWARNING und ADDINFO funktionieren nur in einigen dieser Skripte — siehe ADDERROR.

Beispiel — Skript Wert lesen eines Temperatursensors

MODBUSR(H, 20, Int16) / 10;

Beispiel — Service-Aktion mit einem Parameter ID

MODBUSW(H, 20, Float, ID);

Prefetch und der Registercache

Der Prefetch-Modus eines Modbus-Geräts bestimmt, ob seine Skripte Register aus dem Cache des Moduls oder vom Bus lesen.

ModusAuswirkung auf Skripte
NormalVon den Skripten verwendete Register werden vor dem Lauf der Skripte in gruppierten Anfragen gelesen. Liest ein Lauf dasselbe Register zweimal, kostet das eine Transaktion.
IsolatedWie Normal, aber die Register des Geräts werden nicht mit den Registern anderer Geräte zusammengeführt.
No prefetchKein Cache. Jedes MODBUSR und MODBUSRBLOCK ist eine echte Transaktion, in der geschriebenen Reihenfolge.

Hinweise

  • Wählen Sie No prefetch für Geräte, die eine genaue Abfolge von Transaktionen benötigen; speichern Sie dann einen einmal gelesenen Wert in einer Variablen, statt ihn erneut zu lesen.
  • Bevorzugen Sie einen Blocklesevorgang gegenüber einer Schleife aus Einzellesevorgängen — MODBUSRBLOCK(H, 100, 100) ersetzt 100 Transaktionen.
  • MODBUSWNE und MODBUSWBLOCKNE vergleichen mit dem Wert im Cache — siehe MODBUSWNE.
  • Die Größe der gruppierten Anfragen und die Prefetch-Modi stellen Sie ein wie unter Prefetch beschrieben.

Beispiel — ein Block statt vier Lesevorgängen

collection<uint16> data := MODBUSRBLOCK(H, 100, 4);
VAR voltage := UNPACKVALUE(data, 0, Uint16) / 10;
VAR current := UNPACKVALUE(data, 1, Uint16) / 100;
VAR power := UNPACKVALUE(data, 2, BigEndianFloat);

Siehe auch — Modbus-Datentypen, Beispiele.