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.
Wie der Konverter zwischen Senden und Empfangen umschaltet, konnte ich leider noch nicht herausfinden. Anbei ein Bild von der internen Beschaltung.
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.
Das schwarze Oszibild ist vom Hersteller. Bei Ihm antwortet der Regler.
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
:
Bearbeitet durch User
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.
Bist Du sicher dass Du mit 38400 sendest? Wenn ich mir Dein Startbit ansehe sieht das eher nach 9600 Baud aus...
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.
> Herstellervorgaben sind: 1 Startbit, 1 Stoppbit, kein Parität-Bit und
eine Baudrate von 38400
Ist das safe bei dir so konfiguriert?
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?
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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.pdf http://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
:
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.