工作模式之间的转移
转移表示反应式系统从一种工作模式转换为另一种工作模式的通道。在 stateflow® 图中,转移是一条通常连接两个状态的带箭尖的线。转移的源是转移开始的状态,转移的目标是转移结束的状态。
也可以使用连接结点创建一条包含多个转移段的转移路径。例如,您可以创建一条从一个源到多个目标或从多个源到一个目标的转移路径。在这种情况下,任何中间转移都有一个连接结点作为源或目标。有关详细信息,请参阅。
默认转移是一种没有源的特殊转移类型。在图或具有互斥 (or) 分解和至少两个子状态的状态中,必须有一条不受条件保护或由事件触发的默认转移路径。在没有历史结点的情况下,默认转移表示当图或父状态激活时,第一个子状态激活。有关详细信息,请参阅。
例如,下图中的状态表示一个具有两个风扇的空调系统的工作模式。状态 poweron
和 poweroff
之间的转移表示当空调系统打开和关闭时模式的变化。到状态 poweroff
的默认转移表示当图在仿真开始时唤醒,此时系统处于关闭状态。同样,在状态 fan1
和 fan2
中,子状态之间的转移表示每个风扇打开和关闭时的模式变化,默认转移指示当父状态 poweron
变为激活时风扇关闭。有关此示例的详细信息,请参阅。
转移的父级是包含转移源和目标的最低层级的状态或图。例如,在前面的示例中,fan1
是子状态 fan1.on
和 fan1.off
之间转移的父状态。同样,fan2
是子状态 fan2.on
和 fan2.off
之间转移的父状态。相反,状态 poweron
和 poweroff
之间转移的父级是图本身。
创建转移
您可以向新的或现有目标添加转移。
指向源状态或结点的边界。指针变为十字准线。
点击并从源状态或结点拖离。stateflow 编辑器提供图形提示,允许您添加结点或状态。
选择新转移的目标:
要在转移的末尾添加新状态,请点击矩形提示。
要在转移的末尾添加新结点,请点击圆形提示。
要将转移连接到一个现有的状态或结点,请将指针拖到所需的目标。
为转移输入标签,然后在转移外部点击以离开转移。标签指定使转移生效的条件和触发器,以及转移在仿真期间执行的任何动作。有关详细信息,请参阅定义转移中的动作。
创建转移后,您可以使用 stateflow 编辑器来更改转移的形状、源、目标或标签:
要更改转移的形状,请点击并拖动转移的中点。
要更改源或目标,请点击并拖动转移的端点。
要编辑转移标签,请点击您要编辑的字符位置附近的标签文本。如果您的转移有空标签,请先选择转移。
要移动转移标签,请点击并拖动标签。
创建默认转移
在对象选项板中,点击默认转移图标 。
在图画布上,点击目标状态或结点的一侧。
(可选)为默认转移添加标签。
提示
默认转移的端点大小与箭尖大小成比例。请参阅更改转移箭尖大小。
定义转移中的动作
转移的标签指定事件或消息触发器和使转移生效的条件,以及转移在仿真期间执行的条件动作和转移动作。转移标签一般采用以下格式:
trigger[condition]{condition_action}/{transition_action}
标签的每个部分均为可选,且可以出现在单独的行上。有关图如何使用标签来确定转移有效性的详细信息,请参阅。
事件或消息触发器
转移标签以触发转移的事件或消息的名称开头。要指定多个事件或消息触发器,请使用逻辑 or (|
) 运算符。
仅当图接收到指定事件的广播时,具有事件触发器的转移才会生效。仅当消息队列中存在指定的消息时,具有消息触发器的转移才会生效。有关详细信息,请参阅通过广播事件同步模型组件和通过发送消息与 stateflow 图通信。
例如,在下图中,状态 poweroff
和 poweron
之间的转移有事件触发器。当源状态被激活并且图接收到输入事件 switch
的广播时,这些转移将生效。
提示
您可以使用隐式事件(如 、 或 )和时序逻辑运算符(如 、、 或 )来触发转移。有关详细信息,请参阅和。
条件
要向转移标签添加条件,请输入用方括号 ([]
) 括起来的布尔表达式。请遵循以下规范来定义条件:
条件表达式必须是计算结果为
true
(1) 或false
(0) 的布尔表达式。要组合多个布尔表达式,请使用逻辑 and (
&&
) 和 or (||
) 运算符。要在多个行上输入条件表达式,请使用省略号 (
...
)。条件表达式可以调用图形函数、真值表函数、matlab® 函数或返回数值的 simulink® 函数。但是,该函数不能修改任何数据值或导致图更改状态。
不要在条件表达式中使用赋值语句。
仅当指定的表达式为 true 时,带条件的转移才生效。例如,在下图中,子状态 off
和 on
之间的转移具有将图输入 temp
的值与阈值进行比较的条件。当源状态被激活且该条件为 true 时,这些转移将生效。
条件动作
一旦图确定转移有效,就会执行条件动作。要添加条件动作,请在条件后输入一个或多个用花括号 ({}
) 括起来的语句。要分隔多个语句,请使用逗号或分号。您也可以在单独的行中输入每个语句。要在多行上输入一个语句,请使用省略号 (...
)。
如果转移是由多个段组成的一条转移路径的一部分,则图会在计算转移路径的任何后续段之前执行条件动作。例如,下图包含一条具有两个转移段的转移路径。当图接收到输入事件 switch
的广播时,无论第二个转移段是否有效,图都会在第一个转移段上执行条件动作。有关详细信息,请参阅。
转移动作
当图确定整个转移路径有效时,便会执行转移动作。要添加转移动作,请在条件动作后输入正斜杠 (/
),后跟一个或多个用花括号 ({}
) 括起来的语句。要分隔多个语句,请使用逗号或分号。您也可以在单独的行中输入每个语句。要在多行上输入一个语句,请使用省略号 (...
)。
如果转移是由多个段组成的一条转移路径的一部分,则图会在确定存在一系列到目标状态或终止结点的有效段后执行转移动作。例如,下图包含一条具有两个转移段的转移路径。当图接收到输入事件 switch
的广播时,仅当第二个转移段有效时,图才在第一个转移段上执行转移动作。有关详细信息,请参阅。
matlab 中的独立 stateflow 图不支持转移动作。
提示
在使用 c 语言作为动作语言的图中,您不必将转移动作用花括号括起来。在使用 matlab 作为动作语言的图中,如果转移动作缺少花括号,将自动更正语法。请参阅。
更改转移箭尖大小
要调整转移上箭尖的大小,请执行以下操作:
右键点击转移。
选择箭尖大小。
从下拉列表中选择箭尖大小。
您也可以同时调整多个转移的箭尖大小。
选择多个转移。
右键点击其中一个选定的转移。
选择格式 > 箭尖大小。
从下拉列表中选择箭尖大小。
更改转移上的箭尖大小也会更改具有相同目标的其他转移的箭尖大小。
指定转移的属性
您可以通过下面列出的属性指定转移如何与 stateflow 图中的其他组件交互。您可以在属性检查器、模型资源管理器或“转移”属性对话框中修改这些属性。
要使用属性检查器,请执行以下操作:
在建模选项卡的设计数据下,选择属性检查器。
在 stateflow 编辑器中,选择转移。
在属性检查器中,编辑转移属性。
要使用模型资源管理器,请执行以下操作:
在建模选项卡的设计数据下,选择模型资源管理器。
在模型层次结构窗格中,选择转移的父状态或图。
在内容窗格中,选择转移。
在对话框窗格中,编辑转移属性。
要使用“转移”属性对话框,请执行以下操作:
在 stateflow 编辑器中,右键点击转移。
选择属性。
在属性对话框中,编辑转移属性。
您还可以通过使用 对象以编程方式修改转移属性。有关 stateflow 编程接口的详细信息,请参阅 。
源
转移的源。此属性为只读且在属性检查器中不可用。当您点击源超链接时,stateflow 编辑器会将转移源置于前台。
目标
转移的目标。此属性为只读且在属性检查器中不可用。当您点击目标超链接时,stateflow 编辑器会将转移目标置于前台。
父级
转移的父级。此属性为只读且在属性检查器中不可用。当您点击父超链接时,stateflow 编辑器会将该父超链接置于前台。
执行顺序
转移的执行顺序。有关详细信息,请参阅。
视为变体转移
转移是否为变体转移。有关详细信息,请参阅。
标签
转移的标签。此属性在属性检查器中不可用。有关详细信息,请参阅定义转移中的动作。
描述
转移的描述。
文档链接
转换的在线文档的链接。您可以输入 web url 地址或者将文档显示为 html 文件或 matlab 命令行窗口中的文本的 matlab 命令。点击文档链接超链接时,stateflow 会计算该链接并显示该文档。
另请参阅
对象
工具
- (simulink)