CANopen

title: 设备模型.
content: 以下是所有CANopen设备都要具备的功能:
title: 物件字典.
content: CANopen设备都需要具备物件字典,用来设定设备组态及进行非即时的通讯。物件字典的entry定义如下:  在CANopen标准中定义了物件字典中的基本资料型态,包括逻辑值、整数及浮点数。也定义了复合物件:如阵列、记录及字串。复合物件用一个8位元的数值作为其子索引(subindex)。记录或阵列中子索引0的位置记录此资料结构的元素个数,资料型态为UNSIGNED8。  例如在CiA301标准中,设备通讯的参数放在索引范围0x1000 - 0x1FFF(通讯行规区)。此区域的前几项如下:  若配合适当的工具,可以用编辑电子资料表(electronic data sheet, EDS)档案的方式规划一个设备,并且将变量的数值上传到设备中。EDS档案的格式通常会是INI档。
title: 通讯.
title: 通讯物件.
content: CANopen的物理层CANbus每次传送的资料量不大,其中包括11位元的ID、远端传输请求(RTR)位元及大小不超过8字节的资料。CANopen将CANbus 11位元的ID分为4位元的功能码及7位元的CANopen节点ID。7位元的ID共有128种不同的组合,其中ID 0不使用,因此一个CANopen网络上最多允许127台设备。CANbus在CAN 2.0 B规格中允许29位元的ID,因此若配合CAN 2.0 B使用,CANopen网络上可以超过127台设备,不过在实际运用中,大多数的CANopen网络上设备数量均低于此数值。  CANopen将CANbus的11位元ID称为通讯物件ID(COB-ID)。当传输资料出现碰撞时,CANbus的仲裁机制会使COB-ID最小的讯息继续传送,不用等待或重传。COB-ID的前4个位元是CANopen的功能码,因此数值小的功能码表示对应的功能重要,允许的延迟时间较短。  以下是一个标准的CANopen页框(frame):  在CANopen标准中,部分COB-ID被保留作网络管理及SDO通讯用。而在设备初始化后,有些功能码和COB-ID会对映到标准的功能,不过后续仍可以规划为其他用途。
title: 通讯模型.
content: CANopen设备间的通讯可分为以下三种通讯模型。
title: 协议.
title: NMT协议.
content: NMT(网络管理, Network management)协议是用来发布(设备内部)状态机的状态变更命令(如启动设备或停止设备)、以及监测远端设备启动及故障情形。  NMT master使用的模组控制协定可变更设备的状态。其COB-ID为0,其功能码及节点ID均为0,因此网络上的所有节点均会处理这个讯息。在此讯息的资料部分会有此讯息实际针对节点的ID,此ID也可为0,表示所有节点都要变更为指定的状态。  心跳协定(Heartbeat protocol)是用心跳机制来监控网络中的节点及确认其正常工作。心跳讯息的生产者(一般是slave设备)周期性的送出功能码1110、ID为本身节点ID的讯息,讯息的资料部分有一个表示节点状态的位元。而心跳讯息的消费者负责接收上述资料,若在指定时间(于设备的物件字典中定义)内,消费者均未收到讯息,可采取相关行动(例如显示错误或重置该设备)。  其格式为:  CANopen设备需要在bootup时自动从Initializing状态切换至Pre-operational状态,设备会在切换完成后送出一个心跳讯息,这就是心跳协定。  有一种pull model的NMT协定,称作节点监控(Node guarding)协定,也可以作从机的监控。
title: 服务资料物件(SDO)协定.
content: 服务资料物件(SDO)可用来存取远端节点的物件字典,读取或设定其中的资料。提供物件字典的节点称为SDO server,存取物件字典的节点称为SDO client。SDO通讯一定由SDO client开始,并提供初始化相关的参数。  在CANopen的术语中,上传是指由SDO server中读取资料,而下载是指设定SDO server的资料。  由于物件字典中的资料长度可能超过8个字节,无法只用一个CAN页框传输,SDO也支援长讯息的分割(segmentation)和合并(desegmentation)。这样的物件有二种:SDO下载/上传(SDO download/upload)及SDO区块下载/上传(SDO Block download/upload)。CANopen协定较新版本支援SDO区块传输,可以允许传输大量的资料,且传输的overhead可以较低。  负责处理SDO资料传输的COB ID可在物件字典中设定。在物件字典的索引0x1200至0x127F可设定SDO server的COB ID,最多可设定到127个。而SDO client可以在物件字典的索引0x1280至0x12FF中设定。不过预定义连结(pre-defined connection set)定义在开机后(Pre-operational状态)可用来设定设备组态的SDO。接收用的COB ID为0x600 +节点ID,而传送用的COB为0x580 +节点ID。  以下用SDO下载来说明SDO的协定,SDO client在要启始下载时,会送出CAN讯息,其ID为接收端SDO channel的COB ID,而CAN页框的资料字段内容如下:
title: 进程数据对象(PDO)协定.
content: 进程数据对象(PDO)协定可用来在许多节点之间交换即时的资料。可透过一个PDO,传送最多8字节(64位元)资料给一设备,或由一设备接收最多8字节(64位元)的资料。一个PDO可以由物件字典中几个不同索引的资料组成,规划方式则是透过物件字典中对应PDO mapping及PDO参数的索引。  PDO分为两种:传送用的TPDO及接收用的RPDO。一个节点的TPDO是将资料由此节点传输到其他节点,而RPDO则是接收由其他节点传输的资料。一个节点分别有4个TPDO及4个RPDO。  PDO可以用同步或异步的方式传送:同步的PDO是由SYNC讯息触发,而异步的PDO是由节点内部的条件或其他外部条件触发。例如若一个节点规划为允许接受其他节点产生的TPDO请求,则可以由其他节点送出一个没有资料但有设定RTR位元的TPDO(TPDO请求),使该节点送出需求的资料。  借由RPDO也可以使两个或两个以上的设备同时启动。只要将其RPDO对应到相同的TPDO即可。
title: 同步(SYNC)协定.
content: 同步协定使用生产者/消费者模型。同步生产者(Sync-Producer)会定时产生同步信号供同步消费者(Sync-Consumer)使用。当同步消费者收到信号,即可以进行已规划好的同步工作。  同步信号会定时产生,若有PDO是由同步信号引发,透过PDO传送时间及同步信号传送周期之间的调整,可以使传感器定期的取様,而致动器也可以根据最新的输入信号产生对应的输出。  在物件字典中,同步物件的索引为0x1005,可透过编辑此物件启动同步协定。
title: 时间标记物件(TIME)协定.
content: 一般而言,时间标记物件的内容是从1984年1月1日午夜之后到现在之间经过的时间,单位为毫秒。为一个48位元(6字节)的数值。  不过有些应用会要求时间要非常精确,这种情形会需要精准的同步,尤其是在大型网络,通讯速度受限时更是如此。此时需要将各设备的时钟同步,精准度要到毫秒的等级。这个要求可透过高分辨率的同步信号达成,在同步信号中也包括了另一种时间标记,可供各设备调整时钟用。  同步信号中的时间标记型态为unsigned32,单位为1毫秒,因此时间标记会在每72分钟归零重新计数。
title: 初始化.
content: 以下是在master初始化2个压力传感器(ID分别为1和2)中,通讯的资料。

Summary: CANopen是一种架构在控制器局域网络(Controller Area Network, CAN)上的高层通讯协定,包括通讯子协定及设备子协定常在嵌入式系统中使用,也是工业控制常用到的一种现场总线。

CANopen: CANopen is a communication protocol and device profile specification for embedded systems used in automation. In terms of the OSI model, CANopen implements the layers above and including the network layer. The CANopen standard consists of an addressing scheme, several small communication protocols and an application layer defined by a device profile. The communication protocols have support for network management, device monitoring and communication between nodes, including a simple transport layer for message segmentation/desegmentation. The lower level protocol implementing the data link and physical layers is usually Controller Area Network (CAN), although devices using some other means of communication (such as Ethernet Powerlink, EtherCAT) can also implement the CANopen device profile.