Forum: Mikrocontroller und Digitale Elektronik Modbus TCP auf STM32 - Anfängerfrage


von Hanna (schmalspurelektriker)


Lesenswert?

Guten Morgen,
nachdem ich seit Jahren begeistert eure Beiträge lese muss ich mich 
heute mit meiner ersten Frage an euch wenden, in der Hoffnung, dass ich 
ein bisschen Input / Gedankenanregungen von euch bekommen kann.

Ich habe mit einem STM32F103 folgendes für eine Applikation schon 
realisiert.

STM32 spielt Modbus RTU Slave und erhält über UART RS485 (Modbus) 
Steuerbefehle. Diese setzt er intern um, bzw. steuert einzelne digitale 
I/Os und gibt auch entsprechende Antwort auf der Modbsu RTU Leitung an 
den Master zurück.
Diese oben beschriebene Elektronik hat noch DIP Schalter zur Einstellung 
der jeweiligen Slave Adresse.

(Konkret geht es darum, dass ein Modbus Master viele versch. 
Klimaanlagen in einem Hotelgebäude über Modbus ansteuern kann)

Aktuell sitzen ca 40 dieser Geräte in einem Modbus Netz, ein Modbus 
Master sendet die Steuerbefehle an die jeweiligen Slaves und diese 
setzen die Steuerbefehle (kühlen, heizen, Lüfterstufen etc.) um.
Eingangssignale an den Slave über UART Interrupt im µC, Steuerbefehle an 
den Master über Sendebefehle aus der HAL

Die einzelnen Modbus Header und Steuerbefehle konnte ich alle umsetzen 
und an sich läuft das System nun seit 6 Monaten sehr gut.

Die neue Applikation sieht vor, dass GENAU DIE GLEICHEN FUNKTIONALITÄTEN 
nun über Modbus TCP realisiert werden sollen.


Also 1 Modbus TCP Master sendet an die Slaves eben die gleichen 
Steuerbefehle und Abfragen 
(Heizen/Kühlen/Lüfterstufen/Fehlerabfragen/Betriebsstundenabfragen etc. 
etc)


Und genau da liegt mein Problem: Ich habe mit div. STM32 Prozessoren 
unter Zuhilfenahme von CubeMX und Cube IDE schon diverse Kommunikationen 
realisiert (USB über VCP, I2C, SPI, RS485 etc.) aber noch NIE etwas mit 
ETH/TCP zu tun gehabt.

Habe schon gesehen, dass der STM32F107VCT6 schon "Ethernet" mit an Bord 
hat, aber ich habe keinerlei Ahnung wie ich hier anfangen soll. Bietet 
die HAL hier etwas "fertiges"?

Hat irgend jemand die "ersten Schritte" diesbezüglich für mich und kann 
mir evtl. sogar sagen wie groß der Aufwand ist so etwas zu portieren 
bzw. wie die Vorgehensweise hier ist?

Für jede ernst gemeinte Antwort bin ich überaus dankbar

von Εrnst B. (ernst)


Lesenswert?

Für eine schnelle Lösung mit möglichst vielen "Fertigbauteilen" könntest 
du dir überlegen, das Arduino-Framework einzusetzen.

Ethernet sollte damit erschlagen sein:
https://github.com/stm32duino/Arduino_Core_STM32/wiki/STM32Ethernet

und für Modbus/TCP:
https://github.com/eModbus/eModbus

Wenn es auch Modbus/TCP über WLan sein darf gäb's noch die "No Code" 
Lösung, die aber etwas Hardware erfordert:

Du lässt deinen STM32 wie er ist (nimmt aber u.U. den RS485 Transciever 
weg)
Du bastelst einen ESP32 dazu (ESP32C3 reicht) und spielst diese Software 
auf:
https://github.com/zivillian/esp32-modbus-gateway
dann mit RX/TX direkt an den STM32, fertig.
Oder, je nach Gegebenheit, einen ESP32 für jeweils ein ganzes 
RS485-Segment, z.B. Stockwerk, je nachdem wie die Kabel liegen.

Wenn WLan zu wackelig ist: ein Fork des modbus-gateway-Projekts läuft 
auch mit Ethernet...

von Joe J. (j_955)


Lesenswert?

Hallo,

ich habe gute Erfahrungen mit einem STM32H7 und den entsprechenden 
Beispielen gemacht. Das ging fast out-of-the-box mit der CubeIDE. Hier 
gibt es genügend Beispiele.

ModbusTCP ist ja was on-top, bei ST wird der LwIP Stack verwendet.
Jetzt ist jede CPU-Familie etwas eigen, da musst du dich mit dem 
Datenblatt auseinander setzen.

Was ich mich frage ist, warum nicht eben nur ein Master Gerät angebunden 
wird - das restliche Netzwerk bleibt wie es ist. Da könntest du auch 
eventuell was fertiges nehmen als Gateway.

von Hanna (schmalspurelektriker)


Lesenswert?

Hallo, danke für die Antworten.

Warum kein Gateway? Das restliche Netzwerk so erhalten wie es ist?
Ganz klar: Alle alten Installationen zielen auf Modbus RTU, für NEUE 
Installationen an NEUEN Gebäuden ist Modbus TCP vorgesehen. Keine Ahnung 
warum :-(

Hättest du für den STM32H7 ein konkretes Beispiel? Da ich mit der Hal 
arbeite habe ich natürlich keine Ahnung wie ich cpp (c plus plus Dateien 
des Arduino) sinnvoll einbinden könnte. Was ich bräuchte wäre echt so 
eine "Anleitung für Dumme", die mir zeigt was ich in der CubeMX wie 
einstellen muss und die mir auch ein Softwarebeispiel gibt.

von Joe J. (j_955)


Lesenswert?

Wähle einfach mal das STM32h743-eval oder 735 oder so Board aus in der 
Cube-IDE und klick dich mal bei den Beispielen durch.

Generell kannst und solltest du:
-das Freertos mit-konfigurieren
-den LWIP Stack mit-konfigurieren

Ich weiß jetzt nich genau, ob da die ioc Files bei den Beipspielen IMMER 
mit dabei sind. Dort wird eben auch die Middleware konfiguriert. Aber 
das wäre so der Anfang. Den Rest musst du selbst machen.
Oder habt ihr Budget über für einen Externen?
(Zwinker, Zwinker...)

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.