Ankündigung

Einklappen
Keine Ankündigung bisher.

LBS: 19001030: Modbus TCP Master Read

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

    #91
    Hm, ich glaube ich muss bei dir aufgeben...
    Bei mir läuft der LBS sehr zuverlässig im Sekundentakt.
    Da es bei dir ja nicht immer gleich ist sondern manchmal klappt und manchmal nicht würde ich jetzt auf deinen Modbus Slave tippen.
    Wieß leider auch nicht wie ich es sonst noch debuggen soll.
    Sorry.
    Gruß
    Michael

    Kommentar


      #92
      Passt schon

      Aber ich glaube nicht das es an meinem Slave liegt. Wie gesagt habe ich den QModMaster schon über Stunden in Sekundentakt laufen lassen ohne einen einzigen Error. Auch mit Wireshark konnte ich keine Auffälligkeiten sehen.

      Trotzdem vielen Dank

      Kommentar


        #93
        Hallo! Funktioniert dieses LBS auch mit Fronius Symo Wechselrichtern? Hat damit jemand einen laufen? Wie ist das mit diesen Sunspec? ;Muss man da Werte umrechnen? Hat jemand eventuell ein Beispiel oder einen Programmauszug für mich?
        THX ganz lieb

        Kommentar


          #94
          Naja, wenn es ModBus TCP ist und du die Register kennst spricht nichts dagegen.
          Gruß
          Michael

          Kommentar


            #95
            Hallo Michael,

            erst einmal lieben Dank für Deinen LBS. Nun wollte ich für meine SMA-Anlage auch mal testen, ob ich ModBus-Daten grundsätzlich ermitteln kann. Mit dem kleinen Helfer-PHP aus den Anfangstagen dieses Threats bekomme ich mit diesen Werten (IP eines SMA-Wechselrichters):
            Code:
                $modbus = new ModbusMaster("192.168.20.62", "TCP");
            [...]
                $recData = $modbus->readMultipleRegisters(3, 30051, 2);
            diese Ergebnisse:
            Code:
                [0] => 0
                [1] => 0
                [2] => 31
                [3] => 0
            Laut Doku von SMA (PDF in ZIP) und auch einer SMA-Support-Seite und anderen Quellen, sollte "30051" mit Länge 2 aber "0,0,31,65" liefern, dass umgerechnet dem Wert "8001" entsprechen soll und laut SMA Doku für "Solar-Wechselrichter" steht.\
            Nur: Die dafür erwartetet "65" in [3] wird mir nicht geliefert. Und selbst mit einem manuell in das array[3] eingetragenen "65" liefert mir "bytes2signedInt" nicht den erwarteten Wert "0, 8001".

            Zwischenfazit: Ich kann ModBus aus meinen SMA-Geräten technisch auslesen, das ist auf jeden Fall schon mal ganz prima!
            Aber mir scheint etwas zu fehlen im Resultat. hx5 : Hast Du das Thema auch gehabt mit Deinem SMA-Gerät? Was liefert das Helfer-PHP mit "$modbus->readMultipleRegisters(3, 30051, 2);" bei Dir mit "print_r($recData);" für die Ausgabe? Hast Du die 65 drin?

            Mit dem LBS bekomme ich im Log keine Fehler mehr, aber auch keine Ausgabewert. Aber ich vermute, ich muss erst das Thema ganz "roh" mit Hilfe des Helfer-PHP lösen, dann an den LBS gehen...

            Danke und viele Grüße,
            Carsten

            Kommentar


              #96
              Also 2 Sache über die ich gestolpert bin sind zum einen die Endianess des Systems also die Bytereihnfolge und die Registeraddresse um +-1 verschieben...
              Bei mir (E3DC) haben die Registeraddressen auch nicht immer gepasst.

              Erschwerend kommt hinzu das die PHPModbus lib irgendwie nicht so toll ist...
              Ich trage mich aktuel mit dem Gedanken einen "primitiven" Modbus client direkt im LBS zu implementieren.
              Hab das aktuell für meine Lüftung am laufen und es scheint eigendlich kein Hexenwerk zu sein.

              Vielleicht mal Feedback geben ob das von interesse ist und wer (außer mir ) diesen LBS hier noch nutzt.
              Gruß
              Michael

              Kommentar


                #97
                Der Aufruf mit 30050 und 30052 ergab stets Fehler, daher scheinen die Angaben aus der SMA-Doku schon zu passen. Auch eine Länge von 3 führte zu einem Fehler. Daher bleibt das ausbleiben des 4. Werts druchaus gerade ein Rätsel für mich.

                Wegen Interesse: Auf jeden Fall. Denn als Autor des LBA 19000110 sieht die Lage derzeit so aus: Damit wollte ich dauerhaft mir Daten aus dem WebPortal lesen in edomi ablegen für Diagramme, etc. Das hat auch lange produktiv bei mir funktioniert. Leider Hat SMA (zumidnest sieht es für mich so aus) die Anzahl der täglichen Zugriffe Zug um Zug reduziert und/oder die Dauer, in der das Abholen ununterbrochen funktioniert. Selbst wenn ich auf 5-minütlich gehe, hört der Nutzen des LBS Nachmittag soder frühen Abend auf - da die Quelle bis 0:00 Uhr zu macht. Daher scheint mir derzeit mein LBS für das Sunny Portal nur noch zweckdienlich für gelegentliche (und dann aber auch in sehr hoher Frequenz möglichen) Abholung, wenn man auf der entsprechenden Visu-Seite ist.

                Lange Rede, kurzer Sinn: MIt ModBus kann ich endlich and die Werte meiner SMA-Anlage ohne die SMA-Cloud und ohne, dass sie mein Haus verlassen. Ich habe daher großes Interesse an einer ModBus-Lösung! Damit kann ich mir meine Datenbasis für Diegramme bauen, die ich möchte.
                Dies gilt vermutlich für die meisten PV-Betreiber, mindestens von SMA. Da ich generische Lösung immer wunderbar finde: Gerne, ich unterstütze auch mit Wissen und Test.

                Viele Grüße,
                Carsten

                Kommentar


                  #98
                  Neue Infos nach ein wenig Suche zum Thema: Für SMA scheint man besser eine andere ModBus-Bibilothek zu nutzen (Zitat; siehe Link: "SMA uses a different endianess as usual. Also the recv()-Routine needed to be modified.").
                  Ich habe mir jetzt einfach mal unter /usr/local/edomi/main/include/php jeweils einen Ordner modbus mit der Bibliothek von Dir und einen Ordner modbus_sma aus dieser GitHub-Quelle (bzw. dort verlinkt) parallel abgelegt. Wenn ich im Test-PHP die an SMA angepasste Bibliothek nehme, kommt mein fehlende "65" (s.o.) wunderbar.

                  Es wäre daher für einen generischen ModBus-LBS in einer bunten Welt von ModBus-Interpretationen von Herstellern sicher zweckdienlich, wenn man x ModBus-"Geschmacksrichtungen" parallel ablegen kann und im LBS den jeweils passenden (ganzen) Pfad oder einfacher vielleicht nur das Unterverzeichnis der gewünschten Bibliothek wählen kann.

                  Man muss manches Rad ja nicht noch einmal erfinden, wenn andere bereits eine Erfahrung machten und daraus eine Bibliothek strickten...

                  Kommentar


                    #99
                    Die Endianess kannst du auch in meinem LBS schon umstellen, du must nur die Variable in Baustein umstellen.
                    Ich hab dafür leider einen Eingang genommen da das normalerweise nicht ständig geändert werden muss.
                    Hab ich vielleicht auch vergessen in die Hilfe zu schreiben

                    von PHPModbus bin ich generel abgekommen da diese Lib leider pro Request eine Connection aufbaut und das zumindest bei mir abundzu irgendetwas aus dem tritt bringt.
                    Da Modbus eigentlich ziemlich simpel ist werd ich es wohl selber bauen.

                    Da schwierigeste ist sowieso die Konvertierung der Datentypen und die sollte schon recht zuverlässig klappen.
                    Gruß
                    Michael

                    Kommentar


                      mit endianess = 1 fehlte mir mit Deiner Bibliothek dennoch die "65", es muss da also vermutlich noch mehr Anpassungen in den Bibliotheken geben.
                      Habe das nicht weiter erforscht, sondern jetzt einfach mal so hingenommen, dass man vielleicht verschiedene Bibliotheken braucht... Ist ja auch nur eine Eingang mehr im LBS und bringt hohe Flexibilität für Hersteller-Eigenheiten. Aber was eigenes ...naja...da hat man halt was eigenes...so ganz nach Loriot...

                      Hast Du denn schon bei Dir intern eine neue Version des LBS ohne Bibliothek und mit dauerhaftem connect?

                      Nachtrag: Ein Brainstorming zum Thema (mag also Unsinn dabei sein...) - und bitte nicht falsch verstehen, ist keine Kritik am bestehenden Baustein...nur eine Ideensammlung:
                      1.) Ist es eigentlich schonender, statt 5x eine Adresse mit kurzer Länge zu lesen, lieber 1x den gesamten Bereich lang zu lesen und sich dann die relevanten Teile heraus zu schneiden? Man müsste nur die größe und kleinste Adresse (+ Länge der größten Adresse) als Intervall nehmen und würde damit nur 1x lesen für alle Adressen.
                      2.) Auf der oben verlinkten GitHub-Seite finde ich den Ansatz ganz chamant, pro Gerät eine CSV mit den Beschreibungstext, Einheit und Format zu haben. Dann braucht man beim Aufruf nur noch die Liste der Adressen und den Pfad zur richtigen Datei und mehr nicht. Ich habe z.B. drei verschiedenen SMA-Geräte, die jeweils von SMA eine unterschiedliche CSV brauchen (die SMA liefert oder man sich selber bastelt). Das ganze könnte ja auch optional sein; ohne Datei müsste man weiterhin die Formate angeben. Andere Hersteller liefern ja sicher auch ähnliche Infos. Die kämen halt in die spezifischen Ordner, wo ggf. auch die spezifischen Bibliotheken liegen.
                      3.) Gerade mit einer Datei wäre es vielleicht noch generischer, wenn man statt 5 festen Adressen eine Liste von x Adressen (komma-getrennt) übergeben würde und der LBS liefert dann ein JSON zurück als Ausgabe. Dahinter kann man dann wunderbar aus dem JSON die Daten in KOs extrahieren. Oder ist das unnötig aufwändig im Logik-Editor und die direkte Aufbereitung (wie derzeit) ist sinnvoller?
                      Zuletzt geändert von saegefisch; 19.01.2018, 18:16.

                      Kommentar


                        Also im Moment ist es ein Schrödinger LBS
                        Er existiert zum groß Teil in meinem Kopf und zum kleinen Teil in einem anderen LBS denn ich gerade baue...

                        Zitat von saegefisch Beitrag anzeigen
                        1.) Ist es eigentlich schonender, statt 5x eine Adresse mit kurzer Länge zu lesen, lieber 1x den gesamten Bereich lang zu lesen und sich dann die relevanten Teile heraus zu schneiden? Man müsste nur die größe und kleinste Adresse (+ Länge der größten Adresse) als Intervall nehmen und würde damit nur 1x lesen für alle Adressen.
                        Das halte ich für keine gute Idee, da das zwar in der Theorie so gehen sollet aber in der Praxis eben nicht. (Hast du oben ja selbst schon gemetkt als du ein Register zu "kurz" gelesen hast. Heute werden Register Addresse un Länge eher als Synonym für eine Variable genutzt und so sollte man Sie auch benutzten.
                        Allerdings möchte ich eben die Lage etwas entspannen in dem ich nur eine Verbindung aufbaue und diese dann immer weiter benutze.

                        Zitat von saegefisch Beitrag anzeigen
                        2.) Auf der oben verlinkten GitHub-Seite finde ich den Ansatz ganz chamant, pro Gerät eine CSV mit den Beschreibungstext, Einheit und Format zu haben. Dann braucht man beim Aufruf nur noch die Liste der Adressen und den Pfad zur richtigen Datei und mehr nicht. Ich habe z.B. drei verschiedenen SMA-Geräte, die jeweils von SMA eine unterschiedliche CSV brauchen (die SMA liefert oder man sich selber bastelt). Das ganze könnte ja auch optional sein; ohne Datei müsste man weiterhin die Formate angeben. Andere Hersteller liefern ja sicher auch ähnliche Infos. Die kämen halt in die spezifischen Ordner, wo ggf. auch die spezifischen Bibliotheken liegen.
                        Meine Gedanken gehen in eine ähnlich Richtung (der LBS hier war mein Erstlingswerk und heute würde ich einige Sachen anders machen...).
                        Allerdings nicht per CSV sonder eventuel als String Tuple pro Eingang oder JSON Konstrukt.

                        Zitat von saegefisch Beitrag anzeigen
                        3.) Gerade mit einer Datei wäre es vielleicht noch generischer, wenn man statt 5 festen Adressen eine Liste von x Adressen (komma-getrennt) übergeben würde und der LBS liefert dann ein JSON zurück als Ausgabe. Dahinter kann man dann wunderbar aus dem JSON die Daten in KOs extrahieren. Oder ist das unnötig aufwändig im Logik-Editor und die direkte Aufbereitung (wie derzeit) ist sinnvoller?
                        Das ist ziemlich genau auch was ich mir gedacht habe.

                        Einen Punkt den man auch noch beachten muss ist ob das Gerät "ModBus TCP" oder "ModBus RTU over TCP" spricht, ist leider ein kleiner Unterschied.
                        Ersters ist normalerweise bei Geräten die schon eine Ethernetschnittstelle für ModBus haben letzteres für ältere Geräte die "nur" RS484 sprechen und über einen Wandler auf TCP gewandelt werden.
                        Gruß
                        Michael

                        Kommentar


                          Da wir ja offensichtlich in ähnliche Richtung denken... und ähnlich weit sind...
                          Zitat von gulp2k Beitrag anzeigen
                          Meine Gedanken gehen in eine ähnlich Richtung (der LBS hier war mein Erstlingswerk und heute würde ich einige Sachen anders machen...).
                          Allerdings nicht per CSV sonder eventuel als String Tuple pro Eingang oder JSON Konstrukt.
                          String-Tuple für die Adressen finde ich gut. Dann optional entweder den Pfad zu einer CSV (die zur Adresse Beschreibungstext, Einheit, Format und Umrechnung liefert) oder in einem anderen Eingang als String-Tupel die entsprechenden Parameter in der Reihenfolge der zuvor angegebenen Adressen. Dann hat man beide Optionen.

                          Ausgabe als JSON scheint mir wunderbar universell und gut nutzbar, ob mit 1, 5 oder 15 Werten.

                          Kommentar


                            Hi.

                            Has anyone any suggestion for cheap hardware to use with this LBS?

                            Kommentar


                              hardware for what? energy measuring or modbusRTU to modbusTCP converter, temperatures....
                              What type of application do you mean.
                              I use this LBS for getting values from UPS Systems for example.

                              Kommentar


                                Zitat von johannes2912 Beitrag anzeigen
                                hardware for what? energy measuring or modbusRTU to modbusTCP converter, temperatures....
                                What type of application do you mean.
                                I use this LBS for getting values from UPS Systems for example.
                                Sorry, I mean hardware for converting from modbusRTU to use with this LBS in Edomi.

                                I want to use it with a Systemair ventilation system to get temperatures, fan speeds, etc.
                                ​​

                                Kommentar

                                Lädt...
                                X