Forum: Mikrocontroller und Digitale Elektronik RS485 Richtungserkennung


von Richard B. (devler0)


Lesenswert?

Guten Tag zusammen,

ich habe hier ein Problem, bei dem mir bisher keiner helfen konnte.

Ich habe hier 2 Bauteile einer Maschine, bei welchem eines davon der 
Tester ist. Damit werden aktuelle Werte ausgelesen, Ein und Ausgänge 
geschalten etc.

Nun wird für selbige Maschine eine PC-Software benötigt, die die 
gleichen Funktionalitäten wie der besagte Tester hat.

Das ganze ist ungefähr 10 Jahre alt, und es existiert nur in sehr 
begrenztem Umfang eine Dokumentation.

Aus diesem Grund möchte/muss ich nun nachbauen, wie der Tester mit der 
Maschine kommuniziert.

Das ganze dann in beliebiger Programmiersprache nachzubauen, ist nicht 
das Problem sondern... der Tester hat einen MAX Rs485 Transceiver und 
funktioniert mit einer Halb-Duplex Kommunikation (2 Drähte, + 
Spannungsversorgung Tester und GND). Wenn ich nun die die Kommunikation 
mitlese (probeweise einen billigen RS485 auf RS232 getestet), sieht man 
natürlich nicht welche Daten der Tester sendet, und welche die Anlage 
selbst.

Ich suche also nach einer Möglichkeit, möglichst ohne teure Hardware, 
die Richtung der Daten ersichtlich zu machen (was kommt vom Tester, was 
von der Maschine).

Kommunikation mal eben unterbrechen und die Funkion nochmal auslesen war 
meine Idee... leider wird das Display des Testers blank, sobald die 
Kommunikation unterbrochen wird. Es wird permanent gesendet.
Bei RS232 wäre das ja ganz einfach, aber hier leider nicht.

Zur Richtungserkennung bei Halb-Duplex RS485 finde ich leider online 
auch nicht viel. Habe gesucht, ob das mit einem Raspberry Pi 
realisierbar wäre (mit Zusatzhardware), da wir einen haben...

Am Ende wird wohl auf jeden Fall ein Adapter RS485 auf USB, oder RS485 
auf 232 (und dann auf USB) erforderlich sein.
Hat jemand einen nützlichen Tip? Es gibt online ein Gerät, welches RS485 
Richtungserkennung bietet, aber 500€ für ein solches eher privates 
Projekt ist eine etwas hohe Investition.

Danke

von Hmmm (Gast)


Lesenswert?

Logic Analyzer an den Transceiver klemmen, da siehst Du dann neben 
gesendeten und empfangenen Daten auch das Ein- und Ausschalten von 
Treiber und Empfänger.

von Wolfgang (Gast)


Lesenswert?

Richard B. schrieb:
> Hat jemand einen nützlichen Tip?

Setze Widerstände in die Leitung. Der Spannungsabfalls darüber verrät 
dir, woher die Daten kommen.

von Pandur S. (jetztnicht)


Lesenswert?

Nun, der Tester sendet zuerst, das Geraet antwortet. Eine Frage des 
Timings, welches aufgeloest werden muss.

von c-hater (Gast)


Lesenswert?

Richard B. schrieb:

> der Tester hat einen MAX Rs485 Transceiver und
> funktioniert mit einer Halb-Duplex Kommunikation (2 Drähte, +
> Spannungsversorgung Tester und GND). Wenn ich nun die die Kommunikation
> mitlese (probeweise einen billigen RS485 auf RS232 getestet), sieht man
> natürlich nicht welche Daten der Tester sendet, und welche die Anlage
> selbst.

Der "Tester" muß ein weiteres Signal haben, mit dem die 
Kommunikationsrichtung gesteuert wird, da ja Halbduplex, üblicherweise 
bezeichnet als TXEN o.ä.

Das muß man einfach nur auswerten und irgendwie an die mitlauschende 
Einheit melden. Z.B. dadurch, die Kommunikation mit dem Spion auf 9Bit 
aufzublasen und im neunten Bit halt den aktuellen Status des 
TXEN-Signals abzubilden.

> Ich suche also nach einer Möglichkeit, möglichst ohne teure Hardware,
> die Richtung der Daten ersichtlich zu machen (was kommt vom Tester, was
> von der Maschine).

Tja, ich würde da definitiv einen kompetent programmierten, 
spottbilligen µC empfehlen...

von Test (Gast)


Lesenswert?

Entweder setzt du dich auf beide Platinen und schaust dir dort jeweils 
die TX-Leitung zwischen Mikrocontroller und Bus-Treiber an 
(Logic-Analyzer, Oszilloskop) oder du baust dir ein Device aus 
Bustreiber-Mikrocontroller-Bustreiber was du in die Kommunikation 
einschleifst. Der Mikrocontroller leitet die Nachrichten 1:1 weiter aber 
du siehst ja ob sie von der Seite Bustreiber1 oder Bustreiber2 kommen. 
Ist natürlich ziemlich aufwändig.

von Wolfgang (Gast)


Lesenswert?

c-hater schrieb:
> Der "Tester" muß ein weiteres Signal haben, mit dem die
> Kommunikationsrichtung gesteuert wird, da ja Halbduplex, üblicherweise
> bezeichnet als TXEN o.ä.

Warum?

Wenn der Tester speziell für dieses Gerät ist, weiß er 
höchstwahrscheinlich, wie sich das Gerät benimmt. Dann ist oft schon aus 
dem Kommunikationsprotokoll klar, wann und in welche Richtung die Daten 
laufen.

von c-hater (Gast)


Lesenswert?

Wolfgang schrieb:

> Warum?
>
> Wenn der Tester speziell für dieses Gerät ist, weiß er
> höchstwahrscheinlich, wie sich das Gerät benimmt. Dann ist oft schon aus
> dem Kommunikationsprotokoll klar, wann und in welche Richtung die Daten
> laufen.

Weil die Kommunikation halt letztlich physisch nur in eine Richtung 
laufen kann und die Hardware, die die entsprechenden Baugruppen des 
Businterface ansteuert, halt wissen muss, wann sie was enablen muss.

Dieser simple, durch die dem System selber innewohnende Gesetzmäßigkeit 
findet sich dann auch in Steuerleitungen ALLER gemeinhin verwendeten 
RS485-Transceiver.

Und aus ökonomischen Gründen ist sehr stark anzunehmen, dass auch der 
"Tester" so ein Teil benutzt...

von Wolfgang (Gast)


Lesenswert?

c-hater schrieb:
> Weil die Kommunikation halt letztlich physisch nur in eine Richtung
> laufen kann und die Hardware, die die entsprechenden Baugruppen des
> Businterface ansteuert, halt wissen muss, wann sie was enablen muss.

Bei entsprechendem Protokoll (Master/Slave) kann der Sender direkt durch 
die Datenübertragung gesteuert werden, i.e. derjenige der etwas senden 
will, schaltet selber sein TXen. Der/die Slaves dürfen nur das Mikrofon 
ergreifen, nachdem der Master ihnen das Wort erteilt hat. Nach außen 
siehst du von dem TXen dann nichts.

von c-hater (Gast)


Lesenswert?

Wolfgang schrieb:

> Bei entsprechendem Protokoll (Master/Slave) kann der Sender direkt durch
> die Datenübertragung gesteuert werden

Ja, wäre möglich. Denn dann müßte die Haltezeit für das Umschaltsignal 
für die Hardware sozusagen "vordefiniert" sein und durch Aktivität des 
"masters" getriggert werden.

Auch das kann ein kompetent programmierter µC natürlich problemlos 
abbilden. Er braucht halt dann genau dieselbe Information vorab, die 
auch die Elektronik des Businterface des Testers braucht: die Haltezeit 
für das (dann selbsterzeugte) TXEN-Signal.

Trivialste Trivialitäten, jedenfalls, wenn man das Grundprinzip der 
Halbduplex-Kommunikation kapiert hat...

von Philipp K. (philipp_k59)


Lesenswert?

Man könnte auch einen rs485 repeater  ausprobieren, der hat eine 
richtungsanzeige, vielleicht gibt es den auch als ic. Oder 2 rs485 zu 
serial und einen mikrocontroller als passthrough dazwischen.. bzw einen 
2ten dazu.. dann könnte man beide seiten der kommunikation 
protokollieren.

Nachtrag.. mit nem Arduino  wäre das in einer halben Stunde aufgebaut, 
programmiert und als csv auf dem Rechner.

: Bearbeitet durch User
Beitrag #6416409 wurde von einem Moderator gelöscht.
von Philipp K. (philipp_k59)


Lesenswert?

c-hater schrieb im Beitrag #6416409:
> Sicher nicht von der weit überwiegenden Mehrheit der Arduidioten...

Vielleicht, vielleicht auch wirklich einfach.

Hört sich aber nach rs422(2 Teilnehmer rs485) an? Das wäre absolut Uart 
kompatibel.. dann einen billigen arduino mega2560 mit 3 seriellen Ports, 
2 ports direkt an die rs485 Wandler und der dritte am USB.. dann pass 
through und die Bytes mit Richtung csv kompatibel auf usb in die 
Konsole. Ein Telegramprotokoll.

Wir haben auf der Arbeit voll konfigurierbare Repeater zur 
Signalverstärkung.. die haben für beide Seiten Rx tx lämpchen. Ob man 
rs485 als mehrteilnehmer Bus durchreichen kann, da bin ich mir nicht so 
sicher.. die repeater müssen aufwendig über dip Schalter konfiguriert 
werden und es klappt nicht in jeder rs485 Anwendung.

von A. S. (Gast)


Lesenswert?

Wenn Du an den Chip kommst: dort das Signal für txen abgreifen.

Falls nein und wenn die Übertragung gut ist und auch ohne 
Abschlusswiderstände lauft, kannst Du:

Eine Leitung auftrennen und beide Seiten mit ~1k an halbe Spannung 
legen.

Bei richtiger Wahl der Leitung und Rs kannst Du meist direkt mithören. 
Sonst ein Pegelwandler dahinter.

von Michael D. (Firma: indEAS) (indeas)


Lesenswert?

Mit einem RS485-USB Adapter (für 5€ zu kaufen) kann man doch einfach 
mithören:
An einen PC Anschliessen; mit Hterm oder LKterm oder auch den guten 
alten Hyperterminal der Komminkation von Master und Slave zuhören.
Mit Hterm kann man die Baudrate (und den Rest wie z.B. Parity) im 
laufenden Betrieb umstellen bis es passt.
Wenn man dann einen der Teilnehmer abklemmt, dann weiss man wer Master 
und wer Slave ist.
Der Master schickt zyklisch Datenpakete, der Slave nur nach 
Aufforderung.
Dann geht es als nächstes ans Dekodieren. In der Regel gibt es einen 
Startidentifier (gerne STX) und ein Endidentifier (ETX, CR, LF,...)
Gerne wird ASCII in hex übertragen.
Ich so unseren alten Klimaschrank an einen PC angebunden; jetzt können 
wir schöne Kurven fahren usw.

von STK500-Besityer (Gast)


Lesenswert?

Philipp K. schrieb:
> Hört sich aber nach rs422(2 Teilnehmer rs485) an?

RS422 ist eher RS232 differentiell: also jede Datenrichtung eigene 
Leitungen, was dann RS485-4Wire entspräche.

c-hater schrieb im Beitrag #6416409:
> Sicher nicht von der weit überwiegenden Mehrheit der Arduidioten...

ja. ja, ja, bla, bla, bla
Arduino ist doch als Einstieg für Anfänger gedacht (gewesem).

von Einer (Gast)


Lesenswert?

Trenne die Verbindung auf.
Lese die Daten von beiden Seiten.
Wenn einer was sendet Protokolliere es und schicke es weiter.

@c-hater
Ich kann auch jedes Bit in ASM einzeln behandeln.
Muß es aber nicht.
Arduino (in vielen inkarnationen) ist für mich einfach in vielen Fällen 
nur praktisch.
Anstöpseln ein paar Zeilen Code reinhauen rauf auf das Dingens fertig.
Aber du bohrst ja wohl auch Stahlbeton mit der Handleier.

von georg (Gast)


Lesenswert?

Einer schrieb:
> Trenne die Verbindung auf.
> Lese die Daten von beiden Seiten.

Das funktioniert bei reinem Master-Slave, wenn man die Verbindung zum 
Master auftrennt. Bei einem Bus bei dem jeder mit jedem redet 
funktioniert das nicht.

Georg

von Einer K. (Gast)


Lesenswert?

c-hater schrieb im Beitrag #6416409:
> Sicher nicht von der weit überwiegenden Mehrheit der Arduidioten...

Das ist er wieder beleidigend!

Was hast du davon, alle Arduino User zu beleidigen?

Warum beleidigst du mich?
Was habe ich dir getan, dass dir dieses Befriedigung verschafft?

von georg (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Was hast du davon, alle Arduino User zu beleidigen?

c-hater braucht das für sein Ego. Betrifft keineswegs nur 
Arduino-Benutzer, sondern alle.

Georg

von A. S. (Gast)


Lesenswert?

georg schrieb:
> Das funktioniert bei reinem Master-Slave, wenn man die Verbindung zum
> Master auftrennt. Bei einem Bus bei dem jeder mit jedem redet
> funktioniert das nicht.

Doch. Wie von mir beschrieben. Bei Fragen einfach melden

A. S. schrieb:
> Eine Leitung auftrennen und beide Seiten mit ~1k an halbe Spannung
> legen.
>
> Bei richtiger Wahl der Leitung und Rs kannst Du meist direkt mithören.
> Sonst ein Pegelwandler dahinter.

natürlich nur mit satten Reserven, nicht wenn Leitungslänge oder 
Geschwindigkeit fast ausgenutzt sind.

von Rainer V. (a_zip)


Lesenswert?

Wie schon gesagt wurde, müssen die Tranceiver bei Halb-Duplex enabled 
werden und ein Richtungssignal bekommen. Warum schraubst du die Kisten 
nicht einfach auf und greifst diese Signale ab? Du willst den Tester 
doch sowieso nachbauen...
Gruß Rainer

von Philipp K. (philipp_k59)


Lesenswert?

Arduino Fanboy D. schrieb:
> Das ist er wieder beleidigend!
>
> Was hast du davon, alle Arduino User zu beleidigen?

Sehe ich nicht so, das ist wenn bei Dir halb voll zu halb Leer wird ;)

Man kann sich aber auch wie ein kleines Kind anstellen.. ich benutze 
auch meistens Arduino, könnte es auch händisch und fühle mich NULL 
angesprochen. (Eher geschmunzelt, mal schauen wer sich angesprochen 
fühlt.)

Ich würde eine Bridge mit Analyzer bauen.. ich glaube sowas gibt es 
irgendwo auch fertig.. irgendnen Logik Analyzer glaube ich..

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Philipp K. schrieb:
> Man kann sich aber auch wie ein kleines Kind anstellen.. ich benutze
> auch meistens Arduino, könnte es auch händisch und fühle mich NULL
> angesprochen. (Eher geschmunzelt, mal schauen wer sich angesprochen
> fühlt.)

Der c-hater verhält sich wie ein Arschloch, aber du bist ein Arschloch!

So besser?

von Toby P. (Gast)


Lesenswert?

Irgendeiner schrieb im Beitrag #:
> belangloses

Man seif ihr peinlich, man könnten meinen das euer IQ bei 
Zimmertemperatur liegt.

Warum schafft ihr es nicht bei sachlichen Fragen eure dümmlichen 
gegenseitigen Beleidigungen sein zu lassen. Weil irgendein Vollidiot 
damit anfängt?

Zum Thema:
Wie schon geschrieben gibt es Repeater. Man kann auch am Transceiver das 
Richtungssignal abgreifen. Das funzt wenn es nur einen Slave gibt.

An einfachsten ist imo Widerstände zu nehmen und einen OP zum auswerten. 
Das kann man überall einschleifen.

von georg (Gast)


Lesenswert?

A. S. schrieb:
> Doch. Wie von mir beschrieben. Bei Fragen einfach melden

Frage: du trennst den Master von Rest des Busses mit 3 Slaves ab, wie 
erkennst du wenn sich Slave 1 mit Slave 3 unterhält, wer was sendet? 
Wahrscheinlich bin ich zu doof, aber du erklärst es sicher.

Georg

von A. S. (Gast)


Lesenswert?

georg schrieb:
> des Busses mit 3 Slaves ab, wie erkennst du wenn sich Slave 1 mit Slave
> 3 unterhält, wer was sendet?

Was immer auch der Unterschied zwischen master und Slave sein soll, ... 
Wenn Du 4 devices hast, dann halt 4 Widerstände und 4 mitlesekanäle.

Du trennst die Leitung notfalls direkt am Gerät ab.

von georg (Gast)


Lesenswert?

A. S. schrieb:
> dann halt 4 Widerstände und 4 mitlesekanäle

Wie überaus praxisgerecht.

Georg

von Dieter W. (dds5)


Lesenswert?

georg schrieb:
> wie
> erkennst du wenn sich Slave 1 mit Slave 3 unterhält, wer was sendet?

Seit wann dürfen slaves miteinander kommunizieren?
Alle Aktivitäten gehen vom Master aus und der ist auch immer beteiligt.

von A. S. (Gast)


Lesenswert?

georg schrieb:
> Wie überaus praxisgerecht.

Wenn Du 4 Kanäle getrennt monitoren willst, ... dann ist das am 
einfachsten mit 4 seriellen Schnittstellen, wo Du deren TX an je einen 
RX hängst. Was kostet ein 4-fach 232 zu USB? 10€?

Das dies ein temporärer und provisorischer Zustand ist, in dem weder 
Leitungslängen noch Groundanhebungen ausgereizt werden, sollte klar 
sein. Wenn Du unter worst-Case-Bedingungen testen willst, musst Du halt 
analog Aufwand treiben. So geht es ohne.

Du musst halt wissen, ob es Dir um Prinzipien geht, oder darum, die 
Information einmal mitzulesen.

von georg (Gast)


Lesenswert?

Dieter W. schrieb:
> Seit wann dürfen slaves miteinander kommunizieren?

Wo steht in der RS485-Norm, dass sie das nicht dürfen? Man kann das auch 
Multi-Master nennen, aber das ist Wortklauberei. RS485 ist jedenfalls 
ein any-to-any-Bus.

Georg

von Einer K. (Gast)


Lesenswert?

georg schrieb:
>  aber das ist Wortklauberei.
Nöö..

von c-hater (Gast)


Lesenswert?

georg schrieb:

> Wo steht in der RS485-Norm, dass sie das nicht dürfen? Man kann das auch
> Multi-Master nennen, aber das ist Wortklauberei. RS485 ist jedenfalls
> ein any-to-any-Bus.

Nicht in der Halbduplex-Inkarnation!!!

Diese Feinheit ist dir wohl entgangen...

von c-hater (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:

> Der c-hater verhält sich wie ein Arschloch

Naja, mag sein. Aber immerhin ein kompetentes Arschloch...

Von kompetenten Arschlöchern kann man lernen. Die meisten Uni-Profs sind 
welche, überhaupt die überwiegende Mehrheit der Wissenschaftler und 
Ingenieure.

Das Arschlochtum kommt übrigens oft nur für die als solches rüber, die 
keine Ahnung haben. Also das Problem: von jeder beliebigen Stufe im 
Wissensstand sieht alles durch höhere Wissenstand getriebene oft einfach 
nur wie Arroganz aus...

Das ist kein wirklich neues Phänomen. Schon in den schriftlichen 
Hinterlassenschaften der Antike sind solche Sachen nachweislich häufig 
zu finden. Vermutlich war es aber schon immer so, seitdem Gehirne 
überhaupt mit Abstraktionen umgehen konnten. Den Blinden Wichsern vor 
der Zeit der Schrift fehlte halt einfach nur die (Schrift-) Sprache und 
/oder das entsprechende Medium, um das aktenkundig zu machen...

von georg (Gast)


Lesenswert?

c-hater schrieb:
> Nicht in der Halbduplex-Inkarnation!!!
>
> Diese Feinheit ist dir wohl entgangen...

Wie sieht bitte ein RS485-Bus aus, der NICHT halbduplex ist?

Auf dem Bus kann immer nur einer auf einmal senden weil eben nur ein 
Leitungspaar vorhanden ist, aber das besagt überhaupt nichts über 
Master- oder Slave-Rollen.

Daran ändern auch deine Pöbeleien nichts.

Georg

von Ralf D. (doeblitz)


Lesenswert?

c-hater schrieb:
> georg schrieb:
>
>> Wo steht in der RS485-Norm, dass sie das nicht dürfen? Man kann das auch
>> Multi-Master nennen, aber das ist Wortklauberei. RS485 ist jedenfalls
>> ein any-to-any-Bus.
>
> Nicht in der Halbduplex-Inkarnation!!!
>
> Diese Feinheit ist dir wohl entgangen...

RS(!)-485 spezifiziert überhaupt kein Protokoll, insofern kann man da 
natürlich auch bei Halbduplex vom Master eine Kommunikation zwischen 
zwei Slaves initiieren lassen (man sehe sich für so ein Protokoll 
einfach mal IEEE-488 an, wo so etwas explizit vorgesehen ist). Das hängt 
alles vom Protokoll ab.

Wenn du einen anderen Standrad meintest, der auch ein bestimmtes 
Protokoll wenigstens für Halbduplex spezifiziert, dann nenne bitte auch 
genau jenen Standard, sonst führt das leicht zu Missverständnissen.

von c-hater (Gast)


Lesenswert?

georg schrieb:

> Wie sieht bitte ein RS485-Bus aus, der NICHT halbduplex ist?

Nun, wie ein Vollduplex-Bus halt. Er besitzt zwei differentielle 
Leitungspaare. Wenn man sich die "Differentialität" wegdenkt, entspricht 
das dann logisch einer 3-Draht-UART.

> Auf dem Bus kann immer nur einer auf einmal senden

Das ist immer so, bei jedem Bus. Die Hauptunterschied besteht darin, ob 
es möglich ist, gleichzeitiges Senden zu detektieren (um dann auf 
höheren Protokollschichten eine Busarbitrierung implementieren zu 
können).

von Einer K. (Gast)


Lesenswert?

c-hater schrieb:
> Naja, mag sein. Aber immerhin ein kompetentes Arschloch...
Deine fachliche Kompetenz ziehe ich ja gar nicht in Zweifel.
Die blitzt oft genug auf.

c-hater schrieb:
> Antike
Dass du für den antisoziales Verhalten allerdings die Antike als 
Rechtfertigung bemühen musst, kommt mir sehr befremdlich vor.
Ich schätze, dass man auf die Art jegliches Verhalten begründen kann. 
Denn in der Vergangenheit wurde sicherlich jegliche Schweinerei schon 
mal begangen. Und das auch in Serie.

Nee, das glaube ich dir nicht. Die Ursache für dein Verhalten hier im 
Forum liegt nicht in der Antike.

Klar, ich habe Vermutungen....
z.B. dass man dir als Koten die Spiegelneuronen aus dem Leib geprügelt 
hat.
Da wärst du nicht alleine mit und hättest auch keine Schuld daran.
Auf Grund deiner Intelligenz, welche ich dir mal zuspreche, könntest du 
diese "emulieren". Aber genau das tust du nicht und genau das werfe ich 
dir vor.

Ein paar mal habe ich dich gefragt, "Warum du das tust?"
Da du darauf nicht antwortest, nehme ich mal an dass du gar nicht weißt 
was du damit anrichtest, oder warum.
Oder bist du einfach nur von Natur aus böse?
Solche Leute hat man in der Antike gerne hingerichtet, oder auch zu 
Königen gemacht.
Beides steht dir wohl nicht zur Verfügung.

von georg (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Ein paar mal habe ich dich gefragt, "Warum du das tust?"

Ob c-haters Bösartigkeit angeboren ist, ihm anerzogen wurde oder ob er 
sie sich mühsam erarbeitet hat spielt hier doch keine Rolle. Dies ist 
ein Elektronik-Forum und keine Psycho-Selbsthilfegruppe (an die sich 
c-hater sowieso nie wenden würde, dazu fühlt er sich viel zu wohl).

Georg

von Philipp K. (philipp_k59)


Lesenswert?

Arduino Fanboy D. schrieb:
> Ein paar mal habe ich dich gefragt, "Warum du das tust?"

Ich frage mich wieso Du überhaupt eine Diskussion Fern vom Thread-Thema 
anfängst nur weil da jemand Arduidioten (oder so ähnlich) geschrieben 
hat.

Bevor ich mit dem Arduino angefangen habe, bzw- überhaupt mit C etc.. 
habe ich Jahrelang Java und JRE programmiert. Mir ist bewusst das 
Arduino für Idioten ist, war ich ja auch mal ohne C Vorkenntnisse 
(Steiniger weg von Java)..

Ich nutze es weil es schnell geht, schaue aber auch mal in Register oder 
beim esp in die IDF.

arduino.cc/forum/Deutsch ist da die richtige Ecke.. da gibt es schon 
viele Leute  die unter den ganzen Noobs als Alltgashelfer auf wolke7 
schweben und sich selbst beweihräuchern. ;)

von Günter Lenz (Gast)


Lesenswert?

von Richard B. schrieb:
>Zur Richtungserkennung bei Halb-Duplex RS485 finde ich leider online
>auch nicht viel. Habe gesucht, ob das mit einem Raspberry Pi
>realisierbar wäre (mit Zusatzhardware), da wir einen haben...

Weil es hardwaremäßig einfach nicht möglich ist die
Richtung zu detektieren, daß machen die angeschlossenen
Geräte mit einen Übertragungsprotokoll, daß mußt du
studieren.

https://www.eltima.com/de/article/rs485-communication-guide/

von Weingut P. (weinbauer)


Lesenswert?

Einer am Bus muss ja die Kommunikation starten. Durch Auftrennen kann 
man schauen wer pingt. Der wird in seinem Protokoll stehen haben wie er 
heißt und wer antworten soll ... der Rest ist Fleißarbeit. Knifflig 
wird’s eventuell bei Prüfsummen

von Rainer V. (a_zip)


Lesenswert?

Günter Lenz schrieb:
> Weil es hardwaremäßig einfach nicht möglich ist die
> Richtung zu detektieren

Ist es natürlich, aber an anderer Stelle. Und da kann der TO doch 
offensichtlich dran...aber so kommen wir wohl nicht weiter...
Gruß Rainer

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Richard B. schrieb:
> Hat jemand einen nützlichen Tip? Es gibt online ein Gerät, welches RS485
> Richtungserkennung bietet, aber 500€ für ein solches eher privates
> Projekt ist eine etwas hohe Investition.

 Lol.
 2 RS485=>USB Adapter kaufen (1.5E für beide), Leitung auftrennen,
 Adapter jeweils an einem Ende anschliessen, in 2 USB-Ports einstecken
 und ein kleines Programm schreiben, welches Daten von USBPort_A zum
 USBPort_B schickt (und umgekehrt) und gleichzeitig eine Aufzeichnung
 mit Richtung und Timestamps erzeugt.

 P.S.
 Oder einfach mit Wireshark die beiden Ports beobachten und aufzeichnen.

 P.P.S
 Du hast zwar Verspätung von einem Byte, aber das wissen die beiden
 ganz einfach nicht :-)

: Bearbeitet durch User
Beitrag #6420012 wurde vom Autor gelöscht.
von Richard B. (devler0)


Angehängte Dateien:

Lesenswert?

Wow, nun habe ich wirkliche viele Antworten mit Ideen bekommen.
Erstmal vielen Dank.

Nun hat mir die Idee, mit einem RS485 Repeater gefallen, da ich weder 
ein Oszi, noch Arudino besitze ;) Aber irgendwie ist für mich nicht 
ersichtlich, wie ein solcher die Richtung der Daten ersichtlich machen 
würde. Habe da an allen Repeatern nur einen Eingang gesehen, also einmal 
A+B. Dann 2x oder mehr Output.

Hatte nun selbst noch eine Idee, aber ich weiß nicht, ob das so einfach 
ist...

Ich würde jeweils am Tester und an der Hautplatine 2 Drähte an A und B 
anschließen. "Einer" (jeweils an A und B) ganz normal mit dem anderen 
Teilnehmer verbunden, und einer geht direkt auf einen USB RS485 Adapter 
zu A und B.

Nun die wichtigste Frage dazu: Würde, beim Aufbau wie als Screenshot 
angefügt, die Antwort des jeweils anderen Teilnehmers auch an den RS495 
USB Adapter weitergeleitet werden, oder würde man nur die gesendeten 
Daten des jeweiligen Gerätes sehen?

Sollte das nicht funktionieren, wäre es wohl am einfachsten, das TX 
Signal am Transceiver abzugreifen, diesen muss ich nur finden ;)

Zum mitlesen generell (bisher ja probeweise nur mal "dazwischen"), nutze 
ich den Eltima-Serial-Port-Monitor, dieser hat die Baudrate etc. 
selbstständig erkannt sodass ich dann in Klartext mitlesen konnte. Nun 
weiß ich ehrlich gesagt nicht, wie ich hier, beim ständiger Anfrage vom 
Tester, und Antwort von der Platine (der Tester hat einen blinkenden 
Punkt, der ausbleibt, wenn die Platine nicht mehr reagiert, deshalb wird 
ständig gesendet), hinterherkommen soll, wenn ich das TX Signal einer 
Seite abgreife, aber vielleicht funktioniert meine Idee (siehe 
Screenshot) ja doch.

Vielen Dank schonmal.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Richard B. schrieb:
> Nun die wichtigste Frage dazu: Würde, beim Aufbau wie als Screenshot
> angefügt, die Antwort des jeweils anderen Teilnehmers auch an den RS495
> USB Adapter weitergeleitet werden, oder würde man nur die gesendeten
> Daten des jeweiligen Gerätes sehen?

 Natürlich wird der gesammte Verkehr aufgezeichnet. Es wird also nix mit
 deiner genialer Idee.

> Sollte das nicht funktionieren, wäre es wohl am einfachsten, das TX
> Signal am Transceiver abzugreifen, diesen muss ich nur finden ;)

 Am einfachsten wäre es, die beiden Adapter so anzuschliessen, wie ich
 es dir vorgeschlagen habe.
 Aber du kannst natürlich nach TxD_EN suchen, Drähte anlöten und...

Richard B. schrieb:
> Das ganze dann in beliebiger Programmiersprache nachzubauen, ist nicht
> das Problem sondern...

 Aber ein kleines Programm zu schreiben, um Daten zwischen 2 USB-Ports
 auszutauschen und gleichzeitig alles übersichtlich aufzuzeichnen, ist
 ein Problem für dich?
 Mannomann...

von A. S. (Gast)


Lesenswert?

Wenn Du keine Leitung zwischen den Teilnehmern auftrennst, kannst du 
nicht unterscheiden, welche Seite sendet.

Symmetrisch bedeutet, dass das Signal doppelt übertragen wird. Du kannst 
daher eine Leitung auftrennen. Dazu müsstest Du Dich aber mit den 
Signalpegeln befassen, zumindest in der Theorie.

von Rainer V. (a_zip)


Lesenswert?

Richard B. schrieb:
> Sollte das nicht funktionieren, wäre es wohl am einfachsten, das TX
> Signal am Transceiver abzugreifen, diesen muss ich nur finden ;)

Ja und dann bist du doch auch soweit, das Richtungssignal am Tranceiver 
abzugreifen und weißt so, wann der sendet und wann der empfängt. Kannst 
du denn die verbauten Bausteine identifizieren?
Gruß Rainer

von Johannes (Gast)


Lesenswert?

Marc V. schrieb:
> 2 RS485=>USB Adapter kaufen (1.5E für beide), Leitung auftrennen

Kann jemand für dumme Mitleser erklären, wo man bei sowas eine Leitung 
auftrennt?
es müsste ja so aufgetrennt werden, dass die Kommunikation zwischen 
beiden Teilnehmern noch läuft, man aber trotzdem sieht, was von jedem 
Teilnehmer kommt.

Vielleicht zwei RS485 auf WiFi Adapter mit Pass through und dann schauen 
was welcher WiFi Adapter sendet?

von Stefan F. (Gast)


Lesenswert?

Marc V. schrieb:
> 2 RS485=>USB Adapter kaufen (1.5E für beide), Leitung auftrennen,
>  Adapter jeweils an einem Ende anschliessen, in 2 USB-Ports einstecken
>  und ein kleines Programm schreiben, welches Daten von USBPort_A zum
>  USBPort_B schickt (und umgekehrt) und gleichzeitig eine Aufzeichnung
>  mit Richtung und Timestamps erzeugt.

Und woher weiß dieser Adapter, in welche Richtung er die Daten 
übertragen muss? Es geht ja nicht nur von A nach B, sondern auch von B 
nach A. und zwar über die selben zwei Drähte!

von Marc V. (Firma: Vescomp) (logarithmus)


Angehängte Dateien:

Lesenswert?

Johannes schrieb:
> Kann jemand für dumme Mitleser erklären, wo man bei sowas eine Leitung
> auftrennt?

 Hier.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Stefan ⛄ F. schrieb:
> Und woher weiß dieser Adapter, in welche Richtung er die Daten
> übertragen muss? Es geht ja nicht nur von A nach B, sondern auch von B
> nach A. und zwar über die selben zwei Drähte!

 Weil der Adapter bisschen schlauer ist als du...

 Im ernst:
 Was von RS485 reinkommt wird nach USB weitergereicht, was von USB
 kommt wird nach RS485 weitergereicht.
 So schwer zu verstehen?

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Marc V. schrieb:
> Weil der Adapter bisschen schlauer ist als du...

Deine Skizze hat die Sache verdeutlicht, danke dafür.

Hier müsste der schnüffelnde PC also beide Seiten auf "Empfangsbereit" 
stellen und dann (wenn er etwas empfängt) die Daten zur anderen Seite 
durch reichen. Das wird einen geringen Einfluss auf das Timing haben. 
Könnte klappen, gefällt mir.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Stefan ⛄ F. schrieb:
> Hier müsste der schnüffelnde PC also beide Seiten auf "Empfangsbereit"
> stellen und dann (wenn er etwas empfängt) die Daten zur anderen Seite
> durch reichen.

 Ja, geschieht aber alles wenn der RxD-Event feuert. Jedesmal, wenn sich
 bei einem der beiden USB-Ports die Richtung ändert, wird im LogFile ein
 CR/LF, Teilnehmer und Timestamp gemerkt, alle weiteren Bytes werden in
 der selben Zeile geschrieben. Besser als das braucht es nicht.

> Das wird einen geringen Einfluss auf das Timing haben.
 Im Normalfall 1 Byte, Max. 2 Bytes zwischen Nachrichtenende und
 Antwort, aber das merken die Teilnehmer nicht.

von A. S. (Gast)


Lesenswert?

Johannes schrieb:
> Kann jemand für dumme Mitleser erklären, wo man bei sowas eine Leitung
> auftrennt?
> es müsste ja so aufgetrennt werden, dass die Kommunikation zwischen
> beiden Teilnehmern noch läuft, man aber trotzdem sieht, was von jedem
> Teilnehmer kommt.

Die Kommunikation ist symmetrisch. Das bedeutet, dass jede Leitung die 
Information überträgt. Mann kann also eine Leitung auftrennen (an jedem 
Transceiver) und "Mocken", hier per Widerstand auf einen Mittelwert 
ziehen.

Beim Lesen des Transceivers reicht dieser Mittelwert, damit die andere 
Leitung mal 1, mal 0 melden kann.

Beim Senden des Transceivers kann man an dieser Leitung mithören, was er 
sendet.

Dazu muss man sich das aber aufzeichnen und sich mit den Signalen 
befassen.

von Horst72 (Gast)


Lesenswert?

Den Sniffer:
http://jheyman.github.io/blog/pages/RS485Sniffer/
schon einmal angesehen?

Unabhängig davon, könnte man sich ja auch die Schaltung
des Masters rein elektrisch ansehen und dort einfach den
Umschaltpunkt von senden zu empfangen abgreifen/mitloggen
...oder direkt:
--> Beitrag "Re: RS485 Kommunikation zwischen zwei Geräten sniffen"
"Wenn man Zugriff auf den RS485-Treiber des Masters hat, also
den Mithörer zwischen dessen UART und dem Treiber anbringen
kann, dann kann man auch die gesendeten von den empfangenen
Daten unterscheiden."

von Horst72 (Gast)


Lesenswert?

Vergessen...
Als Anregung zur Umschalt-Suche:
in einer älteren c't war eine Umschaltung für
RS485 von Empfang auf Senden beschreiben,
ich habe auf die schnelle nur die furchtbare url der
google-books-Sicht in der Raspi-Sonderausgabe dazu gefunden:
https://books.google.de/books?id=HAo4DwAAQBAJ&pg=PA101&lpg=PA101&dq=rs485+c%27t+z%C3%A4hler&source=bl&ots=UhZRl0O3K-&sig=ACfU3U11t1BhWNgyl3g5oTwiANQWPJtrww&hl=de&sa=X&ved=2ahUKEwj27fCg9YvsAhXNT8AKHf2pBQcQ6AEwEnoECAkQAQ
c't Raspberry Pi (2017): Raspi-Projekte auch für Raspbian Stretch

von Rainer V. (a_zip)


Lesenswert?

Wenn das fragliche Gerät 10 Jahre alt ist, dann ist da mit Sicherheit 
kein TTL-Grab ala CT oder Elektor verbaut. Wie ich schon schrob, haben 
die Halb-Duplex-Tranceiver einen Enable- und einen Richtungseingang. Und 
da der TO die Geräte ja eh nachbauen will, wäre es doch kluch, sich erst 
mal die verbaute Hardware anzuschaun. Auf der Leitung "herumsniffen" 
kann man dann doch immer noch...
Gruß Rainer

von Horst72 (Gast)


Lesenswert?

junge, junge...
tja, toll, nur nichts anderes habe ich ihm ja
auch (von mir aus: dann noch einmal) "angeboten, zu machen"...

von Richard B. (devler0)


Lesenswert?

Marc V. schrieb:
> Hier.

Die Lösung gefällt mir, wenn das so einfach klappt.

Rainer V. schrieb:
> Und
> da der TO die Geräte ja eh nachbauen will

Fast. Gesetzt ist, das ein Laptop später das können soll, was der Tester 
kann. Muss also alle Funktionen die der Tester hat, in eine Windows 
Software implementieren. Und ohne Quellcode des Mikrocontrollers samt 
Lockbit vom Tester, bleibt eigentlich nur die Kommunikation 
mitzuschneiden (denke ich).

Das ich von der Hardware tatsächlich eher wenig Ahnung habe, merkt man 
wahrscheinlich auch. Deshalb bevorzuge ich das reine "sniffen" der Daten 
die ich dann direkt weiterverwenden kann. Werde mich hier dennoch weiter 
einlesen.

Nun hätte ich noch eine Frage... benötige ja 2 RS485-USB Converter für 
die Lösung von Marc V.
Habe mir flüstern lassen einen FT232 oder CP2102 Adapter zu nehmen, weil 
die billigen aus China kein TX-Enable Ausgang haben...
und der Adapter am Ende ja auch senden können muss.
Wären 2 hier von in Ordnung? 
https://www.ebay.de/itm/USB-to-RS485-TTL-Serial-Converter-Adapter-FT232/143727923676?_trkparms=ispr%3D1&hash=item2176da11dc:g:kRcAAOSwaWtcrw~T&enc=AQAFAAACcBaobrjLl8XobRIiIML1V4Imu%2Fn%2BzU5L90Z278x5ickk7d4nremBkvNKtcC0ZwqXDBSAM7hcOCFA5iR1KGsg%2B7QMmuDAZA6xODSNDEjc0d0Dliwuir2HphYKGFxY8OCtaIfRopzi2JH3Gc7nRFCdA9nPcyK9xKJhItsNiXkSg2DmLd8mFB%2B3GUoRTacby%2FY01OaapnLKdod0DIW54ALJzVwwPAT19lGwnozftjyx7lVwA3lZrLxEvgs4YHu9%2FNbpsgI%2FJShI6jhCWlEMg0bT8AwdW38aOmf4ChOHBAUi1%2Fj8mlr7ZIpoqZAFnpo3ATrBJlGo49wMuW5Wt5W2OCrYmYojEpZIvDiQ74GkIy52QLhKdn9QngQOlWgBZYWh%2Fza8jyxdhfWRMsJ2%2F3ZJz3V5kml5AXNjRTw9r7X2fsHeIyTkqP0xzZpNwy9w0eAoW7F0Pp5MqPNvjJJbY32TvXjCEZ%2FebxqSymWyprmWXhvsAdBs3Vt%2BdLMJTXaB5eeHvCkVvfFmZ%2BO3lYL%2FxDle%2FHhr3vlrrYUu%2BpbuR2LR0JxSaHh1YoZRv%2Feqpep4JCIFqNDlTD3pkOWOuvKk8cTlR5CEFqnXZlryVw5UnutsIkPeEAAB11HQ7XHCaHGXxt3jjWtnitDaa2ylCwLGoy0d9onRYxsNa4XvRhP%2FfMiN%2BMyZGmNZYgke6EjSW0tJh%2FaSD7VgXN0gosXEdONoR83vJhZmxc4BCkNY2qWhUj%2FnmErbD%2FPnuCb4JUV%2BFP6MKdCM15nAn7z6%2BbjO61VFlEYxioqHiROOW6%2FuaFfSQ1w8J4%2FpE4xFSscYwylB9RA6kdzhAyme7A%3D%3D&checksum=14372792367635d94cb8d53f48fa82df73e34e673312

Danke euch.

Beitrag #6421135 wurde vom Autor gelöscht.
von Marc V. (Firma: Vescomp) (logarithmus)


Angehängte Dateien:

Lesenswert?

Richard B. schrieb:
> Habe mir flüstern lassen einen FT232 oder CP2102 Adapter zu nehmen, weil
> die billigen aus China kein TX-Enable Ausgang haben...
> und der Adapter am Ende ja auch senden können muss.

 Unsinn, falsch geflüstert.
 Jeder Adapter kann sowohl senden als auch empfangen.

 P.S.
 So sehen meine aus, waren damals 15E für 10 Stück.

 P.P.S.
 Wieso da auf einmal 2 Bilder sind...

: Bearbeitet durch User
von Rainer V. (a_zip)


Lesenswert?

Richard B. schrieb:
> Das ich von der Hardware tatsächlich eher wenig Ahnung habe, merkt man
> wahrscheinlich auch. Deshalb bevorzuge ich das reine "sniffen" der Daten
> die ich dann direkt weiterverwenden kann. Werde mich hier dennoch weiter
> einlesen.

Also mein lieber TO, du machst da ein Fass auf und ich hoffe inständig, 
dass du damit nicht deine Brötchen verdienen mußt! Ist aber 
wahrscheinlich so...also höre auf die Jungs mit den Sniffern. Mit einem 
Windoof-Laptop eine Testbox nachbilden zu wollen, käme mir - sorry - wie 
das hornberger Schießen vor. Was immer du auch auf W-Ebene draufhaben 
magst, das kann doch nur in die Hose gehen. Bitte verzeih den 
Pessimismus...bin trotzdem gespannt!
Gruß Rainer

von Richard B. (devler0)


Lesenswert?

Naja... sich anzeigen zu lassen, welche Ein und Ausgänge aktiv sind / 
den Akkustand der Anlage anzeigen lassen etc., die die Hardware bei 
entsprechender "Anfrage" des Testers in Klartext (als HEX) ausgibt, 
lässt sich, wenn man mal in der Lage ist die einzelnen Funktionen 
mitzuschneiden, wohl auch von einem extrem unerfahrenen Anfänger in 
welche Programmiersprache auch immer, implementieren.

Daten über einen seriellen Port senden und empfangen (eben mit der 
Voraussetzung, man weiß was man senden muss), sollte eigentlich jeder 
Anfänger hinbekommen.

Aber wenn man (wie ich) das alles bisher nur mit RS232 gemacht hat (hier 
ist mitlesen samt Richtungserkennung natürlich überhaupt kein Problem) 
und eigentlich (muss ich zugeben) von Mikrocontrollern keine Ahnung hat, 
ist das mit RS485 erstmal nicht so leicht, aber ich bin hier ja gut 
aufgehoben ;)

von Rainer V. (a_zip)


Lesenswert?

...erlaube mir also - für mich - äußersten Zweifel. Du erzählst 
pausenlos, dass du quasi von überhauptnix keine bis garkeine Ahnung 
hast...was soll das denn werden? Blödsinn...sorry...
Rainer

von Ruediger A. (Firma: keine) (rac)


Lesenswert?

Es scheint hier etwas Unverständnis darüber zu geben, wie RS485 und dann 
auch so ein USB-RS485 Konverter funktioniert...

Solange über USB keine Daten auf den Bus zu senden sind, hält der 
Konverter die Tx Enable Leitung der RS485 Seite inaktiv.

Wenn Daten zu senden sind, wird das Tx Enable genau für die Dauer des 
Bytes auf aktiv gesetzt. Da der Konverter die Baudrate und Wortlänge und 
Format der RS485 Seite kennt, kann er punktgenau die Aktivierung des 
Busses timen.

Im Gegensatz zu "handgesteuerten" RS485 Bussen ist das super 
komfortabel. Ich schreibe seit > 25 Jahren serielle Treiber, und es gibt 
gerade bei der Umschaltung etliche Fettnäpfchen. Aus Effizienzgründen 
ist es z.B. beim "manuellen" Steuern sinnvoll, das Hin-und Herschalten 
abhängig vom Datenstrom zu machen, d.h. die Tx Enable wird am Anfang 
eines Datenstromes aktiv gezogen und erst nach dem letzten Byte des 
Pakets inaktiv (die Zyklen zum Umschalten sind recht teuer). Die Logik 
dafür ist höchst abhängig davon, wie der Treiber programmiert ist (also 
ob DMA, FIFO, einzeln Interruptgesteuert oder über polling des DR empty 
registers etc) Darum braucht man sich mit einem Konverter nicht zu 
kümmern, der macht es selber, um der hat auch keine Effizienzprobleme. 
Den (und den Bus) stört es nicht, dass der Tx Enable zwischen zwei 
Zeichen sehr kurz auf inaktiv gezogen wird.

Ein anderes typisches Problem besteht darin, daß manche UART Bausteine 
(also im Controller "vor" dem RS485 PHY) per barrel shift register 
funktioneren, d.h. logisch kommt der "data register empty" Interrupt 
schon bevor das Byte auf den Bus geschoben wird. Bereits an dieser 
Stelle den Bus beim letzten Byte umzuschalten ist keine gute Idee 
(manchmal wird genau aus diesem Grunde ein "Müllbyte" am Ende des 
Datenstromes definiert, was natürlich auch eine Krücke ist). Also das 
Syncronisieren der Tx Enable mit dem physikalischen Bus ist potentiell 
ein Ärgernis. Auch das ist mit dem Konverter kein Problem.

All das ändert natürlich nichts daran, dass (wie vorher schon angemerkt 
wurde) im HD Bus (also Zweidraht RS485) Einigkeit darüber herrschen 
muss, wer den Bus aktiv beschrieben darf. Das ist durch das Protokoll 
vorgegeben, und daran hat sich jeder der Knoten zu halten, muss also auf 
dem Bus lauschen und davon abhängig entscheiden, wann er senden darf 
(oder muß). Das ist in der Regel eine SM-MS (Single Master, multiple 
slaves) Architektur (die nur der Vollständigkeit halber in einem FD Bus 
nicht möglich ist); es sind aber auch Protokolle denkbar, die im 
Zweidrahtbus alle Knoten symmetrisch behandeln (z.B. token passing). 
Solange protokollmässig sichergestellt ist, dass keine zwei Knoten 
gleichzeitg die Tx Leitung auf aktiv ziehen, ist Alles erlaubt.

Jeder RS485 Knoten in einem Bus kann zum reinen mitlesen genutzt werden, 
solange er die Tx Enable Leitung niemals aktiviert.

Den Aktivierungspegel im Bus verlässlich auswerten zu können ist 
illusorisch. Erstmal ist der (In)aktivitätspegel unterschiedlich für 
Knoten mit 3,3V und 5V Vcc (das sieht man sehr schön am Oszilloskop), 
und die maximale Länge eines RS485 Busses darf 1500m betragen, d.h. der 
Abstand zwischen zwei Knoten (und damit der Übergangswiderstand) kann 
sehr stark variieren. Wir haben mal mit Collision Detection in der Form 
experimentiert, dass wir versucht haben, die Rx Enable immer aktiv zu 
halten und damit zu "merken," ob Jemand anders während unseres Tx 
versucht zu senden (dann würde nämlich der zurück gelesene Datenstrom 
von dem gesendeten abweichen). Resultat: Ab einem gewissen Abstand und 
anderen physikalischen Charakteristiken zum nächsten Knoten war das 
kollidierende Signal so schwach, dass wir zwar unseren Datenstrom 
"richtig" zurückzulesen meinten, aber die Kollision war trotzdem da und 
wurde von allen Knoten jenseits des Nächsten natürlich so gesehen.

: Bearbeitet durch User
von georg (Gast)


Lesenswert?

Ruediger A. schrieb:
> Es scheint hier etwas Unverständnis darüber zu geben, wie RS485 und dann
> auch so ein USB-RS485 Konverter funktioniert...

Endlich mal eine qualifizierte Aussage von jemand, der die Funktion 
begriffen hat - wahrscheinlich bekommst du dafür eine Menge negative 
Bewertungen. Nützen wird es eh nichts.

Georg

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Ruediger A. schrieb:
> Ein anderes typisches Problem besteht darin, daß manche UART Bausteine
> (also im Controller "vor" dem RS485 PHY) per barrel shift register
> funktioneren, d.h. logisch kommt der "data register empty" Interrupt
> schon bevor das Byte auf den Bus geschoben wird.

 So viel ich weiss, funktionieren alle auf diese Weise.
 Deswegen gibt es DataReg_Empty UND Transmit_Complete Flag.
 Und der "data register empty" Interrupt wird erst angesprungen
 nachdem DataRegister ins ShiftRegister kopiert wurde.

 Was ja auch logisch ist - man muss nicht warten bis das ganze Byte
 rausgeschoben wird - das Ganze wird dadurch viel schneller.

 Transmit Complete ISR ist aber gerade bei RS485 sehr wichtig -
 Tx_En wird erst in dieser ISR zurückgesetzt, neue Daten werden aber
 in DR_Empty ISR nachgeladen.

 Welche Probleme du damit gehabt hast ist mir unklar.

Ruediger A. schrieb:
> Den Aktivierungspegel im Bus verlässlich auswerten zu können ist
> illusorisch. Erstmal ist der (In)aktivitätspegel unterschiedlich für
> Knoten mit 3,3V und 5V Vcc (das sieht man sehr schön am Oszilloskop),

 Sicher.
 Nur wird bei RS485 nicht der Pegel, sondern die Differenz zwischen
 A und B ausgewertet...

 Schade um die Zeit, das alles abzuschreiben - ein Link wäre besser...

: Bearbeitet durch User
von Ruediger A. (Firma: keine) (rac)


Lesenswert?

Marc V. schrieb:
> Ruediger A. schrieb:
>> Ein anderes typisches Problem besteht darin, daß manche UART Bausteine
>> (also im Controller "vor" dem RS485 PHY) per barrel shift register
>> funktioneren, d.h. logisch kommt der "data register empty" Interrupt
>> schon bevor das Byte auf den Bus geschoben wird.
>
>  So viel ich weiss, funktionieren alle auf diese Weise.

Nein.

>  Deswegen gibt es DataReg_Empty UND Transmit_Complete Flag.
>  Und der "data register empty" Interrupt wird erst angesprungen
>  nachdem DataRegister ins ShiftRegister kopiert wurde.
>
>  Was ja auch logisch ist - man muss nicht warten bis das ganze Byte
>  rausgeschoben wird - das Ganze wird dadurch viel schneller.
>

Schon. ABER.

Nimm z.B. eine MCU mit (e)TPU wie den Coldfire5235. Dort sind UARTs über 
die (e)TPU realisierbar. In der Konfiguration hast Du das Phänomen, dass 
der Transmit Complete Interrupt immer noch nicht das Ende des Transmits 
bestimmt, sondern den Zeitpunkt, an dem das letzte Datenbit auf den Bus 
geschoben wird. Der ISR kommt also (gerade bei langsameren Baudraten, 
die erstaunlich oft in der Entwicklung serieller Treiber die 
problematischsten Fälle sind) immer noch zu früh, was die Abschaltung 
angeht. Man muss also genau eine Bitzeit abwarten, bevor man umstellt. 
Zu früh ist schlecht, zu spät aber auch, weil man dann mglw. das erste 
Bit des nächsten Datenstromes killt. Da kann man sich richtig austoben 
und sehr kreativ werden. Mit genau diesem Fall habe ich sehr langjährige 
und "intime" Erfahrungen.

>  Transmit Complete ISR ist aber gerade bei RS485 sehr wichtig -
>  Tx_En wird erst in dieser ISR zurückgesetzt, neue Daten werden aber
>  in DR_Empty ISR nachgeladen.
>

Nicht in allen Fällen möglich, s.o.

>  Welche Probleme du damit gehabt hast ist mir unklar.
>
> Ruediger A. schrieb:
>> Den Aktivierungspegel im Bus verlässlich auswerten zu können ist
>> illusorisch. Erstmal ist der (In)aktivitätspegel unterschiedlich für
>> Knoten mit 3,3V und 5V Vcc (das sieht man sehr schön am Oszilloskop),
>
>  Sicher.
>  Nur wird bei RS485 nicht der Pegel, sondern die Differenz zwischen
>  A und B ausgewertet...
>

Ja, natürlich. Das macht der PHY, und darum geht es ja bei RS485. Darum 
ging es aber dem TO gar nicht. Die Diskussion ging darum (ausser ich 
hätte mich komplett verlesen), wie sich von aussen feststellen lässt, 
wer den Tx aktiv hat (deswegen der Titel "Richtungserkennung"?). Mit dem 
scope ist ein aktiver Pegel klar von einem inaktiven unterscheidbar, 
aber wenn Du Dir mal ein Signal angesehen hast, weisst Du auch, dass 
Signale von zwei verschiedenen Knoten klar unterscheidbar sein können.

>  Schade um die Zeit, das alles abzuschreiben - ein Link wäre besser...

? Ein link worauf? Wer hat wovon abgetippt?... ich jedenfalls von 
Nichts. Das war einfach ein braindump meiner noch recht präsenten 
Erfahrung.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Ruediger A. schrieb:
> Nimm z.B. eine MCU mit (e)TPU wie den Coldfire5235. Dort sind UARTs über
> die (e)TPU realisierbar. In der Konfiguration hast Du das Phänomen, dass
> der Transmit Complete Interrupt immer noch nicht das Ende des Transmits
> bestimmt, sondern den Zeitpunkt, an dem das letzte Datenbit auf den Bus
> geschoben wird. Der ISR kommt also (gerade bei langsameren Baudraten,
> die erstaunlich oft in der Entwicklung serieller Treiber die
> problematischsten Fälle sind) immer noch zu früh, was die Abschaltung
> angeht. Man muss also genau eine Bitzeit abwarten, bevor man umstellt.

 Unsinn, stimmt nicht.
 Interrupt wird nirgendwo bei letztem Datenbit gesetzt, es wird aber
 bei allen erst nachdem der Stop bit rausgeschoben ist, gesetzt.
 Ansonsten hätte ein Protokoll mit 1 1/2 oder 2 Stop bits absolut
 keinen Sinn.

 P.S.
 Gerade nachgeschaut bei NXP:
1
After the stop bits are sent, if no new character is in the transmitter holding register, the UnTXD
2
output remains high (mark condition) and the transmitter empty bit, USRn[TxEMP], is set.

: Bearbeitet durch User
von Ruediger A. (Firma: keine) (rac)


Lesenswert?

Marc V. schrieb:
> Ruediger A. schrieb:
>> Nimm z.B. eine MCU mit (e)TPU wie den Coldfire5235. Dort sind UARTs über
>> die (e)TPU realisierbar. In der Konfiguration hast Du das Phänomen, dass
>> der Transmit Complete Interrupt immer noch nicht das Ende des Transmits
>> bestimmt, sondern den Zeitpunkt, an dem das letzte Datenbit auf den Bus
>> geschoben wird. Der ISR kommt also (gerade bei langsameren Baudraten,
>> die erstaunlich oft in der Entwicklung serieller Treiber die
>> problematischsten Fälle sind) immer noch zu früh, was die Abschaltung
>> angeht. Man muss also genau eine Bitzeit abwarten, bevor man umstellt.
>
>  Unsinn, stimmt nicht.
>  Interrupt wird nirgendwo bei letztem Datenbit gesetzt, es wird aber
>  bei allen erst nachdem der Stop bit rausgeschoben ist, gesetzt.
>  Ansonsten hätte ein Protokoll mit 1 1/2 oder 2 Stop bits absolut
>  keinen Sinn.

Sorry, ich diskutiere das nicht. Ich kenne Controller mit (e)TPUs in 
grosser Tiefe (ich weiss sogar wie die TPU zu programmieren ist) seit 
weit über 15 Jahren. Glaub mir, ich weiss, wovon ich schreibe. Es ist 
ein Fakt, dass ein RS485 Bus bei diesen Controllern das letzte Byte 
verkrüppelt, wenn die Richtungsumschaltung im Transmit Complete 
Interrupt passiert. Das liegt daran, dass der Zeitpunkt, zu dem der 
Empfänger das Bit sampled, in der zu erwartenden Mitte des Bits liegt 
(unter Anderem dafür ist die Baudrate da, ich bin mir sicher, dass Du 
das weisst). Der Interrupt kommt aber (wie gesagt je länger die Bitzeit, 
also geringer die Baudrate, desto verlässlicher) VOR der Samplezeit 
eines Empfägers! Klar ist das Bit schon fertig, was den UART angeht, 
aber nicht was den Bus und den Empfänger angeht!

Ein UART interessiert sich nicht dafür, welcher PHY dahinter sitzt und 
ob der Zusatzanforderungen wie eine Tx Enable Leitung hat. Solche Sachen 
müssen im Einzelfall drumrumentwickelt werden.

Es macht aber (unabhängig davon, wer Recht hat - in diesem Fall habe ich 
Recht ;-)) keinen Sinn, diesen Spezialfall in die letzte Tiefe zu 
diskutieren. Ich wollte lediglich an Hand eines teasers anreissen, 
welche Probleme in der Praxis auftauchen können, wenn man als Entwickler 
tatsächlich damit konfrontiert wird, so etwas wie eine 
Richtungsumschaltung selber programmieren zu müssen (glaub mir, wir sind 
da noch lange nicht am Ende... ;-)). Ich habe selber lange daran 
gezweifelt, dass so etwas wie ein FTDI Konverter da eine tatsächliche 
Hilfe bringen kann. Aber ja, wenn der weiss, wann genau ein Byte anfängt 
und wann es verläßlich auf dem Bus ist, erspart einem so ein Konverter 
viele Stunden Spass und Freude mit Bits und Signalen (keine Ironie, ich 
mag solche Denksportaufgaben. Meine Auftraggeber aber nicht so gerne).

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Ruediger A. schrieb:
> (unter Anderem dafür ist die Baudrate da, ich bin mir sicher, dass Du
> das weisst). Der Interrupt kommt aber (wie gesagt je länger die Bitzeit,
> also geringer die Baudrate, desto verlässlicher) VOR der Samplezeit
> eines Empfägers! Klar ist das Bit schon fertig, was den UART angeht,
> aber nicht was den Bus und den Empfänger angeht!

 Auch Unsinn.
 Sample rate ist (ungefähr, je nach bit) so 10-16 Mal die Baudrate - nix
 mit Samplezeit (was ist das überhaupt?)
 Und was ist mit Parity bit?
 Kommt auch erst nach dem letzten bit...

> Hilfe bringen kann. Aber ja, wenn der weiss, wann genau ein Byte anfängt
> und wann es verläßlich auf dem Bus ist.

 Dafür gibt es Start und Stop bit.

> Es macht aber (unabhängig davon, wer Recht hat - in diesem Fall habe ich
> Recht ;-)) keinen Sinn, diesen Spezialfall in die letzte Tiefe zu
> diskutieren.

 Welchen Spezialfall?
 Daß irgendwelche Interrupts bei letztem Datenbit feuern?
 Lol.

von Ruediger A. (Firma: keine) (rac)


Lesenswert?

Marc V. schrieb:
> Ruediger A. schrieb:
>> (unter Anderem dafür ist die Baudrate da, ich bin mir sicher, dass Du
>> das weisst). Der Interrupt kommt aber (wie gesagt je länger die Bitzeit,
>> also geringer die Baudrate, desto verlässlicher) VOR der Samplezeit
>> eines Empfägers! Klar ist das Bit schon fertig, was den UART angeht,
>> aber nicht was den Bus und den Empfänger angeht!
>
>  Auch Unsinn.
>  Sample rate ist (ungefähr, je nach bit) so 10-16 Mal die Baudrate - nix
>  mit Samplezeit (was ist das überhaupt?)
>  Und was ist mit Parity bit?
>  Kommt auch erst nach dem letzten bit...
>

Ach meine Güte. Jetzt tu nicht so. Selbstverständlich ist mit "letztem 
Bit" das letzte bit gemeint, das auf den Bus geht - von RS485 aus 
gesehen das Bit vor der sicheren Umschaltung. Dass das je nach 
Konfiguration ein Datenbit, ein Stopbit oder ein Parity Bit sein kann, 
ist doch eigentlich klar, oder?

Was das sampling angeht, würde ich mal hier anfangen:

https://en.wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter

speziell:

"A UART usually contains the following components:

    a clock generator, usually a multiple of the bit rate *to allow 
sampling in the middle of a bit period*
..."

das ist meines Wissens nach recht elementares Wissen, wie die 
Synchronisation in UARTs funktioniert. Ich bin mir sicher, dass Du das 
auch weisst.

Wenn Du meinst, dass ich Unrecht habe, darfst Du mich gerne mal besuchen 
kommen, und wir tracen einen RS485 Bus mit TPU UART Knoten, in dem die 
Richtungsumschaltung im TC ISR stattfindet. Das Scope und die 
Empfängerknoten lassen sich nicht durch Worte wie "Unsinn" oder 
"Quatsch" dazu bringen, das fehlerhafte Zeitverhalten zu tolerieren.

Für mich ist diese Diskussion hiermit beendet. Wir haben mit sehr vielen 
sehr schlauen Köpfen (ich beziehe mich nicht notwendigerweise damit ein) 
das Verhalten sehr genau analysiert und eine Lösung gefunden, die ganz 
genau darauf beruht, die Richtungsumschaltung um genau eine Bitzeit zu 
verzögern. Die funktioniert nun seit vielen Jahren in unzähligen 
Installationen sehr sauber und stabil. Solche Fakten und Erfahrungswerte 
zählen für mich.

Ich bin mir sicher, dass auch Du über viel fundierte Praxiserfahrung 
verfügst, aber es wundert mich doch schon, dass Du einer real life 
experience hier widersprichst.

Schönen Tag noch!

von Johannes (Gast)


Lesenswert?

Marc V. schrieb:
> und ein kleines Programm schreiben, welches Daten von USBPort_A zum
>  USBPort_B schickt (und umgekehrt) und gleichzeitig eine Aufzeichnung
>  mit Richtung und Timestamps erzeugt.

Nur mal eine Überlegung. Der erste USB RS 485 Converter ist in Windows 
COM 1.
Der zweite ist COM 2.

Jeder halbwegs gute Serielle Monitor, zeigt was empfangen und was 
gesendet wird.
Würde man also COM1 sniffen, würde alles, was von dem ersten Converter 
kommt und an den zweiten geschickt wird, als "gesendet", und alles was 
vom zweiten Converter an den ersten gesendet wird, als "empfangen" 
aufgezeichnet werden, oder sehe ich das falsch?

TO müsste dann nur noch die beiden USB Ports irgendwie paaren, an denen 
die beiden Converter angeschlossen sind.
Oder ich irre mich.

Hoffentlich erfährt man, wie die Sache ausgeht.

Achja: Baudrate muss man ja auch noch irgendwie ermitteln, oder wird 
diese automatisch erkannt? Kenne mich nur mit RS232 Kram aus.

von Ruediger A. (Firma: keine) (rac)


Lesenswert?

Johannes schrieb:
> Marc V. schrieb:
>> und ein kleines Programm schreiben, welches Daten von USBPort_A zum
>>  USBPort_B schickt (und umgekehrt) und gleichzeitig eine Aufzeichnung
>>  mit Richtung und Timestamps erzeugt.
>
> Nur mal eine Überlegung. Der erste USB RS 485 Converter ist in Windows
> COM 1.
> Der zweite ist COM 2.
>
> Jeder halbwegs gute Serielle Monitor, zeigt was empfangen und was
> gesendet wird.
> Würde man also COM1 sniffen, würde alles, was von dem ersten Converter
> kommt und an den zweiten geschickt wird, als "gesendet", und alles was
> vom zweiten Converter an den ersten gesendet wird, als "empfangen"
> aufgezeichnet werden, oder sehe ich das falsch?
>

Prinzipiell richtig, deckt aber das Szenario vom TO nicht ab, da der 
peer in seiner RS485 Kommunikation eine externe Hardware ist.

Trotzdem stimmt deine Argumentation selbst mit einem COM Port, wenn z.B. 
über den PC ein USB Port angeschlossen ist, an dessen anderen Ende eine 
USB->RS485 Konverter hängt. Mit wireshark oder anderen tools läßt sich 
dann der USB Datenverkehr mitschneiden, und an der Stelle ist er ja noch 
in Rx und Tx unterscheidbar.

von blubb (Gast)


Lesenswert?

Das timing sollte dann doch im Wireshark erkennbar sein, inbsesondere 
wenn man den Kommunikationsanfang beim Einschalten mitschneiden kann..

von Peter D. (peda)


Lesenswert?

c-hater schrieb:
> georg schrieb:
>
>> Auf dem Bus kann immer nur einer auf einmal senden
>
> Das ist immer so, bei jedem Bus.

Nö.
Z.B. auf dem Meter-Bus können Master und Slave gleichzeitig senden. Der 
Master sendet über Spannungabsenkung, der Slave über Stromanstieg.

https://m-bus.com/documentation-wired/04-physical-layer

von MCUA (Gast)


Lesenswert?

.. und bei OpenCollector-Schaltungen oder CAN-Transceiver (jedesmal 
rezessive 0-Pegel) können auch mehrere senden (wobei sich da allerdings 
der Pegel evt. nicht mehr ändert, alles Definitionssache)

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.