Ankündigung

Einklappen
Keine Ankündigung bisher.

Wechselrichter per Modbus TCP auslesen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    HS/FS Wechselrichter per Modbus TCP auslesen

    Hallo Zusammen,

    ich möchte gerne den Wechselrichter per Modbus TCP auslesen um die aktuellen Werte im QC darstellen zu können.

    Ich habe mir den Simply Modbus TCP Client besorgt und habe die gewünschten Register mit dem PC ausgelesen. In diesem Programm werden schön die Nutzdaten des IP-Telegramms dargestellt.

    Im Gira Homeserver habe ich eine IP-Geräte Abfrage angelegt. Der Homeserver schickt jetzt die selben Nutzdaten an den Wechselrichter wie mein PC. Ich bekomme auch eine Antwort aber nun kommen wir zum eigentlichen Problem.

    Der Wechselrichter gibt Integer und Float Werte aus.

    Integer:
    Wenn ich demHS die zwei Bytes direkt als Wert in ein Kommunikationsobjekt schreiben lasse bekomme ich falsche Werte. Der Wechselrichter sendet wie im Beispielbild Hex 00 5B also eigentlich die Zahl 91. Der HS hat eine andere Byte Reihenfolge und mach daraus Hex 5B 00 also die Zahl 23296. Dies zu lösen war nicht schwierig in dem ich die Bytes separat auslese und mit einer kleinen Logik richtig zusammenrechne.

    Float:
    Hier wird es schon Schwieriger, denn auch hier werden die Bytes nicht passend für den HS übertragen. Ich lese die Bytes also wieder einzeln aus und zerlege diese in der Logik in einzelne Bits um daraus eine Gleitkommazahl zu berechen. Problem dabei ist, dass die Logik nicht gerade klein ist und ich es platztechnisch nicht schaffe die Mantisse komplett auszurechnen.


    Ich habe auch schon verschiedene Wandlerbausteine ausprobiert, bin dabei aber auf keine Lösung gestoßen.
    Denke ich vielleicht einfach zu kompliziert oder gibt es keinen Baustein, welcher eine 4Byte Hexzahl in einen Float-Wert umwandelt?

    Für Vorschläge wäre ich sehr dankbar.

    Viele Grüße
    Markus
    You do not have permission to view this gallery.
    This gallery has 5 photos.

    #2
    Ist ja cool, was du da treibst... du hast nun 32 Bit ... wie setzt du rein mathematisch deinen Float Wert zusammen? ... ich bin gerade nur mit dem iPhone online, da ist mir dein Logikblatt etwas zu unhandlich... was klappt da jetzt genau nicht auf dem Logikblatt?

    Kommentar


      #3
      Zitat von EugenDo Beitrag anzeigen
      wie setzt du rein mathematisch deinen Float Wert zusammen?
      Bilder sagen mehr als 1000 Worte, deswegen habe ich zwei Bilder angefügt.
      Ich berechne erst die Wertigkeit und wenn im Binärsignal die Stelle eine 1 hat, dann wird diese mit eingerechnet ansonsten nicht.

      Zitat von EugenDo Beitrag anzeigen
      was klappt da jetzt genau nicht auf dem Logikblatt?
      Die Berechnung klappt wunderbar nur bekomme ich die Berechnung der letzten 8 Bit der Mantisse nicht mehr auf das Logikblatt. Das kann man aber an sich vernachlässigen. Mich würde nur interressieren ob man das auch anders lösen könnte, z.B. mit einem Logikbaustein der Hex direkt in Float umrechnen kann.

      Ich bin selbst nicht in der Lage einen Logikbaustein zu schreiben, würde aber meine Unterstützung dafür anbieten.

      Viele Grüße
      Markus
      Angehängte Dateien

      Kommentar


        #4
        Zitat von Markus1988 Beitrag anzeigen

        Float:
        Hier wird es schon Schwieriger, denn auch hier werden die Bytes nicht passend für den HS übertragen.
        Wenn es nur um die Reihenfolge der 4 Bytes geht, warum dann nicht
        • mit Baustein 12485 das eingehende 4-Byte-Objekt in 4 separate Bytes vereinzeln (DWORD-to-4Bytes)
        • mit Baustein 12484 die 4 Bytes wieder zu einem DWORD zusammensetzen

        Wenn Du die 4 Ausgänge vom 12485 nicht 1:1 verbindest mit den 4 Eingängen des 12484, sondern den Ausgang 1 mit dem Eingang 4, den Ausgang 2 mit dem Eingang 3, usw, dann erhältst Du ein DWORD in der richtigen Reihenfolge für den HS.

        Kommentar


          #5
          Vielen Dank für den Tipp. Ich hatte zwar nach Wandlerbausteinen gesucht aber diese sind mir aus welchen Gründen auch immer nicht aufgefallen.

          Ich werde das mal ausprobieren.

          Kommentar


            #6
            Das genaue Mapping müsstest Du sicherheitshalber vorher noch klären. Dass die beiden Bytes in einem WORD verdreht sind, hast Du ja schon herausgefunden. Unklar ist nur noch, ob die beiden WORDs im DWORD auch vertauscht sind. Vermutlich ist das so, muss aber nicht sein.

            Screenshot 2019-09-09 at 19.00.20.png

            ​​​​​​​
            Angehängte Dateien

            Kommentar


              #7
              Der Logikbaustein 12484 macht zwar aus 4x1Byte 4Byte aber man kann ihn nicht für eine Gleitkommazahl verwenden.

              Ich habe eine kleine Logik angelegt zum testen.

              12484.JPG
              Wenn ich 4 Byte vorgebe, kommt auch ein Ergebnis raus aber eben nicht die richtige Gleitkommazahl, sondern die Zahl als wenn man die Bytes zu eine 32Bit Integerzahl verrechnen würde.
              QC.JPG

              Float Rechner.JPG

              Das Bitmuster beider Ergebnisse ist identisch. Der Baustein spuckt vermutlich die Zahl 1206984704 aus, diese wird dann einfach in eine Gleitkommazahl übernommen. Eine Gleitkommazahl mit dem selben Bitmuster müsste nämlich 123456 sein.

              Wäre schön gewesen wenn es geklappt hätte.

              Gruß Markus

              Kommentar


                #8
                Zitat von Markus1988 Beitrag anzeigen
                Im Gira Homeserver habe ich eine IP-Geräte Abfrage angelegt. Der Homeserver schickt jetzt die selben Nutzdaten an den Wechselrichter wie mein PC. Ich bekomme auch eine Antwort
                Soweit bin ich leider noch nicht. Die Daten kommen im TCP Client an, aber meine HS-Abfrage gibt keine Antwort. Ich habe auch schon Binärdaten statt Text gesendet: gleiches Ergebnis.
                Hat jemand eine Idee?
                You do not have permission to view this gallery.
                This gallery has 2 photos.

                Kommentar


                  #9
                  Ich vermute mal, dass es am Transaction Identifier liegt. Dieser startet eigentlich bei 1, Du hast 0 eingetragen. Schau dir mal die Nutzdaten hier an. Der ModbusTCPClient startet auch bei 1 und zählt bei jeder Abfrage hoch. In deinem Bild beträgt der Transaction Identifier 7.
                  Du kannst beim Reiter senden im HS Binärdaten auswählen und direkt die Hexadezimalen Zahlen eintragen. 000100000006030377430002

                  Kommentar


                    #10
                    Danke für den Hinweis, ich dachte eigentlich das ich einen höheren Transport-Identifier schon versucht hatte, sicher bin ich mir aber nicht mehr. Komme leider erst wieder nächste Woche an den HS, werde dann berichten.

                    Kommentar


                      #11
                      So, ich hab es jetzt hinbekommen. Grund war wohl die HS-Version 4.9: ich musste den Port 502 auf einen Wert über 1024 setzen und die Verbindung nach bestimmter Anzahl Daten (in dem Fall 13) trennen. Mit dieser Einstellung kommt die erhoffte Antwort. Beide Hinweise gab es hier im Forum.
                      Vielen Dank für die Hilfe.
                      You do not have permission to view this gallery.
                      This gallery has 1 photos.

                      Kommentar


                        #12
                        Hallo Jens,
                        könntest du als Hilfestellung mal Screenshots von den Reitern "Senden" und "Empfangen" machen? Das würde mir beim Verstehen hoffentlich helfen.
                        Danke!
                        Thomas

                        Kommentar


                          #13
                          Zitat von fernsehjens Beitrag anzeigen
                          Grund war wohl die HS-Version 4.9: ich musste den Port 502 auf einen Wert über 1024 setzen und die Verbindung nach bestimmter Anzahl Daten (in dem Fall 13) trennen.
                          Die maximale Anzahl an Daten einzutragen ist ein wichtiger Punkt. Der Ablauf der einzelnen Kommunikationen war bei mir sehr verzögert, da der HS darauf gewartet hat, dass noch ewtas kommt. Mit der Eingabe von 11 oder 13, jenachdem ob man 2Byte oder 4Byte Werte bekommt, geht die Kommunikation deutlich schneller.

                          Gruß Markus

                          Kommentar


                            #14
                            Zitat von SirTom Beitrag anzeigen
                            Hallo Jens,
                            könntest du als Hilfestellung mal Screenshots von den Reitern "Senden" und "Empfangen" machen? Das würde mir beim Verstehen hoffentlich helfen.
                            Danke!
                            Thomas
                            You do not have permission to view this gallery.
                            This gallery has 2 photos.

                            Kommentar


                              #15
                              Danke

                              Kommentar

                              Lädt...
                              X