+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 16
  1. #1
    Registriert seit
    Feb 2008
    Ort
    Düsseldorf
    Beiträge
    416

    Question Uint64 über Modbus auslesen?

    Hallo Leute,

    ich sehe vermutlich gerade den Wald vor lauter Bäumen nicht und brauch mal einen Tipp.

    Ich lese über Modbus meinen SolarEdge Wechselrichter + LG Chem Resu 10H Speicher aus. Das funktioniert auch alles sehr gut bis auf zwei Werte die als Uint64 vom Speicher gelesen werden müssen.

    Wie funktioniert das?

    Hier mal die Registerübersicht vom Speicher:
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Speicher_Modbus_Register.jpg 
Hits:	71 
Größe:	176.5 KB 
ID:	50437

    Und die Konfiguration in IPS:
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	ips1.jpg 
Hits:	58 
Größe:	66.6 KB 
ID:	50438

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	ips2.jpg 
Hits:	66 
Größe:	103.9 KB 
ID:	50439

    Die Werte müssten eigentlich die bisher in den Speicher geladenen und entladenen Wh anzeigen.
    Laut dem Solaredge Monitoring-Portal müssten das für Lifetime Export Energie Counter ca. 0,87 MWh (870000 Wh) sein.

    Die Float32 und Uint32 Werte kann ich dank eines Skript hier aus dem Forum ohne Probleme auslesen und entsprechend umwandeln:

    PHP-Code:
    <?
    $ips_data 
    GetValueInteger(16577); 
    $ips_data_WordSwapped = (($ips_data>>16)&0xFFFF) | (($ips_data&0xFFFF)<<16); 
    $float_value u32ToFloat($ips_data_WordSwapped); 
    SetValueFloat(42067$float_value); 

    function 
    u32ToFloat($u32

      
    $sign = ($u32&0x80000000)? -1:1
      
    $exponent = (($u32&0x7F800000)>>23) - 127
      
    $base = (float)(($u32 0x007FFFFF)|0x00800000)/0x00800000 
      return ((float) 
    $sign pow(2$exponent) * $base); 

    ?>
    Wie bekomme ich das aber für die Uint64 Werte hin?

    Vielen Dank
    Stephan
    ___________________________________________
    Wago SPS 750-881 mit Dali Klemme 753-647 und den üblichen DI`s und DO`s
    IP-Symcon Unlimited, letzte Beta...

  2. #2
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    22,183

    Hast du mal im Gateway die Swap LSW/MSW Option aktiviert?

    paresy

  3. #3
    Registriert seit
    Feb 2008
    Ort
    Düsseldorf
    Beiträge
    416

    Zitat Zitat von paresy Beitrag anzeigen
    Hast du mal im Gateway die Swap LSW/MSW Option aktiviert?

    paresy
    Hab es testweise mal umgestellt. Dann kommt als Ergebnis 4137 raus.
    Und alle anderen Werte vom Wechselrichter stimmen dann natürlich nicht mehr...

    Ist denn meine Konfiguration wie im Screenshot erstmal theoretisch korrekt?

    Viele Grüße
    Stephan
    ___________________________________________
    Wago SPS 750-881 mit Dali Klemme 753-647 und den üblichen DI`s und DO`s
    IP-Symcon Unlimited, letzte Beta...

  4. #4
    Registriert seit
    Jun 2013
    Beiträge
    107

    Je nach slave hat die Registernummer einen Offset. Alle anderen Werte kommen mit der angegebenen Registernummer aus der Tabelle in der konfiguration korrekt an?
    Warum brauchst du das Script zum drehen? Wenn du auf Word Swap stellst brauchst du kein Script mehr. Egal welcher datentyp es ist.
    Mit script und ohne Word Swap musst du bei 64bit alle 4 Wörter vertauschen aber wie gesagt das sollte nicht nötig sein.

    Gruß

    Heinz

    Sent from my SM-G975F using Tapatalk
    Geändert von teichhei (15.09.19 um 02:35 Uhr)

  5. #5
    Registriert seit
    Feb 2008
    Ort
    Düsseldorf
    Beiträge
    416

    Standard Uint64 über Modbus auslesen?

    Alle andere Werte kommen korrekt an. Problem mit dem drehen ist das alle Werte die direkt vom Wechselrichter kommen nicht gedreht werden müssen. Das betrifft nur die Werte die der wechselrichter vom Speicher durchreicht.
    Hat jemand zufällig ein Script mit dem ich alle 4 Wörter tauschen kann. Ich Blick das einfach nicht...

    Gruß Stephan
    Geändert von da8ter (15.09.19 um 06:59 Uhr)
    ___________________________________________
    Wago SPS 750-881 mit Dali Klemme 753-647 und den üblichen DI`s und DO`s
    IP-Symcon Unlimited, letzte Beta...

  6. #6
    Registriert seit
    Jun 2013
    Beiträge
    107

    Probier mal

    $ips_data_WordSwapped = (($ips_data>>48)&0xFFFF) |
    (($ips_data>>16)&0xFFFF0000) |
    (($ips_data&0xFFFF0000)<<16) |
    (($ips_data&0xFFFF)<<48)
    ;

    Hab's noch nicht in PHP probiert aber so ähnlich sollte das aussehen.



    Sent from my SM-G975F using Tapatalk

  7. #7
    Registriert seit
    Feb 2008
    Ort
    Düsseldorf
    Beiträge
    416

    konnte es jetzt nur auf die Schnelle remote testen. Ergebnis ist immer 0

    Viele Grüße
    Stephan
    ___________________________________________
    Wago SPS 750-881 mit Dali Klemme 753-647 und den üblichen DI`s und DO`s
    IP-Symcon Unlimited, letzte Beta...

  8. #8
    Registriert seit
    Jun 2013
    Beiträge
    107

    Da stimmt das nicht. Das geht.
    1111222233334444 Hex wird zu 4444333322221111.
    0 kann nicht sein wenn du $ips_data mit was belegt hast.
    Single müssen Double quotes sein dann siehst du schön was dein Maximum ist.



    Sent from my SM-G975F using Tapatalk
    Geändert von teichhei (17.09.19 um 00:53 Uhr)

  9. #9
    Registriert seit
    Feb 2008
    Ort
    Düsseldorf
    Beiträge
    416

    also wenn ich dein Beispiel aus dem Screenshot 1:1 hier teste kommt als Ergebnis

    0
    2147483647

    raus.

    1111222233334444 oder 4444333322221111 = -1

    Viele Grüße
    Stephan
    ___________________________________________
    Wago SPS 750-881 mit Dali Klemme 753-647 und den üblichen DI`s und DO`s
    IP-Symcon Unlimited, letzte Beta...

  10. #10
    Registriert seit
    Jun 2013
    Beiträge
    107

    Dann läuft das auf 32 bit und die 21... ist alles was geht.
    Wenn du den Code so abschreibst sollte als Ergebnis der Dec Wert auf dem Rechner raus kommen. Das läuft auf einem Server 2012 R2, 64 Bit.

    Das kann irgendwie umschifft werden wenn man mit einem String arbeitet, hab ich aber noch nie machen müssen.

    Was für eine Version und Platform hast du denn?


    Sent from my SM-G975F using Tapatalk

Ähnliche Themen

  1. ModBus Gerät auslesen
    Von Riste im Forum 1-Wire, M-BUS
    Antworten: 11
    Letzter Beitrag: 02.11.17, 06:17
  2. Antworten: 19
    Letzter Beitrag: 21.01.17, 19:17
  3. Modbus Bits auslesen.
    Von Zaphod im Forum SPS Automatisierungstechnik
    Antworten: 21
    Letzter Beitrag: 02.01.17, 11:34
  4. Modbus TCP stürzt ab, wenn ein Gerät über Modbus RTU keine Spannung hat
    Von Helmut im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 22
    Letzter Beitrag: 04.06.15, 07:32
  5. Wago: UDINT über Modbus auslesen
    Von dtm im Forum SPS Automatisierungstechnik
    Antworten: 17
    Letzter Beitrag: 21.10.09, 08:05

Stichworte