跳到主要内容

08. 怎样读 CiA 规范编号

学习形式概念课
硬件要求不需要
配套 Demo
本课动作不涉及硬件操作

第 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 手册中的 CANopen 和 CiA 402 说明

图片来源:IG35EC硬件手册.pdf,第 2 页,产品特性。

从这段厂家说明可以得到两项信息:

通讯方式包含 CANopen
CANopen 控制模式声称符合 CiA 402

第一项告诉我们,应该按照 CANopen 的方式与电机通信。第二项告诉我们,这是一台采用驱动与运动控制规范的设备。

这里还不能得出“电机实现了 CiA 402 的全部功能”。规范中可能同时存在必须实现和可选实现的内容,厂家也可能只公开其中一部分。后面真正读取对象时,仍然要结合厂家对象说明和设备实际响应。

不过,至少现在已经有了查找方向:这台电机与 CiA 402 有关,而不是看到电机有几路数字输入,就擅自把它归为 CiA 401 设备。

CiA 是什么

CiACAN in Automation 的缩写。它是负责发展和维护许多 CAN、CANopen 相关规范的国际用户与制造商组织。

规范名称通常写成:

CiA + 文档编号

例如:

CiA 301
CiA 401
CiA 402

这里的 301401402 首先表示不同的规范或规范系列,作用类似“文档编号”。它们不是按大小排列的软件版本。

名称应写作 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.04.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 规定的共同通信基础;走到设备规范时,再根据实际设备类型选择方向。

CiA 301、CiA 401、CiA 402 与设备类型的关系

图中橙色路径是本教程的实际路线:

本教程使用的 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-BCiA 401-CCiA 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 301CiA 401CiA 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:

CiA:CANopen

该页面介绍 CANopen 的通信协议和 CiA 301 应用层与通信规范。

CAN in Automation:CANopen profiles:

CiA:CANopen profiles

该页面解释共同通信规范、设备规范和应用规范之间的分工。

CAN in Automation:CiA 401 series:

CiA 401 系列:I/O device profile

该页面说明 CiA 401 面向数字量和模拟量 I/O 设备。

CAN in Automation:CiA 402 series:

CiA 402 系列:驱动与运动控制设备规范

该页面说明 CiA 402 面向伺服驱动器、变频器和步进电机等驱动与运动控制设备。