Ankündigung

Einklappen
Keine Ankündigung bisher.

LBS: 19001030: Modbus TCP Master Read

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

  • Chris1985
    antwortet
    Hallo zusammen,

    ich bräuchte mal eure Einschätzung zum Leistungsbedarf des Modbus LBS. Ich möchte mit dem LBS diverse Werte aus meinem Huawei Wechselrichter auslesen und habe dafür aktuell 4 LBS hintereinander geschaltet um 20 Werte auszulesen. Mein Edomi läuft auf einem Futro S900, auf dem sonst auch nichts anderes installiert ist.
    Der erste LBS wird alle 5 Sekunden abgefragt und die anderen laufen dann nacheinander durch.
    Die CPU Auslastung springt bei jeder Abfrage auf ca. 80% hoch. Da ich noch in den Anfängen stecke, laufen auch sonst keine aufwändigen Logiken.
    Ist das so normal und ich sollte mir Gedanken um eine andere Hardware machen oder habe ich irgendwo etwas übersehen?

    Screenshot_20200716-090945_Chrome.jpg

    Vielen Dank!

    Einen Kommentar schreiben:


  • SuperSonic
    antwortet
    Hallo zusammen,
    hat das wer sauber zum laufen gebracht?

    Falls ja, könntet Ihr mir bitte sagen mit was und wie?

    Ich überlege mir eine SMA Speedwire Webconnect Schnittstelle für meinen Wechselrichter zu holen und will diese dann mit dem HomeServer auslesen.

    Wie stell ich das am besten an?

    Einen Kommentar schreiben:


  • Gregor No
    antwortet
    Hallo BootCamper

    Arbeitest du noch an deinem Modbus?
    Ich denke du hast ein Problem mit der Start-Adresse und länge von dem Register.
    Sieht so aus als ob dein Ergebnis an A1 mit dem Nullen aus benachbarten Register aufgeblasen wurde.
    Versuch doch mal mit 30775 + 1 oder - 1. Hat bei mir funktioniert.
    Vielleicht muss du nur die Länge des Register ändern von 32 Bit auf 16 Bit.


    Auf dem Bild in deinem Anhang ist der Wert vom A1
    Dezimal: 156.303.360‬
    Binär: 0000 1001 0101 0001 0000 0000 0000 0000 (32 Bit, Big-Endian)

    Wenn du jetzt die sechszehn Nullen noch vorne verschiebst, dann werden sie nicht mehr mitgerechnet und du erhälst

    Binär: 0000 0000 0000 0000 0000 1001 0101 0001
    Dezimal: 2.385‬
    Das vermutlich deinem gewünschtem Ergebnis nahe kommt?

    Weitere Möglichkeit ist ein Fehler bei Lese-Folge der Bytes (Big-Endian/ Little-Endian )
    Was passiert wenn der Wert V4 wieder 1 ist?
    Bin auch kein modbus Profi, meine ganze Weisheiten habe ich aus: https://de.wikipedia.org/wiki/Byte-Reihenfolge
    Wie ich es verstehe wird so gelesen
    Big-Endian:
    AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD
    Little-Endian:
    DDDDDDDD CCCCCCCC BBBBBBBB AAAAAAAA
    Mixed-Endiann:
    BBBBBBBB AAAAAAAA DDDDDDDD CCCCCCCC

    Die Buchstaben sollen Binärzeichen darstellen, also Nullen und Einsen.
    Hier als Buchstaben, um die lese-folge der Bytes zu veranschaulichen.



    Ich habe ein Problem mit der Aktualität der Werte.
    Der erste Wert kommt unverfälscht, aber mit kleiner Verzögerung.
    Der zweite erst nach einiger Zeit, weitere habe ich noch nie beobachtet.
    Mit dem Tool Modbus Poll sind alle Adressen sofort da.
    Der Modbus Slave ist ein Web IO von W&T

    W&T.PNG
    Kann ich irgendwie die Auslesezeit aus dem Slave verlangsamen?
    Wenn ich die gewünschten Register mit einzelnen LBS nach einander (in 20 ms Abstand) auslese, erhalte ich korrekte Antwort.
    Bei mehreren Registern im einem LBS, funktioniert nur die erste Adresse recht gut, die zweite nur sporadisch, die dritte nach Stunden und vermutlich so weiter.
    Zuletzt geändert von Gregor No; 22.03.2020, 20:33.

    Einen Kommentar schreiben:


  • BootCamper
    antwortet
    Besten Dank, probier ich morgen direkt mal


    Edit: Der Baustein läuft nun, danke dafür

    Aber irgendwie stelle ich mich gerade zu glatt an, ich versuche meinen SMA Wechselrichter auszulesen. Wenn ich mittels Modbusreader Tool die Adresse 30775 auslesen, bekomme ich die aktuelle PV Leistung ausgegeben. Versuche ich das ganze über den Baustein, bekomme ich zwar auch Werte zurück, die haben aber irgendwie nichts mit der aktuellen PV Leistung zu tun. Habe ich den baustein falsch angetriggert oder muss der Wert noch gewandelt werden?

    Anbei mal ein Screenshot vom Tool und vom Baustein. Hat jemand nen Tipp auf Lager, was ich hier noch Einstellen könnte?

    modbus sma.jpg

    Edit2: Habe hier irgendwo aufgeschnappt, das es manchmal sinn macht große zahlen durch 65553 zu teilen, dann scheinen die Werte sogar zu passen
    Angehängte Dateien
    Zuletzt geändert von BootCamper; 28.01.2020, 14:49.

    Einen Kommentar schreiben:


  • starwarsfan
    antwortet
    Hi

    Du musst den Funktionsnamen in /usr/local/edomi/main/include/php/helio/ModbusMaster.php (Zeile 62) ändern:

    Code:
    function __construct($host, $protocol)

    Einen Kommentar schreiben:


  • BootCamper
    antwortet
    Läuft der LBS unter Edomi 2 Centos 7 und neuer PHP Version?

    Ich habe es eben versucht und eine Fehlermeldung im Log bekommen: "Methods with the same name as their class will not be constructors in a future version, ..." Hat das schonmal jemand gehabt und vielleicht sogar behoben?

    Einen Kommentar schreiben:


  • Ing-Dom
    antwortet
    weiß jemand, was es bedeutet wenn in den Registern für den MPP1 (Strom, Spannung, Leistung 65535 (0xFFFF) geliefert wird?

    2020-01-22 08_02_49-Window.png

    Das passiert v.a. Nachts bzw. am Anfang der Dämmerung. Da kommt immer mal wieder 65535 dann aber auch mal wieder sinnvolle Werte.
    Bei den Registern für den MPP2 kommt da ne saubere "0".

    Ich kann das natürlich wegfiltern, aber interessant wäre es schon..

    Einen Kommentar schreiben:


  • Ing-Dom
    antwortet
    2020-01-09 16_10_43-EDOMI · Administration.png

    so gehts nun - mit Type 6 Swap Float und ohne die array_reverse modifiaktion. Warum? k.A. - evtl liegts am Modbus, da hab ich nämlich die Version vom LBS 165 am edomi server.

    Noch ein Bug im Baustein gefunden: wenn ein Timeout kommt (A10 = 2) kommt der LBS nie wieder auf die Füße, dann muss mann edomi resetten.

    Einen Kommentar schreiben:


  • Ing-Dom
    antwortet
    ich komme nicht richtig weiter.

    Ich hab nun zwei LBS, einmal ohne (1030) und einmal mit der array_reverse modifikation.

    Original:

    Code:
     [TABLE="class: log, border: 0, cellpadding: 0, cellspacing: 0, width: 0, height: 12"]
     	 		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]171411[/TD]
     			[TD]26386[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.5]: START ModbusMaster Exec[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]172768[/TD]
     			[TD]26386[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.5]: v3:9[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]172975[/TD]
     			[TD]26386[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.5]: inputs:[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]173024[/TD]
     			[TD]26386[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.5]: ================ ARRAY/OBJECT START ================[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]173054[/TD]
     			[TD]26386[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.5]: ["9"][/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]173080[/TD]
     			[TD]26386[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.5]: ================ ARRAY/OBJECT END ================[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]173278[/TD]
     			[TD]26386[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.5]: i:0; input:9; address:40091; length:2; type:2[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]574875[/TD]
     			[TD]26386[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.5]: Status:<pre>readMultipleRegisters: START[LF]Connected[LF]Packet: 85950000000601039c9b0002[LF]Send[LF]Wait data ... [LF]Wait data ... [LF]Data received[LF]Packet: 85950000000701030444548000[LF]Modbus response error code: NOERROR[LF]Disconnected[LF]readMultipleRegisters: DONE[LF]</pre>[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]575818[/TD]
     			[TD]26386[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.5]: Type:2Raw Data:[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]575944[/TD]
     			[TD]26386[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.5]: ================ ARRAY/OBJECT START ================[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]576030[/TD]
     			[TD]26386[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.5]: [68,84,128,0][/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]576102[/TD]
     			[TD]26386[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.5]: ================ ARRAY/OBJECT END ================[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]576899[/TD]
     			[TD]26386[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.5]: Data:-2.451151273797E-41[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]580887[/TD]
     			[TD]26386[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.5]: end of delay[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]594940[/TD]
     			[TD]26386[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.5]: STOP ModbusMaster EXEC[/TD]
     		[/TR]
     	 [/TABLE]
    Mit array_reverse:

    Code:
     [TABLE="class: log, border: 0, cellpadding: 0, cellspacing: 0, width: 0, height: 12"]
     	 		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]638586[/TD]
     			[TD]26391[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001031 [v0.5]: START ModbusMaster Exec[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]640198[/TD]
     			[TD]26391[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001031 [v0.5]: v3:9[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]640422[/TD]
     			[TD]26391[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001031 [v0.5]: inputs:[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]640455[/TD]
     			[TD]26391[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001031 [v0.5]: ================ ARRAY/OBJECT START ================[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]640486[/TD]
     			[TD]26391[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001031 [v0.5]: ["9"][/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]640507[/TD]
     			[TD]26391[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001031 [v0.5]: ================ ARRAY/OBJECT END ================[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]640712[/TD]
     			[TD]26391[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001031 [v0.5]: i:0; input:9; address:40091; length:2; type:2[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]871906[/TD]
     			[TD]26391[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001031 [v0.5]: Status:<pre>readMultipleRegisters: START[LF]Connected[LF]Packet: 6f820000000601039c9b0002[LF]Send[LF]Wait data ... [LF]Data received[LF]Packet: 6f820000000701030444548000[LF]Modbus response error code: NOERROR[LF]Disconnected[LF]readMultipleRegisters: DONE[LF]</pre>[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]872742[/TD]
     			[TD]26391[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001031 [v0.5]: Type:2Raw Data:[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]872864[/TD]
     			[TD]26391[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001031 [v0.5]: ================ ARRAY/OBJECT START ================[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]872951[/TD]
     			[TD]26391[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001031 [v0.5]: [0,128,84,68][/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]873075[/TD]
     			[TD]26391[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001031 [v0.5]: ================ ARRAY/OBJECT END ================[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]873855[/TD]
     			[TD]26391[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001031 [v0.5]: Data:3367287914496[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]876324[/TD]
     			[TD]26391[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001031 [v0.5]: end of delay[/TD]
     		[/TR]
     		[TR]
     			[TD]2020-01-09 13:32:26[/TD]
     			[TD]879951[/TD]
     			[TD]26391[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001031 [v0.5]: STOP ModbusMaster EXEC[/TD]
     		[/TR]
     	 [/TABLE]
    40091 abgefragt, also Register 40092 ist laut sunspec float map AC power in W. Über die JSON API hab ich die ~ 850W ausgelesen.

    2020-01-09 13_36_06-Inverter_Register_Map_Float_v1.0_with_SYMOHYBRID_MODEL_124.xlsx - Geschützte A.png

    Einen Kommentar schreiben:


  • Ing-Dom
    antwortet
    grad einen Bug im Baustein entdeckt und auch die Ursache gefunden.
    Bei Loop = 0 loopt der LBS trotzdem unkontrolliert herum! Er beendet sich nie.

    Ursache:

    Code:
          if ($loop[B][COLOR=#FF0000]=[/COLOR][/B]1){
                logic_setState($id,1,$delay);
            } else {
              logic_setState($id,0);
            }
    (sollte besser == heißen - eine Zuweisung = ist immer true.)

    Einen Kommentar schreiben:


  • Ing-Dom
    antwortet
    noch was.. du schreibst

    Zitat von DerSeppel Beitrag anzeigen
    Dann klappt es mit:
    - Endianess = 0 (standard)
    aber im screenshot hast du an E4 eine 1 stehen.

    Was ist nun richtig?

    edit: ok, das ist nun auch klar. $endianness liest nicht E4 sondern V4... ! E4 ist nur das Protokoll.
    Zuletzt geändert von Ing-Dom; 09.01.2020, 13:30.

    Einen Kommentar schreiben:


  • Ing-Dom
    antwortet
    Nachtrag:

    Das mit den Registernummern hab ich rausgefunden. Du nutzt die float-Map, ich hatte die int-map angeschaut...

    Einen Kommentar schreiben:


  • Ing-Dom
    antwortet
    Schonmal vielen Dank!

    Ich bekomme jetzt schonmal Werte gelesen, so richtig plausibel sind die aber nicht. Leider zeigt den Screenshot nur die Hälfte um richig Schlüsse ziehen zu können.
    Aber ich wundere mich über deine Registernummern ?!

    AC Power z.B. Eigentlich 84/85 aber du fragst 40091 also 40092 ab, das ist der Power factor ?

    Auch deine String U und I Register bekomme ich nicht gematched.

    Ich hab die Registernummer von:

    "Die Register Tabellen sind auf der Fronius Homepage zu finden oder direkt über den Link
    http://www.fronius.com/QR-link/0006 abrufbar."


    Zitat von DerSeppel Beitrag anzeigen
    Dann kann es passieren dass du Werte bekommst, die eine Zehnerpotenz zu hoch/niedrig sind. Ich versuche das einigermaßen zu Filtern per Logik, ein paar Ausreißer sind trotzdem noch drin.
    Das Problem hatte ich schon an diversen anderen Stellen in edomi, dafür hab ich eine Lösung:

    Am letzten Ausgang des letzten Auslesebaustein setzt du ein KO "Abfrage beendet" auf 1.
    Deine Werte berechnest du wie bisher, schreibst diese aber nicht sofort in die Ausgangsboxen, sondern schaltest einen "Wertauslöser" dazwischen, der durch "Abfrage beendet" an E1 getriggert wird.

    Somit kommen nur Daten in den Ausgangsboxen an, die anhand eines kompletten Prozessdatenabbilds errechnet wurden, die die mit einem halben alten und einem halben neuen berechnet wurden, werden ignoriert.

    Einen Kommentar schreiben:


  • DerSeppel
    antwortet
    Zitat von SirSydom Beitrag anzeigen

    magst du mir vielleicht mal einen Screeshot deiner Beschaltung des LBS für das Auslesen eines Fronius (Symo ?) WR zeigen?

    Ich bekomme es irgendwie nicht hin... und welche Optionen hast du im WR eingestellt bzgl Modbus?
    logik.png

    Bild anbei. Sorry für das Kuddelmuddel, aber ich musste da mal kurzfristig was umbauen und hatte keine Lust danach alles schön neu zu ordnen.
    Wichtig: Du musst für viele Werte immer erst mal den "Scaling-Faktor" lesen. Dieser gibt die Zehnerpotenz an. Den eigentlichen Wert musst du dann mit dem Scalingfaktor verrechnen. Ich mache das über den LBS "Formelberechnung" mit folgender Formel:

    Code:
    Wert = Registerwert * 10^(Scaling-Faktort)
    Beim LBS also Eingangswert auf E3 und Scaling-Faktor auf E4. Formel (E1) lautet dann:
    Code:
    ($x)*pow(10,$a)
    Da die Register sequenziell gelesen werden, passiert es immer mal, dass der Scaling-Faktor nicht zum Wert passt. Z.B. wenn die Ausgangsleistung gerade die 1000W überschreitet/unterschreitet.
    Dann kann es passieren dass du Werte bekommst, die eine Zehnerpotenz zu hoch/niedrig sind. Ich versuche das einigermaßen zu Filtern per Logik, ein paar Ausreißer sind trotzdem noch drin.

    Einen Kommentar schreiben:


  • uzi10
    antwortet
    Ja ich schaff auch den symo nicht auszulesen. Kurze anleitung? Wäre toll

    Einen Kommentar schreiben:

Lädt...
X