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
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.
Günter schrieb: > meinem RS485 Netzwerk (National Instruments 9871 als Master, Power Meter > bzw. ICPDAS 7017 analoge Messbox als Slave) läuft gut mit einem Slave. Achso, oder gibt es vllt. irgendwelche Kollisionen o.ä.?
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.
Günter schrieb: > National Instruments 9871 Wie steuerst Du das Ding an? Erledigt es die Sende-/Empfangs-Umschaltung für den RS485-Treiber selber oder machst Du das etwa mit Deiner Software von Hand?
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ß.
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.
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!
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.
Günter schrieb: > Da hätte ich mich auf den VISA Layer von National Instruments verlassen, > dass der darauf achtet. Wie ist denn Dein Gerät konfiguriert? Der 9871 bietet ja wohl verschiedene Möglichkeiten, den RS485-Bus anzusteuern; welche davon nutzt Du?
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.
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
Rufus Τ. Firefly schrieb: > Wie steuerst Du das Ding an? Ich benutze den VISA Layer von NI, der übernimmt das Umschalten, auf der SW Seite habe ich nur noch Write/Read Blöcke. Ich war der Annahme dass NI weiß wie sie am besten mit ihren Treibern reden.
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 ...
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?
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.
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!
Zwischendurch mal an alle: Vielen Dank für die vielen Hinweise, ich komme erst am Donnerstag dazu alles auszuprobieren, aber jetzt weiß ich schon worauf ich achten soll.
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.
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.
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.
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
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
>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 ?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.