Ankündigung

Einklappen
Keine Ankündigung bisher.

LBS: Abfrage von Modbus TCP via Homeserver

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

    #91
    PLS: Super, dass es bei dir läuft. Da man die Spezial-Optionen nicht alle sehen kann: Was hast du neben "NoKeepAlive" noch gesetzt?

    chris_s: Ich bin mir nicht mehr sicher, ob ich dir folgen kann. Also du möchtest, dass ein Wert von sagen 22 auf 2,2 kommt. Hierzu setzt du den Multiplikator auf 0,1. Wenn dein Wechselrichter mit Scale Factors arbeitet, dann hole dir diesen beim ersten Fetch, rechne es auf den Multiplikator um und setze es auf alle Register, die mit einem Scale Factor arbeiten. (Das macht der Kostal Inverter Baustein für Plenticore etc. z.B. intern so). Die Multiplikation funktioniert bei mir - und hier auch in mehreren Beispielen drin. Ich habe aber aber in der v0.7 im Debug die RAW-Werte ausgeben lassen und du kannst nun einzelne Bausteine aktivieren / dekativieren.

    sti87: Glaub der Test ist immer bis zum Release unter NDA. Da wirst du hier keine Aussage bekommen. Mit mir hatte keiner Kontakt. - Das kann ich sagen, weil nicht unter NDA ;


    Ich hab gerade die v0.7.0 released. Die ist noch nicht im Download-Bereich, will die erstmal hier unter den "Fans" testen lassen. WICHTIG: Ich füge hier einen Input ein. Daher schieben sich alle Register-Inputs um einen. Sorry, aber wir sind noch nicht bei der 1.0 und da nehme ich mir die Freiheit, um die Inputs etwas sauber zu haben.

    Changes:
    • Coil-Register werden richtig gelesen. Das sind 1-Bit register und die dürfen nicht transponiert werden. Das konnte die 0.6 schon, aber die hab ich nie released
    • Debug-Seite wird nun nur aktiviert, wenn der Input auf 1 gesetzt wird. - Sektion wird erst angelegt, wenn die erste Nachricht geschrieben wurde
    • Es gibt nun auch
      Code:
      Sleep500ms
      für die langsamen Modbus-Server
    • Debug-Seite enthält die RAW-Werte. Nicht wundern: wenn Strings kürzer sind als die gelesenen Register kommen nun NULL-Bytes zurück. Sind in der Debug-Seite dann ein komisches Fragezeichen.
    • Refactorings
    Download hier: Github-Release v0.7.0

    Kommentar


      #92
      Hier kleiner Screenshot meines Tests mit den Multiplikatoren.
      Das Register gibt 618 als float32 zurück. Werte der Multiplikatoren:
      • 1: 0.001
      • 5: 10
      • 7: 0.1
      • 8: 1 (default)
      Multiplikatoren.png
      Register 3 und 4 fragen auch das gleiche Register ab, hier uint32. Geht auch (0.001 und 1)

      Kommentar


        #93
        ich teste später mal den neuen Baustein. Vielleicht hat sich was geändert...

        Ich hatte früher feste Fakoren (0,1; 0,01). drin. Sieht man im Reg8 für Lifeteime enrgy.

        wr1.jpg

        Dann habe ich auf dynamische Fakoren umgebaut. Er holt sich den aktuellen SF über den Baustein ab und rechnet diesen um und gibt den im Wechselrichterbaustein als Eingang rein.

        sf.jpg


        Das funktioniert auch soweit. Es werden die Faktoren richtig gezogen und umgerechnet. Allerdings ab Reg5 multipliziert er den Modbuswert nicht mehr. Was reinkommt, geht auch raus.

        Reg5 müsste 6,37
        Reg6 482,1
        Reg7 3070,9

        sein.

        Reg1,2,3 passen. Die Berechnungen des SF gehen auf beide Eingänge. Es werden im Baustein auch die gleichen Werte (0,1,...) gesetzt/verwendet. Dennoch scheint es so, dass in den unteren Reg´s diese nicht verwendet werden. 2 versch. Bausteine bei 2 versch. Wechslrichtern. Das kommt mir einfach bugig vor

        wr.jpg

        Gruß
        Chris
        MfG
        Chris

        Kommentar


          #94
          Hi Chris,
          ich hab an der Stelle nicht viel angepasst (siehe Github). Aber schauen wir mal. Bitte immer Eingänge mit hier posten aus der Live-Diagnose.
          So sieht man ja Eingang vom Register 8. Es liest einen int32 mit nem Multiplikator von 0,001 und da kommt 6735,33 raus. Klingt doch ok, wenn der RAW-Value (siehe Debug mit dem 0.7.0er Baustein) 6725330 ist.

          Es sieht für mich aber so aus, als wenn du die ScaleFactors mit dem nachgelagerten Baustein liesst (da links so viele Verdrahtungen sind) und du diese dann verwendest. Sprich so wäre immer der erste Read falsch. Kann aber täuschen.

          Ansonsten gucken wir mittels Teamviewer zusammen drauf, das kratzt langsam an meinem Stolz! :-P Wenn es aber an der Einbindung liegt wird es was großes aus der Geschenkbox!
          Bei Wunsch einfach PN.
          Zuletzt geändert von SvenB; 03.10.2022, 12:56.

          Kommentar


            #95
            Servus,

            ja Reg8 ist ein schlechtes Beispiel. Da wird der Faktor fix eingetragen (wie früher), da es keinen variablen SF gibt (nur gleich Umrechnung Wh zu kWh).

            Komplettes Live-Bild bereits im Post #84. Da sieht man recht schön bei Reg5. Faktor 0.01. Wird aber 193 ausgegeben. Reg1 Faktor 0.01 wirft 1.93

            Ich lasse den Baustein für die SF als erstes rennen damit die Werte beim fetch der WR Abfrage bereits vorhanden sind

            Im selben Baustein wird ja bei Reg1 der Faktor genommen und verwendet. Aber Reg5 wird der Faktor gezogen aber nicht verwendet.

            Mal sehen was morgen rauskommt wenn die Sonne scheint.

            Was mittleres ist dir aber schon sicher

            Gruß
            Chris
            MfG
            Chris

            Kommentar


              #96
              also auch mit dem neuen Baustein zieht der bei Reg5 den multiplikator nicht.

              Blöde Frage. Wie komme ich jetzt auf die debug Seite?​
              MfG
              Chris

              Kommentar


                #97
                Hi Chris,

                poste dann bitte nochmal Inputs und Outputs aus der Live-Ansicht.
                Debug-Seite ist die Homeserver-Debug-Seite. Dort kommt ein Eintrag (Den du schon kennst), wenn du den Debug-Eingang auf 1 setzt und er eine Abfrage gemacht hat.

                An den Ausgängen ab dem v0.7.0 sieht du (wie vorher auch) die Werte mit angewendetem Multiplikator. Auf der Debug-Seite siehst du die RAW-Werte vom Modbus.

                Bg. Sven

                Kommentar


                  #98
                  Servus,

                  wahrscheinlich eine ganz banale Sache. Aber ich komm einfach nicht drauf

                  deb.jpg

                  2.jpg
                  MfG
                  Chris

                  Kommentar


                    #99
                    Hallo,

                    anbei die Verschaltung der LBS Logik mit der neuen Version V0.7.0, zugeschnitten auf den Wechselrichter von SolarEdge SE10K.
                    Die variablen Skalierungsfaktoren sind mit aufgelegt und werden richtig dargestellt, auch wenn der Skalierungsfaktor im Register sich dynamisch ändert.
                    Ich beobachte es weiter auch mit den Aussetzern auf der Wallbox "OpenWeb"
                    Grüße

                    Screenshot 2022-10-05 105443.jpg Screenshot 2022-10-05 105618.jpg Screenshot 2022-10-05 105814.jpg Screenshot 2022-10-05 105734.jpg

                    Kommentar


                      hier ein kurzes update.
                      Jetzt habe ich doch wider die Unterbrechungen auf der Wallbox Seite

                      Screenshot 2022-10-05 111014.jpg

                      Kommentar


                        Hi PLS,
                        • Ggf. kriegt die Wallbox einen Abbruch zurück und nimmt 0 an. Wenn es an einer besetzten Leitung liegt, kannst du mal ReconnectAfterEachRead ausprobieren. Das beendet sofort die Verbindung und baut sie wieder auf beim nächsten Request. Kann aber auch die Load auf dem WR etwas erhöhen, da du für jeden Request einen TCP-Handshake machst. Aber gerade wenn du alle 0,5s einen Wert liesst, hält er lange eine WR-Verbindung und wenn der nur eine unterstützt ....
                        • Du multiplizierst es manuell nach den Ausgängen. Das geht bei Chris natürlich auch. Was er macht: er errechnen aus X^Y den Multiplikator wie z.B. 1000 oder 0.001 und setzt diesen dann auf die Multiplikator-Eingänge. Du müsstest dazu Reg2 vor Reg1 abfragen (tauschen) und dann den Output auf den Multiplikator von Reg2 geben. Dann sparst du dir den manuellen Multiplikations-Schritt.
                          Ist bei dir aber nicht so schlimm, ist ja nur ein zusätzlicher Baustein. Wenn man hingegen >4 Werte alle mit ScaleFactors umrechnen will, sind die Multiplikator-Eingänge am Baustein Gold wert.
                        Bg. Sven

                        Kommentar


                          Zitat von SvenB Beitrag anzeigen
                          Was er macht: er errechnen aus X^Y den Multiplikator wie z.B. 1000 oder 0.001 und setzt diesen dann auf die Multiplikator-Eingänge
                          Ja, das ist richtig. Das kann man aber nur dann machen, wenn sich der Skalierungsfaktor nicht verändert. Ich habe geschrieben, dass er dynamisch übergeben wird! Er ist nicht ständig fix.
                          Deswegen war ich gebunden, die Auswertung erst nach der Schnittstelle durchzuführen.

                          Zitat von SvenB Beitrag anzeigen
                          ReconnectAfterEachRead ausprobieren
                          Es wird aber nur ein Register übertragen, ich brauche aber mindestens zwei Register. Der zweite ist der Sklaierensfaktor.
                          Somit müsste man eine weitere Instanz von LBS erzeugen, ist doch so richtig, was ich schreibe?​

                          Screenshot 2022-10-05 124333.jpg
                          Angehängte Dateien

                          Kommentar


                            Hi PLS,

                            doch, der Baustein liest den Wert bei jeder Berechnung ein. Daher kann sich der ScaleFactor auch ändern, wenn dazwischen Sleeps sind. - Also Reg1 kann den Wert berechnen und dann für Reg2 den Multiplikator setzen. Bin aber bei dir: Wenn man nicht aufpasst, führt das zu RaceConditions, wenn man z.B. ohne einen Sleep arbeitet. Würde es an deiner Stelle so lassen.

                            ReconnectAfterEachRead: Wenn ich es richtig sehe liest du alle 15s deine 5 Register aus. Zwischen jedem Register wartest du 0,5s. Sprich die Verbindung bleibt etwa 2,5s auf, da er sie zu Beginn aufbaut und erst nach dem letzten Register abbaut. Wenn dein WR nur eine Verbindung unterstützt, liesst er dann ggf. Blödsinn auf deiner Wallbox. Mit der SpezialOption "ReconnectAfterEachRead" schließt er direkt nach dem Lesen von einem Register die Verbindung wieder, wartet 0,5s und baut sie dann wieder auf.

                            So in der Theorie. Ich hab gerade gesehen, dass ich IN dem Block warte. Gut, dann baue ich das mal für die nächste Version um :-)

                            Kommentar


                              Hallo Sven,
                              anbei die Ergebnisse mit erweiterten Option
                              Zitat von SvenB Beitrag anzeigen
                              ReconnectAfterEachRead
                              Die Aussetzer kommen sporadisch!
                              Wechselrichter Model "SE10K-RWS48BEN4"

                              Screenshot 2022-10-07 100002.jpg Screenshot 2022-10-07 100154.jpg Screenshot 2022-10-07 102020.jpg
                              Zuletzt geändert von PLS; 07.10.2022, 09:39.

                              Kommentar


                                momentan ist wider die Situation das alles ohne Aussetzer durchläuft,
                                ohne vorher was verändert zu haben?


                                Screenshot 2022-10-07 124941.jpgScreenshot 2022-10-07 125555.jpg
                                Zuletzt geändert von PLS; 07.10.2022, 11:57.

                                Kommentar

                                Lädt...
                                X