Moin Leute,
in Zuge einer Abschlussarbeit muss ich mich mit einem RS485 Bus
beschäftigen. Der Bus verbindet eine RC Regler mit einem Laptop. Ziel
ist es, einzelne Parameter abzufragen. Laut Hersteller arbeitet der
Regler nach dem Query-Answer Prinzip. Ich schicke also eine Anfrage und
bekomme eine Antwort. Das Funktioniert aber leider nicht. Der Hersteller
hat mir ein Bild geschickt, bei dem eine Antwort kommt (unteres
Oszibild). Jetzt zu meiner Frage. Wieso antwortet der Regler bei Ihm und
bei mir leider nicht?
Herstellervorgaben sind: 1 Startbit, 1 Stoppbit, kein Parität-Bit und
eine Baudrate von 38400
Gesendet wird: Fe 00 01 01 in Hex
Ich verwende einen Digitus Rs485 to USB. Laut gilt Hersteller A+485 und
B-485
Im direkten Vergleich zwischen meinem Bild (oben) und dem Bild des
Herstellers, ist ein Unterschied beim Startbit zu erkennen. Kann das der
Grund sein?
Des Weiteren ist Kanal A und B vertauscht. Ich habe alles in Absprachen
mit dem Hersteller angeschlossen. Ein Wechsel der Leitungen erbrachte
auch keinen Erfolg.
Ich hoffe Ihr könnt mir helfen.
Gruß
Und wie löst der Digitus-Wandler das Thema
Sender-/Empfänger-Umschaltung?
Damit Du etwas empfangen kannst, musst Du den RS485-Sender so schnell
wie möglich nach dem Senden des letzten Bits abschalten.
Geschieht das nicht, wird vom Sender aktiv der RS485-Bus belegt, was das
Empfangen erfolgreich verhindert.
Es gibt RS485-Adapter, die das in Hardware selbst erledigen (so z.B. die
Kombination eines FT232 mit einem RS485-Treiber laut Musterbeschaltung
im Datenblatt), aber es gibt auch welche, bei denen das der PC per
Software machen muss.
Vielleicht musst Du diese Hardware-Ansteuerung bei Deinem Adapter auch
eigens einschalten?
Nimm Dein Oszillogramm mal auf, wenn die Gegenstelle nicht mit Deinem
Adapter verbunden ist. Nach dem letzten gesendeten Bit muss sich der
Zustand gegenüber dem Stopbitpegel verändern. Tut er das nicht, hast Du
o.g. Problem.
Du weißt ja dass bei RS485 immer nur einer senden darf, und alle anderen
Busteilnehmer müssen empfangen? Wie schaltest Du die Senderichtung ein
bei dem Schnittstellenwandler? Beim Request muss der auf Senden gehen,
und direkt danach auf Receive -- sonst kannst Du die Antwort nicht
hören.
Wieso, Du bekommst Doch eine Antwort ?
Man sieht deutlich das Dein Wandler den Bus freigibt und der Slave seine
Antwort absetzt.
Dein Problem ist wohl eher die PC Seite.
Aktuelle Treiber und Docklight verwenden.
das was Rufus sagte hätte ich auch vermutet, aber der Adapter hat eine
FT232RL, der sollte laufen. Es sei denn der Adapter kommt aus
Asien.(Nachbau)
Kannst du deine Messung zum Org. mal gleich machen?
Deine Messung ist etwas anders(kürzer?), aber es kann auch an der
Auflösung liegen.
Höpke schrieb:> Wie der Konverter zwischen Senden und Empfangen umschaltet, konnte ich> leider noch nicht herausfinden.
TXDEN !
Macht der FTDI in Hardware, wenn richtig konfiguriert.
Höpke schrieb:> Das schwarze Oszibild ist vom Hersteller. Bei Ihm antwortet der> Regler.
Die Signale des Reglers scheinen mir unterhalb der Hysterese des MAX zu
sein! Auch wenn der Bus differentiell ist, so benötigt man doch eine
Mindestspannung...
Ich sehe bei Dir vom Hersteller 1V und der MAX485 braucht 2V min für
High
Marc H. schrieb:> Die Signale des Reglers scheinen mir unterhalb der Hysterese des MAX zu> sein! Auch wenn der Bus differentiell ist, so benötigt man doch eine> Mindestspannung...
...und die liegt bei 200mV.
Nun sehe ich hier zwar keine Achsenbeschriftung, wenn das Querry-Signal
jedoch ordentlich groß ist (mehrere Volt), dann reicht auch der
Antwort-Pegel.
Rufus Τ. F. schrieb:> Damit Du etwas empfangen kannst, musst Du den RS485-Sender so schnell> wie möglich nach dem Senden des letzten Bits abschalten.
Macht er doch, siehe oberes oszi-Bild.
Ich tippe auf:
* a/b vertauscht
* Failsafe vertauscht
Obiges gibt genau 4 mögliche Kombinationen nur eine davon wird
funktionieren. Die gilt es herauszufinden.
a und b sind oft nicht der Norm entsprechend bezeichnet (vertauscht),
irgendein schlampiger Transceiverhersteller hat das vor langer Zeit mal
in seinem Datenblatt versehentlich verbockt, ein paar andere habens
blind nachgemacht und seitdem herrscht Chaos. Die Buchstaben kannst Du
also getrost vergessen.
Manche Gerätehersteller bezeichnen die Anschlüsse daher auch mit D+ und
D-, das ist schon unmissverständlicher. Notfalls messen wo invertierter
und nicht-invertierter Anschluss ist und/oder ausprobieren.
Bernd K. schrieb:> a und b sind oft nicht der Norm entsprechend bezeichnet (vertauscht),> irgendein schlampiger Transceiverhersteller hat das vor langer Zeit mal> in seinem Datenblatt versehentlich verbockt, ein paar andere habens> blind nachgemacht und seitdem herrscht Chaos. Die Buchstaben kannst Du> also getrost vergessen.
Im Datenblatt kann man die Beschaltung sehen. A-->+485 und B-->-485
Wenn ich die Leitungen tausche sehe ich in meinem Programm eine 00 als
Antwort
Tcf K. schrieb:> Bist Du sicher dass Du mit 38400 sendest? Wenn ich mir Dein> Startbit> ansehe sieht das eher nach 9600 Baud aus...
Wie kommst Du denn darauf? Bei 9600 wäre ein Bit über 100us lang, das
ist hier definitiv nicht der Fall.
Höpke schrieb:> Im Datenblatt kann man die Beschaltung sehen. A-->+485 und B-->-485
Das ist auch üblich.
> Wenn ich die Leitungen tausche sehe ich in meinem Programm eine 00 als> Antwort
Aber im Oszillogramm ist immer noch keine Antwort zu sehen?! (Oder doch
oder was?)
Höpke schrieb:> Dieses Bild zeigt den Bus ohne weitere Teilnehmer
Da fehlen eindeutig die Failsafe-Pullups/Pulldowns um die Vorspannung im
Leerlauf herzustellen. Die braucht man nur einmal im ganzen Bus und sind
oft nicht im Gerät sondern werden kurzerhand als bereits vorhanden zu
seiender Teil der installierten Bus-Infrastruktur angesehen. Manchmal
gibts auch Jumper an den Geräten um bei Bedarf welche zuzuschalten,
manchmal wird auch lapidar darauf hingewiesen dafür Sorge zu tragen dass
am Bus diese Komponenten bereits vorhanden zu sein haben.
Also: Googlen wie so ein Bus vorgespannt und abgeschlossen sein muss.
Vermutlich schaltet der erste Teilnehmer seinen Sender nicht aus,
deshalb treiben beide Sender gegeneinander, was bei gleichen Sendern
dazu führt, dass Du ungefähr halbe Pegel bekommst.
38400 Baud ist Herstellervorgabe und in meinem Programm eingestellt.
Pegel müssten auch passen. 2-2,5 Volt in Idel und dann gehen A und B auf
ca 3,5 und 1,5 Volt. Differnez > 200mv
Christian B. schrieb:> Vermutlich schaltet der erste Teilnehmer seinen Sender nicht aus,
Nein, schau aufs Oszillogramm, da siehst Du dass er sofort abschaltet.
Der Fehler ist daß ganz offensichtlich deutlich zu sehen ist daß
Failsafe und Terminierung vergessen wurden.
Christian B. schrieb:> Vermutlich schaltet der erste Teilnehmer seinen Sender nicht aus,
Nee, das sieht anders aus. Da sieht man die Einbrüche der Signale.
Der Sender gibt hier den Bus frei und da keine failsafe Rs geht der auf
Mitte.
Höpke schrieb:> Dieses Bild zeigt den Bus ohne weitere Teilnehmer
Ich habe mich schon gefragt was diese komische Strichzeichnung da oben
soll auf der rein garnichts zu erkennen ist.
Jetzt klär mich mal auf was die zwei Messungen sollen.
Es geht doch gerade um einen Bus. Klemm einen Tastkopf zwischen AB und
zeig uns das.
Hast Du den GND von Sender und Empfänger verbunden ?
Wenn nein dann mach das mal.
Bernd K. schrieb:> Der Fehler ist daß ganz offensichtlich deutlich zu sehen ist daß> Failsafe und Terminierung vergessen wurden.
Ja, aber das macht bei kurzen Strecken nicht viel aus.
Das müsste ein sehr empfindlicher Slave sein das der deterministisch
immer Fehler erkennt und nicht antwortet.
Bernd K. schrieb:> Der Fehler ist daß ganz offensichtlich deutlich zu sehen ist daß> Failsafe ... vergessen wurden.
Das Oszillogramm spricht dafür, trotzdem im Schaltplan des Konverters
welche eingezeichnet sind.
mse2 schrieb:> Bernd K. schrieb:>> Der Fehler ist daß ganz offensichtlich deutlich zu sehen ist daß>> Failsafe ... vergessen wurden.> Das Oszillogramm spricht dafür, trotzdem im Schaltplan des Konverters> welche eingezeichnet sind.
Im Schaltplan sehe ich Failsafe-Pullups/Pulldowns oder seh ich das nicht
richtig?
Bernd K. schrieb:> Da fehlen eindeutig die Failsafe-Pullups/Pulldowns um die Vorspannung im> Leerlauf herzustellen. Die braucht man nur einmal im ganzen Bus und sind> oft nicht im Gerät sondern werden kurzerhand als bereits vorhanden zu> seiender Teil der installierten Bus-Infrastruktur angesehen. Manchmal> gibts auch Jumper an den Geräten um bei Bedarf welche zuzuschalten,> manchmal wird auch lapidar darauf hingewiesen dafür Sorge zu tragen dass> am Bus diese Komponenten bereits vorhanden zu sein haben.
Die "Failsafe" und Terminierung sind im Konverter, siehe Schaltplan vom
Posting um 18:31.
Bernd K. schrieb:> Da fehlen eindeutig die Failsafe-Pullups/Pulldowns um die Vorspannung im> Leerlauf herzustellen. Die braucht man nur einmal im ganzen Bus und sind> oft nicht im Gerät sondern werden kurzerhand als bereits vorhanden zu> seiender Teil der installierten Bus-Infrastruktur angesehen. Manchmal> gibts auch Jumper an den Geräten um bei Bedarf welche zuzuschalten,> manchmal wird auch lapidar darauf hingewiesen dafür Sorge zu tragen dass> am Bus diese Komponenten bereits vorhanden zu sein haben.
Ich hab die Failsafe Widerstände makiert. oder sind das keine
Failsafe-Widerstände???
Wenn mit der Hardware alles okay ist, wo liegt dann der Fehler??? Ich
benutze zum Test Awavo Com Port Monitor. Muss ich den Bus über die
Software freischalten, um die Antwort zu bekommen????
Höpke schrieb:> Ich hab die Failsafe Widerstände makiert. oder sind das keine> Failsafe-Widerstände???
Doch, eindeutig, das sind welche. Aber im Oszillogramm ist nichts davon
zu sehen. Geht das Oszillogramm auch mit dünneren Linien, da sollten
schon mindestens 300mV oder mehr Differenz zu sehen sein, wenn Du keinen
zweiten Abschluss auf der anderen Seite hast sogar eher mehr als ein
halbes Volt, sollte also deutlich zu sehen sein.
Sind da vielleicht noch Jumper oder Lötbrücken um die einzuschalten oder
sind sie nur vorgesehen und in diesem Exemplar nicht bestückt?
Michael K. schrieb:> Jetzt klär mich mal auf was die zwei Messungen sollen.> Es geht doch gerade um einen Bus. Klemm einen Tastkopf zwischen AB und> zeig uns das.> Hast Du den GND von Sender und Empfänger verbunden ?> Wenn nein dann mach das mal.
Ich weiß nicht was ich schicken soll. Ich habe GND verbunden und an
Busleitung A Kanal A des Oszis gelegt und an Busleitung B Kanal B
gelegt.
Der Sinn ist es eine Antwort zu bekommen. Die leider nicht kommt
Höpke schrieb:> Ich weiß nicht was ich schicken soll. Ich habe GND verbunden und an> Busleitung A Kanal A des Oszis gelegt und an Busleitung B Kanal B> gelegt.
Du kannst die "MATH"-Funktion des Oszi nehmen um bequem die Differenz zu
messen, dann musst Du nicht wie Michael K vorgeschlagen einen fetten
Kurzschluss mit GND bauen sondern kannst differentiell mit 2 Tastköpfen
messen.
Wenn die Widerstände alle drin sind muss ohne dass einer sendet die
Spannungsdifferenz zwischen beiden Leitung größer 0,5V sein.
Das kannst Du auch mit dem DVM nachmessen.
Ich bin jetzt leider nicht mehr im Labor, aber wenn ich nichts send
(idel)ist keine Differenz zwischen Leitung A und B. Werd aber morgen
nochmal Bilder mit einer besseren Auflösung machen. Vielleicht sind die
Widerstände doch nicht integriert???
Höpke schrieb:> Ich bin jetzt leider nicht mehr im Labor, aber wenn ich nichts send> (idel)ist keine Differenz zwischen Leitung A und B. Werd aber morgen> nochmal Bilder mit einer besseren Auflösung machen. Vielleicht sind die> Widerstände doch nicht integriert???
Ja, so sieht es aus... falls Du den Konverter öffnen kannst sieh nach,
ansonsten extern die beiden 470R anklemmen. Wie gesagt, ohne dass einer
sendet und ohne dass am Konverter noch etwas angeschlossen ist (also
keine zweite Terminierung) sollte eine Differenz von >0,5V anstehen,
einfach mit dem DVM nachzumessen.
Hi,
Mit was hast du das Programm geschrieben ?
Ich hab mit C# ein Programm geschrieben welches über RS485 mit einem
Coriolismassenflussmesser kommuniziert. Hier hab ich nach der Anfrage
den FTDI aktiv auf empfangen umgeschalten. Ob es ohne auch geh hab ich
nicht probiert.
Gruß JackFrost
Bernd K. schrieb:> einen fetten> Kurzschluss mit GND bauen
Ja wenn das Oszi nicht GND frei ist stimmt das natürlich.
Habe dabei etwas in der Klasse meines Tek vorraus gesetzt.
Die Math Methode ist bei einfacheres Oszis sicher die bessere Wahl.
Höpke schrieb:> Der Sinn ist es eine Antwort zu bekommen. Die leider nicht kommt
Ich bin ja bereit zu helfen, aber in dem was Du derzeit an Infos gegeben
hast habe ich da einfach Schwierigkeiten den Fehler zu sehen.
Offensichtlich fühlt sich der Slave nicht angesprochen oder verwirft die
Daten wg. CRC Error.
Was weiß ich, wenn Du AB Vertauschung schon probiert hast, die Bitzeiten
laut Oszi für 38.400 Bps passen und auch eine gemeinsame Masseverbindung
nicht hilft kann man nur noch mit einem ausgefuchsten Program
(Docklight) und einem weiteren RS485 Monitor suchen.
Bist Du sicher das der Slave nicht mitlerweile eine Macke hat ?
Häng doch mal einen RS485 Treiberbaustein auf RX an den Bus und schau
Dir den RO an. Ist es das was du erwartest, oder erkennt der auch nichts
?
Moin,
erstmals vielen Dank für die ganzen Ratschläge. Ich habe mich gestern
nochmal mit meinem Hersteller in Verbindung gesetzt und den Regler nach
dem Gespräch eingeschickt. Wahrscheinlich ist was in dem Regler kaputt
gegangen.
Nichts desto trotz möchte ich die Zeit sinnvoll verwenden und mich
weiter vorbereiten. Die Informationsdichte zum RS485 Bus ist ja eher
dünn. Kennt jemand ein paar zitierfähige Quellen?
Beste Grüße
Höpke schrieb:> Nichts desto trotz möchte ich die Zeit sinnvoll verwenden und mich> weiter vorbereiten. Die Informationsdichte zum RS485 Bus ist ja eher> dünn. Kennt jemand ein paar zitierfähige Quellen?
Kann man eigentlich nicht sagen, das Ding ist schon ziemlich alt und
eine Norm. Gucke mal im englischen Wiki:
https://en.wikipedia.org/wiki/RS-485
In Deinem Fall glaube ich nicht an einem Defekt des Gerätes. Du hast
noch immer nicht nachgemessen ob die Failsafe-Widerstände (Pullup und
Pulldown) irgendwo im System genau einmal vorhanden sind, also entweder
am Konverter oder am Regler.
Ohne diese Widerstände gibt bei einem Idle-Bus keine
Spannungsdifferenz zwischen den beiden Signalleitern. Die Receiver sind
dann nicht definiert ob sie auf TTL-Seite eine 1 oder 0 liefern. Wenn
die UART im Idle-Zustand nicht ein Stop-Bit sieht kann das nicht
funktionieren...
https://www.maximintegrated.com/en/app-notes/index.mvp/id/763
Weiter unten:
"Failsafe Bias Resistors
When inputs are between -200mV and +200mV, receiver output is
'undefined'. [...]
Fail-safe biasing is used to keep the receiver's output in a defined
state when one of these conditions occurs. The fail-safe biasing
consists of a pull-up resistor on the noninverting line and a pull-down
resistor on the inverting line. With proper biasing, the receiver will
output a valid high when any one of the fault conditions occurs. These
fail-safe bias resistors should be placed at the receiver end of the
transmission line."
Edit: Es lässt sich übrigens extrem einfach nachmessen: Im
Idle-Zustand DVM an beide Leitungen halten und sehen ob es eine
Spannungsdifferenz gibt... dafür braucht es dann kein Scope mit
Differenzmessung et. al.
Danke für die Infos. Ich denke Anfang nächster Woche werde ich mein
Spielzeug wieder haben. Werde dann mal die Diffenzspannung messen.
So weit ich weiß, gibt die RS485 Norm nur die physikalischen Pegel vor
(+/- 200mV). Mich interessieren eher die Protokolle. Master Slave,
Multimaster usw...
Höpke schrieb:> So weit ich weiß, gibt die RS485 Norm nur die physikalischen Pegel vor> (+/- 200mV).
Das weißt Du ganz richtig.
> Mich interessieren eher die Protokolle. Master Slave,> Multimaster usw...
Wie Du oben selber schon schreibst ist das eine Sache zwischen dem
Hersteller Deines Reglers und Dir. Dafür gibt es keine Norm oder "das
RS485-Protokoll".
Höpke schrieb:> Mich interessieren eher die Protokolle. Master Slave,> Multimaster usw...
Genau das ist eben nicht Teil der Norm: "RS-485 only specifies
electrical characteristics of the generator and the receiver. It does
not specify or recommend any communications protocol, only the physical
layer. Other standards define the protocols for communication over an
RS-485 link."
Zum physikalischen könnte das noch interessant sein:
http://www2.htw-dresden.de/~huhle/ArtScienceRS485.pdfhttp://e2e.ti.com/cfs-file/__key/telligent-evolution-components-attachments/00-142-00-00-00-33-63-91/TSB_2D00_89_2D00_A.pdf
Ein Master, (viele) Slaves ist der einfache Fall, den hast Du hier.
Multimaster braucht abgesicherte Protokolle mit Kollisionserkennung und
Zuteilungsverfahren, davon würde ich die Finger lassen; deutlich
anspruchsvoller.
Mit dem gleichen USB -> RS485 hatte ich ähnliche Probleme.
Es war nicht möglich mit dem Wandler ein RS485 Device über Modbus RTU
anzusprechen.
Mit einem RS232-RS485 Wandler hat es sofort funktioniert.
Das RS232 Interface war der COM Port des Motherboards, kein USB.
Scheinbar ist das Timing über USB völlig daneben.
Dirk schrieb:> Mit dem gleichen USB -> RS485 hatte ich ähnliche Probleme.> Es war nicht möglich mit dem Wandler ein RS485 Device über Modbus RTU> anzusprechen.> Mit einem RS232-RS485 Wandler hat es sofort funktioniert.> Das RS232 Interface war der COM Port des Motherboards, kein USB.> Scheinbar ist das Timing über USB völlig daneben.
Bei uns gibts da keine Probleme. Wir haben einen USB<->RS 485 Adapter
mit einem FTDI Chip im Einsatz (
http://de.rs-online.com/web/p/kvm-kabel-konfektioniert/6877834/ )
Sowohl mit Software vom Hersteller für die Kommunikation von Regler geht
das über Modbus mit 19200 Baud super, als auch mit selbst geschriebener
Software für eine Modbus Kommunikation.
Von den Stecker her haben wir an die offnen Enden einfach nen
Hartingstecker montiert. Haupsache robust.
Es geht auch über ein virtuelles XP ( Windows XP Mode ) ohne Probleme.
Vom Timing her hab ich alle 0,2s ein Datenpaket vom
Coriolismassenflusssensor geholt und da war keines mit nem CRC Fehler
dabei.
Gruß JackFrost
Sendest du und der Herstelle die gleiche Bitfolge oder hat dein Regler
eine andere Einstellungen ?
Es ist auf den beiden Oszillogrammen schwer zu erkennen, aber wenn man
den grünen Kanal vom Hersteller und deinen Kanal A vergleicht, fällt mir
auf das die Highpegel 3/4 und 5/6 ( ich habe das Startbit mitgezählt )
ungleich lang sind, bei deinem wirken sie aber gleich lang.
Nochmal bezüglich deiner Baudrate, auf deinem zweiten Oszillogramm sieht
es so aus als sein das Startbit ~ 1/5 DIV lang. Was bei 200 us/DIV rund
40 us sind. Das dürften dann doch eher 28800 sein, oder täusch ich mich
da ?
Gruß JackFrost