在编辑时检测建模错误
启用编辑时检查时,stateflow® 编辑器会在您设计图的过程中检测潜在的错误和警告。通过在设计过程的早期解决这些问题,可以避免编译时或运行时警告和错误。
stateflow 编辑器以红色(表示错误)或橙色(表示警告)突出显示违反编辑时检查的对象。当您指向突出显示的对象并点击错误或警告标志时,工具提示会显示详细信息和可能的修复方法。
管理编辑时检查
默认情况下,编辑时检查和语法错误突出显示处于启用状态。要禁用编辑时检查,请在调试选项卡中,清除诊断 > 编辑时错误和警告复选框。也可以使用 (simulink) 禁用编辑时检查。
下表列出了“配置参数”对话框的诊断 > stateflow 窗格中具有关联诊断配置参数的编辑时检查。
编辑时检查问题 | 诊断配置参数 |
---|---|
空悬转移 | (simulink) |
默认转移路径未在某个状态中终止 | (simulink) |
转移动作先于此路径上的条件动作 | (simulink) |
自然父级外的转移循环 | (simulink) |
转移遮蔽 | (simulink) |
从具有 during 动作或子状态的状态转出的无条件路径 | (simulink) |
意外回溯 | (simulink) |
不可达的结点 | (simulink) |
不可达的端口或结点 | (simulink) |
不可达状态 | (simulink) |
您可以将这些编辑时检查的配置参数值设置为“错误
”、“警告
”或“无
”,以此来控制其诊断操作的级别。当您更改配置参数的设置时,对应的编辑时检查的诊断级别也会发生变化。例如,如果将不可达的执行路径配置参数设置为 none
,则 stateflow 编辑器不会突出显示空悬转移、转移遮蔽或不可达状态。
针对状态和子图的编辑时检查
原子子图包含状态动作
问题:原子子图不支持状态动作。
诊断级别:错误。
凯发官网入口首页的解决方案:删除状态动作或将它们移至原子子图的子状态。
缺失默认转移
问题:在具有互斥 (or) 分解和至少两个子状态或结点的图或状态中,需要默认转移来指示执行开始的位置。
诊断级别:错误。
凯发官网入口首页的解决方案:通过添加默认转移来指定初始状态。有关详细信息,请参阅。
图形函数包含状态
问题:由于图形函数完全在单一时间步中执行,它们不能包含任何状态。
诊断级别:错误。
凯发官网入口首页的解决方案:用结点替换状态。有关详细信息,请参阅。
无效交叉
问题:在 stateflow 编辑器中,状态和结点不能重叠。
诊断级别:错误。
凯发官网入口首页的解决方案:通过分离状态和结点来避免交叉。
监控并行状态的叶状态或子状态活动
问题:具有并行 (and) 分解的图和状态不支持监控叶或子状态活动,因为并行子状态会同时激活。
诊断级别:警告。
凯发官网入口首页的解决方案:打开属性检查器或模型资源管理器。清除创建监控输出复选框,或从下拉列表中选择“
自身活动
”。有关详细信息,请参阅。
状态包含语法错误
不可达状态
问题:当没有有效的执行路径到达某状态时,该状态不可达。
诊断级别:取决于配置参数 (simulink)。
凯发官网入口首页的解决方案:用来自可达源的转移连接不可达状态。
针对转移的编辑时检查
空悬转移
问题:每个转移都必须有一个有效目标。
诊断级别:取决于配置参数 (simulink)。
凯发官网入口首页的解决方案:将转移连接到状态、结点或端口。有关详细信息,请参阅工作模式之间的转移。
默认转移路径未在某个状态中终止
问题:在具有互斥 (or) 分解和至少一个子状态的图或状态中:
默认转移路径的每个分支都必须指向一个子状态。
默认转移路径必须有一个分支不受条件保护或不由事件触发。
诊断级别:取决于配置参数 (simulink)。
凯发官网入口首页的解决方案:终止默认转移路径在子状态中的每个分支。确保默认转移路径有一个分支不受条件保护或不由事件触发。
默认转移路径无效
问题:默认转移路径不能退出父状态。
诊断级别:错误。
凯发官网入口首页的解决方案:修改默认转移路径,使其保持在父状态中。
转移包含语法错误
转移动作先于此路径上的条件动作
问题:如果一个转移的转移动作后跟另一转移的条件动作,则不会按转移的顺序执行动作。当关联条件的计算结果为 true 时,stateflow 图执行条件动作。仅当转移路径完全执行后,图才执行转移动作。其结果是,图遵循转移路径,条件动作在转移动作之前发生。
诊断级别:取决于配置参数 (simulink)。
凯发官网入口首页的解决方案:将转移动作放在路径中最后一个条件动作之后。
转移在并行状态中开始或结束
问题:在具有并行 (and) 分解的图和状态中,所有同级子状态会同时激活或变为非激活。
诊断级别:警告。
凯发官网入口首页的解决方案:删除转移或将父状态的分解更改为互斥 (or)。
转移连接到框
问题:转移只能连接到状态和结点。
诊断级别:错误。
凯发官网入口首页的解决方案:移动或删除连接到框的转移。
转移跨并行状态
问题:matlab® 中的独立图不支持跨并行状态边界的转移。
诊断级别:错误。
凯发官网入口首页的解决方案:删除进入或离开并行状态的转移。
转移进入或退出图形函数
问题:转移不能进入或退出图形函数。图形函数中的流程图必须完全包含在函数内。
诊断级别:错误。
凯发官网入口首页的解决方案:删除进入或退出图形函数的转移。
转移未连接到 entry 或 exit 端口
问题:转移未连接到其源或目标附近的 entry 或 exit 端口。
诊断级别:警告。
凯发官网入口首页的解决方案:将转移连接到端口,或将转移的源或目标移至不同位置。
自然父级外的转移循环
问题:如果转移转出了源和目标所在的父状态,图会在目标状态激活之前执行父状态的
exit
和entry
动作。诊断级别:取决于配置参数 (simulink)。
凯发官网入口首页的解决方案:移动转移,使其包含在父状态中。
转移遮蔽
问题:当无条件转移在来自同一源的其他出向转移之前执行时,会阻止其他转移的执行。
诊断级别:取决于配置参数 (simulink)。
凯发官网入口首页的解决方案:从每个状态或结点创建不超过一个无条件转移。显式指定无条件转移在任何有条件转移之后执行。有关详细信息,请参阅。
从具有 during 动作或子状态的状态转出的无条件路径
问题:从状态转出的无条件转移会阻止该状态中
during
动作的执行以及子状态之间的转移。诊断级别:取决于配置参数 (simulink)。
凯发官网入口首页的解决方案:向转移添加条件,或从状态中删除 during 动作和子状态。
针对结点的编辑时检查
循环包含具有转移动作的转移
问题:循环不应包含具有转移动作的转移。
诊断级别:错误。
凯发官网入口首页的解决方案:删除转移动作或通过删除转移来删除循环。
历史结点无效
问题:在以下情况下,历史结点无效:
历史结点包含在层次结构的图级别中。
历史结点包含在具有并行 (and) 分解的状态中。
历史结点包含在图形函数中。
同一状态中包含多个历史结点。
历史结点是转移的源。
诊断级别:错误。
凯发官网入口首页的解决方案:从层次结构的图级别、具有并行 (and) 分解的状态或图形函数中删除历史结点。在状态中只保留一个历史结点,并删除所有其他历史结点。将转移源移至连接结点或状态。有关详细信息,请参阅。
结点没有从循环中无条件退出的路径
问题:结点必须有从循环到某个状态或终止结点的无条件退出路径。
诊断级别:错误。
凯发官网入口首页的解决方案:创建一个从结点到某个状态或终止结点的无条件路径。
意外回溯
问题:当来自同一个源的多个转移路径指向一个结点,并且该结点没有到某一状态或终止结点的无条件路径时,可能会发生控制流的意外回溯。
诊断级别:取决于配置参数 (simulink)。
凯发官网入口首页的解决方案:创建一个从结点到某个状态或终止结点的无条件路径。有关详细信息,请参阅。
例如,此图中突出显示的结点没有到状态
a
的无条件路径。如果conditiona
和conditionb
为 true 而conditionc
为 false,则图会多次回溯到路径中的第一个结点。因此,图执行三个条件动作。为避免回溯,请组合条件并创建一条从第二个结点到目标状态的无条件路径。更改后,图只执行一个条件动作。
不可达的结点
问题:当没有有效的执行路径到达某结点时,该结点不可达。
诊断级别:取决于配置参数 (simulink)。
凯发官网入口首页的解决方案:用来自可达源的转移连接不可达结点。
针对函数的编辑时检查
函数未使用
问题:当图中不存在调用某函数的语句时,则表示该函数未使用。
诊断级别:警告。
凯发官网入口首页的解决方案:从状态或转移动作或从另一个函数调用该函数。
将关键字用作函数参数无效
问题:函数定义使用保留关键字作为参数。
诊断级别:错误。
凯发官网入口首页的解决方案:将参数重命名为函数。有关保留关键字的列表,请参阅。
针对 entry 和 exit 端口的编辑时检查
entry 结点必须有通向状态的无条件路径
问题:entry 结点必须有一个不受条件保护或不由事件触发的转移路径。
诊断级别:错误。
凯发官网入口首页的解决方案:添加从 entry 结点到某一状态的无条件路径。
entry 结点必须有出向转移
问题:entry 结点未连接到出向转移路径。
诊断级别:错误。
凯发官网入口首页的解决方案:将转移连接到 entry 结点或删除该结点。
exit 端口必须有通向状态的无条件路径
问题:exit 端口必须有一个不受条件保护或不由事件触发的转移路径。
诊断级别:错误。
凯发官网入口首页的解决方案:添加从 exit 端口到某一状态的无条件路径。
exit 端口必须有出向转移
问题:exit 端口未连接到出向转移路径。
诊断级别:错误。
凯发官网入口首页的解决方案:将转移连接到 exit 端口或删除该端口。
entry 或 exit 结点无效
问题:仅在互斥 (or) 状态和原子子图中支持 entry 和 exit 结点。
诊断级别:错误。
凯发官网入口首页的解决方案:将结点移至互斥 (or) 状态或原子子图,或删除该结点。
缺失 entry 或 exit 结点
问题:entry 或 exit 端口必须有匹配的 entry 或 exit 结点。
诊断级别:错误。
凯发官网入口首页的解决方案:删除该端口或创建具有相同标签的匹配结点。
多个 entry 或 exit 结点具有相同的标签
问题:同一父级中的 entry 和 exit 结点必须具有唯一标签。
诊断级别:错误。
凯发官网入口首页的解决方案:删除其中一个结点或更改其中一个标签。
源于 entry 结点的路径包含终止结点
问题:源于 entry 结点的每条路径都必须通向一个状态。
诊断级别:错误。
凯发官网入口首页的解决方案:将终止结点替换为状态。
源于 exit 端口的路径包含终止结点
问题:源于 exit 端口的每条路径都必须通向一个状态。
诊断级别:错误。
凯发官网入口首页的解决方案:将终止结点替换为状态。
从 entry 结点到历史结点的转移路径
问题:从 entry 结点开始的转移路径不能连接到历史结点。
诊断级别:错误。
凯发官网入口首页的解决方案:删除从 entry 结点到历史结点的路径。
从内部转移到 exit 结点的转移路径
问题:内部转移路径不能连接到 exit 结点。
诊断级别:错误。
凯发官网入口首页的解决方案:删除从内部转移到 exit 结点的路径。
源于 entry 结点或通往 exit 结点的转移路径必须包含在父级中
问题:起始于 entry 结点或终止于 exit 结点的转移路径必须包含在父状态中。
诊断级别:错误。
凯发官网入口首页的解决方案:修改转移路径以使其包含在父状态中。
不可达的端口或结点
问题:当没有有效的执行路径到达某端口或结点时,则该端口或结点不可达。
诊断级别:取决于配置参数 (simulink)。
凯发官网入口首页的解决方案:用来自可达源的转移连接不可达 entry 端口或 exit 结点。
相关主题
- (simulink)