Finder Stromzähler auswerten ModBus

Hallo zusammen,

Ich habe mit Modbus noch nicht so viel Erfahrung und brauche Hilfe bei der Auswertung eines Stromzählers von Finder.
Laut der Beschreibung soll die Leistung ein Wert mit 3 Words Länge sein.
Das müssten also wenn ich es richtig verstehe 48 Bit sein.
Ich habe aber nur 64 Bit Integer zur Auswahl.
Wert kommt auch an, stimmt aber meiner Meinung nach nicht, da er falsch nach dec umgerechnet wird weil ja 4 Words gelesen werden.
Bin ich falsch unterwegs?
Gibt es eine Möglichkeit nur 48 Bit zu lesen?

Danke und Gruß Isi

Schon ausprobiert ob die Werte stimmen wenn du im ModBus Splitter LSB/MSB umschaltest?
Michael

Ja,
Dann wird es ganz verrückt :eek:

Anbei mal ein Ausschnitt aus den debug der Seriellen Schnittstelle:

Also derzeit wird mein Wert wie folgt umgerechnet:
01 AF 39 00 00 ergibt 7234715648 mW

Ich hätte aber gerne:
01 AF 39 das würde 110393 mW ergeben. Das Gerät das hinter dem Zähler hängt braucht nach Typenschild 110 W.
Der Wert müsste also passen.
Nur wie komm ich da hin?

So, hab mir jetzt fast einen abgebrochen :banghead:
Das habe ich mir auch einfacher vorgestellt, konnte es jetzt aber wie folgt lösen:

<?php

//Beschneiden von 8Byte auf 6 Byte und von mW in W

$var = getValueFloat(31106);
$kwhID = 27394;
$statusID = 25648;


$varstr = sprintf("%.0f", $var);                                        //Float-Wert in String wandeln
 // init hex array                                                      // dezimal String in Hex-Sting wandeln
       $hex = array();
       while ($varstr)
       {
         // get modulus // based on docs both params are string
          $modulus = bcmod($varstr, '16');
          // convert to hex and prepend to array
          array_unshift($hex, dechex($modulus));
         // update decimal number
         $varstr = bcdiv(bcsub($varstr, $modulus), 16);
        }
       // array elements to string
       $hexstr = implode('', $hex);                                  // Hex-Sting  

$hexneu = substr ( $hexstr, -16,-4);                                 //Hex-String beschneiden (letzten 4 Stellen entfernen)
$dec = hexdec($hexneu);                                              //beschnittenen Hex-String in Dezimal-String wandeln
$int    = intval($dec);                                              //String in Integer wandeln
$intW = $int/1000;                                                   //Umrechnen von mW in W 

SetValueFloat($kwhID,$intW);                                         //Variable setzen
if ($intW  > 10)
{
SetValueBoolean($statusID,true);                                     //Status auf true
}
else 
{
SetValueBoolean($statusID,false);                                    //Status auf false
}

So einfacher ?

<?php

//Verschieben um 16 Bit nach rechts und von mW in W

$var = GetValueFloat(31106);
SetValueFloat(27394, ($var >> 16)/1000);

Michael

…nicht dein Ernst :eek:

Doch :wink:
PHP: Bit-Operatoren - Manual
Michael

…so ist das halt wenn man es nicht gelernt hat und sich PHP versucht selbst beizubringen.
Vielen Dank für deine Hilfe!
Dein Zweizeiler funktioniert bestens und ich habe ihn übernommen und meinen PHP-Aufsatz wieder gelöscht.
Aber funktioniert hat er auch! :loveips:

Ich habe es auch nicht gelernt. Und ja, auch bei mir tritt noch öfters der Aha Effekt ein :slight_smile:

Michael