-         
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:	62
Größe:	90,1 KB
ID:	35779
Klicke auf die Grafik für eine größere Ansicht

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

Name:	grafik(3).jpg
Hits:	56
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

  1. Avatar von Meyenfelder
    Hallo hoerbi1,
    hatte das gleiche Problem und habe jetzt eine Lösung gefunden:
    Zum Auslesen der Smartmeterwerte genügt es die Kommunikation zwischen WR SUN 2000 und Smartmeter SM DTSU666-H einfach mitzulesen.
    WR fragt den SM mehrmals pro Sekunde ab. Habe den Verkehr mitgeschnitten und nach einigem Suchen die richtigen Stellen im Datensatz gefunden.
    Wichtig ist auch einen entsprechenden Peglewandler von RS485 auf TTL (0-5 Volt) zu verwenden. Habe das Modul von Pollin LC-TTL-MAX485 für 2 Euro benutzt.
    Komunikation läuft mit 9600 Bd, 8n1. Hier ein Auszug aus dem Datensatz:



    Anforderung vom WR an Zähler:
    0B03 Teilnehmer Adresse 0B->11 Kommando Register Lesen 03
    0836 Adresse 0836 hex -> 2102 dez
    0050 50 hex -> 80 dez es werden 80 Register a 2 Byte, 160 Byte angefordert
    A732 CRC

    Antwort vom Zähler an WR:
    0B Teilnehmer Adresse 0B -> 11 ist Adresse des DTSU666-H am Modbus
    03 Kommando Register Lesen 03
    A0 A0 hex -> 160 dez Byte die gesendet werden

    2102 2104 2106 2108 2110 2112 2114 2116
    4094 DD2F 4094 FDF4 40AA 5E35 4366 E666 4367 6666 4365 999A 4367 CCCD 43C7 F333 32 Bytes

    2118 2120 2122 2124 2126 2128 2130 2132 ab Adresse 2126, 49. - 52. Byte sind C551 899A = -3352,6 Watt
    43C7 999A 43C7 C000 43C8 8CCD 4247 E148 C551 899A C484 CCCD C484 ACCD C499 9666 Aktuelle Leistung in Watt, negativ = Export
    #### ####
    2134 2136
    C317 E666 C2B8 CCCD C205 999A C1D0 CCCD 4552 4B33 4485 A000 4485 1CCD 4499 D333

    2150 2158
    BF7E F9DB BF7E 353F BF7E F9DB BF7F 7CEE C502 C28F C430 FC29 C435 4A3D C424 BF5C

    2166 2170 2174
    4153 851F 41B0 51EC 4133 851F 42A3 051F 4503 9614 4436 7EB8 4438 1852 4439 2000
    0CF1 CRC


    Auswertung funktioniert dann so:
    Auf Zeichenfolge 0B 03 A0 Hex warten, dann 48 Byte verwerfen, die Bytes 49 - 52 sind die Leistung als Fliesskommazahl.

    Falls Du noch Probleme hast, bitte hier melden.

    Gruß Meyenfelder
  2. Avatar von Meyenfelder
    Sorry bin neu hier im Roboternetz,
    die Formatierung mit mehreren Leerzeichen hat nicht funktioniert.
    Hier nochmal als Code:

    Code:
    Anforderung vom WR an Zähler:
    0B03   Teilnehmer Adresse 0B->11 Kommando Register Lesen 03
    0836   Adresse 0836 hex -> 2102 dez   
    0050   50 hex -> 80 dez es werden 80 Register a 2 Byte, 160 Byte angefordert
    A732   CRC
    
    Antwort vom Zähler an WR:
    0B       Teilnehmer Adresse 0B -> 11 ist Adresse des DTSU666-H am Modbus
    03       Kommando Register Lesen 03
    A0       A0 hex -> 160 dez Byte die gesendet werden
    
    2102      2104      2106      2108       2110      2112      2114      2116         
    4094 DD2F 4094 FDF4 40AA 5E35 4366 E666  4367 6666 4365 999A 4367 CCCD 43C7 F333       32 Bytes
    
    2118      2120      2122      2124       2126      2128      2130      2132            ab Adresse 2126, 49. - 52. Byte sind C551 899A = -3352,6 Watt
    43C7 999A 43C7 C000 43C8 8CCD 4247 E148  C551 899A C484 CCCD C484 ACCD C499 9666       Aktuelle Leistung in Watt, negativ = Export
                                             #### ####
    2134      2136
    C317 E666 C2B8 CCCD C205 999A C1D0 CCCD  4552 4B33 4485 A000 4485 1CCD 4499 D333
    
    2150                                     2158
    BF7E F9DB BF7E 353F BF7E F9DB BF7F 7CEE  C502 C28F C430 FC29 C435 4A3D C424 BF5C
    
    2166                2170                 2174
    4153 851F 41B0 51EC 4133 851F 42A3 051F  4503 9614 4436 7EB8 4438 1852 4439 2000 
    0CF1     CRC

    Bei https://forum.huawei.com/enterprise/...mypfk1cl6f.png

    gibt es die Registerliste des DTSU666-H, bei Bedarf kann man da auch Spannungen, Ströme, Exportierte und Importierte
    Arbeit aus dem Datensatz rauslesen.

    Hoffentlich jetzt besser verständlich
    Meyenfelder