主要内容

保存和恢复操作点Stateflow图表

一个操作点是Simulink的快照吗金宝app®模拟过程中的模型。如果您的模型包含一个状态流®图中,作业点包括以下信息:

  • 活跃的状态

  • 图表输出数据

  • 图表、状态和功能本地数据

  • MATLAB中的持久变量®函数和真值表

您可以将模型在某个时间步长的状态保存为操作点,然后使用该操作点作为模拟的初始状态。例如,假设您的模拟从初始化阶段开始。如果在模型完成初始化阶段后保存一个工作点,则可以使用工作点作为模型的初始状态,并获得连续模拟的结果,而无需从时间开始t= 0.有关更多信息,请参见使用操作点指定模拟的初始状态

您还可以使用操作点来测试状态流图对不同设置的响应,包括在模拟中难以达到的配置。您可以通过更改本地、输出或持久数据的值、当前活动的状态以及模拟过程中历史节点记录的先前状态活动来修改工作点。然后,您可以使用修改后的工作点作为模拟的起点,以测试图表如何响应您的更改。有关更多信息,请参见测试难以重现的图表配置而且具有故障检测和冗余逻辑的测试图

保存工作点

要保存Simulink模型的最终工作点,请选择配置参数金宝app最终状态(金宝app模型)而且保存最终工作点(金宝app模型),为模型的工作点指定一个变量,并运行模拟。方法访问状态流图的操作点信息得到(金宝app模型)函数使用模型的工作点和图表的块路径。

例如,假设xFinal是模型的工作点吗sf_car,其中包含图表shift_logic

sf_car模型中的状态流图shift_logic。

要访问此图表的工作点信息,请输入:

op = get(xFinal,“sf_car / shift_logic”
op = Block: "shift_logic" (handle) (active)路径:sf_car/shift_logic包含:+ gear_state "State (AND)"(active) + selection_state "状态(AND)"(主动)齿轮"状态输出数据" gearType [1,1] down_th "局部范围数据" double [1,1] up_th "局部范围数据" double [1,1]

操作点按层次顺序列出图表中的状态、框、功能和数据。如果存在名称冲突,则在名称的末尾出现一个或多个下划线,以便所有对象都具有唯一标识符。

若要访问图表中对象的工作点信息,请使用点表示法。例如,访问顶级状态的操作点信息gear_state,输入:

op.gear_state
ans = State: "gear_state" (handle) (active)路径:sf_car/shift_logic/gear_state包含:+第一个"State (OR)"+第四个“状态(OR)”+第二个“状态(OR)”+第三个“状态(OR)”(主动)

类似地,为图表输出访问工作点信息齿轮,输入:

op.gear
ans =描述:'State output data' DataType: 'gearType' Size: '[1,1]'范围:[1×1 struct] InitialValue:[]值:third

有关此示例的详细信息,请参见将图表模拟为带有本地事件的Simulin金宝appk块

请注意

无状态流程图有一个空的操作点,因为它们不包含状态或持久数据。

复制操作要点

要为状态流图创建操作点的副本,请调用克隆函数。例如,假设您试图复制操作点人事处通过输入:

Op1 = op;Op2 =克隆(op);

在这种情况下,op1指同作业点人事处所以修改op1也修改人事处.相比之下,《凤凰社》第2章指可以在不修改的情况下修改的不同工作点人事处

请注意

克隆函数复制整个状态流图的工作点信息。不能复制状态或数据对象的工作点信息。

修改工作点值

要测试Stateflow图对不同设置的响应,可以通过更改本地、输出或持久数据的值、当前活动的状态以及模拟过程中历史节点记录的先前状态活动来修改工作点。

修改数据值

若要修改本地、输出或持久数据的值,请更改价值工作点的属性。例如,假设人事处包含图表的操作点。来修改图表输出的值输出,输入:

op.output.Value = newValue;

修改数据值时:

  • 不能更改数据类型或大小。

  • 即使您的图表使用C作为操作语言,也可以使用括号和逗号分隔的基于一的索引来引用向量或矩阵的元素。

  • 类型中指定的范围内的数值数据的新值最低而且最大参数。有关更多信息,请参见限制范围内

  • 对于枚举数据类型,只能从类型定义中选择枚举值。

  • 不能在自定义C代码和外部MATLAB代码中修改机器父数据或持久化数据的值。

修改当前状态活动

若要更改操作点中当前活动的状态,请调用setActive使用叶状态作为参数的函数。这个函数通过以下方式维护状态一致性:

  • 退出和进入适当的状态

  • 重置新活动状态的时间计数器

  • 更新活动状态数据的值

  • 启用或禁用绑定到状态的函数调用子系统和Simulink函数金宝app

然而,该图表没有表现出来退出以前活动状态的操作条目新激活状态的操作。此外,状态不会重新初始化任何状态父级本地数据。如果希望发生这些操作,则必须分别执行它们。例如,如果您的状态操作为数据赋值,则必须如中所述显式地赋值修改数据值

修改以前的状态活动

要更改历史连接记录的先前活动状态,请调用setPrevActiveChild函数,使用包含历史连接的状态作为参数。调用此函数时,状态必须不是活动状态。

加载修改的工作点信息

若要将状态流程图的已修改工作点信息加载到Simulink模型的工作点中,请调用金宝app(金宝app模型)函数。例如,如果xFinal是模型的工作点吗sf_car而且人事处包含图表的修改工作点信息shift_logic,可保存修改后的工作点xModified通过输入:

xModified = set(xFinal,“sf_car / shift_logic”, op);

请注意

函数加载整个状态流图的工作点信息。不能加载状态或数据对象的工作点信息。

恢复工作点

若要使用工作点作为模拟的初始状态,请设置配置参数初始状态(金宝app模型)并为模型的操作点指定变量名。当您模拟您的模型时,模拟从操作点的时间开始。有关更多信息,请参见使用模型工作点加快仿真工作流程(金宝app模型)

工作点限制

连续时间图表

连续时间图的操作点是只读的。您可以为连续时间图保存操作点,并将其用作模拟的初始状态。但是,您不能修改操作点中的状态活动或任何数据值。有关连续时间图表的更多信息,请参见状态流中的连续时间建模

使用边缘检测的图表

使用边缘检测操作符的状态流程图不支持操作点。金宝app如果模型包含使用边缘检测的图表,则试图保存最终工作点会导致编译时错误。有关边缘检测运算符的详细信息,请参见检测数据和表达式值的变化

另请参阅

模型设置

对象

功能

相关的话题