CANopen est un protocole traitant de la couche réseau (couche 3 du modèle OSI) à la couche application (couche 7 du modèle OSI), originellement pour les Bus de terrain du type CAN (Controller area network) fonctionnant en temps réel. D'autres bus intègrent depuis peu CANopen, tel EtherCAT ou Powerlink démontrant ainsi l'intérêt de l'industrie pour ce mode de communication. Il est utilisé dans de nombreux domaines : automobile, agricole, industriel (ascenseurs, escaliers roulants, motion control) et médical (rayons X, salles d'opérations). Ce bus de terrain est connu pour être une solution de communication économique et efficace. CANopen est une reprise de la couche applicative CAL développée par Philips Medical Systems ; il reprend les services et protocoles de gestion de bus et de messages de la couche CAL tout en définissant le contenu des messages et en intégrant la notion de système distribué. Un élément maître du réseau coordonne les éléments esclaves. La vitesse de transmission peut atteindre 1 Mbit/s. Un dictionnaire d'objet définit, pour chacune des entrées/sorties d'un périphérique CANopen (appelé nœud), l'information sur le format de la donnée ainsi que sur le moyen d'y accéder. Chaque entrée du dictionnaire possède un index unique ainsi qu'une liste de sous-index. On accède à un objet grâce au couple [index, sub-index]. Une des principales nouveautés de CANopen est la notion de dictionnaire d'objets (Object Dictionary ou OD) déjà présente dans d'autres bus de terrain comme Profibus. Pour chaque nœud CANopen présent sur le bus il existe un OD généralement sous forme de fichier texte au format EDS (Electronic Data Sheet) permettant de connaître l'ensemble des entrées/sorties d'un nœud. Il est possible de créer à partir d'un fichier au format EDS un autre fichier représentant une configuration donnée d'un nœud pour un bus. Ce fichier, très similaire à l’EDS, est alors appelé DCF (Device Configuration File). En faisant une analogie avec la programmation orientée objet (POO) on peut dire que l’EDS est la classe tandis que le DCF représente une instance de cette classe.