Forum: Mikrocontroller und Digitale Elektronik Modbus RTU Timeout bei Terminierung


von Marius (marius_s623)


Lesenswert?

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?

von Εrnst B. (ernst)


Lesenswert?

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.

von Hmmm (hmmm)


Lesenswert?

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.

: Bearbeitet durch User
von Rüdiger B. (rbruns)


Lesenswert?

Software ? Memory Leak ?

von Marius (marius_s623)


Lesenswert?

Ε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...

von Hmmm (hmmm)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

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.

von Marius (marius_s623)


Lesenswert?

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.

: Bearbeitet durch User
von Hmmm (hmmm)


Lesenswert?

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.

von Marius (marius_s623)


Lesenswert?

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?

von Harald K. (kirnbichler)


Lesenswert?

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)

von Hmmm (hmmm)


Lesenswert?

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.

: Bearbeitet durch User
von Fred R. (Firma: www.ramser-elektro.at/shop) (fred_ram)


Lesenswert?


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
Noch kein Account? Hier anmelden.