EDS(Electronic Data Sheets
)和DCF(Device Configuration Files
)文件格式在 CANopen 中用于描述特定节点中实现的对象字典。为了向CANopen分析软件(上位机)提供一种识别 CANopen 节点中可用对象字典条目的方法,需要一种电子可读的文件格式。CANopen 规范了这种格式,称为电子数据表 (EDS)。EDS 是对象字典规范的电子可读版本。
接着我们将探讨一下SDO访问对象字典的相关知识和注意事项。
文章目录
1 EDS 格式和编辑
EDS 的格式在CiADSP306
规范中进行了规定。它类似于Windows 的“.ini”文件格式,可以使用普通的ASCII编辑器来读取和/或修改它。但是EDS条目不仅必须具有适当的参数,而且多个条目还必须进行交叉引用。所以用ASCII编辑器来修改EDS文件往往容易出错。
EDS文件例子:
[1018]
ParameterName=Identity object
ObjectType=0x9
SubNumber=3
[1018sub0]
ParameterName=Number of entries
ObjectType=0x7
DataType=0x0005
AccessType=ro
DefaultValue=3
PDOMapping=0
LowLimit=1
HighLimit=4
[1018sub1]
ParameterName=Vender ID
ObjectType=0x7
DataType=0x0007
AccessType=ro
DefaultValue=0x0400005A
PDOMapping=0
[1018sub2]
ParameterName=Product code
ObjectType=0x7
DataType=0x0007
AccessType=ro
DefaultValue=0x03
PDOMapping=0
[1018sub3]
ParameterName=Revision number
ObjectType=0x7
DataType=0x0007
AccessType=ro
DefaultValue=0x0000002F
PDOMapping=0
有几种商业软件工具支持EDS文件的生成和修改,如下图所示为Vector CANeds
软件:
2 DCF的格式和使用
DCF 的格式与 EDS 几乎相同,但用途不同:
(1)EDS 的用途
定义对象字典的格式
- EDS 定义了一个对象字典的格式,该对象字典可能适用于多个节点。
- EDS 主要用于描述节点可以访问的对象字典条目。
(2)DCF 的用途
存储特定节点的配置参数
- DCF 用于存储特定节点的配置参数,包括每个条目的最小值、最大值和默认值。
- DCF 存储的是对象字典条目当前拥有或应有的具体值。
那么如何使用 EDS 和 DCF呢?
- CANopen 配置工具或主节点可以使用 EDS 来查找节点中哪些条目是可访问的。
- 它们可以使用 DCF 来存储(或检索)节点在这些对象字典条目中的值。
保存和恢复节点设置
- 保存设置:要保存当前设置,工具/主节点会读取节点的所有对象字典条目,并将读取的值存储在 DCF 中。
- 恢复设置:恢复节点时,可以从 DCF 中读取值,并将它们写入对象字典条目。
例子
假设有一个数字 I/O 模块,则:
- 一个系统可能有几个数字 I/O 模块,这些模块都按照“通用 I/O”的 EDS 实现。
- 在运行过程中,其中一些节点可能被配置为仅输入,另一些则被配置为仅输出。
- 每个节点的具体配置存储在其各自的 DCF 中。
3 用SDO访问对象字典
既然我们已经有了一种定义节点数据的方法(对象字典),并且可以通过网络共享这些数据,我们还需要一种访问它的方法。由之前的学习我们知道,服务数据对象(SDO
)可以通过请求和响应消息实现通用访问节点对象字典的方法。
3.1 客户端和服务器
每个 CANopen 节点不仅实现了自己的对象字典,还实现了一个处理对象字典读写请求的服务器。因此,主节点或配置工具作为该服务器的客户端,可以向其发送读或写请求。例如,一个配置工具可以发送一个请求:
发送请求:
- 配置工具(客户端)可以发送请求来读取或写入节点的对象字典。
- 例如,客户端发送请求:“节点 5,我想知道你在索引 1000h,子索引 00h 处有什么。”
节点识别请求并回应:
- 节点 5(服务器)识别到这个请求后,会读取其对象字典中的相应条目。
- 节点 5 回复客户端:“请求者,这是我在索引 1000h,子索引 00h 处的对象字典中的数据。”
3.2 用于SDO的消息标识符
3.2.1 消息标识符的使用和限制
下面我们来了解一下CANopen 网络中SDO通信的消息标识符如何分配和使用,以及这种设计的原因和限制。
1.唯一的消息标识符
唯一性要求
- CANopen 网络中的每个消息 ID 都是唯一的,意味着一个消息 ID 在整个网络中只用于一个特定目的。
- 这是 CAN 仲裁功能的要求,确保消息不会在网络上传输时发生冲突。
例外情况
- 这一规则有一些例外,主要用于初始化、测试或调试期间的特定配置服务。
2.点对点通信通道
- 为了实现点对点通信,需要两个消息标识符。
- 一个用于向特定节点发送请求,另一个用于该节点发送响应。
3.默认消息标识符的计算
请求消息标识符:
- 向特定节点发送请求的消息标识符通过将该节点的节点 ID(1-127)添加到 600h 的基地址来计算。
- 例如,节点 ID 为 1 的节点的请求消息标识符为 601h,节点 ID 为 2 的节点为 602h,依此类推。
- 地址范围 601h 到 67Fh 提供了从一个客户端到多达 127 个服务器的 127 个通道。
响应消息标识符:
- 从节点发送响应回到客户端的消息标识符通过将节点 ID(1-127)添加到 580h 的基地址来计算。
- 例如,节点 ID 为 1 的节点的响应消息标识符为 581h,节点 ID 为 2 的节点为 582h,依此类推。
- 地址范围 581h 到 5FFh 提供了从多达 127 个服务器回到客户端的 127 个通道。
默认方案的限制
唯一客户端
- 分配消息标识符的默认方案只允许网络上有一个客户端。
- 因为消息 ID 必须是唯一的,所以不能有两个设备同时向同一个节点发送 SDO 请求。
设计理念
- 整个 SDO 通信是围绕一个节点可以访问系统中每个节点的每个对象字典条目的想法设计的。
- 通常是一个配置工具或负责配置的主节点。
3.2.2 访问同一节点对象字典
SDO允许多个客户端访问同一节点的对象字典。CANopen 可选地允许实现 SDO 通道共享的方法,这种方法允许多个客户端共享现有的 SDO 通道,而不是为每个客户端实现多个 SDO 通道。
CANopen 还允许提供额外的 SDO 通道。这意味着一个节点可以实现多个 SDO 服务器,每个服务器都有自己独立的请求和响应通道。
实现多个 SDO 服务器
- 为每个额外的 SDO 服务器保留一对消息标识符。
- 例如,一个具有两个 SDO 服务器的节点可以同时为主节点和配置工具提供访问。
- 这种情况下,并没有默认的消息标识符分配方案,必须自行指定。
SDO 通道共享
SDO 管理器:
- 通过 SDO 管理器实现通道共享。
- SDO 管理器负责所有 SDO 通道,并且默认是唯一可以使用这些通道的客户端。
客户端请求通道:
- 其他希望使用特定 SDO 通道的客户端必须向 SDO 管理器请求通道。
- 只有在 SDO 管理器将通道分配给它们之后,它们才能使用该通道。
应用场景:
- 例如,仅连接到网络进行维护的配置工具需要请求通道才能访问。
这种方法在CiADS302
中有详细描述,这里就不再继续阐述。
3.3 SDO消息内容
下面我们来看一下SDO消息在 CANopen 网络中的结构和内容,特别是如何实现数据的传输和管理。
SDO 消息的基本结构
- 8 字节数据:每个 SDO 请求和响应消息包含 8 个字节的数据。
- 说明符:
- 第一个字节称为“说明符”,用于指示消息的类型和状态
- 说明符的位指定消息是读取、写入还是中止(错误指示)
- 其他位指示数据传输类型,例如快速传输(
expedited transfer
)或分段传输(segmented transfer
)
多路复用器(Multiplexor)
位置和内容:
- 第 2 到第 4 字节包含“多路复用器”,它是 16 位索引和 8 位子索引的组合。
- 用于标识通过 SDO 访问的对象字典条目。
字节顺序:
- 多路复用器的字节顺序为:16 位索引的低字节,16 位索引的高字节和 8 位子索引。
数据传输
快速传输(Expedited Transfer):
- 如果传输的数据为 4 字节或更少,则数据直接包含在消息中。
- 数据字节的数量由说明符中的额外位指示。
分段传输(Segmented Transfer):
- 如果数据超过 4 字节,则使用多个消息进行传输。
- 第一个 SDO 请求和响应消息不包含数据,而是指示需要传输的总字节数。
- 之后的每个段包含说明符字节和最多 7 个数据字节。
- 说明符指示是否是最后一个段,以及当前消息中的数据字节数。
块传输(Block Transfer)
块传输是一种优化,用于传输大数据块。后面我们将详细介绍。
中止通信
在传输期间,任何一个通信伙伴都可以通过发送 SDO 中止消息来中止通信。
3.4 SDO的上传和下载
SDO中有两个术语:上传和下载。
- 根据
CiADS301
]标准,“SDO 下载”指的是对节点对象字典的写访问,而“SDO 上传”指的是对节点对象字典的读访问 - 这两个术语很容易混淆,因为“下载”通常与接收数据有关,而“上传”通常与发送数据有关,但在这里含义正好相反
为了清晰起见,建议使用更直观的术语“SDO 读访问”和“SDO 写访问”。
- SDO 读访问:对应于读取节点对象字典中的数据。
- SDO 写访问:对应于向节点对象字典中写入数据。
对应访问类型字段:
- 对象字典条目中有一个访问类型字段,指示条目是只读、读写还是只写。
- 使用“SDO 读访问”和“SDO 写访问”术语,可以更容易地理解和对应对象字典条目中的访问类型字段。
3.5 SDO使用限制
下面我们来探讨一下SDO在CANopen网络中的使用限制,特别是为什么SDO不适合用于高效的过程数据通信。
SDO 读访问和写访问:
- SDO 读访问和写访问提供了一种通用的方法,可以读取和写入网络上每个节点的对象字典。
- 由于节点的所有配置和过程数据都是其对象字典的一部分,SDO 传输可以用来访问这些过程数据。
使用 SDO 的局限性:
- 尽管可以使用 SDO 传输访问过程数据,但这并不是 SDO 通信的初衷。SDO 是为“服务数据”设计的,而不是为高效的过程数据传输设计的。
- 使用 SDO 进行通信效率不高,因为它需要较多的开销来处理每个读写请求和响应。
寻找更高效的方法:
- 在实际应用中,需要一种更精简、更高效的通信方法,以减少通信开销并最大化可用带宽的利用。
- 在 CANopen 中,这种精简高效的通信方法由过程数据对象(PDO)提供。
PDO 的优势:
- PDO 专门设计用于高效的过程数据传输,可以在不需要大量通信开销的情况下快速传输数据。
- 使用 PDO 可以更好地满足实时通信和高频率数据交换的需求。