5. Qu’est-ce que le CANopen?#
CANopen est un protocole de communication (couche supérieur) basé sur le réseau bus CAN. La norme CANopen permet l’interopérabilité entre les dispositifs (nœuds) et fournit des méthodes standard pour configurer les appareils, y compris après leur installation.
Aujourd’hui, CANopen est largement utilisé dans la commande de moteurs (moteurs pas à pas/servomoteurs) et dans un large éventail d’autres applications, notamment l’automobile.
Le réseau CANOpen est constitué de nœuds (équipements) reliés entre eux par un même bus CAN terminé par deux résistances de 120 Ohm.
Trois modèles de réseau sont possibles :
Maître / Esclave
Client / Serveur
Producteur / Consommateur
la norme CiA 301 stipule que CANopen est basé sur des ID CAN de 11 bits.
5.1. Fonctionnement général#
5.1.1. Liaison physique#
Le format standard CANopen ne spécifie pas de connecteurs particulier. Toutefois les connecteurs DB9 sont couramment employés suivant le câblage illustré ci-dessous:
5.1.2. La trame CANopen#
Les messages transmis sur le bus CAN obéissent à une trame détaillée ci-dessous:
La trame est composée de 11 bits en tête appelé le Communication Object Identifier COB-ID, lui-même composé de deux parties:
le code de fonction Code Function : 4 bits reflètent la « fonctionnalité » du message
ID du nœud : 7 bits reflètent l’ID (identifiant) du nœud (entre 1 et 127). 127 équipements maximum peuvent donc être reliés sur le bas CAN.
Il existe un ensemble de “Code function” prédéfinis regroupés ci-après.
5.1.3. En résumé#
Le standard CANOpen possède 7 protocoles de communication :
Network Management (NMT) : permet de contrôler l’état des différents appareils connectés sur le bus CANOpen,
Synchronization (SYNC) : permet de synchroniser les différents appareils et notamment l’échange de données via PDO,
Emergency (EMCY) : permet à un appareil de signaler une erreur fatale aux autres appareils du réseau,
Timestamp (TIME) : message PDO permettant de transmettre l’information d’heures et de dates d’un appareil aux autres,
Process Data Object (PDO) : permet de transmettre des données temps-réel d’un appareil à l’autre de manière synchrone (SYNC) ou sur événement,
Service Data Object (SDO) : permet d’accéder et de modifier les valeurs du dictionnaire d’objets (OD) d’un appareil sur le réseau,
Node Monitoring (Heartbeat) : permet à chaque appareil du réseau d’émettre périodiquement un message de vie et de confirmer l’état de l’appareil (NMT)
Ces messages sont identifiés par leur ID :
Object | Function Code | Décimal | Héxadécimal | paramètres de communication |
---|---|---|---|---|
NMT | 0000 | 0 | 0 | - |
SYNC | 0001 | 128 | 80 | (1005) |
TIME | 0010 | 256 | 100 | non supporté |
Object | Function Code | Décimal | Héxadécimal | paramètres de communication | priorité |
---|---|---|---|---|---|
EMERGENCY | 0001 | 129..255 | 81..FF | — | high |
TxPDO 1 | 0011 | 385..511 | 181..1FF | 1800 | - |
RxPDO 1 | 0100 | 513..639 | 201..27F | 1400 | - |
TxPDO 2 | 0101 | 641..767 | 281..2FF | 1801 | - |
RxPDO 2 | 0110 | 769..895 | 301..37F | 1401 | - |
TxPDO 3 | 0111 | 897..1023 | 381..3FF | 1802 | - |
RxPDO 3 | 1000 | 1025..1151 | 401..47F | 1402 | - |
TxPDO 4 | 1001 | 1153..1279 | 481..4FF | 1803 | - |
RxPDO 4 | 1010 | 1281..1407 | 501..57F | 1403 | - |
SDO (tx*) | 1011 | 1409..1535 | 581..5FF | - | - |
SDO (rx*) | 1100 | 1537..1663 | 601..67F | - | - |
HEARTBEAT | 1110 | 1793..1919 | 701..77F | (100E) | low |
Function Code | Définition |
---|---|
NMT (Network Management Objects) |
Les objets NMT suivent le protocole master/slave. |
SYNC (Synchronization Object) |
Le message SYNC suit le protocole producer/consumer. |
TIME (Timestamp Object) |
Le message TIME suit le protocole producer/consumer et fournit une horloge à distribuer à l'échelle du réseau. |
EMCY (Emergency Object) |
L'objet emergency suit le protocole producer/consumer et est utilisé lorsqu'un dispositif subit une erreur fatale (par exemple, une défaillance de capteur), ce qui lui permet de l'indiquer au reste du réseau. Le nœud concerné envoie un seul message EMCY avec COB-ID 0x80 + ID du nœud (par exemple 0x85 pour le nœud 5). Les octets de données contiennent des informations sur l'erreur, un registre d'erreur de 1 octet et jusqu'à 5 octets d'informations d'erreur spécifiques au fabricant. |
HEARTBEAT (Heartbeat Object) |
Le message de battement de cœur suit le protocole producer/consumer. Les esclaves CANopen peuvent diffuser périodiquement un message de battement de cœur (par exemple toutes les 100 ms) avec COB-ID 0x700 + ID du nœud (c'est-à-dire 0x705 pour le nœud 5). La charge utile contient l'état du nœud dans le premier octet de données (démarrage, préopérationnel, opérationnel, arrêté). Cela permet à un consommateur (par exemple le maître) de réagir rapidement si un nœud ne diffuse pas son battement de cœur dans un délai donné. |
SDO (Service Data Object) |
Configurer le réseau CANOpen. |
PDO (Process Data Object) |
Exploiter le réseau CANOpen. |

Certains protocoles sont désactivés suivant l’état de la machine d’état de l’appareil :

5.1.4. Object Dictionary (OD)#
Le dictionnaire d’objet d’un appareil contient l’ensemble des paramètres d’un appareil. Ces paramètres sont accessibles via une adresse constituée d’un index (16 bits) et d’un sous-index (8 bits). Ce dictionnaire prend la forme d’un fichier Electronic Data Sheet (EDS), spécifique à chaque appareil, qui permet à l’utilisateur d’identifier les paramètres et leur adresse.

5.1.5. Protocole SDO#
Le protocole SDO sert principalement à configurer les appareils CANOpen en modifiant les entrées du dictionnaire d’objet. Cette étape se fait généralement lorsque l’appareil est en mode pré-opérationnel. Les messages SDO utilisent les identifiants suivants (ID) en se positionnant du point de vue de l’appareil :

Le message est constitué du COB-ID suivi de 64 bits :
8 bits de commande :
0x40 | Lecture d’une entré de l’OD |
0x23 | Écriture de 32 bits (SDO receive) |
0x27 | Écriture de 24 bits (SDO receive) |
0x2B | Écriture de 16 bits (SDO receive) |
0x2F | Écriture de 8 bits (SDO receive) |
0x43 | Réponse de l’appareil cible sur 32 bits (SDO transmit) |
0x47 | Réponse de l’appareil cible sur 24 bits (SDO transmit) |
0x4B | Réponse de l’appareil cible sur 16 bits (SDO transmit) |
0x4F | Réponse de l’appareil cible sur 8 bits (SDO transmit) |
16 bits d’index et 8 bits de sous-index : adresse du paramètre dans l’OD
32 bits de données : les données non utilisées sont inactivées,l’écriture est réalisée en « little endian » (le dernier bit transmis est le premier lu)
5.1.6. Protocole PDO#
Le protocole PDO possède trois modes de configurations :
Static PDO : la configuration des PDO est fixée par le fabricant et non modifiable,
Variable PDO : la configuration est modifiable en mode pré-opérationnel,
Dynamic PDO : la configuration est modifiable en mode pré-opérationnel et opérationnel.
Chaque message PDO est configuré par deux entrées : ses paramètres de communication et ses paramètres de mapping (configuration). On définit deux catégories de PDO : les RPDO pour les messages reçus et les TPDO pour les messages envoyés.
Les messages PDO sont configurés sur 4 listes d’entrée du OD :
0x1400 à 0x15FF : paramètres de communication pour les RPDO,
0x1600 à 0x17FF : paramètres de mapping pour les RPDO,
0x1800 à 0x19FF : paramètres de communication pour les TPDO,
0x1A00 à 0x1BFF : paramètres de mapping pour les TPDO.
Les paramètres de communication sont configurés par les sous-index :

Le type permet de spécifier les détails de la communication :

Lorsque l’utilisateur souhaite modifier les paramètres d’un PDO, plusieurs étapes doivent être respectées :
Invalider le PDO en écrivant 1 dans le 32ème bit sur l’adresse de communication choisie en sous-index 1 (ex : 0x1802sub1),
Invalider le PDO mapping en écrivant 0x00 à l’adresse de mapping correspondante en sous-index 0 (ex : 0x1A02sub0),
Ajuster les objets souhaités dans le mapping correspondant (ex : 0x1A02sub1…40),
Rétablir le PDO mapping en indiquant le nombre d’objet dans le mapping (ex : 0x1A00sub0),
Rétablir le PDO en écrivant 0 dans le 32ème bit sur l’adresse de communication correspondant en sous-index 1.