Ich arbeite mit dem CAN-Bus und benötige Hilfe beim Dekodieren von Nachrichtendaten.
Hier ist Ein Beispiel der Daten, die ich auf dem CAN-Bus sehe.
root@petalinux:/var/volatile/tmp# /tmp/candump -n 10 can0 can0 4E5 [4] F0 16 00 00 can0 665 [8] 40 78 60 00 00 00 00 00 can0 5E5 [8] 4B 78 60 00 DB 00 00 00 can0 665 [8] 40 64 60 00 00 00 00 00 can0 5E5 [8] 43 64 60 00 E4 7D 5E 00 can0 665 [8] 40 41 60 00 00 00 00 00 can0 5E5 [8] 4B 41 60 00 27 02 00 00 can0 665 [8] 40 41 60 00 00 00 00 00 can0 5E5 [8] 4B 41 60 00 27 02 00 00 can0 665 [8] 40 6C 60 00 00 00 00 00 root@petalinux:/var/volatile/tmp#
Ich kann nicht herausfinden, wie die Daten zu einem bestimmten CAN zurückverfolgt werden können Busnachricht.
Mein Gerät hat eine Knoten-ID von 101 (Basis 10) und ist ein StepIM-Schrittmotor. Hier ist ein Verweis auf das Handbuch – http://servotronix.com/wp-content/uploads/dlm_uploads/2015/05/stepIM_CANopen_fw0.0.2.85_Rev.1.3.pdf . Versuchen wir also, die letzte Nachricht von oben zu dekodieren. Das wäre „ can0 665 8 40 6C 60 00 00 00 00 00 „
Ich kann anscheinend nicht herausfinden, wie die Hex-Zeichenfolge“ * 40 6C 60 .. „in einen Befehl übersetzt wird, den das Dokument für den Schrittmotor kennt …
Kommentare
- Die stepIM sind mit dem CANopen-Protokoll, einem höheren Protokoll, das auf dem CAN-Bus basiert. Bitte tauschen Sie das Tag CAN gegen CANopen aus.
Antwort
Mit Ausnahme der ersten Nachricht ist dies eine typische SDO -Verkehr ( CANopen ) mit Anforderungs- / Antwortpaaren:
0x665 SDO request (range 0x600 - 0x67F, depending on the node ID) 0x5E5 SDO response (range 0x580 - 0x5FF, depending on the node ID)
Für das erste Paar ist ein totes Werbegeschenk das 0x4B im ersten Byte der Antwort. Dies zeigt an, dass die zurückgegebenen Daten eine Größe von zwei Bytes haben (für ein Byte und vier Bytes sind es 0x4F bzw. 0x43). Das 0x40 im ersten Byte der Anforderung gibt an, dass es sich um eine Leseanforderung handelt (der Standard verwendet einen anderen Begriff: “ Upload “ mit der entgegengesetzten Bedeutung wie im Internet (Download) – aus Sicht des adressierten Geräts.
Die Anforderungs-CAN-ID lautet 0x600 + Knoten-ID. Die Antwort-CAN-ID lautet 0x580 + Knoten-ID. Also:
665 A read request to the device with node ID 0x65 5E5 A read response from the device with node ID 0x65
Bei SDOs befinden sich der CANopen-Index und der Subindex im zweiten, dritten und vierten Byte (niedrigstwertiges Byte zuerst für den CANopen-Index). Für das erste Paar, 40 78 60 00, sagt der Anforderer: “ Gerät an Knoten-ID 0x65 (101), geben Sie mir Ihren gespeicherten Wert bei 6078sub0 “ .
In diesem Fall fließen die Informationen vom adressierten Gerät zu demjenigen, der die Anforderung gestellt hat (der Anforderer kann jedoch nicht aus dem CAN-Bus-Protokoll gesehen werden, aber Es handelt sich normalerweise um eine zentrale Steuerung im System oder um ein Service-Tool, das auf einem PC ausgeführt wird (normalerweise ein USB-zu-CAN-Adapter).
Für den angezeigten Datenverkehr werden daher Leseanforderungen gestellt (die Die Antwort für die letzte ist nicht im veröffentlichten CAN-Bus-Protokoll enthalten:
6078sub0 (2 bytes, 0xDB00 = 219) 6064sub0 (4 bytes, 0x005E7DE4 - 6,192,612) 6041sub0 (2 bytes, 0x0227 - 551) 6041sub0 (2 bytes, 0x0227 - 551) 606Csub0 (?? bytes)
Seltsamerweise wird die Anforderung für 6041sub0 wiederholt.
Obwohl SDOs normalerweise nur für Konfigurationsinformationen dienen, wird der CANopen-Indexbereich 0x6000 bis 0x6FFF normalerweise für Nichtkonfigurationsinformationen wie Messgrößen oder Status verwendet.
Eintauchen in das Handbuch
Die SDO-Indizes / Subindizes können im Handbuch nachgeschlagen werden (I h ave enthält die tatsächlichen Werte aus dem Beispiel-CAN-Bus-Protokoll):
6078sub0 Motor current, 219 mA 6064sub0 "Position Actual Internal Value" is 6,192,612 6041sub0 Statusword, 0x0227 = 0000 0010 0010 0111, meaning: "ready to switch on", "switched on", "operation enabled", "quick stop" "remote" 606Csub0 "Velocity Actual Value". The value is not included, but it is a 32-bit signed integer.
Die erste Nachricht
Angenommen, die erste Nachricht ist ebenfalls CANopen. 4E5 F0 16 00 00: Für alle CANopen-CAN-Nachrichten ist die ID ein Vier-Bit-Funktionscode (0-15), gefolgt von einer Sieben-Bit-Knoten-ID. In diesem Fall ist 0x4E5 = 1001 1100101b. Somit ist der Funktionscode 1001b = 9, was bedeutet, dass “ PDO4 “ sendet. Die Richtung des Informationsflusses für PDOs (obwohl in diesem Fall “ “ sendet) ist eine Frage der Definition (abhängig von der Anwendung ). Die Knoten-ID lautet 1100101b = 0x65.
Die Knoten-ID für das PDO ist dieselbe wie für die SDOs.
Die Informationen in diesem PDO “ Übertragungs-PDO 4 “ ist in SDO 0x1A03 enthalten. “ Übertragungs-PDO-Zuordnungsparameter 4 „. Wenn es nicht vom Standard geändert wurde, sind die Daten im PDO dieselben wie SDO 0x60FAsub0, eine vorzeichenbehaftete 32-Bit-Ganzzahl:
das Steuerelement Aufwand als Ausgang des Positionsregelkreises. In der Positionssteuerungsfunktion ist die Notation des Steuerungsaufwands modenabhängig und daher nicht angegeben.
Schlussfolgerung
Das Motorgerät Mit der Knoten-ID 0x65 wird der Steuerungsaufwand (wahrscheinlich in regelmäßigen Zeitintervallen) mithilfe eines PDO gesendet.
Ein Controller oder ein Echtzeitmonitorfenster in einem Service-Tool liest und zeigt an andere Messgrößen / Status vom selben Motorgerät mit SDOs .
Kommentare
- Ich arbeite mit dieser Art von CAN Busdaten täglich, so dass dies leicht erkennbar ist. Die genaue Interpretation / Bedeutung hängt jedoch von Informationen über das jeweilige System ab. Ich dachte, diese Frage hätte eine umfassende Antwort verdient.
Antwort
Sie haben nicht erklärt, was genau in Ihrem Eintrag angezeigt wird, aber könnte ist die Nachrichten-ID, gefolgt von der Anzahl der Datenbytes in Klammern, gefolgt von den tatsächlichen Datenbytes. Nichts scheint explizit anzugeben, ob die IDs 11 oder 29 Bit sind. Vielleicht nur durch Verwendung von 3 HEX-Ziffern für die ID dies Die Auflistung zeigt 11-Bit-IDs an. In diesem Fall werden 8 HEX-Ziffern für 29-Bit-IDs angezeigt.
In jeder Zeile wird (wie es scheint) angezeigt, dass es sich um eine CAN-Nachricht handelt Verstehen Sie die CAN-Nachricht. Sie wird Ihnen explizit angezeigt.
In der letzten Zeile wird beispielsweise angegeben, dass eine Nachricht mit der ID 665h (1637 dezimal) angezeigt wurde, dass diese Nachricht 8 Datenbytes hatte und dass die Datenbytes waren (in HEX) 40, 6C, 60, 0, 0, 0, 0 und 0. Die ersten drei wären 64, 108 und 96 in Dezimalzahl.
Was die
Mein Gerät hat eine Knoten-ID von 101
Es gibt keinen Knoten IDs in CAN, nur Nachrichten-IDs. Wenn Ihre Geräte das Konzept einer Knoten-ID verwenden, ist dies etwas Besonderes für eine Protokollschicht über CAN. Der CAN-Standard kann Ihnen dabei nicht helfen. Sie müssen die spezifische Gerätedokumentation konsultieren, die sich möglicherweise auf das übergeordnete Protokoll bezieht, das über CAN verwendet wird, möglicherweise in einem separaten Dokument.
Kommentare
- Es ist ‚ kein einfaches CAN, es ist CANopen, wie im Handbuch gezeigt.
- Ich habe es in meine Antwort .
Antwort
Das Gerät verwendet eine CANopen-Protokoll . CANopen ist ein CAN-basiertes Kommunikationssystem. Es umfasst übergeordnete Protokolle und Profilspezifikationen.
Es wird in der Automatisierung verwendet. Es gibt mehrere Protokollanalysatoren, um die gesamte Kommunikation zu ermitteln. Das Automatisierungssystem mit CANopen ist eine Master / Slave-Architektur. Auf Wikipedia finden Sie einige Informationen zu CANopen, aber diese sind nicht so trivial wie die nachrichtenorientierte CAN selbst.
Kommentare
- Ja, das ist richtig. Es ist CANopen.
Antwort
Um die Kommunikation zu dekodieren, müssen Sie das motorische CANopen-Objektwörterbuch kennen. Es sieht aus wie TPDOs und ihr Inhalt hängt von Kommunikations- und Zuordnungsobjekten ab.
Sie sollten die folgenden Begriffe von CANopen studieren, um das Protokoll zu verstehen. – Objektwörterbuch – Prozessdatenobjekte (PDO) – Kommunikationsparameter – Zuordnungsparameter