基于 Excel 驱动的 Simulink 硬线 IO 模型自动生成工具——原理、内容说明与使用指南
原代码地址:https://www.goofish.com/item?spm=a21ybx.personal.feeds.1.42c26ac2oKxZr3&id=1079646611044&categoryId=50023914
面向 HIL /嵌入式软件测试工程师与 MATLAB/Simulink开发者。本文完整介绍一套由 Excel引脚表一键驱动、自动生成 Simulink硬线 IO模型的工具:讲清它的原理、每个字段/文件的“内容说明”,以及从填表到生成、再到结构校验的“使用说明”。文中同时给出顶层与端子内部两张原理图的读图说明。
1. 我们在解决什么痛点
在硬件在环(HIL) 与控制器回环测试里,经常要搭建一套硬线(引脚级) IO模型,把真实 ECU 的大量引脚——模拟量、数字量、PWM、电阻型传感器、CAN/LIN/FlexRay/以太网等——在 Simulink 里建模,用于:
- 信号与 NI 板卡通道的映射、收发路由;
- 自动化测试中的“手动注入 / 联调 / 故障注入”;
- 作为部署目标(VeriStand / 代码生成)的IO映射全量清单。
手工搭会踩一堆坑:
- 信号量大(几十上百路、多 ECU / 多类型),重复劳动、易漏;
- 引脚与 ECU / 子模型 / 块名难以整齐统一;
- 端子块内部连线布局丑、块重叠、名称被截断,交付观感差、易错;
- 后期新增通讯类型(刚冒出个电阻类型、冷门 K 线)要动一大片代码;
- 方案文本与交付实物“两张皮”,一致性全靠人肉保证。
本工具的思路朴素而有效:把“信息”(引脚清单)与“生成规则”(模型代码)分离。用一张受控的 Excel 引脚表当唯一输入,一键生成整套 IO 模型。信息增改几乎不碰代码,这才做到“Excel 即配置、Excel 即说明书”。
2. 总体设计思想
一句话:一个输入(Excel) →一个解析(引擎) →一个生成器(建模) →一轮校验/布局。
ECU_Pin_Config.xlsx ← 唯一“用户输入”:Overview 总览 + 各类型分表
│
▼
ExcelAnalysis.m ← 解析:读 Overview、按类型自动发现、读各分表附加列(Extra)
│ struct Signals
▼
IOMDLCreatFun.m ← 生成:建顶层模型、两大 IO 网络、ECU→端子、端子内部接线
│
▼
IO_Model.slx ← 输出模型;另可由 test_core 一键生成 + update 编译
四个理念基点:
- “类型自动发现”(核心):解析器不靠硬编码类型表,而是扫 Overview,把实际出现的SignalType收集起来,再去同名分表读该类型附加列 => 新类型加在 Excel 里就被自动认,主流程零改动。
- 信息与规则分离:业务字段都在 Excel;模型结构 / 规则都在 .m。改信号不碰代码,改结构才动 .m。
- 端子统一“手自动结构”:每个端子内部都含手动值+手/自动Switch + (按需)增益/限幅+ Convert +输出引脚,HIL 调试顺手。
- 布局交给 Simulink:端子建完统一调 Simulink.BlockDiagram.arrangeSystem 自动排版,绕开“手摆坐标 → 交叉 / 重叠 / 被截断”。
3. 输入格式:Excel 引脚表(ECU_Pin_Config.xlsx)
一张工作簿拆成多张 Sheet,每张代表一种信号类型,另有一张总览 Overview。
Overview ——总览 /自动发现入口
No | SignalName | ECU | SignalType | Direction | DataType | SampleTime | Channel | PortName | Remark
- 作用 1:作为全局信号清单(谁、在哪、怎么走);
- 作用 2:登记SignalType触发“自动发现”,决定读哪张分表;
- 约定:Overview 的 SignalType与该类型分表名一致、区分大小写。
各类型分表 ——存“附加列”:公共列 + 该类型特有附加列;分表与 Overview 用SignalName关联。
现支持 +预留类型概览:
类别 | 类型 | 附加列(分表层字段) |
总线 | Ethernet/CAN/LIN/PSI5/Sent/PWM/Flexray | 各自 DBC / 波特率 / 帧格式 / 节点等 |
模拟硬线 | AIAO | Vmin, Vmax, LimitMin, LimitMax, Gain, Offset |
数字硬线 | DIDO | ActiveLevel, Pull(上/下拉), Logic |
电阻传感 | RES | SensorKind, RminOhm, RmaxOhm, Curve, ReferenceVoltage(V), LimitMin, LimitMax, Gain, Offset |
预留空模板 | KLine / Modbus485 / RS232 / LVDS | 已在其空白分表建好附加列表头 |
4. 内容说明:字段字典与填写规范
这一节像一本“词典”,把你要填的单元格 / 文件含义逐项讲清楚 ——弄明白再动手填。