EDS 文件格式详解

什么是 EDS 文件

EDS(Electronic Data Sheet,电子数据表)是 CANOpen 设备的"身份证"。它描述了一个设备的完整对象字典结构,使主站能够在不事先了解设备内部细节的情况下,正确配置和访问从节点。

核心作用:

  • 描述设备的功能和能力
  • 定义对象字典中每个条目的数据类型、访问权限、默认值
  • 使配置工具(如 CANOpen Editor)能够图形化显示设备参数
  • 为 SDO 通信提供元数据(数据类型决定 Expedited 传输的字节数)

EDS 文件格式由 CiA 306 规范定义,采用 INI 文件格式存储。

EDS 文件基本结构

一个 EDS 文件由多个"节"(section)组成,每个节用 [SectionName] 标记:

[DeviceInfo]
; 设备基本信息

[DeviceComms]
; 通信参数

[ MandatoryObjects]
; 强制对象(所有设备必须实现)

[OptionalObjects]
; 可选对象

[ManufacturerObjects]
; 制造商特定对象
```p

## 核心节详解

### 1. [DeviceInfo]

包含设备的元数据信息:

```ini
[DeviceInfo]
VendorName=IdealZero
VendorNumber=0x00000001
ProductName=RobotJoint-6DOF
ProductId=0x00000001
RevisionNumber=0x00000001
BaudRate_10=1
BaudRate_20=1
BaudRate_125=1
BaudRate_250=1
BaudRate_500=1
BaudRate_800=0
BaudRate_1000=1
SimpleBootUpMaster=0
SimpleBootUpSlave=1
Granularity=8
DynamicChannelsSupported=0
GroupMessaging=0
NrOfRXPDO=4
NrOfTXPDO=4
LSS_Supported=0

关键字段说明:

字段含义示例值
VendorName制造商名称IdealZero
ProductName产品名称RobotJoint-6DOF
VendorNumber制造商 ID(CANOpen 分配)0x00000001
ProductId产品编号0x00000001
RevisionNumber版本号0x00000001
BaudRate_XXX支持的波特率(1=支持,0=不支持)10=10kbps, 500=500kbps
SimpleBootUpSlave是否支持简单启动从站1
NrOfRXPDO接收 PDO 数量4
NrOfTXPDO发送 PDO 数量4

2. [DeviceComms]

定义通信参数:

[DeviceComms]
BaudRate=500
BaudRateIndex=4

3. [MandatoryObjects]

强制对象:所有 CANOpen 设备必须实现的核心对象。

[MandatoryObjects]
SupportedObjects=6
1=0x1000
2=0x1001
3=0x1003
4=0x1005
5=0x1006
6=0x1007

每个对象需要在独立的节中详细描述:

[1000]
ParameterName=Device type
ObjectType=0x07
DataType=0x0007
AccessType=ro
DefaultValue=0x00000000
PDOMapping=0

4. [OptionalObjects]

可选对象:设备可以选择实现的对象。

[OptionalObjects]
SupportedObjects=3
1=0x1008
2=0x1009
3=0x100A

5. [ManufacturerObjects]

制造商特定对象:由设备制造商自定义的参数。

[ManufacturerObjects]
SupportedObjects=2
1=0x2000
2=0x2001

对象类型编码(ObjectType)

值类型说明示例
0x00NULL空类型–
0x07VAR单个变量0x1000 设备类型
0x08ARRAY数组(相同类型的多个值)0x1003 标准错误记录
0x09RECORD记录(不同类型的多个字段)0x1018 制造商信息

关键区别:

  • VAR:一个值,通过 sub-index 0 访问
  • ARRAY:sub-index 0 = 元素个数,sub-index 1~N = 各元素(类型相同)
  • RECORD:sub-index 0 = 字段个数,sub-index 1~N = 各字段(类型不同)

数据类型编码(DataType)

值类型大小说明
0x0001BOOLEAN1 bit布尔值
0x0002INTEGER88 bit有符号 8 位整数
0x0003INTEGER1616 bit有符号 16 位整数
0x0004INTEGER3232 bit有符号 32 位整数
0x0005UNSIGNED88 bit无符号 8 位整数
0x0006UNSIGNED1616 bit无符号 16 位整数
0x0007UNSIGNED3232 bit无符号 32 位整数
0x0008REAL3232 bitIEEE 754 单精度浮点
0x0009REAL6464 bitIEEE 754 双精度浮点
0x000AVISIBLE_STRING可变可见字符串(ASCII)
0x000BOCTET_STRING可变字节串
0x000CUNICODE_STRING可变Unicode 字符串
0x001ADOMAIN可变大数据块

访问类型(AccessType)

值含义SDO 读SDO 写典型用途
ro只读允许禁止设备类型、状态字
rw读写允许允许配置参数
wo只写禁止允许控制字、命令
rwr读写(读和写可以有不同的行为)允许允许特殊功能
rwpre预定义读写SDO 允许SDO 允许通信参数
const常量允许禁止固件版本

PDO 映射(PDOMapping)

值含义
0不能映射到 PDO
1可以映射到 PDO

完整实例分析

以下是一个小型机械臂关节模块的 EDS 文件核心部分:

[DeviceInfo]
VendorName=IdealZero
ProductName=RobotJoint-6DOF
VendorNumber=0x00000001
ProductId=0x00000001
RevisionNumber=0x00000001
BaudRate_500=1
SimpleBootUpSlave=1
NrOfRXPDO=2
NrOfTXPDO=2

[MandatoryObjects]
SupportedObjects=5
1=0x1000
2=0x1001
3=0x1003
4=0x1005
5=0x1006

[1000]
ParameterName=Device type
ObjectType=0x07
DataType=0x0007
AccessType=ro
DefaultValue=0x00010192
PDOMapping=0

[1001]
ParameterName=Error register
ObjectType=0x07
DataType=0x0005
AccessType=ro
DefaultValue=0x00
PDOMapping=1

[1003]
ParameterName=Pre-defined error field
ObjectType=0x08
DataType=0x0007
AccessType=ro
SubNumber=9

[1003sub0]
ParameterName=Number of errors
ObjectType=0x07
DataType=0x0005
AccessType=ro
DefaultValue=0

[1003sub1]
ParameterName=Standard error field 1
ObjectType=0x07
DataType=0x0007
AccessType=ro
DefaultValue=0

[1005]
ParameterName=COB-ID SYNC message
ObjectType=0x07
DataType=0x0007
AccessType=rw
DefaultValue=0x80000080
PDOMapping=0

[1006]
ParameterName=Communication / Cycle period
ObjectType=0x07
DataType=0x0007
AccessType=rw
DefaultValue=10000
PDOMapping=0

[OptionalObjects]
SupportedObjects=3
1=0x1008
2=0x1009
3=0x100A

[1008]
ParameterName=Manufacturer device name
ObjectType=0x07
DataType=0x000A
AccessType=const
DefaultValue=RobotJoint-6DOF
PDOMapping=0

[1009]
ParameterName=Manufacturer hardware version
ObjectType=0x07
DataType=0x000A
AccessType=const
DefaultValue=1.0.0
PDOMapping=0

[100A]
ParameterName=Manufacturer software version
ObjectType=0x07
DataType=0x000A
AccessType=const
DefaultValue=2.1.0
PDOMapping=0

[ManufacturerObjects]
SupportedObjects=3
1=0x2000
2=0x2001
3=0x2002

[2000]
ParameterName=Joint position target
ObjectType=0x07
DataType=0x0004
AccessType=rw
DefaultValue=0
PDOMapping=1

[2001]
ParameterName=Joint position actual
ObjectType=0x07
DataType=0x0004
AccessType=ro
DefaultValue=0
PDOMapping=1

[2002]
ParameterName=Joint velocity limit
ObjectType=0x07
DataType=0x0006
AccessType=rw
DefaultValue=1000
PDOMapping=1

分析:

  • 0x1000(设备类型):值 0x00010192 表示 CiA 402 兼容设备(设备类型高字节 0x01 = 运动控制设备)
  • 0x1001(错误寄存器):可映射到 PDO,用于实时监控
  • 0x2000(关节目标位置):INT16 类型,可 PDO 映射,用于实时控制
  • 0x2002(速度限制):UINT16 类型,可 PDO 映射,用于安全保护

子对象索引规则

对于 ARRAY 和 RECORD 类型:

  • sub0:永远表示"元素个数"或"字段个数"
  • sub1~subN:具体元素/字段

例如 0x1003(标准错误记录)有 8 个子索引:

  • 0x1003sub0 = 已记录错误数量(UINT8)
  • 0x1003sub1 ~ 0x1003sub8 = 具体的错误码(UINT32)

EDS 文件验证

可以使用以下工具验证 EDS 文件:

  • CANOpen Editor(CANFestival 附带)
  • CANopenNode 自带工具
  • 本系列的示例 4:EDS 解析器(见下文)

总结

维度说明
格式INI 文件
规范CiA 306
核心节DeviceInfo, MandatoryObjects, OptionalObjects, ManufacturerObjects
对象类型VAR(0x07), ARRAY(0x08), RECORD(0x09)
数据类型INTEGER8/16/32, UNSIGNED8/16/32, REAL32/64, VISIBLE_STRING
访问类型ro, rw, wo, rwr, rwpre, const
PDO 映射0=否, 1=是
如果这篇文章对你有帮助,欢迎请我喝杯咖啡 ☕
Cygnus Yang 支付宝支付宝
Cygnus Yang 微信微信