Forum: Mikrocontroller und Digitale Elektronik RS-422: Datenempfang von zwei Geräten


von René S. (saintelmo)



Lesenswert?

Hallo,


ich habe ein Gerät, das lediglich eine RS-422-Schnittstelle bietet, aber 
mit drei anderen Geräten kommunizieren muss. Dafür versuche ich derzeit 
eine gangbare Lösung zu finden, stoße dabei jedoch an die Grenze meines 
Wissens. Ich hoffe daher, dass mir jemand hierzu Hilfestellung geben 
kann.

Die Ausgangssituation ist in dem beigefügten Bild grafisch dargestellt: 
Komponente C ist dabei das Gerät, das lediglich eine 
RS-422-Schnittstelle besitzt. Die Geräte A und B müssen Kommandos an 
Gerät C senden und Ausgaben des Gerätes C empfangen können. Gerät D soll 
lediglich alle Ausgaben des Gerätes C mitlesen können.

Soweit ich mich belesen habe, sollte die Ausgabe der Daten (gesehen aus 
der Perspektive von Geräte C) kein Problem darstellen, da RS-422 
Multidrop-fähig ist, mit anderen Worten sollte der orange markierte 
Verbindungspunkt kein Problem darstellen. Der rot markierte 
Verbindungspunkt hingegen stellt meiner Meinung nach ein Problem dar.

Sieht jemand hierzu eine Lösung (vielleicht ist es auch ein triviales 
Problem, welches ich hier schildere)?

Für jedwede Hilfe wäre ich sehr dankbar.

von jetzt (Gast)


Lesenswert?

Nun. Ein Leiterpaar bei RS422 ist das TX, zum Senden, und das Andere ist 
das RX, zum Empfangen. Damit laesst sich am Besten ein Master-Slave 
system bauen. Das bedeutet Einer sendet auf dem TX, die Anderen 
enpfangen auf TX, Der Master Empfaengt auf RX, die anderen senden auf 
RX.
Alternativ macht man einen Ring, Die Daten gehen zB linksrum, jeweils 
vom TX Port zum RX Port des Naechsten.
Falls man kreuz und quer kommunizieren moechte, dann nimmt man am Besten 
RS485, da wird die Richtung nach Bedarf umgeschalten.

von René S. (saintelmo)


Lesenswert?

jetzt schrieb:
> Nun. Ein Leiterpaar bei RS422 ist das TX, zum Senden, und das
> Andere ist
> das RX, zum Empfangen. Damit laesst sich am Besten ein Master-Slave
> system bauen. Das bedeutet Einer sendet auf dem TX, die Anderen
> enpfangen auf TX, Der Master Empfaengt auf RX, die anderen senden auf
> RX.
> Alternativ macht man einen Ring, Die Daten gehen zB linksrum, jeweils
> vom TX Port zum RX Port des Naechsten.
> Falls man kreuz und quer kommunizieren moechte, dann nimmt man am Besten
> RS485, da wird die Richtung nach Bedarf umgeschalten.

Hallo,

zunächst vielen Dank für deine Antwort. Leider helfen mir die darin 
enthaltenen Informationen nicht weiter. RS-485 wäre ideal für den 
geschilderten Anwendungsfall, jedoch kann ich Komponente C nicht 
verändern.

Wenn einfach nur alle Geräte miteinander verbunden werden, wie du es 
vorschlägst, was passiert dann beispielsweise wenn A und B gleichzeitig 
senden?

von Arsenico (Gast)


Lesenswert?

wenn beide gleichzeitig…
dann hast Du eh ein Problem
Du behoeftigst einen externen Schiedsrichter...

von jetzt (Gast)


Lesenswert?

Erst muss man die Leitungen richtig zuweisen. Dass jeweils Sende Port 
auf Empfangsport geht. Der Rest ist protokoll. Wenn zwei wahlweise auf 
dieselbe Leitung senden sollen, muessen sie natuerlich definiert wissen 
wann sie senden duerfen.
In diesem Fall wuerde man eine TX Leitung von A(Tx) nach C(Rx) und eine 
B(Tx) nach C(Rx), sowie C(Tx) nach A(Rx) + B(Rx) + D(Rx). Das geht 
soweit.
Jetzt muessen nur noch A und B definieren wie sie sich mit C 
verstaendigen. Moeglicherweise kann ja B auch die antworten an A 
auswerten, und gegenseitig.

von René S. (saintelmo)


Lesenswert?

Arsenico schrieb:
> wenn beide gleichzeitig…
> dann hast Du eh ein Problem
> Du behoeftigst einen externen Schiedsrichter...

Nicht zwangsläufig, z.B. existiert mit CSMA/CD ein Verfahren, das bei 
Ethernet zum Einsatz kommt und gänzlich ohne externen Voter auskommt. 
Nachteil an dieser Variante ist, dass die Kommunikation nicht mehr 
deterministisch und somit nicht für Kommunikation unter 
Echtzeitbedingungen geeignet ist. Diese Variante ist für mich 
ungeeignet, ich bin mir aber sicher, dass es hier noch andere Verfahren 
gibt.

von René S. (saintelmo)


Lesenswert?

jetzt schrieb:
> Erst muss man die Leitungen richtig zuweisen. Dass jeweils Sende Port
> auf Empfangsport geht. Der Rest ist protokoll. Wenn zwei wahlweise auf
> dieselbe Leitung senden sollen, muessen sie natuerlich definiert wissen
> wann sie senden duerfen.
> In diesem Fall wuerde man eine TX Leitung von A(Tx) nach C(Rx) und eine
> B(Tx) nach C(Rx), sowie C(Tx) nach A(Rx) + B(Rx) + D(Rx). Das geht
> soweit.

Genau, das ist soweit trivial.

> Jetzt muessen nur noch A und B definieren wie sie sich mit C
> verstaendigen. Moeglicherweise kann ja B auch die antworten an A
> auswerten, und gegenseitig.

An dieser Stelle kommt mein Problem zum Tragen: Was passiert, wenn A 
oder B gestört ist? Wie kann man zuverlässig ausschließen, dass ein 
nicht korrekt funktionierender Kommunikationspartner die gesamte 
Kommunikation zwischen den Komponenten zerstört?

von Nosnibor (Gast)


Lesenswert?

René S. schrieb:
> An dieser Stelle kommt mein Problem zum Tragen: Was passiert, wenn A
> oder B gestört ist? Wie kann man zuverlässig ausschließen, dass ein
> nicht korrekt funktionierender Kommunikationspartner die gesamte
> Kommunikation zwischen den Komponenten zerstört?

Wie verhindert man, daß ein ausgerasteter Betrunkener mit seinem 
Krakeelen die Kommunikation zwischen den anderen Partygästen stört? 
Indem man ihn rausschmeißt.

Genauso in der technischen Kommunikation: man muß den Störer vom Netz 
trennen.
Wenn das nicht praktikabel ist (z.B. beim alten Koaxkabel-Ethernet oder 
eben hier mit RS-422), hilft nur, die Geräte so zu bauen, daß sie in 
allen möglichen Ausnahmesituationen nicht zum Störer werden. 
Ethernet-Chips hatten z.B. einen "Jabber-Timer", der den eigenen Sender 
beobachtet und lahmgelegt hat, wenn zu lange am Stück gesendet wurde. 
Sollte zwar nie passieren, aber falls die MAC-Zustandsmaschine mal 
ausrastet...
Hier sollte das einfacher sein: geeignete Pullups oder so, damit der 
RS-422-Treiber nur sendet, wenn die Firmware das auch will (und nicht 
z.B. während des Bootens, solange noch nichts initialisiert ist), 
fertig.

Aber das erste Problem ist doch: wie verhindert man, daß sich A und B im 
Normalbetrieb gegenseitig stören? Wenn ich das richtig verstanden habe, 
sind beide Clients bzw. Master, d.h. beide haben das Recht, zu einem 
beliebigen Zeitpunkt Anfragen an C zu schicken und Antwort zu erwarten. 
Da hilft nur, Timing und Prüsummen so festzulegen, daß C eine Kollision 
sicher als solche erkennt und signalisieren kann, damit A und B ihre 
Anfragen dann (nach unterschiedlicher Wartezeit) wiederholen.

Und ich hoffe, die Hardwarefrage, wie man zwei RS-422-Ausgänge an einen 
Eingang hängt, ist bereits geklärt...

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.