Uso de los SDO
Introducción
Los telegramas SDO sirven para acceder de forma no periódica a cualquier objeto CANopen mediante programación de solicitudes. El servicio SDO consta de un telegrama de solicitud y un telegrama de respuesta.
Telegrama SDO de solicitud
Solicitud de información desde el maestro al controlador LTMR :
ID de COB |
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
Byte 6 |
Byte 7 |
---|---|---|---|---|---|---|---|---|
0x600 + ID de nodo |
Código de solicitud |
Índice de objetos |
Subíndice de objetos |
Datos de solicitud |
||||
LSB |
MSB |
Bits 7-0 |
Bits 15-8 |
Bits 23-16 |
Bits 31-24 |
Telegrama SDO de respuesta
Solicitud de información desde el maestro al controlador LTMR :
ID de COB |
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
Byte 6 |
Byte 7 |
---|---|---|---|---|---|---|---|---|
0x580 + ID de nodo |
Código de respuesta |
Índice de objetos |
Subíndice de objetos |
Datos de respuesta |
||||
LSB |
MSB |
Bits 7-0 |
Bits 15-8 |
Bits 23-16 |
Bits 31-24 |
Códigos de solicitud y respuesta
El contenido de los datos de solicitud y respuesta puede variar en función de los códigos de solicitud y respuesta. En la siguiente tabla se muestran los datos de solicitud de cada uno de los diferentes códigos de solicitud:
Código de respuesta |
Descripción del comando |
Byte 4 |
Byte 5 |
Byte 6 |
Byte 7 |
---|---|---|---|---|---|
0x23 |
Escribir datos de 4 bytes |
Bits 7-0 |
Bits 15-8 |
Bits 23-16 |
Bits 31-24 |
0x2B |
Escribir datos de 2 bytes |
Bits 7-0 |
Bits 15-8 |
0x00 |
0x00 |
0x2F |
Escribir datos de 1 byte |
Bits 7-0 |
0x00 |
0x00 |
0x00 |
0x40 |
Leer datos |
0x00 |
0x00 |
0x00 |
0x00 |
0x80 |
Interrupción del comando SDO actual* 1 |
Bits 7-0 |
Bits 15-8 |
Bits 23-16 |
Bits 31-24 |
En la siguiente tabla se muestran los datos de respuesta de cada uno de los diferentes códigos de respuesta:
Código de solicitud |
Descripción del comando |
Byte 4 |
Byte 5 |
Byte 6 |
Byte 7 |
---|---|---|---|---|---|
0x23 |
Leer datos: Datos de 4 bytes |
Bits 7-0 |
Bits 15-8 |
Bits 23-16 |
Bits 31-24 |
0x2B |
Leer datos: Datos de 2 bytes |
Bits 7-0 |
Bits 15-8 |
0x00 |
0x00 |
0x2F |
Leer datos: Datos de 1 byte |
Bits 7-0 |
0x00 |
0x00 |
0x00 |
0x40 |
Escribir una respuesta de datos de 1/2/4 bytes |
0x00 |
0x00 |
0x00 |
0x00 |
0x80 |
Respuesta de error detectada: código de cancelación devuelto* se proporciona una lista de todos los códigos de interrupción admitidos |
0x00 |
0x00 |
0x00 |
0x00 |
Códigos de interrupción de SDO
Se admiten los siguientes códigos de interrupción:
Código de interrupción |
Descripción |
---|---|
0x 0503 0000 |
Transferencia segmentada: No se ha alternado el bit de conmutación. |
0x 0504 0000 |
El protocolo SDO ha sobrepasado el tiempo de espera |
0x 0504 0001 |
El código de solicitud no es válido o se desconoce |
0x 0601 0000 |
Se ha producido un disparo durante el acceso al parámetro (por ejemplo, una solicitud de escritura en un parámetro de sólo lectura). |
0x 0601 0001 |
Se intentó realizar una solicitud de lectura en un parámetro con derechos de acceso de sólo escritura |
0x 0601 0002 |
Se intentó realizar una solicitud de escritura en un parámetro con derechos de acceso de sólo lectura |
0x 0602 0000 |
El índice enviado en la solicitud hace referencia a un objeto que no existe en el diccionario de objetos |
0x 0604 0041 |
Asignación de objetos PDO: El parámetro no se puede asignar al PDO; este error detectado se produce al escribir en los parámetros 0x1600, 0x1A00, 0x1605 y 0x1A05 (asignaciones PDO) |
0x 0604 0042 |
Asignación de objetos PDO: El número o la longitud de los parámetros que se van a asignar supera la longitud máxima de PDO. |
0x 0609 0011 |
El subíndice enviado en la solicitud no existe |
0x 0609 0030 |
Se ha sobrepasado el intervalo de valores del parámetro (solo para acceso de escritura) |
0x 0609 0031 |
El valor del parámetro escrito es demasiado alto |
0x 0609 0032 |
El valor del parámetro escrito es demasiado bajo |
0x 0609 0036 |
El valor máximo del parámetro es inferior a su valor mínimo |
0x 0800 0000 |
Se ha producido un error general detectado |