Modbus mit Unterregister?

OP #7316915
Lesenswert?

Hi, ich lese über einen originalen Wlan-Dongle vom Hersteller, auf der eine eigene Firmware läuft, einem Wechselrichter die Input-Register aus. Das stellt kein Problem dar und läuft.

Am Wechselrichter hängen jetzt Speicherblöcke, welche über den Wechselrichter per Canbus abgefragt werden. Der Hersteller kann über den originalen Wlan-Dongle die Speicher auslesen. Also Zellspannungen usw. Der Weg läuft also über den im Verbauten Arduino ESP07 in den Wechselrichter per Modbus, mit weiterer Abfrage der Speicher per Canbus.

Im Wechselrichter steht ein Input-Register = 102 = BMS_ Cell1_Volt, in dem nichts steht. Als Erklärung zu diesen Werten steht dazu ,

"Detail information, refer to document: Growatt xxSxxP ESS Protocol;"

In diesen Protokoll gibt es dann wieder Register zum abfragen.

Gehe ich richtig in der Annahme, das man Register 102 aufruft und danach einen weiteren vom Speicher? Oder wie läuft das ab?

Kann jemand dazu Erklärungen abgeben?

Besten Dank im Voraus :-)

Gast #7316962
Lesenswert?

Was jetzt, Modbus oder Canbus?

Modbus kennt keine "Unterregister". Modbus kennt zwei Arten von Registern mit 16-Bit-Werten und zwei Arten von Registern mit 1-Bit-Werten. Die 16-Bit-Werte werden als "input register" und "holding register" bezeichnet, letztere können auch beschrieben werden. Die 1-Bit-Werte werden als "discrete inputs" und "coils" bezeichnet, letztere können auch beschrieben werden.

Alle Register werden bei 0 anfangend durchnumeriert, es kann bis zu 65536 Register jeden Typs geben.

Es gibt davon abweichende Konventionen, bei der die Art des Registers /nur bei der Darstellung/ in die Registernummer codiert wird, und dann wird bei 1 mit der Zählung begonnen. Eine Konvention beschränkt dadurch die Anzahl der verwendbaren Register auf 9999 je Typ:

coils 1 bis 9999 discrete inputs 10001 bis 19999 input register 30001 bis 39999 holding register 40001 bis 49999

Das aber ist nur eine Art der Darstellung, /tatsächlich/ werden bei allen Registerarten die Nummern 0 bis 9998 verwendet.

Eine Erweiterung dieser /Darstellungskonvention/ erlaubt die Verwendung aller möglichen Register:

coils 1 bis 65536 discrete inputs 100001 bis 165536 input register 300001 bis 365536 holding register 400001 bis 45536

Aber auch hier werden im tatsächlichen Protokoll die Adressen 0 bis 65535 verwendet; das Protokoll sieht nämlich nur einen einzelnen 16-Bit-Wert für die Adressierung vor, und das ist nunmal der damit darstellbare Wertebereich.

Mehr steckt nicht hinter Modbus.

Gast #7316972
Lesenswert?

Ralf P. schrieb:

Gehe ich richtig in der Annahme, das man Register 102 aufruft und danach einen weiteren vom Speicher? Oder wie läuft das ab?

Hä? Was möchtest du wissen? In diesem Handbuch steht die Cell 1 Voltage im Register 0x0071 (133 dezimal): https://watts247.com/manuals/gw/1_1xSxxP_ESS_protocol_rev%20_23_20171128.pdf

Der Controller mit dem du Wechselrichter sprichts, besorgt sich den Wert entweder in dem Moment deiner Abfrage per CAN-Bus von den Slaves oder er speichert ihn zwischen, weil er die Slaves regelmäßig abfragt.

OP #7317157
Lesenswert?

Naja, der Aufbau von Modbus ist mir schon etwas geläufig. Trozdem ein danke an @DerEinzigeBernd.

@STK500-Besitzer der Register 133 zeigt mit aber nur 65535 an. 133 ist wie du schon sagtest der Register aus dem Growatt xxSxxP ESS Protocol

102 wäre laut Modbus-Tabelle für meinen Wechselrichter der Wert für BMS_ Cell1_Volt

Es gibt halt zwei Protokolle. Das ist mein Problem. Entweder hat hier Growatt etwas grundsätzliches geändert oder ...

Gast #7318818
Lesenswert?

Ralf P. schrieb:

Es gibt halt zwei Protokolle. Das ist mein Problem. Entweder hat hier Growatt etwas grundsätzliches geändert oder ...

Welchen Wechselrichter hast du denn?

DerEinzigeBernd schrieb:

Modbus kennt keine "Unterregister

Modbus selber "nicht" (siehe Functioncode 0x2B "Encapsulated Interface Transport").

Man kann natürlich ein übergeordnetes Protokoll implementieren, bei dem Register als Adressregister der Unterregister verwendet wird. Man schreibt in ein HoldingRegister die Adresse des Unterregisters und liest dann auf der selben Holding- oder InputRegister-Adresse den Wert verschiedener Unterregister aus.

Gast #7319932
Lesenswert?

Ralf P. schrieb:

Ich gaube ich habe da was gefunden. In einer gerade gefundenen PDF scheint was im Holdig-Register zu stehen.

Und was? Immer wieder schade, wenn jemand irgendwelche Unterlagen zitiert, aber wieder diese noch einen Link darauf mitliefert. In den Unterlagen, die ich dazu gefunden habe, standen Randbemerkungen auf Chinesisch (oder so; zumindest eine Sprache, von der ich keine Ahnung habe).

So gesehen, halte ich die Sache für Closed Source, und da mir kein (derartiger) Wechselrichter zur Verfügung steht, halte ich mich erstmal raus.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren