首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Simulink代码生成: 使能子系统及其代码

  • 23-09-22 01:02
  • 3026
  • 12268
blog.csdn.net

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

文章目录

  • 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这个模块也可以配置,达到不同的效果。不过这部分用到的不多,有需求的时候可以更仔细地研究一下。
在这里插入图片描述
>>返回个人博客总目录

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

/ 登录

评论记录:

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

分类栏目

后端 (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-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top