Ich kämpfe mit dem CAN-Bus-Reverse-Engineering. Es mag eine dumme Frage sein, aber sie irritiert mich.
Dies sind Verkehre, die durch das Drücken der Tasten A und B entstehen, wodurch am Ende die 1. Achse des Roboters angehoben wird.
Durch Drücken der Taste A ändert sich der Wert „09“ in 181h-Knoten und Taste B ändert den Wert „C8“ in 281h.
Wenn ich mich nicht irre, muss ich RPDOs füttern, um die Hebeaktion zu replizieren, anstatt die Nachrichten "0A 00 09 00 00 00 00 FF" an 181h und "00 00 00 C8 6F BD 00 FF" an 281h zu senden. Im Grunde sende ich die Nachrichten von RPDOs zurück an RPDOs.
Ist bis jetzt irgendetwas falsch? (Es muss sein ... sonst hätte es funktioniert.)
Wie Sie auf dem obigen Screenshot sehen können, habe ich die Nachrichten manuell gesendet, indem ich jede Zeile mit der Leertaste gedrückt habe. Und es scheint so, dass zwischen meinen Tx-Nachrichten viele Rx-Nachrichten auftauchen. Ist das vielleicht der Grund, warum der Roboter keine Reaktion zeigt?
AKTUALISIEREN :
Die TPDO-Nachricht "0A 00 09 00 00 00 00 FF", die durch das Drücken von Taste A entsteht, wird ignoriert, denn immer wenn ich eine TPDO-Nachricht 0A 00 09 00 00 00 00 FF schreibe, wird sie mit ihrem Standardwert 0A 00 0A 00 überschrieben 00 00 00 FF so schnell, dass meine Nachricht überhaupt wie "nicht angekommen" ist.
Die Übertragungsart von TPDO ist derzeit asynchron mit einem Event-Timer von 50 ms. Dies führt dazu, dass mein TPDO alle 50 ms irgendwie mit dem Standardwert 0A 00 0A überschrieben wird. Wie gehe ich mit diesem Problem um? Ich dachte, diese asynchrone Übertragungsart mit 50 ms bedeutet, dass das TPDO alle 50 ms überprüft werden muss und ob es eine Änderung gab -> Übertragung. Aber woher kommt dann dieser 0A 00 0A 00 00 00 00 FF Default-Wert?
Eine andere Frage: Ich dachte die ganze Zeit, dass ich den RPDOs-Wert zurück in RPDO schreiben muss, um die Aktion zu replizieren. Aber es scheint so, dass sich die RPDOs erst ab dem Drücken der Taste A überhaupt nicht ändern. Wie kann ich dann die Aktion des Drückens der Taste A überhaupt replizieren?
UPDATE 2 : Die Bitrate beträgt 125 kbit/s. Ich verwende CANopen, damit ich den Roboter mit meinem Computer steuern kann, anstatt die Fernbedienung zu verwenden. Der Roboter, den ich verwende, ist Brokk 170. Unten finden Sie eine Excel-Datei, in der sich die aufgezeichneten CAN-Nachrichten befinden. Diese CAN-Meldungen entstanden, als ich den Roboter mit der Robotersteuerung einschaltete.
Ich habe die Nachrichten bis zur Nachricht mit der Nummer 107 übertragen, da der Wert 0A 00 0A 00 00 00 00 FF anzeigt, dass der Roboter jetzt hochgefahren ist. Aber irgendwie schaltet die übertragene Sequenz den Roboter nicht ein. Jetzt versuche ich, einen Weg zu finden, um die Nachrichten von der Fernbedienung zu blockieren.
https://drive.google.com/open?id=1Du4J27KykzrTtCquFt29uMa_qhpZP4Ov
Dies sieht aus wie CANopen- Verkehr (RPDO wird auch in der Frage erwähnt). 0x80 ist SYNC, und es scheint, dass es in regelmäßigen Abständen gesendet wird (etwa alle 26 ms, 38-39 Hz). Und einige Geräte reagieren auf die SYNC-Nachrichten, indem sie Nachrichten mit den IDs 0x181 und 0x281 senden. Aber das ist an dieser Stelle nur eine Vermutung.
Es könnte auch sein, dass der Inhalt von ID 0x181 und 0x281 Sollwerte zu einem Servo sind (das gleiche Gerät sendet also 0x80, 0x181 und 0x281 aus) und dass die Positionsrückmeldung in den 0x301-Nachrichten enthalten ist.
Es sollte möglich sein, physische Positionen des Roboters mit den Nachrichten zu korrelieren. Es wird (wahrscheinlich) sofort ein Sollwert gesetzt und die Ist-Positionen hinken hinterher.
Hinweis: 181h ist kein Knoten, und Sie senden keine Nachrichten an ihn. 181h ist eine CAN-Nachrichten-ID. Da es sich wahrscheinlich um CANopen handelt, ist 0x181 die Nachricht „PDO1, send“ für das Gerät mit der ID 1. Beachten Sie, dass nicht immer klar ist, ob die Geräte-ID angibt, welches Gerät sie sendet, oder ob das Gerät das Ziel ist.
Type Function code: Device ID range:
Binary Decimal ID in Hex Decimal
CAN ID
--------------------------------------------------------------------
NMT 0000 0 No 0 - 0 0 - 0
SYNC 0001 1 No 0x80 - 0x80 128 - 128
Emergency 0001 1 Yes 0x81 - 0xFF 129 - 255
Time stamp 0010 2 No 0x100 - 0x100 256 - 256
PDO1, transmit 0011 3 Yes 0x181 - 0x1FF 385 - 511
PDO1, receive 0100 4 Yes 0x201 - 0x27F 513 - 639
PDO2, transmit 0101 5 Yes 0x281 - 0x2FF 641 - 767
PDO2, receive 0110 6 Yes 0x301 - 0x37F 769 - 895
PDO3, transmit 0111 7 Yes 0x381 - 0x3FF 897 - 1023
PDO3, receive 1000 8 Yes 0x401 - 0x47F 1025 - 1151
PDO4, transmit 1001 9 Yes 0x481 - 0x4FF 1153 - 1279
PDO4, receive 1010 10 Yes 0x501 - 0x57F 1281 - 1407
SDO, transmit 1011 11 Yes 0x581 - 0x5FF 1409 - 1535
SDO, receive 1100 12 Yes 0x601 - 0x67F 1537 - 1663
NMT error ctrl 1110 14 Yes 0x701 - 0x77F 1793 - 1919
Peter Mortensen
Peter Mortensen