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
du bauchst einen RS485 transceiver. den kannst du dann an deinen raspberry anschließen (serielle schnittstelle, nicht rs232!)
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?
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.
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 )
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?
Hans M. schrieb: > Kann man denn nicht einfach eine Hardware-Komponente einbauen Was genau sprich eigentlich gegen simple Widerstände?
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.
"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
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
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
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)
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?
@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.
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?
Sieh Dir hier: https://de.wikipedia.org/wiki/EIA-485 auch mal die Geschichte mit dem Abschlusswiderstand an.
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.
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
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.
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.