3. Simulink基本操作:创建新模型、添加模块、连接模块、运行仿真、查看仿真结果
好,咱们今天来点真格的。前面聊了那么多概念,现在终于要上手了。Simulink的基本操作,说白了就是五步走:建模型、加模块、连上线、跑仿真、看结果。这五步我做了十几年,闭着眼睛都能走通,但刚开始学的时候也栽过不少跟头。
我个人习惯,每次打开Simulink之前,先在脑子里过一遍:我要解决什么问题?输入是什么?输出是什么?想清楚了再动手。别急着点鼠标,磨刀不误砍柴工。
3.1 创建新模型
创建新模型,方法有好几种。我常用的就两种:
- 从MATLAB命令窗口:直接输入
simulink回车,弹出库浏览器,然后点那个空白文档图标(New Model)。 - 更快的办法:在命令窗口输入
new_system('my_model'),模型就建好了。我一般用这个,省得点来点去。
嗯,这里要注意:模型名字别用中文,也别用空格。我见过有人用“我的模型.slx”,结果后面路径引用各种报错。老老实实用英文加下划线,比如 pid_controller_demo,省心。
Ctrl+S 保存。别问我为什么强调这个——我曾经连续写了两个小时,一个断电全没了。从那以后,我养成了“每加一个模块就保存一次”的强迫症。
3.2 添加模块
添加模块,就是去库浏览器里“搬砖”。Simulink的库分门别类,放得挺清楚。常用的几个:
- Sources(信源):比如阶跃信号、正弦波、时钟信号。仿真总得有个输入吧?
- Sinks(信宿):比如示波器(Scope)、To Workspace。看结果用的。
- Continuous(连续系统):积分器、传递函数、状态空间模型。搞控制的人天天跟它们打交道。
- Math Operations(数学运算):加法、乘法、增益。最基础的运算模块。
怎么加?拖拽就行。从库浏览器里找到模块,按住鼠标左键拖到模型窗口里。我刚开始学的时候,总觉得拖过去对不齐,后来发现按住 Shift 键拖动,模块会自动对齐网格线。这个小细节,能让你画出来的模型图整洁不少。
3.3 连接模块
连接模块,就是把模块的输入输出端口用线连起来。操作很简单:
- 鼠标移到模块的输出端口(小三角),光标会变成十字形。
- 按住左键,拖到另一个模块的输入端口。
- 松开鼠标,线就画好了。
但这里有个坑——信号线不能交叉。你想想看,两根线交叉了,Simulink不知道哪根是哪根。我见过有人画得跟蜘蛛网似的,仿真一跑就报错。解决办法是:用分支线。按住 Ctrl 键,在已有的线上点一下,就能拉出一条分支。
还有,连接的时候要注意数据类型。比如你从Constant模块(输出double)连到Display模块(显示double),没问题。但如果你连到Logic模块(需要boolean),就会报数据类型不匹配。我当年调试一个模型,花了两个小时才发现是数据类型的问题。从那以后,我每次连线都会看一眼端口的数据类型提示。
3.4 运行仿真
模型搭好了,线也连好了,接下来就是跑仿真。点一下工具栏上的绿色三角按钮,或者按 Ctrl+T,仿真就开始了。
但别急着点。跑仿真之前,先检查几个参数:
| 参数 | 默认值 | 我常用的值 | 说明 |
|---|---|---|---|
| Start time | 0.0 | 0.0 | 一般不改 |
| Stop time | 10.0 | 根据系统动态调整 | 时间太短看不到稳态,太长浪费时间 |
| Solver(求解器) | auto | ode45(连续系统) | 离散系统用离散求解器 |
| Max step size | auto | 1e-3 或更小 | 步长太大,仿真结果可能不准确 |
我个人习惯,先设一个较短的仿真时间,比如1秒,跑一下看看波形对不对。如果没问题,再拉长时间。这样能快速发现低级错误,比如模块参数设错了、线连反了之类的。
ode23t 或者 ode15s。有些刚性系统(比如有快速和慢速动态同时存在),用ode45会算得很慢甚至发散。我做过一个电力电子仿真,用ode45跑了半小时没出结果,换成ode15s后,十秒搞定。
3.5 查看仿真结果
仿真跑完了,怎么看结果?最常用的就是Scope(示波器)。双击Scope模块,就能看到波形图。
但Scope默认的显示效果,说实话,有点简陋。我一般会做几件事:
- 调整坐标轴:右键点击波形图,选“Axes properties”,可以设置Y轴范围。别让波形跑到图外面去。
- 添加图例:如果Scope里有多条曲线,右键选“Legend”,能分清哪条是哪条。
- 导出数据:Scope工具栏里有个“Log”按钮,点一下可以把数据保存到工作区。这样你就可以用MATLAB的绘图命令(比如
plot())重新画图,想怎么美化都行。
除了Scope,还有两种常用的查看方式:
- To Workspace模块:把仿真数据直接存到MATLAB工作区。变量名可以自己定义,比如
simout。仿真结束后,在命令窗口输入plot(simout.time, simout.signals.values)就能画图。 - Display模块:显示数值。适合看稳态值,比如PID控制器的最终输出是多少。
嗯,这里要提醒一句:Scope里看到的波形,默认是经过插值的。如果你需要精确的数据点,最好用To Workspace导出原始数据。我做过一个项目,客户要求仿真精度达到小数点后四位,用Scope看总觉得不对,后来导出数据一对比,才发现是显示精度的问题。
好了,Simulink的基本操作就这些。说白了就是五个步骤,但每一步都有值得深挖的细节。你多练几次,形成肌肉记忆,后面学高级功能就轻松多了。