{
"cells": [
{
"cell_type": "markdown",
"id": "c842e127",
"metadata": {},
"source": [
"# Qu'est-ce que le CANopen? #\n",
"\n",
"CANopen est un protocole de communication (couche supérieur) basé sur le réseau bus CAN.\n",
"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.\n",
"\n",
"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.\n",
"\n",
"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.\n",
"\n",
"Trois modèles de réseau sont possibles :\n",
"- Maître / Esclave\n",
"- Client / Serveur\n",
"- Producteur / Consommateur\n",
"\n",
"la norme CiA 301 stipule que CANopen est basé sur des ID CAN de 11 bits."
]
},
{
"cell_type": "markdown",
"id": "731f3a1a",
"metadata": {},
"source": [
"## Fonctionnement général ##\n",
"### Liaison physique ###\n",
"\n",
"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:"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2d35e527",
"metadata": {
"tags": [
"remove-input"
]
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from IPython.display import HTML\n",
"HTML('
"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from IPython.display import HTML\n",
"HTML('
\n",
"
Object | \n", "Function Code | \n", "Décimal | \n", "Héxadécimal | \n", "paramètres de communication | \n", "
---|---|---|---|---|
NMT | \n", "0000 | \n", "0 | \n", "0 | \n", "- | \n", "
SYNC | \n", "0001 | \n", "128 | \n", "80 | \n", "(1005) | \n", "
TIME | \n", "0010 | \n", "256 | \n", "100 | \n", "non supporté | \n", "
Object | \n", "Function Code | \n", "Décimal | \n", "Héxadécimal | \n", "paramètres de communication | \n", "priorité | \n", "
---|---|---|---|---|---|
EMERGENCY | \n", "0001 | \n", "129..255 | \n", "81..FF | \n", "— | \n", "high | \n", "
TxPDO 1 | \n", "0011 | \n", "385..511 | \n", "181..1FF | \n", "1800 | \n", "- | \n", "
RxPDO 1 | \n", "0100 | \n", "513..639 | \n", "201..27F | \n", "1400 | \n", "- | \n", "
TxPDO 2 | \n", "0101 | \n", "641..767 | \n", "281..2FF | \n", "1801 | \n", "- | \n", "
RxPDO 2 | \n", "0110 | \n", "769..895 | \n", "301..37F | \n", "1401 | \n", "- | \n", "
TxPDO 3 | \n", "0111 | \n", "897..1023 | \n", "381..3FF | \n", "1802 | \n", "- | \n", "
RxPDO 3 | \n", "1000 | \n", "1025..1151 | \n", "401..47F | \n", "1402 | \n", "- | \n", "
TxPDO 4 | \n", "1001 | \n", "1153..1279 | \n", "481..4FF | \n", "1803 | \n", "- | \n", "
RxPDO 4 | \n", "1010 | \n", "1281..1407 | \n", "501..57F | \n", "1403 | \n", "- | \n", "
SDO (tx*) | \n", "1011 | \n", "1409..1535 | \n", "581..5FF | \n", "- | \n", "- | \n", "
SDO (rx*) | \n", "1100 | \n", "1537..1663 | \n", "601..67F | \n", "- | \n", "- | \n", "
HEARTBEAT | \n", "1110 | \n", "1793..1919 | \n", "701..77F | \n", "(100E) | \n", "low | \n", "
Object | \n", "Function Code | \n", "Décimal | \n", "Héxadécimal | \n", "paramètres de communication | \n", "priorité | \n", "
---|---|---|---|---|---|
EMERGENCY | \n", "0001 | \n", "129..255 | \n", "81..FF | \n", "— | \n", "high | \n", "
TxPDO 1 | \n", "0011 | \n", "385..511 | \n", "181..1FF | \n", "1800 | \n", "- | \n", "
RxPDO 1 | \n", "0100 | \n", "513..639 | \n", "201..27F | \n", "1400 | \n", "- | \n", "
TxPDO 2 | \n", "0101 | \n", "641..767 | \n", "281..2FF | \n", "1801 | \n", "- | \n", "
RxPDO 2 | \n", "0110 | \n", "769..895 | \n", "301..37F | \n", "1401 | \n", "- | \n", "
TxPDO 3 | \n", "0111 | \n", "897..1023 | \n", "381..3FF | \n", "1802 | \n", "- | \n", "
RxPDO 3 | \n", "1000 | \n", "1025..1151 | \n", "401..47F | \n", "1402 | \n", "- | \n", "
TxPDO 4 | \n", "1001 | \n", "1153..1279 | \n", "481..4FF | \n", "1803 | \n", "- | \n", "
RxPDO 4 | \n", "1010 | \n", "1281..1407 | \n", "501..57F | \n", "1403 | \n", "- | \n", "
SDO (tx*) | \n", "1011 | \n", "1409..1535 | \n", "581..5FF | \n", "- | \n", "- | \n", "
SDO (rx*) | \n", "1100 | \n", "1537..1663 | \n", "601..67F | \n", "- | \n", "- | \n", "
HEARTBEAT | \n", "1110 | \n", "1793..1919 | \n", "701..77F | \n", "(100E) | \n", "low | \n", "
Function Code | \n", "Définition | \n", "
---|---|
NMT (Network Management Objects) | \n",
" \n",
" Les objets NMT suivent le protocole master/slave. | \n",
"
SYNC (Synchronization Object) | \n",
" \n",
" Le message SYNC suit le protocole producer/consumer. | \n",
"
TIME (Timestamp Object) | \n",
" \n",
" Le message TIME suit le protocole producer/consumer et fournit une horloge à distribuer à l'échelle du réseau. | \n",
"
EMCY (Emergency Object) | \n",
" \n",
" 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. \n", " | \n",
"
HEARTBEAT (Heartbeat Object) | \n",
" \n",
" 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é. \n", " | \n",
"
SDO (Service Data Object) | \n",
" \n",
" Configurer le réseau CANOpen. | \n",
"
PDO (Process Data Object) | \n",
" \n",
" Exploiter le réseau CANOpen. | \n",
"
Function Code | \n", "Définition | \n", "
---|---|
NMT (Network Management Objects) | \n",
" \n",
" Les objets NMT suivent le protocole master/slave. | \n",
"
SYNC (Synchronization Object) | \n",
" \n",
" Le message SYNC suit le protocole producer/consumer. | \n",
"
TIME (Timestamp Object) | \n",
" \n",
" Le message TIME suit le protocole producer/consumer et fournit une horloge à distribuer à l'échelle du réseau. | \n",
"
EMCY (Emergency Object) | \n",
" \n",
" 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. \n", " | \n",
"
HEARTBEAT (Heartbeat Object) | \n",
" \n",
" 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é. \n", " | \n",
"
SDO (Service Data Object) | \n",
" \n",
" Configurer le réseau CANOpen. | \n",
"
PDO (Process Data Object) | \n",
" \n",
" Exploiter le réseau CANOpen. | \n",
"
\n", " 0x40 | \n", "\n", " Lecture d’une entré de l’OD | \n", "
\n", " 0x23 | \n", "\n", " Écriture de 32 bits (SDO receive) | \n", "
\n", " 0x27 | \n", "\n", " Écriture de 24 bits (SDO receive) | \n", "
\n", " 0x2B | \n", "\n", " Écriture de 16 bits (SDO receive) | \n", "
\n", " 0x2F | \n", "\n", " Écriture de 8 bits (SDO receive) | \n", "
\n", " 0x43 | \n", "\n", " Réponse de l’appareil cible sur 32 bits (SDO transmit) | \n", "
\n", " 0x47 | \n", "\n", " Réponse de l’appareil cible sur 24 bits (SDO transmit) | \n", "
\n", " 0x4B | \n", "\n", " Réponse de l’appareil cible sur 16 bits (SDO transmit) | \n", "
\n", " 0x4F | \n", "\n", " Réponse de l’appareil cible sur 8 bits (SDO transmit) | \n", "