Main Content

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

在编辑时检测建模错误

启用编辑时检查时,Stateflow® 编辑器会在您设计图的过程中检测潜在的错误和警告。通过在设计过程的早期解决这些问题,可以避免编译时或运行时警告和错误。

Stateflow 编辑器以红色(表示错误)或橙色(表示警告)突出显示违反编辑时检查的对象。当您指向突出显示的对象并点击错误或警告标志时,工具提示会显示详细信息和可能的修复方法。

管理编辑时检查

默认情况下,编辑时检查和语法错误突出显示处于启用状态。要禁用编辑时检查,请在调试选项卡中,清除诊断 > 编辑时错误和警告复选框。也可以使用 edittime.setDisplayIssues (Simulink) 禁用编辑时检查。

下表列出了“配置参数”对话框的诊断 > Stateflow 窗格中具有关联诊断配置参数的编辑时检查。

您可以将这些编辑时检查的配置参数值设置为错误警告,以此来控制其诊断操作的级别。当您更改配置参数的设置时,对应的编辑时检查的诊断级别也会发生变化。例如,如果将不可达的执行路径配置参数设置为 none,则 Stateflow 编辑器不会突出显示空悬转移、转移遮蔽或不可达状态。

针对状态和子图的编辑时检查

原子子图包含状态动作

  • 问题:原子子图不支持状态动作。

  • 诊断级别:错误。

  • 解决方案:删除状态动作或将它们移至原子子图的子状态。

    Atomic subchart that contains state actions.

缺失默认转移

  • 问题:在具有互斥 (OR) 分解和至少两个子状态或结点的图或状态中,需要默认转移来指示执行开始的位置。

  • 诊断级别:错误。

  • 解决方案:通过添加默认转移来指定初始状态。有关详细信息,请参阅使用默认转移来指定初始子状态活动

    Chart with no default transition.

图形函数包含状态

  • 问题:由于图形函数完全在单一时间步中执行,它们不能包含任何状态。

  • 诊断级别:错误。

  • 解决方案:用结点替换状态。有关详细信息,请参阅通过定义图形函数重用逻辑模式

    Graphical function that contains a state.

无效交叉

  • 问题:在 Stateflow 编辑器中,状态和结点不能重叠。

  • 诊断级别:错误。

  • 解决方案:通过分离状态和结点来避免交叉。

    Invalid intersection between states.

监控并行状态的叶状态或子状态活动

  • 问题:具有并行 (AND) 分解的图和状态不支持监控叶或子状态活动,因为并行子状态会同时激活。

  • 诊断级别:警告。

  • 解决方案:打开属性检查器或模型资源管理器。清除创建监控输出复选框,或从下拉列表中选择自身活动。有关详细信息,请参阅Monitor State Activity Through Active State Data

    Parallel substates in a state that monitors child state activity.

状态包含语法错误

  • 问题:状态动作未遵循 Stateflow 语法规则。Stateflow 编辑器用红色波浪下划线标示语法错误。另请参阅转移包含语法错误

  • 诊断级别:错误。

  • 解决方案:更正状态动作中的语法错误。有关详细信息,请参阅定义状态中的动作

    State that contains a syntax error.

    注意

    在父图中,有语法错误的子图以红色突出显示,并有错误标记指示语法问题。在子图编辑器中,语法错误用红色下划线标出,但没有标记来指示问题。

不可达状态

  • 问题:当没有有效的执行路径到达某状态时,该状态不可达

  • 诊断级别:取决于配置参数Unreachable execution path (Simulink)

  • 解决方案:用来自可达源的转移连接不可达状态。

    Chart that contains an unreachable state.

针对转移的编辑时检查

空悬转移

默认转移路径未在某个状态中终止

  • 问题:在具有互斥 (OR) 分解和至少一个子状态的图或状态中:

    • 默认转移路径的每个分支都必须指向一个子状态。

    • 默认转移路径必须有一个分支不受条件保护或不由事件触发。

  • 诊断级别:取决于配置参数No unconditional default transitions (Simulink)

  • 解决方案:终止默认转移路径在子状态中的每个分支。确保默认转移路径有一个分支不受条件保护或不由事件触发。

    Chart without an unconditional default transition branch to a state.

默认转移路径无效

  • 问题:默认转移路径不能退出父状态。

  • 诊断级别:错误。

  • 解决方案:修改默认转移路径,使其保持在父状态中。

    Chart with an invalid default transition path.

转移包含语法错误

  • 问题:在转移中,某条件或动作未遵循 Stateflow 语法规则。Stateflow 编辑器用红色波浪下划线标示语法错误。另请参阅状态包含语法错误

  • 诊断级别:错误。

  • 解决方案:更正转移条件或动作中的语法错误。有关详细信息,请参阅定义转移中的动作

    Transition that contains a syntax error.

转移动作先于此路径上的条件动作

  • 问题:如果一个转移的转移动作后跟另一转移的条件动作,则不会按转移的顺序执行动作。当关联条件的计算结果为 true 时,Stateflow 图执行条件动作。仅当转移路径完全执行后,图才执行转移动作。其结果是,图遵循转移路径,条件动作在转移动作之前发生。

  • 诊断级别:取决于配置参数Transition action specified before condition action (Simulink)

  • 解决方案:将转移动作放在路径中最后一个条件动作之后。

    Transition path in which a transition action precedes a condition action.

转移在并行状态中开始或结束

  • 问题:在具有并行 (AND) 分解的图和状态中,所有同级子状态会同时激活或变为非激活。

  • 诊断级别:警告。

  • 解决方案:删除转移或将父状态的分解更改为互斥 (OR)。

    Transitions that begin or end in a parallel states.

转移连接到框

  • 问题:转移只能连接到状态和结点。

  • 诊断级别:错误。

  • 解决方案:移动或删除连接到框的转移。

    Chart with a transition that connects to a box.

转移跨并行状态

  • 问题:MATLAB® 中的独立图不支持跨并行状态边界的转移。

  • 诊断级别:错误。

  • 解决方案:删除进入或离开并行状态的转移。

    Standalone chart with a transition that crosses the boundary of a parallel state.

转移进入或退出图形函数

  • 问题:转移不能进入或退出图形函数。图形函数中的流程图必须完全包含在函数内。

  • 诊断级别:错误。

  • 解决方案:删除进入或退出图形函数的转移。

    Chart containing transitions that enter and exit a graphical function.

转移未连接到 entry 或 exit 端口

  • 问题:转移未连接到其源或目标附近的 entry 或 exit 端口。

  • 诊断级别:警告。

  • 解决方案:将转移连接到端口,或将转移的源或目标移至不同位置。

    Entry port that is located near the destination point of a default transition.

自然父级外的转移循环

  • 问题:如果转移转出了源和目标所在的父状态,图会在目标状态激活之前执行父状态的 exitentry 动作。

  • 诊断级别:取决于配置参数Transition outside natural parent (Simulink)

  • 解决方案:移动转移,使其包含在父状态中。

    Transition between substates that goes outside the boundary of the parent state.

转移遮蔽

  • 问题:当无条件转移在来自同一源的其他出向转移之前执行时,会阻止其他转移的执行。

  • 诊断级别:取决于配置参数Unreachable execution path (Simulink)

  • 解决方案:从每个状态或结点创建不超过一个无条件转移。显式指定无条件转移在任何有条件转移之后执行。有关详细信息,请参阅转移的计算顺序

    Chart with an unconditional transition that shadows a conditional transition.

从具有 during 动作或子状态的状态转出的无条件路径

  • 问题:从状态转出的无条件转移会阻止该状态中 during 动作的执行以及子状态之间的转移。

  • 诊断级别:取决于配置参数Transition outside natural parent (Simulink)

  • 解决方案:向转移添加条件,或从状态中删除 during 动作和子状态。

    Chart with one transition out of a state with during actions and another transition out of a state with child states.

针对结点的编辑时检查

循环包含具有转移动作的转移

  • 问题:循环不应包含具有转移动作的转移。

  • 诊断级别:错误。

  • 解决方案:删除转移动作或通过删除转移来删除循环。

    Flow chart with a transition action in a cycle.

历史结点无效

  • 问题:在以下情况下,历史结点无效

    • 历史结点包含在层次结构的图级别中。

    • 历史结点包含在具有并行 (AND) 分解的状态中。

    • 历史结点包含在图形函数中。

    • 同一状态中包含多个历史结点。

    • 历史结点是转移的源。

  • 诊断级别:错误。

  • 解决方案:从层次结构的图级别、具有并行 (AND) 分解的状态或图形函数中删除历史结点。在状态中只保留一个历史结点,并删除所有其他历史结点。将转移源移至连接结点或状态。有关详细信息,请参阅通过使用历史结点继续先前的子状态活动

    Chart that contains an invalid history junction.

结点没有从循环中无条件退出的路径

  • 问题:结点必须有从循环到某个状态或终止结点的无条件退出路径。

  • 诊断级别:错误。

  • 解决方案:创建一个从结点到某个状态或终止结点的无条件路径。

    Junction with no unconditional escape from a cycle.

来自同一源的转移路径具有不同父级

  • 问题:转移路径从同一源状态开始,但具有不同父级。

  • 诊断级别:错误。

  • 解决方案:修改转移路径以使其具有相同父级。

    Junction with two incoming transition paths from the same source but with different parents.

意外回溯

  • 问题:当来自同一个源的多个转移路径指向一个结点,并且该结点没有到某一状态或终止结点的无条件路径时,可能会发生控制流的意外回溯。

  • 诊断级别:取决于配置参数Unexpected backtracking (Simulink)

  • 解决方案:创建一个从结点到某个状态或终止结点的无条件路径。有关详细信息,请参阅Backtrack in Flow Charts

    例如,此图中突出显示的结点没有到状态 A 的无条件路径。如果 ConditionAConditionB 为 true 而 ConditionC 为 false,则图会多次回溯到路径中的第一个结点。因此,图执行三个条件动作。

    Chart with unexpected backtracking.

    为避免回溯,请组合条件并创建一条从第二个结点到目标状态的无条件路径。更改后,图只执行一个条件动作。

    Chart with no unexpected backtracking.

不可达的结点

  • 问题:当没有有效的执行路径到达某结点时,该结点不可达

  • 诊断级别:取决于配置参数Unreachable execution path (Simulink)

  • 解决方案:用来自可达源的转移连接不可达结点。

    Chart that contains an unreachable junction.

针对函数的编辑时检查

函数未使用

  • 问题:当图中不存在调用某函数的语句时,则表示该函数未使用

  • 诊断级别:警告。

  • 解决方案:从状态或转移动作或从另一个函数调用该函数。

    Chart containing an unused function.

将关键字用作函数参量无效

  • 问题:函数定义使用保留关键字作为参量。

  • 诊断级别:错误。

  • 解决方案:将参量重命名为函数。有关保留关键字的列表,请参阅命名 Stateflow 对象的规范

    Function that uses a reserved keyword as an argument.

针对 entry 和 exit 端口的编辑时检查

entry 结点必须有通向状态的无条件路径

  • 问题:entry 结点必须有一个不受条件保护或不由事件触发的转移路径。

  • 诊断级别:错误。

  • 解决方案:添加从 entry 结点到某一状态的无条件路径。

    Entry junction that connects to a single conditional path to a state.

entry 结点必须有出向转移

  • 问题:entry 结点未连接到出向转移路径。

  • 诊断级别:错误。

  • 解决方案:将转移连接到 entry 结点或删除该结点。

    Entry junction that does not connect to a transition path.

exit 端口必须有通向状态的无条件路径

  • 问题:exit 端口必须有一个不受条件保护或不由事件触发的转移路径。

  • 诊断级别:错误。

  • 解决方案:添加从 exit 端口到某一状态的无条件路径。

    Exit port that connects to a single conditional path to a state.

exit 端口必须有出向转移

  • 问题:exit 端口未连接到出向转移路径。

  • 诊断级别:错误。

  • 解决方案:将转移连接到 exit 端口或删除该端口。

    Exit port that does not connect to a transition path.

entry 或 exit 结点无效

  • 问题:仅在互斥 (OR) 状态和原子子图中支持 entry 和 exit 结点。

  • 诊断级别:错误。

  • 解决方案:将结点移至互斥 (OR) 状态或原子子图,或删除该结点。

    Entry and exit junctions in parallel (AND) states.

缺失 entry 或 exit 结点

  • 问题:entry 或 exit 端口必须有匹配的 entry 或 exit 结点。

  • 诊断级别:错误。

  • 解决方案:删除该端口或创建具有相同标签的匹配结点。

    Entry and exit ports that do not have a matching junction.

多个 entry 或 exit 结点具有相同的标签

  • 问题:同一父级中的 entry 和 exit 结点必须具有唯一标签。

  • 诊断级别:错误。

  • 解决方案:删除其中一个结点或更改其中一个标签。

    Two entry junctions that have the same label in1.

源于 entry 结点的路径包含终止结点

  • 问题:源于 entry 结点的每条路径都必须通向一个状态。

  • 诊断级别:错误。

  • 解决方案:将终止结点替换为状态。

    Entry junction that connects to a terminal junction.

源于 exit 端口的路径包含终止结点

  • 问题:源于 exit 端口的每条路径都必须通向一个状态。

  • 诊断级别:错误。

  • 解决方案:将终止结点替换为状态。

    Exit port that connects to a terminal junction.

从 entry 结点到历史结点的转移路径

  • 问题:从 entry 结点开始的转移路径不能连接到历史结点。

  • 诊断级别:错误。

  • 解决方案:删除从 entry 结点到历史结点的路径。

    Entry junction that connects to a history junction.

从内部转移到 exit 结点的转移路径

  • 问题:内部转移路径不能连接到 exit 结点。

  • 诊断级别:错误。

  • 解决方案:删除从内部转移到 exit 结点的路径。

    State that contains an inner transition to an exit port.

源于 entry 结点或通往 exit 结点的转移路径必须包含在父级中

  • 问题:起始于 entry 结点或终止于 exit 结点的转移路径必须包含在父状态中。

  • 诊断级别:错误。

  • 解决方案:修改转移路径以使其包含在父状态中。

    Transition path that exits and re-enters a state before connecting to an exit junction.

不可达的端口或结点

  • 问题:当没有有效的执行路径到达某端口或结点时,则该端口或结点不可达

  • 诊断级别:取决于配置参数Unreachable execution path (Simulink)

  • 解决方案:用来自可达源的转移连接不可达 entry 端口或 exit 结点。

    Chart that contains an unreachable entry junction and port.

相关主题