Ankündigung

Einklappen
Keine Ankündigung bisher.

Einbindung von Modbus TCP

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

  • ooUrmeloo
    antwortet
    Zitat von beckerth Beitrag anzeigen
    Welches Gerät versuchst du auszulesen? Ich habe hier ein paar Wechselrichter und Smartmeter mit "nativem" Modbus TCP die vertragen 1s Poll Intervall für >>100 Register. Dann habe ich noch ein altes Smartmeter mit Modbus RTU <--> Modbus TCP Bridge. Das Ding kann maximal 11 Register pro Request lesen. (Handbuch: It is possible to read maximum 11 registers (words) with a single request,).
    Wenn ich die Poll Zeit unter 10s stelle fliegen mir irgendwann die gleichzeitgen SmarthomeNG Treads um die Ohren. Ich denke hier müsste man das Plugin massiv aufbohren um immer nur x Requests pro Zeiteinheit zu senden. Also bei einer Poll Zeit von 5s und 50 Registern jede Sekunde 10 Register anfordern, so dass man nach 5s die 50 Register gelesen hätte. Ich habe mich einfach auf die wichtigsten 11 Register beschränkt. 😆
    Vielleicht probiere ich noch eine andere Firmware für die Modbus RTU/TCP Bridge aus um auszuschließen dass diese das Bottleneck ist. Aber eigentlich reichen die 11 Register auch.
    1. Eine Paradigma Heizung mit ca. 30 Registern
    2. Ein Solaredge Wechselrichter mit ca. 20 Registern

    beides aber nur mit 60 sec cycle Time.

    Pymodbus = 3.5.2 habe ich noch nicht versucht ... werde ich die Tage mal machen.

    Einen Kommentar schreiben:


  • Cannon
    antwortet
    Zitat von beckerth Beitrag anzeigen
    Ich bekomme das Plugin aber nicht zum laufen. Die Endians erkennt er gar nicht und stellt alles auf Endian.BIG um. Obwohl die korrekten Werte definiert sind. Ich habe in Struct und Item Definitionen alle Little gegen LITTLE und Big gegen BIG getauscht . Habe es auch mit "Hochkommas" versucht. Außerdem erkennt er Float32 nicht mehr beim modus write...Irgendwas haut da nicht so richtig hin.
    Da ich selbst das Plugin "modbus_tcp" nicht nutze kann ich das Problem nicht nachvollziehen. Wenn es aber am pymodbus liegen sollte, dann würde ich die erst einmal die letzte 3.5er Version mal probieren. Das wäre dann die 3.5.4. Es wäre ja gut, wenn alles was pymodbus nutzt auch erst einmal auf eine Version lauffähig wäre.

    Einen Kommentar schreiben:


  • beckerth
    antwortet
    Zitat von Cannon Beitrag anzeigen

    Selbst wenn du kannst ja wieder zurück updaten ...


    Kann ich nicht sagen, wie da der Stand ist.



    Ja, da ist mit irgendeiner der 3er Version dazu gekommen. Deshalb habe ich die Mindestversion auf 3.5.2 gestellt. Da gab es mehrere Änderungen, einmal diese unit/slave-Sachen, dann die Endian-Sachen und dann auch noch was mit dem Versionsmanagement. Mit modbus 3.5.2 installiert und den Sachen aus meinem plugins sollte es aber gehen. Geht es denn dann?

    Das mit den requirements funktioniert bei mir allerdings generell nicht. Ich muss alle notwendigen python-Bibliotheken immer von Hand updaten. Dazu hatte ich mal einen Thread auch hier im Forum. Da hatte ich auch was in irgendeiner Lib gepatcht. Ich erinnere mich aber nicht mehr wo. Zumindest hatte auch ich das ins Dev "hochgeladen".
    Manuelles update/downgrade ist kein Problem. (pip install pymodbus==3.0.2 oder pip install pymodbus==3.5.2)
    Ich bekomme das Plugin aber nicht zum laufen. Die Endians erkennt er gar nicht und stellt alles auf Endian.BIG um. Obwohl die korrekten Werte definiert sind. Ich habe in Struct und Item Definitionen alle Little gegen LITTLE und Big gegen BIG getauscht . Habe es auch mit "Hochkommas" versucht. Außerdem erkennt er Float32 nicht mehr beim modus write...Irgendwas haut da nicht so richtig hin.

    Zitat von ooUrmeloo Beitrag anzeigen
    Ich habe gerade das hier noch gelesen: " ... Pymodbus 3.5.2. Darunter geht nichts mehr ..."
    Trifft das auch auf den modbus_tcp v 1.0.8 zu? Bei mir läuft Pymodbus 3.2.0. ... Oder habe ich da jetzt was falsch verstanden?
    Könnte das evtl. meine Probleme verursachen?
    Ist ein manuelles Update von Pymodbus "gefahrlos" möglich?
    Bei mir läuft die 1.0.9 mit pymodbus 3.0.2.

    Zitat von ooUrmeloo Beitrag anzeigen
    Ich habe mittlerweile auf SHNG v1.9.5 und modbus_tcp v 1.0.8 aktualisiert.
    Leider keine Besserung mit meinen Fehlermeldungen ... (s.o.)
    Welches Gerät versuchst du auszulesen? Ich habe hier ein paar Wechselrichter und Smartmeter mit "nativem" Modbus TCP die vertragen 1s Poll Intervall für >>100 Register. Dann habe ich noch ein altes Smartmeter mit Modbus RTU <--> Modbus TCP Bridge. Das Ding kann maximal 11 Register pro Request lesen. (Handbuch: It is possible to read maximum 11 registers (words) with a single request,).
    Wenn ich die Poll Zeit unter 10s stelle fliegen mir irgendwann die gleichzeitgen SmarthomeNG Treads um die Ohren. Ich denke hier müsste man das Plugin massiv aufbohren um immer nur x Requests pro Zeiteinheit zu senden. Also bei einer Poll Zeit von 5s und 50 Registern jede Sekunde 10 Register anfordern, so dass man nach 5s die 50 Register gelesen hätte. Ich habe mich einfach auf die wichtigsten 11 Register beschränkt. 😆
    Vielleicht probiere ich noch eine andere Firmware für die Modbus RTU/TCP Bridge aus um auszuschließen dass diese das Bottleneck ist. Aber eigentlich reichen die 11 Register auch.


    Zuletzt geändert von beckerth; 01.01.2024, 01:30.

    Einen Kommentar schreiben:


  • Cannon
    antwortet
    Zitat von ooUrmeloo Beitrag anzeigen
    Ist ein manuelles Update von Pymodbus "gefahrlos" möglich?




    Selbst wenn du kannst ja wieder zurück updaten ...

    Zitat von ooUrmeloo Beitrag anzeigen
    Trifft das auch auf den modbus_tcp v 1.0.8 zu?
    Kann ich nicht sagen, wie da der Stand ist.

    Zitat von beckerth Beitrag anzeigen
    Leider sind die Endian Definitionen nicht kompatibel zur vorherigen Version. Vorher war es Endian.Little / Endian.Big. In Deiner Version ist es Endian.LITTLE und Endian.BIG?
    Ja, da ist mit irgendeiner der 3er Version dazu gekommen. Deshalb habe ich die Mindestversion auf 3.5.2 gestellt. Da gab es mehrere Änderungen, einmal diese unit/slave-Sachen, dann die Endian-Sachen und dann auch noch was mit dem Versionsmanagement. Mit modbus 3.5.2 installiert und den Sachen aus meinem plugins sollte es aber gehen. Geht es denn dann?

    Das mit den requirements funktioniert bei mir allerdings generell nicht. Ich muss alle notwendigen python-Bibliotheken immer von Hand updaten. Dazu hatte ich mal einen Thread auch hier im Forum. Da hatte ich auch was in irgendeiner Lib gepatcht. Ich erinnere mich aber nicht mehr wo. Zumindest hatte auch ich das ins Dev "hochgeladen".

    Einen Kommentar schreiben:


  • beckerth
    antwortet
    Zitat von Cannon Beitrag anzeigen

    Über welches Plugin schreibst du?

    Ich habe gerade mal im Develop bei den SmartHomeNG-Plugins geschaut. Die sind noch nicht drin. Entweder stelle ich mich da zu doof dafür an oder das dauert die einzubinden, da ich da ja nicht direkt schreiben kann. Du kannst bei Bedarf aber direkt auf meinem fork bei github die Elemente laden: https://github.com/CannonRS/plugins/tree/develop
    Habe Dein Version vorhin mal ausprobiert:
    Mit der requirements.txt startet Smarthomeng bei mir nicht mehr. Nach entfernen der Datei und manuellem Update von Pymodbus auf 3.5.2 startet es dann. Leider sind die Endian Definitionen nicht kompatibel zur vorherigen Version. Vorher war es Endian.Little / Endian.Big. In Deiner Version ist es Endian.LITTLE und Endian.BIG?

    Ich kann jetzt meine Structs alle umstellen aber die Frage ist was später verwendet wird?

    Ich bin jetzt wieder zurück zur Version im Develop Branch mit kleineren Anpassungen (unit<==>slave in modbus write, Ergänzung von write only Registern) und pymodbus version 3.0.2.
    Zuletzt geändert von beckerth; 31.12.2023, 16:20.

    Einen Kommentar schreiben:


  • ooUrmeloo
    antwortet
    Zitat von Cannon Beitrag anzeigen

    Ich würde den Support der alten Pymodbus-Version entfernen. Ohnehin schleppt man dann immer mehr Ballast mit rum. Da es auch innerhalb der 3er Version zum Teil Änderungen gab, die Probleme verursachten und man nicht jede Evntualität abfragen kann. Ich habe meine requirements auf 3.5.2 umgestellt. Darunter geht nichts mehr.
    Ich habe gerade das hier noch gelesen: " ... Pymodbus 3.5.2. Darunter geht nichts mehr ..."
    Trifft das auch auf den modbus_tcp v 1.0.8 zu? Bei mir läuft Pymodbus 3.2.0. ... Oder habe ich da jetzt was falsch verstanden?
    Könnte das evtl. meine Probleme verursachen?
    Ist ein manuelles Update von Pymodbus "gefahrlos" möglich?

    Einen Kommentar schreiben:


  • beckerth
    antwortet
    Zitat von Cannon Beitrag anzeigen

    Über welches Plugin schreibst du?

    Ich habe gerade mal im Develop bei den SmartHomeNG-Plugins geschaut. Die sind noch nicht drin. Entweder stelle ich mich da zu doof dafür an oder das dauert die einzubinden, da ich da ja nicht direkt schreiben kann. Du kannst bei Bedarf aber direkt auf meinem fork bei github die Elemente laden: https://github.com/CannonRS/plugins/tree/develop
    Danke für den Hinweis. Schaue ich mir morgen mal an. Das im Develop Zweig ist noch nicht gefixed..

    Einen Kommentar schreiben:


  • beckerth
    antwortet
    Zitat von ooUrmeloo Beitrag anzeigen

    Also ich benutze kein struct und auch modBusUnit nicht - ich habe aber auch mehrere Instanzen am Laufen.
    M.E. musst Du bei modBusFactor (da mach ich das so) und modBusUnit (?) auch auf die Instanz verweisen, d.h. "modBusFactor@instance = 0.1".

    Probier mal ...
    Danke! Da habe ich wohl klassisch vor lauter Bäumen den Wald übersehen .

    Einen Kommentar schreiben:


  • ooUrmeloo
    antwortet
    Zitat von ooUrmeloo Beitrag anzeigen

    SHNG v1.9.4-master​ und modbus_tcp v 1.0.8

    Ich habe jetzt übrigens ein paar mal versucht, die beiden Instanzen nur einzeln einzuschalten bzw. nur einzeln auf 60s zu stellen.
    Das ging ... und jetzt geht's auch mit beiden gleichzeitig ... fragt mich nicht, wieso ...
    Und irgendwie gibt's jetzt auch seltener Fehler beim Auslesen, aber immer noch ab und zu ...
    Irgendwie werde ich da nicht so richtig schlau draus ...
    Ich habe mittlerweile auf SHNG v1.9.5 und modbus_tcp v 1.0.8 aktualisiert.
    Leider keine Besserung mit meinen Fehlermeldungen ... (s.o.)
    ​​​​​

    Einen Kommentar schreiben:


  • ooUrmeloo
    antwortet
    Zitat von beckerth Beitrag anzeigen
    Kann ich, wenn ich mit structs arbeite die modBusUnit im struct angeben? Oder muss ich die irgendwie in der Item Definition setzen? ShNG übernimmt die geänderte Unit ID nicht. Wenn ich die global definierte UnitID in der plugin.yaml ändere kann ich die Werte des ersten oder zweiten Gerätes auslesen. Die "Unit" Spalte im Web-IF wird nicht angezeigt. Und der modBusFactorwird bei int32 nicht eingerechnet?
    Also ich benutze kein struct und auch modBusUnit nicht - ich habe aber auch mehrere Instanzen am Laufen.
    M.E. musst Du bei modBusFactor (da mach ich das so) und modBusUnit (?) auch auf die Instanz verweisen, d.h. "modBusFactor@instance = 0.1".

    Probier mal ...

    Einen Kommentar schreiben:


  • Cannon
    antwortet
    Zitat von beckerth Beitrag anzeigen
    Okay für mich. Das Plugin funktioniert so wie es aktuell ist leider nicht da es Fehler wirft wenn man auf den Bus schreibt.
    Über welches Plugin schreibst du?

    Ich habe gerade mal im Develop bei den SmartHomeNG-Plugins geschaut. Die sind noch nicht drin. Entweder stelle ich mich da zu doof dafür an oder das dauert die einzubinden, da ich da ja nicht direkt schreiben kann. Du kannst bei Bedarf aber direkt auf meinem fork bei github die Elemente laden: https://github.com/CannonRS/plugins/tree/develop

    Einen Kommentar schreiben:


  • beckerth
    antwortet
    Zitat von Cannon Beitrag anzeigen

    Naja, wenn man sich das wie bei einem KNX-Plugin vorstellt, ist das nachvollziehbar. Allerdings wäre es dann wirklich schön, wenn es entsprechende Vorlagen gesammelt gibt. Also z.B. structs für die einzelnen Modbus-Geräte.



    Naja ganz so ist das ja nicht. Die Vorlagen sollten dann auch aktuell gehalten werden. Aber zumindest muss man sich nicht mehr auf ständige Modbus-Änderungen einlassen. Wobei ich hoffe, dass das Thema jetzt auch durch ist.
    Wo / wie können wir die Structs sammeln? Ich stelle auch um auf das generische Plugin um. Kostal (Plenticore, KSEM) und verschiedene Smartmeter.

    Einen Kommentar schreiben:


  • beckerth
    antwortet
    Zitat von Cannon Beitrag anzeigen

    Ich würde den Support der alten Pymodbus-Version entfernen. Ohnehin schleppt man dann immer mehr Ballast mit rum. Da es auch innerhalb der 3er Version zum Teil Änderungen gab, die Probleme verursachten und man nicht jede Evntualität abfragen kann. Ich habe meine requirements auf 3.5.2 umgestellt. Darunter geht nichts mehr.
    Okay für mich. Das Plugin funktioniert so wie es aktuell ist leider nicht da es Fehler wirft wenn man auf den Bus schreibt.

    image.png

    Einen Kommentar schreiben:


  • beckerth
    antwortet
    Kann ich, wenn ich mit structs arbeite die modBusUnit im struct angeben? Oder muss ich die irgendwie in der Item Definition setzen? ShNG übernimmt die geänderte Unit ID nicht. Wenn ich die global definierte UnitID in der plugin.yaml ändere kann ich die Werte des ersten oder zweiten Gerätes auslesen. Die "Unit" Spalte im Web-IF wird nicht angezeigt. Und der modBusFactorwird bei int32 nicht eingerechnet?

    Bin auf dem letzten Develop Stand vom Plugin mit PyModbus 3.0.2 und Python 3.9.2.

    Minimalbeispiel:
    Struct:
    Code:
    meter_sdm230:
      Voltage:
        modBusAddress@instance: '0'
        modBusDataType@instance: float32
        modBusObjectType@instance: InputRegister
        type: num
        modBusWordOrder@instance: Endian.Big
        modBusByteOrder@instance: Endian.Big
        modBusUnit: 1
      Current:
        modBusAddress@instance: '6'
        modBusDataType@instance: float32
        modBusObjectType@instance: InputRegister
        type: num
        modBusWordOrder@instance: Endian.Big
        modBusByteOrder@instance: Endian.Big
        modBusUnit: 1
      ActivePower:
        modBusAddress@instance: '12'
        modBusDataType@instance: float32
        modBusObjectType@instance: InputRegister
        type: num
        modBusWordOrder@instance: Endian.Big
        modBusByteOrder@instance: Endian.Big
        modBusUnit: 1
    meter_em24:
      VoltageL1N:
        modBusAddress@instance: '0'
        modBusDataType@instance: int32
        modBusObjectType@instance: HoldingRegister
        type: num
        modBusWordOrder@instance: Endian.Little
        modBusByteOrder@instance: Endian.Big
        modBusUnit: 2
        modBusFactor: 0.1  
      VoltageL2N:
        modBusAddress@instance: '2'
        modBusDataType@instance: int32
        modBusObjectType@instance: HoldingRegister
        type: num
        modBusWordOrder@instance: Endian.Little
        modBusByteOrder@instance: Endian.Big
        modBusUnit: 2
        modBusFactor: 0.1  
      VoltageL3N:
        modBusAddress@instance: '4'
        modBusDataType@instance: int32
        modBusObjectType@instance: HoldingRegister
        type: num
        modBusWordOrder@instance: Endian.Little
        modBusByteOrder@instance: Endian.Big
        modBusUnit: 2
        modBusFactor: 0.1​
    Item Definition:
    Code:
    modbus_meters:
        sdm230:
            struct: my.Modbus_Energy_Meters.meter_sdm230@modbus_ernergy_meters
        em24:
            struct: my.Modbus_Energy_Meters.meter_em24@modbus_ernergy_meters​
    Web-Interface:image.png

    Einen Kommentar schreiben:


  • ooUrmeloo
    antwortet
    Zitat von bmx Beitrag anzeigen
    Hm, wie alt ist denn dein SHNG bzw das Plugin? Bei mir steht da (im develop branch) statt num ein int für port und cycle drin ...?
    SHNG v1.9.4-master​ und modbus_tcp v 1.0.8

    Ich habe jetzt übrigens ein paar mal versucht, die beiden Instanzen nur einzeln einzuschalten bzw. nur einzeln auf 60s zu stellen.
    Das ging ... und jetzt geht's auch mit beiden gleichzeitig ... fragt mich nicht, wieso ...
    Und irgendwie gibt's jetzt auch seltener Fehler beim Auslesen, aber immer noch ab und zu ...
    Irgendwie werde ich da nicht so richtig schlau draus ...
    Zuletzt geändert von ooUrmeloo; 10.12.2023, 22:08.

    Einen Kommentar schreiben:

Lädt...
X