# CANopen

CANopen es un protocolo de comunicaciones de alto nivel, para uso industrial, basado en el bus CAN (ISO 11898) y recogido en la norma EN 50325-4.
CANopen ha sido desarrollado por CiA (CAN in Automation), asociación sin ánimo de lucro formada por fabricantes y usuarios del bus CAN.

## Historia

* En 1992 se constituye CiA con el objetivo de promover aplicaciones industriales del bus CAN.
* Dos años más tarde, en 1994 CiA publica las primeras especificaciones de una capa de aplicación CAL (CAN Application Layer).
* En 1995 aparece el documento DS-301 proponiendo a CANopen como un perfil de comunicaciones que trabaja haciendo uso del conjunto de herramientas desarrollado en CAL. En él se definen también los perfiles de dispositivo para diferentes familias de productos (encóders, variadores de velocidad, entradas y salidas remotas, ...).
* En 1999 tiene lugar una reestructuración importante, en la que se integran todas las especificaciones de CAL dentro del documento de descripción de CANopen.
* A partir de entonces se han corregido errores y se han realizado mejoras menores que han quedado recogidas en la versión del documento CiA 301 (descargable de la web de CiA) y en la norma EN 50325-4 de 2002.

## Modelo de referencia

Siguiendo el modelo de referencia OSI, los niveles físico y de enlace son los mismos que en el bus CAN. CANopen especifica el nivel de aplicación, resultando una arquitectura simplificada con sólo tres capas, muy común en los buses de campo. En la práctica no significa que las capas intermedias estén totalmente vacías, sino que la mayor parte de los servicios que ofrecen no tienen utilidad para un bus industrial. La solución es aligerar la implementación suprimiendo esas capas y trasladando los servicios necesarios a la capa superior, que es la de aplicación.

## Modelo de dispositivo

Los dispositivos se estructuran en tres unidades funcionales:
* Comunicaciones: Proporciona los objetos de comunicación y la funcionalidad necesaria para transportar los datos a través de la red subyacente.
* Diccionario de objetos: Es una colección de todos los elementos de datos que tienen influencia en el comportamiento de los objetos de aplicación, los objetos de comunicación y la máquina de estados del dispositivo.
* Aplicación: engloba la funcionalidad del dispositivo con respecto a la interacción con el proceso.
El diccionario de objetos funciona como una interfaz entre las comunicaciones y la aplicación. La descripción completa de la unidad de aplicación de un dispositivo, con respecto a los datos del Diccionario de objetos recibe el nombre de perfil de dispositivo.

## Modelo de comunicaciones

Especifica los diferentes servicios y objetos de comunicación y los modos disponibles de mensajería. Soporta la transmisión síncrona y asíncrona de mensajes. Se admiten tres tipos de relaciones de comunicación:
* Maestro/Esclavo. En todo momento hay un único maestro que dirige las comunicaciones para una determinada funcionalidad; el resto de dispositivos se consideran esclavos. El maestro hace una petición y el esclavo direccionado responde (si es necesario). En CANopen se emplea en la administración de la red.
* Cliente/Servidor. Es una relación entre un solo cliente y un solo servidor. El cliente hace una petición que provoca que el servidor realice una determinada tarea. Tras finalizar la tarea, el servidor responde a la petición. En CANopen se utiliza para la parametrización de los dispositivos.
* Productor/Consumidor. Involucra a un productor y cero o más consumidores. Hay dos modelos diferentes:
** Modelo push. Servicio no confirmado solicitado y ofrecido por el productor. En CANopen se usa para transmisión de datos a alta velocidad.
** Modelo pull. Servicio confirmado solicitado por el consumidor. En CANopen se puede usar para petición de datos con confirmación de entrega. No es tan rápido como el push.