首页 > 其他分享 >MBD软件开发之条件编译

MBD软件开发之条件编译

时间:2024-07-31 09:53:58浏览次数:13  
标签:Subsystem 软件开发 MBD Variant 编译 算法 Algorithm3 Algorithm2

汽车行业流行平台化开发,希望通过一套软件对付一系列车型,当然这一系列车型的软件基本上一致,不同配置之间可能有很少一点差别,怎么办?C语言开发中有条件编译,同一份源代码,可以通过设置不同的参数,编译出来不同的软件,而无需编译冗余的软件。

使用模型开发算法,是否也可以让模型生成的代码做到这一点呢?回答是肯定的。

下面我们来看一个例子,例子中我们通过参数K来选择编译不同部分的算法。

首先,我们从Simulink库的Port& Subsystem目录下拷贝一个Variant Subsystem出来,如下图:

双击打开Variant Subsystem,往这里面添加几个Atomic Subsystem,分别命名为Algorithm1、Algorithm2、Algorithm3,如下图:

Algorithm1、Algorithm2、Algorithm3里面的算法如下:

不同的是Algorithm1、Algorithm2、Algorithm3里面的Gain分别为1、2、3。

然后,在Variant Subsystem模块上,鼠标右键,选择Block Parameters,设置如下图所示: 

最后,在Base Workspace或者data dictionary里使用参数类Simulink Parameter定义参数对象K,设置K的Storage Class为Define,同时指定头文件为my_config.h。

好了,做完上述设置就可以生成代码了,生成代码的其他配置我这里就不提了,代码如下:

void mymodel_step(void)

{

#if K == 1

   y = x;

#elif K == 2

   y =2.0 * x;

#elif K == 3

   y =3.0 * x;

#endif

}

其中, K定义在my_config.h文件中。

【注:假如我们给K赋值为2,模型就会出现最前面两幅图片里显示的那样,Variant Subsystem最上方的名字是Algorithm2,Variant Subsystem里面的3个Atomic Subsystem中Algorithm2是黑色的,另外两个是灰色的。】

注意事项:

  1. 代码生成的时候,在Variant Subsystem模块上鼠标右键,选择Block Parameter,设置Variant control条件,同时,勾上Analyze all choices during update diagram and generate preprocess or conditionals;
  2. Variant Subsystem内部的连接关系是通过颜色表示的,黑色的就表明已经连上了,不要试图使用鼠标把这里的Inport、Outport和某个子系统上的端口硬连接,当然,你也连不上的。
  3. 这三部分算法之间的产品非常小,可以使用Variant subsystem的方式实现,如果算法差别的部分比较大,建议使用Model Variant实现,至于Model Variant如何实现,自己摸索吧,差不多的。

标签:Subsystem,软件开发,MBD,Variant,编译,算法,Algorithm3,Algorithm2
From: https://blog.csdn.net/weixin_43015338/article/details/140815028

相关文章

  • 这本vue3编译原理开源电子书,初中级前端竟然都能看懂
    前言众所周知vue提供了很多黑魔法,比如单文件组件(SFC)、指令、宏函数、cssscoped等。这些都是vue提供的开箱即用的功能,大家平时用这些黑魔法的时候有没有疑惑过一些疑问呢。我们每天写的vue代码一般都是写在*.vue文件中,但是浏览器却只认识html、css、js等文件类型,明显是不认......
  • Java编译和运行的命令
    在Java中,编译和运行Java程序主要使用两个命令:javac用于编译Java源代码,java用于运行编译后的Java字节码。编译Java程序要使用javac命令编译Java程序,你需要在命令行(终端或命令提示符)中导航到包含你的Java源代码文件的目录。然后,运行以下命令:bash复制代码javacYourProgram.ja......
  • 在 Lambda Python 中获取 errorMessage": "期望值: 第 1 行第 1 列 (char 0)"
    我正在尝试使用slackapi和awslambda函数创建一个slack机器人。现在我只希望每当用户说“你好”时它就响应“你好”。当我在Lambda代码编辑器中测试代码时,出现此错误。我对Lambda很陌生,并且已经被困在这个问题上有一段时间了。非常感谢任何帮助!完整错误:Response......
  • 具有 Python lambda 函数的 QTimer 使用先前的数据运行
    我有一个GUI项目,它使用PySide2和Python3.8,它在QThread中执行一些后台任务。在该QThread中,我有QTimer成员对象,该对象必须定期运行一个函数,每次向其传递不同的数据。我没有使用QTimer.singleShot静态函数,因为如果需要某些特定场景,我需要......
  • ambari2.8+ambari-metrics3.0+bigtop3.2编译、打包、安装
    bigtop编译资源说明:软件及代码镜像开发包镜像github访问编译相关知识技术知识bigtop编译流程及经验总结各模块编译难度及大概耗时(纯编译耗时,不包含下载文件和排错时间)centos真机编译branch-3.2硬件说明:编译步骤下载代码并切换分支国内镜像配置基础环境......
  • java编译错误,找不到包的解决办法
    异常:D:\AC2024\20240729\delphiJIN_JAVA\JavaTest\bin\x64>javaMYclasses.JavaClassForDelphiTestExceptioninthread"main"java.lang.NoClassDefFoundError:com/sltas/front/third/util/CryptionUtilatMYclasses.JavaClassForDelphiTest.main(Jav......
  • python之代码简化式(列表、字典生成式,递归函数,迭代器(iter)和生成器(yield)、匿名函数(
    文章目录前言1、列表、字典生成式2、递归函数2.1python中代码的递归深度(扩展)3、拓展:迭代器和生成器3.1迭代器(iter)3.2生成器(yield)4、匿名函数(lambda)4.1map函数4.2reduce函数(较少使用)4.3filter函数前言本文主要讲解一些简化代码格式的一些方法,方便大家更好的......
  • 关于嵌入式QML dict_pinyin.dat的编译更新
    硬件平台:全志的A40I-H 软件平台:Linux内核版本3.10.65QT版本:5.9.0 重新编译dict_pinyin.dat的作用 1.解决输入"nss"导致输入法崩溃的问题2.解决输入某些嵌入式平台不支持的字体,例如“捃”,导致程序崩溃的问题 源码路径:~/qt-everywhere-opensource-src-5.9.0/qtvirtual......
  • 解决ubuntu 22.04新内核6.5.0-15无法编译NVIDIA显卡驱动
    这里的新内核应该包括6.5.*系列的遇到的问题:在安装NVIDIA显卡驱动发现了一个问题,主要日志如下所示:make[3]:***[scripts/Makefile.build:251:/tmp/selfgz1310041/NVIDIA-Linux-x86_64-550.54.14/kernel/nvidia/nvlink_linux.o]Error1make[3]:Target'/tmp/selfgz131004......
  • 编译期链接时共享库搜索路径优先级实验
    目录前言实验环境目录说明准备工作单独测试不配置路径默认路径LIBRARY_PATH-L优先级测试默认路径和LIBRARY_PATH-L和默认路径DEBUG模式编译器配置详细信息链接器详细信息DEBUG总结验证默认路径>LIBRARY_PATH原因附录库文件源码主程序源码makefile前言《共享库链接和加载时的路径......