Modbus TCP (6.0): Blöcke per Skript lesen / DataType String

Hallo zusammen,

bei der 6.0 kann ich ja nun in der Instanzkonfiguration Blöcke konfigurieren, die dann zusammen (und damit schneller) abgefragt werden.

Ich habe meine SolarEdge WR per ModbusTCP eingebunden und verwende eigene Skripte, um mittels ModBus_ReadRequest die einzelnen Modbus Register auszulesen (gruppiert jeweils nach den SF Gruppen, für die SolarEdge Kundigen…) und dann diese Rohdaten zu konvertieren.
Gibt es (oder wird es geben) eine Befehlserweiterung, um per ModBus_ReadRequest auch Blöcke auslesen zu lassen?

Welcher DataType gilt für die neuen Strings? Ich vermute mal 10, da die Liste bis 9 (Real64) belegt ist?
IPS_SetProperty($New_ModBus_Device, „DataType“, $DataType);

Gibt es schon Planungen, wann die Doku auf dem 6er Stand ist?

10 ist korrekt.

Im Prinzip fehlt nur die MODBUS_WriteRegisterString Funktion. Ich würde dir aber empfehlen zum Schreiben immer RequestAction zu verwenden. Das tut das selbe - ist aber einfacher zu merken.

ModBus_ReadRequest wird eher nie mehrere Register abfragen können. Die Instanz ist immer auf die vorhandenen Datentypen beschränkt.

Wenn du ein PHP Modul baust und selber die Register umrechnest, kannst du bereits jetzt beliebig viele Register abfragen.

paresy

Ja, ich lese mit ModBus_ReadRequest sehr viele Register aus, nur das Lesen scheint mir nicht besonders schnelle zu sein.
Mein Verständnis war, dass mit der 6.0 das blockweise Lesen von ModBus Registern eingeführt wurde, um diese sequentiellen Einzelabfragen zu beschleunigen.
Daher habe ich gehofft, dass es auch einen neuen Befehl geben könnte, der mir erlaubt, von einer Modbus Instanz einen Bereich auszulesen (etwa ModBus_BlockReadRequest($Instanz, $Startaddr, $Endaddr); )…

Das hilft ja nicht, da die Instanz trotzdem nur 1-2 Register verarbeiten würde. Deswegen ist die Konfiguration zum Blockweise Lesen im Gateway eingebaut worden.

paresy

Tschuldigung, verschrieben. Ich meinte ebenso das Gateway. Dort lege ich in der Konfiguration bei den Expertenoptionen ja Bereiche an, die ich periodisch im „Rutsch“ auslesen möchte.
Könnte man sowas nicht auch per Befehl anbieten, dann halt nur einmalig und nicht periodisch?
Ich lese dann halt einmalig z.B. von den Holding Registers ab Adresse x 26 Werte aus.

Welche aber in einem eigenen Aktion-Skript benötigt wird, falls man eines aus anderen Gründen braucht. :wink:
Weglassen zählt also nicht. (Ja okay, eine Aktion tut es auch).
Michael

Moin. Auch wenn der Thread schon älter ist,versuche ich es mal hier. Mein Problem ist,dass ich es nicht hin kriege, die abgefragten Blöcke bzw. deren Werte danach in einem Skript auszuwerten. Debug zeigt mir Werte aber ich hab wohl vergessen, wie ich diese per Skript abfange um Sie umzurechnen…
Hat da vielleicht jemand nen Codeschnipsel oder ein HowTo ??

Danke, Sven

Gibt kein Script.
Leg einfach die entsprechenden Modbus Instanzen an.
Michael

Danke für die Antwort. Muss tatsächlich für jeden einzelnen Wert eine eigene Instanz erstellt werden?

Habe dein Modul zum Auslesen meines SDM 630 in Gebrauch. Könnte man dieses Modul evtl. modifizieren um andere Register abzufragen?