RS485 mitschneiden

Gast #5950476
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
Gast #5950492
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?
Gast #5950495
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?
Gast #5950509
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.
#5950518
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...
Gast #5950522
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.
#5950565
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.
#5950781
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.
Gast #5950886
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
#5950962
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.
(Firma: Vescomp) #5951084
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...
(Firma: Vescomp) #5951184
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...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.