主要内容

Stateflow.State

R2026b

图、状态或框中的状态

    描述

    使用 Stateflow.State 对象描述反应式系统的工作模式。有关详细信息,请参阅通过使用状态来表示工作模式。

    创建对象

    描述

    state = Stateflow.State(parent) 在父图、父状态或父框中创建一个 Stateflow.State 对象。

    示例

    输入参量

    全部展开

    新状态的父级,指定为以下类型之一的 Stateflow® API 对象:

    属性

    全部展开

    Stateflow API 对象具有与您在 Stateflow 编辑器中设置的值对应的属性。要访问或修改属性,请使用圆点表示法。要访问或修改多个 API 对象的多个属性,请分别使用 get 和 set 函数。有关详细信息,请参阅Modify Properties and Call Functions of Stateflow Objects。

    内容

    状态的名称,指定为字符串标量或字符向量。

    状态的标签,指定为字符串标量或字符向量。有关详细信息,请参阅Specify Labels in States and Transitions Programmatically。

    此 属性 为只读。

    状态 during 动作,指定为字符向量。此属性的值取决于状态的 LabelString 属性。有关详细信息,请参阅Specify Labels in States and Transitions Programmatically。摩尔图中不支持此属性。

    此 属性 为只读。

    状态 entry 动作,指定为字符向量。此属性的值取决于状态的 LabelString 属性。有关详细信息,请参阅Specify Labels in States and Transitions Programmatically。摩尔图中不支持此属性。

    此 属性 为只读。

    状态 exit 动作,指定为字符向量。此属性的值取决于状态的 LabelString 属性。有关详细信息,请参阅Specify Labels in States and Transitions Programmatically。摩尔图中不支持此属性。

    此 属性 为只读。

    摩尔图中的状态动作,指定为字符向量。此属性的值取决于状态的 LabelString 属性。有关详细信息,请参阅Specify Labels in States and Transitions Programmatically。此属性仅在摩尔图中受支持。有关详细信息,请参阅Design Guidelines for Moore Charts。

    此 属性 为只读。

    状态 on 动作,指定为以下形式的字符向量元胞数组:

    {'trigger1','action1',...,'triggerN','actionN'}

    此属性的值取决于状态的 LabelString 属性。有关详细信息,请参阅Specify Labels in States and Transitions Programmatically。摩尔图中不支持此属性。

    是否注释掉状态,指定为数值或逻辑值 1 (true) 或 0 (false)。将此属性设置为 true 等效于右键点击状态并选择注释掉。有关详细信息,请参阅Comment Out Objects in a Stateflow Chart。

    此 属性 为只读。

    状态是否隐式被注释掉,指定为数值或逻辑值 1 (true) 或 0 (false)。当您显式注释掉包含状态的对象时,该状态会隐式被注释掉。如果状态包含在原子子图中,则此属性为 false,除非显式注释掉的对象也包含在该原子子图中。

    自 R2023a 起

    此 属性 为只读。

    状态是否被注释掉,指定为数值或逻辑值 1 (true) 或 0 (false)。当 IsExplicitlyCommented 或 IsImplicitlyCommented 为 true 时,此属性为 true。

    添加到状态的注释文本,指定为字符串标量或字符向量。此属性仅在 IsExplicitlyCommented 属性为 true 时适用。在 Stateflow 编辑器中,当您指向状态上的注释徽章 时,文本显示为工具提示。当您将 IsExplicitlyCommented 属性设置为 false 时,CommentText 的值会还原为 ""。

    图形外观

    状态的位置和大小,指定为 [left top width height] 形式的四元素数值向量。

    此 属性 为只读。

    状态是否在图形上与框、状态或函数相交,指定为数值或逻辑值 1 (true) 或 0 (false)。

    状态是否为组合状态,指定为数值或逻辑值 1 (true) 或 0 (false)。当您复制并粘贴组合状态时,您不仅复制该状态,还会复制其所有内容。有关详细信息,请参阅Copy and Paste by Grouping。

    状态是否为子图,指定为数值或逻辑值 1 (true) 或 0 (false)。

    是否显示状态内容的预览,指定为数值或逻辑值 1 (true) 或 0 (false)。此属性仅在 IsSubchart 属性为 true 时适用。

    入向转移箭头的大小,指定为标量。

    状态标签的字体大小,指定为标量。包含状态的图的 StateFont.Size 属性可设置此属性的初始值。

    状态分解

    位于状态顶层的子状态的分解,指定为 "EXCLUSIVE_OR" 或 "PARALLEL_AND"。有关详细信息,请参阅指定子状态分解。

    此 属性 为只读。

    同级状态的分解,指定为 'AND' 或 'OR'。状态从其父状态或图的 Decomposition 属性继承此属性。

    状态在并行 (AND) 分解中的执行顺序,指定为整数标量。此属性仅在同时满足以下两个条件时适用:

    • 状态的 Type 属性为 "AND"。

    • 包含状态的图的 UserSpecifiedStateTransitionExecutionOrder 属性为 true。

    激活状态输出

    是否为状态创建激活状态数据输出端口,指定为数值或逻辑值 1 (true) 或 0 (false)。有关详细信息,请参阅通过激活状态数据监控状态活动。

    此 属性 为只读。

    状态的激活状态数据对象,指定为 Stateflow.Data 对象。此属性仅在状态的 HasOutputData 属性为 true 时适用。

    状态的激活状态数据对象的名称,指定为字符串标量或字符向量。此属性仅在状态的 HasOutputData 属性为 true 时适用。

    激活状态输出数据的监控模式,指定为 "SelfActivity"、"ChildActivity" 或 "LeafStateActivity"。

    状态的激活状态数据对象的枚举数据类型的名称,指定为字符串标量或字符向量。此属性仅在状态的 OutputMonitoringMode 属性为 "ChildActivity" 或 "LeafStateActivity" 时适用。有关详细信息,请参阅枚举名称。

    是否手动定义激活状态数据输出的枚举数据类型,指定为数值或逻辑值 1 (true) 或 0 (false)。此属性仅在状态的 OutputMonitoringMode 属性为 "ChildActivity" 或 "LeafStateActivity" 时适用。有关详细信息,请参阅定义状态活动枚举类型。

    信号记录和测试点监控

    状态的信号记录属性,指定为具有以下属性的 Stateflow.SigLoggingInfo 对象:

    • DataLogging - 是否启用信号记录,指定为数值或逻辑值 1 (true) 或 0 (false)。

    • DecimateData - 是否限制记录的数据量,指定为数值或逻辑值 1 (true) 或 0 (false)。

    • Decimation - 抽取间隔,指定为整数标量。此属性仅在 DecimateData 属性为 true 时适用。

    • LimitDataPoints - 是否限制要记录的数据点数,指定为数值或逻辑值 1 (true) 或 0 (false)。

    • MaxPoints - 要记录的最大数据点数,指定为整数标量。此属性仅在 LimitDataPoints 属性为 true 时适用。

    • NameMode - 信号名称的来源,指定为 "SignalName" 或 "Custom"。

    • LoggingName - 自定义信号名称,指定为字符串标量或字符向量。此属性仅在 NameMode 属性为 "Custom" 时适用。

    在仿真期间,信号记录将状态的自身活动保存到 MATLAB® 工作区。有关详细信息,请参阅Log Simulation Output for States and Data。

    示例: state.LoggingInfo.DataLogging = true;

    是否将状态设置为测试点,指定为数值或逻辑值 1 (true) 或 0 (false)。您可以在仿真期间使用浮动示波器监控测试点。您还可以将测试点值记录到 MATLAB 工作区。有关详细信息,请参阅将信号配置为测试点 (Simulink)。

    调试

    状态的调试器属性,指定为具有以下属性的 Stateflow.StateDebug 对象:

    • OnEntry - 是否设置 On State Entry 断点,指定为数值或逻辑值 1 (true) 或 0 (false)。

    • OnDuring - 是否设置 During State 断点,指定为数值或逻辑值 1 (true) 或 0 (false)。

    • OnExit - 是否设置 On State Exit 断点,指定为数值或逻辑值 1 (true) 或 0 (false)。

    有关详细信息,请参阅Set Breakpoints to Debug Charts。

    示例: state.Debug.Breakpoints.OnEntry = true;

    示例: state.Debug.Breakpoints.OnDuring = true;

    示例: state.Debug.Breakpoints.OnExit = true;

    代码生成

    状态函数在生成代码中的外观,指定为以下值之一:

    • "Auto" - 内部计算确定生成代码中状态函数的外观。

    • "Function" - 状态函数作为单独的静态函数来实现。

    • "Inline" - 只要函数不是递归的一部分,对状态函数的调用就会被代码替换。

    有关详细信息,请参阅Inline State Functions in Generated Code (Simulink Coder)。

    层次结构

    此 属性 为只读。

    包含状态的图,指定为 Stateflow.Chart 对象。

    此 属性 为只读。

    状态的子查看器,指定为 Stateflow.Chart、Stateflow.State 或 Stateflow.Box 对象。子查看器可以以图形方式查看状态的图或子图。

    此 属性 为只读。

    包含状态的状态机,指定为 Stateflow.Machine 对象。

    此 属性 为只读。

    状态的父级在模型层次结构中的位置,指定为字符向量。

    标识

    状态的描述,指定为字符串标量或字符向量。

    状态的文档链接,指定为字符串标量或字符向量。

    状态的用户定义的标记,指定为任何类型的数据。

    此 属性 为只读。

    会话独立标识符,指定为整数标量。使用此属性区分状态与其父图中的其他对象。

    此 属性 为只读。

    唯一标识符,指定为整数标量。与 SSIdNumber 不同,每次启动新 MATLAB 会话时都会重新分配此属性的值,并且在删除对象后可能会回收该值。

    对象函数

    findIdentify specified objects in hierarchy
    getChildren标识对象的子级
    getParent标识对象的父级
    defaultTransitions识别指定对象中的默认转移
    innerTransitions识别具有指定源的内部转移
    outerTransitions识别具有指定源的出向转移
    sinkedTransitions识别具有指定目标的转移
    sourcedTransitions识别具有指定源的转移
    getReferencesIdentify references to symbol name
    renameReferencesRename symbol and update references to symbol name
    commentedByIdentify objects that implicitly comment out a graphical object
    dialog打开属性对话框
    view在编辑环境中显示对象
    highlight突出显示图形对象
    fitToView放大图形对象

    示例

    全部折叠

    在图 ch 中添加状态。将其名称设置为 A。

    state = Stateflow.State(ch);
    state.Name = "A";

    要在状态 state 中输入一个多行标签,您可以:

    • 调用 MATLAB 函数 sprintf 并使用转义序列 \n 插入换行符:

      str = sprintf("A\nen: action1();\ndu: action2();\nen,du: action3();");
      sA.LabelString = str;
    • 输入使用函数 newline 创建换行符的串联文本表达式:

      str = "A" + newline + ...
          "en: action1();" + newline + ...
          "du: action2();" + newline + ...
          "en,du: action3();"
      sA.LabelString = str;

    State with entry and during actions.

    要提取状态标签指定的状态名称、entry 动作和 during 动作,请输入:

    name = state.Name
    name =
    
        'A'
    entry = state.EntryAction
    entry =
    
        ' action1();
          action3();'
    during = state.DuringAction
    during =
    
        ' action2();
          action3();'

    有关详细信息,请参阅Specify Labels in States and Transitions Programmatically。

    创建一个将子图内部结点连接到子图外部结点的超转移。

    A Stateflow chart with two junctions. One junction is inside a subchart, while the other is outside the subchart. The chart does not have transitions.

    打开模型并访问图的 Stateflow.Chart 对象。

    open_system("sfSupertransitionAPIExample")
    ch = find(sfroot,"-isa","Stateflow.Chart");

    访问子图的 Stateflow.State 对象和各结点的 Stateflow.Junction 对象。

    st = find(ch,"-isa","Stateflow.State");
    j1 = find(st,"-isa","Stateflow.Junction");
    j2 = find(ch,"-isa","Stateflow.Junction","-depth",1);

    将子图的原始位置保存到临时工作区变量 subchartPosition。

    subchartPosition = st.Position;

    通过将子图的 IsSubchart 和 IsGrouped 属性设置为 false 将子图转换为普通状态。

    st.IsSubchart = false;
    Assertion failed:  Deviant 'root deviant' not opened for transactions.
    Attempt to modify object of type 'StateflowDI.Junction' [id = -1 ]  at kernel/deviant/Deviant.cpp:75: 
    
    st.IsGrouped = false;

    当您将子图转换为普通状态时,它可能会更改大小以显示其内容。

    A Stateflow subchart that has been converted to a state. The state contains a junction. Outside of the state, there is a disconnected junction.

    添加将结点 j1 连接到结点 j2 的转移。

    tr = Stateflow.Transition(ch);
    tr.Source = j1;
    tr.Destination = j2;

    A junction inside a state connects to an exterior junction by using a transition.

    通过将状态的 IsSubchart 属性设置为 true 将状态还原为子图。将子图还原到其原始位置。

    st.IsSubchart = true;
    st.Position = subchartPosition;

    Stateflow chart with a subchart. A supertransition connects a junction inside the subchart to a junction outside the subchart.

    结点之间的转移现在是跨子图边界的超转移。

    版本历史记录

    在 R2006a 之前推出

    全部展开