Forum: Mikrocontroller und Digitale Elektronik Unbekannten Modbus RTU Slave emulieren


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Sascha K. (kuschelganxta)


Bewertung
0 lesenswert
nicht lesenswert
Guten Abend zusammen,

für mein LG Therma V Wärmepumpenprojekt 
(Beitrag "LG Therma V R32 Monoblock Wärmepumpe Bus") möchte ich ein 
Herstellergerät emulieren und der Wärmepumpe die Existenz dessen 
Vorgaukeln.

Rahmendaten
  - Zu emulierendes Gerät LG PENKTH000 ("Energiezähler Modul")
  - Dieses erfasst Daten von Wärme- und Energie/Stromzählern
  - Ist per Modbus RTU 9600 8N1 mit der Wärmepumpensteuerung verbunden
  - Kann die Slaveadressen B0 oder B1 bekommen
  - Die (aktuellen) Daten können an der Wärmepumpensteuerung angezeigt 
werden (bei Vorhandensein des Geräts)

Also habe ich mal mit einem USB RS485 Dongle gesnifft.
Ich bekomme immerwährend folgende Telegramme:
B0 01 00 02 00 02 07 EA
B0 02 00 00 00 01 A2 2B
B0 03 00 00 00 08 5F ED
B0 04 00 00 00 10 EA 27

Das sieht für mich unerfahrenen tatsächlich schonmal nach Modbus aus - 
bis auf den CRC der byte-geswappt ausschaut (Vergleich mit 
https://www.lammertbies.nl/comm/info/crc-calculation) und die 
Responsegröße in Byte 4 - diese wäre in 3 von 4 Fällen Null. Was meint 
ihr hierzu?

Unterstellt, dass es tatsächlich Modbus ist, wären die 2. Bytes jeweils 
der Function Code:
Function Code  Register Type
1  Read Coil
2  Read Discrete Input
3  Read Holding Registers
4  Read Input Registers

Somit fragt die Wärmepumpe bereits ab und ich müsste nur einen Modbus 
Slave z.B. für einen Arduino programmieren und mit Testwerten die 
Steuerung füttern und das Verhalten beobachten, richtig?

Herlichen Dank für eure Kommentare hierzu,
Sascha

PS: Der fertige Code wird dann auch mit zu 
https://github.com/cribskip/esp8266_lgawhp gepackt

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Bewertung
0 lesenswert
nicht lesenswert
Sascha K. schrieb:
> 9600 8N1
Sicher?
Laut Spec hat man 1 Parity Bit und 1 Stopbit oder 2 Stopbit.
Denn die Zeiten für 1Byte+drumrum müssen gleich bleiben, weil Modbus RTU 
mit Timeouts auf dem Bus arbeitet.
-> 8E1, 8O1, 8N2

Sascha K. schrieb:
> bis auf den CRC der byte-geswappt ausschaut
Die CRC hat bei Modbus lustigerweise eine andere Endianess als die 16Bit 
Werte im Rest des Frames.
Also alles in Ordnung!

Ansonsten richtig.
Bis dann die Steuerung so alle 1h was abfragt, was du noch nicht 
eingebaut hast.
Ab dann wirds richtig lustig ;)

von Sascha K. (kuschelganxta)


Bewertung
0 lesenswert
nicht lesenswert
Mw E. schrieb:
> Sicher?
Tatsächlich. Mit Parity bekomme ich nur Müll, der nicht zum CRC passt.
Ich bin jetzt mit 2 Stoppbit unterwegs und läuft.

Ich habe auch schon den Erfolg, dass ich den Stromverbrauch an die 
Wärmepumpe melde und diese reagiert. Doku auf der o.g. github Seite.

Danke für die (schnelle) Unterstützung :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.