Janitza PV-UMG604 Modbus TCP auslesen

Diskutiere Janitza PV-UMG604 Modbus TCP auslesen im News, Informationen & Feedback Forum im Bereich ALLGEMEINES; Guten Tag. Ich bin neu hier, und hätte am Anfang schon direkt eine Frage. Und zwar möchte ich beim Janitza PV-UMG604 die Variable 'Float...

  1. #1 Marcel15160, 16.08.2022
    Marcel15160

    Marcel15160

    Dabei seit:
    16.08.2022
    Beiträge:
    4
    Zustimmungen:
    0
    Guten Tag.

    Ich bin neu hier, und hätte am Anfang schon direkt eine Frage. Und zwar möchte ich beim Janitza PV-UMG604 die Variable 'Float _G_P_SUM3' mit der Adresse '19026' auslesen. Ich habe dafür schon das Diagnose Tool der Firma verwendet, und damit erfolgreich die richtigen Werte ausgelsen.

    Ich möchte jetzt aber die Values mit meinem Java (Jlibmodbus) Programm (zum Testen auch gerne mit QModMaster) auslesen.
    Ich verwende dafür Modbus TCP, die Adresse 19026, und 4 register, die ich auslese (in meinen Augen liegt hier irgendwo der Fehler). Auf jeden Fall, ich bekomme ganz andere Werte zurück, und weiß nicht, wie ich diese umrechnen muss, um auf die richtige Anzahl an Watt komme. Und (wie eben schon erwähnt) vielleicht liegt das Problem auch an der Anzahl der Register, oder an einer anderen EInstellung. Der Wert, der unter Float(4Byte) ganz links steht, ist der richtige.

    Ich steh auf jeden fall leider an, und hoffe jmd von euch könnte mir helfen.

    Lg Marcel
    [​IMG]
     
  2. #2 Octavian1977, 16.08.2022
    Octavian1977

    Octavian1977 Moderator

    Dabei seit:
    05.10.2006
    Beiträge:
    38.955
    Zustimmungen:
    3.692
    in dem Janitza Ausdruck ließt Du 4 Byte aus in dem anderen "4 Register"
    Wie viel Byte sind denn die "4 Register" ?

    Das Datenformat ist zudem float und nicht Dec und vermutlich auch "signed" also mit +/-.
     
  3. #3 Octavian1977, 16.08.2022
    Octavian1977

    Octavian1977 Moderator

    Dabei seit:
    05.10.2006
    Beiträge:
    38.955
    Zustimmungen:
    3.692
    Wenn die Software mit "Register" die Modbusadressen meint sollte da "2" drin stehen denn die Float Zahl verteilt sich auf die Adressen 19026 und 19027
     
  4. #4 Marcel15160, 16.08.2022
    Marcel15160

    Marcel15160

    Dabei seit:
    16.08.2022
    Beiträge:
    4
    Zustimmungen:
    0
    Naja, schon. Aber ich hab schon allerlei möglichen Konfigs probiert, mit verschiedenen "number of Registers", mit und ohne "signed"... Und egal was ich mach, die Werte Passen einfach nd. Kann es nd sein, dass ich irgendwie umrechnen muss oder so?

    Und ja, der Datentyp ist anders, aber ich kann hier nur zwischen Dezimal, Binär und Hexadezimal auswählen kann.

    aber danke für dir schnelle Antwort
     
  5. #5 Octavian1977, 16.08.2022
    Octavian1977

    Octavian1977 Moderator

    Dabei seit:
    05.10.2006
    Beiträge:
    38.955
    Zustimmungen:
    3.692
    Was sind denn die Ergebnisse des Auslesens der Software?
    diese 4 Zahlen neben den roten "x"en?
    das kann ja schon nicht passen denn es darf ja nur eine Zahl sein, auch die Anzahl der Stellen passt nicht.
    kann das sein, daß die Weichware für jedes Byte eine eigene Zahl erzeugt?
     
  6. #6 Octavian1977, 16.08.2022
    Octavian1977

    Octavian1977 Moderator

    Dabei seit:
    05.10.2006
    Beiträge:
    38.955
    Zustimmungen:
    3.692
    vielleicht liegt es auch daran:
    "Leider hat auch das Modbus-Protokoll ein paar Defizite. In der Heimautomatisierung und den dabei eingesetzten einfachen Komponenten sind diese jedoch praktisch nicht von Bedeutung. So lässt das Modbus-Protokoll bei seiner Interpretation einigen Spielraum, sodass es Unterschiede in den Implementierungen gibt. Ein Beispiel hierfür ist der Umgang mit Datenwerten höherer Auflösung (mehr als 16 Bit) in Geräten mit analogen Ein- oder Ausgängen. Allein für die Darstellung von Zahlenwerten größer als 65535 gibt es drei Vorgehensweisen: die Interpretation zweier 16-Bit-Wörter als 32-Bit-Ganzzahlenwert, die Darstellung als Gleitkommazahl nach IEEE754 oder die Darstellung im MK10-Format."

    hab ich eben hier gefunden:
    Feldbussysteme unter Linux konfigurieren und einsetzen - Seite 2 von 5
     
  7. #7 Marcel15160, 17.08.2022
    Marcel15160

    Marcel15160

    Dabei seit:
    16.08.2022
    Beiträge:
    4
    Zustimmungen:
    0
    Ja, sind die Zahlen neben roten X sind die Werte. Und ja, es sind vier Zahlen. Aber das liegt daran, das man in Modbus immer nur verschiedenen Register ausliest (hier in dem Fall 19026 + 19027 + 19028 und 19029). Ja, in dem fall sind es 64 bit und nicht 32 (jedes Register ist, so weit ich weiß 16 Bit groß), aber selst Wenn ich nur 2 register auslese, passt der Wert nicht.

    Und es ist ja genau mein Problem, dass ich nicht weiß, wie ich die Werte Interpretieren kann. Denn mein Tool (QModMaster) ließt nur die Integer der Register aus, während das Tool von Janitza die Werte im Hintergrund schon interpretiert.

     
  8. #8 Octavian1977, 17.08.2022
    Octavian1977

    Octavian1977 Moderator

    Dabei seit:
    05.10.2006
    Beiträge:
    38.955
    Zustimmungen:
    3.692
    Natürlich passen die Werte nicht, denn Dein Ausleser rechnet jedes Byte in eine Zahl um und das geht so eben nicht
    Für die Float zahl sind die ganzen 32Bit für die Eine Zahl zuständig wobei eines für das Vorzeichen ist und die anderen für die zahl sowie die Position des Kommas.
    bin für so was jetzt nciht so der Rechner, wikipedia schreibt folgendes zur 32Bit float zahl:
    Berechnung einer IEEE single precision Gleitkommazahl (32-Bit-Gleitkommazahl)
    Hier werden die genauen Rechenschritte vorgestellt, um einen Dezimalbruch in eine binäre Gleitkommazahl vom Typ Single nach IEEE 754 umzuwandeln. Dazu müssen nacheinander die drei Werte (Vorzeichen v {\displaystyle v} [​IMG] (1 bit), Mantisse m {\displaystyle m} [​IMG] und Exponent e {\displaystyle e} [​IMG]) berechnet werden, aus denen sich die Zahl x {\displaystyle x} [​IMG] zusammensetzt:

    x = ( − 1 ) v ⋅ m ⋅ 2 e {\displaystyle x=(-1)^{v}\cdot m\cdot 2^{e}} [​IMG]

    Vorzeichen

    Je nachdem, ob die Zahl positiv oder negativ ist, ist v {\displaystyle v} [​IMG] 0 oder 1: ( − 1 ) 0 = 1 {\displaystyle (-1)^{0}=1} [​IMG] oder ( − 1 ) 1 = − 1 {\displaystyle (-1)^{1}=-1} [​IMG]

    Alle weiteren Berechnungen erfolgen mit dem Betrag der Zahl.

    Exponent

    Als Nächstes wird der Exponent gespeichert. Beim IEEE single-Datentyp sind dafür 8 Bit vorgesehen. Der Exponent muss so gewählt werden, dass die Mantisse einen Wert zwischen 1 und 2 erhält:

    e = ⌊ log 2 ⁡ ( | x | ) ⌋ {\displaystyle e=\left\lfloor \log _{2}(|x|)\right\rfloor } [​IMG]

    Wenn hierbei ein Wert für den Exponenten herauskommt, der kleiner −126 oder größer 127 ist, kann die Zahl mit diesem Datentyp nicht gespeichert werden. Stattdessen wird die Zahl als 0 (Null) oder als „unendlich“ abgespeichert.

    Der Wert für den Exponenten wird jedoch nicht direkt gespeichert, sondern um einen Bias-Wert erhöht, um negative Werte zu vermeiden. Bei IEEE single ist der Bias-Wert 127. Somit werden die Exponentenwerte −126…+127 als sogenannte „Charakteristik“ zwischen 1…254 gespeichert. Die Werte 0 und 255 als Charakteristik sind reserviert für die speziellen Zahlenwerte „Null“, „Unendlich“ und „NaN“.

    Mantisse

    Die Mantisse wird nun in den verbleibenden 23 Bit abgespeichert:

    m = ( | x | 2 e − 1 ) ⋅ 2 23 {\displaystyle m=\left({\frac {|x|}{2^{e}}}-1\right)\cdot 2^{23}} [​IMG]

    Zahlenbeispiel mit der Zahl 11,25

    Zahl = +11,25

    Vorzeichen = + → 0binär

    Exponent = ⌊ log 2 ⁡ ( 11 , 25 ) ⌋ = ⌊ 3 , 49 ⌋ = 3 {\displaystyle {\text{Exponent}}=\left\lfloor \log _{2}(11{,}25)\right\rfloor =\left\lfloor 3{,}49\right\rfloor =3} [​IMG] → 3 + 127 = 130 → 10000010binär

    Mantisse = ( 11 , 25 2 3 − 1 ) ⋅ 2 23 = ( 1,406 25 − 1 ) ⋅ 2 23 = 3407872 {\displaystyle {\text{Mantisse}}=\left({\frac {11{,}25}{2^{3}}}-1\right)\cdot 2^{23}=(1{,}40625-1)\cdot 2^{23}=3407872} [​IMG] → 01101000000000000000000binär

    Damit ergibt sich folgende Gleitkommazahl einfacher Genauigkeit:

    0 10000010 01101000000000000000000

    Umkehrung

    Will man aus einer Gleitkommazahl im Maschinenwort (32 Bit) eine Dezimalzahl errechnen, so kann man dies mit folgender Formel recht schnell erledigen:

    Z = ( − 1 ) V Z ⋅ ( 1 , 0 + M / 2 23 ) ⋅ 2 E − 127 {\displaystyle Z=(-1)^{VZ}\cdot (1{,}0+M/2^{23})\cdot 2^{E-127}} [​IMG]


    Hier mal der Link zu einem Umrechner: IEEE-754 Konverter für Fließkommazahlen

    dazu mußt du deine zwei Zahlen aus den Bytes 19026 und 19027 aber erst in eine Binärzahl umwandeln und dann aneinander reihen.
     
    Marcel15160 gefällt das.
  9. #9 Marcel15160, 17.08.2022
    Marcel15160

    Marcel15160

    Dabei seit:
    16.08.2022
    Beiträge:
    4
    Zustimmungen:
    0
    Danke! musste zwar einen anderen Konverter suchen, aber die Info mit den Binären Zahlen und einem online converter war Gold wert! Danke für deine Mühen!

    Beste Grüße!

    Der Konverter, der bei mir die richtigen Werte ausgegeben hat
    Dezimalzahl ↔ IEEE 754
     
Thema:

Janitza PV-UMG604 Modbus TCP auslesen

Die Seite wird geladen...

Janitza PV-UMG604 Modbus TCP auslesen - Ähnliche Themen

  1. Janitza

    Janitza: Hallo! Was denken Sie über Janitza Energiemessgerät? Funktioniert es für große oder kleine (50Personen/zwei Gebäude) Unternehmen?
  2. Janitza Modbus RTU mit Modbus TCP Gateway verbinden

    Janitza Modbus RTU mit Modbus TCP Gateway verbinden: Hallo, ich habe Probleme mit dem verbinden eines Modbus RTU/TCP Gateways mit einem Janitza UMG 96S und UMG 507. Das UMG507 EP ist selbst ein...