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] 节里各个字段的归属关系:

DeviceInfo 节字段结构图 DeviceInfo 节 身份信息 产品标识 通信能力 VendorName VendorId ProductName ProductNumber ProductId RevisionNumber BaudRate_xxx (8个) SimpleBootUpMaster SimpleBootUpSlave 💡 核心三元组:VendorId + ProductId + RevisionNumber 主站通过这三个字段唯一确定设备固件版本,匹配对应的 DCF 配置文件。 RevisionNumber 是 32 位整数,高 16 位主版本,低 16 位次版本,不要写成字符串。 BaudRate 至少支持 125k、250k、500k 三种,否则设备可能无法在主流网络中上线。

4.6 实战避坑清单

最后,我把自己这些年踩过的坑整理成一份清单,你写 EDS 时对着检查一遍:

  1. VendorId 不要自己编——必须从 CiA 获取。我曾经图省事用了 0x00000001,结果跟某知名品牌的 ID 冲突了,调试了三天才发现。
  2. RevisionNumber 用整数,别用字符串——0x00010001 是对的,"1.0.0.1" 是错的。
  3. ProductName 和 ProductNumber 区分大小写——主站匹配时是精确匹配,大小写不一致会导致识别失败。
  4. BaudRate 至少开三个——125k、250k、500k 是工业现场标配,只开一个 1Mbps 的话,老旧主站可能连不上。
  5. SimpleBootUpSlave 别乱开——从站设备只设 Slave=1,Master 保持 0。
  6. OrderCode 可选但建议填——方便现场工程师通过订货号直接找到备件。

我的小技巧:写完 [DeviceInfo] 后,用 EDS 校验工具跑一遍。我习惯用 CiA 官方的 EDS Checker,它能检查出字段缺失、格式错误、取值范围越界等问题。别等到上现场才发现,那时候改起来就麻烦了。