RS485 mitschneiden

Gast #5950476
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
Gast #5950522
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.
#5950565
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.
#5950781
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.
Gast #5950886
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
(Firma: Vescomp) #5951084
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...
(Firma: Vescomp) #5951184
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren