尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

EtherCAT从站开发:用Excel批量生成LAN9252的XML配置

发布时间:2026/9/29 15:52:44

资讯中心
01
ARTICLE

EtherCAT从站开发:用Excel批量生成LAN9252的XML配置

EtherCAT从站开发:用Excel批量生成LAN9252的XML配置
做 EtherCAT 从站开发绕不开 LAN9252 这颗片子。芯片本身是好东西内部集成了 EtherCAT 从站控制器的全部硬件逻辑外部 MCU 通过 SPI 接口读写寄存器就能把整个从站撑起来。但真正让人头疼的从来不是芯片而是配套的协议栈工程怎么收敛SSC 工具确实能帮你生成一大半代码可剩下的对象字典、PDO 映射、同步管理参数依然是一堆让人头皮发麻的表格。手动填过一次 100 点以上的 IO 映射之后我彻底倒向了“用 Excel 批量生成 XML”这条路。这篇文章就是我实际项目里踩了一轮坑之后沉淀下来的完整做法。主要围绕三件事展开一是为什么用 SSC 工具搭 LAN9252 从站工程二是如何用 Excel 把 IO 映射表批量转成可被 SSC 解析的 XML三是在整个链路里最容易翻车的 XML 编码、对象字典、Sync Manager、FMMU 这些细节。适合正在做 EtherCAT 从站开发、被 0x6000/0x1A00/0x1600 这些地址绕晕的工程师参考也适合想从主站侧反向理解 PDO 映射的入门读者。1. 为什么我要用Excel来配LAN9252的IO映射1.1 LAN9252从站开发的基本路径LAN9252 在 EtherCAT 从站里的角色很明确它不跑应用逻辑只负责处理 EtherCAT 通信帧。主站发过来的报文在芯片内部经过 FMMU 单元完成逻辑地址到本地物理地址的映射数据落到过程数据 RAM 里外部 MCU 再通过 SPI 或 SQI 接口把这些数据读走同时把自己采集的 IO 状态写回 RAM由芯片拼装成回程帧发给主站。所以开发一套完整的从站硬件设计只是一部分更重的是软件协议栈。实际开发路径一般是下面几步用 SSC 工具Slave Stack Code官方从站协议栈代码生成工具选择 LAN9252 和对应的 MCU 型号比如 STM32F405、AT32F435 等生成初始工程。在 SSC 的图形化界面里配置对象字典、PDO 映射、邮箱通信CoE/SoE、分布式时钟 DC、同步管理器 SM 和 FMMU 数量。把生成的协议栈代码移植到自己的 IDE 工程里和应用逻辑一起编译。写入 LAN9252 外挂的 EEPROM配置厂商 ID、产品码、SII 信息等。用主站TwinCAT、IGH、汇川 PLC 等扫描总线验证从站能否正常进入 OP 状态。这个流程里第 2 步是最繁琐也是最容易出错的。因为 SSC 的界面虽然友好但每一个 PDO 映射项都要手动添加IO 一多工作量立刻上来。而且这些配置最终会序列化到 ESI XML 文件里如果主站加载这个文件时解析失败整个从站连扫描都过不去。1.2 手工填PDO映射的切肤之痛简单场景项目需要 16 路数字输入、16 路数字输出、8 路模拟输入和 4 路模拟输出。按常规设计数字量可以打包成两个对象模拟量每个通道单独一个子索引。这时候你至少需要维护4 个输入对象数字输入包、模拟输入通道组等对应 0x6000 系列3 个输出对象对应 0x7000 或 0x6800 系列至少 2 个 PDORxPDO 和 TxPDO每个 PDO 里塞若干映射项每个映射项要写对象索引、子索引、数据长度三个字段。SSC 工具里点开 PDO Mapping 页面看到的是一行行空白表格Add 一个选索引选手子索引选 bit 长度保存再 Add 下一个。几十个映射项填下来眼睛都花了。更别提中途甲方改需求把模拟量通道数量从 8 路改成 12 路你又得重新返工一遍。这种机械重复操作有几个隐藏风险。一个是人工填错比如子索引写重复了、bit 长度和实际数据类型对不上。另一个是修改之后SSC 界面里的对象字典、PDO 映射、SM 缓存三方数据不一致最后导出的 XML 文件带着“内伤”主站解析时不会告诉你哪里逻辑不对只会给一个冷冰冰的“PDO configuration invalid”。我当时的第一反应是能不能像写配置表一样把 IO 映射需求整理成一张 Excel 表格由程序自动生成 XML 片段试了几天之后这套流程被彻底固定下来了效果非常稳。说白了手工填 PDO 映射就像搬家时一件一件搬箱子又累又容易漏Excel 批量生成相当于提前盘点货物、写好装箱清单再统一打包发货效率和准确率都高一个量级。2. 方案整体设计SSC出代码Excel出XML2.1 方案分工谁负责干什么整套方案里三个工具各有分工谁也不替代谁SSC 工具负责生成协议栈代码、校验配置、维护工程结构。它是从站软件的主心骨所有 EtherCAT 协议相关代码都从这里产出。Excel负责把 IO 映射关系表格化、批量化。它不直接生成可运行的代码但它生成的 XML 片段是 SSC 工程和主站识别从站能力的中间介质。XML 文件ESI 文件是数据和配置的载体。Excel 表格最终要转成规范的 XML 节点SSC 导入这个 XML 时才能正确重建对象字典和 PDO。主站软件读的也是这份 XML。用这么一套组合核心逻辑在于把“密集的、结构化的重复数据”交给表格工具把“语法和语义校验”交给 SSC把“协议解析”交给主站。每个环节只做自己最擅长的事。需要注意的是SSC 工具本身也提供对象字典的导入导出功能很多工程师直接用文本编辑器改 XML改完再导回 SSC。这个方法不是不行但纯手工在 XML 里定位标签、写索引非常容易出结构性问题。Excel 至少能利用筛选、排序、条件格式把数据整理得明明白白改起来有据可循。2.2 ESI XML是什么为什么总在这里卡住ESIEtherCAT Slave Information文件是从站对主站的“自我介绍”。主站软件扫描到从站后第一件事就是根据 EEPROM 里的厂商 ID、产品码、产品版本去本地配置目录里找对应的 ESI 文件。如果匹配上了就按照里面的对象字典和 PDO 定义去建立过程数据映射匹配不上或文件解析失败从站直接显示“Unknown Device”。ESI XML 文件里承载的内容大致包括设备信息厂商名、设备名、版本、Group 等;对象字典定义从 0x1000 到 0xFFFF 的所有 CoE 对象;PDO 映射定义RxPDO主站到从站和 TxPDO从站到主站的映射条目;同步管理器和 FMMU 相关配置;DC 分布式时钟能力和参数;EtherCAT 主站解析 XML 的时候要求文件必须同时满足三个层面的要求语法层面well-formed标签配对正确不能有非法字符编码必须是主站能识别的格式。结构层面节点顺序和 schema 定义一致Index、SubIndex、数据类型这些属性的取值有严格约束。语义层面PDO 映射项指向的对象必须真实存在于对象字典里数据类型和 bit 长度要匹配Sync Manager 的配置要和 PDO 方向吻合。前两个问题比较容易被发现因为 XML 解析器在加载阶段就会报错。最坑的是第三个层面语法和结构都合法但逻辑矛盾主站加载后不会拒绝解析而是在运行阶段表现异常比如数据错位、无法进入 OP 状态、看门狗超时。这也是为什么后来我把注意力重点放在语义一致性的检查上。2.3 Excel表格如何设计映射表既然要用 Excel 做数据源表格设计就得提前规划好。我常用的工作表结构如下列字段示例说明A方向InputInput 表示主站到从站Output 表示从站到主站B对象索引0x6000对象字典索引用四位十六进制表示C子索引01对象的子索引00 一般作为计数或保留D数据名称DI_Channel_01信号用途方便写注释E数据类型BOOL决定 bit 长度BOOL 对应 8bitFBit长度8映射项占用长度必须和数据类型匹配G所属PDORxPDO_1这条映射项挂在哪个 PDO 下H备注接按钮输入附加说明这样一个表的好处是所有映射关系一目了然后期要加通道直接复制几行改编号即可。顺便说一句如果数据是从别的系统复制过来的Excel 经常会把数字识别成文本格式单元格左上方出现绿色的小三角。这种看起来不影响显示但后面用 DEC2HEX、VLOOKUP 这类函数时结果完全不对。处理办法是选中整列后点击感叹号按钮选择“转换为数字”或者用 N() 函数包一层。这个细节必须留意否则后面生成的 XML 索引全是错的。3. 实操从Excel表格到可用的从站工程3.1 第一步把IO分配表用Excel整理规整假设项目需求是 16 路 DI、16 路 DO、8 路 AI12bit 精度按 16bit 存储、4 路 AO。我一般把数字量和模拟量分开规划对象字典数字输入统一放在 0x6000 对象下子索引 0x01~0x10 对应 16 路数字输出统一放在 0x7000 对象下子索引 0x01~0x10 对应 16 路模拟输入从 0x6400 开始每个通道一个子索引模拟输出从 0x6800 开始每个通道一个子索引。在 Excel 里录入时方向列和所属 PDO 列要提前填好。比如 0x6000 和 0x6400 都是 Input挂在 TxPDO_1 下0x7000 和 0x6800 是 Output挂在 RxPDO_1 下。这样后面自动生成 XML 时可以通过筛选分块处理避免一条条去改。我习惯在表的最右边增加一个辅助列用公式拼出每个映射项对应的 XML 注释方便最后核对。比如CommentD2/Comment这样生成 XML 的时候注释也一并带出来调试时能直接看懂每一段映射对应的是什么信号。3.2 第二步用公式批量合成XML节点把映射表填好之后最关键的操作来了用 Excel 公式把每一行数据拼成 XML 节点。列 B 是“对象索引”列 C 是“子索引”列 F 是“Bit长度”列 G 是“所属PDO”。我在第 J 列写一个拼接公式PDO Index0xDEC2HEX(GA,4) /不过更常用的是直接生成 PDO 映射项的完整 XML 块。把 PDO 的 Index、映射条目的 Index、SubIndex、BitLen 都拼出来MappedEntryIndex0xTEXT(B2,0000)/IndexSubIndex0xDEC2HEX(C2,2)/SubIndexBitLenF2/BitLen/MappedEntry这里有两个细节容易被坑。第一Excel 里DEC2HEX函数要求参数不能大于 549755813887但对象索引一般都在 0xFFFF 以内所以没问题第二TEXT(B2,0000)会把数字格式化成四位数文字但如果 B2 本身就是文本类型且已经显示成十六进制再套函数反而出错。所以前面说“把数据转换为真数字”真的很关键。公式写好后直接往下拖几十行映射条目几秒钟就出来了。然后把“所属 PDO”分组筛选把每个 PDO 下的映射节点单独复制到文本编辑器里准备嵌入完整的 ESI 文件。如果项目更大几百个 IO公式法依然可行只是后缀校验容易看漏。这种情况下可以写一段简单的 VBA 宏循环遍历每一行拼接字符串并写入 txt 文件。逻辑不复杂但一次成型效率和可靠性更高。代码大致如下Sub GenerateXmlNodes() Dim i As Long Open C:\Temp\pdos.txt For Output As #1 For i 2 To Range(A Rows.Count).End(xlUp).Row Print #1, MappedEntryIndex0x Format(Cells(i, 2), 0000) _ /IndexSubIndex0x Format(Cells(i, 3), 00) _ /SubIndexBitLen Cells(i, 6) /BitLen/MappedEntry Next i Close #1 End Sub宏生成的只是映射条目PDO 的外层结构和对象字典定义还是需要嵌到 ESI 文件里。别指望 Excel 能生成完整的 ESI它没那个上下文。3.3 第三步把XML喂给SSC工具并生成工程SSC 工具创建工程时可以直接“Load ESI File”来导入已有的从站信息文件。我的操作顺序一般是先让 SSC 基于 LAN9252 和当前 MCU 生成一个空白模板工程。用 File - Save 把模板工程里默认的 ESI XML 导出来。用记事本或 Notepad 打开这个 XML找到DictionaryList区域在对象字典末尾追加我需要的 0x6000、0x7000、0x6400、0x6800 对象定义。再找到 RxPDO 和 TxPDO 分布定义的地方把 Excel 生成的 MappedEntry 节点逐个插入对应 PDO 下面。保存 XML 文件回到 SSC用 Load ESI File 重新导入。如果导入成功对象字典页面和 PDO 映射页面会自动显示我加的内容。检查一遍确认数据没有错位。这个过程里SSC 工具能不能正确解析 XML 是关键。如果 XML 有问题SSC 会在加载时报错提示第几行第几列有异常。这时不要急着改 XML先回到 Excel 检查数据源把对应行的公式输出和拼好的 XML 片段对比一下往往很快就能找到问题。3.4 第四步编译验证与主站对接SSC 生成协议栈代码之后还要把代码放到自己的工程里编译。这一步我一般会先留一个最简版的从站应用只做初始化、状态机循环和 SPI 通信不接入真实 IO。先把协议栈跑通再加应用逻辑。编译烧录完成后用主站软件验证。如果你手头是 TwinCAT把 ESI 文件拷贝到C:\TwinCAT\3.1\Config\Io\EtherCAT目录下然后激活配置扫描 I/O 设备。如果从我之前写的流程走过来从站名字应该能正常识别并且能开关状态机从 INIT 到 PREOP再到 SAFEOP最后到 OP。如果某个环节卡住优先检查对象字典和 PDO 是否和主站解析出来的 ESI 一致。如果用的是 Linux 主站比如在 RK3568 这类板子上跑 EtherCAT IGH操作方式略有不同。IGH 主站启动后会从/opt/etherlab/etc或指定的 ESI 目录加载从站信息文件通过ethercat slaves命令能看到从站是否被识别。最常见的问题是 ESI 文件版本和 EEPROM 里的产品版本不匹配IGH 会直接显示版本不兼容。4. XML解析避坑点与排查实录4.1 编码与BOM最隐蔽的第一坑第一次用 Excel 配合 XML 时我花了一晚上查“SSC 工具无法解析 XML”的问题。错误提示只有一句话“XML parsing failed”没有任何行号。后来用 Notepad 打开 XML 才发现Excel 另存出来的文件是 UTF-8 with BOM 格式而 SSC 工具内部的 XML 解析器要求的是 UTF-8 no BOM。BOM 是文件开头多出来的三个字节 EF BB BF多数现代浏览器能容忍但老旧的解析器会直接报错。处理办法很简单用 Notepad 打开文件在“编码”菜单里选择“转为 UTF-8 编码无 BOM”保存再导入 SSC。从那以后这套流程里所有 XML 文件我都会确认一遍编码包括最终发给主站的 ESI 文件。如果你习惯用 VS Code也可以直接点击右下角的编码状态栏选择“Save with Encoding”为 UTF-8。另外提醒一句不要为了省事把 XML 存成 UTF-16 或其他编码。EtherCAT 社区和各大主站厂商对 ESI 文件的编码要求就是 UTF-8别特立独行。4.2 对象字典与PDO映射的结构性错误第二种坑比编码隐蔽得多属于“结构合法但语义不对”。常见的有这么几类索引冲突用户对象定义用了 0x1400 之类的保留区或者和厂商另作他用的对象重叠导致映射混乱。子索引 00 的含义在 EtherCAT 对象字典里子索引 00 经常被用作数组长度或通道数量。如果你定义了 0x6000 有 16 个子索引但子索引 00 没设置或者设置错误主站可能会认为这个对象是空的。映射项引用的对象不存在PDO 的 MappedEntry 里写了Index0x6400/Index但实际上 DictionaryList 里根本没有 0x6400 这个对象主站直接报错。BitLen 和数据类型不匹配对象定义是 UINT16PDO 映射项 BitLen 却写成了 8这样协议栈和主站对长度的理解不一致轻则数据截断重则状态机进不了 OP。这些问题如果靠眼睛去查几千行的 ESI 文件效率极低。我的做法是在 Excel 里加两个辅助表一个是对象字典清单一个是 PDO 映射列表然后用COUNTIF和VLOOKUP做交叉校验确保每个 PDO 里引用的 Index 都在对象字典清单里BitLen 也和数据类型一致。这套校验做完以后再生成 XML基本能把 90% 的结构性错误提前挡在门外。4.3 Sync Manager和FMMU配置核对EtherCAT 从站的通信靠同步管理器Sync Manager和工作内存管理单元FMMU。SM0/SM1 一般用于邮箱通信SM2 用于主站到从站的过程数据RxPDOSM3 用于从站到主站的过程数据TxPDO。如果 ICC 配置里 SM2 和 SM3 的通道方向搞反了主站那边会看到数据完全对不上。这里面有个常见的“新手必踩”点很多人只改了 PDO 映射忽略了 SM 配置。其实 SM 是对应 PDO 的物理通道PDO 是逻辑描述两者必须一致。比如我用 Excel 生成的是“输出 0x7000 挂在 RxPDO_1”但 SSC 工程里 SM2 绑定的却是 TxPDO这就产生了矛盾。主站加载 ESI 时可能因为这个直接断定从站配置无效。FMMU 则负责把主站发布的逻辑地址映射到从站本地 RAM。LAN9252 内部集成了多个 FMMU 单元SSC 生成的工程一般会默认分配几个。但如果你把过程数据拆分成很多 PDO 组每组都需要独立 FMMU数量不够就会出问题。我和我同事碰到过模拟量点数比较多、把 AI 和 DI 拆成了 4 个 TxPDO 的情况结果从站一直无法进入 OP后台一看是 FMMU 耗尽。最后把多个 PDO 合并成一个 PDOFMMU 数量就够用了。所以配置完成后务必去 SSC 的“Sync Manager”和“FMMU”页面核对两件事SM 的方向是否和 PDO 方向一致FMMU 数量是否满足 PDO 映射段数。4.4 主站侧“识别不到从站”的排查清单主站加载 ESI 失败现象千奇百怪有的报“Device not found”有的是设备名能显示但无法激活还有的是能激活但数据全乱。我把这几种常见情况整理成了一张速查表现象优先检查解决办法主站扫描不到从站EEPROM 里的厂商 ID、产品码是否匹配重新烧写 LAN9252 EEPROM确保 SII 信息正确从站能识别但报 ESI 版本不匹配ESI 文件版本号和 EEPROM 产品版本不一致修改 ESI 文件的版本字段或重新烧写匹配版本能进 PREOP 但进不了 SAFEOPPDO 映射项引用了不存在的对象回 Excel 校验对象字典清单重新生成映射项能进 SAFEOP 但进不了 OPSM 配置与 PDO 方向不一致检查 SM2/SM3 方向和 FMMU 分配重新导入 SSC数据能通但数值错位BitLen 和实际数据类型不匹配全局检查映射表统一数据类型定义TwinCAT 扫描时设备名显示空白ESI 文件保存格式异常用 Notepad 另存为 UTF-8 无 BOM这个表现在被我打印出来贴在工位上每次做新项目都要过一遍。别小看这些细节EtherCAT 从站调试里 80% 的时间都耗在这里尤其当你同时用汇川 PLC 做主站、又用 IGH 做验证主站的时候两个主站对 ESI 的校验严格程度还不完全一样经常是一边通过一边报错最后发现是 XML 里一个无伤大雅的格式差异。再补一个独家心得我会在 Excel 工作簿里把“版本修订记录”作为一个隐藏 Sheet记录每次映射表改了哪些对象、谁改的、哪天改的。项目移交和生产追溯的时候这套记录比什么都管用。毕竟从站开发是个迭代活不是一次配置完就一劳永逸甲方改需求、换 IO 模块、加通信协议板都是常态。有了清晰的配置表和历史记录再碰上新需求半天就能改完不用再从头“手动填坑”了。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。