Forum: Mikrocontroller und Digitale Elektronik MODBUS timeout mit RS232/RS485 Adapter


von Achim F. (rkkmkn8a)


Lesenswert?

Hallo,
bei einer MODBUS RS485 Kommunikation über einen RS232-Adapter mit z.B. 
einem Stromzähler treten nur noch Timeouts auf nachdem das RS232 Kabel 
unterbrochen wurde.
Die Strecke ist so aufgebaut:
- MODBUS RTU Gerät mit A+ & B- Klemmen (kein C = GND, wie z.B. 
Stromzähler SDM120)
- RS485 Kabel A & B
- Adapter RS232 -> RS485 DA-70161 mit SP485EE chip
- RS232 Kabel mit DSUB9 Stecker
- RS232 mit CTS/RTS aus UART über MAX3243 chip
- Software basierend auf libmodbus nutzt das Linux Device /dev/ttymxc0 
eingestellt auf 9600baud 8N1 (zum MODBUS Gerät passend)
- Linux kernel 4.4.0 embedded ARM CPU

Anfangs läuft alles gut, auch über Wochen, auch mit verschiedenen MODBUS 
Geräten. Aber sobald die RS232 Verbindung einmal kurz (für Sekunden, 
aber auch Minuten oder Stunden) unterbrochen und wieder verbunden wurde, 
zeigt die libmodbus bei jedem Zugriff nur nur Timeout-Errors.
Das ganze ist besonders ärgerlich, weil es dann schwierig ist das Ganze 
wieder in Betrieb zu nehmen. Erst nach häufigem Ab- und wieder Anstecken 
des RS232-485 Adapters geht es dann wieder, dauert jedes mal so 10 
Minuten.

Warum funktioniert die Verbindung nicht mehr?

Wie kann ich das verhindern, nachdem RS232 wieder angesteckt wurde 
sollte es sofort wieder funktionieren?

(Und nein, die RS232 Verbindung einfach dauerhaft dran zu lassen ist 
leider keine Lösung, den irgendwann kommt irgendwer auf die Idee diese 
mal kurz abzustecken zu tun und dann haben wir das Problem wieder)

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Ich habe den RS232-485 Wandler und seine parasitäre Stromversorgung in 
Verdacht. Ich würde sowohl den LVTTL-RS232-Wandler als auch den 
RS232-RS485-Wandler ersatzlos streichen und einen RS485-Transceiver 
direkt an den Rechner anschließen. libmodbus kann die Datenrichtung des 
Transceivers über die RTS-Leitung steuern. Das seint mir die deutlich 
robustere Lösung zu sein, es sei denn, da ist ein weiteres 
Salamischeibchen dabei, das noch nicht auf dem Tisch liegt.

fchk

von Peter D. (peda)


Lesenswert?

Frank K. schrieb:
> Ich habe den RS232-485 Wandler und seine parasitäre Stromversorgung in
> Verdacht.

Wie soll das überhaupt gehen? RS-485 braucht doch viel höherer Ströme, 
als RS-232 liefern kann. Und in 3,3V Systemen liefert RS-232 nur knapp 
6V im Leerlauf.
Der DA-70161 muß mit der heißen Nadel gestrickt sein und kann keine 
Normpegel einhalten. Weg mit dem Mist.

von Achim F. (rkkmkn8a)


Lesenswert?

Frank K. schrieb:
> Ich habe den RS232-485 Wandler und seine parasitäre Stromversorgung in
> Verdacht.
OK, guter Hinweis - Danke! Was ist denn ein hochwertiger RS232-485 
Adapter, meinetwegen auch mit zusätzlicher Stromversorgung wenn das 
nötig ist.

> Ich würde ... den LVTTL-RS232-Wandler ... ersatzlos streichen
Das geht leider so einfach nicht, denn die ARM CPU mit der UART und dem 
MAX324 Chip auf RS232 sind auf einem Board. Das Board hat leider keinen 
RS-485 direkt drauf.

> als auch den RS232-RS485-Wandler ersatzlos streichen und einen
> RS485-Transceiver direkt an den Rechner anschließen.
Joaaaa - ich könnte natürlich auf die UART Pins von der CPU direkt 
zugreifen und über einen RS485-Transceiver ausserhalb des Boards gehen. 
Schaut nach Gebastel aus.

> es sei denn, da ist ein weiteres
> Salamischeibchen dabei, das noch nicht auf dem Tisch liegt.
Hmmmm, des wenn i wüsst.... ;-)

Peter D. schrieb:
> Der DA-70161 muß mit der heißen Nadel gestrickt sein und kann keine
> Normpegel einhalten. Weg mit dem Mist.
Naja, oder halt einfach ein externes Netzteil am DA-70161 für RS-485 
anschließen. Danke für den Hinweis, das probiere ich...

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Achim F. schrieb:

>> Ich würde ... den LVTTL-RS232-Wandler ... ersatzlos streichen
> Das geht leider so einfach nicht, denn die ARM CPU mit der UART und dem
> MAX324 Chip auf RS232 sind auf einem Board. Das Board hat leider keinen
> RS-485 direkt drauf.

Und ein weiterer UART auf einer Stiftleiste gibts auch nicht?
>
>> als auch den RS232-RS485-Wandler ersatzlos streichen und einen
>> RS485-Transceiver direkt an den Rechner anschließen.
> Joaaaa - ich könnte natürlich auf die UART Pins von der CPU direkt
> zugreifen und über einen RS485-Transceiver ausserhalb des Boards gehen.
> Schaut nach Gebastel aus.

Ein weiterer Punkt, der mich misstrauisch macht, ist die automatische 
Datenrichtungsumschaltung des RS232-485-Adapters. Die kann auch aus dem 
Tritt kommen.

Hat Dein ARM wenigstens Netzwerk? Wenn ja, wäre vielleicht sowas eine 
Lösung:

https://www.pusr.com/products/din-rail-rs485-serial-to-ethernet-converter-usr-dr302.html

Gibts bei A* für ca 45€. Da schickst Du MODBUS-TCP rein, und auf der 
anderen Seite kommt MODBUS-RTU über RS485 raus. Wenn Deine Applikation 
libmodbus nutzt, wird sie wohl MODBUS-ASCII, MODBUS-RTU und MODBUS-TCP 
können. Und wenn Du ein RS232-Kabel dahin schleifen kannst, kannst Du 
auch ein Ethernet-Kabel dahin schleifen.

Solche Geräte gibts von vielen Herstellern, das hier ist nur ein 
Beispiel. Es wird bestimmt auch welche mit WLAN geben.

fchk

von Achim F. (rkkmkn8a)


Lesenswert?

Hab eine Lösung: Ein anderer Adapter & Vcc

Hab mehrere Adapter getestet und nur der DeLock 62919 hat dann mit Vcc 
+5V von separatem Netzteil funktioniert. Also nach Unterbrechung des 
RS232 hat er einwandfrei wieder weiter gearbeitet. Aber eben leider ist 
ein extra Netzteil nötig - egal - es funktioniert :-)

Vielen Dank für euere Hilfe - hat mich letztendlich auf die Spur 
gebracht!

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.