INT32 sagt der Auszug oben....
Ankündigung
Einklappen
Keine Ankündigung bisher.
Gira X1 und Modbus TCP mit Logikbaustein
Einklappen
X
-
Hallo,
also bei dem Int32 komme ich nicht weiter. Hier mal der Link zu den Registern, falls es wen interessiert.
https://www.photovoltaikforum.com/co...finitions-pdf/
Ich frage mehrere Int32 Register ab, bei allen bekomme ich entweder eine 8 oder 9 stellige Zahl. Zb aktuell der Strom auf Phase A: 59834368 ; das ist das Register 32072. Oder Spannung Phase A vom SmartMeter = 151257088 mit Register 37101.
@Daniel: Kannst du bitte mal bei dir ein Int32 Register abfragen? Kommst du mit den Werten klar?
sG
Kommentar
-
Zitat von alramlechner Beitrag anzeigenah ... ok. sorry - hab ich in der tat falsch verstanden
wegen der -43122689: das ist in der tat etwas eigenartig. nach dem es um 32bit register handelt, könnte byte order eine rolle spielen. aber auch wenn ich umdrehe, ergibt das nicht mehr sinn. eine idee wäre noch, die register davor/danach zu prüfen. vielleicht liegt hier ein off-by-one fehler vor.
ein anderer modbus client gibt korrekte werte aus?
Kommentar
-
Hallo, so, es war eine schwere Geburt, aber nun läuft es.
Man muss schon die erste Registeradresse nehmen, also in meinem Fall zb. die 37001, ABER im Baustein muss bei "Register Reihenfolge" auf Big-Endian umgestellt werden.
Werde das nun alles mal so durchtesten und @Alram: Ich melde mich bei dir wegen den Registern!
sg
- Likes 1
Kommentar
-
Hallo Alram,
Danke für den Baustein zum Abfragen des Huawei Wechselrichters. Super.
Du hast angeboten mehrere Register gleichzeitig auszulesen.
Folgende Register würden mich stark interessieren:- Leistung PV-Anlage auf dem Dach in kW: 32064
- Leistung aus dem Kraftwerk (egal ob PV oder Batterie) die ans Haus abgegeben wird in kW: 32080
- Leistung ans Netzt abgegeben in kW (<0 aus Netz beziehen; >0 ans Netz abgeben): 37113
- Batterieladung in kW: 37001
- Heutiger Energieertrag in kWh: 32114
- Gesamtenergieertrag in kWh: 32106
- Temperatur Wechselrichter in C°: 32087
- String 1 Spannung in V: 32016
- String 1 Strom in A: 32017
- String 2 Spannung in V: 32018
- String 2 Strom in A: 32019
- Summe Netztbezug in kWh: 37121
- Summe Netzeinspeisung in kWh: 37119
- Batterieladung in %: 37004
Sag wenn ich ein angepasstest Modul testen darf.
Viele Grüße,
AlexZuletzt geändert von Alzi; 16.03.2023, 07:14.
Kommentar
-
Hallo,
@Alex: Bezüglich Akkustand, Register 37004 passt, Read Holding Register, 16 bit integer, little endian. Dann den Wert durch 10 dividieren und du bist dabei
@Alram: Zu den oben erwähnten Registern wären für mich noch folgende interessant: 32078 peak active power day, 32082 reactive power, 37000 Akku Status, 37015 Akku Tagesenergie geladen, 37017 Akku Tagesenergie entladen, 37022 Akku Temperatur
LG
Peter
- Likes 1
Kommentar
-
hi,
hatte heute abend grad zeit und lust einen baustein zu schreiben.
aber: ihr habt mir die datentypen verschwiegen. bitte schaut mal auf folgenden code:
https://github.com/alramlechner/Comm...Reader.cs#L242
und prüft die datentypen (ist wichtig auch wegen der registerlänge).
gerne könnte ihr auch die Bezeichnungen (sichtbar im GPA) prüfen:
https://github.com/alramlechner/Comm...Reader.cs#L124
sobald das korrigiert ist, kann ich den baustein bauen. vorher wäre es wohl ein glückspiel.
was habt ihr beim generischen baustein eingestellt?
device id 1 ist korrekt?
alle regsiter mit "read holding register" korrekt?
überall auch little endian?
vG Alram
Kommentar
-
Hallo zusammen,
ich hätte 2 offene Fragen. Vielleicht kann mir einer einen Tip geben.
1.) Ich lese die Außentemperatur der Wärmepumpe aus. Funktioniert super. Leider bekomme ich keine normale Anzeige sobald die Außentemperatur unter 0 fällt?
2.) ich lese bei mehreren Adressen die erzeugten KWH aus. Funktioniert super bis auf einen Kanal.. Hier sind die größten Zahlen vorhanden.. Kann es sein dass der Baustein bei der Zahlenlänge begrenzt ist..?
Danke Gruß
Kommentar
-
Zitat von SIMO Beitrag anzeigenLeider bekomme ich keine normale Anzeige sobald die Außentemperatur unter 0 fällt?
Zitat von SIMO Beitrag anzeigenFunktioniert super bis auf einen Kanal.. Hier sind die größten Zahlen vorhanden.
sonst kann nur helfen, in dem du herzeigst
- welche config du im GPA am baustein hast
- den entsprechenden auszug aus dem datenblatt/modbus beschreibung vom hersteller
vG AlramZuletzt geändert von alramlechner; 17.03.2023, 09:27.
- Likes 1
Kommentar
-
Hi,
zu Punkt 2. Ein Beispiel bei dem der Wert richtig kommt Register 1575 hier kommt genau das an was auch am Regler hinterlegt ist. 51767 entspricht 5176,7 passt. Bei Register 1577 kommt 31938 an und sollte 29407,9. das sind alles 32bit Register.
Hab noch die Version 0.0.11 drauf.. ?
GrußYou do not have permission to view this gallery.
This gallery has 3 photos.
Kommentar
-
Zitat von SIMO Beitrag anzeigenBei Register 1577 kommt 31938 an und sollte 29407,9. das sind alles 32bit Register
da ein modbus register aber immer 16bit breit ist, musst du zwei lesen. "Anzahl Register" steht aber auf 1. also liest du nur die Hälfte aus ... trag eine 2 ein. wenn ergebnis nicht plausibel, dann stell noch die byte order um (big endian/little endian).
BTW: stell das für alle 32 bit register um - sobald der wert in diesen die 65535 überschreitet (wie beim 1577), hast du das gleiche problem.
vGZuletzt geändert von alramlechner; 17.03.2023, 15:24.
Kommentar
-
Zitat von alramlechner Beitrag anzeigenhi,
hatte heute abend grad zeit und lust einen baustein zu schreiben.
aber: ihr habt mir die datentypen verschwiegen. bitte schaut mal auf folgenden code:
https://github.com/alramlechner/Comm...Reader.cs#L242
und prüft die datentypen (ist wichtig auch wegen der registerlänge).
gerne könnte ihr auch die Bezeichnungen (sichtbar im GPA) prüfen:
https://github.com/alramlechner/Comm...Reader.cs#L124
sobald das korrigiert ist, kann ich den baustein bauen. vorher wäre es wohl ein glückspiel.
was habt ihr beim generischen baustein eingestellt?
device id 1 ist korrekt?
alle regsiter mit "read holding register" korrekt?
überall auch little endian?
vG Alram
Hallo Alram,
Danke! Ich habe aus gituhb die Liste genommen und ergänzt. Was in der Huawei Dokumentation steht, habe ich unter „Doku“ aufgeführt. „Eingestellt“ bedeutet, was ich in deinem Logikbaustein eingestellt habe und für mich funktioniert. Wenn dahinter Division 10 steht, muss das Ergebnis noch durch zehn geteilt werden. Bei mir ist fast alles auf big-endian eingestellt wobei ich gestehen muss den Unterschied nicht zu kennen und daher auch nichts anderes probiert zu habe. So wie unter „Eingestellt“ gelistet geht es bei mir. Device ID ist immer 1. Alle mit read holdig register.
• currentPVPower, 32064 | Doku: INT32 Signed | Eingestellt: big-endian, INT32
• currentACPower, 32080 | Doku: INT32 Signed | Eingestellt: big-endian, INT32
• currentGridPower, 37113 | Doku: INT32 Signed | Eingestellt: big-endian, INT32
• currentBatteryPower, 37001 | Doku: INT32 Signed | Eingestellt: big-endian, INT32
• todayPVEnergy, 32114 | Doku: INT32 Unsigned | Eingestellt: big-endian, INT32, Division by 100
• totalPVEnergy, 32106 | Doku: INT32 Unsigned | Eingestellt: big-endian, INT32, Division by 100
• inverterTemperature,32087 | Doku: INT16 Signed | big-endian, INT16 Signed, Division by 10
• mppt1Voltage, 32016 | Doku: INT16 Signed | Eingestellt: big-endian, INT16 Signed, Division by 10
• mppt1Current, 32017 | Doku: INT16 Signed | Eingestellt: big-endian, INT16 Signed, Division by 100
• mppt2Voltage, 32018 | Doku: INT16 Signed | Eingestellt: big-endian, INT16 Signed, Division by 10
• mppt2Current, 32019 | Doku: INT16 Signed | Eingestellt: big-endian, INT16 Signed, Division by 100
• totalGridImportedEnergy, 37121 | Doku: INT32 Signed | Eingestellt: big-endian, INT32, Division by 100
• totalGridExportedEnergy, 37119 | Doku: INT32 Signed | Eingestellt: big-endian, INT32, Division by 100
• currentBatterySOC, 37004 | Doku: INT16 Unsigned | Eingestellt: little-endian, INT16, Division by 10
• todaysPeakPVPower.Value, 32078 | Doku: INT32 Signed
• currentReactivePower, 32082 | Doku: INT32 Signed
• currentBatteryStatus, 37000 | Doku: INT16 Unsigned
• todayBatteryChargedEnergy, 37015 | Doku: INT32 Unsigned
• todayBatteryDischargedEnergy, 37017 | Doku: INT32 Unsigned
• batteryTemperature, 37022 | Doku: INT16 Signed
Vielen Dank,
Alex
Kommentar
-
Hallo,
Ich würde die Divisionen nicht direkt in der Abfrage mitintegrieren, sondern nachher per Hand im Logikblatt mittels Divisionsbaustein ergänzen. Hätte den Vorteil, dass es jeder individuell machen kann wie er möchte. Einer möchte zb die Leistung in Watt, der andere in Kilowatt. Wie seht ihr das? Sg Peter
Kommentar
-
Zitat von 1retro Beitrag anzeigenEiner möchte zb die Leistung in Watt, der andere in Kilowatt.
die temperatur 31,5°C wird bspw. durch die zahl 315 im Register dargestellt. diese muss durch 10 dividiert werden damit sie sinn ergibt. das ist einfach dem umstand geschuldet, dass der INT datentyp (Ganzzahl) keine dezimalzahl darstellen kann. um nicht auf die relativ rechenintensiven FLOAT/DOUBLE varianten umsteigen zu müssen, arbeitet man oft mit solchen faktoren.
Alzi: danke - schaut gut aus. hab es einmal eingepflegt. erste Version findest du anbei. bitte um feedback. github wird gleich aktualisiert ...
btw: es wäre sehr ungewöhnlich, wenn die inverter temperatur und battery temperatur unteschiedlich angegeben wären. also einmal in zentel grad, einmal in grad. hab daher div/10 zur battery temp auch eingebaut. bei den unteren registern fehlt mitunter noch etwas eine entsprechende anpassung.
leider hab ich auch feststellen müssen, dass ich im baustein gar kein UINT32 eingebaut habe ... daher sind sind die aktuell auch INT32. das wird aber erst zum problem, wenn
der wert grösser als 2.147.483.647 wird ...
jetzt geht's erstmal auszutesten, ob der baustein überhaupt (stabil) funktioniert ...
vG AliAngehängte Dateien
Kommentar
Kommentar