Ankündigung

Einklappen
Keine Ankündigung bisher.

Unterschiedliche Modbusregister bei SMA ?

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

    Unterschiedliche Modbusregister bei SMA ?

    Ich habe ein kleines Malheur mit den Registern bei SMA

    Ich nutze den PHPModbus der auf dem NAS liegt und eigentlich einwandfrei funktioniert.

    Die Register sind (sollten) lt Doku gleich sein.

    Ich frage drei WR ab. Die Anfrage ist immer gleich, bis auf die IP und die UnitID.

    Der Codeschnipsel sieht so aus

    Mit dem Numberformat setze ich die Ausgabe des Modbus auf eine Kommazahl und setze den Tausendertrenner


    $STP6000WS1V = number_format (Modbus ("xxx.xxx.xxx.xxx",4,30771,10)/100,2,",","."); //aktuell String1 Volt
    $SB5WS1V = number_format (Modbus ("xxx.xxx.xxx.xxx",3,30771,10)/100,2,",","."); //aktuelle Volt String1
    $SB3WS1V = number_format (Modbus ("xxx.xxx.xxx.xxx",3,30771,10)/100,2,",","."); //aktuell Volt String1

    $STP6000WS2V = number_format (Modbus ("xxx.xxx.xxx.xxx",4,30959,10)/100,2,",","."); //aktuell String2 Volt
    $SB3WS2V = number_format (Modbus ("xxx.xxx.xxx.xxx",3,30959,10)/100,2,",","."); //aktuelle Volt String2
    $SB5WS2V = number_format (Modbus ("xxx.xxx.xxx.xxx",3,30959,10)/100,2,",","."); //aktuelle Volt String2

    Der WR SB5 liefert als einziger die richtigen Werte. Der SB3 und der Tripower liefern nicht nur zahlenmässig falsche, sondern obendrein negative Zahlenwerte.

    Hat da jemand eine Idee was es sein könnte?

    Ich vermute das ich falsche Register anspreche. Nur finde ich keine Doku die dies bestätigt.

    Und alles durchtesten wird sicher bis zum Frühjahr dauern

    Übrigens habe ich das Problem nur bei den Stringsspannungen. Bei allen anderen Parametern funktioniert das mit den gleichen Registernummern.

    Grüsse
    Carsten

    #2
    Falls jemand mal ein ähnliches Problem hat

    Ich habe durch einen Tip die Lösung gefunden

    Es liegt in der Auswertung/Darstellung der Zahlenformate

    Ich habe bisher durchgehend mit signedInt-Werten gerechnet. Dieses funktioniert Zahlenmässig von −32.768 bis + 32.768 (Kommastellen unberücksichtigt)

    Der Stringspannungen liegen aber deutlich über 327,68 Volt. Hierzu müssen die Werte als unsignedInt ausgewertet werden. Das verschiebt den Zahlenraum auf 0 bis +65.535.

    In diesem (meinem) Fall kann ich bis 655,35 Volt darstellen

    Dies liess sich sehr leicht beheben. Der PHPModbus liefert mit dem PHPType.php die Möglichkeit den Zahlenraum sehr einfach anders darzustellen.

    Die ausgebende Zeile muss in diesem Fall entweder

    return PhpType::bytes2signedInt($bytes); //SignedBytes −32.768 - 32.768

    oder

    return PhpType::bytes2unsignedInt($bytes); //UnSignedBytes 0 - 65.535

    sein

    Feddich

    Grüsse
    Carsten

    Kommentar

    Lädt...
    X