In meinen Beiträgen "Soyo-Zähler-Unit mittels ESP32 auslesen" und "Daten mittels ESP32 wieder in den Soyo einlesen" ist das Prinzip geklärt.
Statt Power=666; // 666 Watt kannst du auch Daten von einem Web-Client oder über Serial1 (Rx13) einlesen um die Leistung vom Soyo vorzugeben.
Ich habe ein Bild über den Aufbau beigefügt.
Das ist doch genau, was du suchst.
void loop() {
Power = 666; // 666 Watt
// Daten für Wechselrichter Tx14
byte message[8] = { 36, 86, 0, 33, 0, 0, 128, 8 };
// Der Arduino ist mit bit shifts am schnellsten
message[4] = (byte)((Power >> 8) & 0xff);
// hier schneiden wir einfach das höherwertige byte weg
message[5] = (byte)(Power & 0xff);
// Prüfsumme berechnen (Checksumme)
message[7] = (byte)(264 - message[4] - message[5]);
Serial1.write(message, 8); // Ausgabe über seriellen Port Tx14
}
Hallo Gerhard,
anbei der C-Code für die Erzeugung des Datenpakets incl. CRC-Berechnung für die Leistungsvorgabe über die RS485-Schnittstelle:
uint8_t pack[] = {0x24, 0x56, 0x00, 0x21, 0x00, 0x00, 0x80 ,0x00}; //Prototyp uint16_t power = 123; //Soll-Leistung hier in Watt angeben // Leistung in Paket ablegen pack[4] = power >> 8; pack[5] = power & 0xff; // CRC Berechnen und setzen uint8_t crc = (uint8_t)(0xff + 0x24); for (uint8_t i=0; i<7; i++) crc -= pack[i]; pack[7] = crc;
Viele Grüße
Flo
@fl0 wenn du den loop von 1 bis 6 machst kannst du das 0x24 sparen.
uint8_t crc = 0xff; for (uint8_t i=1; i<7; i++) crc -= pack[i]; pack[7] = crc;
Döp dö dö döp.
Hallo
danke an Alle! Es geht voran. Bau gerade nen RS485-Adapter an meinen uC und tests das mal.
Gruß
Gerhard
Hallo,
ich versuche gerade vom ESP32 meinen SoyoSource zu limitieren. Ich sende einfach einen einfachen Datenstring über die Serielle schnittstelle 1, wie von lunax beshrieben, 400W mit CRC Byte 0x78.
Die Rechenroutine für die CRC Berechnung von flo liefert aber der Wert 0x77 (119). Beides funktioniert bei mir einfch nicht. Die Hardware ist o.k.
Hat jemand eine Idee?
MfG
Heinz