文档

如果

模型否则控制流

图书馆

端口和子系统模块库

描述

这个如果块,连同中频动作子系统包含目标左舷,实现if-else逻辑。

下面显示已完成的if-else控制流语句。

在本例中,输入到如果块确定表示为输出端口的条件值。每个输出端口都连接到一个中频动作子系统块。条件是自顶向下计算的,从如果条件如果条件为真,则其中频动作子系统执行,则如果块不评估任何剩余条件。

前面的if-else控制流语句可以由以下伪代码表示。

if(u1>0){if动作子系统1;}else if(u2>0){if动作子系统2;}else{if动作子系统3;}

你构建一个Simulink金宝app®if else控制流语句,如上例所示,如下所示:

  1. 放置如果当前系统中的块。

  2. 打开对话框如果Block and enter如下:

    • 进入输入数量字段,该字段具有定义条件所需的输入数量否则控制流语句。

      vector输入的元素可以使用(行、列)参数访问条件。例如,可以在条件u2(5) > 0中指定向量u2的第五个元素If表达式Elseif表达式领域

    • 输入的if条件的表达式否则中的控制流语句If表达式领域

      这将为带有表单标签的if块创建一个if输出端口如果(条件). 这是If块唯一需要的If动作信号输出。

    • 的任何else条件的表达式否则中的控制流语句Elseif表达式领域

      用逗号把条件分开。的输出端口如果每个条件的块,带有表单的标签elseif(条件). elseif端口是可选的,不需要用于If块的操作。

    • 检查显示其他条件选中此复选框可创建else输出端口。

      else端口是可选的,对于If块的操作来说不是必需的。

  3. 添加中频动作子系统块连接到每个if、else和elseif端口。

    它们由一个子系统和一个目标左舷块。当你放置一个目标左舷块,一个名为Action的输入端口被添加到子系统中。

  4. 的每个if、else和elseif端口连接如果块的操作端口中频动作子系统块。

    当您进行连接时,If Action块的图标将被重命名为它所附加的条件的类型。

    笔记

    在模拟否则控制流语句中,从If块到If动作子系统的动作信号线从实线变为虚线。

  5. 中频动作子系统,输入适用于要针对其处理金宝app的条件执行的实体的Simulink块。

限制

这个如果Block有以下限制:

  • 在正常或加速模式模拟期间,无法优化if或elseif表达式(请参阅加速模式如何工作)或在生成的代码中。这个如果块不支持可调参数。要实现可调的金宝appif-else表达式,请在if块之外对表达式进行调优。例如,使用关系运算符块在外部计算表达式,或将可调参数作为输入添加到如果块。

  • 这个如果块不支持自定义存储类。看见金宝app定制的存储类(嵌入式编码器)在嵌入式编码器®文档。

  • 这个If表达式Elseif表达式无法接受某些运算符,例如+, -, *,/. 查看中的表达式和Elseif表达式参数

数据类型支持金宝app

投入u1, u2,…,联合国可以是任何内置Simulink数据类型的标量或向量,并且必须都是相同的数据类型。金宝app输入不能是任何用户定义的类型,比如枚举类型。输出的如果,其他的,埃尔塞夫端口是到的动作信号中频动作子系统使用创建的块目标左舷块和子系统。

有关更多信息,请参见Simulink支持的金宝app数据类型金宝app在Simuli金宝appnk文档中。

参数

输入数量

指定If块的输入数。这些端口显示为标有“你”字符后跟数字,1,2,…,n,在那里N等于您指定的输入数。

If表达式

的条件如果输出端口。控件旁边的If块上出现此条件如果输出端口。这个If表达式可否只包括操作员<, <=, ==, ~=, >, >=, &, |, ~,(),一元减,并且不能包括运算符,例如+, -, *, /,^.这个中频动作子系统附加到如果如果Port的条件为真,则执行Port。表达式不能包含数据类型表达式,例如:int8(6),并且不得引用其数据类型不是的工作区变量仅有一个的

笔记

的可调性有限制If表达式.看到限制为更多的信息。

Elseif表达式

的字符向量列表埃尔塞夫由逗号分隔的条件。这些情况出现在下面如果港口及以上其他的端口,当您选择显示其他条件复选框。Elseif表达式可否只包括操作员<, <=, ==, ~=, >, >=, &, |, ~,(),一元减,并且不能包括运算符,例如+, -, *, /,^.这个中频动作子系统附属于埃尔塞夫如果Port的条件为真,则执行如果埃尔塞夫条件是错误的。表达式不能包含数据类型表达式,例如:int8(6),并且不得引用其数据类型不是的工作区变量仅有一个的

笔记

的可调性存在限制Elseif表达式.看到限制为更多的信息。

显示其他条件

如果选中此复选框,则其他的端口创建。的If操作子系统其他的如果如果港口和所有埃尔塞夫端口是假的。

启用过零检测

选择启用过零检测。有关更多信息,请参见过零检测

采样时间

笔记

此参数在块对话框中是不可见的,除非它被显式地设置为非-1. 要了解更多信息,请参阅不建议使用采样时间的块

例子

If块不直接支持定点数据类型。金宝app但是,你可以使用比较恒定的块来解决这个限制。

例如,考虑以下内容浮点模型:

在此模型中,If操作子系统使用其默认配置。模型的块参数和模拟参数设置为其默认值,以下情况除外:

块或对话框

参数

设置

配置参数,解算器窗格

开始时间

0.0

停止时间

1.0

类型

固定步长

解算器

离散(无连续状态)

固定步长

0.1

重复阶梯序列

输出值向量

[-2 -1 1 2].'

重复序列Stair1

输出值向量

[0 0 0 0 1 1 1 1]。

如果

输入数量

2.

If表达式

(u1 >) | (u2 > 0.5)

显示其他条件

选择

常数

定值

-4

康斯坦特1

定值

4.

范围

数量的轴

3.

时间范围

1.

对于这个模型,如果输入u1是大于0还是大于输入u2大于0.5时,输出为4。否则,输出为–4。范围块显示输出,u1,u2:

您可以将此框图实现为使用定点数据类型进行建模:

重复序列楼梯块现在输出定点数据类型。

比较常量块实现了If表达式在模型浮点版本的If块中使用,(u1>0)(u2>0.5).这个操作,(u1 | u2),仍然可以在If块内实现。对于定点模型,表达式必须在If块之外部分实现,就像这里一样。

定点模型的块参数和模拟参数与浮点模型相同,但有以下例外和补充:

参数

设置

比较恒定的

操作人员

>

定值

0

输出数据类型模式

布尔

启用过零检测

比较Constant1

操作人员

>

定值

0.5

输出数据类型模式

布尔

启用过零检测

如果

输入数量

2.

If表达式

u1 | u2

特征

数据类型

双|单|布尔|基整数

采样时间

继承自驱动块

直接引线

多维信号

没有

可变大小信号

没有

过零检测

是,如果启用

代码生成

之前介绍过的R2006a

这个话题有用吗?