本文描述使能子系统的建模并研究生成的代码。

文章目录

  • 1 Simulink中的使能子系统
  • 2 使能子系统建模示例
    • 2.1 基本用法
    • 2.2 保持输出结果
  • 3 使能子系统代码生成
    • 3.1 输出口配置为held
    • 3.2 输出口配置为reset
  • 4 扩展

1 Simulink中的使能子系统

使能子系统是一种特殊的原子子系统。它的顶部有一个使能输入信号,当该信号为正数的时候,使能子系统被执行。

打开使能子系统里面,可以看到一个使能模块。

2 使能子系统建模示例

2.1 基本用法

1.建立如下使能子系统的测试模型,用一个Signal Builder输入子系统的In1和使能模块,并用一个Scope模块来观测输入输出。

2.子系统里面用一个简单的增益模块。

3.然后Run一下模型,打开Scope可以看到仿真结果并分析。

0-2秒的时候,使能信号(图1)为0,所以使能子系统没有被触发,Out1的结果是默认的0;2-4秒的时候,由于触发了使能子系统,所以Out1等于输入值2(图2)乘以增益值2,为4;4-10秒的时候,使能信号即使为0,Out1的值依然保持为4;
那么问题来了,使能信号为0的时候,为什么输出值保持不变呢?这是因为在使能子系统内的Out1被默认配置为held,即保持不变。

4.打开使能子系统的Out1配置面板,将参数Output when disabled设为reset,以及将Initial output设为0,如图所示。

然后再次Run一下模型,可以看出,当使能信号为0的时候,输出值也置为了初始值0.

2.2 保持输出结果

2.1中讲解了输出口可以配置成reset或者hold,其实博主很喜欢这个Hold的配置,因为工作中经常需要将某个信号保存下来,就可以用这个功能。

例如,在车辆运行过程中,如果想要存下历史数据中的最大车速,就可以像下面那样建模。其中,输入是CAN信号上的车辆速度,输出是历史最大车速。

其中的含义是输出如果小于输入,就把输入信号通过使能子系统放出去赋值给输出,否则就保持原来的输出。因此,输出的值就是历史最大车速。

3 使能子系统代码生成

根据上文说的两种对Outport的配置方式,分别研究其生成的两种代码。

3.1 输出口配置为held

1.首先将上文的测试模型做一些修改,将输入输出用port端口代替。

2.将子系统内部的Out1端口的Output when disabled设置为held。

3.Ctrl + B生成代码并分析。

分析代码中的step函数可知,生成的代码用if条件判断In1是否大于零,决定是否执行Out1=In2*2这段代码,从而达到使能的效果。

值得注意的是,这个条件语句并没有跟随else,也就是说只要In1大于零触发了一次,即使接下来的采样周期中In1等于零,以后Out1的数值也一直保持上一次触发时候的计算结果。直到下一次触发的时候,输入的In2发生了变化,输出的Out1才会改变。

这也印证了模型中Out1端口把Output when disabled配置成held的效果。

3.2 输出口配置为reset

2.将子系统内部的Out1端口的Output when disabled设置为reset。

2.Ctrl + B生成代码并分析。

可以看出,这次的代码复杂了一些。首先,代码中的外层条件语句加上了else关键字。这是为了在In1等于0的时候,将Out1置为初始值。

但是代码中又嵌套了一个判断,并且以EnabledSubsystem_MODE这个布尔量作为判断条件。这是为了标志出现在的触发状态,给下一个采样周期做判断用。

比如说,第一个采样周期中,In1是使能的,就会把EnabledSubsystem_MODE置为true;如果第二个采样周期不使能,同时检测EnabledSubsystem_MODE得知上一个周期是使能的,就会把输出值初始化为0,同时把EnabledSubsystem_MODE置为false;假如第三个采样周期同样不使能,检测出第二个周期也不使能,就不会把已经置为0地Out1再做一遍置零操作了。这部分操作可以细细地品一下。

4 扩展

除了输出端口可配置以外,enable这个模块也可以配置,达到不同的效果。不过这部分用到的不多,有需求的时候可以更仔细地研究一下。

>>返回个人博客总目录

Simulink代码生成: 使能子系统及其代码相关推荐

  1. Simulink代码生成: 延时模块及其代码

    Simulink代码生成: 延时模块及其代码_u013288925的博客-CSDN博客_simulink延时模块

  2. Simulink代码生成:Step函数接口配置

    本文研究Simulink生成代码时的step函数的名称和参数. 文章目录 1 问题引入 2 配置过程 3 代码生成 4 总结 1 问题引入 在之前的一篇博客<Simulink代码生成:Simul ...

  3. [FOC-Simulink]使用Simulink代码生成工具基于STM32开发板对永磁同步电机进行开环控制

    本文介绍使用Simulink代码生成功能在STM32开发板平台上运行永磁同步电机. 硬件基础: Nucleo-G431RB开发板 X-NUCLEO-IHM07M1驱动扩展板 57BLDC-24V-21 ...

  4. Simulink代码生成(三)——rtw文件(代码生成的中间产物)

    Simulink代码生成(三)--rtw文件(代码生成的中间产物) 文章目录 Simulink代码生成(三)--rtw文件(代码生成的中间产物) 一.代码生成过程 二.model.rtw文件解读 一. ...

  5. simulink怎么生成vxworks的执行程序_从EPB模型谈谈Simulink代码生成

    前段时间有读者朋友问代码生成的例子,说他正在做EPB的仿真模型,但总是和应用串不到一块去,我这里就从一个简单EPB控制模型来谈谈simulink代码生成,总结代码生成方法的同时也顺便回答他的问题. 1 ...

  6. simulink快捷键_从EPB模型谈谈Simulink代码生成

    前段时间有读者朋友问代码生成的例子,说他正在做EPB的仿真模型,但总是和应用串不到一块去,我这里就从一个简单EPB控制模型来谈谈simulink代码生成,总结代码生成方法的同时也顺便回答他的问题. 1 ...

  7. Simulink代码生成:目标硬件配置

    本文研究Simulink中关于目标硬件相关的配置. 文章目录 1 目标硬件的含义 2 Simulink中的硬件配置 3 代码中的位长度信息 4 总结 1 目标硬件的含义 不管运行什么软件,都是无法离开 ...

  8. Simulink代码生成:生成C++类

    博主最近在工作中用Simulink生成C++类的代码,因此将一些感悟记录下来.本文通过一个简单的例子研究Simulink生成C++类的代码以及一些相关配置. 文章目录 1 创建模型 2 C++类生成配 ...

  9. 用Matlab的.m文件运行 Simulink 搭建的子系统,对子函数进行输入赋值,运行,输出读取

    Simulink上搭建一个子函数, 可以参照以下教程 Matlab·Simulink的使用-[子系统的创建与封装] 上述教程搭建的是固定输入,输出通过Scope 查看,对于大的系统工程来说不便于模块化 ...

最新文章

  1. mysql64如何配置_win7 64位下如何安装配置mysql-winx64(安装记录)
  2. linux 为什么 c语言,为什么C程序里一定要写main函数
  3. 业界干货 | 图解自监督学习,从入门到专家必读的九篇论文
  4. memcached 扩展安装(windows)
  5. 代码编辑器Sublime Text 3 免费使用方法与简体中文汉化包下载
  6. [2020.10.30NOIP模拟赛]小鱼吃大鱼【RMQ】
  7. An Algorithm Summary of Programming Collective Intelligence (1)
  8. 虚拟跳线软件干什么用的_跳线的作用
  9. nnFormer (Not-aNother transFORMER): 基于交叉Transformer结构的3D医疗影像分割网络
  10. LSOF 安装与使用
  11. firmware linux 原理_Firmware加载原理分析 | 学步园
  12. 在python3.5中使用pip
  13. webGIS的粗浅认识(一)
  14. Logisim元件用法详解二:Gates 门
  15. 【视频目标检测数据集收集】B站、YouTube等各大网站视频下载工具:Annie(现更名为lux)的下载与安装教程
  16. 在线网页如何免费excel转pdf
  17. Wordpress 修改 mysql 插件_WordPress批量查找替换修改文章内容的插件和代码
  18. win10 linux 修复引导菜单,win10 + Ubuntu16.04双系统修复linux grub引导丢失
  19. FTP主动模式和被动模式详解
  20. MOS管驱动电路设计

热门文章

  1. 新赛季上分神器 vivo X70 Pro+首批适配《王者荣耀》120Hz极高帧率
  2. Android 炫酷自定义 View - 剑气加载
  3. 固态硬盘比机器硬盘好很多吗?
  4. 浅谈CPU 硬盘 内存关系
  5. 使用Web浏览器访问远程ssh终端
  6. 深入理解内存:原理简介
  7. PHP文件及运行(适合PHP初学者)
  8. Gym - 101986F Pizza Delivery (最短路必经路径)
  9. Python爬虫爬取纵横中文网小说
  10. 【附源码】Java计算机毕业设计安卓在线民宿预定app(程序+LW+部署)