Ankündigung

Einklappen
Keine Ankündigung bisher.

LBS19001586 ModBus Read GENERIC

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

    LBS19001586 ModBus Read GENERIC

    Vorstellung: Generischer ModBus-READ (FC3) mit JSON/CSV (Register-Parametrisierung) und JSON (Ausgabe) auf Basis moderner ModBus-Library (https://github.com/aldas/modbus-tcp-client)

    Aufbereitung Ausgabe z.B. mit 19001208 "JSON Extractor". Damit hat jeder "leichten Fußes" freie Registerwahl für seine ModBus-Geräte. Im Gegenzug muss man sich um die Aufbereitung der Werte selber kümmern.

    Ich nutze ihn bereits produktiv und denke nach einigen Rückmeldungen nun, dass der LBS hinreichend stabil ist. Bin dennoch weiter auf Eure Rückmeldungen gespannt.
    Motivation: Alle mir bekannten ModBus-Lösungen hier basieren auf der selben Library. Auch wenn ich damals dankbar für die Vorlage war und bin, so ist diese meines Erachtens verwirrend in der Installation mit speziellen handoptimierten Dateien und zudem nicht modern im Sinne aktiv gepflegt, aktuelles PHP und einfach in der Anwendung. Bei meiner Suche bin ich auf eine andere Library gestoßen, die letztlich sehr einfach und klar in der Anwendung ist, nach meiner Erfahrung spürbar weniger Last erzeugt und aktuell und aktiv gepflegt auf Git: Der Modbus-Aufruf selber ist neben den includes nur 4 Zeilen Code, der Rest ist ChiChi...

    Ziele:
    • Generisch und robust und niedrige Systemlast
    • Aktuelle ModBus-Library
      • Ausgabe generisch per JSON, um sie mit jonofe Andrés wunderbaren 19001208 "JSON Extractor" simpel und nachvollziehbar weiter zu verarbeiten.
      • Damit beliebig skalierbar und auch inhaltlich strukturierbar, weil beliebig viele Instanzen des JSON Extractors aus A1 versorgt werden können.
      • spezifische Format-Aufbereitungen nun nach gelagert, z.B. sendet SMA Hz und Temperaturen als "4999" (=49,99Hz) oder "206" (20,6°C); es ist für bestimmte Ausgabewerte nach dem JSON-Extractor daher eine nach gelagerte "Division/Konstante" erforderlich (z.B. mit 100; siehe Screenshot). Der (kleine) Preis für eine generische ModBus-Abfrage.
      • wenn jemand partout einen geräte-spezifischen LBS bauen möchte, könnte dieser das JSON nehmen und mundgerecht aufbereiten (ersetzt damit den 19001208)
    • ModBus-Parametrisierung einfach und sollte abseits der IP/Port/ID mit Default-Werten (hoffentlich) bereits für die meisten Geräten funktionieren.
      • Dennoch weitere Optionen für bessere Performance und Anpassung der Robustheit
    • Register-Parametrisierung
      • so minimal wie möglich: Register + Name + Format. Fertig. Keine Spezifika (siehe unten zu E8)
      • Und flexibel.
      • entweder als JSON
      • oder mit einem toleranten CSV-Format. Tolerant in Bezug auf Trennzeichen und auch auf die Besonderheit von edomi: Beim Kopieren von Werte-Listen (mit Umbrüchen) in ein KO-Initialwert werden die Umbrüche durch ein Leerzeichen ersetzt. Das ist unglücklich, weil die Vorbereitung zeilenbasiert viel einfacher ist. Daher unterstützt die Lösung dies auch. Tabellarisch vorbereiten und per copy&paste "gedankenlos" für den LBS verwendbar.
    Code:
    [ { "address" : "30775", "type" : "int32", "name" : "Ladeleistung [W]"},{ "address" : "30845", "type" : "uint32", "name" : "Batteriestatus [%]" } ]
    Code:
    30845;"Ladeleistung [W]";uint32;30775;"Batteriestatus [%]";int32
    oder
    Code:
    30845;"Ladeleistung [W]";uint32
    30775;"Batteriestatus [%]";int32

    Der folgenden LBS ist seit einigen Tagen bei mir nun gereift und fehlerfrei und verlässlich gelaufen für 3 SMA-Geräte, d.h. 3 Instanzen des LBS. Meinen "alten" SMA-spezifischen LBS habe ich bereits seit dem komplett deaktiviert. Logik:
    Unbenannt.JPG Nötig ist nur der LBS und der JSON-Extractor. Die Watchdogs sind nur optional.
    Und hier beispielhaft "Division/Konstante" für alle Werte eines ModBus-Geräts mit entsprechender Skalierung (hier: Netzfrequenz 5000 -> 50,00Hz).
    Unbenannt.JPG

    Test eines neuen Registers: Im Live-Modus Register an E8 hinzufügen, passenden Eintrag im JSON Extractor, LSB neu triggern, voilá!

    Bitte lasst mich wissen, wenn bei der Installationsanleitung etwas fehlt/falsch ist. Hier ein kleines Testscript, um die Installation/Funktion der Library abseits edomi testen zu können. Wenn das Script geht, wird edomi und der LBS sehr wahrscheinlich sofort gehen.

    Bitte schreibt Euren Erfahrungen mit unterschiedlichen ModBus-Geräten. Außer für SMA ist der LBS völlig ungetestet; daher NICHT Euer Produktivsystem umbauen, ohne vorher ein paar Tage getestet zu haben.

    E8 zum copy & paste: Es folgt unten ein Beitrag mit Register-Parametersätzen für SMA, die ich verwende.
    Wenn jemand mit dem LBS mit anderen ModBus-Geräten erfolgreich ist, wäre jeweils ein Beitrag mit dem erfolgreich verwendeten Register-Parametersatz sinnvoll.

    Ergänzende Details
    • E4: Pausenzeit zwischen zwei Abfragen (in ms), z.B. alle 15sec = "15000". Dies ist der einzige Wert, der jederzeit geändert werden kann. Damit kann man das Abfrage Intervall dynamisch beschleunigen, wenn man gerade auf einer bestimmten Visu-Seite ist. Alle anderen Werte bedingen ein neues Triggern/Neustart des LBS.
    • E9 + E10: Jedes Geräte codiert seine Daten unterschiedlich; der spezifische Endian (testen oder Geräte-Doku) kann festgelegt werden (E9). Es kommt vor, dass Register mit String-Werten einen abweichenden Endian nutzen (E10)
    • E11 + E12: Gewünschte Register müssen (protokollbedingt von der Library intern) auf mehrere Requests verteilt werden; zunehmend mit Anzahl und Verteilung der Registeradressen. Durch eine Sortierung wird versucht , die Requestzahl niedrig zu halten. ModBus-Geräte können eine unterschiedliche Anzahl Requests in einer Abfrage verarbeiten. Wird sie überschritten, kommt es zu einem ConnectionTimeout. Dieses gerätespezifische Limit kann an E11 gesetzt werden. Wird sie überschritten, werden sie auf weitere Abfragen/Chunks verteilt, die mit etwas Verzögerung (E12) angefragt werden. SMA hat eine Grenze von 4, WAGO nach meiner Info 10. Eine höhere Zahl beschleunigt - solange die Grenze nicht überschritten wird. Nur relevant bei vielen Registern! Es lohnt ein Blick im DebugMode, ob überhaupt mehrerer Chunks gebildet werden.
    • E13 + E14: Prinzipbedingt kommt es bei ModBus zu timeouts (E13). Die resultierenden Exceptions der Library werden für eine wählbare Anzahl (E14) abgefangen und mit einer (ansteigenden) Wartezeit wiederholt. Mit den Standardwerten sollten alle üblichen Verzögerungen (Generator-Start, etc) hinreichend abgedeckt sein. Kommt es regelmäßig zu Fehlern im Fehler-Log, sollte die Ursache geprüft werden und ggf. E14 erhöht werden - solange man damit keine systematischen Probleme verschattet/nicht bemerkt. Da ich derlei sehen will (FehlerLog), aber auch sicher sein will, dass es weiter geht, kann man eine "Selbstheilung für diese Fälle einbauen durch ein erneutes Triggern per Watchdog. Wenn man das nicht will, einfach E14 noch höher wählen und den Watchdog-Krams weglassen.
    • E15 + E16: Manche Register liefern im Betrieb Bursts oder auch mal länger Extremwerte (x8000000, xFFFFFFFF,... z.B. SMA-WR nachts als Momentanleistung), die man nicht in seinen Datenarchieven ahben möchte. Daher kann man übliche Werte per Werteliste ausfiltern (E15) und durch einen Wert für alle oder für jeden Filterwert spezifisch ersetzen. Meist dürfte eine E16 = 0 passen.
    • E18: Auswahl,ob per FC3 oder FC4 ausgelesen werden soll. Bei manchen Geräten kann FC3 nur 3xxxxx-Register, und FC4 nur 4xxxxx-Register lesen; bei anderen ist es egal. Default ist 3 = FC3
    • E19: Optionales RegisterOffset: Entweder kein Offset oder ein statisches oder ein Typ-Abhängiges oder eine Kombination dessen.
    • A16: Timestamp letzte Aktualisierung; dient vor allem dem Triggern von Watchdogs
    • A17: Timestamp letzte Aktualisierung für Visu

    weitere Logik-Beispiele:
    Umsetzen der ENUM-Codes auf Texte für den SMA SI - Quelle (und sicher auch die Rechte darauf): SMA bzw. aus diversen SMA.-Modbus-Dokus zusammen geschrieben
    Unbenannt.JPG
    jeweils E3 und E4 für den Wenn-Dann-Sonst-Variabel-LBS:
    303;1461;1462;1463
    Aus (303);Netz zugeschaltet (1461);Backup nicht verfügbar (1462);Backup (1463)

    46;1773;1774;1775;1776;1777;1778
    Batterie (46);Keine Anforderung (1773);Last (1774);Zeitsteuerung (1775);Manuell eine Stunde (1776);Manueller Start (1777);Externe Quelle (1778)

    1779;1780;1781
    Getrennt (1779);Öffentliches Stromnetz (1780);Inselnetz (1781)

    303;1394;1461;1466;1787;2183;2184;2185;2186;3068;1 6777213
    Aus(303);Warte auf gültiges AC-Netz (1394);Netz zugeschaltet (1461);Warten (1466);Initialisierung (1787);Netzbetrieb ohne Rückspeisen (2183);Energiesparen am Netz (2184);Beenden des Energiesparens am Netz (2185);Starten des Energiesparens am Netz (2186);Netzbetrieb mit Rückspeisen (3068); keine Info (16777213)

    303;1392;1787;1788;1789;1790;1791;1792;1793;1794;1 795;1796
    Aus (303);1392 = Fehler (1392);Initialisierung (1787);Bereit (1788); Warmlauf (1789);Synchronisieren (1790);Zugeschaltet (1791);Neusynchronisieren (1792);Generatortrennung (1793);Nachlauf (1794);Verriegelt (1795);Gesperrt nach Fehler (1796)

    2614;2615;2616;2617;2618
    Eigenverbrauchsbereich (2614);Ladezustandserhaltungsbereich (2615);Ersatzstrombereich (2616);Tiefentladeschutzbereich (2617);Tiefentladebereich (2618)

    35;303;307;455
    Fehler (35);Aus (303);OK (307);Warnung (455)

    0;51;276;295;303;308;309;311;336;337;338;381;455;4 61;973;1041;1042;1069;1070;1071;1072;1073;1074;107 5;1076;1077;1078;1079;1387;1388;1389;1390;1391;139 2;1393;1394;1395;1396;1455;1466;1467;1468;1469;147 0;1471;1472;1473;1474;1475;1476;1477;1478;1479;148 0
    kein Event (0); Geschlossen (51);Momentanwert (276);MPP (295);Aus (303);Ein (308);Betrieb (309);Offen (311);Hersteller kontaktieren (336);Installateur kontaktieren (337);Ungültig (338);Stopp (381);Warnung (455);SMA (Herstellerangabe) (461);Nicht eingestellt (973);Kapazitiv (1041);Induktiv (1042);Blindleistungs-/Spannungskennlinie Q(U) (1069);Blindleistung Q, direkte Vorgabe (1070);Blindleistung konst. Q (kvar) (1071);Blindleistung Q, Vorgabe durch Anlagensteuerung (1072);Blindleistung Q(P) (1073);cos ?, direkte Vorgabe (1074);cos ?, Vorgabe durch Anlagensteuerung (1075);cos ?(P)-Kennlinie (1076);Wirkleistungsbegrenzung P (W) (1077);Wirkleistungsbegrenzung P in (%) von PMAX (1078);Wirkleistungsbegrenzung P durch Anlagensteuerung (1079);Blindleistung Q, Vorgabe über analogen Eingang (1387);Cos ?, Vorgabe über analogen Eingang (1388);Blindleistungs-/Spannungskennlinie Q(U) mit Hysterese und Totband (1389);Wirkleistungsbegrenzung P über analogen Eingang (1390);Wirkleistungsbegrenzung P über digitale Eingänge (1391);Fehler (1392);Warte auf PV-Spannung (1393);Warte auf gültiges AC-Netz (1394);DC-Bereich (1395);AC-Netz (1396);Not-Aus (1455);Warten (1466);Starten (1467);MPP-Suche (1468);Herunterfahren (1469);Störung (1470);Warn-/Fehler-Mail OK (1471);Warn-/Fehler-Mail nicht OK (1472);Anlageninfo-Mail OK (1473);Anlageninfo-Mail nicht OK (1474);Fehler-Mail OK (1475);Fehler-Mail nicht OK (1476);Warn-Mail OK (1477);Warn-Mail nicht OK (1478);Warten nach Netzunterbrechung (1479);Warte auf EVU (1480)

    71;84;87;89;90;125;132;133;134;141;145;148;156;168 ;189;208;520;540;542;543;546;547;973;1004;1007;125 5;1598
    Gerätestörung (71);Überstrom Netz (HW) (84);Netzfrequenzstörung (87);Netztrennstelle(89);Netzspannungsmessung Abweichung (90);Überspannung Eingang A (SW) (125);Systemdaten defekt (132);Zugriff auf Systemdaten nicht möglich (133);Systemdaten hergestellt (134);Derating lag vor (141);Relaisfehler (145);Interne Kommunikation (148);Programmablauf (Betrieb) (156);Codespeicher defekt (168);Programmablauf (Statusmaschine) (189);Programmablauf (Watchdog) (208);Übertemperatur Trafobereich (520);GFDI Fuse Open (PV ist ungleich Erde) (540);Interne Messvergleichsstörung (542);Interne Messvergleichsstörung (543);Störung in der Messwerterfassung (546);Netzstörung von einem anderem Gerät gemeldet (547);Keine Meldung (973);Automatische Netztyperkennung ist fehlgeschlagen (1004);Zu großer Strom in der GFDI/Erdstrom Strommessung (1007);Netzüber/-unterspannung wurde festgestellt (1255);Transformator falsch angeschlossen (1598)
    Zuletzt geändert von saegefisch; 08.06.2021, 22:19.

    #2
    Parameter SMA (für copy & paste)
    • Grundsätzlich für SMA (Details zu Registern: siehe SMA-Doku)
      • E7 = 3
      • E11 = 4
    SMA WR: E8 =
    >> für Auswertung nötig
    30775;"Leistung [W]";int32
    30517;"Tagesertrag [Wh]";int64
    30513;"Gesamtertrag [Wh]";int64

    >> zur Info - Status des Geräts
    30201;"Zustand/Mode";uint32
    30197;"EventID";uint32
    30213;"Meldung";uint32

    SMA SI: E8 =
    >> Batterietatus - für Auswertung und RLZ nötig
    30775;"BatLadung [W]";int32
    30845;"BatStatus(SoC) [%]";uint32
    30849:"BatTemp [C]";int32
    31009;"BatLowLimitNormal [%]";uint32
    30595;"BatAufgenommen [Wh]";uint32
    30597;"BatAbgegeben [Wh]";uint32
    40187;"BatNominalKapa [Wh]";uint32
    30847;"BatGesundheit(SoH) [%]";uint32

    >> zur Info - Status des Geräts und Netz
    30877;"Power supply status";uint32
    30879;"Reason for generator request";uint32
    30881;"PV mains connection";uint32
    30883;"Status of utility grid";uint32
    30917;"Generator status";uint32
    31057;"Status battery application area";uint32
    30201;"Zustand/Mode";uint32
    30197;"EventID";uint32
    30213;"Meldung";uint32
    30803;"Netzfrequenz [Hz]";uint32
    30901;"Netzfrequenz externer Netzanschlus [Hz]";uint32

    >> weitere teste ich noch, ob Mehrwert -> bin für Anregungen dankbar
    30585;"Netzausfallzeit [s]";uint32
    30199;"Zeit bis Netzzuschaltungsversuch [s]";uint32
    30599;"Anzahl Netzzuschaltungen";uint32
    ...
    Zuletzt geändert von saegefisch; 17.05.2021, 22:53.

    Kommentar


      #3
      Hi Carsten,

      habe versucht den LBS zum Laufen zu bekommen, iwo scheine ich aber einen Fehler zu machen.

      Habe den modbus-tcp-client installiert mit

      Code:
      composer require aldas/modbus-tcp-client
      Lief sauber durch.

      LBS normal installiert. Leider bekomme ich folgenden Fehlercode:

      Code:
       [TABLE="border: 0, cellpadding: 0, cellspacing: 0"]
       	 		[TR]
       			[TD]2021-05-18 20:56:35[/TD]
       			[TD]282371[/TD]
       			[TD]?[/TD]
       			[TD]2320[/TD]
       			[TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19001586.php | Fehlercode: 2 | Zeile: 4 | require(/usr/local/edomi/www/data/liveproject/lbs/../../../../main/include/php/modbus-tcp-client/vendor/autoload.php): failed to open stream: No such file or directory[/TD]
       			[TD]ERROR[/TD]
       		[/TR]
       	 [/TABLE]

      Kommentar


        #4
        Hi Jann,
        Und alles davor in der Anleitung auch genau so gemacht? Richtiges Verzeichnis? Und das mit den composer.json/.lock? Ich habe damals bei mir extra ausschließlich auf DEV entwickelt und erst nach am Ende der Reifung die Installation auf meinem noch recht puren PROD in einem Rutsch genau wie beschrieben. Daher hatte ich gehofft, dass es so geht (mit allen Schritten) - weil bei mir klappte es so...

        Die ../vendor/autoload.php wird vom composer erstellt. Wenn sie fehlt, dann lief da was schief. Was sagt denn
        Code:
        ll /usr/local/edomi/main/include/php/modbus-tcp-client/vendor
        ?

        Das sollte etwa so aussehen:
        Code:
        drwxr-xr-x 3 root root 4096 10. Mai 21:08 aldas
        -rw-r--r-- 1 root root 178 10. Mai 21:08 autoload.php
        drwxr-xr-x 2 root root 4096 10. Mai 21:08 composer
        Zuletzt geändert von saegefisch; 18.05.2021, 21:17.

        Kommentar


          #5
          Um die Komplexität der Fehlersuche zu reduzieren, nehmen wir mal edomi aus der Gleichung und testen die Installation mit einem lokalen kleinen PHP-Script. Das geht erheblich effizienter. Wenn das geht, dann geht es mit edomi und dem LBS sehr wahrscheinlich sofort.

          Bitte mal anlegen
          Code:
          nano /usr/local/edomi/main/include/php/modbus-tcp-client/test.php
          Code:
          <?php
          use ModbusTcpClient\Composer\Read\ReadRegistersBuilder ;
          use ModbusTcpClient\Network\NonBlockingClient;
          use ModbusTcpClient\Utils\Endian;
          
          require __DIR__ . '/vendor/autoload.php';
          
          // IP + Port + ID pflegen <<<<<<<<<<<<<<<<<<<<<<<<<<
          $ip = '192.168.xxx.yyy';
          $port = '502';
          $slaveID = '3';
          
          // Bei Bedarf ENDIAN ändern <<<<<<<<<<<<<<<<<<<<<<<<
          Endian::$defaultEndian = Endian::BIG_ENDIAN;
          
          // Register-JSON pflegen <<<<<<<<<<<<<<<<<<<<<<<<<<<
          // Achtung: Bei letzter Zeile darf hinter } kein , mehr folgen!
          $json = '[
          {"address":"30845","type":"uint32","name":"BatStat "},
          {"address":"30775","type":"int32","name":"BatLoadPower"}
          ]';
          
          // ================================================================
          // hier ist nix mehr zu machen...
          $registers = json_decode($json, true);
          $uri = $ip.':'.$port;
          foreach($registers as $i=>$innerArray) {
          $registers[$i]['uri'] = $uri;
          $registers[$i]['unitId'] = $slaveID;
          }
          print_r($registers);
          try {
          $fc3 = ReadRegistersBuilder::newReadHoldingRegisters()
          ->allFromArray($registers)
          ->build();
          } catch (Exception $e) {
          echo ('FEHLER: '.$e->getMessage()."\n");
          return;
          }
          print_r('Anzahl Register gesamt: '.count($registers));echo("\n");
          print_r('Anzahl Requests gesamt: '.count($fc3));echo("\n");
          $response = (new NonBlockingClient(['readTimeoutSec' => 2.0, 'connectTimeoutSec' => 2.0]))->sendRequests($fc3);
          print_r($response);
          ?>
          Wenn Du 1 oder 2 Register im JSON für Dein Gerät parametrisierst, sollte da etwas heraus kommen:
          Code:
          php /usr/local/edomi/main/include/php/modbus-tcp-client/test.php
          Code:
          Array
          (
          [0] => Array
          (
          [address] => 30845
          [type] => uint32
          [name] => BatStat
          [uri] => 192.168.xxx.yyy:502
          [unitId] => 3
          )
          
          [1] => Array
          (
          [address] => 30775
          [type] => int32
          [name] => BatLoadPower
          [uri] => 192.168.xxx.yyy:502
          [unitId] => 3
          )
          
          )
          Anzahl Register gesamt: 2
          Anzahl Requests gesamt: 1
          ModbusTcpClient\Network\ResultContainer Object
          (
          [data:ModbusTcpClient\Network\ResultContainer:private] => Array
          (
          [BatLoadPower] => 650
          [BatStat] => 55
          )
          
          [errors:ModbusTcpClient\Network\ResultContainer:private] => Array
          (
          )
          
          )
          Zuletzt geändert von saegefisch; 19.05.2021, 22:01.

          Kommentar


            #6
            Da scheint ein Fehler zu sein....

            Also, composer muss gestartet werden, wenn man ein cd in die jeweilige Ordnerstruktur gemacht hat. Habe ich also gemacht

            Code:
            cd /usr/local/edomi/main/include/php
            wenn ich nun den composer starte, läuft er durch und erstellt auch den Ordner vendor, aber nicht den Ordner modbus-tcp-client....

            Erst nachdem ich händisch den Ordner "modbus-tcp-client" erstellt habe, den cd in den Ordner gesetzt habe und den composer nochmal durchlaufen ließ, hat er die Dateien wie erwartet erstellt.

            Nach Neustart von Edomi kommen nun noch Fehlercodes, die aber er inhaltlich zum LBS passen und ihn jetzt aber laufen lassen, glaube ich zumindestens:

            Code:
             [TABLE="border: 0, cellpadding: 0, cellspacing: 0"]
              [TR]
              [TD]2021-05-18 22:28:46[/TD]
              [TD]645998[/TD]
              [TD]?[/TD]
              [TD]17371[/TD]
              [TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19001586.php | Fehlercode: 8 | Zeile: 123 | Undefined offset: 2[/TD]
              [TD]ERROR[/TD]
              [/TR]
              [TR]
              [TD]2021-05-18 22:28:46[/TD]
              [TD]646775[/TD]
              [TD]?[/TD]
              [TD]17371[/TD]
              [TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19001586.php | Fehlercode: 8 | Zeile: 123 | Undefined offset: 2[/TD]
              [TD]ERROR[/TD]
              [/TR]
              [TR]
              [TD]2021-05-18 22:28:46[/TD]
              [TD]647135[/TD]
              [TD]?[/TD]
              [TD]17371[/TD]
              [TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19001586.php | Fehlercode: 8 | Zeile: 127 | Undefined offset: 2[/TD]
              [TD]ERROR[/TD]
              [/TR]
              [TR]
              [TD]2021-05-18 22:28:46[/TD]
              [TD]647456[/TD]
              [TD]?[/TD]
              [TD]17371[/TD]
              [TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19001586.php | Fehlercode: 8 | Zeile: 127 | Undefined offset: 2[/TD]
              [TD]ERROR[/TD]
              [/TR]
              [TR]
              [TD]2021-05-18 22:28:46[/TD]
              [TD]647717[/TD]
              [TD]?[/TD]
              [TD]17371[/TD]
              [TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19001586.php | Fehlercode: 8 | Zeile: 131 | Undefined offset: 2[/TD]
              [TD]ERROR[/TD]
              [/TR]
              [TR]
              [TD]2021-05-18 22:28:46[/TD]
              [TD]648192[/TD]
              [TD]?[/TD]
              [TD]17371[/TD]
              [TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19001586.php | Fehlercode: 8 | Zeile: 131 | Undefined offset: 2[/TD]
              [TD]ERROR[/TD]
              [/TR]
              [TR]
              [TD]2021-05-18 22:28:46[/TD]
              [TD]648622[/TD]
              [TD]?[/TD]
              [TD]17371[/TD]
              [TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19001586.php | Fehlercode: 8 | Zeile: 136 | Undefined offset: 2[/TD]
              [TD]ERROR[/TD]
              [/TR]
              [TR]
              [TD]2021-05-18 22:28:46[/TD]
              [TD]667079[/TD]
              [TD]?[/TD]
              [TD]17371[/TD]
              [TD]Datei: /usr/local/edomi/main/include/php/modbus-tcp-client/vendor/aldas/modbus-tcp-client/src/Composer/Read/ReadRegistersBuilder.php | Fehlercode: 0 | Zeile: 110 | empty or unknown type for address given[/TD]
              [TD]EXCEPTION[/TD]
              [/TR]
              [/TABLE]

            Kommentar


              #7
              Jetzt wird's spannend...

              Wie sieht denn Dein E8 aus? Damit ich die Meldungen besser verstehe?

              Kommentar


                #8
                Ursprünglich das, was im LBS stand. Habe E8 mal geleert, danach kam dieses Ergebnis:

                Code:
                [TR]
                [TD]2021-05-18 22:28:46[/TD]
                [TD]667079[/TD]
                [TD]?[/TD]
                [TD]17371[/TD]
                [TD]Datei: /usr/local/edomi/main/include/php/modbus-tcp-client/vendor/aldas/modbus-tcp-client/src/Composer/Read/ReadRegistersBuilder.php | Fehlercode: 0 | Zeile: 110 | empty or unknown type for address given[/TD]
                [TD]EXCEPTION[/TD]
                [/TR]
                [TR]
                [TD]2021-05-18 22:41:43[/TD]
                [TD]328428[/TD]
                [TD]?[/TD]
                [TD]23738[/TD]
                [TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19001586.php | Fehlercode: 8 | Zeile: 123 | Undefined offset: 2[/TD]
                [TD]ERROR[/TD]
                [/TR]
                [TR]
                [TD]2021-05-18 22:41:43[/TD]
                [TD]329144[/TD]
                [TD]?[/TD]
                [TD]23738[/TD]
                [TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19001586.php | Fehlercode: 8 | Zeile: 123 | Undefined offset: 2[/TD]
                [TD]ERROR[/TD]
                [/TR]
                [TR]
                [TD]2021-05-18 22:41:43[/TD]
                [TD]329644[/TD]
                [TD]?[/TD]
                [TD]23738[/TD]
                [TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19001586.php | Fehlercode: 8 | Zeile: 127 | Undefined offset: 2[/TD]
                [TD]ERROR[/TD]
                [/TR]
                [TR]
                [TD]2021-05-18 22:41:43[/TD]
                [TD]329862[/TD]
                [TD]?[/TD]
                [TD]23738[/TD]
                [TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19001586.php | Fehlercode: 8 | Zeile: 127 | Undefined offset: 2[/TD]
                [TD]ERROR[/TD]
                [/TR]
                [TR]
                [TD]2021-05-18 22:41:43[/TD]
                [TD]330164[/TD]
                [TD]?[/TD]
                [TD]23738[/TD]
                [TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19001586.php | Fehlercode: 8 | Zeile: 131 | Undefined offset: 2[/TD]
                [TD]ERROR[/TD]
                [/TR]
                [TR]
                [TD]2021-05-18 22:41:43[/TD]
                [TD]330619[/TD]
                [TD]?[/TD]
                [TD]23738[/TD]
                [TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19001586.php | Fehlercode: 8 | Zeile: 131 | Undefined offset: 2[/TD]
                [TD]ERROR[/TD]
                [/TR]
                [TR]
                [TD]2021-05-18 22:41:43[/TD]
                [TD]330851[/TD]
                [TD]?[/TD]
                [TD]23738[/TD]
                [TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19001586.php | Fehlercode: 8 | Zeile: 136 | Undefined offset: 1[/TD]
                [TD]ERROR[/TD]
                [/TR]
                [TR]
                [TD]2021-05-18 22:41:43[/TD]
                [TD]331123[/TD]
                [TD]?[/TD]
                [TD]23738[/TD]
                [TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19001586.php | Fehlercode: 8 | Zeile: 136 | Undefined offset: 2[/TD]
                [TD]ERROR[/TD]
                [/TR]
                [TR]
                [TD]2021-05-18 22:41:43[/TD]
                [TD]340306[/TD]
                [TD]?[/TD]
                [TD]23738[/TD]
                [TD]Datei: /usr/local/edomi/main/include/php/modbus-tcp-client/vendor/aldas/modbus-tcp-client/src/Composer/Read/ReadRegistersBuilder.php | Fehlercode: 0 | Zeile: 110 | empty or unknown type for address given[/TD]
                [TD]EXCEPTION[/TD]
                [/TR]

                Kommentar


                  #9
                  Naja, irgendwie ist E8 schon IMPORTANT...

                  Leer an E8 habe ich ganz offensichtlich noch nicht abgefangen (guter Hinweis -> todo für mich), aber Du musst schon irgend was zum Futter geben.

                  Zumindest 1...
                  Register (zu Deinem Gerät passend),
                  Name(beliebig),
                  Format (passend zum Register laut Doku Deines Geräts --> siehe hierzu LBS-HIlfe zu den Typen)

                  z.B:
                  Code:
                  30775;"Leistung [W]";int32
                  Wenn Dein Gerät ein SMA ist, kann mein Krams passen, aber für jedes andere Gerät wird's andere Register brauchen - vermute ich. Doku des Herstellers...

                  Kommentar


                    #10
                    Okay!

                    Lass mich das morgen prüfen, klingt plausibel!!!

                    Bekommst noch eine Rückmeldung

                    Kommentar


                      #11
                      Deine Fehlermeldung kann ich reproduzieren, wenn ich E8 leer lasse. Im V0.2 wird das abgefangen werden.
                      Zuletzt geändert von saegefisch; 18.05.2021, 22:07.

                      Kommentar


                        #12
                        Zitat von Janncsi Beitrag anzeigen
                        wenn ich nun den composer starte, läuft er durch und erstellt auch den Ordner vendor, aber nicht den Ordner modbus-tcp-client....
                        Zu Deiner Nachricht von vorhin... mir scheint weiterhin, dass Du von meiner Installationsanleitung in der Hilfe des LBS abgewichen bist. Denn den Ordner bekommt man automatisch mit
                        Code:
                        [...]
                        cd /usr/local/edomi/main/include/php
                        git clone https://github.com/aldas/modbus-tcp-client
                        [...]
                        erst DANACH bemüht man den Composer mit der Library. Erst ab dann ist alles da und dem Composer bekannt.

                        Ab dann könne alle künftigen Updates erfolgen mit composer require aldas/modbus-tcp-client (einzeln) oder composer update (alle installierten; sofern es denn mehrere sind). Mir scheint, Du hast eine Abkürzung versucht...
                        Zuletzt geändert von saegefisch; 18.05.2021, 23:55.

                        Kommentar


                          #13
                          So,

                          habe dann endlich in dem LBS die Anleitung zur Installation gefunden Verbesserungstipp saegefisch : Pack den Teil der Installation unbedingt an den Anfang des LBS, man übersieht dies sonst sofort.
                          Ich habe das Testscript mal probiert und bekomme diese Ausgabe:
                          Code:
                          [root@edomi php]# php /usr/local/edomi/main/include/php/modbus-tcp-client/test.php
                          Array
                          (
                          [0] => Array
                          (
                          [address] => 40000
                          [type] => u32
                          [name] => Date&Time
                          [uri] => 10.0.20.101:502
                          [unitId] => 2
                          )
                          
                          )
                          PHP Fatal error: Uncaught ModbusTcpClient\Exception\InvalidArgumentException : empty or unknown type for address given in /usr/local/edomi/main/include/php/modbus-tcp-client/vendor/aldas/modbus-tcp-client/src/Composer/Read/ReadRegistersBuilder.php:110
                          Stack trace:
                          #0 /usr/local/edomi/main/include/php/modbus-tcp-client/vendor/aldas/modbus-tcp-client/src/Composer/Read/ReadRegistersBuilder.php(77): ModbusTcpClient\Composer\Read\ReadRegistersBuilder->fromArray(Array)
                          #1 /usr/local/edomi/main/include/php/modbus-tcp-client/test.php(32): ModbusTcpClient\Composer\Read\ReadRegistersBuilder->allFromArray(Array)
                          #2 {main}
                          thrown in /usr/local/edomi/main/include/php/modbus-tcp-client/vendor/aldas/modbus-tcp-client/src/Composer/Read/ReadRegistersBuilder.php on line 110
                          Mein Modbus-Gerät ist über andere Wege erreichbar, daher kann ich dies auf jeden Fall als Fehler ausschließen.

                          LG

                          Kommentar


                            #14
                            Die Installationsanleitung ist sehr bewusst von mir ganz hinten. Weil die brauche ich nur ein Mal oder ganz selten. Die stört vorne - zumindest geht mir das so. Ich find's schon okay, dass man mal ganz durch scrollt und beim Wort Installation zuckt. Ich strukturiere ja schon viel mit Formatierung. Werde aber mal vorne eine Hinweis auf die Installation machen... guter Hinweis

                            Tatsächlich gebe ich mir bei meiner Doku stets viel Mühe, um Fragen durch bereits gelieferte Antworten und Informationen vermeiden zu helfen. Diese Dinge sind bei mir nie grundlos. Ich mag Doku und Transparenz. Ja, okay, ich mach vielleicht öfter ein wenig zu viel Text... Aber ich bin für umfassende Anleitungen stets dankbar und gebe nur, was ich selber schätze. Was Du willst zu lesen haben, das füge auch anderen zu...

                            Is' jetzt wirklich nicht bös' gemeint, aber das Lesen meiner Anleitung ist zumindest dieses Mal nicht Deine Stärke gewesen... Du hättest Dir viel Zeit erspart und schnellen Erfolg geschenkt. Es gibt ein eigenes Kapitel für Typen-Definition. Entweder hast Du nicht gut gelesen oder ich habe nicht gut erklärt. Bitte lass' mich wissen, wenn es missverständlich ist:

                            Jetzt aber zur Sache: Typ "u32"? --> versuch mal "uint32" wie oben auch in meinem Beispiel

                            PS: Oh, da ist tatsächlich ein Buchstabendreher in der Anleitung, dort steht fälschlich "unit32"... danke auch für den Hinweis! Wird in V0.2 korrigiert

                            Nachtrag: Mit V0.2 werden Exceptions bei der Register-Parametrisierung auch abgefangen. Daher gut, dass Du darauf gestoßen bist, dass macht den LBS robuster. Das Script oben habe ich auch ergänzt. Bei einem falschen Typ kommt jetzt
                            Code:
                            FEHLER: empty or unknown type for address given
                            Zuletzt geändert von saegefisch; 19.05.2021, 22:03. Grund: Nachtrag

                            Kommentar


                              #15
                              Ich liebe deine Doku und deinen vielen Text, das weißt du

                              Der Inhalt ist super, nur die Struktur für jemanden, der nicht im Thema ist, ist bei dem LBS echt "ungewöhnlich" im Vergleich zu anderen LBS. Ich denke das war der Hauptgrund, wieso ich einiges übersprang. Und ja, manchmal ist meine Euphorie zu extrem und unbedacht

                              Aber ich habe ihn nun am Laufen den Baustein Gerade einen ersten Output generiert!

                              Werde ihn morgen weiter ausbauen auf alle relevanten Werte

                              Danke bis hierhin

                              Kommentar

                              Lädt...
                              X