« Elektrotechnik & Smarthome  |

Modbus Hilfe erbeten - SDM630 Zähler auslesen

   
Teilen: facebook    whatsapp    email
Zusammenfassung anzeigen (Beta)
  •  kraweuschuasta
  •   Gold-Award
16.2.2022 - 1.1.2023
14 Antworten | 6 Autoren 14
14
Mahlzeit allerseits,
Bitte um Hilfe, werd noch ganz narrisch, wie lese ich richtig die Werte aus meinem neuen SDM630 Zähler aus?

Bin irgendwie zu blöd, um das mit den Registern Variablen und LSB und MSB zu kapieren....

Ich hab meinen SDM630 Zähler in einer Teststellung, L1 und N angehängt, als Verbraucher hängt das Notebook dran. Das funkt, Notebook braucht grad 0,02 kW.

An meinem Linux Notebook hab ich einen RS485 - USB Adapter dran, verkabelt ists auch. Serielle Einstellungen funken auch (Slave Adresse1, 19200 Baud, no parity, 1 Stopbit) also modbus RTU...

Nachdem ich mich gestern mit 3 verschiedenen, nicht funktionierenden Python Bibliotheken herumgeärgert hab, hab ich kurzerhand modpoll installiert (https://www.modbusdriver.com/modpoll.html)

Ich bekomm sogar Werte zurück (Hurra) d.h. das Auslesen funkt grundsätzlich. Aber jetzt stehe ich irgendwie an, ich bekomme irgendwelche Hausnummern zurück, die für mich keinen Sinn ergeben und komm nicht weiter....

wenn ich abfrage mit:
modpoll -1 -b 19200 -s 1 -p none -m rtu -a 1 -r 1 -c 100 /dev/ttyUSB0
(also 1...100. register)
bekomm ich paar Werte zurück (Auszug):

modpoll 3.10 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2021 proconX Pty Ltd
Visit https://www.modbusdriver.com for Modbus libraries and tools.

Protocol configuration: Modbus RTU, FC3
Slave configuration...: address = 1, start reference = 1, count = 100
Communication.........: /dev/ttyUSB0, 19200, 8, 1, none, t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, output (holding) register table

-- Polling slave...
[1]: 17008
[2]: 0
[3]: 17008
[4]: 0
[5]: 0
[6]: 0
[7]: 17244
[8]: 0
[9]: 16672
[10]: 0
[11]: 16448
[12]: 0
[13]: 17096
[14]: 0
[15]: 0
[16]: 0
[17]: 0
[18]: 0
[19]: 0
[20]: 0
[21]: 16256
[22]: 0
[23]: 0
[24]: 0
[25]: 17530
[26]: 0
[27]: 0
[28]: 0
[29]: 16448
[30]: 0
[31]: 0
[32]: 0
[33]: 0
[34]: 0
[35]: 0
[36]: 0
[37]: 17870
[38]: 16384
[39]: 0
[40]: 0
[41]: 17669
[42]: -12288
[43]: 25953
[44]: 29556
[45]: 0

Der este Wert sollte Laut SDM630 Registerbeschreibung die Spannung zwischen L1 und N sein - also irgendwas bei 232,9V laut SDM360 Anzeige....

d.h. die [1]: 17008 muss ich jetzt "irgendwie" konvertieren bzw. richtig definieren, was lt. Hilfe mit dem -t Parameter geht... allerdings muss ich da an Variablentypen angeben, in der SDM630 Protokollbeschreibung find ich nur infos zu Hi und Lo - Byte, deren Zusammenhang mir irgendwie entgeht....

Hat wer bitte einen Tip für mich, wie ich richtig z.b. die Spannung und momentane Leistung an L1 auslesen kann?
(Ich möchte, wenn möglich so wenig externe Bibliotheken wie möglich verwenden und am liebsten in der BASH bleiben, also ohne Umwege über Python, C# etc...)

Vielen Dank!
LG Wolfgang

  •  dkmh
16.2.2022  (#1)
2 Dinge: 
1. Das was du da ausliest sind nicht die aktuellen Messwerte aus den Input registern (3XXXX) sondern die Einstellungsparameter aus den Holding registern (4XXXX)
2. Die Werte sind im IEEE754 float format
der erste wert ist umgerechnet dann z.b: 60 (60min demand period)
Hier ist das genauer beschrieben: https://bg-etech.de/download/manual/SDM630Register1-5.pdf
Du brauchst dich aber da nicht selber darum kümmern, wenn du
"-t 3:float" 
an deinen aufruf anhängst müsstest du die fertigen messwerte bekommen. (offset könnte eventuell noch ein problem sein, aber mal schauen)


1
  •  kraweuschuasta
  •   Gold-Award
16.2.2022  (#2)
Cool, danke, schau mas morgen früh gleich an.

Wie muss ich die input register angeben?
Das hat sich mir trotz Link nicht erschlossen...
Mit Parameter -r 3xxxx ?

Lg

1
  •  Peter2
  •   Silber-Award
16.2.2022  (#3)
Ich habe ebenfalls den sdm630. 
Bei mir ergiebt sich allerdings ein anderes Problem.
Ich lasse mir über modbus2mqtt die Werte direkt in mqtt schicken.
Es werden auch Werte übertragen aber ab Register 3 passen die Werte nicht mehr.
Ich habe sicher keine 0,4V auf Phase 3. Der Zähler ist auch auf 3+1 eingestellt also 3 Phasen und ein Neutralleiter. Muss man das für Modbus noch extra über eines der Holding Register einstellen?
Mfg
Peter

1


  •  kraweuschuasta
  •   Gold-Award
17.2.2022  (#4)
Mahlzeit,
bissl zum Verzweifeln ist das schon... ich hab jetzt mit der Abfrage herumgespielt, allerdings nur halb erfolgreich.

mit -r 3XXXX hab ichs versucht, funkt nicht. Wenn ich den 3er weglasse, bekomme ich Werte... Und "Plötzlich" bekomme ich die input register table, k.A. warum auf Einmal

modpoll -1 -b 19200 -s 1 -p none -m rtu -a 1 -r 0002 -c 4 -t 3:float /dev/ttyUSB0
modpoll 3.10 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2021 proconX Pty Ltd
Visit https://www.modbusdriver.com for Modbus libraries and tools.

Protocol configuration: Modbus RTU, FC4
Slave configuration...: address = 1, start reference = 2, count = 4
Communication.........: /dev/ttyUSB0, 19200, 8, 1, none, t/o 1.00 s, poll rate 1000 ms
Data type.............: 32-bit float, input register table

-- Polling slave...
[2]: 0.000000
[4]: 0.000000
[6]: 0.177734
[8]: 0.000000

die 0.177734 dürften Strom an  L1 sein, das passt mit der Anzeige zusammen.
[6] ist die Registernummer

Wenn ich allerdings Die Spannung an L1 auslesen will - wäre Register 0, bekomme ich einen Fehler:
modpoll -1 -b 19200 -s 1 -p none -m rtu -a 1 -r 0000 -c 1 -t 3:float /dev/ttyUSB0
modpoll: Invalid reference parameter! Try -h for help.

Gegenprobe: Leistung an L1 wäre Register 0C = 12
modpoll -1 -b 19200 -s 1 -p none -m rtu -a 1 -r 0012 -c 1 -t 3:float /dev/ttyUSB0
...
-- Polling slave...
[10]: 0.000000

=> warum bekomme ich [10] zurück, wenn ich -r 0012 mitgebe?

Dumm herumprobiert und 2 dazuaddiert:

modpoll -1 -b 19200 -s 1 -p none -m rtu -a 1 -r 0014 -c 1 -t 3:float /dev/ttyUSB0
bringt: [12]: 42.250000
=> und das sind exakt die 0,42 kWh laut Anzeige

Also der Output ist richtig, sofern meine Vermutung, daß [Start Address HEX] die Registeradresse ist, richtig ist.


2022/20220217900977.png

Gretchenfrage: Wie forder ich dir richtige Registeradresse an, also z.b. U an L1, daß ich auch U an L1 zurückbekomme?? register -r 0000 funkt ja offensichtlich nicht.....
😀

LG und danke
Wolfgang

1
  •  dkmh
17.2.2022  (#5)
-0 noch dazu als Parameter

"-0 First reference is 0 (PDU addressing) instead 1"

Und dann mit "-r 1"

1
  •  OlafD
18.2.2022  (#6)
Hi,

ohne -0 und mit -f hinter 3:float
klappt das lesen der Spannungswerte:
 
modpoll -1 -b 19200 -s 1 -p none -m rtu -a 1 -r 1 -c 7 -t 3:float -f /dev/ttyUSB0
...
[1]: 235.939802
...
Hoff’ das hilft.

1
  •  kraweuschuasta
  •   Gold-Award
19.2.2022  (#7)
Hi

zitat..
OlafD schrieb: ohne -0 und mit -f hinter 3:float

Super vielen Dank, jetzt funkt das auch!!

modpoll -1 -b 19200 -s 1 -p none -m rtu  -a 1 -r 1 -c 1 -t 3:float -f /dev/ttyUSB0
[1]: 233.823608

leicht verständlich ist das für mich ned....🤨

LG Wolfgang


1
  •  kraweuschuasta
  •   Gold-Award
6.3.2022  (#8)
nAbend,

bitte nochamal um Hilfe. Bis dato bekomm ich die richtigen Werte zurück, allerdings nur, wenn das HI- Byte 0 ist.

Für z.B. L1 import kwh hab ich Hi byte 01 Lo Byte 5a

=> Wie muß ich das in die modpoll Anfrage reinmankeln, da habe ich ja nur einen parameter in Dezimal ?

modpoll liefert klarerweise nix zurück, weil ich ja ein "falsches" Register Abfrage....

# total kWh L1 Reg hi byte 01 low byte 5a dec90
modpoll -1 -b 19200 -s 1 -p none -m rtu  -a 1 -r 90 -c 1 -t 3:float  /dev/ttyUSB0
[90]: 0.000000

vielen dank!!!

1
  •  OlafD
7.3.2022  (#9)
Hi,

für 0x00 & 0x00 oder auch Register 30001 bzw.  -r 001:
modpoll -1 -b 19200 -s 1 -p none -m rtu -a 1 -r 1 -c 1 -f -t 3:float /dev/ttyUSB0

für 0x01 & 0x5A oder auch Register 30347 bzw. -r 347:
modpoll -1 -b 19200 -s 1 -p none -m rtu -a 1 -r 347 -c 1 -f -t 3:float /dev/ttyUSB0

alles ohne Umrechnung in dec,
und immer mit -f dazu.

1
  •  kraweuschuasta
  •   Gold-Award
8.3.2022  (#10)
@OlafD 
super danke Du bist mein Held!

1
  •  kraweuschuasta
  •   Gold-Award
31.12.2022  (#11)
nAbend,

wiedermal bitte um Hilfe mit diesem Modbus Sch(/%/&%/%(/(

Neues Gerät: NibeS1255
Neues Problem: ausgelesener Wert stimmen nicht
Alter Mann ders ned kapiert: Kraweuschuasta

hab nach erstem Erfolgreichen Verbinden mit der NIBE gleich Unsinn ausgelesen, Register 11 Gradminuten. Der ausgelesene Wert stimmt sowas von gar nicht mit dem Uplink überein und ich hab kan Schimmer, warum...

lt Registerbeschreibung:

2022/20221231799289.png
Variablengröße 3 und Divisionsfaktor 10

und was zurückkommt:


2022/20221231422367.png

wenn ich die 86 durch Divisionsfaktor 10 dividier, ists immer noch um den Faktor 4 falsch....

was mach ich falsch?
werd noch wahnsinnig....

ajo modpoll Parameter hier
https://www.modbusdriver.com/modpoll.html

Danke & LG
Wolfgang

PS: Guten Rutsch!

1
  •  BungalowImGruen
  •   Bronze-Award
1.1.2023  (#12)
Was sind denn die angrenzenden Modbusregister (10 oder 12)? Passt der Wert vielleicht zu diesen?
Ich glaube, dass ich die Adressen immer um eine Stelle verändern muss (Loxone), um den richtigen Wert zu erhalten. Weiß aber nicht mehr, ob plus oder minus 1.

1
  •  gdfde
  •   Gold-Award
1.1.2023  (#13)

zitat..
kraweuschuasta schrieb: hab nach erstem Erfolgreichen Verbinden mit der NIBE gleich Unsinn ausgelesen, Register 11 Gradminuten. Der ausgelesene Wert stimmt sowas von gar nicht mit dem Uplink überein und ich hab kan Schimmer, warum...

Die Modbus Doku ist bei KNV/Nibe leider wie bei den meisten anderen Gerätschaften der div. Hersteller eine Katastrophe.

Zum Thema, ich hab die GM Heizen bei mir im Register 18 und das funktioniert emoji

2023/20230101810136.png


1
  •  kraweuschuasta
  •   Gold-Award
1.1.2023  (#14)
hi

zitat..
BungalowImGruen schrieb: Was sind denn die angrenzenden Modbusregister (10 oder 12)? Passt der Wert vielleicht zu diesen?
Ich glaube, dass ich die Adressen immer um eine Stelle verändern muss (Loxone), um den richtigen Wert zu erhalten. Weiß aber nicht mehr, ob plus oder minus 1.

Danke für den Tip, hat geholfen. Um 1 dekrementieren muss man...
modpoll -a 1 -m tcp  -t 4 -r 12 -c 1 -1 -o 10 192.168.1.11


zitat..
gdfde schrieb: Die Modbus Doku ist bei KNV/Nibe leider wie bei den meisten anderen Gerätschaften der div. Hersteller eine Katastrophe.

Oh yeah, dieser ganze Modbussch*** ist sowas von unlogisch - zumindest für mich....

Aber was sollt ich sonst in 100ten Stunden machen, wenn ich nicht mit er Heizung herumspielen kann....🤣

LG




1


Beitrag schreiben oder Werbung ausblenden?
Einloggen

 Kostenlos registrieren [Mehr Infos]

Nächstes Thema: Beleuchtung Nische Badewanne