Hallo, ich habe auf einer Seite einen Modbus RTU Slave mit einem ADM2481 und jeweils einem Pull-up und Pull-down Widerstand (kein Abschlusswiderstand). Die andere Seite bildet mein PC als Modbus Master mit Modbus Poll als Software. Am USB-Anschluss meines PC's habe ich nun zwei unterschiedliche Adapter getestet: 1. Galvanisch getrennter USB zu RS485 Adapter (mit Pull-up/-down und Abschlusswiderstand) 2. Nicht galvanisch getrennter USB zu RS485 Adapter (ohne Pull-up/-down aber mit zu- und abschaltbarem Abschlusswiderstand) Mit Adapter (1) kommt es nach ca. 30.000 Polls meiner Input-Register auf der Slave Seite zu einem bleibenden Timeout Error. Diesen Timeout Error kann ich nur durch einen Stromreset des Modbus Slave beheben. Mit Adapter (2) kommt das gleiche Problem auf, wenn ich die Terminierung aktiviere. Deaktiviere ich diese, läuft die Kommunikation problemlos. Warum kommt es beim Zuschalten des Abschlusswiderstands bei einer 1:1 Modbus RTU Verbindung zu Timeout Problemen?
Nachmessen. Zum einen ob die Abschlusswiderstände so sind wie sie sein sollen, zum anderen was am Bus passiert, wenn er "hängt", insb. welcher der Busteilnehmer den Bus nicht freigibt.
Marius schrieb: > Warum kommt es beim Zuschalten des Abschlusswiderstands bei einer 1:1 > Modbus RTU Verbindung zu Timeout Problemen? Bias-Widerstände zu hochohmig? Stichwort Spannungsteiler. Aber was auch immer auf dem Bus passiert, ein Slave sollte sich dabei nicht dauerhaft aufhängen.
Εrnst B. schrieb: > Nachmessen. Zum einen ob die Abschlusswiderstände so sind wie sie > sein > sollen, zum anderen was am Bus passiert, wenn er "hängt", insb. welcher > der Busteilnehmer den Bus nicht freigibt. Werde die Widerstände einmal nachmessen. Also die Messung mit dem Oszi hat ergeben, dass auf das Tx Paket (Log von Modbus Poll) keine Antwort also kein Rx Paket zurück geliefert wird, daher ist auch der Timeout Error verständlich. Aber warum dies ausgerechnet nur bei Terminierung aufkommt ist mir ein Rätsel...
Marius schrieb: > Aber warum dies ausgerechnet nur bei Terminierung aufkommt ist mir ein > Rätsel... Liest Du ab und zu mal, was man Dir schreibt? Hmmm schrieb: > Bias-Widerstände zu hochohmig? Stichwort Spannungsteiler. Wenn die Bias-Widerstände für einen terminierten Bus zu hochohmig sind, hast Du in Ruhelage keine standardkonformen >= 200mV zwischen A und B. Sinnvoller Wert für einen 5V-Bus mit beidseitiger 120-Ohm-Terminierung: 680 Ohm.
Marius schrieb: > ausgerechnet nur bei Terminierung aufkommt ist mir ein Rätsel... Weil man bei MODbus mehr als den differentiellen Widerstand zum Terminieren braucht. https://www.mikrocontroller.net/articles/RS-485#Weitere_Hinweise Damit sorgt man dafür, daß nach dem Senden eines Telegramms, wenn der Sender auf Tristate geht, der Bus trotzdem auf logisch HIGH bleibt, was dem Stopbit (Mark) entspricht. Das braucht man bei Modbus/UART Übertragungen.
Hmmm schrieb: > Wenn die Bias-Widerstände für einen terminierten Bus zu hochohmig sind, > hast Du in Ruhelage keine standardkonformen >= 200mV zwischen A und B. > > Sinnvoller Wert für einen 5V-Bus mit beidseitiger 120-Ohm-Terminierung: > 680 Ohm. Es sind 1k Ohm Bias Widerstände auf der Slave Seite vorhanden. Ich teste das Ganze erneut mit 120 Ohm Terminierung auf Slave und Master Seite. Falk B. schrieb: > Marius schrieb: >> ausgerechnet nur bei Terminierung aufkommt ist mir ein Rätsel... > > Weil man bei MODbus mehr als den differentiellen Widerstand zum > Terminieren braucht. > > https://www.mikrocontroller.net/articles/RS-485#Weitere_Hinweise > > Damit sorgt man dafür, daß nach dem Senden eines Telegramms, wenn der > Sender auf Tristate geht, der Bus trotzdem auf logisch HIGH bleibt, was > dem Stopbit (Mark) entspricht. Das braucht man bei Modbus/UART > Übertragungen. Sie 1. Beitrag, es sind Bias Widerstände für entsprechenden logischen Pegel auf der Slave Seite vorhanden.
Marius schrieb: > Es sind 1k Ohm Bias Widerstände auf der Slave Seite vorhanden. Damit ergibt sich bei 5V und beidseitig 120 Ohm nur knapp 0.15V Differenz, das reicht nicht. Am besten noch jeweils 2.2k parallelschalten. Aber unabhängig davon ist der Slave Murks.
Ich habe nun das Problem des "bleibenden" Timeout Fehlers behoben, indem ich die Bias Widerstände auf der Slave Seite herausgelötet habe und meinen galvanisch getrennten USB zu RS485 Adapter mit Biaswiderständen und Abschlusswiderstand auf der Master Seite nutze. Dennoch kommt es ab und an zum Timeout Error, die Übertragung läuft aber beim nächsten Poll normal weiter. Jetzt habe ich noch herausgefunden, dass auf meiner Slave Seite neben dem ADM2481 ein galvanisch getrennter DC/DC Wandler für 3,3V, zwei Schottkydioden sowie eine Gleichtaktdrossel für die Datenleitungen vorhanden sind. Schottkydioden und Gleichtaktdrossel ist ja in Ordnung... aber warum wurde hier ein 3,3V DC/DC Wandler verbaut und nicht 5V... würde der Tausch des 3,3V DC/DC Wandler gegen einen 5V DC/DC Wandler meine Probleme von oben mit lösen, ohne dass die Biaswiderstände auf der Slave Seite herausgelötet werden müssen?
Marius schrieb: > aber warum > wurde hier ein 3,3V DC/DC Wandler verbaut Vielleicht, weil der Rest der Schaltung auch mit 3.3V versorgt wird, und sonst ein isolierender Step-Up-Wandler nötig gewesen wäre? (Ich kenne Dein Gerät nicht, deswegen ist das natürlich nur 'ne Vermutung)
Marius schrieb: > würde der Tausch des 3,3V DC/DC Wandler gegen einen 5V DC/DC Wandler > meine Probleme von oben mit lösen Immer diese Salamischeiben. Wenn der Slave mit 3.3V läuft, hättest Du das auf dem Oszi sehen müssen und uns auch mitteilen sollen. Dann müssen die Bias-Widerstände nämlich deutlich kleiner sein, z.B. 390 Ohm. Solange die Bias-Widerstände im Master verbaut sind und dort auch wirklich 5V anliegen, bleibt es natürlich bei den weiter oben empfohlenen Werten.
Vielleicht mal aktiv terminieren? https://www.ramser-elektro.at/shop/hydrothyr-5-und-zubehoer/aktiver-modbus-abschlusswiderstand-modbus-bias-modul/
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.