08. 怎样读 CiA 规范编号
第 07 课查看官方 CANopen 海报时,表格的 Specification 一栏写着:
CiA 301
而 IG35EC020 电机的厂家手册又写着:
符合 CiA 402 标准
刚接触这些编号时,很容易产生一连串疑问:
301 和 402 是 CANopen 的两个版本吗?
402 的数字更大,是不是比 301 更新?
听说还有 CiA 401,它又是做什么的?
这台电机究竟应该看 301、401,还是 402?
这一课不分析具体报文,也不操作电机。我们先学会看懂规范名称。以后拿到另一台电机、I/O 模块或编码器的资料时,就能知道应该继续查哪一类文档,而不是见到一个 CiA xxx 就靠数字大小猜测。
先看电机厂家怎样写
先不要急着研究 301 和 401。拿到一台具体设备时,第一步应该查看它自己的资料。
下面是 IG35EC 硬件手册第 2 页的局部。看“控制方式”和“通讯方式”两行:

图片来源:IG35EC硬件手册.pdf,第 2 页,产品特性。
从这段厂家说明可以得到两项信息:
通讯方式包含 CANopen
CANopen 控制模式声称符合 CiA 402
第一项告诉我们,应该按照 CANopen 的方式与电机通信。第二项告诉我们,这是一台采用驱动与运动控制规范的设备。
这里还不能得出“电机实现了 CiA 402 的全部功能”。规范中可能同时存在必须实现和可选实现的内容,厂家也可能只公开其中一部分。后面真正读取对象时,仍然要结合厂家对象说明和设备实际响应。
不过,至少现在已经有了查找方向:这台电机与 CiA 402 有关,而不是看到电机有几路数字输入,就擅自把它归为 CiA 401 设备。
CiA 是什么
CiA 是 CAN in Automation 的缩写。它是负责发展和维护许多 CAN、CANopen 相关规范的国际用户与制造商组织。
规范名称通常写成:
CiA + 文档编号
例如:
CiA 301
CiA 401
CiA 402
这里的 301、401、402 首先表示不同的规范或规范系列,作用类似“文档编号”。它们不是按大小排列的软件版本。
名称应写作 CiA,中间的 i 是小写。英文资料中看到 CiA 402,这里的 CiA 指 CAN in Automation。
规范编号和版本号要分开看
官方资料可能写成:
CiA 301 version 4.2.0
把它拆开就很清楚:
CiA 301 规范编号,说明文档讨论什么主题
version 4.2.0 这份规范自身的版本
因此,下面这种比较没有意义:
错误理解:402 大于 301,所以 CiA 402 比 CiA 301 更新
正确的比较方式是先看规范编号,再看同一规范自己的版本:
CiA 301 version 4.1.0
CiA 301 version 4.2.0
这两行讨论的是同一类规范,4.1.0 和 4.2.0 才是可以用来判断先后变化的版本号。
而下面两行讨论的是不同主题:
CiA 301 version 4.2.0
CiA 402-1 version 5.0.0
不能只比较末尾的版本数字,然后决定项目应该选哪份规范。设备需要哪种规范,取决于它是什么设备、实现了什么接口。
CANopen 为什么需要不止一份规范
第 07 课已经知道,CANopen 要解决节点编号、状态管理、参数访问和过程数据传输等问题。这些是 CANopen 设备共同需要的通信能力。
但设备真正要表达的数据并不相同:
I/O 模块关心:哪个输入为高电平、模拟量是多少
电机驱动器关心:能否使能、当前模式、目标位置、实际速度
编码器关心:当前位置、圈数、分辨率和方向
如果把所有设备的所有功能都写进一份文档,这份文档会非常庞大,而且大多数设备只用得到其中很小一部分。
CANopen 采用的办法是:先规定大家共同使用的通信基础,再按设备类型补充相应规则。
看下面这张图时,先从最上方沿箭头向下看。本教程讨论的是基于 Classical CAN 的 CANopen 设备,它们使用 CiA 301 规定的共同通信基础;走到设备规范时,再根据实际设备类型选择方向。

图中橙色路径是本教程的实际路线:
本教程使用的 CANopen 设备(基于 Classical CAN)
-> 遵守 CiA 301 的共同通信规则
-> 采用 CiA 402 的驱动与运动控制规则
-> IG35EC020 电机
这不是说设备先运行一遍 301 程序,再运行一遍 402 程序。图表示的是规范之间的分工:同一台设备在通信部分遵守共同规则,在电机功能部分采用适合驱动器的规则。
如果用写程序时熟悉的“通用接口和专用接口”来帮助理解,可以暂时这样看:
CiA 301 像这类 CANopen 设备共同遵守的通信接口
CiA 401 在共同接口上,补充 I/O 设备的数据和行为
CiA 402 在共同接口上,补充电机驱动器的数据和行为
这只是帮助理解规范分工的类比。实际 CANopen 设备通过通信协议、对象字典和设备行为实现这些规则,并不是 C 语言里的类继承。
CiA 301 规定共同的通信基础
CiA 301 的名称是 CANopen application layer and communication profile,也就是 CANopen 应用层与通信规范。
目前课程已经接触到的这些内容,都属于 CiA 301 的范围:
- Node-ID;
- NMT 状态管理;
- Boot-up 和 Heartbeat;
- SDO 参数访问;
- PDO 过程数据通信;
- 对象字典的基本结构和数据类型;
- CANopen 常用报文的默认 CAN-ID。
例如,第 07 课计算:
Heartbeat CAN-ID = 0x700 + Node-ID
这是 CANopen 节点共同使用的通信规则。无论节点是 I/O 模块、电机还是编码器,只要它采用 Classical CAN 上的 CANopen,并使用这套默认连接方式,就要按照相应的 CANopen 通信规则解释报文。
CiA 301 可以告诉我们“怎样访问设备参数”,但不会把所有电机参数都定义出来。它不会因为当前设备是一台电机,就自动规定“目标位置”和“电机使能”具体应该怎样表示。这正是设备规范要补充的部分。
CiA 401 面向通用 I/O 设备
CiA 401 是通用 I/O 设备规范,主要面向具有数字量和模拟量输入输出的模块化设备。
例如,一台 CANopen I/O 模块可能提供:
8 路数字输入
8 路数字输出
4 路模拟输入
2 路模拟输出
只有 CiA 301 时,控制器知道怎样使用 SDO 和 PDO,却仍然不知道这些输入输出应该放在哪些标准参数中、怎样分组,以及默认 PDO 可以怎样携带它们。
CiA 401 在共同通信基础上补充 I/O 设备需要的功能和参数。它关注的是输入、输出和相关配置,不负责定义电机的状态机、目标位置或速度模式。
IG35EC020 本身确实带有数字输入,但厂家把它的主要 CANopen 控制接口定义为驱动与运动控制设备,并明确写出 CiA 402。不能因为设备上存在 I/O 引脚,就自行改用 CiA 401 解释整台电机。
CiA 402 面向驱动与运动控制设备
CiA 402 是驱动与运动控制设备规范,适用于伺服驱动器、变频器和步进电机控制器等设备。
它要让不同控制器和驱动器对这些问题使用相同或相近的表达方式:
- 驱动器当前处于什么状态;
- 哪些条件满足后可以使能;
- 控制命令和当前状态怎样表示;
- 当前使用位置、速度还是其他运行模式;
- 目标位置、实际位置和速度等数据怎样组织。
这正好对应 IG35EC020 的设备类型。厂家截图中列出的力矩、速度、位置和找原点模式,也属于运动控制领域,而不是普通 I/O 模块的主要功能。
后面的 CiA 402 课程会专门讲状态机、Controlword、Statusword 和位置模式。当前只需要确定规范选择:
IG35EC020 的 CANopen 通信基础:CiA 301
IG35EC020 的驱动与运动功能:CiA 402
CiA 401:不是本项目控制电机的主要设备规范
同一台设备为什么会同时涉及 301 和 402
假设电机正在周期发送 Heartbeat,然后控制器读取它的驱动状态。
这两件事由不同层面的规则回答:
怎样判断节点在线、怎样访问一个参数 CiA 301
读到的驱动状态表示什么、怎样控制使能 CiA 402
因此,“设备符合 CiA 402”并不表示它不需要 CiA 301。CiA 402 设备仍然需要 CANopen 的共同通信机制,控制器才有办法找到节点、监视状态并访问驱动参数。
反过来也一样:只知道设备支持 CiA 301,只能说明它使用 CANopen 的通用通信规则,还不能判断它是一台 I/O 模块、电机、编码器还是其他设备。
所以拿到设备资料时,需要分别回答两个问题:
它使用哪套 CANopen 通信基础?
它属于哪种设备类型,采用哪份设备规范?
编号后面还有横线或字母时怎么看
有些规范是一组文档,还会在主编号后增加部分编号。例如:
CiA 402-1 version 5.0.0
可以拆成:
402 规范系列
-1 这个系列中的第 1 部分
version 5.0.0 这一部分文档的版本
CiA 401 的较新资料中还可能看到 CiA 401-B、CiA 401-C 或 CiA 401-F。这些尾部字母用于区分同一系列中的不同部分或映射方向,不表示 401-B 比 402 更低级。
初学阶段不需要记住每个后缀。遇到完整编号时,按下面顺序阅读即可:
先看主编号 -> 确认规范主题
再看横线后的部分编号或字母 -> 确认系列中的哪一部分
最后看 version -> 确认这份文档的版本
“符合某规范”不等于实现全部可选功能
厂家写“符合 CiA 402”,为我们提供了重要方向,但它不是完整对象清单。
设备规范通常允许一部分功能按产品能力选择实现。例如,两台都声称采用 CiA 402 的设备,可能分别支持不同的运行模式、PDO 映射或可选参数。
所以实际开发不能只靠一句“符合 CiA 402”,还应继续寻找:
- 当前型号的通信手册;
- 对象字典说明;
- EDS,也就是描述 CANopen 设备参数和通信配置的电子数据表;
- 规范和厂家资料的版本;
- 设备通过 SDO 返回的实际结果。
本教程目前没有拿到 IG35EC020 的完整 EDS 和厂家私有对象字典,因此只使用有资料依据的标准对象,并通过实际响应确认对象是否存在。对象不存在时,应记录 SDO Abort,而不是根据其他厂家的电机手册猜一个地址。
拿到另一台 CANopen 设备时怎样判断
以后换成另一台 CANopen 设备,可以按下面的顺序查资料。
先确认通信方式:
资料是否明确写出 CANopen?
使用 Classical CAN 还是 CAN FD?
再确认设备规范:
资料是否写出 CiA 401、CiA 402、CiA 406 或其他编号?
这个编号的官方标题与设备类型是否吻合?
然后分开记录规范编号和版本:
规范编号:____________
规范部分:____________
文档版本:____________
厂家手册版本:________
最后再找对象清单和配置资料。不要因为另一台设备也使用 CANopen,就假设它与当前电机具有相同对象、相同默认参数或相同运行模式。
用三个例子练习阅读
例子一
资料写着:
CiA 301 version 4.2.0
其中规范编号是什么,版本号是什么?
规范编号:CiA 301
版本号:4.2.0
例子二
一台设备提供 16 路数字输入和 16 路数字输出,手册写着 CiA 401。这个编号表示什么?
它采用面向通用 I/O 设备的规范。
它仍然需要 CANopen 的共同通信基础,不能把 401 当作 301 的替代版本。
例子三
IG35EC020 手册写着 CANopen 模式(符合 CiA 402 标准)。开发时是否只需要看 CiA 402?
不是。
节点通信、Heartbeat、SDO 和 PDO 等共同机制来自 CiA 301;
驱动状态、控制方式和运动模式等设备功能来自 CiA 402;
具体实现范围还要以当前型号的厂家资料和实际响应为准。
回顾:看到 CiA 编号时应该想到什么
现在再看到 CiA 301、CiA 401 和 CiA 402,不要先比较数字大小。
CiA CAN in Automation
301 CANopen 共同的应用层与通信基础
401 通用数字量、模拟量 I/O 设备规范
402 驱动与运动控制设备规范
version 某一份规范文档自己的版本
对于本教程的电机,可以收束成一句话:
IG35EC020 使用 CiA 301 提供的 CANopen 通信机制,并采用 CiA 402 描述驱动与运动控制功能。
下一课先沿着 CiA 301 继续,观察节点怎样通过 NMT、Boot-up 和 Heartbeat 报告启动与在线状态;等进入电机控制阶段,再深入 CiA 402。
资料链接
CAN in Automation:CANopen:
该页面介绍 CANopen 的通信协议和 CiA 301 应用层与通信规范。
CAN in Automation:CANopen profiles:
该页面解释共同通信规范、设备规范和应用规范之间的分工。
CAN in Automation:CiA 401 series:
该页面说明 CiA 401 面向数字量和模拟量 I/O 设备。
CAN in Automation:CiA 402 series:
该页面说明 CiA 402 面向伺服驱动器、变频器和步进电机等驱动与运动控制设备。