Simulink建模基础: 可变子系统及其代码

本文介绍了如何在Simulink中使用可变子系统进行建模,通过参数控制不同需求的实现。建模过程中详细阐述了参数设置、子系统配置及代码生成过程。生成的代码以宏定义形式体现,有利于编译时节省资源。通过调整参数,可灵活应用于不同项目需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文研究Simulink中的可变子系统,及其生成的条件编译的代码。

1 问题引入

在工作的不同项目回对应着不同的需求,然后不同的需求可能会需要用不同的模型策略实现。此时,就可以使用 Variant子系统进行建模,并通过参数控制某个项目通过哪个子系统输出结果。并且,生成的代码还可以表现为宏定义的形式。

2 建模示例

本章节演示可变子系统的建模方法。

1)首先,在Matlab工作空间新建一个Simulink.Parameter参数对象,将其作为后面控制可变子系统的变量参数;
在这里插入图片描述
其中,谁当StorageClass为Define,对应了C代码中的宏定义。这样做为了后面在生成代码时生成宏的形式。

2)在空白模型中添加一个可变子系统,将其属性设置为如下:
在这里插入图片描述
右键子系统,点击Block Parameters,可以打开子系统的配置界面,设置成如下配置;

在这里插入图片描述

在表格中的Name列,表示子系统中的不同的子系统名称,分别设置为Gain_2和Gain_3,后面的Variant control表示用参数控制可变子系统中运行哪个子系a统。当P_Condition2执行Gain_2子系统,当P_Condition3执行Gain_3子系统。保存并退出。

3)双击进入可变子系统中,可以看到有两个子系统中的子系统,并且仔细观察可以发现输入输出口都不太一样。

在这里插入图片描述

两个子系统的名字对应着上一步中的Name配置,输入输出口要和外面的port保持一致,并且不能连接信号线。

4)在两个子系统中分别用Gain模块,但是一个参数是2,另一个是3;
在这里插入图片描述
在这里插入图片描述
由于第一步中设置的P_Condition数值为2,所以上面的Gain_2子系统是实线,下面的Gain3子系统是阴影。

5)到了这一步,建模就已经完成了。可以验证一下,在模型最上层加一个输入为常数1,输出为display模块;
在这里插入图片描述
当P_Condition数值为2时,Update一下模型后,输出为2;
在这里插入图片描述
当P_Condition数值为3时,Update一下模型后,输出为3;
在这里插入图片描述
这就表示,可变子系统中究竟走哪一路,是根据参数P_Condition来控制的。在实际工作中,针对不同的项目,修改一下P_Condition参数的数值,就可以执行不同的控制逻辑和策略。

3 代码生成

将顶层模型换成Inport和Outport端口,Ctrl + B生成代码。

在P_Macro.h文件中,生成了P_Condition的宏定义,数值为2;

在这里插入图片描述

在step函数中,通过判断P_Condition的数值来决定执行哪个赋值语句,并且是#if形式的条件判断,而不是C语言中的if条件语句。这样有个好处为,在编译器编译这段代码时,可以跳过P_Condition == 3下面的语句,从而节省了控制器的flash资源。

在这里插入图片描述

4 总结

可变子系统可以通过判断条件,来决定内部执行不同的逻辑,生成代码也可以生成宏的形式。

>>返回个人博客总目录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chhttty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值