ich habe vor mit einem Raspberry Pi auf dem Node-RED läuft, Sensoren und Aktoren anzusteuern. Jeder Sensor / Aktor, bzw. jede Gruppe dieser soll eine eigene Platine (Modul) mit µC auf Arduino-Basis bekommen. Die Idee dahinter ist das schnelle Austauschen und Erweitern der Komponenten (Module) sowie die Vereinfachung der Firmwarebestandteile, was hoffentlich wiederum zur Stabilität der Firmware beiträgt. Die Module sollen untereinander nicht kommunizieren. Jede Kommunikation soll vom Node-RED als Prozesssteuerinstanz ausgehen.
Für die Kommunikation zwischen Node-RED und den Modulen habe ich mir bisher die RS485 mit Modbus RTU ausgesucht. Bin mir aber nicht sicher, ob das für mein Vorhaben wirklich der ideale Ansatz ist. Funktionieren tut es auf jeden Fall in ersten Testaufbauten.
Die Module sind alle lokal beisammen und haben eine maximale Leitungslänge zum Raspberry von ca. 150 cm (maximale Buslänge).
Jetzt meine Frage an euch Wissende ... Bin ich mit dem RS485 und Modbus auf dem richtigen Weg der Umsetzung, oder gibt es bessere Kommunikationsmöglichkeiten für mein Vorhaben. Wichtig ist mir, dass alles drahtgebunden ist. Funk ist für mich keine Option.
Habt schon mal vielen Dank für eure Kommentare :-)
Hmm die Frage nach dem "warum" ist eine gute Frage :-D
Ich habe es im I-Net so gelesen, dass man es trennen sollte. Alle Module werden rein von der Versorgungsspannung die selbe Masse bekommen.
Es wird ein großes 24V Netzteil geben, von wo aus dann auf die zusätzlich benötigten 12V, 5V und 3.3V runtergeregelt wird.
Ist dir bekannt, das (nicht galvanisch getrennter) RS485 bis zu 7 Volt
Potentialdifferenz zwischen den Modulen toleriert? Reicht dir das nicht?
Nein ist mir nicht bekannt. So detailliert habe ich mich mit der RS485 nicht auseinandergesetzt. In einem I-Net-Beitrag wurde geschrieben, dass die RS485 von der jeweiligen Schaltung galvanisch isoliert worden ist, da dass Standard wäre. Warum die das gemacht haben und welche Auswirkungen das aus die RS485 hat, habe ich, zugegeben, nicht hinterfragt. Ich bin davon ausgegangen, dass die Isolation einfach zum RS485-Standard gehört und gemacht werden sollte, damit der Standard sauber umgesetzt ist.
Ist die galvanische Trennung trotz der "gleichen" Spannungsquelle jetzt so schlimm? Also abgesehen von dem Mehraufwand in der Schaltung.
OK, dann kann ich das erste PCB-Layout, was ich für den Test bereits anfertigen lasse beibehalten und reduziere dann die Schaltung für die anderen Module.
Vielen Dank für den Hinweis zur galvanischen Trennung. Spart mir Platz und etwas Geld ;-)
Ich habe bei mir für meine aufwendige modulare (Eigenbau) Wetterstation ein 9600Bd RS-485 System mit fünf Busteilnehmern mit 100m Kabellänge seit 2001 erfolgreich in Betrieb. Ausfälle oder Probleme - keine. Allerdings nicht mit Modbus, sondern es wird ein eigenes Protokoll verwendet. Die meisten Slave Bustransceiver sind MAX483 und einen SN75176 beim Master. Als Kabel verwende ich CAT5 im PVC Rohr. Drei Paare sind für die 15V Stromversorgung reserviert und ein Paar für die Datenübertragung.
Die eigentliche Wetterstation hat einen eigenen Blitzschutzerder. Zwischen Haus und Station haben aber bis jetzt mögliche Potenzialdifferenzen niemals gestört. Deshalb verzichtete ich auf eine galvanische RS-485 Potenzialtrennung.
Gerhard
Nachtrag:
Es empfiehlt sich beim Master, 470 Ohm Widerstände von TR+ nach Vcc und von TR- auf Masse mitanzuschließen um eindeutige Busspannungsverhältnisse im Idle Zustand und gewissen Busfehlern zu schaffen. Die Begründung gibt es in der einschlägigen Fachliteratur.
Übrigens, die 120 Ohm Abschlußwiderstände sollte zwischen den entferntesten Punkten sein. Es ist anzustreben, eine lange Leitung zwischen Master und einigen Slaves zu haben, die entfernt dann sternförmig über viel kürzere Leitungen zusammengeschlossen sind.
Für ein anderes Batteriebetriebenes Wetterstationsprojekt mit "Billig" Elektronik verwende ich durchwegs China RS-485 Module mit MAX485 drauf und modifizierte Pro-Mini Bords für Sensoren. Mit diesem Konzept kann ich z.B. ferne Sensoren (Pro-Mini) über RS-485 zeitlich begrenzt aufwecken. Funktioniert gut.
Ich bin davon ausgegangen, dass die Isolation einfach zum
RS485-Standard gehört und gemacht werden sollte, damit der Standard
sauber umgesetzt ist.
Die überwiegende Mehrheit der RS485 Schnittstellenmodule ist nicht galvanisch getrennt. Sie ist in der Regel unnötig, weil die betroffenen Geräte ein gemeinsames GND Potential haben.
Du hast nicht geschrieben, wie schnell das Ganze reagieren muss. Ich habe gerade das Projekt eines Verkaufsautomaten abgeschlossen. Auch hier steuert ein Raspi zentral eine ganze Anzahl von Arduino-getriebenen Komponenten:
Geldscheinleser ("note validator")
4x Münzrückgabe ("Hopper" MK4)
Bondrucker
RFID-Leser für Kundenkarten
Block mit 8 farbig steuerbaren LED-Tastern
EC-Reader Feig cVend (dieser ist ohne Arduino selber LAN-fähig)
Ich verwende Ethernet als Verbindungsmedium. Die einzelnen Komponenten werden per HTTP-GET-Request gesteuert bzw. abgefragt. Für ein Gerät, das auf menschliche Bedienung "wartet" ist das schnell genug ...
Dieser Protoyp arbeitet tasächlich mit Arduino Unos bzw. Megas und Ethernet-Shield. Das nächste Modell wird stat dessen WT32-ETH10 (ESP32 mit LAN) enhalten.
Im "Zentrun" des gesamten Aufbaues befindet sich ein 8-Port-Switch, ein Minirouter beherbergt einen DHCP-Server und gestattet per VPN externe Zugriffe für Einstellungen/Wartung ...
@Gerhard
vielen Dank für deinen Erfahrungsbericht und den Anmerkungen. Dieser werde ich in das Design mit einfließen lassen.
@Stefan
Da die überwiegende Meinung hier von einer galvanischen Trennung in meinem Fall abrät, werde ich auch darauf hören. Wäre ja sonst dumm von mir, wenn ich eure Meinung einhole, mich dann rumdrehe und sage ... "ach sollen die doch machen was sie wollen" ;-) ... Um Hinweise zu erhalten habe ich hier die Frage gestellt und ihr alle habt mir den Weg noch einmal erhellt. Vielen DANK dafür :-)
@Frank
Dein Projekt klingt auch sehr interessant, aber ich glaube Ethernet wäre für meinen Fall zu oversized. In meinem Projekt reicht eine RS485 mit 9600Bd vollkommen aus. Es ist nichts wirklich zeitkritisches dabei. Selbst wenn ein Datenpaket auch mal fünf Sekunden braucht, würde das in meinem Fall nicht weiter stören. Ich bin doch ein gemütlicher Mensch, daran müssen sich meine Projekte auch halten :-P
@Frank
Dein Projekt klingt auch sehr interessant, aber ich glaube Ethernet wäre
für meinen Fall zu oversized. In meinem Projekt reicht eine RS485 mit
9600Bd vollkommen aus. Es ist nichts wirklich zeitkritisches dabei.
Selbst wenn ein Datenpaket auch mal fünf Sekunden braucht, würde das in
meinem Fall nicht weiter stören. Ich bin doch ein gemütlicher Mensch,
daran müssen sich meine Projekte auch halten :-P
Eigentlich wollte ich sagen, dass es in meinem Falle garnicht so besonders schnell ist. Die reine Datenübertragung schon, aber die Reaktionszeit ist durch das Auswerten und Beantworten der Requests auf dem Arduino gearde so (für meinen Zweck) ausreichend. Ansonsten ist m.E. der große Vorteil, dass es billig fertige Buchsen, Stecker, Kabel, Switche usw. gibt und man sich darum nicht auch noch Gedanken machen muss.
Ethernet Kabel Infrastruktur wäre eigentlich auch für RS-485 Bus Systeme nicht uninteressant, weil wie Frank schon aufführt, die Kabel und Verbinder billig und leicht in ausreichender Auswahl im Handel verfügbar sind.
Je nach Stromverbrauch könnte man dann auch noch die übrigen Paare für die Stromversorgung heranziehen. Um Verwechslungen mit Ethernet auszuschliessen, würde ich allerdings eine ungewöhnliche Farbe, wie z.B. Violett oder POE gekennzeichnete Farben verwenden. Auch die RJ-45 Buchsen sind angenehm, weil es nämlich schon RJ-45 Buchsen auf Schraubterminal Adapter gibt.
Auch wäre die Möglichkeit gegeben, POE zur Stromversorgung der Sklavenmodule zu verwenden. Wenn man Standard 4-Paar POE nimmt, dann bleiben zwei Paare für RS-485 übrig und die Verbleibenden für die Stromversorgung. Die 44V@15W lassen sich leicht mit Step-Down Wandlern umwandeln. Ich erwähne das nur für den Fall der Fälle:-)
Übrigens, es muß nicht unbedingt Modbus sein. Ich kommuniziere mit meiner Wetterstation über ein robustes eigenes ASCII Protokoll mit dem sich leicht steuern lässt. Modbus kann langsam werden wenn auf viele Register zugegriffen werden muß. Aber da führen viele Wege nach Rom.
In Zahlen: 1? Ziemlich wenig Information als Grundlage...
Mein Tipp: sieh dir die Datenblätter und AppNotes der üblichen Treiberbausteine und die Beispielschaltungen darin mal genauer an. Denn für den dort beschriebenen Aufbau sind die Transceiver ausgelegt.
Ethernet Kabel Infrastruktur wäre eigentlich auch für RS-485 Bus Systeme
nicht uninteressant ...
die übrigen Paare für die Stromversorgung heranziehen.
Wenn man sowas macht, dann sollte man zwingend darauf achten, dass man nicht irgendwelche Adern nimmt, sondern wenigstens solche, die POE auch verwendet. Das ist nämlich so belegt, dass ein normaler versehentlich angeschlossener nicht POE-fähiger Ethernet-Teilenehmer dann nicht kaputtgeht.
Denn es ist wirklich ärgerlich, wenn jemand, der diese Andersartigkeit nicht kennt, aufgrund der Ähnlichkeit seinen 2k€ Laptop schrottet. Die Drähtchen in einem Ethernet-Trafo sind wirklich hauchdünn...
Ist die galvanische Trennung trotz der "gleichen" Spannungsquelle jetzt
so schlimm? Also abgesehen von dem Mehraufwand in der Schaltung.
Der Witz ist: du musst die Masse der beteiligten RS485 Transceiver ja trotzdem verbinden. Denn sonst schaffst du es nicht, den Gleichtaktbereich für die Empfäanger sicher zu definieren.
Diejenigen, die den RS485-GND weglassen und nur die Datenleitungen verbinden und sich dabei auf die in den ICs integrierten "Balancerwiderstände" verlassen, gehen m.E. auf ziemlich glattem Eis. Wenn man sowas macht, sollte man unbedingt ein sehr robustes Protokoll mit Fehlerbehandlung und Retransmission verwenden.