Ankündigung

Einklappen
Keine Ankündigung bisher.

Einbindung von Modbus TCP

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

    Zitat von Sipple Beitrag anzeigen
    Ist ja erstmal egal, welches Gerät das ist. Wenn Simply Modbus wirklich 100%ig sicher immer die richtigen Werte liefert, dann hast du natürlich recht, dann kann es das Gerät nicht sein.
    Bisher habe ich das immer so beobachtet.
    Ab einem bestimmten Zeitpunkt vertauscht modbus_tcp plötzlich die Werte.
    Frag ich im Anschluss per Simply Modbus ab, kommen die Werte richtig zurück…

    Kommentar


      Zitat von fuppy Beitrag anzeigen
      Frag ich im Anschluss per Simply Modbus ab, kommen die Werte richtig zurück…
      und mit dem plugin erst wieder nach einem Neustart von SH?

      Kommentar


        Zitat von ivande Beitrag anzeigen
        und mit dem plugin erst wieder nach einem Neustart von SH?
        Korrekt.
        Was ich aber auch mal probieren werde ist, den RS485 to ETH Converter neu zu starten.
        Bin mal gespannt, was dabei dann raus kommt.

        Kommentar


          ivande
          Ein weiteres Update von mir:

          Code:
          2023-03-04  08:47:33 INFO     plugins.modbus_tcp  connected to ModbusTcpClient(192.168.0.181:502)
          2023-03-04  08:47:33 DEBUG    plugins.modbus_tcp  read InputRegister.72.1 (address.slaveUnit) regCount:2
          2023-03-04  08:47:33 DEBUG    plugins.modbus_tcp  read InputRegister.72.1 (address.slaveUnit) regCount:2 registers:0x43ba 0x874c
          2023-03-04  08:47:33 DEBUG    plugins.modbus_tcp  value readed: 373.0570068359375 type: <class 'float'>
          2023-03-04  08:47:33 DEBUG    plugins.modbus_tcp  read InputRegister.74.1 (address.slaveUnit) regCount:2
          2023-03-04  08:47:33 DEBUG    plugins.modbus_tcp  read InputRegister.74.1 (address.slaveUnit) regCount:2 registers:0x4385 0x17ae
          2023-03-04  08:47:33 DEBUG    plugins.modbus_tcp  value readed: 266.18499755859375 type: <class 'float'>
          2023-03-04  08:47:33 DEBUG    plugins.modbus_tcp  read InputRegister.52.1 (address.slaveUnit) regCount:2
          2023-03-04  08:47:33 DEBUG    plugins.modbus_tcp  read InputRegister.52.1 (address.slaveUnit) regCount:2 registers:0x43dd 0x1ea3
          2023-03-04  08:47:33 DEBUG    plugins.modbus_tcp  value readed: 442.2393493652344 type: <class 'float'>
          2023-03-04  08:47:33 DEBUG    plugins.modbus_tcp  poll_device: 3 register readed requed-time: 0:00:00.224361
          2023-03-04  08:48:03 INFO     plugins.modbus_tcp  connected to ModbusTcpClient(192.168.0.181:502)
          2023-03-04  08:48:03 DEBUG    plugins.modbus_tcp  read InputRegister.72.1 (address.slaveUnit) regCount:2
          2023-03-04  08:48:03 ERROR    plugins.modbus_tcp  count of read registers is incorrect regCount:2 len(result.registers):62
          2023-03-04  08:48:03 DEBUG    plugins.modbus_tcp  value readed: None type: <class 'NoneType'>
          2023-03-04  08:48:03 DEBUG    plugins.modbus_tcp  read InputRegister.74.1 (address.slaveUnit) regCount:2
          2023-03-04  08:48:03 DEBUG    plugins.modbus_tcp  read InputRegister.74.1 (address.slaveUnit) regCount:2 registers:0x43ba 0x87f0
          2023-03-04  08:48:03 DEBUG    plugins.modbus_tcp  value readed: 373.06201171875 type: <class 'float'>
          2023-03-04  08:48:03 DEBUG    plugins.modbus_tcp  read InputRegister.52.1 (address.slaveUnit) regCount:2
          2023-03-04  08:48:03 DEBUG    plugins.modbus_tcp  read InputRegister.52.1 (address.slaveUnit) regCount:2 registers:0x4385 0x17ae
          2023-03-04  08:48:03 DEBUG    plugins.modbus_tcp  value readed: 266.18499755859375 type: <class 'float'>
          2023-03-04  08:48:03 DEBUG    plugins.modbus_tcp  poll_device: 2 register readed requed-time: 0:00:00.238538
          2023-03-04  08:48:34 INFO     plugins.modbus_tcp  connected to ModbusTcpClient(192.168.0.181:502)
          2023-03-04  08:48:34 DEBUG    plugins.modbus_tcp  read InputRegister.72.1 (address.slaveUnit) regCount:2
          2023-03-04  08:48:34 DEBUG    plugins.modbus_tcp  read InputRegister.72.1 (address.slaveUnit) regCount:2 registers:0x43e6 0xdfa
          2023-03-04  08:48:34 DEBUG    plugins.modbus_tcp  value readed: 460.10919189453125 type: <class 'float'>
          2023-03-04  08:48:34 DEBUG    plugins.modbus_tcp  read InputRegister.74.1 (address.slaveUnit) regCount:2
          2023-03-04  08:48:34 DEBUG    plugins.modbus_tcp  read InputRegister.74.1 (address.slaveUnit) regCount:2 registers:0x43ba 0x8893
          2023-03-04  08:48:34 DEBUG    plugins.modbus_tcp  value readed: 373.0669860839844 type: <class 'float'>
          2023-03-04  08:48:34 DEBUG    plugins.modbus_tcp  read InputRegister.52.1 (address.slaveUnit) regCount:2
          2023-03-04  08:48:34 DEBUG    plugins.modbus_tcp  read InputRegister.52.1 (address.slaveUnit) regCount:2 registers:0x4385 0x17ae
          2023-03-04  08:48:34 DEBUG    plugins.modbus_tcp  value readed: 266.18499755859375 type: <class 'float'>
          2023-03-04  08:48:34 DEBUG    plugins.modbus_tcp  poll_device: 3 register readed requed-time: 0:00:00.164241​
          Das Plugin hat den Fehler bemerkt und auch abgebrochen. Jedoch sind alle darauffolgenden Abfragen leider wieder falsch...

          Ich hab dann wie angekündigt mal den RS485 to ETH Converter neu gestartet. Der erste Versuch scheitere dann bzw. es wurden wieder falsche Werte gelesen:

          Code:
          2023-03-04  12:51:43 INFO     plugins.modbus_tcp  connected to ModbusTcpClient(192.168.0.181:502)
          2023-03-04  12:51:43 DEBUG    plugins.modbus_tcp  read InputRegister.72.1 (address.slaveUnit) regCount:2
          2023-03-04  12:51:43 DEBUG    plugins.modbus_tcp  read InputRegister.72.1 (address.slaveUnit) regCount:2 registers:0x4500 0x253e
          2023-03-04  12:51:43 DEBUG    plugins.modbus_tcp  value readed: 2050.32763671875 type: <class 'float'>
          2023-03-04  12:51:43 DEBUG    plugins.modbus_tcp  read InputRegister.74.1 (address.slaveUnit) regCount:2
          2023-03-04  12:51:43 ERROR    plugins.modbus_tcp  read error: Modbus Error: [Input/Output] [Errno 32] Broken pipe InputRegister.74.1 (address.slaveUnit) regCount:2
          2023-03-04  12:51:43 DEBUG    plugins.modbus_tcp  value readed: None type: <class 'NoneType'>
          2023-03-04  12:51:43 DEBUG    plugins.modbus_tcp  read InputRegister.52.1 (address.slaveUnit) regCount:2
          2023-03-04  12:51:46 DEBUG    plugins.modbus_tcp  read InputRegister.52.1 (address.slaveUnit) regCount:2 registers:0x44f1 0x8f6b
          2023-03-04  12:51:46 DEBUG    plugins.modbus_tcp  value readed: 1932.4818115234375 type: <class 'float'>
          2023-03-04  12:51:46 DEBUG    plugins.modbus_tcp  poll_device: 2 register readed requed-time: 0:00:03.057195​
          Allerdings beim zweiten Versuch klappte es dann wieder:

          Code:
          2023-03-04  12:52:14 INFO     plugins.modbus_tcp  connected to ModbusTcpClient(192.168.0.181:502)
          2023-03-04  12:52:14 DEBUG    plugins.modbus_tcp  read InputRegister.72.1 (address.slaveUnit) regCount:2
          2023-03-04  12:52:14 DEBUG    plugins.modbus_tcp  read InputRegister.72.1 (address.slaveUnit) regCount:2 registers:0x43be 0x947b
          2023-03-04  12:52:14 DEBUG    plugins.modbus_tcp  value readed: 381.1600036621094 type: <class 'float'>
          2023-03-04  12:52:14 DEBUG    plugins.modbus_tcp  read InputRegister.74.1 (address.slaveUnit) regCount:2
          2023-03-04  12:52:14 DEBUG    plugins.modbus_tcp  read InputRegister.74.1 (address.slaveUnit) regCount:2 registers:0x4385 0x17cf
          2023-03-04  12:52:14 DEBUG    plugins.modbus_tcp  value readed: 266.1860046386719 type: <class 'float'>
          2023-03-04  12:52:14 DEBUG    plugins.modbus_tcp  read InputRegister.52.1 (address.slaveUnit) regCount:2
          2023-03-04  12:52:14 DEBUG    plugins.modbus_tcp  read InputRegister.52.1 (address.slaveUnit) regCount:2 registers:0x4506 0xd2bb
          2023-03-04  12:52:14 DEBUG    plugins.modbus_tcp  value readed: 2157.170654296875 type: <class 'float'>
          2023-03-04  12:52:14 DEBUG    plugins.modbus_tcp  poll_device: 3 register readed requed-time: 0:00:00.170237​
          Kann aber auch sein, dass das Gerät noch nicht komplett hochgefahren war beim ersten Versuch nach dem Restart...

          Kommentar


            Meiner Meinung nach wirst Du so die Ursache nicht weiter eingrenzen können. Gerät und Dongle scheinen ja zu funktionieren, sonst würde Simply Modbus denselben Fehler liefern.

            Die wahrscheinlichsten Kandidaten sind für mich das Plugin (z.B. dass sich nach einem fehlerhaften Lesezugriff die Ausleseschleife bzw. deren Index verändert - die Register werden ja nicht wirklich 'vertauscht', sondern dauerhaft 'verschoben' - das ID-Mapping ist also hinterher falsch) oder das vom Plugin benutzte pymodbus.

            Ohne ein detaillierteres Logging (idealerweise durch zusätzliche Logeinträge der an pymodbus übergebenen Kommandos sowie der daraus resultierenden Empfangswerte PLUS ein separates Hex-Trace des Bus-Traffics zum Fehlerzeitpunkt) wirst Du hier vermutlich nicht weiterkommen.

            /tom

            Kommentar


              Hast du die Möglichkeit, mit node-red oder einem ESP / Tasmota den RS485 to ETH Converter auszulesen? Vermutlich wird das keine Fehler aufzeigen und immer korrekte Werte liefern.
              welche Baudrate verwendest du? 9600 oder?

              Kommentar


                Zitat von fuppy Beitrag anzeigen
                Ab einem bestimmten Zeitpunkt vertauscht modbus_tcp plötzlich die Werte.
                greifst du dabei parallel auf den Converter mit Simply Modbus oder anderen zu?
                nach welcher Zeit tritt der Fehler ca. auf?

                Code:
                2023-03-04 08:48:03 DEBUG plugins.modbus_tcp read InputRegister.72.1 (address.slaveUnit) regCount:2
                2023-03-04 08:48:03 ERROR plugins.modbus_tcp count of read registers is incorrect regCount:2 len(result.registers):62​
                hier sollten 2 Register gelesen werden, und es kommen viel zu viele Register an, ohne dass pymodbus einen Fehler signalisiert...

                du kannst Dir evtl. auch den Log vom pymodbus ausgeben (in etc/logging.yaml)

                Code:
                handlers:
                   fileModBus:
                        (): lib.log.ShngTimedRotatingFileHandler
                        level: DEBUG
                        formatter: shng_detail1
                        when: midnight
                        backupCount: 3
                        filename: ./var/log/modBusTCP.log
                loggers:
                    plugins.modbus_tcp:
                        handlers: [fileModBus]
                        level: DEBUG​
                    pymodbus:
                        handlers: [fileModBus]
                        level: DEBUG​
                Zuletzt geändert von ivande; 06.03.2023, 14:49.

                Kommentar


                  Mal zur kurzen Info:
                  das Plugin läuft bei mir seit Januar 2022 (also nun 14 Monate) zwischen dem Smarthome NG und dem Fronius Wechselrichter GEN24 mit 2 Units (Wechselrichter und Zähler) in Kommunikation mit dem Modbus-TCP vom Wechselrichter absolut fehlerfrei.
                  Bis heute hat es keinerlei Datenprobleme gegeben - die sind nach wie vor konsistent.
                  Die Abfrage läuft im 15-Sekunden-Rhythmus mit 59 Variablen. Man kann sich also vorstellen, was da eine Datenmenge über die Zeit zusammengekommen ist.
                  Und alles Updates der Plugins sind seit dem installiert worden.
                  Alles ohne Fehler…
                  …was bedeutet; das Plugin läuft bei mir sauber ohne irgendwelche Vertauschungen von Werten o.ä.; aber bezieht sich nur auf eine Kommunikation mit dem WR. Eastron-Zähler hab ich keine, aber die Kommunikaion sollte ja genauso ablaufen.
                  Zuletzt geändert von tsb2001; 06.03.2023, 14:54.

                  Kommentar


                    Zitat von ivande Beitrag anzeigen
                    greifst du dabei parallel auf den Converter mit Simply Modbus oder anderen zu?
                    nach welcher Zeit tritt der Fehler ca. auf?

                    Code:
                    2023-03-04 08:48:03 DEBUG plugins.modbus_tcp read InputRegister.72.1 (address.slaveUnit) regCount:2
                    2023-03-04 08:48:03 ERROR plugins.modbus_tcp count of read registers is incorrect regCount:2 len(result.registers):62​
                    hier sollten 2 Register gelesen werden, und es kommen viel zu viele Register an, ohne dass pymodbus einen Fehler signalisiert...

                    du kannst Dir evtl. auch den Log vom pymodbus ausgeben (in etc/logging.yaml)

                    Code:
                    handlers:
                    fileModBus:
                    (): lib.log.ShngTimedRotatingFileHandler
                    level: DEBUG
                    formatter: shng_detail1
                    when: midnight
                    backupCount: 3
                    filename: ./var/log/modBusTCP.log
                    loggers:
                    plugins.modbus_tcp:
                    handlers: [fileModBus]
                    level: DEBUG​
                    pymodbus:
                    handlers: [fileModBus]
                    level: DEBUG​
                    Zunächst mal vielen Dank an alle für euren Input!

                    Ich versuche, auf die einzelnen Fragen/Anmerkungen einzugehen:

                    Aktuell greift SmarthomeNG exklusiv auf den Converter zu. Abfragen über Simply Modbus werden nur bei Bedarf gemacht.
                    Ich bin gerade dabei, über Node-RED parallel eine dauerhafte Abfrage der Modbus Werte über den gleichen Converter aufzusetzen, um eine Referenz zu haben.

                    Auch werde ich das Logging für pymodbus aktivieren. Danke ivande für den Tipp.

                    Ich hab trotzdem das Gefühl, dass der Converter da irgendwie mit reinspielt...

                    Ich halte euch auf dem Laufenden!

                    Danke nochmals an alle für euren Support!

                    Kommentar


                      Zitat von tsb2001 Beitrag anzeigen
                      Bis heute hat es keinerlei Datenprobleme gegeben - die sind nach wie vor konsistent.
                      Das allein ist ja kein Indiz dafür, dass das Plugin komplett fehlerfrei und -resistent ist. Selbst bei meinem deutlich älteren Samson-Modbus-Plugin (das in großen Teilen offensichtlich Vorlage für ivande's universelles Modbus-Plugin war), kommen bis heute immer mal wieder irgendwelche Meldungen mit Fehlern rein, die ich vorher gar nicht auf Sicht hatte - und da geht es um die Anbindung eines konkreten Gerätes.

                      Zitat von ivande Beitrag anzeigen
                      hier sollten 2 Register gelesen werden, und es kommen viel zu viele Register an, ohne dass pymodbus einen Fehler signalisiert...
                      Ich halte es nach erneutem Nachdenken für gar nicht für so unwahrscheinlich, dass die Modbus-Implementierung im Endgerät fehlerhaft ist. pymodbus reicht ja im Grunde nur Anfragen und die zugehörigen Antworten durch. Dito das Dongle. Vermutlich ist dort keine Plausibilitätsprüfung hinsichtlich der Länge der Antwort implementiert. Und vermutlich ist Simply Modbus einfach 'resistenter' programmiert - z.B. 'frage 2 Register an - werte 2 Register aus'.

                      Ohne das jetzt in den Quellen weiter geprüft zu haben, kann eine einzelne fehlerhafte Antwort des Endgerätes bzw. die daraus resultierende Exception durchaus einen unerwarteten Abbruch von Abfrageschleifen im Plugin bzw. der darauf folgenden Auswertung zur Folge haben. Hatte ich im Samson-Plugin auch mal; daraufhin wurden dann ganze Registerbereiche auf bestimmten Trovis-Modellen nicht mehr ausgelesen. Abgefangen hab ich das dann am Ende mit einem kompletten try/except um die Abfrage der Register herum, so dass die Auswerteroutine dann gar nicht mehr aufgerufen wurde.

                      Aus diesem Grunde auch mein obiger Hinweis auf erweitertes Logging - manchmal geht es nicht ohne.

                      Zitat von fuppy Beitrag anzeigen
                      Ich halte euch auf dem Laufenden!
                      Viel Erfolg!

                      /tom
                      Zuletzt geändert von Tom Bombadil; 06.03.2023, 23:30.

                      Kommentar


                        Hi

                        Kann man mit dem Plugin auch Geräte abfragen, die ausschließlich SunSpec verwenden?

                        Gruß, Martin

                        EDIT: Anscheinend ja, zumindest schließe ich das aus der example.yaml im Plugin Verzeichnis. Und warum auch nicht? Modbus ist Modbus.
                        Zuletzt geändert von Sipple; 29.03.2023, 11:08.

                        Kommentar


                          Zitat von Sipple Beitrag anzeigen
                          Kann man mit dem Plugin auch Geräte abfragen, die ausschließlich SunSpec verwenden?
                          Was meinst Du denn mit "ausschließlich"?
                          Ich lese mit dem Plugin sowohl meine Paradigma Heizung /Solarthermie als auch meinen Solaredge Wechselrichter aus.
                          Ob die genau nach SunSpec spezifiziert sind, weiß ich ehrlich gesagt gar nicht.
                          Wenn man die Register hat, klappt das alles hervorragend.

                          Kommentar


                            Danke.

                            Ich wollte nur sicher gehen, dass man für SunSpec keine speziellen Anpassungen braucht, die das Modbus TCP Plugin nicht bereitstellt.
                            Offensichtlich ist das aber kein Problem.
                            Die SunSpec Spezifikation ist da wohl viel Rauch um nichts.
                            Ich bekomme demnächst einen Kaco Blueplanet NX3. Deren Anleitungen zum Thema Modbus TCP sind schwammig, unvollständig, nichtssagend und manchmal schlichtweg falsch. Ich hoffe, ich bekomme den mit dem Plugin abgefragt.

                            Kommentar


                              Zitat von Sipple Beitrag anzeigen
                              Ich bekomme demnächst einen Kaco Blueplanet NX3. Deren Anleitungen zum Thema Modbus TCP sind schwammig, unvollständig, nichtssagend und manchmal schlichtweg falsch. Ich hoffe, ich bekomme den mit dem Plugin abgefragt.
                              Ich habe da am Anfang immer erstmal mit dem Windows Tool "qModMaster" ein bisschen getestet ... stimmt die IP, der Port, in welchen Registern steht was drin ...

                              Kommentar


                                Zitat von Sipple Beitrag anzeigen
                                Danke.
                                Die SunSpec Spezifikation ist da wohl viel Rauch um nichts.
                                ​​​​​….
                                Ich hoffe, ich bekomme den mit dem Plugin abgefragt.
                                SunSpec ist nichts anderes als Modbus.
                                Es haben sich halt nur einige Hersteller zusammengeschlossen und die Kommunikation über Modbus durch die https://sunspec.org zu definieren.
                                Das wichtigste dabei: die arbeiten seltener mit Gleitkommazahlen, sondern häufig mit Integern in einem Register und Skalierungsfaktoren in einem weiteren Register. Daraus ergibt sich der eigentliche Wert. Berechnungsmethoden dazu finden sich hier weiter vorne.
                                Die Register selbst sind nicht in den Spezifikationen festgeschrieben. Diese stellt aber (zumindest in meinem Fall bei Fronius) der Hersteller kostenfrei zur Verfügung. Wegen der schieren Menge an Werten und den zugehörigen Faktoren ist das einfache „Ausprobieren“ mit Registern nicht zielführend.

                                Kommentar

                                Lädt...
                                X