码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Simulink代码生成: 可变子系统及其代码


    本文研究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 总结

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

    >>返回个人博客总目录

  • 相关阅读:
    【免费源码下载】完美运营版商城 虚拟商品全功能商城 全能商城小程序 智慧商城系统 全品类百货商城php+uniapp
    Java 中的 ==, equals 与 hashCode 的区别与联系
    Spring Gateway 根据服务名路由失败,报错 Service Unavailable, status=503
    程序员业务,微信全文搜索技术优化
    Linux 查看或统计网卡流量的几种方式么?
    Unity-资源异步加载
    Mysql优化习惯|建表规约丶SQL规约丶索引规约
    Spring Boot+RabbitMQ 通过fanout模式实现消息接收(支持消费者多实例部署)
    Jenkins自动化:简化部署流程
    101页4万字数字孪生能源互联网智慧能源物联网大数据建设方案
  • 原文地址:https://blog.csdn.net/u013288925/article/details/125707786
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号