
1. 同元软控这轮热度Modelica 和 MWorks 的牌面在哪同元软控启动上市的消息一出朋友圈里不少做仿真的同行都在转。有人问Modelica 和 MWorks 是不是终于可以“平替” Simulink 了我的回答偏保守短时间内在汽车圈Simulink 的地位没那么容易被动摇。这话不是泼冷水这些年做车辆控制系统仿真我见过太多把“换个建模工具”想得太简单的项目最后都默默回滚了。先说同元软控手里的牌面。MWorks 的核心是 Modelica 语言实现的多领域物理建模环境这是一个开源语言标准不是某一家公司私有格式。Modelica 最大的特点是非因果建模数学上对应的是微分代数方程DAE系统。工程师不用手动把物理系统拆成输入输出信号流只要把电阻、电感、惯量、摩擦、流体阻力这些物理元件的方程连起来编译器会负责整理和求解。这对汽车行业意味着什么整车是机械、电气、热、液压、控制多个物理域耦合的系统。传统做法是在 Simulink 里手工搭建微分方程用传递函数、增益和积分器去“拼”。Modelica 的做法更接近“按物理对象搭积木”发动机、电机、减速器、冷却回路直接接线描述语言本身和物理原理的对应关系更直接。理念上确实比信号流建模更贴合系统级仿真。另外需要提一个容易被忽略的优点Modelica 模型是纯文本代码适合做 git 版本管理。打开仓库可以直接 diff 参数改动哪次改了摩擦系数、哪次改了散热面积清清楚楚。而 Simulink 的 .slx 虽然也能做版本管理但很多团队实际上只看到“模型变了”很难精准追踪单个参数的变更历史。MWorks 很早就把模型库、协同建模、模型复用放到核心位置这套理念在数字化研发语境下是成立的。但“理念先进”和“工程上离不开”之间隔着一条非常深的工具链鸿沟。下面我一步步拆开讲。1.1 Modelica 的“非因果”到底好在哪很多工程师第一次接触 Modelica 会问它和 Simulink 的核心差别是什么我用直流电机举一个简单的例子。Simulink 里的习惯是把电机写成电压输入、转速输出的传递函数G(s) K / (L*J*s^2 (R*J L*B)*s R*B K*Kb)然后顺着信号流方向画积分器、增益、加法器。注意这个过程中人脑已经做了一次代数化简方程物理含义被掩盖了大半。如果最终仿真曲线和台架数据对不上你往往很难判断是哪个参数写错了。Modelica 则直接写电气和机械的物理方程代码和物理对象几乎一一对应。电机模型就是电阻、电感、反电动势、转动惯量、阻尼这些部件的组合连接关系就是“导线接在端子上”不是“信号从输入流向输出”。仿真时你想观测哪个变量都行反向驱动也能转。这个建模自由度在复杂多物理域系统里非常值钱尤其是电池热管理、电机冷却、整车能量流这类涉及多个物理域耦合的场景。我在做电驱系统预研时就体会很深用 Modelica 搭一套“电池逆变器电机传动”的模型接口清楚物理参数可以直接填设计值而用 Simulink 的模块按信号流一个一个敲稍不留神就会出现代数环或者把功率方向和信号方向搞混。对做顶层概念设计的工程师来说非因果建模的思想可以少走不少弯路。1.2 为什么“模型资产化管理”值得被认真对待同元MWorks还有一个常被低估的价值就是模型资产化。很多公司花了大钱做仿真最后发现模型散落在个人电脑里参数写在 Word 文档里团队一换人就把模型做成“黑盒”。MWorks 通过 Modelica 文本化模型和模型库形式至少比私有二进制格式更容易做到集中管理、版本追踪和自动生成文档。但这就能撼动 Simulink 吗目前还不够。原因是模型资产化这件事Simulink 配合配置管理工具也能做很多车企已经用 Simulink Git/Subversion Requirements Toolbox 搭好了自己的资产体系。工具本身的“理念”想赢还得先过“既有流程已经稳定运转”这一关。所以我一直觉得国产仿真平台的机会是真实存在的但它的切入点不应该放在“替代 Simulink”这种口号上而应该在客户每天都会疼的具体场景里找到落脚点。这个话题我放到文章后半部分详细说。2. 汽车圈“忠诚”的真正根源Simulink 早已不是建模软件是流程基础设施说“死守”有点冤枉工程师。我们用 Simulink不是因为它完美而是因为从需求、算法、验证、代码生成到最终装车中间所有环节都已经被这套工具链填满了。换掉前端建模工具不是换一个编辑器而是把整条流水线拆掉重装。我见过很多新入行的同学吐槽 Simulink 界面陈旧、模块连线一团糟、仿真速度也不快。这些批评大多成立。但在量产项目里稳定性、可追溯性和生态成熟度优先级永远排在“界面好看”和“仿真快”前面。2.1 从一阶滤波到状态机工作日的每件小事都在这套环境里我做过很多电动车控制算法任务随便举一个例子驱动电机的电流环信号采样后要做一阶低通滤波滤掉开关管动作带来的高频噪声。在 Simulink 里这个模块有两种常规做法一是用 Continuous 库里的 Transfer Fcn写成1/(Ts*s1)二是用 Discrete 库里的 Discrete Filter给定采样时间和滤波系数。时间常数 TS 怎么选通常根据电流环控制频率、PWM 开关频率和传感器延时来定滤波器带宽一般要在控制带宽的 5 到 10 倍以上。这些经验不是哪本书上现成的而是老工程师一点一点试出来的全部沉淀在可用的 Simulink 模型里。项目周期紧张时我打开旧模型直接复制一个滤波模块改改参数就能用。这种把“老师傅的经验”变成“即插即用模块”的能力是团队效率的基石。类似的场景遍布每天的工作流用 Stateflow 画模式切换状态机用查表模块做扭矩标定用 Signal Builder 构造测试信号用 Simulink Test 跑回归用例用 Embedded Coder 生成 C 代码。模型在这里既是验证载体也是最终交付物整个软件实现链路都围绕它运转。2.2 第三方联合仿真的“默认语言”形成了巨大生态墙热词里能清楚看到这样一串关键词“carsim和simulink联合仿真”“amesim与simulink联合仿真”“四旋翼仿真滑模控制 simulink”“反激变换器变压器参数仿真”。表面看是用户搜索词实际反映的是跨学科工程界的一种默认共识市面上主流车辆动力学软件、液压/气动软件、电力电子仿真工具几乎都把 Simulink 作为默认或优先支持的主控环境。我自己做过 Carsim 车辆模型和 Simulink 控制算法的联合仿真流程很简单Carsim 里配好车辆参数生成 S-Function 或 FMU然后在 Simulink 里拖一个模块把油门、刹车、方向盘信号接上就算联通了。AMESim 做液压系统也有类似的无缝接口甚至在 AMESim 里点一下“导入 Simulink”模型就自动变成 Simulink 里的一个模块。这种生态效应是后来者最难复制的地方。它不是一家公司能单独提供的而是几十年里大量第三方软件商、硬件厂商、工程咨询公司共同形成的网络。你用了一个新工具意味着你需要说服所有合作伙伴也支持这个工具或者自己额外搭一层转换桥。现实点讲大部分项目团队没有这个资源去做这件事。2.3 招聘、教程和社区让“会用 Simulink”成为行业通用语言还有一个躲不开的现实人才市场。现在写招聘 JD只要能列出“熟练使用 Simulink/Stateflow”基本就相当于告诉应聘者“我们是正经做电控开发的”。应届生在课程设计里用过 Simulink工作后又在项目里继续使用十年经验的老工程师脑子里装的全是 Simulink 的模块库和调试技巧。B 站、Answers 社区、Stack Overflow 上Simulink 相关的问题和回答多得数不过来。遇到“为什么仿真步长没有减小”这类问题搜索一下马上有十几条经验贴。如果换成一个用户量很小的新平台遇到同样的问题可能只能在官方客服工单里等 24 小时。对项目倒排工期的人来说“搜得到答案”就是效率。3. 存量资产、数据字典与人才习惯为什么迁移不是换编辑器很多人把迁移困难简单归因于“习惯”我不完全同意。习惯的背后是巨大的沉淀成本细细拆开至少有三个方面存量模型、数据字典与标定体系、人员技能栈。3.1 模型积累的是公司知识不是一张原理图一个成熟的车企或 Tier1Simulink 模型库可能覆盖了电池管理系统、电机控制、热管理、底盘稳定控制的全部核心算法。这些模型经过了几代工程师的迭代每个查表背后都是一段实车标定的历史每个状态机里都藏着故障分析案例。尤其麻烦的是这类模型往往不是“干净”的里面充满各种“历史包袱”有的子系统用 Stateflow 写得极其曲折后来因为需求变更外层又套了一层逻辑有的信号命名已经和实际物理量脱节但文档里明确写了“别改改了对不上标定表格”。模型已经变成了公司知识的活地图换平台等于把所有地形重新测绘一遍。我做迁移评估时遇到过很现实的问题通过第三方工具把 Simulink 模型批量转换成 Modelica 模型数学上能复现部分行为但模型里的命名规范、自定义模块、Mask 封装、回调函数、配置参考集全部丢失。模型虽然从 A 平台到了 B 平台但“人的理解”没有跟过去。迁移完成不等于维护人员能用起来反而可能带来“看起来很像但不敢动”的新风险。3.2 数据字典一个 can.sldd 足以卡住整个项目这里我要专门说说 .sldd 这种文件。很多人刚接触 Simulink 时觉得数据字典是多余的流程负担实则它是大型模型的“户口本”。一个整车控制模型里CAN 信号名、信号位、字节序、换算系数、初始值、上下限、存储类型全部集中在字典文件里维护。我踩过一个很经典的坑从同事那里拿到一个模型双击打开就报错“找不到数据字典 can.sldd”或“找不到数据字典 hwa.sldd”。原因往往是同事换了目录、提交代码时漏传文件、或者同步工具把字典文件冲突成了老版本。如果你也遇到这个报错可以按下面的顺序排查先确认 can.sldd 文件是否真的在本地。如果在打开模型后执行Simulink.data.dictionary.open(can.sldd)手动把字典 attach 回模型如果字典文件已被改名或删除只能找 git/svn 历史恢复或者用Simulink.data.dictionary.create重建一个再把原模型里的 signal 对象和参数对象重新添加进去找到模型 Configuration Parameters 中的 Data Dictionary 属性检查引用路径是绝对路径还是相对路径。强烈建议改成相对路径否则换电脑后很容易再次中断遇到“自定义字典依赖另一个字典”的情况即字典套字典要先把底层依赖字典加载出来再加载上一层顺序乱了同样会报错。这个例子看起来小但它恰恰说明一个道理模型早就不是孤零零一张 .slx 文件而是和几十个字典、脚本、配置互相咬合的整体。迁移到新平台不只是把方块图搬走CAN 数据库、标定接口、存储类型、数据对象、注释规范所有层的东西都要一起搬。缺少任何一环哪怕模型能跑通后续的台架测试和实车联调也会喝一壶。3.3 招聘和培训技能栈与人才池的现实问题除开技术资产人才也是个硬约束。新平台意味着整个团队要重新学习一套建模范式Modelica 语法、求解器设置、代码生成配置每一项都有学习成本。对企业来说这不只是报销几门课的费用而是项目周期里实实在在的“战斗力空窗期”。我在选型讨论会上听过一个很直接的质疑“现在招十个会 Simulink 的工程师明天就能分两组干活。你推荐的平台我们整个团队都要重新学学完之后市面上能招到的后继者又有几个”这个问题其实比技术细节更难回答。工具替换的本质是改变公司的人力供给结构技术领先但没人会用照样进不了研发主线。4. 我的一次真实迁移试验Modelica 平台卡住的三道门槛光谈大趋势不够说我自己的预研经历。前两年我在一个项目里尝试把一套电动车整车能量管理模型向 Modelica 平台迁移目标是验证“能不能在顶层物理模型里直接用国产工具实现”。结果很有代表性每道坎都是后来团队可以提前做准备的。4.1 第一道门槛模型导入不是“打开文件”而是“重新考古”我们拆解原有 Simulink 模型时发现想要完整复用非常不现实。原模型里大量模块并不属于“物理模型”而是“控制策略”或“数据处理逻辑”。比如 Song 常用的 PID 控制器、低通滤波器、查表扭矩限制、状态机这些本质上是算法不是物理元件。把它们硬转成 Modelica 物理模型反而是削足适履。更麻烦的是Simulink 里大量子系统用 Mask 做了封装里面保存了参数回调和界面交互逻辑。转到 Modelica 后这些交互逻辑全部丢失维护工程师只能靠代码注释和计算书来理解参数含义。这个“重新考古”的时间成本经常被项目计划低估。我当时估算过一个中等规模的整车能量管理模型要做到“可维护迁移”耗时是重新建模的 1.5 倍以上。换句话说很多企业想象中的“无缝切换”实际是“推倒重来但要装作没推倒”。这种落差会在项目中期集中爆发到时候团队士气比技术问题更难处理。4.2 第二道门槛FMU 交换能连通但远没有“即插即用”既然平台间迁移不能直接转我们想到用 FMI/FMU 标准搭桥。把 Simulink 控制模型导出成 FMU再导入 Modelica 平台的整车模型里跑联合仿真另一个方向也试过把 Modelica 物理模型导出 FMU 给 Simulink 调用。FMU 版本、求解器类型、接口变量单位、初始值、重初始化行为任何一个不统一都会出问题。我记忆最深的是一次振荡问题从某平台导出的 FMU 在离线单步仿真时结果正常设置成连续积分后立刻出现高频振荡。查了几天最后发现是导出时默认把模型内部采样时间写成了固定步长而接收端用了变步长求解器。两边数据交换正好踩在“某一步收到了历史值”的节奏上反复修正最终靠固定通信步长压住了。这类问题官方文档很少详细写只能靠实际项目一点点趟。所以在引入 FMU 方案时建议团队里一定要有一个愿意去抠求解器步长、采样周期和模型重初始化行为的“细节控”否则很容易卡在莫名其妙的数值问题上。4.3 第三道门槛量产代码生成和工具链认证的差距联合仿真能跑通是一回事量产是另一回事。Simulink 的 Embedded Coder 已经被产业界打磨了二十多年AUTOSAR 软件组件生成、内存映射、标定量设置、编译器兼容性全部有成熟路径。我在实际项目里遇到过各种奇怪问题但总能在官方文档、Answers 社区或者同事的经验里找到答案因为踩过坑的人足够多。Modelica 平台的物理建模能力很强但控制系统方面的量产代码生成、AUTOSAR 支持和工具认证相对“年轻”。预研阶段做物理现象验证没问题一旦项目需求变成“生成的代码要进入 E/E 架构要通过编译检查、覆盖率分析、打包集成”差距就非常具体了。也许未来可以追上来但在严格的量产时间表里我不能拿整个项目去赌一个尚未成熟的工具链。5. 不把 Simulink 当对手混合仿真和增量替换的突围路线如果国产仿真软件的目标是把 Simulink“赶下桌”我悲观但如果目标是“在 Simulink 不擅长的地方撕开一个口子”我非常乐观。Modelica 和 MWorks 的价值恰恰在 Simulink 体感没那么舒服的领域系统级多物理域建模、架构探索、模型复用。5.1 FMI/FMU 是绕不开的中立桥现在谈任何平台替换都不能忽略 FMI 标准。它可以让企业不用“二选一”Simulink 控制模型保留整车物理模型放在 Modelica 平台两者通过 FMU 联合仿真反过来某个控制算法如果用 Modelica 实现也能导成 FMU 回到 Simulink 环境里跑。所以我一直建议团队把 FMI/FMU 能力当成基础设施来建设而不是某两个工具之间的临时接口。学会正确配置 FMI 2.0/3.0 版本、选择 Co-Simulation 与 Model Exchange 模式、统一单位制你就掌握了让模型在不同工具链之间流动的通用语言。这门语言不绑定任何一家厂商长期价值非常高。5.2 我建议的过渡架构物理模型交给 Modelica控制策略留在 Simulink我给团队设计过一套过渡架构核心原则是“各干各擅长的事”。新项目的整车能量管理、热管理、多体动力学模型放在 Modelica 平台建设因为这些模型的价值在于物理行为本身而不是控制算法细节Simulink 继续负责控制策略、状态机和量产代码生成。两层之间通过 FMU 通信接口字段用标准总线消息定义。这套架构的好处是渐进式磨合不做一刀切。物理模型是 Modelica 平台的“增量价值”立刻就能看到好处控制逻辑和量产风险全部留在 Simulink 老路上项目整体安全性有保障。团队在磨合过程中也能真正积累起对 Modelica 和 FMI 的理解以后再谈大规模迁移就有底气了。5.3 从单点替换到混合仿真的六步接入方法如果你想在自己的团队里小范围尝试我列一个实操过的接入步骤先选一个物理模型需求强、风险低的场景比如整车热管理或电驱系统能耗预测别一上来就动控制策略核心用 Modelica 平台搭物理模型从第一天起就养成导出 FMU 的习惯让联合仿真始终是通路起草接口信号清单变量名、单位、采样周期、初值、超时处理策略做成一张表两个团队共同遵守在 Simulink 里通过 FMU 模块接入跑通一个最简化闭环确认数值稳定性和实时性闭环跑通后逐步增加模型细节每增加一个部件都和旧模型做一次输出对比误差要小到可解释维护一份工具链问题清单把 FMU 版本、求解器设置、参数映射中踩过的坑全部记下来这是团队前期最宝贵的资产。这套思路并不复杂但能让你在不影响主要项目的前提下获得第一手经验。至少比坐在会议室里吵“哪个平台好”有价值。6. 给还在观望的工程师几句实在话同元软控上市的消息真正值得关注的不只是一家公司的资本动作而是一个信号国产系统级仿真平台正在进入加速投入期。这个阶段最应该做的不是站队而是让自己同时拥有新旧两套知识体系。6.1 要不要押注国产平台两条腿走路我的建议是不要丢掉 Simulink也不要对 Modelica/MWorks 视而不见。手里有量产项目就用 Simulink 保证交付质量业余时间或者预研项目里花一些精力学 Modelica 语法、动手搭一个电池模型、研究 FMI 配置。这些知识不绑定具体软件未来无论平台如何变化你的理解不会贬值。尤其推荐年轻工程师做一件事用同一套电池等效电路模型分别在 Simulink 和 Modelica 平台实现一遍记录建模过程的时间差和卡壳点。这件事做完你对两种范式的理解会超过很多人。6.2 稀缺能力既懂物理建模又会控制软件工程我在招聘实习生时有一个很明显的感受会操作 Simulink 的人很多既懂物理系统建模、又会控制器设计、还能写脚本做自动化仿真平台的人很少。工具迁移窗口期会放大这种稀缺性。一个工程师如果既能看懂 Modelica 语言描述的电池热模型又能在 Simulink 里调好一套电机控制算法同时还能把模型和数据字典管理得清清楚楚他不太需要担心自己的职业空间。最后说一点个人体会我在做这个迁移试验之前对“替代”这个词很热衷做完之后反而释然了。工具圈的迁移从来不会因为情怀发生只会因为某个具体场景里获得了实打实的效率提升而慢慢推进。Modelica 有它的优势国产平台也值得被认真尝试但想打开汽车圈这扇门靠的不是发布会上的宏大方略而是一个个模型、一份份问题清单、一次次联合仿真里的可靠表现。这个过程不性感但确实是国产工业软件必须走的路。