学习CANopen协议主要需要了解五大部分:对象字典,PDO, SDO, NMT,特殊协议。同时需要了解COB-ID的概念:在SDO和PDO中COB-ID前四位代表功能码,后7位是node-ID.
功能码例如:600h表示问,580h表示答
对象字典是一个描述了节点所有参数的有序列表,每个对象都有个索引每个索引内具体的参数,最大用 32 位的变量来表示。对象字典主要数据分布如下:
通讯对象子协议区 | 制造商特定子协议区 | 标准化设备子协议区 |
---|---|---|
1000h to 1FFFh | 2000h to 5FFFh | 6000h to 9FFFh |
通用通讯对象 | SDO 参数对象 | 安全对象 | PDO 参数对象 | SDO 管理对象 | 配置管理对象 | 程序控制对象 | 网络管理主机对象 |
---|---|---|---|---|---|---|---|
1000h to 1029h | 1200h to 12FFh | 1300h to 13FFh | 1400h to 1BFFh | 1F00h to 1F11h | 1F20h to 1F27h | 1F50h to 1F54h | 1F80h to 1F89h |
各个厂商不尽相同,例如:
RPDO通信参数 | RPDO映射参数 | TPDO通信参数 | TPDO映射参数 |
---|---|---|---|
1400h to 15FFh | 1600h to 17FFh | 1800h to 19FFh | 1A00h to 1BFFh |
1.NMT节点状态
NMT全称Network management,节点上电后后又6种状态,其中有5个分别为状态NMT可以控制分别为应用层复位、通讯复位、预操作状态、操作状态、停止状态,不能控制初始化状态
初始化 | 应用层复位 | 通讯复位 | 预操作状态 | 操作状态 | 停止状态 |
---|---|---|---|---|---|
节点上电,can控制器初始化 | 应用程序复位(开始) | 开始通讯 | 禁止PDO,可配置NMT,SDO | 收到主机启动命令后通讯激活 | 通讯停止,但可以SDO,NMT |
1 | 2 | 3,6 | 4,7 | 5,8 | 9,10,11 | 12,13,14 | 15 |
---|---|---|---|---|---|---|---|
上电 | 自动切换到预操作状态 | 网络管理切换到操作状态 | 网络管理切换到预操作状态 | 网络管理切换到停止状态 | 网络管理切换到应用层复位状态 | 网络管理切换到通讯复位状态 | 掉电或者硬件复位 |
2.NMT节点上线报文
从站上线必须发出的节点上线报文(boot-up), 数据为 1 个字节 0
3.NMT节点状态与心跳报文
从站按一定的星跳生产时间向主机发送心跳报文,以便主站确认从站是否故障。心跳报文格式:CANID与节点上线报文相同为 700h+Node-ID,数据为 1 个字节,代表节点目前的状态, 04h为停止状态, 05h为操作状态, 7Fh为预操作状态
4.NMT节点守护
除了心跳报文还可以通过轮询模式监视从站状态。该模式逐渐被淘汰所以不详述
5.NMT节点状态切换命令
状态切换命令报文的CANID为000h,最高优先级
第一字节:
01h | 02h | 80h | 81h | 82h |
---|---|---|---|---|
启动 | 停止 | 进入预操作 | 复位节点应用层 | 复位节点通讯 |
第二字节:
第二字节为node-ID,若为0则是控制所有节点
PDO是属于过程数据,是单向的,是为了提高通信效率而规定的。数据长度不超过8字节。PDO也分为RPDO,TPDO
1.PDO的传输形式
同步传输
1.循环传输
同步传输就是通过同步报文让所有节点能在同一时刻进行上传数据或者执行下达的应用指令,循环同步则是主机周期性发送同步报文,所有从机同时上传数据。
2.非循环传输
非循环同步是由远程帧出发或者协议规定的对象特定时间预出发传送。
异步传输
1.内部事件触发
定时传输或者数据改变出发传输
2.远程请求
通过发送与 PDO 的 COB-ID 相同的远程帧来触发 PDO的发送
- nhibit time 生产禁止约束时间(1/10ms):约束 PDO 发送的最小间隔,避免导致总线负载剧烈增加,比如数字量输入过快,导致状态改变发送的 TPDO 频繁发送,总线负载加大,所以需要一个约束时间来进行“滤波”,这个时间单位为 0.1ms;
- Event timer 事件定时器触发的时间(单位 ms):定时发送的 PDO,它的定时时间,如果这个时间为 0,则这个 PDO 为事件改变发送。
- SYNC start value 同步起始值:同步传输的 PDO,收到诺干个同步包后,才进行发送,这个同步起始值就是同步包数量。比如设置为 2,即收到 2 个同步包后才进行发送
图片来源于《canopen轻松入门》
3.PDO的映射参数
映射参数代表PDO通信想要读写的对象字典的索引和子索引,字节数。
SDO不同于PDO,他是服务确认类型,每个消息都会有一个应答。传输数据长度不限。
1.SDO通信原则
发送报文CAN-ID:600h + 接受Node-ID,回应报文CAN-ID:580h + 接受Node-ID,数据长度均为8字节,不存在的补0.
2.快速SDO协议
快速SDO读写的值不能超过32位,命令中有索引,子索引,和数据。
3.普通 SDO 协议
当传输数据超过32位时,需要普通SDO分帧传输。
下载协议,图片来源于《canopen轻松入门》
为了方便 CANopen 主站对从站管理。在 CANopen 协议中,已经为特殊的功能预定义了 COB-ID,其主要有以下几种特殊报文。
1.同步协议
同步报文由NMT主机发出以实现整个网络的同步传输(例如触发PDO传输),同步报文的CAN-ID为80h,数据为0字节
相关参数设定:
1007h | 同步窗口时间 | 同步帧发送后PDO响应的有效时间 |
---|---|---|
1006h | 通讯循环周期 | 同步帧的循环周期 |
2.时间戳协议
为实现时间同步,NMT主机发送时间戳。CAN-ID是100h,数据六个字节,表示当前时刻与1984年1月1日时的时间差。
3.紧急报文协议
从机向主机发送内部错误代码, CAN-ID存储在 1014h的索引中, 一般会定义为 080h +node-ID, 数据包含 8 个字节