Simulink仿真入门到精通(九) Simulink的流控制
9.1 Simulink流控制分类
simulink中流控制时通过自带的模块实现的,包括If else、Switch、For和While4个种类。
9.2 While流控制
while


如果条件为真,那么子系统在当前的步长内反复执行,直到达到最大循环次数或者判断条件为假。

| 参数标签 | 功能说明 |
| Maximum number of iteration | 最大循环次数 |
| While loop type | 循环类型:while/do while |
| States when starting | Held(保持上次状态)/reset(状态恢复默认值) |
| Show iteration number port | 勾选则多出一个输出循环次数的输出端口 |
| Output data type | 结合上一个参数使用,为输出循环次数设置数据类型 |


阶跃信号1s阶跃,最大循环次数保持默认值5。

第一个步长计数器输出结果为4,因为在第一个循环时,模块执行一次(初始化)输出Unit Delya的初始值为0,然后再执行4次。
在计数达到99时,再执行2次不满足小于等于100的条件,退出循环。
do-while
仿真进行时,子系统内模块首先要执行一次,然后再去检查cond输入条件是否为真,如果为真则继续循环,直到cond条件不满足时退出当前步长的仿真,进入下一个步长。
没有IC输入,仅需要cond条件即可反复循环。
9.3 For循环控制



| 参数标签 | 功能说明 |
| States when starting | 每次循环时保持子系统内的状态或恢复默认 |
| Iteration limit source | 循环次数选择从内部限制或外部输入限制 |
| Iteration limit | 内部限制时输入的循环次数 |
| Set next i(iteration variable) externally | 通过外部输入当前循环的循环变量值 |
| Show iteration variable | 选择是否输出循环变量值 |
| Index mode | 循环变量的初始值从0/1开始 |
| Iteration variable data type | 循环变量输出时的数据类型 |
示例:循环次数由内部决定,不输出循环变量的值。



示例:循环次数由外部输入,且输出循环变量的值。



虽然Sine Wave模块本身输出的时double信号,但接入For Iterator之后被强制转化为整形数据,并取不超过其值的非负整数值。
示例:外部设定Next_i,即下一个循环例循环变量的初始值。
外部框图同上。


9.4 If else控制

根据输入u1判断,如果满足条件则从上支输出信号,不满足则从下支输出信号,这2个信号再分别使能一个Action Subsystem,使用Merge模块将所有If Action Subsystem的输出集总,得到一个完整的逻辑输出。If模块的输出/输出端口可由用户设定。

| 参数标签 | 功能说明 |
| Number of inputs | 输入端口的数目 |
| If expression | If分支的判断条件 |
| Elseif expression |
Else分支的判断条件, 如果期望多个elseif,之间用逗号分隔 |
| Show else condition | 是否显示Else分支的输出Action信号 |
| Enable zero-crossing detection | 使能过零检测与否 |
If expression的条件表达式收到的限制比较大:
- 不支持+-*/和^等数学运算符号;
- 不支持逻辑关系运算符&&和||;
- 不支持数据类型函数,如int8,uint16。
If expression也好,Elseif experssion也好,后面都要跟着一个If Action Subsystem。


模型中Merge模块的作用是将多个Action子系统的输出合并到一个信号中,这些被合并的子系统需要具备一个条件:在某一个时刻,最多有一个子系统被使能计算,其他子系统是不计算的。

9.5 Switch Case控制

输入u1如匹配case分支值得要求,则可以触发次分支后所连接的Switch Case Action Subsystem。

| 参数标签 | 功能说明 |
| Case conditions | 通过元胞数组形式输入分支判断的值 |
| Show default case | 勾选后会出现default分支 |
| Enable zero-crossing detection | 勾选后使能过零检测算法 |
参数Case condition要求必须使用元胞数组形式输入,每个分支的case值以单独的元胞数组形式输入,并且数据类型必须是int32或者枚举型。
每条case分支可以对应一个或多个数值,混合使用时,此参数最外层使用{ },内部使用[ ]将参数分组,如{3, [5 8]}表示当输入为3时触发case[3]所对应的子系统,当输入为5或8时触发case[5 8]所对应的子系统。
Switch Case模块所能判断的分支是离散的数据点,与if else区间连续的判断不同。并且要求输入数据、参数Case conditions等数据类型保持一致,长度保持在有符号32为整数范围之内,不支持小数的输入判断。
Simulink仿真入门到精通(九) Simulink的流控制的更多相关文章
- Simulink仿真入门到精通(十九) 总结回顾&自我练习
从2019年12月27到2020年2月12日,学习了Simulink仿真及代码生成技术入门到精通,历时17天. 学习的比较粗糙,有一些地方还没理解透彻,全书梳理总结: Simulink的基础模块已基本 ...
- Simulink仿真入门到精通(十八) TLC语言
TLC(Target Language Compiler)是一种为转换为目标语言而存在的额解释性语言,其目的就是将模型中编译出来的rtw文件转换为目标代码(C/C++等).与M语言类似,既可以写成脚本 ...
- Simulink仿真入门到精通(十七) Simulink代码生成技术详解
17.1 基于模型的设计 基于模型设计是一种流程,较之传统软件开发流程而言,使开发者能够更快捷.更高效地进行开发.适用范围包括汽车电子信号处理.控制系统.通信行业和半导体行业. V字模型开发流程整体描 ...
- Simulink仿真入门到精通(十四) Simulink自定义环境
14.1 Simulink环境自定义功能 sl_sustomization.m函数是Simulink提供给用户使用MATLAB语言自定义Simulink标准人机界面的函数机制.若sl_sustomiz ...
- Simulink仿真入门到精通(十一) 模块的封装
当用户编写了自定义的S函数或者使用Simulink标准库中的模块搭建子系统后,可以通过封装为其设计显示外观,追加参数对话框. 封装是构建一个以对话框为接口的交互界面的过程,它将复杂的模块逻辑关系隐藏起 ...
- Simulink仿真入门到精通(八) M语言对Simulink模型的自动化操作及配置
8.1 M语言控制模型的仿真 M语言与Simulink结合的方式: 在Simulink模型或模块中使用回调函数 在M语言中调用与模型相关的命令,控制模型的建立,设置模块的属性,增删信号线,以及运行模型 ...
- Simulink仿真入门到精通(五) Simulink模型的仿真
5.1 模型的配置仿真 由各种模块所构建的可视化逻辑连接,只是模型的外在表现,模型仿真的核心驱动器是被称作解算器(Solver)的组件,相当于Simulink仿真过程的心脏,驱动着模型仿真,它在每一个 ...
- Simulink仿真入门到精通(三) Simulink信号
3.1 Simulink信号概述 所谓信号,表示一种随着时间而变化的量,在时间轴上的采样时刻都对应有数值. 信号在Simulink中是相当重要的组成部分,有线(line)表示,在模型中穿针引线地将各模 ...
- Simulink仿真入门到精通(二) Simulink模块
2.1 Simulink模块的组成要素 用户构建系统模型时无需直接面对成千上万行的代码,而是通过模块化图形界面以模块化的方式构建,能够使理解变得容易,让大脑减负.通过层次化模块分布将系统功能模块化,而 ...
随机推荐
- 堆优DIJ模板
Dij:贪心思想的单源最短路,时间复杂度O(n^2). Dij算法流程: d数组记录源点s到每个点的距离,若无边则设为inf,标记源点: 选出d数组中未标记的最小值,该节点记为k,并标记k为已求出最短 ...
- mysql idb文件过大
分开 保存,每个数据库有自己的 innodb_file_per_table=1
- python掉包侠与深浅拷贝
今日所得 包 logging模块 hashlib模块 openpyxl模块 深浅拷贝 包 在学习模块的时候我们了解过模块的四种表现形式,其中的一种就是包. 什么是包? 它是一系列模块文件的结合体,表示 ...
- abrupt|promising
N-VAR 典礼;(宗教)仪式A ritual is a religious service or other ceremony which involves a series of actions ...
- 基于Docker 部署Jmeter + Grafana + InfluxDB 性能测试监控配置(亲测可用)
工具介绍: InfluxDB:是一款用Go语言编写的开源分布式时序.事件和指标数据库,无需外部依赖.该数据库现在主要用于存储涉及大量的时间戳数据,如DevOps监控数据,APP metrics, lo ...
- 吴裕雄--天生自然python学习笔记:Python3 MySQL 数据库连接 - PyMySQL 驱动
什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. PyMySQL 遵循 Python 数据库 AP ...
- VRRP笔记二:配置keepalived为实现haproxy高可用的配置文件示例
! Configuration File for keepalived global_defs { notification_email { linuxedu@foxmail.com mageedu@ ...
- 吴裕雄--天生自然 python数据分析:加纳卫生设施数据分析
import numpy as np # linear algebra import pandas as pd # data processing, CSV file I/O (e.g. pd.rea ...
- PHP RabbitMQ 教程(三)
发布/订阅 我们在上一节创建了一个工作队列,并假定队列对应的任务传送给了某个客户端.在这一章节我们会做一些完全不一样的东西–我们会发送一条消息到多个消费者,也称之为"发布/订阅"模 ...
- 码海拾遗:strstr()、strcmp()和strcpy()实现
1.strstr()实现 原型:char * strstr(const char * str1, const char * str2) 说明:判断str2是否为str1的子串,如果是则返回str2第一 ...