4. 必选节[DeviceInfo]:设备名称、厂商ID、产品代码、版本号、通信参数
好,咱们进入实战的第一个硬骨头——[DeviceInfo] 节。这是 EDS 文件的身份证,也是设备上电后主站第一个读取的区块。我见过太多因为这里填错导致设备无法识别的案例,说白了,这节要是错了,后面写得再漂亮也没用。
4.1 [DeviceInfo] 到底长什么样?
先看一个真实项目里的例子。这是我几年前调试一台伺服驱动器时用的 EDS 片段:
[DeviceInfo]
VendorName=MyCompany
VendorId=0x00000123
ProductName=ServoDrive-200
ProductNumber=SD200-04
ProductType=0x00000012
ProductId=0x00000001
RevisionNumber=0x00010001
OrderCode=SD200-04-ETH
BaudRate_10=1
BaudRate_20=1
BaudRate_50=1
BaudRate_125=1
BaudRate_250=1
BaudRate_500=1
BaudRate_800=1
BaudRate_1000=1
SimpleBootUpMaster=0
SimpleBootUpSlave=0
嗯,这里要注意——每个字段都有严格的格式和取值范围。我刚开始做 EDS 时,以为 VendorId 随便写个数字就行,结果设备死活连不上主站。后来才发现,厂商 ID 必须向 CiA 协会申请,不能自己编。
4.2 核心字段逐个拆解
咱们把最关键的几个字段拎出来说说。我习惯把它们分成三组:身份信息、产品标识、通信能力。
| 字段名 | 含义 | 格式要求 | 避坑点 |
|---|---|---|---|
| VendorName | 厂商名称 | 字符串,最长 64 字符 | 不要用中文或特殊符号,主站可能不识别 |
| VendorId | 厂商唯一 ID | 32 位十六进制,0x 开头 | 必须从 CiA 获取,不能自编 |
| ProductName | 产品名称 | 字符串,最长 64 字符 | 建议与产品标签一致 |
| ProductNumber | 产品型号 | 字符串,最长 64 字符 | 区分大小写,主站会精确匹配 |
| ProductId | 产品代码 | 32 位无符号整数 | 同一厂商内唯一 |
| RevisionNumber | 版本号 | 32 位,高 16 位主版本,低 16 位次版本 | 我见过有人写成 1.0,这是错的 |
| BaudRate_xxx | 支持的波特率 | 0 或 1 | 至少支持一种,否则设备无法上线 |
关键原则:VendorId + ProductId + RevisionNumber 三个字段组合起来,必须能唯一确定一台设备的固件版本。主站就是靠这个三元组来匹配 DCF 文件的。
4.3 版本号的正确写法
RevisionNumber 这个字段坑最多。它是个 32 位整数,不是字符串。高 16 位是主版本号,低 16 位是次版本号。
举个例子:
- 版本 1.0 → 0x00010000
- 版本 1.1 → 0x00010001
- 版本 2.0 → 0x00020000
- 版本 2.15 → 0x0002000F
我曾经接手过一个项目,前任工程师把 RevisionNumber 写成了 0x0001000A,意思是 1.10。但主站解析出来是 1.0.0.10,跟 DCF 里的 1.10 对不上,导致每次上电都要手动匹配。后来我改成 0x0001000A 的十进制写法 65546,问题才解决。
注意:RevisionNumber 不要用小数点分隔的字符串,比如 "1.0.0.1"。EDS 规范要求的是整数。如果你用字符串,主站会直接忽略这个字段。
4.4 通信参数:波特率与启动模式
BaudRate_xxx 系列字段决定了设备能在哪些波特率下工作。每个字段的值只能是 0 或 1:
- 1 = 支持该波特率
- 0 = 不支持
常见的波特率有:10 kbps、20 kbps、50 kbps、125 kbps、250 kbps、500 kbps、800 kbps、1 Mbps。我建议至少把 125k、250k、500k 这三个打开,因为这是工业现场最常用的。
另外还有两个启动模式字段:
- SimpleBootUpMaster:设备是否支持作为主站简单启动
- SimpleBootUpSlave:设备是否支持作为从站简单启动
大部分从站设备把 SimpleBootUpSlave 设为 1 就够了。我见过有人两个都设成 1,结果主站以为设备有主站能力,分配了错误的配置。
4.5 知识结构图:DeviceInfo 的组成
下面这张图帮你理清 [DeviceInfo] 节里各个字段的归属关系:
4.6 实战避坑清单
最后,我把自己这些年踩过的坑整理成一份清单,你写 EDS 时对着检查一遍:
- VendorId 不要自己编——必须从 CiA 获取。我曾经图省事用了 0x00000001,结果跟某知名品牌的 ID 冲突了,调试了三天才发现。
- RevisionNumber 用整数,别用字符串——0x00010001 是对的,"1.0.0.1" 是错的。
- ProductName 和 ProductNumber 区分大小写——主站匹配时是精确匹配,大小写不一致会导致识别失败。
- BaudRate 至少开三个——125k、250k、500k 是工业现场标配,只开一个 1Mbps 的话,老旧主站可能连不上。
- SimpleBootUpSlave 别乱开——从站设备只设 Slave=1,Master 保持 0。
- OrderCode 可选但建议填——方便现场工程师通过订货号直接找到备件。
我的小技巧:写完 [DeviceInfo] 后,用 EDS 校验工具跑一遍。我习惯用 CiA 官方的 EDS Checker,它能检查出字段缺失、格式错误、取值范围越界等问题。别等到上现场才发现,那时候改起来就麻烦了。