CANopen 是一个基于 CAN(控制局域网)串行总线系统和 CAL(CAN 应用层)的高层协议。CANopen 通讯协议 CiA DS-301 包括周期和事件驱动型通讯,不仅能够将总线负载减少到最低限度,而且还能确保极短的反应时间。它可以在较低的波特率下实现较高的通讯性能,从而减少了电磁兼容性问题,并降低了电缆成本。
CANopen 所用的物理介质是符合 ISO 11898 标准,采用分驱动机制和公共反馈的双线总线。总线的最大长度取决于通讯速度,具体规定如下:
从理论上来说,最多可以有 127 个节点。不过,在实际应用中,最大节点数量取决于所用 CAN 收发器的性能。CAN 总线线路必须用在 CAN-L 和 CAN-H 线之间每端连接的 120 欧姆(1%,1/4W)电阻来终接,如下所示。
总线电缆选用有两对双绞线的带屏蔽层电缆:一对双绞线分别接 CAN-L 和 CAN-H,另外一对双绞线直接接GND。
CANopen 的核心概念是设备对象字典(OD:Object Dictionary),在其它现场总线(Profibus,Interbus-S)系统中也使用这种设备描述形式。CANopen 通讯通过对象字典(OD)能够访问设备的所有参数。
CAN 标识符分配表
注意:
1、 PDO/SDO 的发送/接受是由(slave)CAN 节点观察的。
2、 一般的器件的 CANopen 支持 4 个发送 PDO,4 个接受 PDO。
服务数据对象SDO
SDO 用来访问一个设备的对象字典。访问者被称作客户 (client),对象字典被访问且提供所请求服务的 CANopen 设备被称作服务器(server)。客户的 CAN 报文和服务器的应答 CAN 报文总是包含 8 字节数据(尽管不是所有的数据字节都一定有意义)。一个客户的请求一定有来自服务器的应答。
过程数据对象 PDO
PDO 用来传输实时数据, 数据从一个生产者传到一个或多个消费者。数据传送限制在 1 到 8 个字节。PDO 通讯没有协议约束(意味着数据内容已预先定义),因此消费者可以在很短的时间内处理完接受到的数据。PDO 数据内容只由它的CAN ID 定义,假定生产者和消费者知道这个 PDO 的数据内容。
PDO 消息的内容是预定义的(或者在网络启动时配置的),映射应用对象到 PDO 中是在设备对象字典中描述的。如果设备(生产者和消费者)支持动态映射,那么使用 SDO 报文可以配置 PDO 映射参数。PDO映射必须遵守以下 2 个规则:
1、 每个 PDO 最多可映射 4 个对象;
2、 每个 PDO 的长度必须不超过 64 位。
PDO 映射流程:
1、 设置 PDO 对应映射参数(如 1600 h或 1A00 h)子索引 0 的内容为 0;
2、 修改 PDO 对应映射参数(如 1600 h或 1A00 h)子索引 1~4 的内容,映射数据;
3、 设置 PDO 对应映射参数(如 1600 h或 1A00 h)子索引 0 的内容为合法的数字(该 PDO 映射的对象数)。
4、 PDO 映射完成。
SYNC 报文
同步对象用于控制数据在网络设备间的同步传输,例如同步启动多个轴。同步报文的传输是基于生产者—消费者模型的,所有支持同步 PDO 的节点都可以作为消费者(同时)接收到此报文,并使用该对象与其他节点进行同步。
一般应用方式为 SYNC 主节点定时发送 SYNC 对象,SYNC 从节点收到后同步执行任务。
CANopen建议用一个最高优先级的COB-ID以保证同步信号正常传送。SYNC报文可以不传送数据以使报文尽可能短。
Emergency 报文
设备发生报警时,CANopen 会启动一条 Emergency 报文,告知消费者当前设备类型以及错误代码。