# CANopen

El CANopen és un protocol de comunicacions i perfil de dispositius per a sistemes incrustats sobre busos del tipus CANbus (Controller Area Network) funcionant en temps real. En termes del model OSI implementa la capa de xarxa i superiors. Els seus protocols de comunicacions donen suport a la gestió de xarxa, monitoratge de dispositius i comunicació entre nodes. Les capes més baixes solen ser de CANbus encara que també s'implementa sobre altres sistemes com ara EtherCAT.
Els estàndards CANopen estan centralitzats al web CAN in Automation.
Es fa servir en diversos camps d'aplicació com ara l'automoció, l'industrial (ascensors, escales mecàniques), el mèdic (ratjos X, sales d'operacions) o l'agrícola.
CANopen és una represa de la capa d'aplicació CAL desenvolupada per Philips Medical Systems reprèn els sistemes de gestió de bus i de missatges de la capa CAL tot definint el contingut dels missatges i integrant la noció de sistema distribuït. Un element mestre de la xarxa coordina els esclaus. La velocitat de transmissió pot atènyer 1 Mbit/s.
El perfil bàsic dels dispositius CANopen es defineix a l'estàndard CiA301 de CAN in Automation. Dispositius com ara mòduls d'Entrada/Sortida (estàndard CiA401) i controladors de moviment (estàndard CiA402) són especialitzacions del perfil bàsic mencionat.

## Model de dispositiu

Cada dispositiu CANopen ha d'implementar determinades característiques estàndard en el seu software de control.
* Una unitat de comunicació implementa el protocol de missatgeria amb altres nodes de la xarxa. La comunicació és d'un a molts. Els missatges que no siguin de control seran acceptats només si figuren en llistes inicials per tipus al seu diccionari, cercant a les llistes de missatges a rebre o a transmetre segons el bit RTR indiqui 'Lliurament' o 'Comanda'.
* L'engegada i posada a zero del dispositiu es controla amb una màquina d'estats finits. Ha d'incloure els estats Inicial, Pre-operacional, Operacional i Aturat. Les transicions entre estats es desencadenen mitjançant una ordre d'un objecte de comunicació del gestor de xarxa "Network Management" (NMT).
* El diccionari d'objectes parametritza tots els aspectes del dispositiu, permetent adreçar les variables, siguin de configuració o d'accés a l'entorn, per exemple dades de mesures.
* La part d'aplicació del dispositiu realitza la funció desitjada un cop la màquina d'estats està en situació Operacional. L'aplicació es configura per variables del directori d'objectes i les dades s'envien i es reben pels missatges de la capa de comunicació.

### Diccionari d'objectes

Els dispositius CANopen han de disposar d'un diccionari d'objectes que relaciona els elements a transmetre.
El diccionari consta d'entrades consistents en una descripció de l'Objecte i una llista d'elements adreçables (Valor) que contindrà un sol element en cas de variables simples o, en cas d'estructures, el nombre d'entrades de la llista seguit dels components.
Ens referirem a un element del diccionari pel parell (índex, subíndex). L'índex indica la posició (l'ordre, no l'adreça) de l'objecte en el diccionari. Un subíndex de 8 bits ens permetrà indicar la posició (en la llista d'elements de l'objecte al diccionari).
La descripció de l'objecte (adreçat per l'índex) incorpora els camps següents

   #### Nom
   #### Codi de l'objecte

       tipus codificat de l'objecte tal com NULL, DOMAIN, DEFTYPE, DEFSTRUCT, VAR, ARRAY, RECORD

   #### Nombre d'elements
   #### Tipus de l'element o de l'estructura

La descripció dels elements o valor de l'objecte (adreçats pel subíndex) incorpora

   #### Descripció de l'element
   #### Classe d'objecte (opcionalitat)

       un de {Mandatory, Optional}

   #### Accés

       un de {read/write, read-only, write-only, read only constant}.

   #### PDO Mapping (pot ser mapejat a un PDO ?)

       un de No, Opcional, Per defecte.

   #### Value Range (Tipus de dada)

       tal com UNSIGNED32, SIGNED16, ...

   #### Mandatory Range

       n/a o màxim i mínim.

   #### Valor per defecte
#### Zones del diccionari

    El diccionari d'objectes consta de zones amb índexs reservats per funcionalitat. Aquestes són zones de definició de dades i estructures, i zones d'objectes de comunicacions (anomenades perfils). Les més emprades són:
* Àrea de Tipus de dades simples
* Àrea de Tipus de dades complexos
* Àrea de Tipus de dades específics del fabricant
* Àrea de Tipus de dades simples específics del perfil
* Àrea de Tipus de dades complexos específics del perfil
* Àrea del Perfil de Comunicacions (ang: Communication Profile Area)
* Àrea del Perfil Específic del Fabricant (ang: Manufacturer Specific Profile Area)
* Àrea del Perfil de Dispositiu Estàndard (ang: Standardised Device Profile Area)

#### Valors inicials

    Els valors inicials del diccionari d'objectes es mantenen en un fitxer de configuració del dispositiu (DCF) en format Electronic Data Sheet que és un format de fitxer de text de tipus .Ini detallat a l'estàndard.

## Comunicació
### Objectes de Comunicació

CANbus, la capa física i d'enllaç sobre la qual s'estableix CANopen, només pot transmetre missatges curts consistents en un marc amb un identificador d'11 bits i un bit RTR (Remote Transmission Request) i de 0 a 8 Octets de dades. Els 11 bits de la identificació es componen d'un codi de funció (4 bits) i número de node emissor (7 bits). Això limita el nombre de dispositius a 127. Una extensió de l'estàndard CANbus 2.0B permet identificadors de 29 bits però és rarament utilitzada a la pràctica.
L'identificador d'11 bits del marc s'anomena COB-ID (Communication Object Identifier). En cas de col·lisió en la transmissió, el sistema d'arbitratge permet que es retransmeti primer i sense retards el missatge amb l'identificador més petit. Ja que els 4 bits del codi de funció són més significatius que el node, això permet donar preferència als missatges amb codi de funció més baix que reservarem a les funcions més crítiques. L'identificador del node esclau també permetrà establir prioritats entre els dispositius amb preferència a l'identificador més baix.
El contingut d'un marc de missatge estàndard (no l'ampliat) es veu a la següent taula:
| | Inici de trama | COB-ID | COB-ID | RTR | Control | Control | Control | Dades | CRC (dígits de comprovació) | Ack (rebut) | Fi de trama |
| | | Codi de Funció | 0:mestre / ID Node esclau | 1:Comanda 0:Lliurament | ID simple / ampliat | Reservat | Llargada de dades | | | | |
| Llargada | 1 bit | 4 bits | 7 bits | 1 bit | 1 bit | 1 bit | 4 bits | 0-8 octets | 16 bits | 2 bits | 7 bits |
L'estàndard reserva alguns COB_ID's per a la gestió de xarxa i transferències SDO. Alguns codis de funció COB-ID s'han de fer correspondre a funcionalitat estàndard després de la inicialització, però més tard poden ser mapejats a altres usos.

### Models de Comunicació

Hi ha diferents models:
* En una relació mestre/esclau un node és designat el mestre i envia ordres o demana dades als esclaus. El protocol NMT n'és un exemple.
* Una relació client/servidor s'estableix en el protocol SDO on el client demana dades del directori d'objectes del servidor i aquest les hi torna, o el client envia valors a canviar i el servidor li torna el resultat de l'operació.
* El model productor/consumidor es fa servir en el protocol Heartbeat i el protocol Node Guarding. En la modalitat push (cat: empènyer) el productor envia dades als consumidors sense que les demanin; en la modalitat pull (cat: estirar) els consumidors reben les dades prèvia requesta al productor.

### Protocols

Els protocols s'articulen a l'entorn del missatge principal, definit al Diccionari per un Objecte de Comunicacions que relaciona els objectes a transmetre.

#### Protocols NMT de gestió de xarxa (Network Management)

Els protocols de xarxa permeten enviar ordres de canvi d'estat de màquina (engegar i aturar dispositius), detectar l'engagada d'un sistema remot o condicions d'error.
El protocol de Control de mòduls l'utilitza el mestre NMT per canviar l'estat dels esclaus.
El protocol Batec de cor (ang. Heartbeat) es fa servir per monitorar els nodes de la xarxa i saber si estan vius.
El protocol d'Engegada (ang. Boot-Up). Un dispositiu esclau notifica al mestre NMT que ha assolit l'estat pre-operacional després de l'engegada inicial o de la recuperació d'una manca de corrent.

#### Protocol SDO - Objectes de Servei de Dades

El protocol SDO permet llegir i desar valors al diccionari d'objectes d'un dispositiu remot. El model de comunicació és el client/servidor.
El client demana llegir o desar un valor adreçat mitjançant el parell (índex, subíndex) al diccionari d'objectes i el servidor retorna el valor demanat o el resultat de l'operació.

#### Protocol PDO - Objectes de Procés de Dades

L'Objecte de procés de dades es fa servir per a transmetre les dades d'aplicació en temps real.
Aquest protocol permet incloure en un mateix missatge diversos camps del diccionari d'objectes, reduint així la sobrecàrrega de transmissió (bits de transport sobre bits de dades).
L'altre avantatge del PDO és que la lectura es fa a través d'un missatge síncron o asíncron que pot ser llegit simultàniament per tots els nodes de la xarxa.

#### Protocol SYNC - Objectes de Sincronització

L'objecte Sync és transmès periòdicament per l'emissor amb una freqüència configurable a la variable Communication Cycle Period.
Les aplicacions poden sincronitzar les trameses d'objectes PDO amb aquests missatges.
Hi pot haver petites desviacions en el temps d'entrega del missatge degut a una col·lisió amb un missatge més prioritari o degut a un missatge de dades precedent.

#### Protocol TIME - Objecte de registre horari (Time Stamp Object)

Permet enviar a les aplicacions dels dispositius un valor del tipus Hora del dia.
La transmissió d'aquest objecte segueix la modalitat push de productor/consumidor.

#### Protocol EMCY - Objecte d'Emergències

Un missatge d'emergència es dispara per un error intern d'un dispositiu. Això els fa idonis per a alertes d'interrupció.
Un missatge d'error es transmet un únic cop. Zero o més consumidors poden rebre el missatge.

### Inicialització

Mostra de traça de comunicacions entre un mestre i dos esclaus "transductors de pressió" als nodes 1 i 2.
| CAN ID | DATA LENGTH | DATA | Description |
| 0x0 | 2 | 1 0 | El Mestre posa el bus en mode operacional |
| 0x80 | 0 | | El Mestre envia un missatge SYNC que dispara en els dispositius la tramesa de dades. |
| 0x181 | 4 | CD 82 01 00 | Node amb ID 1 (CID-0x180), ha llegit una pressió de 0x0182CD(99021) Pascals |
| 0x182 | 4 | E5 83 01 00 | Node amb ID 2 (CID-0x180), ha llegit una pressió de 0x0183E5(99301) Pascals |

## Glossari d'acrònims CANopen
### PDO

    Objecte de Procés de dades.

### SDO

    Objecte de Servei de dades.

### COB-ID

    Identificador d'Objecte de Comunicacions CAN

### CAN ID

    Identificador de missatge CAN

### EDS

    Electronic Data Sheet (fitxer tipus .Ini)

### DCF

    Device Configuration File, EDS modificat amb les dades del node i velocitat de transmissió.

## Dispositius CANopen
### Mòduls d'Entrada/Sortida

Els dispositius d'Entrada/ Sortida solen tenir ports digitals o analògics per a sensors i actuadors. El perfil de dispositiu defineix els objectes de Comunicació, Configuració i Aplicació però també el comportament predeterminat després de l'Engegada i la Posada a zero.
En cas de problemes de comunicació seriosos (pèrdua de missatges) o fallada del dispositiu (ex.: curt-circuit a la sortida) el dispositiu passa a l'estat Pre-operacional i emet un missatge d'Emergència. En l'estat Pre-operacional els PDO estan inactius. Tanmateix el dispositiu es pot configurar xq en cas de fallada commuti a l'estat Aturat o romangui en el mateix estat.
Aquests dispositius indiquen en el Tipus de Dispositiu la funcionalitat suportada.
En el primer Transmit-PDO es maparan un màxim de 8x8 entrades digitals. El primer Receive-PDO contindrà un màxim de 8x8 sortides digitals. Aquests PDO's predefinits es reben o transmeten asíncronament. Opcionalment el dispositiu pot suportar altres modes de transmissió. En particular les entrades es poden transmetre síncronament a la recepció d'un missatge SYNC. Per estalviar amplada de banda les entrades amb menor variació es poden transmetre a la recepció d'un de cada enèsim missatge SYNC. Alguns dispositius suporten la transmissió PDO acíclica; en aquest cas el PDO només s'envia, a la recepció del SYNC, si el valor ha canviat.
Quan el dispositiu entra en estat operacional comença a transmetre tots els PDO's asíncrons.
El mapeig de les variables d'entrada / sortida als PDO és configurable.

### Dispositius de tracció i control de moviment

Aquest perfil defineix el comportament de servos, inversors de freqüència i motors pas a pas.
S'hi descriuen diversos modes operacionals.
* Mode Cap a Casa (ang. Homing) que descriu els mètodes per a trobar la posició de partida, punt de referència, o punt zero.
* Mode Perfil de Posició que defineix el posicionament del tractor. Velocitat, Posició i Acceleració poden ser limitats i també es poden perfilar moviments seguint una trajectoria.
* Mode Posició Interpolada que descriu la interpolació temporal dels eixos simples o la interpolació espacial dels eixos de coordenades.
* Mode Perfil de Velocitat es fa servir per controlar la velocitat independentment de la posició. Proporciona funcions de límit i generació de trajectòries.
* Mode Perfil de Torsió que defineix el control de torsió i paràmetres relacionats.
* Mode Velocitat és un mode simple emprat per molts convertidors de freqüència. Proporciona funcions de límit i rampa.

### Dispositius de mesura i controladors retroalimentats

Aquest perfil està dedicat a
* sensors analògics i actuadors que poden proporcionar a més entrada/sortida digital.
* controladors retroalimentats que recullen senyals de sensors i proveeixen valors als actuadors.
Els dispositius d'aquest perfil poden implementar algunes de les funcions següents:
* Entrada analògica
* Sortida Analògica
* Controlador retroalimentat
* Entrada digital
* Sortida digital
Aquest dispositiu pot suportar fins a 199 canals, cadascun dels quals pot admetre diverses o totes les funcions mencionades.
L'entrada analògica distingeix entre valor de camp i valor de procés. El valor de camp pot ser un valor no escalat d'una entrada del conversor A/D i el valor de procés seria el valor de camp convertit al domini de treball.
Per a la conversió del valor de camp al valor de procés es proveeixen funcions de
* transformació lineal, a partir de dos punts de calibratge.
* transformació no lineal, segons el tipus de sensor.

### Controladors de Lògica Programable

* Les variables de xarxa normalment es mapen a objectes PDO per a ser transmeses o rebudes.
* El perfil defineix alguns blocs de funció específics per a SDO, NMT i missatges d'emergència.

### Codificadors de posició lineal i rotativa

Aquest perfil cobreix codificadors incrementals i absoluts, lineals i rotatius.
A part la lectura de posició i velocitat el perfil defineix també acceleració i brusquedat.

### Dispositius hidràulics i pneumàtics

Aquest perfil descriu la funcionalitat de vàlvules proporcionals interconnectables, i bombes i transmissions hidroestàtiques.

## Referències

* 1 2 Web dels estàndards CANopen (anglès)
* ↑ Perfil CANopen per a dispositius genèrics d'Entrada / Sortida Arxivat 2016-08-18 a Wayback Machine. (anglès)
* ↑ Perfil CANopen per a dispositius de tracció i control de moviment Arxivat 2016-08-18 a Wayback Machine. (anglès)
* ↑ Perfil CANopen per a dispositius de mesura i controladors retroalimentats Arxivat 2016-08-18 a Wayback Machine. (anglès)
* ↑ Perfil CANopen per a Codificadors de posició lineal i rotativa Arxivat 2016-08-18 a Wayback Machine. (anglès)

## Enllaços externs

* Web dels estàndards CANopen (anglès)
* Documents i enllaços CANopen Arxivat 2013-06-04 a Wayback Machine. (anglès) <- Enllaç no actiu. Cal revisar
* CANFestival (anglès) implementació CANopen de codi obert de LOLITech (francès)