主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

Chart

用有限状态机实现控制逻辑

  • Chart block

库:
Stateflow

描述

Chart 模块以图形方式表示有限状态机。在 Stateflow® 图中,状态和转移构成了顺序模态逻辑系统的基本构建块。状态对应于工作模式,而转移表示系统从一种工作模式到另一种工作模式的通道。有关详细信息,请参阅Model a Finite State Machine

为了实现控制逻辑,Stateflow 图可以使用 MATLAB® 或 C 语言作为动作语言。有关详细信息,请参阅使用 MATLAB 和 C 作为动作语言语法时的差异

示例

端口

输入

全部展开

当您使用符号窗格在 Stateflow 图中创建输入数据时,Stateflow 会在 Chart 模块上创建对应的输入端口。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus | string

输出

全部展开

当您使用符号窗格在 Stateflow 图中创建输出数据时,Stateflow 会在 Chart 模块上创建对应的输出端口。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus | string

参数

全部展开

要以交互方式编辑模块参数,请使用属性检查器。从 Simulink® 工具条的仿真选项卡上的准备库中,选择属性检查器

注意

图还具有 Subsystem (Simulink) 模块参数,您可以通过右键点击图并点击模块参数(子系统) 来访问这些参数。但是,不推荐更新这些参数。

更新或唤醒 Stateflow 图的方法,指定为继承离散连续

继承

来自 Simulink 模型的输入决定图在仿真过程中何时唤醒。

如果您为图定义了输入事件,则连接到触发端口的 Simulink 模块发出的信号会触发图。Simulink 信号可以是上升沿下降沿任一沿(上升和下降),或者是响应函数调用。有关详细信息,请参阅通过发送输入事件激活 Stateflow 图

如果未定义输入事件,Stateflow 图将从 Simulink 模型隐式继承触发器。这些隐式事件是为图提供输入的 Simulink 信号的离散或连续采样时间。如果您定义了数据输入,图将以其中最快的数据输入的速率唤醒。如果没有为图定义任何数据输入,图将按照其父级子系统的执行行为所定义的方式唤醒。

离散

当 Simulink 模型以您在采样时间图属性中指定的固定时间间隔生成隐式事件时,Stateflow 图会唤醒。Simulink 模型中的其他模块可以具有不同的采样时间。

连续

Stateflow 图仅在主时间步内更新其状态,且在主时间步和子时间步内都会计算输出和局部连续变量。图可以记录过零,这样,只要状态发生变化,Simulink 模型就可以对 Stateflow 图进行采样。Stateflow 图计算局部连续变量的导数。有关详细信息,请参阅Continuous-Time Modeling in Stateflow

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: ChartUpdate
值: "INHERITED" (默认) | "CONTINUOUS" | "DISCRETE"

指定在仿真期间图唤醒的时间间隔。默认值表示图从 Simulink 继承采样时间。有关指定采样时间的详细信息,请参阅指定采样时间 (Simulink)

不要在 Subsystem 模块参数中使用采样时间参数。请改用属性检查器

依存关系

要启用此参数,请将更新方法设置为离散

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: SampleTime
值: "-1" (默认) | string scalar | character vector
数据类型: string | char

是否对图中的状态转移启用过零检测。有关详细信息,请参阅Continuous-Time Modeling in Stateflow

依存关系

要启用此参数,请将更新方法设置为连续

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: EnableZeroCrossings
值: true or 1 (默认) | false or 0
数据类型: logical

是否在图中的状态和转移动作中使用位运算,指定为数值或逻辑值 1 (true) 或 0 (false)。

依存关系

要启用此参数,请将动作语言设置为 C

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: EnableBitOps
值: false or 0 (默认) | true or 1
数据类型: logical

是否为图创建激活状态数据输出端口。有关详细信息,请参阅Monitor State Activity Through Active State Data

依存关系

要启用此参数,请创建 Stateflow 状态、状态转移表或原子子图。

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: HasOutputData
值: false or 0 (默认) | true or 1
数据类型: logical

激活状态输出数据的监控模式。有关详细信息,请参阅Monitor State Activity Through Active State Data

依存关系

要启用此参数,请启用创建监控输出

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: OutputMonitoringMode
值: "ChildActivity" (默认) | "LeafStateActivity"

状态转移表的激活状态数据对象的名称。

依存关系

要启用此参数,请启用创建监控输出

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: OutputPortName
值: "ChartMode" (默认) | string scalar | character vector
数据类型: string | char

状态转移表的激活状态数据对象的名称。

依存关系

要启用此参数,请启用创建监控输出

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: EnumTypeName
值: "ChartModeType" (默认) | string scalar | character vector
数据类型: string | char

是否手动定义激活状态数据输出的枚举数据类型。有关详细信息,请参阅Define State Activity Enumeration Type

依存关系

要启用此参数,请启用创建监控输出

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: DoNotAutogenerateEnum
值: false or 0 (默认) | true or 1
数据类型: logical

高级

是否在时间零处初始化图的状态配置,而不是在第一个输入事件处初始化。有关详细信息,请参阅初始化时的图执行

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: ExecuteAtInitialization
值: false or 0 (默认) | true or 1
数据类型: logical

图中的数据是否对整数溢出进行饱和处理。当清除此参数时,图中的数据会在整数溢出时绕回。有关详细信息,请参阅Handle Integer and Enumeration Overflow for Chart Data

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: SaturateOnIntegerOverflow
值: true or 1 (默认) | false or 0
数据类型: logical

是否在每次图唤醒时初始化输出数据。

当选中此参数时,图在每次唤醒时(而不仅仅是在时间 0 处)都会重置其输出值。每当函数调用、边沿触发器或时钟计时单元触发图时,图都会重置输出值。如果为输出数据对象设置初始值,则输出将重置为该值。否则,输出重置为零。选中此参数可以:

  • 确保在每次 Stateflow 图执行时已定义所有输出。

  • 防止输出锁存,即防止用先前执行中计算的输出值。

  • 为所有图输出提供有意义的初始值。

有关详细信息,请参阅初始值

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: InitializeOutput
值: true or 1 (默认) | false or 0
数据类型: logical

图是否支持可变大小数据。有关详细信息,请参阅Declare Variable-Size Data in Stateflow Charts

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: SupportVariableSizing
值: true or 1 (默认) | false or 0
数据类型: logical

是否将图级别函数导出到 Simulink 模型中的其他模块。有关详细信息,请参阅Export Stateflow Functions for Reuse

依存关系

要启用此参数,请向图中添加函数。

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: ExportChartFunctions
值: false or 0 (默认) | true or 1
数据类型: logical

从图中导出的函数在 Simulink 模型中是否全局可见。启用此属性后,整个模型中的模块都可以调用从图中导出的函数,而无需使用限定表示法。

依存关系

要启用此参数,请启用导出图级别函数

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: AllowGlobalAccessToExportedFunctions
值: false or 0 (默认) | true or 1
数据类型: logical

是否为图启用超时间步语义。选择此参数可使图在每个时间步中进行多次转移,直到达到稳态。当您将图属性的“更新”方法设置为“连续”时,此选项不可用。有关详细信息,请参阅Super Step Semantics

依存关系

要启用此参数,请将更新方法设置为离散

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: EnableNonTerminalStates
值: false or 0 (默认) | true or 1
数据类型: logical

在一个超时间步中可以完成的最大转移次数。有关详细信息,请参阅Super Step Semantics

依存关系

要启用此参数,请启用启用超时间步语义

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: NonTerminalMaxCounts
值: 1000 (默认) | positive integer
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

如果超时间步超出在一个超时间步中的最大转移次数,Stateflow 要执行的动作。有关详细信息,请参阅Super Step Semantics

依存关系

要启用此参数,请启用启用超时间步语义

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: NonTerminalUnstableBehavior
值: "Proceed" (默认) | "Throw Error"

自 R2022b 起

图是否将维度长度为 1 的输出数据视为固定大小。当选中此参数时,无论是否启用可变大小数据属性,图都会将有至少一个长度为 1 的维度的输出数据视为固定大小。当清除此参数时,图会将启用了可变大小属性的数据视为可变大小。

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: TreatDimensionOfLengthOneAsFixedSize
值: true or 1 (默认) | false or 0
数据类型: logical

指定在仿真和代码生成期间 Stateflow 分析哪些模块变体。根据您选择的选项,Stateflow 确定生成的代码是只能包含活动选择项,还是同时包含活动和非活动选择项。

  • 更新图时分析所有选择项 - 当您选择此选项时,Stateflow 会分析活动和非活动选择项的信号属性不兼容性,并只为活动选择项生成代码。

  • 代码编译 - 当您选择此选项时,Stateflow 分析变体转移的活动和非活动选择项,并为活动和非活动选择项都生成代码。这些选择项包含在 C 预处理器条件句 #if 和 #endif 中,当您编译生成的代码时,这些条件句会有条件地编译。

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: VariantActivationTime
值: "update diagram analyze all choices" (默认) | "code compile"

对图进行编程时所用的动作语言,指定为 MATLABC。有关详细信息,请参阅使用 MATLAB 和 C 作为动作语言语法时的差异

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: ActionLanguage
值: "MATLAB" (默认) | "C"

由图实现的状态机语义,指定为 ClassicMealyMoore。有关详细信息,请参阅米利和摩尔状态机概述

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: StateMachineType
值: "Classic" (默认) | "Mealy" | "Moore"

定点属性

继承的 Simulink 信号被视为 Fixed-Point Designer™ fi 对象,指定为以下值之一:

  • Fixed-point - 图将所有定点输入视为 fi 对象。

  • Fixed-point & Integer - 图将所有定点输入和整数输入视为 fi 对象。

依存关系

要启用此参数,请将动作语言设置为 MATLAB

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: TreatAsFi
值: "Fixed-point" (默认) | "Fixed-point & Integer"

图的默认 fimath 属性,指定为以下值之一:

  • Same as MATLAB - 图使用与当前默认 fimath 对象相同的 fimath 对象属性。文本框灰显,并以只读形式显示当前全局 fimath 对象。

  • Specify other - 以下面两种方式之一在文本框中指定您自己的 fimath 对象:

    • 在文本框内构造 fimath 对象。

    • 在 MATLAB 或模型工作区中构造 fimath 对象,然后在文本框中输入其变量名称。如果您使用此选项并计划与他人共享您的模型,请在模型工作区中定义此变量。

有关详细信息,请参阅fimath Object Construction (Fixed-Point Designer)

依存关系

要启用此参数,请将动作语言设置为 MATLAB

编程用法

要以编程方式设置图参数值,请访问图的 Stateflow.Chart 对象,并使用圆点表示法更改对象属性。

参数: EmlDefaultFimath
值: "Same as MATLAB Default" (默认) | "Other:UserSpecified"

扩展功能

全部展开

C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。

定点转换
使用 Fixed-Point Designer™ 设计和仿真定点系统。

版本历史记录

在 R2006a 之前推出

全部展开