CANopen学习笔记(总)
CANOpen
定位:小网络,控制信号的实时通讯
确保实时性采取的措施
-
ID域:11bit(CAN标准帧格式)
-
控制报文采用数据最小字节数
-
采用生产消费模型(数据无需应答)
-
需要应答时,采用快速单字传输(一个报文最多传输一个32字节参数变量)
一、协议分类
- 主从协议
- 一对多
- 无应答模式和应答模式
- 客户端/服务器协议(SDO)
- 单对单
- 有应答
- 生产消费协议(PDO)
- 一对多
- 推拉模式
二、通讯对象
2.1 PDO
我的观点:一个 CANopen 设备可以拥有最多 512 个 RPDO 和 512 个 TPDO,总共最多 1024 个 PDO。(得到GPT4o的肯定)
CiA协议栈观点:一个只有一个逻辑设备的 CANopen 设备最多有 512 个 PDO。
PDO的两种用法:
- TPDO:生产者PDO
- RPDO:消费者PDO
2.1.1 特点
小而快
2.1.2 传输模式
-
同步传输:通过(SYNC对象)来获取同步信号
同步TPDO的传输倍率:n表示经过n个同步信号后发送下一个消息。(为0时,收到触发信号后的第一个同步信号后进行发送)
-
事件驱动传输
2.1.3 触发模式
消息的触发模式
触发方式 | 解释 | 应用场景 |
---|---|---|
事件驱动 | 特定的事件进行驱动 | 超限报警 |
定时器驱动 | 固定的时间间隔进行发送 | 周期性更新数据 |
远程请求 | 其它节点通过发送 RTR 帧来请求该设备发送相应的 PDO | 允许节点灵活的请求数据 |
同步触发 | 由一定数量的Sync和内部事件触发 | 协调多个设备的同步操作 |
2.1.4 PDO读写
- 写协议(推模式):生产者向0 ~ n个消费者写PDO数据(参考spi写数据)
- 读协议(拉模式):消费者发送RTR请求向生产者请求数据(参考spi读数据)
PDO写
参数 | 请求/执行 | 响应/确认 |
---|---|---|
PDO编号 | 强制 | |
数据 | 强制 |
PDO读
参数 | 请求/执行 | 响应/确认 |
---|---|---|
PDO编号 | 强制 | |
数据 | 强制 |
2.1.5 对象描述
-
通讯参数:定义了PDO的基本特性,如COB-ID、传输类型、禁止时间和事件定时器等,它决定了PDO是以何种方式发送和接收数据。
-
COB-ID:通过COB-ID可以唯一识别一个PDO消息
- TPDO和RPDO的COB-ID是不同的
- COB-ID的最高位设置为1时,表示该PDO被禁用
-
传输类型(Transmission Type):PDO消息的传输方式
- 同步传输
- 异步传输
-
抑制时间(Inhibit Time):两个PDO之间的最小时间间隔(以ms为单位)
-
事件计时器(Event Timer):定了事件触发的周期时间,PDO在到期时发送(表示没有事件发生)
-
同步计数器(Sync Counter):在同步传输类型下使用,规定了在接收多少次同步信号后发送
-
-
映射参数:定义了哪些对象字典条目(变量)被包含在 PDO 消息中,以及这些变量在消息中的位置。
- 映射条目数:定义了一个PDO在对象字典中的条目数量,每个条目代表一个数据段
- 映射对象:每个映射对象由32位组成
- 索引(Index,16位):对象字典中的索引
- 子索引(Sub-Index, 8位):对象字典项的子索引
- 位长度(Bit Length,8位):表示映射对象的数据位数(常为字节的整数倍)
2.1.6 PDO 传输实例
2.2 Multiplex PDO(不懂且没看完,因资料少)
有两种MPDO的使用方法。第一是目的地址模式(DAM)PDO,第二是源地址模式(SAM)PDO
支持接收MPDO的ANope的设备为MPDO消费者,支持发送MPDO的C为MPDO生产者
发送MPDO由事件驱动,不支持定时、远程请求和同步触发模式
2.2.1 寻址模式
- 目的地址模式(DAM):一个DAM-MPDO可以被所有该MPDO的消费者同时接收(类似于广播),且无 应答。如果对象不存在,则生成EMCY帧。
- 源地址模式(SAM):
2.2.2 MPDO读写
MPDO写
参数 | 请求/执行 | 响应/确认 |
---|---|---|
PDO编号 | 强制 | |
地址类型 | 强制 | |
Node-ID | 强制 | |
Multiplexer | 强制 | |
数据 | 强制 |
2.3 SDO
2.3.1 特点
大而慢
2.3.2 传输模式
传输模式 | 概述 | 应答模式 |
---|---|---|
快速传输 | 因数据小于等于4个字节,一帧足够发送完,无需分段 | 一帧一答 |
段传输 | 把数据分割成若干个段,每一段通过单独的帧发送 | 每帧每答 |
块传输 | 把多个段组合成一个子块,每一子块发送完才接受应答信号,所有子块组成块 | 每子块每答 |
快速传输模式:只需要一次数据的发送和应答就可以完成数据传输,效率高,但是传输的数据量少。
段传输:数据被分成多个段(segment)来传输,每个段最多可以包含7个字节的数据。这种模式的实现较为简单,适合中等长度的数据传输。
块传输:相比段传输模式,块传输模式能够处理更大的数据量并且提高了传输效率。数据被分为多个块(block),每个块可以包含多个段。块传输还具有校验机制,能够确保数据的完整性和可靠性。
协议详解见 Or CiA301中文手册43页
2.4 SYNC
- 同步生产者定期广播同步对象(SYNC)。
- SYNC提供基本的网络同步机制,遵循生产消费模型,该服务无应答。
- 传输1个字节的计数器(可选)
2.5 TIME
- TIME生产者定期广播时间戳对象(TIME)。
- TIME提供了简单的网络时钟。CANopen设备通过时间戳对象来校准本地时间。
- 传输6个字节的时间戳
2.6 EMCY
- 当设备内部出现致命错误将触发应急(EMCY)报文
- 由应用设备以最高优先级发送到其他设备。任何具备紧急事件监控与处理能力的从站会接收并处理紧急报文。
三、NMT
NMT主要用来管理和控制各个节点的状态,具体协议可以分为以下四类:
- NMT protocol
- Node guard protocol
- Heartbeat protocol
- Bootup protocol
3.1 NMT protocol
该协议是CANopen中网络管理的协议,控制和管理节点的状态,通过发送相关报文,可以让目标节点进入特定的工作状态。工作状态有以下几种
- Initialization(初始化): 节点开始时进入初始化状态。
- Pre-operational(预操作): 节点处于准备状态,但不参与正常的PDO(Process Data Object)通信。
- Operational(操作): 节点完全进入操作模式,允许PDO通信。
- Stopped(停止): 节点停止所有的通信。
NMT命令通常由网络管理器发送,命令包括:
命令 | 描述 | cs值 |
---|---|---|
Start Remote Node | 将节点切换到Operational模式 | 0x01 |
Stop Remote Node | 将节点切换到Stopped模式 | 0x02 |
Enter Pre-operational | 将节点切换到Pre-operational模式 | 0x80 |
Reset Node | 重置节点,重新启动节点 | 0x81 |
Reset Communication | 重置节点的通信部分 | 0x82 |
其具体值为cs值(一字节)+nodeid(一字节)
Note : To command all the nodes, use nodeId = 00
Examples
- To put the node 0x6 in operational mode : 000 01 06
- To put all the nodes in pre-operational mode : 000 80 00
3.2 Node Guard protocol
节点监护协议(Node Guard protocol),用于主设备监控从设备的状态。由主设备定期发送(监护周期),如从节点没在规定时间内回应(节点生存周期),则主节点认为该节点出现了故障。(该报文中有翻转位)
3.3 Heartbeat protocol
心跳协议(Heartbeat protocol),是节点监护协议的简化版本,心跳协议不需要主设备定期发送消息来请求从设备回应,而是每个节点自主定时发布心跳报文,如消费者节点每在规定时间内收到心跳报文,则产生心跳事件。(该报文中没有翻转位)
3.4 Bootup protocol
Bootup协议是CANopen节点在启动时,通知主设备其状态的协议,在初始化进入预操作状态时,该节点会发送Bootup表示节点已经初始化完成,并且可以接收管理指令。