Decodificación de datos de mensaje en este bus CAN

2

Estoy trabajando con el bus CAN y necesito ayuda para decodificar los datos del mensaje.

Aquí hay una muestra de los datos que estoy viendo en el 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#

No puedo encontrar la manera de rastrear los datos a un mensaje de bus CAN en particular.

Mi dispositivo tiene un ID de nodo de 101 (base 10) y es un motor paso a paso StepIM. Aquí hay una referencia al manual: link . Así que intentemos y decodifiquemos el último mensaje de arriba. Eso sería " can0 665 8 40 6C 60 00 00 00 00 00 "

Parece que no puedo entender cómo traducir la cadena hexadecimal "* 40 6C 60 ..." en un comando que el documento para el motor paso a paso conoce sobre ...

    
pregunta Brad Walker

4 respuestas

4

No ha explicado qué muestra exactamente su listado, pero podría ser el ID de mensaje, seguido del número de bytes de datos entre paréntesis, seguido por los bytes de datos reales. Nada parece indicar explícitamente si los ID son de 11 o 29 bits. Tal vez solo utilizando 3 dígitos HEX para la identificación, esta lista indica las ID de 11 bits. Si es así, mostraría 8 dígitos HEX para las ID de 29 bits.

Por lo tanto, lo que cada línea muestra (parece) que se muestra es un mensaje CAN. No hay nada más que descifrar para entender el mensaje CAN. Se te muestra explícitamente.

Por ejemplo, la última línea dice que se vio un mensaje con ID 665h (1637 decimal), que este mensaje tenía 8 bytes de datos y que los bytes de datos eran (en HEX) 40, 6C, 60, 0, 0 , 0, 0 y 0. Los tres primeros serían 64, 108 y 96 en decimal.

En cuanto a lo que significa significado de ese mensaje a cualquier dispositivo que lo haya originado o esté destinado a actuar en él, eso es algo que debe consultar en la documentación de los dispositivos específicos. Esa es una capa por encima de CAN.

Mi dispositivo tiene un ID de nodo de 101

No hay ID de nodo en CAN, solo ID de mensaje. Si sus dispositivos utilizan el concepto de ID de nodo, entonces esto es algo particular a una capa de protocolo por encima de CAN. El estándar CAN no puede ayudarte con eso. Debe consultar la documentación específica del dispositivo, que puede referirse al protocolo de nivel superior que utiliza sobre la CAN, posiblemente en un documento separado.

    
respondido por el Olin Lathrop
3

Excepto por el primer mensaje, este es el tráfico típico SDO (CANopen ), con pares de solicitud / respuesta:

0x665   SDO request  (range 0x600 - 0x67F, depending on the node ID)
0x5E5   SDO response (range 0x580 - 0x5FF, depending on the node ID)

Para el primer par, un sorteo muerto es el 0x4B en el primer byte de la respuesta. Esto indica que los datos devueltos tienen un tamaño de dos bytes (para un byte y cuatro bytes, es 0x4F y 0x43, respectivamente). El 0x40 en el primer byte de la solicitud indica que es una solicitud de lectura (el estándar usa un término diferente, "Subir", con el significado opuesto al de Internet (descarga): proviene del perspectiva del dispositivo direccionado).

La solicitud CAN ID es 0x600 + ID de nodo. La respuesta CAN ID es 0x580 + ID de nodo. Así:

665   Read request to device with node ID 0x65
5E5   Read response from device with node ID 0x65

Para los SDO, el índice y subíndice CANopen está en el segundo, tercer y cuarto byte (el byte menos significativo primero para el índice CANopen). Entonces, para el primer par, 40 78 60 00, el solicitante dice: "Dispositivo en el ID de nodo 0x65 (101), dame tu valor almacenado en 6078sub0" .

En este caso, la información fluye desde el dispositivo direccionado a quien realizó la solicitud (el solicitante no puede verse desde el registro del bus CAN, pero generalmente es un controlador central en el sistema o una herramienta de servicio que se ejecuta en una PC (normalmente un adaptador USB a CAN)).

Por lo tanto, para el tráfico mostrado, se realizan solicitudes de lectura (la respuesta para la última no se incluye en el registro de bus CAN publicado):

6078sub0   (2 bytes, 0xDB00 = 219)
6064sub0   (4 bytes, 0x005E7DE4 - 6,192,612)
6041sub0   (2 bytes, 0x0227 - 551)
6041sub0   (2 bytes, 0x0227 - 551)
606Csub0   (?? bytes)

Extrañamente, la solicitud para 6041sub0 se repite.

Además, aunque los SDO generalmente son solo para información de configuración, el rango de índice CANopen 0x6000 a 0x6FFF se usa generalmente para información no relacionada con la configuración, como las cantidades medidas o el estado.

Sumergiéndose en el manual

Los índices / subíndices SDO se pueden consultar en el manual (he incluido valores reales del registro de bus CAN de muestra):

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.

El primer mensaje

Suponiendo que el primer mensaje también es CANopen, 4E5 F0 16 00 00: Para todos los mensajes CANopen CAN, el ID es un código de función de cuatro bits (0-15) seguido de un ID de nodo de siete bits. En este caso, 0x4E5 = 1001 1100101b. Por lo tanto, el código de función es 1001b = 9, que significa "PDO4, transmitir". La dirección del flujo de información para las PDO (a pesar de, en este caso, "transmitir") es una cuestión de definición (depende de la aplicación). El ID de nodo es 1100101b = 0x65.

El ID de nodo para el PDO es el mismo que para los SDO.

La información en este PDO, "Transmitir PDO 4", está contenida en SDO 0x1A03, "Transmitir PDO Mapping Parameter 4". Si no se ha cambiado el valor predeterminado, los datos en el PDO son los mismos que SDO 0x60FAsub0, un entero con signo de 32 bits:

  

el esfuerzo de control como la salida del bucle de control de posición. En la función de control de posición, la notación del esfuerzo de control depende del modo y, por lo tanto, no se especifica.

Conclusión

El dispositivo motor con ID de nodo 0x65 envía el esfuerzo de control (probablemente a intervalos de tiempo regulares) utilizando un PDO .

Un controlador o una ventana de monitor en tiempo real en una herramienta de servicio lee y muestra otras cantidades / estados medidos desde el mismo dispositivo motor usando SDOs .

    
respondido por el Peter Mortensen
1

El dispositivo utiliza un protocolo CANopen . CANopen es un sistema de comunicación basado en CAN. Comprende protocolos de capa superior y especificaciones de perfil.

Se utiliza en automatización. Hay varios analizadores de protocolo para averiguar toda la comunicación. El sistema de automatización que utiliza CANopen es una arquitectura maestro / esclavo. Encontrará información en la wikipedia sobre CANopen, pero no es tan trivial como el mensaje CAN orientado.

    
respondido por el Tom Kuschel
0

Para decodificar la comunicación, debe conocer el Diccionario de objetos CANopen del motor. Parece que los TPDO y su contenido dependen de la comunicación y la asignación de objetos.

Debes estudiar los siguientes términos de CANopen para comprender el protocolo. - Diccionario de objetos - Procesar objetos de datos (DOP)   - Parámetros de comunicación.   - Parámetros de mapeo

    
respondido por el ehiker

Lea otras preguntas en las etiquetas