Ankündigung

Einklappen
Keine Ankündigung bisher.

LBS19001586 ModBus Read GENERIC

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

    #61
    DustinR : Fein, danke!

    Zum Thema Vergleichbarkeit und Gleichzeitigkeit von Werten habe ich mal etwas allgemeine Gedanken hier notiert und und den folgenden Beiträgen konkrete Informationen - vielleicht findest Du es interessant für Deine Frage. Vielleicht hilft Dir (der dort notierte) LBS 19001585 zur Fragestellung.

    Ansonsten sollte der (hinreichend lange) kurzzeitige 1-Impuls an E1 zu einer 1-maligen Abfrage führen - vermute ich. Im Live-View habe ich das öfter so gemacht: mal kurz 1 dann wieder 0.

    Aber am Ende wirst Du immer mit den selben Problem leben müssen: Die Werte sind nicht exakt gleichzeitig bei IST-Werten. Du kannst versuchen, alles auf einen Takt zu bringen (15s, 1min, 5min whatever), aber faktisch wird ein EM immer etwas asynchron zu einem WR oder der Batterie sein. Mir scheint dies für IST ein wenig akademisch auf die letzten Prozent, weil was will ich daraus ziehen (aus den letzten Prozent)? Auch die Anbieter (SMA, etc kochen nur mit Wasser; als Nutzer denkt man nur, die wären ganz genau und viel besser). Das ist die Unschärfe bei IST, Wenn Du die Berechnung auf Intervalle auslegst, wird es besser. Achtung, Nicht alle Geräte liefern saubere Werte (Integrale) in beliebig kleinen Intervallen. Das muss man prüfen, habe ich in den obigen Links aber auch thematisiert.
    Zuletzt geändert von saegefisch; 06.09.2021, 22:10.

    Kommentar


      #62
      Vielen Dank. Das ist wirklich ein richtig gut zusammengefasster Beitrag dazu. :-)

      Mir hat das aber auch schon sehr weitergeholfen, dass ich die LBS nun immer nur über einen kurzen Impuls starte und selbst entscheide, wann das passiert. Die Werte sind dadurch viel genauer.

      Kommentar


        #63
        Hallo,

        ich versuche gerade mit diesen LBS einen Huawei WR auszulesen. Mit dem QModMaster klappt das auch ganz gut. Aber auch dort kommt es nach ein paar Minuten immer zum Timeout. Da hilft dann dort immer nur Disconnect und dann wieder Connect (manchmal auch mehrmals). Folgende Einstellungen hab ich dort getätigt:
        Bild 2.jpg Bild 1.jpg

        Ich hab mal in anderen Foren gelesen das der Huawei WR sich viel Zeit genehmigt zum Antworten und gerne den Takt vorgibt.

        Ob Big oder Little macht beim Ergebnis kein Unterschied, es kommen die 3 Netzspannungen raus (anscheinend mit einer Kommastelle). Leider kommt beim LBS in edomi gefühlt fast immer timeout. Ich hab es aber auch hin und wieder schon geschafft in edomi Antwort zu bekommen:

        Bild 3.jpg
        Meine Einstellungen in Edomi sind:
        Bild 5.jpg
        Bei den 3 Zeitangaben die man in edomi machen kann, hab ich auch schon jede Menge ausprobiert, leider ohne Erfolg. Ist eigentlich die Pausenzeit mit der ScanRate ( in QModMaster) gleichzusetzen und timeout Modbus Lib mit der Response Timeout?

        Ansonsten wäre ich für jeden Tip dankbar.

        Gruß Hendrik

        Kommentar


          #64
          E4 sagt nur, wie lange der LBS zwischen zwei Abfragen wartet, dürfte hier also nicht relevant sein, Je kleiner, desto höher Abfrage-Frequenz, aber auch die System-Last. Lieber erst mal selten, aber stabil, daher lieber größer wählen.

          E11: siehe Hilfe = wie viele Register pro Requests abgefragt werden, mag zwischen 1-10 sinnvoll sein -> geräte-spezifisch, vielleicht gibt es Foren (abseits edomi) zu Deinem Gerät, die eine Info dazu haben. Oder technische Beschreibung deines Geräts

          E12: zeitlicher Abstand zwischen zwei Chunks/Requests, weil die Geräte da ein Päuschen brauchen. Wenn Du anfangs mal nur wenige Register liest, wird dieser Wert nie relevant, weil es nie mehrere Chunks gibt

          E13 reiche ich nur durch an die Library. Ich habe nicht mehr genau paart, wie die definiert war. Vermutlich dürfte es auch durchaus länger sein, z.B. 5s oder vielleicht sogar 10s wenn Dein Geräte etwas zäh liefert und dann langsam runter, bis es instabil wird.

          Ich würde erst mal mit genau einem Register beginnen und schauen, ob ich das verlässlich und stabil bekomme, dann langsam steigern, bis ich auch das erste Mal Chunks bekomme. Dann muss man vielleicht wieder etwas justieren und probieren. Das dürfte sehr geräte-spezifisch sein und daher kann ich Dir dazu nicht konkret helfen.

          Zum Thema disconnect: Wenn Dein Gerät sich gerne trennt, kannst Du den LBS auch vermutlich einfach zyklisch an E1 aktiv kurz auf 0 gehen und dann wieder auf 1. Damit wird der LBS/die Library sich wieder neu verbinden. Wenn Du merkst, das passiert z.B nach 2 min, dann schalte alle 1-1,5min kurz auf 0. Das sollte Last-technisch nicht optimal sein, aber auch kein Problem.
          Oder Du machst das wie ich an A16: Wenn der TS nicht innerhalb von einer Zeit neu gesetzt wird, dann automatisch eine 1 an E1 senden (per watchdog + Telegrammgenerator). Das ist meine Fallback-Lösung-Selbstheilung bei einem disconnect. passiert aber selten bei mir.

          Kommentar


            #65
            Danke schon mal für die Antwort.
            ich habe ja bereits mit Zeiten bis 20s alles mögliche probiert. Auch gelegentliches wieder ein und Ausschalten des LBS. Daten zu bekommen ist eher Zufall beim Huawei WR. Aber ich habe mal in anderen Foren gelesen und da konnte ich folgendes finden:

            WICHTIG!! Nach dem connecten per Mbus TCP MUSS eine Timeout oder Sleep oder whatever von ca. 5-10 Sekunden erfolgen, wenn man sofort nach connecten anfängt Daten zu lesen, fühlt der WR sich da noch nicht bereit dazu.

            Ich vermute das ich hier genau dieses Problem auch habe. Kannst du mir vielleicht sagen welche passenden Befehl ich mal testweise in welche Zeile setzen kann. Leider sind meine Programierkenntnisse sehr begrenzt.

            Kommentar


              #66
              Zitat von Buntbarsch Beitrag anzeigen
              WICHTIG!! Nach dem connecten per Mbus TCP MUSS eine Timeout oder Sleep oder whatever von ca. 5-10 Sekunden erfolgen, wenn man sofort nach connecten anfängt Daten zu lesen, fühlt der WR sich da noch nicht bereit dazu.
              Ah, ein wertvoller Hinweis und mag von zentraler Bedeutung sein für das Gerät. Ich melde mich noch mal dazu, und sage Dir, wo Du mal was testweise im Code etwas einbauen kannst. Wenn das funktioniert müsste ich das als weiteren Parameter anbieten
              Zuletzt geändert von saegefisch; 02.02.2022, 12:08.

              Kommentar


                #67
                Versuch mal hinter dem folgenden 3-zeiligen Kommentar und vor dem try ein usleep(5000000); einzufügen
                Code:
                //
                // Library: Register setzen (einmalig) -> für geänderte Register muss der LBS angehalten und neu gestartet werden
                //
                usleep(5000000);    // TESTWEISE einfügen zB für 5s-Pause
                try {
                und ein paar Zeilen weiter noch mal zwischen Kommentar und while
                Code:
                // =========================================
                // Dauer-Schleife
                // - Hauptschleife (wird beim Beenden oder Neustart von EDOMI verlassen) | logic_getEdomiState() sorgt zudem dafür, dass die Datenbank-Verbindung aufrechterhalten wird!
                // - Zusätzlich auch beenden, wenn E1 auf 0 gesetzt wird
                // =========================================
                usleep(5000000);    // TESTWEISE einfügen zB für 5s-Pause
                while (logic_getEdomiState()==1 && $E[1]['value']==1) {
                Die erste Pause ist vermutlich Mumpiz, weil erst danach die gewünschten Register an die Library gesendet werden, aber wir versuchen mal zunächst beides für eine stabile Verbindung und kannst es dann ja wieder entfernen und wieder versuchen. Sollten die Probleme weiter bestehen, kannst Du die 2. Pause mal von 5 auf 10s verlängern.
                Darüber hinaus kannst Du zusätzlich auch mal versuchen, E4 auf 10000 zu setzen, das ist die Zeit zwischen 2 Abfragen.
                Und bitte zunächst mit nur 1 bis max 3 Registern, damit wir keine Chunks bekommen. Erstmal einfach stabilisieren...

                Ich bin nur vorsichtig optimistisch zu dem obigen Versuch, weil ich vermute, dass der Connect und Read in einem Lib-Befehl stecken. Vielleicht gibt es eine Pausenzeit der Lib, die ich nicht kenne, die man noch übergeben könnte.
                Wir werden sehen, was Deine Tests bringen

                Nachtrag:
                habe gerade gesehen, dass ich E13 auf zwei Übergabe-Paramter der Lib schreibe/übergebe: readTimeoutSec und connectTimeoutSec.
                Damit müsste ein hoher Wert an E13 das heilen, z.b. 10 oder gar 15.
                Vielleicht versuchst Du das zunächst, bevor die obigen Code-Änderungen versuchst
                Zuletzt geändert von saegefisch; 03.02.2022, 00:46.

                Kommentar


                  #68
                  Die Usleep Befehle haben leider nichts gebracht und auch die E13 auf 20s hat keine Wirkung gezeigt. Es liegt anscheinend daran, wie du schon selbst sagst, das read und connect in einem Befehl stecken. In anderen Foren wird oft die Größe timeBetweenTransactionsMillis und reconnectAfterMillis auf mindestens 2 s gesetzt. Aber leider scheint es so das diese Befehle in dieser Lib nicht existieren. Zumindest hab ich nichts gefunden.

                  Kommentar


                    #69
                    Zitat von xsven80x Beitrag anzeigen
                    Hey...

                    puh, das war ne schwere Geburt. Also für die Nachwelt festgehalten: Es funktioniert einwandfrei! ;-)

                    Ziel: Auslesen von SDM-Stromzählern (SDM230 und SDM630, vermutlich auch alle anderen SDM) über Elfin EE11-Converter.


                    LBS_Modbus.jpg
                    Danke an saegefisch für diesen LBS und die Hilfestellungen.

                    Mal wieder habe ich viel gelernt und kann jetzt hier weitermachen! :-)

                    Grüße
                    Sven

                    Hallo Sven,

                    ich habe mir das mal so nachgebaut. Allerdings mit einem Allnet SDS102 als IP Gateway.
                    Bekomme aber immer den Fehler:
                    "​vendor/autoload.php): failed to open stream: No such file or directory"

                    Über das EEM Meter Setting bekomme ich die Werte ausgelesen.

                    Wo hast du den String in "E8" her damit ich das anpassen kann.

                    Danke schonmal

                    Gruß
                    Angehängte Dateien

                    Kommentar


                      #70
                      Zitat von Bleigiesser Beitrag anzeigen
                      ...
                      Wo hast du den String in "E8" her damit ich das anpassen kann.
                      ...
                      Hey...

                      das sind die Register, die ich abfrage, in meinem Fall:

                      0;"Spannung [V]";float;6;"Strom [A]";float;12;"Leistung [W];float;70;"Frequenz [Hz]";float;72;"Geladen Summe [kWh]";float;74;"Entladen Summe [kWh]";float

                      Du findest in der Doku des SDM630 die Registerbeschreibung: hier ab Seite 55.

                      Die Register sind unabhängig vom IP-Umsetzer, sondern SDM-spezifisch.

                      Gruß
                      Sven

                      Kommentar


                        #71
                        Ok,
                        da ich auch eine SDM630 Modbus V2 habe, müsste es ja dann eigentlich gehen.

                        Bekomme aber immer den Fehler vom LBS.
                        Fehlt da noch was, dass ich in deinem Screenshot nicht lesen kann?

                        Gruß
                        Angehängte Dateien

                        Kommentar


                          #72
                          Hab's ans laufen bekommen!
                          Dank' an alle, die hier Vorarbeit geleistet haben!!!!


                          Gruß
                          Zuletzt geändert von Bleigiesser; 06.02.2022, 19:56.

                          Kommentar


                            #73
                            saegefisch : Einen tollen Baustein hat du uns da bereitgestellt und er funktioniert auch an einer e3dc. Vielen Dank dafür. Ich habe noch eine Frage und ein Problem: Kann ich den Baustein auch nur einmal beim Neustart aufrufen? Ich habe keine Einstellung gefunden, wie das funktionieren sollte. Ich würde das nutzen, um aus der E3DC Daten, wie Model oder Seriennummer via Modbus auszulesen.

                            In der Dokumentation steht
                            40004 Hersteller: „HagerEnergy GmbH“ 16 String R

                            Mit E8 =
                            Code:
                            [{ "address" : "40004", "type" : "string_16", "name" : "Hersteller" }]
                            Kommt im Fehlerlog des Bausteins folgenden Meldung:

                            Code:
                            [TR]
                            [TD]2022-03-16 22:50:28[/TD]
                            [TD]728883[/TD]
                            [TD]28020[/TD]
                            [TD]debug [/TD]
                            [TD]LBS19001586 [v0.6]: Modus Read GENERIC EXEC Daemon start initiated (1288)[/TD]
                            [/TR]
                            [TR]
                            [TD]2022-03-16 22:50:28[/TD]
                            [TD]754937[/TD]
                            [TD]28020[/TD]
                            [TD]debug [/TD]
                            [TD]LBS19001586 [v0.6]: Modus Read GENERIC LBS ended (1288)[/TD]
                            [/TR]
                            [TR]
                            [TD]2022-03-16 22:50:28[/TD]
                            [TD]865044[/TD]
                            [TD]32640[/TD]
                            [TD]debug [/TD]
                            [TD]EXE19001586 [v0.6]: FC3 = HOLDING-Methode wird verwendet (siehe ModBus-Doku, meist für 3xxxx) (1288)[/TD]
                            [/TR]
                            [TR]
                            [TD]2022-03-16 22:50:28[/TD]
                            [TD]866755[/TD]
                            [TD]32640[/TD]
                            [TD]debug [/TD]
                            [TD]EXE19001586 [v0.6]: RegisterOffset: konstant = 0 | Typ-Automatik = A (1288)[/TD]
                            [/TR]
                            [TR]
                            [TD]2022-03-16 22:50:28[/TD]
                            [TD]868130[/TD]
                            [TD]32640[/TD]
                            [TD]debug [/TD]
                            [TD]EXE19001586 [v0.6]: Daten wurden als JSON geliefert (1288)[/TD]
                            [/TR]
                            [TR]
                            [TD]2022-03-16 22:50:28[/TD]
                            [TD]869575[/TD]
                            [TD]32640[/TD]
                            [TD]debug [/TD]
                            [TD]EXE19001586 [v0.6]: Typ Offset angewendet (string_16 = -1): 40004 -> 40003 (1288)[/TD]
                            [/TR]
                            [TR]
                            [TD]2022-03-16 22:50:28[/TD]
                            [TD]871041[/TD]
                            [TD]32640[/TD]
                            [TD]debug [/TD]
                            [TD]EXE19001586 [v0.6]: Register: (1288)[/TD]
                            [/TR]
                            [TR]
                            [TD]2022-03-16 22:50:28[/TD]
                            [TD]871176[/TD]
                            [TD]32640[/TD]
                            [TD]debug [/TD]
                            [TD]EXE19001586 [v0.6]: ================ ARRAY/OBJECT START ================[/TD]
                            [/TR]
                            [TR]
                            [TD]2022-03-16 22:50:28[/TD]
                            [TD]871279[/TD]
                            [TD]32640[/TD]
                            [TD]debug [/TD]
                            [TD]EXE19001586 [v0.6]: [{"address":40003,"type":"string_16","name":"Herste ller","uri":"192.168.6.110:502","unitId":1}][/TD]
                            [/TR]
                            [TR]
                            [TD]2022-03-16 22:50:28[/TD]
                            [TD]871403[/TD]
                            [TD]32640[/TD]
                            [TD]debug [/TD]
                            [TD]EXE19001586 [v0.6]: ================ ARRAY/OBJECT END ================[/TD]
                            [/TR]
                            [TR]
                            [TD]2022-03-16 22:50:28[/TD]
                            [TD]875421[/TD]
                            [TD]32640[/TD]
                            [TD]debug [/TD]
                            [TD]EXE19001586 [v0.6]: FEHLER in den Register-Paramtern! empty or unknown type for address given (1288)[/TD]
                            [/TR]
                            [TR]
                            [TD]2022-03-16 22:50:28[/TD]
                            [TD]876796[/TD]
                            [TD]32640[/TD]
                            [TD]debug [/TD]
                            [TD]EXE19001586 [v0.6]: Erlaubte Typen: int16, unit16, int32, uint32, int64, uint64, string_xx (z.B. string_32), float, bit_xx, byte_true/byte_false -> siehe Doku LBS oder Library (1288)[/TD]
                            [/TR]
                            Was mache ich noch falsch?

                            Viele Grüße
                            Matthias

                            Kommentar


                              #74
                              Es scheint mit dem JSON Interpreter noch Probleme zu geben. Mit E8
                              Code:
                              40001;"Magicbyte ? ModBus ID";uint16;40002;"ModBus-Firmware-Version";uint16;40003;"Anzahl unterstützter Register";uint16;40003;"Hersteller";string_32;40019;"Modell";string_32;40035;"Seriennummer";string_16;40051;"Firmware";string_16
                              klappt alles wunderbar

                              Matthias

                              Kommentar


                                #75
                                maque Oh je, habe deine Nachricht damals zwar gelesen, aber dann total vergessen. Sorry. Schaue ich mir noch an…

                                Kommentar

                                Lädt...
                                X