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=43. [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=04. [OptionalObjects]
可选对象:设备可以选择实现的对象。
[OptionalObjects]
SupportedObjects=3
1=0x1008
2=0x1009
3=0x100A5. [ManufacturerObjects]
制造商特定对象:由设备制造商自定义的参数。
[ManufacturerObjects]
SupportedObjects=2
1=0x2000
2=0x2001对象类型编码(ObjectType)
| 值 | 类型 | 说明 | 示例 |
|---|---|---|---|
| 0x00 | NULL | 空类型 | – |
| 0x07 | VAR | 单个变量 | 0x1000 设备类型 |
| 0x08 | ARRAY | 数组(相同类型的多个值) | 0x1003 标准错误记录 |
| 0x09 | RECORD | 记录(不同类型的多个字段) | 0x1018 制造商信息 |
关键区别:
- VAR:一个值,通过 sub-index 0 访问
- ARRAY:sub-index 0 = 元素个数,sub-index 1~N = 各元素(类型相同)
- RECORD:sub-index 0 = 字段个数,sub-index 1~N = 各字段(类型不同)
数据类型编码(DataType)
| 值 | 类型 | 大小 | 说明 |
|---|---|---|---|
| 0x0001 | BOOLEAN | 1 bit | 布尔值 |
| 0x0002 | INTEGER8 | 8 bit | 有符号 8 位整数 |
| 0x0003 | INTEGER16 | 16 bit | 有符号 16 位整数 |
| 0x0004 | INTEGER32 | 32 bit | 有符号 32 位整数 |
| 0x0005 | UNSIGNED8 | 8 bit | 无符号 8 位整数 |
| 0x0006 | UNSIGNED16 | 16 bit | 无符号 16 位整数 |
| 0x0007 | UNSIGNED32 | 32 bit | 无符号 32 位整数 |
| 0x0008 | REAL32 | 32 bit | IEEE 754 单精度浮点 |
| 0x0009 | REAL64 | 64 bit | IEEE 754 双精度浮点 |
| 0x000A | VISIBLE_STRING | 可变 | 可见字符串(ASCII) |
| 0x000B | OCTET_STRING | 可变 | 字节串 |
| 0x000C | UNICODE_STRING | 可变 | Unicode 字符串 |
| 0x001A | DOMAIN | 可变 | 大数据块 |
访问类型(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=是 |
如果这篇文章对你有帮助,欢迎请我喝杯咖啡 ☕
支付宝
微信