3. MATLAB/Simulink基础:Simulink界面介绍、常用模块库、信号线连接、子系统封装
好,咱们今天聊聊Simulink。说实话,很多做车辆控制的朋友,一开始接触Simulink都觉得它像个黑盒子——拖拖拽拽就能跑仿真,但真要自己搭个模型,又不知道从哪下手。我当年刚入行时也是这样,看着满屏的模块发懵。别急,咱们一步步来。
3.1 Simulink界面:别被它吓到
打开Simulink,你会看到一个这样的界面:最上面是菜单栏和工具栏,左边是浏览器(Library Browser),中间大片空白就是你的画布——模型编辑区。嗯,就这么简单。
我个人习惯,一上来先做两件事:
- 设置模型参数:点菜单栏的 Simulation → Model Configuration Parameters,把求解器(Solver)改成固定步长(Fixed-step)。为什么?因为咱们做CarSim联合仿真时,车辆动力学模型通常要求固定步长,否则容易发散。我吃过这个亏,仿真跑到一半直接崩了。
- 打开Library Browser:快捷键 Ctrl+Shift+L,或者点工具栏那个小图标。所有模块都在这了。
3.2 常用模块库:你真正需要记住的
Simulink的模块库有几十个,但做车辆仿真常用的,其实就那么几个。我给大家列个表,省得你们一个个翻。
| 模块库 | 常用模块 | 用途 |
|---|---|---|
| Sources(信号源) | Constant, Step, Sine Wave, Ramp | 生成输入信号,比如油门开度、制动压力 |
| Sinks(信号接收) | Scope, To Workspace, Display | 查看仿真结果,或者把数据存到MATLAB工作区 |
| Math Operations(数学运算) | Add, Subtract, Gain, Product, Abs | 做加减乘除、增益、取绝对值等 |
| Continuous(连续系统) | Integrator, Derivative, Transfer Fcn | 积分、微分、传递函数——车辆动力学建模必备 |
| Discrete(离散系统) | Unit Delay, Discrete Transfer Fcn | 离散控制器的实现,比如PID |
| Signal Routing(信号路由) | Mux, Demux, Bus Creator, Switch | 把多个信号合并或分开,或者做条件判断 |
| User-Defined Functions(自定义函数) | MATLAB Function, S-Function | 写自己的算法,比如复杂的控制逻辑 |
你想想看,一个典型的车辆动力学模型,无非就是:输入信号(油门、刹车、转向)→ 数学运算(计算力、力矩)→ 连续系统(积分求速度、位移)→ 输出显示(Scope看曲线)。说白了,就这几样东西来回组合。
3.3 信号线连接:别让线乱成一团
拖模块谁都会,但连线是有讲究的。我见过不少新手,模型搭得跟蜘蛛网似的,自己都看不懂。这里分享几个原则:
- 从左到右布局:输入在左,处理在中间,输出在右。这是Simulink的默认流向,别反着来。
- 信号线要直:按住Shift键拖动,可以画直线。别让线拐来拐去。
- 给信号线命名:双击信号线,输入名字。比如“车速”、“发动机扭矩”。这样模型可读性会好很多。
- 用Mux合并信号:如果多个信号要一起进Scope,用Mux模块合并成向量,别一根一根地连。
举个例子,假设你要把车速和发动机转速同时显示在Scope里:
1. 拖一个Mux模块到画布
2. 把“车速”信号连到Mux的第一个输入
3. 把“发动机转速”信号连到Mux的第二个输入
4. Mux的输出连到Scope
5. 双击Scope,点工具栏的“参数”图标,把“Number of axes”改成2
这样Scope里就会显示两个独立的子图,一个车速,一个转速。清晰明了。
3.4 子系统封装:让你的模型像乐高一样
模型大了以后,全堆在一个画布里根本没法看。这时候就需要子系统(Subsystem)了。说白了,就是把一组相关的模块打包成一个“黑盒子”,只露出输入输出接口。
创建子系统有两种方式:
- 方法一:选中你要打包的模块,右键 → Create Subsystem from Selection。Simulink会自动帮你生成一个子系统,并把选中的模块放进去。
- 方法二:先拖一个Subsystem模块到画布,双击进去,在里面搭模型。
我个人更推荐方法一,因为省事。但方法二适合从头设计。
封装(Mask)是子系统的进阶用法。封装后的子系统,可以有自己的参数对话框、图标、文档。比如你做一个“PID控制器”子系统,封装后可以设置Kp、Ki、Kd三个参数,双击就能改,不用进到里面去。
封装步骤:
1. 右键子系统 → Mask → Create Mask
2. 在“Parameters & Dialog”选项卡里,添加参数(比如Kp, Ki, Kd)
3. 在“Initialization”选项卡里,把参数赋值给内部变量
4. 在“Icon”选项卡里,可以画个图标,比如写个“PID”字样
封装的好处是什么?你想想看,一个整车模型可能有几十个子系统:发动机模型、变速箱模型、制动系统、转向系统……每个都封装好,参数可调,整个模型就像搭乐高一样,清晰、可复用、易维护。
3.5 本章知识体系
下面这张图,是我自己总结的Simulink基础知识框架。你可以把它当作一个“地图”,以后遇到问题,先看看自己卡在哪一层。
嗯,这张图把咱们今天讲的内容串起来了。从界面认识,到模块库选择,再到信号线连接,最后到子系统封装——这是一个从“会用”到“会搭”再到“会设计”的过程。别小看这些基础,我见过不少做了好几年仿真的工程师,模型依然乱得没法看,就是因为基础没打牢。
好了,今天就到这。记住:Simulink只是个工具,真正值钱的是你脑子里的控制逻辑和车辆动力学知识。工具用得顺手,想法才能跑得快。
公众号:蓝海资料掘金营,微信deep3321