Ankündigung

Einklappen
Keine Ankündigung bisher.

Einbindung von Modbus TCP

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

  • tsb2001
    antwortet
    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.

    Einen Kommentar schreiben:


  • ooUrmeloo
    antwortet
    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 ...

    Einen Kommentar schreiben:


  • Sipple
    antwortet
    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.

    Einen Kommentar schreiben:


  • ooUrmeloo
    antwortet
    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.

    Einen Kommentar schreiben:


  • Sipple
    antwortet
    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; Gestern, 11:08.

    Einen Kommentar schreiben:


  • Tom Bombadil
    antwortet
    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.

    Einen Kommentar schreiben:


  • fuppy
    antwortet
    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!

    Einen Kommentar schreiben:


  • tsb2001
    antwortet
    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.

    Einen Kommentar schreiben:


  • ivande
    antwortet
    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.

    Einen Kommentar schreiben:


  • Noschvie
    antwortet
    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?

    Einen Kommentar schreiben:


  • Tom Bombadil
    antwortet
    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

    Einen Kommentar schreiben:


  • fuppy
    antwortet
    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...

    Einen Kommentar schreiben:


  • fuppy
    antwortet
    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.

    Einen Kommentar schreiben:


  • ivande
    antwortet
    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?

    Einen Kommentar schreiben:


  • fuppy
    antwortet
    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…

    Einen Kommentar schreiben:

Lädt...
X