RS485 Kommunikationsfehler bei mehreren Slaves

Gast #3486150
Lesenswert?

Liebe Bus Experten,

meinem RS485 Netzwerk (National Instruments 9871 als Master, Power Meter 
bzw. ICPDAS 7017 analoge Messbox als Slave) läuft gut mit einem Slave. 
Bei 2 oder mehr (egal von welcher Sorte) bekomme ich Timeouts auch schon 
bei 9600. Eine Signalanalyse hat gezeigt das zwar die Befehle richtig 
gesendet werden aber die Slaves nicht zuverlässig antworten (wie gesagt, 
bei nur einem geht es).

Bei einem anderen Versuch mit einem RS485/USB-Konverter als "Slave" (und 
einem kleinen LabVIEW-Programm um das Verhalten der Slaves zu simulieren 
- der "Slave" empfängt die Kommandos und sendet je nach Adresse einen 
Antwortstring) geht es mit 10 "Slaves" und 115200 fehlerfrei.

Den 2. Versuch habe ich gemacht um den Master (Hardware, VISA, Programm) 
und die Verkabelung (Cat5 mit 100 Ohm Abschluss weil das der 
Wellenwiderstand des Cat5 ist) zu testen.

Ich habe noch kein RS485 Netzwerk für hohen Durchsatz gebaut, aber ich 
wäre überrascht wenn das nicht gehen würde.

Ich bin für jeden Tip dankbar,
Grüße, Günter
Gast #3486154
Lesenswert?

Wie ist dein Bus aufgebaut?
Wo sitzen bzw sitzt der Anschlusswiderstand?

Bei vernünftigen Treibern, Verkabelung, Abschluß geht das in der 
Industrie auch deutlich weiter und mit einer höheren Datenrate. Siehe 
die ganzen Gebersysteme.
Gast #3486211
Lesenswert?

kläb schrieb:
> geht das in der
> Industrie auch deutlich weiter und mit einer höheren Datenrate

Ja, das denke ich auch, aber ich steh irgendwie auf der Leitung. Ich 
habe am Beginn und Ende den 100R aber keine pull up/down weil ich keinen 
Zugang zur Versorgungsspannung der Bustreiber habe. Kann das eine Rolle 
spielen?

Und, das habe ich noch vergessen zu erwähnen, es ist nur eine 2-Draht 
Verkabelung A+/A- und GND also Halb-duplex, weil die Slaves so aufgebaut 
sind.

Der Master sendet in einer Schleife den Request, wartet bis die 
geforderten Bytes anstehen und ließt den String aus. Dieser wird danach 
verarbeitet und der Request an die nächste Adresse gesendet. Es sollte, 
wie gesagt, so schnell als möglich Abgefragt werden, daher bin ich mit 
Pausen eher sparsam. Die schleife läuft gleich schnell, egal ob ich 
einen oder mehrere Slaves anspreche also sollten die Slaves ja 
eigentlich mehr Zeit zum Antworten habe wenn ich mehrere Geräte 
verwende.
Gast #3486253
Lesenswert?

Günter schrieb:
> Den 2. Versuch habe ich gemacht um den Master (Hardware, VISA, Programm)
> und die Verkabelung (Cat5 mit 100 Ohm Abschluss weil das der
> Wellenwiderstand des Cat5 ist) zu testen.

Das funzt, also mach den umgekehrten Versuch und ersetze den Master.

Erstmal mit einem slave, dann langsam steigern.

Wenn das läuft werden sich die beiden nicht vertragen. Das kann dann 
jede Menge Ursachen haben (Umschaltverhalten, bei Cat5 kein paar 
erwischt etc pp) aber wenn es mit 9600 nicht läuft tippe ich auf falsche 
Verdrahtung.

Die Abschlussswiderstände sind bei dem speed nicht wichtig.

Zwei hundert Ohm Serienwiderstände in die Datenleitung (um die slew rate 
zu begrenzen) kann auch helfen, aber das ist dann schon Master/Slave 
Voodoo wenn man nicht mehr weiter weiß.
Gast #3486279
Lesenswert?

Günter schrieb:
> Es sollte,
> wie gesagt, so schnell als möglich Abgefragt werden, daher bin ich mit
> Pausen eher sparsam.

Dann nimm eine höhere Baudrate, aber spare nicht mit der Pause beim 
Umschalten von Senden auf Empfangen. Der Sender muß abwarten, bis sein 
Stoppbit vollständig ausgegeben ist.
Gast #3486360
Lesenswert?

Jens Martin schrieb:
> Das funzt, also mach den umgekehrten Versuch und ersetze den Master.

Gute Idee, habe ich auch gemacht :) und den RS485/USB Konverter als 
Master statt dem cRIO genommen, hat aber genauso reagiert.

Die Verdrahtung ist sicher OK, aber das mit dem Serienwiderstand werde 
ich probieren, danke!
Gast #3486376
Lesenswert?

m.n. schrieb:
> Der Sender muß abwarten, bis sein
> Stoppbit vollständig ausgegeben ist.

Da hätte ich mich auf den VISA Layer von National Instruments verlassen, 
dass der darauf achtet. Ich verstehe nicht warum (mit gleichen Timing) 
zwei aufeinander folgende Befehle ans gleiche Gerät super funktionieren 
und an 2 unterschiedliche 5%-10% Fehler verursachen.

Ich werde nochmals Pausen erzwingen, danke für die Tipps.
Gast #3486437
Lesenswert?

Du musst die A/B-Leitungen mit Widerständen auf Vcc/2 an einer
Stelle terminieren.
Denn die Offsetströme der Bustreiber heben Dir Deinen Pegel derart an, 
dass sie von den Treibern nicht mehr erkannt werden, wenn sie gegen Vcc 
gehen oder gegen 0V. Sieh Dir mal die A/B-Leitungen mit dem Oszi (gegen 
Gnd) an, dann siehst Du, was Sache ist.
#3486449
Lesenswert?

Günter schrieb:
> Ich
> habe am Beginn und Ende den 100R aber keine pull up/down weil ich keinen
> Zugang zur Versorgungsspannung der Bustreiber habe.

Die Pull-Up/Pull-Down Widerstände sind aber wichtig, denn sonst ist in 
der Pause zwischen 2 Telegrammen der Zustand auf der Leitung 
undefiniert. Die Empfänger können "umkippen" (also den Ruhezustand 
verlassen) und die erste Flanke (Startbit) des ersten gesendeten Zeichen 
geht verloren. Der UART synchronisiert dann falsch.

Gruß Dietrich
Gast #3487621
Lesenswert?

Rufus Τ. Firefly schrieb:
> Wie ist denn Dein Gerät konfiguriert?

Ich verwende VISA und erhalte sowohl unter Windows als auch unter RT die 
gleichen Ergebnisse. Ich hatte früher schon mal ein RS232 Modul mit FPGA 
direkt angesprochen und für ein anderes low-speed Projekt VISA 
erfolgreich verwendet. Ich habe mich hier für VISA entschieden weil ich 
dachte dass die verwendet SW Treiber für die Bausteine optimiert sind. 
Und für ein Gerät geht es ja auch gut ...
#3487656
Lesenswert?

Bei Master + 1 Gerät gehts.
Bei Master + 2 Geräte gehts nicht so gut.
Bei Master + Masterahnliche Geräte als Geräteemulation gehts.

=> Brummschleife der Geräte zueinander, nur der Master hat galvanische 
Trennung oder genug Common-Mode-Bereich?

=> Viel elektromagnetische Verseuchung in der Umgebung?  Masse des RS485 
mitführen? Schirmung des Signalkabels?
Gast #3487670
Lesenswert?

Dietrich L. schrieb:
> Die Pull-Up/Pull-Down Widerstände sind aber wichtig

Das 9871 Modul verwendet einen MAX3076 Treiber welcher, ich zitiere das 
Datenblatt:

These devices feature fail-safe circuitry,
which guarantees a logic-high receiver output when the
receiver inputs are open or shorted, or when they are
connected to a terminated transmission line with all drivers
disabled.

meiner Meinung nach dafür sorgt. Außerdem habe ich von außen keinen 
Zugang zur Versorgungsspannung des Treibers.
Gast #3487683
Lesenswert?

Joachim K. schrieb:
> Bei Master + 1 Gerät gehts.
> Bei Master + 2 Geräte gehts nicht so gut.
> Bei Master + Masterahnliche Geräte als Geräteemulation gehts.
>
> => Brummschleife der Geräte zueinander, nur der Master hat galvanische
> Trennung oder genug Common-Mode-Bereich?
>
> => Viel elektromagnetische Verseuchung in der Umgebung?  Masse des RS485
> mitführen? Schirmung des Signalkabels?

Das werde ich mir nochmals genau mit dem Oszi anschauen. Beim ersten 
Check ist mir nichts ungewöhnliches aufgefallen aber ich prüfe das 
nochmals ich komm erst am Donnerstag wieder ins Labor. Vielen Dank für 
den Tipp!
Persönliche Seite #3487712
Lesenswert?

Günter schrieb:
>> Wie ist denn Dein Gerät konfiguriert?
>
> Ich verwende VISA

Das ist die Software. Mich interessierte eher die Konfiguration des 
Gerätes selbst, da scheint man zwischen Steuerung per DTR und "Auto" und 
Zwei- und Vierdrahtbetrieb wählen zu können. DTR bedeuet, daß die 
Software sich darum kümmern muss, "Auto" sollte bedeuten, daß die 
Hardware des Gerätes sich selbst um die Sender-/Empfänger-Umschaltung 
kümmert, wie es jede etwas bessere UART auch unterstützt.
Gast #3487801
Lesenswert?

Bei den Slaves habe ich keine Steuerleitungen, nur A+/A- daher muss ich 
im 2-Drahtbetrieb mit "Auto" Konfiguration arbeiten. In diesem Mode ist 
lt. NI immer auf "Empfang" geschaltet außer wenn gesendet wird. Auf das 
Umschalten selbst habe ich keinen Einfluss.
Persönliche Seite #3487973
Lesenswert?

Günter schrieb:
> daher muss ich im 2-Drahtbetrieb mit "Auto" Konfiguration arbeiten.


Das sollte auch die bestmögliche Variante sein. Hättest Du das nämlich 
selbst per DTR "in die Hand genommen", gäbe es nach dem Senden eine 
potentielle Totzeit, in der die Slaves antworten können, der Treiber 
aber noch im Sendebetrieb steht und also nichts empfangen werden kann. 
Würde zu früh umgeschaltet werden, könnte das Senden selbst verstümmelt 
werden.

Deswegen sind UARTs mit Hardware-RS485-Unterstützung --der 
"Auto"-Betrieb-- eindeutig zu bevorzugen.

Immerhin: Das ist hier also nicht die Fehlerquelle.
Gast #3491549
Lesenswert?

Ich konnte heute einige Tests machen und das Verwenden von pull up/down 
Widerständen hat die Fehler beseitigt, wie es scheint (Tests laufen zur 
Zeit noch). Ich musste eine externe 7V Quelle verwenden da die 
Treiberversorgung nicht herausgeführt ist. Ich verstehe es zwar noch 
immer nicht so 100% da ich dachte der MAX3076 braucht das nicht, aber 
Hauptsache es klappt erstmal.

Ich möchte mich bei allen für die zahlreichen Hinweise herzliche 
bedanken!
Grüße, Günter
#3491581
Lesenswert?

Günter schrieb:
> Ich verstehe es zwar noch
> immer nicht so 100% da ich dachte der MAX3076 braucht das nicht, aber
> Hauptsache es klappt erstmal.

Die zusätzlichen pull up/down Widerstände erhöhen zumindest die 
Störfestigkeit des Ruhezustands.
Vielleicht ist da ja irgendwelcher "Dreck" auf der Leitung oder 
kritische Masseschleifen, die stärker sind als die "fail-safe circuitry" 
des MAX?
Oder das Abschalten des Senders hinterlässt noch einen unsauberen 
Zustand auf der Leitung, der durch die Widerstände schneller verlassen 
wird?

Gruß Dietrich
Gast #3491737
Lesenswert?

>Arsenico schrieb:
>> Jeder Slave benötigt eine eigene Adresse !

>Ja, das ist mir schon klar ...

Und welche Adresse hat Slave 1 ? Slave 2 usw ...

Wenn du Slave 1 einzeln ranhängst und ihn mit seiner Adresse ansprichsts 
antwortet er ?
Wenn du Slave 2 einzeln ranhängst und ihn mit seiner Adresse ansprichsts
antwortet er ?
Wenn du Slave 1 einzeln ranhängst und ihn mit einer anderen Adresse 
ansprichsts  antwortet er ?
Wenn du Slave 2 einzeln ranhängst und ihn mit einer anderen Adresse 
ansprichsts  antwortet er ?
Gast #3496830
Lesenswert?

Uwe schrieb:
> Und welche Adresse hat Slave 1 ? Slave 2 usw ...
Jeder hat eine andere Adresse (2,3,4,5,...)
>
> Wenn du Slave 1 einzeln ranhängst und ihn mit seiner Adresse ansprichsts
> antwortet er ?
Ja
> Wenn du Slave 2 einzeln ranhängst und ihn mit seiner Adresse ansprichsts
> antwortet er ?
Ja
> Wenn du Slave 1 einzeln ranhängst und ihn mit einer anderen Adresse
> ansprichsts  antwortet er ?
Wenn ich die Adresse auf dem Slave und im Programm ändere: Ja
> Wenn du Slave 2 einzeln ranhängst und ihn mit einer anderen Adresse
> ansprichsts  antwortet er ?
Wenn ich die Adresse auf dem Slave und im Programm ändere: Ja

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren