第三章:子系统与封装

说实话,我刚接触Simulink那会儿,最头疼的就是模型越画越大,满屏幕的连线跟蜘蛛网似的。后来带我的老工程师跟我说了一句话,我记到现在——「模型做得好不好,就看你会不会用子系统」。今天咱们就来聊聊这个核心技能。

3.1 子系统创建

子系统是什么?说白了就是把一堆功能模块打包成一个「黑盒子」。你不需要关心里面怎么实现的,只看输入输出就行。

创建子系统有几种方式,我常用的就两种:

  • 直接拖拽:从库浏览器里把Subsystem模块拖到模型里,双击进去编辑
  • 选中打包:选中多个模块,右键→Create Subsystem,一键搞定

我个人习惯用第二种。有一次做电机控制模型,光PID调节器就画了十几个模块,选中一打包,整个模型瞬间清爽了。你想想看,别人看你的模型,第一眼就能看出架构,多好。

小技巧:打包前先把关键信号标上名字,子系统会自动生成对应的端口名,省得后面一个个改。

3.2 子系统封装

创建子系统只是第一步。真正让子系统变得好用,靠的是封装(Masking)。

封装是什么意思?就是给子系统穿上「外衣」,让它看起来像一个独立的模块。你可以自定义参数对话框、图标、说明文档。

操作路径很简单:右键子系统 → Mask → Create Mask。进去之后你会看到几个标签页:

标签页 作用
Icon & Ports 自定义图标和端口显示
Parameters 定义用户可设置的参数
Initialization 参数初始化脚本
Documentation 写帮助文档的地方

嗯,这里要注意:封装不是必须的,但如果你想让别人(或者三个月后的自己)能快速上手,封装绝对值得花时间做。

3.3 封装参数与图标

这部分我重点说说。封装参数和图标,是让子系统「活起来」的关键。

参数设计

在Parameters标签页里,你可以添加各种参数类型:编辑框、下拉菜单、复选框等等。我一般这样设计:

  • 关键参数:用编辑框,让用户直接输入数值
  • 模式选择:用下拉菜单,限制用户只能选预设值
  • 开关选项:用复选框,简单明了

举个例子,我之前做过一个滤波器子系统,封装了三个参数:

参数1:滤波器类型(下拉菜单:低通/高通/带通)
参数2:截止频率(编辑框,单位Hz)
参数3:阶数(编辑框,整数)

用户双击模块,弹出来的对话框就这三个选项,清晰得很。

图标绘制

图标这块,我建议别太花哨。Simulink支持用MATLAB命令画图,常用的就几个:

  • disp('text'):显示文字
  • image(imread('file.png')):显示图片
  • plot([0 1],[0 1]):画线条
  • color('red'):设置颜色

我个人习惯用disp显示模块名称,再加个简单的图形标识。比如PID控制器,我就画个P-I-D三个字母,一目了然。

避坑指南:我曾经在图标里用了复杂的plot命令,结果每次打开模型都要重新渲染,慢得要命。后来学乖了,能用文字绝不用图形。

3.4 条件执行子系统

这部分是子系统的进阶用法。条件执行子系统,说白了就是「满足条件才干活」的子系统。

Simulink提供了几种条件执行子系统:

  • Enabled Subsystem:使能子系统,使能信号为高时才执行
  • Triggered Subsystem:触发子系统,检测到边沿信号时执行一次
  • Function-Call Subsystem:函数调用子系统,由外部函数调用触发
  • If Action Subsystem:条件动作子系统,类似if-else逻辑

我重点说说前两种,因为项目里用得最多。

使能子系统

使能子系统有个使能端口,输入0或1。为1时正常执行,为0时输出保持或归零(可以设置)。

我在做电池管理系统时用过这个。当电池温度超过阈值时,使能信号变高,冷却子系统开始工作。温度降下来后,使能信号变低,子系统停止。简单又可靠。

触发子系统

触发子系统更灵活。它检测触发信号的上升沿、下降沿或者双边沿。检测到边沿时,子系统执行一次,然后继续等待。

你想想看,这种机制特别适合做「事件驱动」的逻辑。比如按键检测、过零检测、故障捕获等等。

注意:触发子系统的输出只在触发时刻更新。如果你需要连续输出,记得在子系统内部加个Memory模块或者Unit Delay。

知识体系总览

下面这张图是我自己画的,把本章的核心逻辑串起来了:

子系统与封装知识体系 子系统创建 子系统封装 条件执行子系统 直接拖拽 选中打包 参数设计 图标绘制 使能子系统 触发子系统 典型应用场景 模型分层管理 | 参数统一配置 | 逻辑复用 | 团队协作 事件驱动控制 | 模式切换 | 故障保护

这张图把三个核心知识点串起来了。子系统创建是基础,封装是进阶,条件执行是实战利器。三者层层递进,缺一不可。

我的建议:刚开始学的时候,别急着用条件执行。先把普通子系统和封装玩熟了,再慢慢加条件逻辑。步子迈大了容易扯着蛋,做模型也一样。

好了,这一章的内容就到这儿。记住一句话:好的模型不是功能多,而是结构清晰。子系统就是你手里的积木,怎么搭,看你的本事了。


专注资料整理