Stateflow API 概述
Stateflow® 应用程序编程接口 (API) 允许您从 MATLAB® 命令行窗口创建或更改 Stateflow 图。通过将 Stateflow API 命令放在 MATLAB 函数或脚本中,您可以:
通过在单一命令中执行多个编辑步骤来自动化图修改操作。
通过生成可作为应用程序模板重用的“基础”Stateflow 图来消除重复的图创建步骤。
生成模型的专用报告。
Stateflow API 由表示 Stateflow 图的图形对象和非图形对象的对象组成。例如,API 对象 Stateflow.State 和 Stateflow.Transition 表示 Stateflow 图中的状态和转移。当您修改 API 对象的属性或调用其对象函数之一时,您会影响 Stateflow 图中的对应对象。当您使用 Stateflow 编辑器对图中的对象执行操作时,您会影响对应的 API 对象。
注意
您无法撤消在 Stateflow 编辑器中使用 Stateflow API 执行的任何操作。如果您通过 API 执行编辑操作,快速访问工具栏中的撤消和重做按钮将被禁用。
Stateflow API 对象的层次结构
Stateflow API 对象按包含层次结构进行组织。例如,如果状态 A 在 Stateflow 图中包含状态 B,则状态 A 的 API 对象包含状态 B 的 API 对象。Stateflow API 层次结构遵循与 Stateflow 对象层次结构相同的包含规则。例如,图可以包含状态,但状态不能包含图。有关详细信息,请参阅Stateflow 对象概述。
下图显示了 Stateflow API 中对象的层次结构。

该层次结构由四个包含级别组成:
根 -
Simulink.Root对象是所有 Stateflow API 对象的父级。它是 Stateflow API 层次结构顶部的占位符,用于将 Stateflow 对象与 Simulink® 模型中的其他对象区分开来。当您向 Simulink 模型添加 Stateflow 图、State Transition Table 模块、Truth Table 模块或 MATLAB Function 模块时,或当您加载包含这些模块之一的模型时,会自动创建Simulink.Root对象。状态机 - 从 Stateflow 的角度来看,
Stateflow.Machine对象等效于 Simulink 模型。Stateflow.Machine对象包含表示模型中的 Stateflow 图、 State Transition Table 模块、Truth Table 模块和 MATLAB Function 模块的对象。图 -
Stateflow.Chart、Stateflow.StateTransitionTableChart、Stateflow.TruthTableChart和Stateflow.EMChart对象分别表示 Stateflow 图、State Transition Table 模块、Truth Table 模块和 MATLAB Function 模块。此层次结构级别中的对象可以包含表示状态、函数、框、数据、事件、消息、转移、结点、entry 和 exit 端口以及注解的对象。状态、函数和框 - 此层次结构级别包括分别表示状态、函数和框的
Stateflow.State、Stateflow.Function和Stateflow.Box对象。这些对象可以包含表示状态、函数、框、数据、事件、消息、转移、结点、entry 和 exit 端口以及注解的其他对象。嵌套层次数可以无限多。
层次结构图显示存在于包含层次结构之外的两种对象类型:
编辑器 -
Stateflow.Editor对象提供对图和状态转移表的图形方面的访问。对于每个Stateflow.Chart或Stateflow.StateTransitionTableChart对象,都有一个对应的Stateflow.Editor对象,您可以使用它来控制 Stateflow 编辑器的位置、大小和放大级别。有关详细信息,请参阅在 Stateflow 图上放大、在 Stateflow 图上缩小和设置缩放因子。剪贴板 -
Stateflow.Clipboard对象有两个函数,即copy和pasteTo,它们使用剪贴板作为暂存区,在 Stateflow API 中实现复制和粘贴功能。有关详细信息,请参阅Copy and Paste by Grouping和Copy and Paste Array of Objects。
访问 Stateflow API 对象
要使用 Stateflow API,您需要先访问 Simulink.Root 对象,它是 Stateflow API 中所有对象的父级。您使用 Simulink.Root 对象来访问模型中的其他 API 对象。例如:
通过调用函数
sfnew创建一个具有空 Stateflow 图的 Simulink 模型。sfnew
使用函数
sfroot访问Simulink.Root对象。rt = sfroot;
调用
find函数以访问与模型中的图对应的Stateflow.Chart对象。ch = find(rt,"-isa","Stateflow.Chart");
调用
Stateflow.State函数以向图添加状态。此函数返回与新状态对应的Stateflow.State对象。st = Stateflow.State(ch);
在 Stateflow 编辑器中显示新状态。
view(st)
有关详细信息,请参阅Access Objects in Your Stateflow Chart和Create Charts by Using the Stateflow API。
修改 API 对象的属性
API 对象具有与您在 Stateflow 编辑器中设置的值对应的属性。例如,要使用编辑器更改状态的位置,请点击并拖动该状态。使用 Stateflow API,您可以通过修改对应 Stateflow.State 对象的 Position 属性来更改状态的位置:
st.Position = [10 20 100 80];
调用 API 对象函数
API 对象具有与 Stateflow 编辑器中的动作对应的函数。例如,要使用编辑器打开某项转移的“属性”对话框,请右键点击该转移并选择属性。使用 Stateflow API,您可以通过调用对应 Stateflow.Transition 对象的 dialog 函数来打开此对话框:
dialog(tr);
另请参阅
函数
对象
Stateflow.Box|Stateflow.Chart|Stateflow.Clipboard|Stateflow.Editor|Stateflow.EMChart|Stateflow.Function|Stateflow.Machine|Stateflow.State|Stateflow.StateTransitionTableChart|Stateflow.Transition|Stateflow.TruthTableChart