- fchao-Sinus-Wechselrichter AliExpress         
RSS-Feed anzeigen

hoerbi1

Huawei Wechselrichter auslesen RS485 Modbus mit Arduino

Bewerten
Hallo Miteinander, ich habe für Euch ein vielleicht einfaches Problem zu lösen.

Ich habe einen Smart Power Meter (Huawei DTSU666-H 250 A/50mA) welcher in Verbindung mit meinem Wechselrichter steht (Huawei SUN2000 12KTL)
Das Protokoll ist ein RS485.
Weiß wer von Euch welchen Register ich da hernehmen muss? Ich verzweifle schön langsam und habe alle Varianten durch.
Ich benötige lediglich den Wert "Aktive Power" Mit der Adresse 40525. (Benötige ich da den HEX Wert oder nur 0525?)
Am Smartmeter ist die Communication-Address: 11 - jedoch wo füge ich das ein?
Am Ende des Beitrags hänge ich die entsprechenden Daten von Huawei an.

Vielen Dank falls sich jemand erbarmt um mich... vielen vielen Dank

Code:
#include <ModbusMaster.h>
#include <SoftwareSerial.h>

#define MAX485_TX_ENABLE  7  // EIA-485 transmit control pin; MAX485 Module PIN DE and RE
#define EIA485_RX         9  // EIA-485 serial receive pin ; MAX485 Module PIN RO
#define EIA485_TX        10  // EIA-485 serial transmit pin ; MAX485 Module PIN DI

ModbusMaster node;
SoftwareSerial RS485Serial(EIA485_RX, EIA485_TX); // Hier wird der serielle Port beschrieben

void preTransmission() {
  digitalWrite(MAX485_TX_ENABLE, true);// Vor der Übertragung wird Pin 7 auf High gesetzt.
}

void postTransmission() {
  digitalWrite(MAX485_TX_ENABLE, false);// Nach der Übertragung wieder auf Low
}


void setup() {

  
  pinMode(MAX485_TX_ENABLE, OUTPUT);
  digitalWrite(MAX485_TX_ENABLE, false);

  Serial.begin(9600);
  RS485Serial.begin(9600); //Baudrate des Sensors auf 9600

  node.begin(1, RS485Serial);//Start der seriellen Schnittstelle, Slave ID 1 //???????????? Huwaei DTH666 says 11?????
  node.preTransmission(preTransmission);
  node.postTransmission(postTransmission);

  Serial.print("Hoerb1 KW ");// Bezeichnung meines Sensors
}


void loop() {
float result;
//uint16_t result;


  result = node.readInputRegisters(0525, 1);//Funktion : Read Input Registers, Modbus Adressen 2 //???????? no idea if it is right
 if (result == node.ku8MBSuccess)
  {
    
    Serial.print("Active Power: ");
    Serial.println(node.getResponseBuffer(0)*0.1,1);// 1. Part????????????
    Serial.println(node.getResponseBuffer(1)*0.1,1); // 2. Part???????????
    Serial.println(" kw");


  }
  else {
  Serial.print("Fehler beim Auslesen des Sensors\n");
  }

  delay(2000);//Aktualisierung alle 2 Sekunden
}
Klicke auf die Grafik für eine größere Ansicht

Name:	b35deff9c441e0e271828915f15a6e6df6872cdf.jpg
Hits:	2168
Größe:	90,1 KB
ID:	35779
Klicke auf die Grafik für eine größere Ansicht

Name:	grafik(2).png
Hits:	1709
Größe:	38,4 KB
ID:	35780
Klicke auf die Grafik für eine größere Ansicht

Name:	grafik(3).jpg
Hits:	1564
Größe:	59,6 KB
ID:	35781
https://www.solarmarkt.ch/herstimg/3...rDTSU666-H.pdf
https://www-file.huawei.com/~/media/...0150715_JP.pdf

"Huawei Wechselrichter auslesen RS485 Modbus mit Arduino" bei Twitter speichern "Huawei Wechselrichter auslesen RS485 Modbus mit Arduino" bei Facebook speichern "Huawei Wechselrichter auslesen RS485 Modbus mit Arduino" bei Mister Wong speichern "Huawei Wechselrichter auslesen RS485 Modbus mit Arduino" bei YiGG.de speichern "Huawei Wechselrichter auslesen RS485 Modbus mit Arduino" bei Google speichern "Huawei Wechselrichter auslesen RS485 Modbus mit Arduino" bei del.icio.us speichern "Huawei Wechselrichter auslesen RS485 Modbus mit Arduino" bei Webnews speichern "Huawei Wechselrichter auslesen RS485 Modbus mit Arduino" bei My Yahoo speichern

Kategorien
Kategorielos

Kommentare

Seite 2 von 2 ErsteErste 12
  1. Avatar von matthewcumbo
    Nach der Huawei-Dokumentation und meiner Erfahrung bei https://andersenlab.de/services/qual...rance-services kann die Wirkleistung in zwei Registern (je 32 Bit) aufgezeichnet werden, daher ist es besser, beide zu lesen.

    void loop() {
    uint8_t result;

    // 40525 - 40001 = 524 (Offset für Halteregister)
    result = node.readHoldingRegisters(524, 2); // Lesen von 2 Registern, um den vollen Wert zu erhalten

    if (Ergebnis == node.ku8MBSuccess) {
    // Datenverarbeitung je nach Format (float, int32, etc.)
    Serial.print("Wirkleistung: “);
    Serial.print(node.getResponseBuffer(0), 1); // Erstes Register
    Serial.println(„ kW“);
    } sonst {
    Serial.print("Fehler beim Auslesen des Sensors: “);
    Serial.println(Ergebnis, HEX);
    }

    delay(2000);
    }

    Wenn die Leistung im Float-Format (mit einem Multiplikator) dargestellt wird, müssen Sie ebenfalls vorsichtig sein. Beachten Sie, dass sich das Datenformat je nach den Geräteeinstellungen ändern kann, so dass Sie möglicherweise ein wenig experimentieren müssen, um alles richtig zu verstehen.
Seite 2 von 2 ErsteErste 12

Solar Speicher und Akkus Tests