首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐
2025年6月10日 星期二 6:37pm

Simulink代码生成: 可变子系统及其代码

  • 23-09-22 01:02
  • 4407
  • 8650
blog.csdn.net

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

文章目录

  • 1 问题引入
  • 2 建模示例
  • 3 代码生成
  • 4 总结

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 总结

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

>>返回个人博客总目录

注:本文转载自blog.csdn.net的chhttty的文章"https://blog.csdn.net/u013288925/article/details/125707786"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top