Ankündigung

Einklappen
Keine Ankündigung bisher.

LBS: 19001030: Modbus TCP Master Read

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

    LBS: 19001030: Modbus TCP Master Read

    Hallo zusammen,

    hier mal mein erster LBS um per Modbus System abzufragen.
    Ich nutze es zur Anbindung meiner PV Anlage.

    Würde mich über Feedback freuen

    http://service.knx-user-forum.de/?co...ad&id=19001030


    Ein Problem das ich bei mir habe ist das der LBS spontan manchmal stopped weil er keine Verbindung mit dem Slave mehr bekommt.
    Aber ich denke das ist ein Problem des Slaves und nicht vom LBS...

    Viele Grüße
    Michael
    Gruß
    Michael

    #2
    Morgen,


    Also ich hab den heute morgen mal gtestet mit einem Siemens PAC3200 aber ich komm nicht weiter ich bekomm keine Daten raus.
    Log:
    Code:
     [TABLE="border: 0, cellpadding: 0, cellspacing: 0"]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]702617[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: START ModbusMaster Daemon[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]704135[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: v3:9[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]704492[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: inputs:[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]704535[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: ================ ARRAY/OBJECT START ================[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]704579[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: ["9"][/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]704615[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: ================ ARRAY/OBJECT END ================[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]704973[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: i:0[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]705277[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: input:9[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]705604[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: address:30001[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]708374[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: Modbus Error:[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]708426[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: ================ ARRAY/OBJECT START ================[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]708470[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: {"host":"10.10.10.1","port":"502","client":"","client_port":"502","status":"readMultipleRegisters: START\nConnected\nPacket: 89f600000006010375310002\nSend\nWait data ... \nData received\nPacket: 89f600000003018302\n","timeout_sec":5,"endianness":0,"socket_protocol":"TCP"}[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]708512[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: ================ ARRAY/OBJECT END ================[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]708817[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: Modbus Error:[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]708857[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: ================ ARRAY/OBJECT START ================[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]708893[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: {}[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]708925[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: ================ ARRAY/OBJECT END ================[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]709240[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: Retries:0[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:36[/TD]
     			[TD]709682[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: Delay:1000[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:37[/TD]
     			[TD]710331[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: end of delay[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:37[/TD]
     			[TD]710730[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: i:0[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:37[/TD]
     			[TD]711040[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: input:9[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:37[/TD]
     			[TD]711364[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: address:30001[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:38[/TD]
     			[TD]714590[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: Modbus Error:[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:38[/TD]
     			[TD]714677[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: ================ ARRAY/OBJECT START ================[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:38[/TD]
     			[TD]714721[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: {"host":"10.10.10.1","port":"502","client":"","client_port":"502","status":"readMultipleRegisters: START\nConnected\nPacket: f45000000006010375310002\nSend\nWait data ... \nData received\nPacket: f45000000003018302\n","timeout_sec":5,"endianness":0,"socket_protocol":"TCP"}[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:38[/TD]
     			[TD]714761[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: ================ ARRAY/OBJECT END ================[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:38[/TD]
     			[TD]715064[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: Modbus Error:[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:38[/TD]
     			[TD]715102[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: ================ ARRAY/OBJECT START ================[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:38[/TD]
     			[TD]715137[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: {}[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:38[/TD]
     			[TD]715171[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: ================ ARRAY/OBJECT END ================[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:38[/TD]
     			[TD]715528[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: Retries:1[/TD]
     		[/TR]
    [TR]
    [TD]2017-03-04 07:50:38[/TD]
     			[TD]715987[/TD]
     			[TD]11802[/TD]
     			[TD]debug[/TD]
     			[TD]EXE19001030 [v0.1]: Delay:1000[/TD]
     		[/TR]
    [/TABLE]
    edomimodbus.jpg

    hir ist auch noch die Anleitung von der SiemensPac da gehts so bei seite 42 los mit den Modbus adressen

    es ist bestimmt noch zu früh und hab einfach nur was banales übersehn PS: die php aus der ZIP habe ich alle in den "/usr/local/edomi/main/include/php" ordner gemacht ohne unterordner

    Kommentar


      #3
      Hi,

      ich hab mir mal "kurz" die Anleitung angeschaut und zuerst mal nicht die Addresse 30001 gefunden. Bist du sicher das die richtig ist?
      Du must auch aufpassen das du den Wert mit Funktion 0x3 abrufen kannst weil andere hab ich noch nicht implementiert.

      Dieses Wochenende ist ein bisschen eng aber nächste Woche sollte ich mehr Zeit haben.
      Das mit den includes past so.

      Ich hänge mal eine simple php für die Konsole mit an. Damit kann man am einfachsten Testen.
      Einfach in den gleichen Ordern wie die anderen php files kopieren und mit
      Code:
      php -n modbus.php
      ausführen.
      Du must natürlich die Addressen anpassen und ach eventuell den "require" ab ändern.
      PHP-Code:
          <?php
      //echo dirname(__FILE__) . '/ModbusMaster.php';
          
      require_once dirname(__FILE__) . '/ModbusMaster.php';

          
      // Create Modbus object

          
      $modbus = new ModbusMaster("192.168.1.2""TCP");

          try {
              
      // FC 3
              
      $recData $modbus->readMultipleRegisters(0400821);
          }
          catch (
      Exception $e) {
              
      // Print error information if any
              
      echo $modbus;
              echo 
      $e;
              exit;
          }

          
      // Print status information
          
      echo "</br>Status:</br>" $modbus;

          
      // Print read data
          
      echo "Data:";
          echo 
      PhpType::bytes2signedInt($recData);

          
      //echo "</br>";
          
      ?>
      Gruß
      Michael
      Gruß
      Michael

      Kommentar


        #4
        Okay die datei war schon sehr Hilfreich damit ich eine Antwort bekomme muss ich doch die 300001 durch 1 ersetzen ...
        beim letzen versuch mit IO.Broker gings nur mit 30001
        Jetzt das nächste Problem ich vermute das wird man nicht so einfach lösen können hab mir grad schon nen ast gegoogelt.
        der wert der ankommt ist 32Bit Swap Float ausgegeben wird
        Code:
        4.7325912078122E-8
        da bei Typ nur Float angegeben werden kann ich hab auch nichts gefunden das es swapfloat irgendwie gibt. vllt. hast du noch ne idee denke du steckst noch tiefer in der materie

        Kommentar


          #5
          Ich denke was du mit Swap Float meinst ist die Endianess, das heißt die Bytereihenfolge.
          Das kann per Parameter angegeben werden hab ich aber im LBS nicht implementiert.

          Versuch mal im xxxxxbytes2xxxxxx($recData, true); das Umzuschalten.
          Gruß
          Michael

          Kommentar


            #6
            So ich hab zumindestens ein kleines Fixit für mein Problem wenn du das mid der Endianess iwann mal einfügen solltest müsste man dort vllt. noch etwas "basteln"

            Und Zwar liegt das Problem in der PhpType.php ab zeile 235
            PHP-Code:
                    if ($endianness == 0)
                        
            $value = (($data[3] & 0xFF)<<16) |
                                ((
            $data[2] & 0xFF)<<24) |
                                ((
            $data[1] & 0xFF)) |
                                ((
            $data[0] & 0xFF)<<8);
                    else
                        
            $value = (($data[3] & 0xFF)<<24) |
                                ((
            $data[2] & 0xFF)<<16) |
                                ((
            $data[1] & 0xFF)<<8) |
                                ((
            $data[0] & 0xFF));

                    return 
            $value
            die muss für die Siemens PAC da die daten in Byte Swap oder Float Swap wie man es auch nennen mag sendet ( im io Broker ist es ganz normal unter Float Big Endian) folgendermaßen ändern
            PHP-Code:
                    if ($endianness == 0)
                        
            $value = (($data[3] & 0xFF)) |
                                ((
            $data[2] & 0xFF)<<8) |
                                ((
            $data[1] & 0xFF))<<16 |
                                ((
            $data[0] & 0xFF)<<24);
                    else
                        
            $value = (($data[3] & 0xFF)<<24) |
                                ((
            $data[2] & 0xFF)<<16) |
                                ((
            $data[1] & 0xFF)<<8) |
                                ((
            $data[0] & 0xFF));

                    return 
            $value
            also eigt. nur das die Bytes in der falschen Reihenfolge ankommen ist jetzt die Frage ob das generell ein Implementirungsfehler in der PHPModbus ist oder ob Siemens da ihr eigenes Süppchen Kocht

            Kommentar


              #7
              Hm, sieht so aus also ob bei dir jeweils 2 Bytes "swapped" sind, das sieht eher so aus also ob dieses Float Swat tatsächlich ein eigenes Format ist wenn das im IO Broker schon so drin ist.
              Ich muss jetzt mal in mich gehen wie man das am besten löst... an den Modbus Libs will ich eigentlich wenn möglich nichts ändern... (Mal von meiner kleinen Logging modifikation abgesehen). Entweder das ich die Typumwandlung direkt im LBS mache oder das man die Bytes "roh" ausgibt und sich einenen kleinen LBS baut der das Umwandelt.
              Gruß
              Michael

              Kommentar


                #8
                Ja ist halt die Frage ob das oft verwendet wird. ansonnsten wäre vllt ne einfachere möglichkeit die Modbus Libs zu forken sind ja eigt. nur funktionen die dazu kommen.
                Bin mir auch nicht sicher obs bei Modbus überhaupt noch weitergeht die letze Aktualisierung ist schon 2 Jahre her wenn ich mich nicht verschaut hab

                Wie hast du das eigt. gelöst wenn du mehrer der LBS´s hast die auf ein und die Selbe IP adresse zugreifen? ich bin hingegangen und hab den ersten lbs auf Loop gestellt und den "A9" zum nächsten LBS weitergeleitet den aber nicht auf Loop gestellt.
                Oder war der "A9" für was anderes geplant ?

                Mir ist grad nochn kleiner Bug aufgefallen

                wenn ich "E7" loop auf "0" setze kommt nach jedem start von edomi im log ein fehler

                Code:
                 [TABLE="border: 0, cellpadding: 0, cellspacing: 0"]
                [TR]
                [TD]2017-03-07 13:35:08[/TD]
                 			[TD]185054[/TD]
                 			[TD]?[/TD]
                 			[TD]20251[/TD]
                 			[TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19001030.php | Fehlercode: 1 | Zeile: 152 | Call to undefined function str()[/TD]
                 			[TD]FATALERROR[/TD]
                 		[/TR]
                [/TABLE]
                Zuletzt geändert von Peterich; 07.03.2017, 13:36.

                Kommentar


                  #9
                  Fehler gefunden und hoffentlich behoben
                  Das mit A9 ist genau so geplant, steht auch in der Hilfe
                  Ich missbrauche ihn auch für einen Watchdog weil meine PV Anlage abundzu ihre 30s hat in der Sie nicht will und ich so den LBS neu starten kann.

                  In v0.2 gibts jetzt den Type 6 als Swap Float, probier mal ob das bei dir so geht.
                  Ich hab auch in V4 die Endianess gepackt, wird aber nur für die Swap Float genutzt.
                  Gruß
                  Michael

                  Kommentar


                    #10
                    Also Funktioniert nicht ich hab mir mal kurz angeschaut was du für ne änderung gemacht hast und auch nen "Fehler" gefunden der hat aber keine abhilfe geschafft.
                    Zeile 340
                    PHP-Code:
                                $ret=PhpType::bytes2string($recData); 
                    müsste
                    PHP-Code:
                                $ret=PhpType::bytes2float($recData); 
                    heißen

                    ich vermute das Problem liegt aber darin das du die bytes im LBS swapst und sie aber auch nochmal im PHPType geswappt werden theoretisch müsste man also den kompletten teil von der phptype bytes2float in den lbs machen nur dafür sind meine php kenntnisse nicht ausreichend das ich das ordentlich da umgesetzt bekomme

                    Denkst du nicht es wäre einfacher die Endianess im LBS einzufügen und in der PhpType.php um eine funktion zu erweitern
                    PHP-Code:
                            if ($endianness == 0)
                                
                    $value = (($data[3] & 0xFF)<<16) |
                                        ((
                    $data[2] & 0xFF)<<24) |
                                        ((
                    $data[1] & 0xFF)) |
                                        ((
                    $data[0] & 0xFF)<<8);
                    if (
                    $endianess == 2)
                    $value = (($data[3] & 0xFF)<<24) |
                                        ((
                    $data[2] & 0xFF)<<16) |
                                        ((
                    $data[1] & 0xFF))<<8|
                                        ((
                    $data[0] & 0xFF));
                            else
                                
                    $value = (($data[3] & 0xFF)<<24) |
                                        ((
                    $data[2] & 0xFF)<<16) |
                                        ((
                    $data[1] & 0xFF)<<8) |
                                        ((
                    $data[0] & 0xFF));

                            return 
                    $value

                    Kommentar


                      #11
                      Das hab ich genau gemacht
                      Hast du auch den Type auf 6 geändert?
                      Fängt alles ab Zeile 341 an
                      Gruß
                      Michael

                      Kommentar


                        #12
                        oh ja ... so geht das wenn man nur überfliegt klar dann stimmt auch zeile 340

                        und ja in 6 hab ich ihn geändert
                        e11.jpg
                        E11 ist schon 6 und die andern noch 2 deshalb steht bei {382} auch so ne Blöde Zahl.

                        ich hab auch Sicherheitshalber schon die kompletten daten von PhpModbus neu auf Edomi kopiert fals es daran liegt hat aber an den Daten nichts geändert.

                        Das Projekt hab ich natürlich auch neu Aktiviert ^^

                        Kommentar


                          #13
                          Hab noch einen kleinen Fehler gefunden...
                          Bitte mal Zeile 342 durch dies hier ersetzten
                          PHP-Code:
                          if (getLogicElementVar($id4) == 0){ 
                          Dann kann über V4 die Endianess bestimmt werden. Ich weiß leider nicht welche du brauchst...

                          Der Code ansich ist nur copy & past von dir und sollte daher eigendlich gehen.

                          Vielleicht mal noch vor dem If in 342 folgendes und dann den Logeintrag posten. Dann kann ich sehen was konkret zurück kommt.
                          PHP-Code:
                            logging($id,"Data before convertion:" $recData); 
                          Hm, gerdae noch ein Typop gefunden, bin mir aber nicht sicher ob der auch im LBS drin ist.
                          Zeile 351 sollte so aus sehen
                          PHP-Code:
                          (($recData[0] & 0xFF)); 
                          Da war bei mir im Variablennamen noch ein zusatz "d".
                          Gruß
                          Michael

                          Kommentar


                            #14
                            Alos Bug´s gefixt

                            Log:
                            Code:
                             [TABLE="border: 0, cellpadding: 0, cellspacing: 0"]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]110222[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: Data:1130713930[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]110780[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: i:1[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]111102[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: input:13[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]111434[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: address:3[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]114037[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: Status:<pre>readMultipleRegisters: START[LF]Connected[LF]Packet: ee4c00000006010300030002[LF]Send[LF]Wait data ... [LF]Data received[LF]Packet: ee4c000000070103044364c683[LF]Modbus response error code: NOERROR[LF]Disconnected[LF]readMultipleRegisters: DONE[LF]</pre>[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]114505[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: Type:2[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]114856[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: Data:228.77543640137[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]120743[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: i:2[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]121094[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: input:17[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]121433[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: address:5[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]130023[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: Status:<pre>readMultipleRegisters: START[LF]Connected[LF]Packet: 077500000006010300050002[LF]Send[LF]Wait data ... [LF]Data received[LF]Packet: 0775000000070103044365a36e[LF]Modbus response error code: NOERROR[LF]Disconnected[LF]readMultipleRegisters: DONE[LF]</pre>[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]130374[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: Type:2[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]130711[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: Data:229.6383972168[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]132672[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: i:3[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]132997[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: input:21[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]133311[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: address:55[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]135833[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: Status:<pre>readMultipleRegisters: START[LF]Connected[LF]Packet: 948c00000006010300370002[LF]Send[LF]Wait data ... [LF]Data received[LF]Packet: 948c000000070103044247e772[LF]Modbus response error code: NOERROR[LF]Disconnected[LF]readMultipleRegisters: DONE[LF]</pre>[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]136172[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: Type:2[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]136686[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: Data:49.976020812988[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]137260[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: i:4[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]137597[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: input:25[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]137909[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: address:7[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]140314[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: Status:<pre>readMultipleRegisters: START[LF]Connected[LF]Packet: 13ec00000006010300070002[LF]Send[LF]Wait data ... [LF]Data received[LF]Packet: 13ec0000000701030443c65d0f[LF]Modbus response error code: NOERROR[LF]Disconnected[LF]readMultipleRegisters: DONE[LF]</pre>[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]140789[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: Type:2[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]141127[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: Data:396.72702026367[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:51[/TD]
                             			[TD]142013[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: Delay:1000[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:52[/TD]
                             			[TD]143095[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: end of delay[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:52[/TD]
                             			[TD]143511[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: i:0[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:52[/TD]
                             			[TD]143826[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: input:9[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:52[/TD]
                             			[TD]144140[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: address:1[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:52[/TD]
                             			[TD]146856[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: Status:<pre>readMultipleRegisters: START[LF]Connected[LF]Packet: 611d00000006010300010002[LF]Send[LF]Wait data ... [LF]Data received[LF]Packet: 611d000000070103044365511d[LF]Modbus response error code: NOERROR[LF]Disconnected[LF]readMultipleRegisters: DONE[LF]</pre>[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:52[/TD]
                             			[TD]147183[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: Type:6[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:52[/TD]
                             			[TD]147813[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: Data before convertion:[/TD]
                             		[/TR]
                            [TR]
                            [TD]2017-03-09 07:11:52[/TD]
                             			[TD]147857[/TD]
                             			[TD]8066[/TD]
                             			[TD]debug[/TD]
                             			[TD]EXE19001030 [v0.2]: ================ ARRAY/OBJECT START ================[/TD]
                             		[/TR]
                            [/TABLE]
                            Ergebnis is blöderweise das selbe..

                            Ich hab mich jetzt Hingesetzt und hab mir die PHPType genau Angesehen

                            PHP-Code:
                            <?php
                            class PhpType {
                            public static function 
                            bytes2float($values$endianness 0) {
                            $data = array();
                            $real 0;

                            // Überprüft die Daten auf Korrektheit
                            $data self::checkData($values);
                            // Tauscht die Bytes je nach endianness
                            $real self::combineBytes($data$endianness);
                            // Konvertiert nach Float
                            return (float) self::real2float($real);
                            }
                            private static function 
                            checkData($data) {
                            // Überprüft die daten
                            if (!is_array($data) ||
                            count($data)<||
                            count($data)>||
                            count($data)==3) {
                            throw new 
                            Exception('The input data should be an array of 2 or 4 bytes.');
                            }
                            // Fill the rest of array by zeroes
                            if (count($data) == 2) {
                            $data[2] = 0;
                            $data[3] = 0;
                            }
                            // Check the values to be number
                            if (!is_numeric($data[0]) ||
                            !
                            is_numeric($data[1]) ||
                            !
                            is_numeric($data[2]) ||
                            !
                            is_numeric($data[3])) {
                            throw new 
                            Exception('Data are not numeric or the array keys are not indexed by 0,1,2 and 3');
                            }

                            return 
                            $data;
                            }
                            private static function 
                            combineBytes($data$endianness) {
                            $value 0;
                            // Tauscht die Bytes
                            if ($endianness == 0)
                            $value = (($data[3] & 0xFF)) |
                            ((
                            $data[2] & 0xFF)<<8) |
                            ((
                            $data[1] & 0xFF))<<16|
                            ((
                            $data[0] & 0xFF)<<24);
                            else
                            $value = (($data[3] & 0xFF)<<24) |
                            ((
                            $data[2] & 0xFF)<<16) |
                            ((
                            $data[1] & 0xFF)<<8) |
                            ((
                            $data[0] & 0xFF));

                            return 
                            $value;
                            }
                            private static function 
                            real2float($value) {
                            // Konvertiert zu Float
                            // get unsigned long
                            $ulong pack("L"$value);
                            // set float
                            $float unpack("f"$ulong);

                            return 
                            $float[1];
                            }
                            }
                            ?>]
                            Wenn du das Wirklich in den LBS integrieren willst müsste eigt. der gesamte teile rein mit den "private static function" so wie ich verstanden hab sind die nicht von extern aufrufbar (aber habs auch nicht nachgelesen).
                            Bzw man könnte das reduzieren auf den teil den man wirklich brauch den else teil könnte man weglassen weil man bei Float Byte Swap nur den ersten teil brauch okay das wars eigt. was man weglassen kann das müsste man halt so in den LBS integrieren oder was ich wiederum einfacher finde die endianess in den baustein und ne kleinstmodifikation in der PhpType.php

                            PHP-Code:
                                private static function combineBytes($data$endianness) {
                                    
                            $value 0;
                                    
                            // Combine bytes
                                    
                            if ($endianness == 0)
                                        
                            $value = (($data[3] & 0xFF)<<16) |
                                                ((
                            $data[2] & 0xFF)<<24) |
                                                ((
                            $data[1] & 0xFF)) |
                                                ((
                            $data[0] & 0xFF)<<8);
                                    if (
                            $endianness == 2)
                                        
                            $value = (($data[3] & 0xFF)) |
                                                ((
                            $data[2] & 0xFF)<<8) |
                                                ((
                            $data[1] & 0xFF))<<16|
                                                ((
                            $data[0] & 0xFF)<<24);
                                    if (
                            $endianness == 1)
                                        
                            $value = (($data[3] & 0xFF)<<24) |
                                                ((
                            $data[2] & 0xFF)<<16) |
                                                ((
                            $data[1] & 0xFF)<<8) |
                                                ((
                            $data[0] & 0xFF));

                                    return 
                            $value;
                                } 
                            ergebniss wäre folgendes mod.jpg
                            Zuletzt geändert von Peterich; 09.03.2017, 07:50. Grund: ] vergessen

                            Kommentar


                              #15
                              Ja da ist noch ein Schritt drin den ich übersehen habe, Ich hab nur deinen code kopiert und da ich es ohne Daten nicht testen kann gehofft das es klappt.

                              Irgendwie ist das Log auch komisch, es hört genau da auf wo es interessant für mich währe... Also er fäng tnoch an mit Array start aber dann kommt nichts mehr...
                              Ist das wirklich so im Log? Dann währe nämlich so wie es aussieht der Logger abgeschmiert und dann kommt natürlich auch nichts sinnvolles raus.
                              Wenn du mir mal den Inhalt der 4 Bytes schicken könntest dann kann ich damit mal rumspielen (und natürlich auch was das korrekte Ergebnis sein soll).
                              Gruß
                              Michael

                              Kommentar

                              Lädt...
                              X