Forum: Mikrocontroller und Digitale Elektronik RS485 über RS232 auslesen


von Hans M. (onkelbums66)


Lesenswert?

Hallo alle zusammen,

folgendes Problem habe ich:

Ich habe auf der einen Seite einen RS485-Anschluss mit den Leitungen:
Tx+
Tx-
GND

Auf der anderen Seite habe ich einen RS232 Anschluss und habe auch schon 
Softwareseitig die Implementierung in Java gebaut und getestet. Auf 
meine Raspberry Pis habe ich jeweils einen RS232-Adapter draufgesteckt 
und diese kommunizieren lassen. Der Pi kann leider nur das Rx, Tx und 
GND Signal abgreifen.

Eigentlich war es so gedacht, das der Pi ein RS232-Signal lesen soll. 
Jetzt ist aber kurzfristig auch die Anforderung hinzugekommen einen 
RS485-Anschluss lesen zu können. Kurzerhand haben wir gemessen, was an 
den Kabelenden des RS485-Anschlusses für Signale ankommen. An einen 
Draht sah das Signal sehr gut aus. Daher haben wir diesen über einen 
provisorischen Adapter mit dem Rx des Pi verbunden.

Alles sah gut aus. Baudrate, Start-, Stopbit und Parität standen im 
Handbuch des Gerätes (welches den RS485-Anschluss hat). Mit diesen 
Parametern konnte ich auch Hex-Daten mit meinem Java-Programm auslesen. 
Jedoch scheinen diese Daten fehlerhaft zu sein. Es kamen zahlreiche 
ERROR-Signale am Raspberry Pi an welche ich ebenfalls mit dem 
Java-Programm aufzeichnen konnte.

Im handbuch stand z.B. das bei den erwarteten Hex-Zeichen ein festes 
Paket mit einem Anfangszeichen, einer festen Paketlänge und einem 
End-Zeichen dabei sein sollen. Diese Zeichenfolge vermisse ich leider 
auch.

Nun meine Frage an euch. Kann man das Konvertieren eines RS485 auf RS232 
überhaupt so einfach machen? Muss dazu Software-Seitig noch etwas 
gemacht werden? Oder brauche ich eine zusätzliche Hardwarekomponente? 
Ich komme eigentlich aus der Softwareentwicklung mit Java und kenne mich 
leider in diesem Gebiet nicht gut aus.

Ich hoffe mir kann jemand weiterhelfen :)

Freundliche Grüße
Hans

: Bearbeitet durch User
von TestX (Gast)


Lesenswert?

du bauchst einen RS485 transceiver. den kannst du dann an deinen 
raspberry anschließen (serielle schnittstelle, nicht rs232!)

von Hans M. (onkelbums66)


Lesenswert?

Ah Danke,

also wäre das z.B. dieses hier oder ? 
https://www.conrad.de/de/schnittstellen-ic-transceiver-texas-instruments-sn75176bp-rs422-rs485-11-pdip-8-152828.html

Mich interessiert aber auch warum wir überhaupt ein Signal auslesen 
konnten. Was hatte denn eigentlich nicht gestimmt? Wie sind die 
fehlerhaften Signale erklärbar?

von Wolfgang (Gast)


Lesenswert?

TestX schrieb:
> du bauchst einen RS485 transceiver.

Einen Transceiver braucht man schon mal gar nicht. Auf RS485-Seite gibt 
es offensichtlich nur das TX-Signal.

Ein RS232-Adapter auf dem Raspberry bringt die Dinge allerdings auch 
nicht weiter. Warum das Signal erst auf +/-12V Pegl bringen, wenn der 
Raspberry hinterher 0..3V3 haben möchte.
Ich würde mal zu einem Oszi greifen und dabei eventuell einen 
Optokoppler und ein paar Widerstände in der Hinterhand halten.

von Hans M. (onkelbums66)


Lesenswert?

Kann man denn nicht einfach eine Hardware-Komponente einbauen, welche 
die Arbeit übernimmt. z.B:

https://www.amazon.de/MAX485-RS-485-Modul-RS-485-Arduino-Raspberry/dp/B013DK9J5U
(MAX485 RS-485-Modul Zu Modul TTL RS-485 Für Arduino Raspberry Pi DIY)

oder
https://www.amazon.com/RS232-RS485-Serial-Converter-Terminal/dp/B004RBA7NS
(RS232 to RS485 Serial Converter Terminal Block )

von Wolfgang (Gast)


Lesenswert?

Hans M. schrieb:
> also wäre das z.B. dieses hier oder ?

Mit dem SN75176 bekämest du das RS485 zwar gewandelt, aber nicht auf 
einen Pegel, der deinem Raspberry genehm ist. Der baucht 
höchstwahrscheinlich 3.3V, wenn du da nicht noch irgendeine Wandlerei 
dran/drauf stecken hast.

> Mich interessiert aber auch warum wir überhaupt ein Signal auslesen
> konnten. Was hatte denn eigentlich nicht gestimmt? Wie sind die
> fehlerhaften Signale erklärbar?

Nimm dir ein Oszi, dann siehst du es sofort. Da kommt es auch drauf an, 
wie du dein RS485 Signal angeklemmt hattest. Um welche 
Übertragungsrate(n) geht es überhaupt?

von Wolfgang (Gast)


Lesenswert?

Hans M. schrieb:
> Kann man denn nicht einfach eine Hardware-Komponente einbauen

Was genau sprich eigentlich gegen simple Widerstände?

von Hans M. (onkelbums66)


Lesenswert?

19,200 bit/s ist die Baudrate, ich schaue gleich nochmal im Handbuch, da 
finde ich vlt auch was über den Pegel. Ich meinte aber er lag bei 5V, 
bin mir aber nicht sicher. Meinst du das durch den höheren Pegel das 
Signal verfälscht wurde? Auf den ersten Blick sieht das Signal ja gut 
aus.

von Hans M. (onkelbums66)


Lesenswert?

"Was genau sprich eigentlich gegen simple Widerstände?"

Es geht hier eigentlich um ein Kundenprojekt. Später könnten womöglich 
mehrere Raspberrys an zahlreiche Endabnehmer ausgeliefert werden. Da 
wäre eine Standartlösung in Form eines Adapters sinnvoll.

: Bearbeitet durch User
von Hans M. (onkelbums66)


Lesenswert?

Leider kann ich weitere Parameter des RS485-Anschlusses nicht finden. 
Ich habe das Gerät auch leider nicht vor Ort. Es steht 1,5h Fahrtzeit 
von hier entfernt. Auch deshalb wäre gut eine sichere Lösung zu nehmen, 
weil es nicht viele Möglichkeiten zum testen gibt. Ein Oszi hatten wir 
letzes mal schon an die Drähte angeschlossen. Ich müsste aber erstmal 
Kontakt zum Elektriker aufbauen und da mehr zu erfahren.

Eine weitere Möglich wäre ja auch, das das Signal schon korrekt 
eingelesen wurde. Nur das sich eben die erwartete Paketlänge, das 
Anfangszeichen und Endzeichen des Pakets durch den Hersteller geändert 
wurden. Daher würde ich auch gerne mal wissen, ob es überhaupt möglich 
ist, das durch einen anderen Pegel das Signal verfälscht werden kann 
oder ob in diesem Fall gar kein Signal ankommen müsste.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Hans M. schrieb:
> Meinst du das durch den höheren Pegel das Signal verfälscht wurde?

Der SN75176 arbeitet mit 5V und die mag der Raspberry nicht.

Hans M. schrieb:
> Es geht hier eigentlich um ein Kundenprojekt.

Wenn es denn was offizielles sein soll und nicht nur funktionieren muss, 
findest du hier [1] genug Auswahl an RS485/RS422 Bausteinen mit reinem 
Receiver oder aber auch Receiver und Transmitter in einem IC, nur auf 
die 3.3V solltest du achten, damit es zu RPi passt.
[1] 
https://www.digikey.de/products/de/integrated-circuits-ics/interface-drivers-receivers-transceivers/710?k=receiver+RS485+RS422&k=&pkeyword=receiver+RS485+RS422&pv1989=0&pv276=794&pv276=1381&pv276=406&pv276=24&pv276=17&pv276=111&pv276=2684&pv276=19&pv276=79&pv276=1663&pv276=2941&pv276=1210&pv276=997&pv276=995&pv276=1153&pv276=30&pv276=295&pv276=526&FV=ffe002c6&mnonly=0&ColumnSort=0&page=1&quantity=0&ptm=0&fid=0&pageSize=100

Die Minimallösung wäre wohl ein ISL32612 o.ä., falls sowieso ein 
Interface-Board gefertigt wird.
http://www.intersil.com/content/dam/Intersil/documents/isl3/isl32610e-11e-12e.pdf

von Wolfgang (Gast)


Lesenswert?

Hans M. schrieb:
> Daher würde ich auch gerne mal wissen, ob es überhaupt möglich
> ist, das durch einen anderen Pegel das Signal verfälscht werden kann
> oder ob in diesem Fall gar kein Signal ankommen müsste.

Wenn das Signal nicht ordnungsgemäß inklusive einem vernünftigen 
Bezugspotential zum Raspberry geführt wurde, kann durchaus der Pegel 
wegdriften und sich erst innerhalb des Datentelegramms zurecht ziehen. 
Um solche Probleme auszuschließen, hilft nur ein Oszi. Eventuell kann 
auch eine galvanische Entkopplung zwischen RS485-Sender und dem 
Raspberry sinnvoll sein (-> Optokoppler)

von Hans M. (onkelbums66)


Lesenswert?

Okay Danke erstmal ich schau mir das in aller Ruhe mal an :)

von Hans M. (onkelbums66)


Lesenswert?

Mir ist noch aufgefallen, das wir ja diesen RS232 to GPIO Adapter 
verwendet haben:
https://www.rasppishop.de/GPIO-zu-Serieller-UART-Port-MAX232-fuer-Raspberry-Pi

Dieser schein ja direkt für den Pi gemacht worden zu sein. In der 
Bedienungsanleitung steht auch, das das voltage level von 5V auf 3,3V 
gewandelt wird. Daher denke ich nun, das der Pegel korrekt am RPi 
angekommen ist. Das Signal ist dann wahrscheinlich aus einen anderen 
Grund fehlerhaft.

Nutzt den RS485 und RS232 andere Protokolle, sodass dadurch Fehler in 
der Übertragung zustande gekommen sind? Oder ist der Pegel invertiert?

von TestX (Gast)


Lesenswert?

@Hans

Lies dir doch erstmal bei wikipedia die grundlagen zu rs485 durch...hier 
scheint dir einiges an Verständnis zu fehlen wieso das signal 
differenziell ist.

Es ist in erster Linie nur die definition des übertragungskanals. Was 
letztendlich an protokollen verwendet wird obliegt dem anwender. 
Meistens wird jedoch seriell gearbeitet.

von Hans M. (onkelbums66)


Lesenswert?

Im Handbuch steht zum RS485-Ausgang folgendes:
19200Bds, 8bits, no parity, 1stop bit

Somit scheint die Übertragung analog RS232 auch seriell zu 
funktionieren. Ich denke man kann damit ein Signalfehler ausschließen. 
Oder was denkt ihr?

von tommy (Gast)


Lesenswert?

Sieh Dir hier:
https://de.wikipedia.org/wiki/EIA-485
auch mal die Geschichte mit dem Abschlusswiderstand an.

von Hans M. (onkelbums66)


Lesenswert?

Hatte mich jetzt dazu nun Informiert. Durch den Adapterden wir am Pi 
haben sollte der Pegel in Ordnung sein.

Wahrscheinlich lehne ich mich jetzt weit aus den Fenster, aber ich 
glaube ich weiß was die Ursache für das Fehlersignal ist.
Habe mir nund as Signal nochmal genauer angeschaut. Das häufigste 
Hexadecimalzeichen ist "FB", was binär etwa folgendes darstellt 
"11111011". Ds häufigste Hexadecimalzeichen , welches laut Handbuch in 
einen korrekten Signal ankommt ist "20". Binär sähe das so aus: 
"00100000". Vergleicht man die STrings sind diese doppelt invertiert. 
Ich denke das ist kein Zufall.

Wir haben wahrscheinlich die invertierte TX-Leitung des RS485 erwischt 
und an die RX Leitung unserers RPI Adapters angeklemmt. Was sagt ihr 
dazu? Hat jemand schonmal ähnliche Erfahrungen gemacht?

Ich denke es würde ausreichen, wenn wir beim nächsten man einfach die 
andere Leitung des RS485 nehmen. Dann sollte das Signal korrekt 
ankommen.

von Georg (Gast)


Lesenswert?

Hans M. schrieb:
> wenn wir beim nächsten man einfach die
> andere Leitung des RS485 nehmen

Dann wird zwar aus 0 eine 1 und umgekehrt, aber die Reihenfolge der Bits 
kehrt sich nicht um. Abgesehen davon, dass das dann keine differentielle 
Leitung ist und damit nicht für längere Leitungen geeignet, im Klartext 
Murks.

Georg

von Wolfgang (Gast)


Lesenswert?

Georg schrieb:
> Dann wird zwar aus 0 eine 1 und umgekehrt, aber die Reihenfolge der Bits
> kehrt sich nicht um.

Wie sollte sich die Reihenfolge umkehren?
Es kommt viel schlimmer - die Zusetzung der Bits zu Bytes im Empfänger 
ändert sich bei Invertierung des Signales vollständig, weil der 
Empfänger sich völlig anders auf die Bitfolge synchronisiert. Startbits 
werden nach Invertierung nicht mir als Startbits erkannt, d.h. die 
Zeichen gehen verloren und es hagelt Framing-Fehler.

von Micha D. (micha_d)


Lesenswert?

Moin.

Das wird so nix. Du musst beide Signaladern nutzen, weil das Signal auf 
einer Ader zwischen GND und VDD/2, auf der anderen negiert zwischen 
VDD/2 und VDD liegt. Adapter auf RS232 gibts für unter 5 Euro beim 
netten Chinesen.

Viel Erfolg

Micha

von Frank (Gast)


Lesenswert?

Wenn du nichts selber bauen möchtest wären evtl 2 getrennte USB zu x 
Adapter was für dich:

http://www.ftdichip.com/Products/Cables/USBRS485.htm

Und

http://www.ftdichip.com/Products/Cables/USBRS232.htm

Ansonsten gibt es von Exar auch noch Dual und Multiprotokol Bausteine:
https://www.exar.com/products/interface/serial-transceivers/multiprotocol/multiprotocol

Oder halt komplett getrennt einen RS485 und RS232 zu UART Baustein 
nehmen und die serielle Schnittstelle des Raspberry benutzen.

von Hans M. (onkelbums66)


Lesenswert?

Danke für die vielen Anworten :)

Die Sache ist auch folgende: Es ist jetzt schon eine fest gesetze 
Anforderung, dass an das Pi ein RS232-Anschluss kommt. Dafür gibt es 
auch schin ein Gehäuse. In den meisten Fällen soll auch das externe 
Gerät direkt über RS232 mit dem Pi kommunizieren. Nur in Ausnahmefällen 
muss auch mal von einem RS485-Ausgang ausgelesen werden.

Das externe Gerät wird dann aber wahrscheinlich sehr oft An- und 
Abgestöpselt werden an das RPi. Die Verbindung sollte also auch einfach, 
schnell sein. Der Preis ist hier glaube ich nicht so entscheidend.

Die 5V Spannung wird ja dann sowieso vom RS232-Adapter des RPI auf 3,3V 
gewandelt.

Habe jetzt mal nach Adaptern geschaut, bin mir aber nicht sicher. Es 
gibt ja auch noch Unterschiede bei den RS485 und wir wissen derzeit auch 
nicht welche anderen Arten von RS485 bei späteren externen Geräten 
kommen werden. Muss leider erstmal los. Ich schaue heute nochmal nach 
passenden Adaptern.

Freundliche Grüße
Hans

von Hans M. (onkelbums66)


Lesenswert?

Also ich denke ich habe hier einen passenden Adapter gefunden:

http://de.dhgate.com/product/f07935-9-pin-rs-232-to-rs-485-rs485-to-rs232/230752525.html

oder hier in anderer Ausführung:

http://www.ebay.de/itm/RS232-zu-RS485-Koommunikation-Schnittstelle-Konverter-Adapter-mit-Terminal-Board-/352100183243?_trksid=p2385738.m2548.l4275

Beide haben Eingänge für D+, D- und GND (zusätztlich noch für eine 
externe Stromversorgung.

Alternativ gibt es noch diesen hier:

de.dhgate.com/product/rs232-to-rs485-data-communication-adapter/22864061 
0.html

Da gibt es neben den Tx+ und Tx- auch noch einen zusätzlichen Rx+ und 
Rx- Eingang. Dieser müsste ja dann für den Volldoplex-Betrieb vorgesehen 
sein. Ind er Beschreibung steht aber das der Adapter nur für den 
Halbduplexbetrieb geeignet ist.

Ich denke wir werden einen der oberen Adapter nehmen, denn wir brauchen 
ja keinen Vollduplex-Betrieb.

Freundliche Grüße
Hans

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