Je travaille avec le bus CAN et jai besoin daide pour décoder les données de message.
Voici un échantillon des données que je vois sur le bus CAN.
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#
Je ne peux pas trouver comment tracer les données vers un CAN particulier message de bus.
Mon appareil a un identifiant de nœud de 101 (base 10) et il sagit dun moteur pas à pas StepIM. Voici une référence au manuel – http://servotronix.com/wp-content/uploads/dlm_uploads/2015/05/stepIM_CANopen_fw0.0.2.85_Rev.1.3.pdf . Essayons donc de décoder le dernier message ci-dessus. Ce serait « can0 665 8 40 6C 60 00 00 00 00 00 «
Je narrive pas à trouver comment traduire la chaîne hexadécimale » * 40 6C 60 .. « en une commande que connaît le document du moteur pas à pas …
Commentaires
- les stepIM sont avec le protocole CANopen qui est un protocole supérieur basé sur le bus CAN. Veuillez échanger la balise CAN avec CANopen.
Réponse
Sauf pour le premier message, cest typique Trafic SDO ( CANopen ), avec paires demande / réponse:
0x665 SDO request (range 0x600 - 0x67F, depending on the node ID) 0x5E5 SDO response (range 0x580 - 0x5FF, depending on the node ID)
Pour la première paire, un cadeau mort est le 0x4B dans le premier octet de la réponse. Cela indique que les données renvoyées ont une taille de deux octets (pour un octet et quatre octets, il sagit respectivement de 0x4F et 0x43). Le 0x40 dans le premier octet de la requête indique quil sagit dune requête lecture (la norme utilise un terme différent, » Upload « , avec la signification inverse comme sur Internet (téléchargement) – cest du point de vue de lappareil adressé).
LID CAN de la demande est 0x600 + ID du nœud. LID CAN de réponse est 0x580 + ID de nœud. Ainsi:
665 A read request to the device with node ID 0x65 5E5 A read response from the device with node ID 0x65
Pour les SDO, lindex et le sous-index CANopen se trouvent dans le deuxième, le troisième et le quatrième octet (octet le moins significatif en premier pour lindex CANopen). Donc pour la première paire, 40 78 60 00, le demandeur dit: » Périphérique au nœud ID 0x65 (101), donnez-moi votre valeur stockée à 6078sub0 » .
Dans ce cas, les informations sont transmises de lappareil adressé à celui qui a fait la demande (le demandeur ne peut pas être vu dans le journal du bus CAN, mais il sagit généralement dun contrôleur central dans le système ou dun outil de service fonctionnant sur un PC (généralement un adaptateur USB-CAN)).
Ainsi, pour le trafic affiché, des requêtes de lecture sont faites pour (le réponse pour le dernier nest pas inclus dans le journal du bus CAN publié):
6078sub0 (2 bytes, 0xDB00 = 219) 6064sub0 (4 bytes, 0x005E7DE4 - 6,192,612) 6041sub0 (2 bytes, 0x0227 - 551) 6041sub0 (2 bytes, 0x0227 - 551) 606Csub0 (?? bytes)
Étrangement, la requête pour 6041sub0 est répétée.
De plus, même si les SDO ne servent généralement quà des informations de configuration, la plage dindex CANopen 0x6000 à 0x6FFF est généralement utilisée pour les informations non liées à la configuration, comme les quantités mesurées ou létat.
Plonger dans le manuel
Les index / sous-index SDO peuvent être consultés dans le manuel (I h ave inclus les valeurs réelles de lexemple de journal de bus CAN):
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.
Le premier message
En supposant que le premier message soit également CANopen, 4E5 F0 16 00 00: Pour tous les messages CANopen CAN, lID est un code de fonction à quatre bits (0-15) suivi dun ID de nœud à sept bits. Dans ce cas, 0x4E5 = 1001 1100101b. Ainsi, le code de fonction est 1001b = 9, signifiant » PDO4, transmettez « . Le sens du flux dinformations pour les PDO (malgré, dans ce cas, » transmettre « ) est une question de définition (dépend de lapplication ). LID de nœud est 1100101b = 0x65.
LID de nœud pour le PDO est le même que pour les SDO.
Les informations dans ce PDO, » Transmettre PDO 4 « , est contenu dans SDO 0x1A03, » Transmettre PDO Mapping Parameter 4 « . Sil na pas été modifié par rapport à la valeur par défaut, les données dans le PDO sont les mêmes que SDO 0x60FAsub0, un entier 32 bits signé:
le contrôle leffort comme sortie de la boucle de contrôle de position. Dans la fonction de contrôle de position, la notation de leffort de commande dépend du mode et donc non spécifié.
Conclusion
Le dispositif moteur avec lID de nœud 0x65 envoie leffort de contrôle (probablement à intervalles de temps réguliers) à laide dun PDO .
Un contrôleur ou une fenêtre de surveillance en temps réel dans un outil de service lit et affiche autres grandeurs / statuts mesurés à partir du même équipement moteur utilisant des SDO .
Commentaires
- Je travaille avec ce type de CAN données de bus sur une base quotidienne, ce qui est donc facilement reconnaissable. Cependant, linterprétation / signification précise dépend des informations sur le système particulier. Je pensais que cette question méritait une réponse complète.
Réponse
Vous navez pas expliqué ce que montre exactement votre fiche, mais cela pourrait être lID du message, suivi du nombre doctets de données entre parenthèses, suivi des octets de données réels. Rien ne semble indiquer explicitement si les ID sont 11 ou 29 bits. Peut-être simplement en utilisant 3 chiffres HEX pour lID ceci La liste indique des ID de 11 bits. Si tel est le cas, elle afficherait 8 chiffres HEX pour des ID de 29 bits.
Ce que chaque ligne vous montre donc (semble-t-il) est un message CAN. Il ny a plus rien à décoder comprendre le message CAN. Il vous est montré explicitement.
Par exemple, la dernière ligne indique quun message a été vu avec lID 665h (1637 décimal), que ce message contenait 8 octets de données et que le les octets de données étaient (en HEX) 40, 6C, 60, 0, 0, 0, 0 et 0. Les trois premiers seraient 64, 108 et 96 en décimal.
Quant à ce que le la signification de ce message est à quel que soit le périphérique qui en est à lorigine ou qui est censé agir sur lui, cest quelque chose vous devez rechercher dans la documentation des appareils spécifiques. Cest « une couche au-dessus de CAN.
Mon appareil a un identifiant de nœud de 101
Il ny a pas de nœud ID dans CAN, uniquement des ID de message. Si vos appareils utilisent le concept dID de nœud, alors cest quelque chose de particulier à une couche de protocole au-dessus de CAN. La norme CAN ne peut pas vous aider. Vous devez consulter la documentation spécifique du périphérique, qui peut faire référence au protocole de niveau supérieur quil utilise ci-dessus CAN, éventuellement dans un document séparé.
Commentaires
- Ce ‘ nest pas un CAN de base, cest CANopen, comme on le voit dans le manuel.
- Jy ai développé dans ma réponse .
Réponse
Lappareil utilise un Protocole CANopen . CANopen est un système de communication basé sur CAN. Il comprend des protocoles de couche supérieure et des spécifications de profil.
Il est utilisé dans lautomatisation. Il existe plusieurs analyseurs de protocole pour comprendre toute la communication. Le système dautomatisation utilisant CANopen est une architecture maître / esclave. Vous trouverez sur wikipedia des informations sur CANopen, mais ce n’est pas si banal que le message orienté CAN lui-même.
Commentaires
- Oui, cest correct. Cest CANopen.
Réponse
Pour décoder la communication, vous devez connaître le dictionnaire dobjets moteur CANopen. Il semble que les TPDO et leur contenu dépend des objets de communication et de cartographie.
Vous devriez étudier les termes suivants de CANopen pour comprendre le protocole. – Dictionnaire dobjets – Objets de données de processus (PDO) – Paramètres de communication – Paramètres de mappage