主要内容

摩尔图的设计考虑

摩尔机是有限状态机,其输出在时钟边缘处被修改。在摩尔图中,输出只是当前状态的函数。在每个时间步中,摩尔图被唤醒,计算它的输出,然后计算它的输入,为下一个时间步重新配置自己。例如,在评估其输入之后,图表可以过渡到活动状态的新配置。图表在计算输入和更新状态之前计算输出。Moore语义在独立的Stateflow中不受支持®在MATLAB图表®

摩尔的语义

以确保输出是一个函数只有的状态,摩尔状态机执行这些语义:

  • 输出不依赖于输入。

  • 产出不依赖于以前的产出。

  • 输出不依赖于时间逻辑。

摩尔图设计指南

为了符合状态机的摩尔定义,确保每次摩尔图被唤醒时,它都从当前活动状态集计算输出,而不考虑输入。

对国家行为的限制

为了确保输出完全依赖于当前状态,你可以在状态操作中计算输出,但受以下限制:

  • 结合操作。在摩尔图中,每个状态只能包含一个动作。操作可以由多个命令语句组成。Stateflow从最上层向下评估摩尔图中的状态。摩尔图中的活动状态在评估转换之前执行状态动作。因此,无论外部转换是否有效,输出都在每个时间步上计算。

  • 不要给状态操作贴上标签。不要在摩尔图中用任何关键字标记状态动作,例如条目,或退出.默认情况下,Moore图表在计算输入和更新状态之前执行活动状态下的操作。

过渡行动的限制

摩尔图中的转换可以包含条件和转换操作,如果这些操作不引入输出值和输入值之间的依赖关系。例如,在此图表中,每个转换都测试输入u,并修改输出y在条件动作中。因为输出值取决于输入值,所以这个构造违反了摩尔语义并触发了一个错误。

摩尔图中有两种状态A和B。

不使用输入计算输出

在摩尔图中,输出不能依赖于输入。使用输入直接或间接参与输出的计算将触发错误。

限制数据范围

在摩尔图中,这些数据限制适用:

  • 限制Machine-Parented数据。机器父数据是为Stateflow机器定义的数据。状态流机器是状态流层次结构的最高级别。在此级别定义数据时,机器中的每个图表都可以读取和修改数据。为了确保摩尔图不访问可以在图外不可预测地修改的数据,不要使用机器父数据。

  • 不要定义数据存储内存。不能在摩尔图表中定义数据存储内存(DSM),因为图表外部的对象可以修改DSM对象。状态流图使用数据存储内存与Simulink共享数据®模型。数据存储内存充当全局数据。在包含图表的Simulink层次结构中,其他块和模型可以修改DSM。摩尔图不能访问可能发生不可预测变化的数据。

不要使用coder.extrinsic调用外部函数

你不能调用外部函数coder.extrinsic因为不可能强制要求外在函数的输出只依赖于当前状态。调用外部函数coder.extrinsic在摩尔图中触发错误。

不调用自定义代码函数

不能在摩尔图中调用自定义代码函数,因为不可能强制自定义代码函数的输出仅依赖于当前状态。在摩尔图中调用自定义代码函数会触发错误。

不要使用动态仿真模块功能

不能在摩尔图中使用Simulink函数。这个限制防止在图表执行过程中违反摩尔语义。

不要导出函数

摩尔图中不能导出函数。

不要禁用内联

摩尔图语义需要内联。

不启用超级步骤语义

在摩尔图中不能使用超步语义。

不要使用短信

不能在摩尔图中使用消息。

限制事件的使用

限制摩尔图中事件的使用:

  • 有效的用途:

    • 只使用一个输入事件来触发图表。

    • 使用基于事件的时态逻辑来保护转换。

      时间逻辑条件值的变化就像摩尔图内部安排的事件一样。在每个时间步中,执行时态事件之前的刻度数只取决于图表的状态。有关更多信息,请参见时序逻辑操作符

      请注意

      在摩尔图中,时间逻辑运算符的基本事件必须是预定义的事件,例如蜱虫(见基于数据和状态的隐式事件).

  • 无效的用途:

    • 您不能广播任何类型的事件。

    • 您不能使用本地事件来保护转换。局部事件违反摩尔语义,因为它们不是确定性的,并且可以在图表计算输出时发生。

    • 您不能使用隐式事件,例如chg (data_name)en (state_name),或例(state_name)

不使用摩尔图建模连续时间系统

在摩尔图表中,不能将更新方法设置为连续.对于在Stateflow中具有连续时间的系统建模,请使用Classic或Mealy图。

相关的话题

Baidu
map