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
Nun. Die Zeichen sind eine Sache. Das Timing eine Andere. Allenfalls muss ein Timing eingehalten werden.
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?
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?
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.
Du musst möglicherweise auch noch irgendwelche Startbefehle usw senden. Lies mal die gesamte Kommunikation ab dem Einschalten mit.
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...
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.
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.
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.
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).
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
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.
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...
Mit einem Zirkulator aus OpAmps kann man auch bidirektionale Kommunikation auftrennen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.