当前位置: 首页 >应用方案 >技术应用 >

CANopen协议栈介绍

CANopen是一种架构在控制局域网络(CAN总线)上的高层通信协议,包括通信子协议及设备子协议,常在嵌入式系统中使用,也是工业控制常用到的一种工业现场总线。我们前文介绍了CANopen协议详解,本文主要介绍CANopen协议栈概述简介。

一、CANopen 协议概述

CANopen协议是一个基于CAN(Controller Area Network)总线的高层通信协议,由CiA (CAN in Automation) 国际用户和制造商组织维护和标准化。CANopen协议的核心目标是定义一个应用于嵌入式系统的网络层和应用层规范,确保不同制造商生产的设备能够在同一个CAN总线上实现无缝互联和互操作。

1、CANopen协议核心优势

CANopen最显著的优势在于其设备互操作性。只要不同厂商的设备都符合CANopen标准,它们就可以在同一个网络中协同工作,无需进行大量定制开发,极大地简化了系统集成、降低了开发成本和时间。

2、CANopen协议应用领域

CANopen协议因其高可靠性、实时性、灵活性和标准化特性,被广泛应用于以下领域:

• 运动控制:精确控制电机、驱动器等;

• 工业自动化:PLC、传感器、执行器、HMI 等;

• 机器人技术:多轴机器人控制;

• 医疗设备:诊断和治疗设备;

• 楼宇自动化:HVAC 系统、照明控制;

• 轨道交通:列车控制系统;

• 船舶电子设备:导航和控制系统;

二、CANopen 核心概念

1、对象字典(Object Dictionary, OD)

对象字典是CANopen 设备的核心,可比喻为设备的 "大脑" 或 "配置文件"。它是一个标准化且结构化的参数存储区,包含了设备的所有可配置参数、状态信息、诊断数据以及通信设置等。

1.1、核心作用

• 参数配置:允许外部设备(如NMT 主站)通过网络修改设备的运行参数;

• 状态读取:提供设备当前状态和测量值的统一访问接口;

• 功能定义:定义了设备支持的功能和能力;

1.2、结构化存储

对象字典中的每个条目都通过一个唯一的16 位索引(Index)和一个可选的 8 位子索引(Sub-index)进行标识:

• 索引:类似于主地址,用于标识一个主要的功能或参数组;

• 子索引:类似于副地址,用于标识主参数组中的具体子参数或数组元素;

• 示例:0x1000:00 表示设备类型,0x1017:00 表示心跳周期;

1.3、内容分类

• 标准定义条目:协议为通用功能预留了特定的索引范围,例如0x1000到0x1FFF通常用于通信参数和设备通用信息;

• 应用配置文件定义条目:针对特定设备类型(如CiA 401通用 I/O、CiA 402运动控制),定义了标准化的对象字典条目;

• 厂商自定义扩展条目:厂商可以在协议预留的自定义范围内(通常是0x2000到0x5FFF)添加特有的功能和参数;

1.4、访问方式

对象字典中的条目通常通过SDO (Service Data Object) 协议进行读写。SDO提供了可靠的、请求和响应式的通信机制,非常适合用于非实时性的参数配置和诊断。

2、通信对象(Communication Objects)

CANopen协议定义了多种不同类型的通信对象(COB),每种对象都有其特定的功能和通信模型,并由其COB-ID决定其类型和优先级。

• NMT (Network Management):网络管理是CANopen网络的 "大脑",负责控制网络中所有设备的运行状态(启动、停止、复位等),采用主从模式,通常有一个 NMT 主站管理所有从站,NMT 消息具有最高优先级。

• Heartbeat (心跳):心跳机制用于周期性地报告设备的当前NMT 状态,允许网络中的其他设备(特别是 NMT 主站)监控该设备的在线状态和健康状况。

• SDO (Service Data Object):服务数据对象用于传输非实时、但需要可靠传输的配置、诊断和参数数据,采用请求/ 响应的服务模型,确保数据传输的完整性和正确性。

• PDO (Process Data Object):过程数据对象用于传输实时、高优先级、小批量(通常1-8 字节)的过程数据,采用广播 / 多播通信模式,不进行握手确认,实现快速、高效的数据交换。

• SYNC (Synchronous Object):同步对象是一个周期性的广播消息,用于协调网络中多个设备的周期性动作,确保多设备同步执行任务。

• EMCY (Emergency Object):紧急事件对象用于报告设备内部发生的故障或错误,当设备检测到内部错误时立即发送,具有高优先级,允许相关节点及时响应处理异常。

3、节点ID(Node-ID)

Node-ID是CANopen网络中每个设备的唯一标识符:

• 唯一性:在一个CANopen网络中,每个设备(从站)都必须分配一个唯一的7位Node-ID,范围从1到127。

• NMT 广播地址:Node-ID 0 是特殊值,用于NMT主站发送广播命令。

• 配置方式:

◦ 硬件配置:通过DIP开关、跳线帽等在设备上直接设置;

◦ 软件配置:在设备启动时通过SDO配置;

◦ LSS (Layer Setting Services):CANopen标准定义的底层服务,允许主站动态分配和配置 Node-ID。

4、COB-ID(Communication Object Identifier)

COB-ID 是 CANopen 协议中用于标识 CAN 帧类型和优先级的 11 位 CAN 帧 ID,遵循 CAN 标准的优先级规则:数值越小,优先级越高。

4.1、组成描述

COB-ID通常由两部分组成:

• 功能码(Function Code):标识CANopen 消息的类型(如 NMT、SDO、PDO、Heartbeat 等);

• Node-ID:标识消息的来源设备或目标设备。

4.2、决定消息类型和优先级

• 消息类型:功能码决定CANopen消息是哪种通信对象;

• 优先级:较低的COB-ID 值意味着更高的 CAN 总线优先级,这对于实时通信至关重要。

4.3、应用示例

• 0x000:NMT命令,CANopen中优先级最高的COB-ID;

• 0x080:SYNC同步消息,优先级仅次于NMT;

• 0x180 + Node-ID:TPDO1,如Node-ID 0x10的TPDO1 COB-ID为0x190;

• 0x200 + Node-ID:RPDO1,如主站向Node-ID 0x10发送RPDO1,COB-ID为0x210;

• 0x580 + Node-ID:SDO Rx (Server -> Client),如 Node-ID 0x10 的 SDO 响应 COB-ID 为 0x590;

• 0x600 + Node-ID:SDO Tx (Client -> Server),如主站向 Node-ID 0x10 发送 SDO 请求,COB-ID 为 0x610;

0x700 + Node-ID:Heartbeat 心跳消息,如 Node-ID 0x10 的心跳 COB-ID 为 0x710。

可以看到,CANopen不仅仅是一个数据传输协议,CANopen总线还提供了一套完整的机制来管理和监控整个网络。随着技术的不断进步,CANopen也在不断地演进,适应新的应用场景和要求。无论是在传统的工业自动化领域,还是在日益增长的智能设备和物联网应用中,CANopen协议栈都将继续发挥其重要的作用。

下文将介绍CANopen协议栈的NMT网络管理、Heartbeat(心跳)、SDO(服务数据对象)、PDO(过程数据对象)和CiA 401 应用配置文件(通用 I/O 规范)的详解。


今天的分享就到这里啦,EBYTE每一天都致力于更好的助力物联化、智能化、自动化的发展,提升资源利用率,更多CAN总线模块和CAN总线网关产品的更多资料,感兴趣的小伙伴可以登录我们的亿佰特官网进行了解,也可以直接拨打400电话咨询技术专员!


相关阅读:

1、CANopen协议栈之SDO服务数据对象参数访问机制详解

2、CANopen总线协议使用指南

3、CAN、CAN OPEN以及CAN FD详解

4、CAN总线常见问题说明及汇总

5、CANOPEN协议详解

点击拨打: 亿佰特官网 4000-330-990