Forum: Mikrocontroller und Digitale Elektronik RS485 mitschneiden


von Thomas Klein (Gast)


Lesenswert?

Hallo,

folgende Situation: Ich habe hier die Hauptplatine einer Anlage.
Dazu gibt es ein Diagnosegerät das mittels RJ10 Anschluss an die Platine 
angeschlossen wird. Die Kommunikation funktioniert über RS485.

Mit diesem Diagnosegerät werden z.B. Fehler ausgelesen oder 
Diagnosefunktionen gestartet. Ich versuche nun die Kommunikation davon 
abzufangen. Ziel ist es, die Befehle der verschiedenen Funktionen so 
abzufangen, das ich sie mit einem Laptop/PC senden kann und das 
Diagnosegerät nicht benötige.
Mit Serial Port Monitor und selbstgebautem Adapter wird exakt gleich da 
gestellt, was das Diagnosegerät auch anzeigt.

Wenn ich nun z.B "Fehler auslesen" wähle, bekomme ich im Serial Port 
Monitor als Code "66 FC 68 20" und so weiter.Wenn ich aber den exakt 
gleichen Code über den RJ10 Port an die Platine sende, gibt es keinerlei 
Rekation. Ich habe wenig Ahnung, wie man vermutlich merkt.
Muss ich mir das aus dem Kopf schlagen oder ist das doch nicht so 
schwer?

Mit freundlichen Grüßen

von Weg mit dem Troll ! Aber subito (Gast)


Lesenswert?

Nun. Die Zeichen sind eine Sache. Das Timing eine Andere. Allenfalls 
muss ein Timing eingehalten werden.

von Thomas Klein (Gast)


Lesenswert?

Kann man das Timing irgendwie mitschneiden? Also quasi der Abstand in 
der Befehle gesendet werden müssen?

Meine Vorstellung von "Befehl XY wird gesendet -> Funktion 12 wird 
ausgeführt" ist vermutlich zu schön?

von Thomas Klein (Gast)


Lesenswert?

Nachtrag:

Die Kommunikation im Serial Port Monitor, also Parity, Geschwindigkeit 
etc. sind vermutlich richtig, da nur mit einer Geschwindigkeit Klartext 
angezeigt wird, wenn ich zwischen Diagnosegerät und Platine lese.
Müsste diese dann nicht auch die richtige zum senden sein?

von Einer (Gast)


Lesenswert?

Thomas Klein schrieb:
> Müsste diese dann nicht auch die richtige zum senden sein?

Im Prinzip stimmt das.
Aber du mußt auch die Antworten im zeitlichen Kontext erfassen.
Evtl. mußt du erst irgendwelche acknowledge Sequenzen abwarten bevor du 
weiter senden darfst.

von BS (Gast)


Lesenswert?

Du musst möglicherweise auch noch irgendwelche Startbefehle usw senden. 
Lies mal die gesamte Kommunikation ab dem Einschalten mit.

von Max D. (max_d)


Lesenswert?

Kauf dir für paar Euro auf ebay so einen fx2 logic analyzer (gehandelt 
als usbee oder saleae). Lad dir dazu pulseview/sigrok und schneid damit 
die Kommunikation mit.
Rs485 kosten die Schnittstellenwandler ja nur cents...

von Dr.Who (Gast)


Lesenswert?

Thomas Klein schrieb:
> Mit diesem Diagnosegerät werden z.B. Fehler ausgelesen oder
> Diagnosefunktionen gestartet.

Der Tester als Master konfiguriert oder als Slave ?
Auch kann man auf dem Bus einfach nur Lauschen und die Kommunikation
erledigt die Anlage. So ganz klar finde ich das nicht.
RS-485 ist nur die physikalische Spezifikation.
Die Kommunikation ist dann Protokollsache, vermutlich CAN.
Da kann man nicht mal eben einen zweiten Master anklemmen, es sei denn,
ein Tester ist da extra für konzipiert, aber der müsste sich dann
mit dem Master der Anlage irgendwie arangieren. Ohne Informationen
kann das hier aber keiner wissen.

von G. H. (schufti)


Lesenswert?

naja, erstmal ist RS485 bidirektional. Wenn du da nur "mitliest" weißt 
du ja noch nicht, wer was gesendet hat. Du mußt also erstmal 
herausfinden was die Hauptplatine und was das Diagnosegerät geschickt 
hat.

Dazu müßtest du zusätzlich die Steuersignale am Treiberbaustein abreifen 
und auswerten ... da hilft auch der von max_d erwähnte Logikanalyzer.

von Joe F. (easylife)


Lesenswert?

Evtl. liegt der Fehler auch in deiner selbst gebauten Hardware, und sie 
kann zwar lesen aber nicht korrekt senden.
Ich würde mir zunächst die Signal des Diagnosegerätes mit einem 
Oszilloskop ansehen, damit bekommst du sowohl die genaue Bitrate als 
auch die benötigten Pegel heraus.
Um herauszufinden, was vom Diagnosegerät kommt und was die Anlage 
sendet, kann ein 1K Serienwiderstand in einer der Datenleitungen und ein 
2-Kanal Oszilloskop hilfreich sein. Je nach dem, von welcher Seite 
gesendet wird, ist der Signalpegel dann auf der jeweiligen Seite des 
Serienwiderstandes ca. 10% höher.

von Stefan F. (Gast)


Lesenswert?

Thomas Klein schrieb:
> Kann man das Timing irgendwie mitschneiden?

Ja, am einfachsten mit so einem Logic Analysator für ca 8€ (wie von Max 
empfohlen).

von Georg (Gast)


Lesenswert?

Thomas Klein schrieb:
> bekomme ich im Serial Port
> Monitor als Code "66 FC 68 20" und so weiter

Man muss Frage UND Antwort analysieren - bei RS485 ist also zu klären, 
was die Maschine und was das Diagnosegerät sendet. Das sieht man aber 
bei RS485 den Daten auf der Leitung nicht an. Nach deinen Angaben könnte 
z.B. das Diagnosegerät "66" gesendet haben und die Antwort darauf ist 
"FC 68 20". Das bekommt man höchstens mit dem Timing heraus, wenn es 
zwischen Frage und Antwort eine Pause gibt.

Georg

von Joe F. (easylife)


Lesenswert?

Georg schrieb:
> Das bekommt man höchstens mit dem Timing heraus

Wie gesagt, ein Oszilloskop kann hier auch Aufschluss geben. Sehr 
wahrscheinlich unterscheiden sich die Pegel der beiden Sender, falls sie 
genau identisch sein sollten, kann ein Serienwiderstand eine 
Pegeldifferenz herstellen, die man dann nutzen kann.

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


Lesenswert?

Joe F. schrieb:
> Wie gesagt, ein Oszilloskop kann hier auch Aufschluss geben. Sehr
> wahrscheinlich unterscheiden sich die Pegel der beiden Sender, falls sie
> genau identisch sein sollten, kann ein Serienwiderstand eine
> Pegeldifferenz herstellen, die man dann nutzen kann.

  Oder man trennt ganz einfach die Verbindung und zeichnet nur das,
 was von DG gesendet wird.
 Dann verbindet man die beiden wieder und schaut nochmals...

 P.S.
Max D. schrieb:
> Rs485 kosten die Schnittstellenwandler ja nur cents...

 Plus Arduino für 1,7E kann Wunder wirken...

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Mit einem Zirkulator aus OpAmps kann man auch bidirektionale 
Kommunikation auftrennen.

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


Lesenswert?

Abdul K. schrieb:
> Mit einem Zirkulator aus OpAmps kann man auch bidirektionale
> Kommunikation auftrennen.

 Sicher, aber das muss man erst zusamenbauen, mit RS485 Adapter und
 Arduino dauert es nur Minuten bis das Ganze dekodiert ist:
1
 Beispiel:
2
  DG und Platine verbunden (Arduino als Listener):
3
     *** DG sendet "Fehler auslesen" ***
4
  Aufgezeichnet: 66 FC 68 20
5
     *** Verbindung zwischen DG und Platine auftrennen ***
6
     *** DG sendet wieder "Fehler auslesen"  ***
7
  Aufgezeichnet: 66
8
     ***  1) Arduino empfängt 66, sendet FC zurück ***
9
     ***     Falls keine Antwort:
10
               Arduino  empfängt 66, sendet FC 68 zurück
11
               DG antwortet mit 20
12
          Oder:
13
     ***  2) Arduino empfängt 66 FC, sendet 68 zurück ***
14
     ***  DG antwortet mit 20

 oder so ähnlich, das Ganze sollte auf jeden Fall nicht länger
 als ein paar Minuten pro Befehl dauern...

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.