预订演示
前页 后页

状态机求解器示例

本主题提供了一些简单的示例,说明在状态机模拟中在何处以及如何应用求解器,其中包括在状态机操作中以及在转移

中使用脚本转移

连接器。本主题中的图像显示 Octave Solver 示例;但是,除非另有说明,否则相同的脚本可用于 MATLAB Solver 中的 MATLAB。

初始化求解器

在状态机中初始化求解器的脚本可以放在转移

的影响中转移

或者在某个状态的Entry操作中。通常放在第一个转移

的影响转移

退出初始。

赋值和执行命令

要分配一个值,请使用 octave.set() 或 matlab.set()函数。

对于状态机,该方法可以放在转移

的影响中转移

或在操作的行为(进入/执行/退出)中。

编辑转移

的影响转移

您使用“属性”对话框的“约束”页面。

要将方法放入操作中,请打开操作的行为脚本:

  1. 通过右键单击元素并选择“特征>操作”上下文菜单选项,从图表或浏览器窗口在状态中创建新的条目操作。
  2. 单击新的条目操作,然后按 Alt+7。
这将在编辑器中打开行为脚本。

当使用影响()函数执行 MATLAB 或 Octave 命令时,这些命令可以放在转移

的影响中转移

或操作的行为脚本。

条件分支

在状态机中使用条件分支时,条件可以放在转移

的守卫条件中转移

并且可以包含调用 MATLAB 或 Octave 函数的脚本。例如:

注记:

  • 条件也可以使用选择来设置;条件语句的位置是一样的,都是在现有转移
    的守卫条件中定义的转移
  • 该示例显示了在 State3 上设置的断点处的模拟

获得结果

从外部函数调用返回结果时,您可以使用 Solver 的 get()函数在脚本中返回结果。然后将结果从脚本传递给用户有三个关键选项:

  • 跟踪()
  • 阴谋
  • Win32显示
对于跟踪和 Win32 选项,您必须使用 Solver 的 .get() 命令在JavaScript中返回本地副本。作为使用 .get() 命令的示例,请参见守卫条件的守卫条件。

使用跟踪

跟踪() 命令在最初编写和调试模拟时很有用,因为它允许您检查脚本在不同阶段的结果。结果在仿真窗口中输出。

执行绘图

Octave 和 MATLAB 非常强调生成绘图的能力,因为这是输出结果的关键方法。要生成绘图,您可以使用 Solver 的 .exec()函数来调用绘图生成函数。

掌握情节

在模拟中执行绘图时,如果模拟没有暂停,则该绘图只能在短时间内查看。因此,对于状态机,有两个选项可以在查看绘图时暂停流程:

  1. 在 Octave 或 MATLAB 中使用 uiwait。例如,这可以在退出操作或转移
    中设置转移
    影响。以下是使用 Octave 的示例:
    octave.exec('脚本','uiwait');
  2. 设置触发器/事件序列以暂停转移
    中的模拟转移
    不在生成情节的状态。在示例情况下,这是在最后的转移
    .

超越转移

您可以:

  • 点击仿真事件窗口中的触发器展示或
  • 从 Win32 屏幕中的一个按钮使用BroadcastSignal()(这将在接下来的使用 Win32接口部分中讨论)

使用 Win32接口

使用 Win32 接口时,要执行的主要步骤如下:

  • 创建 Win32 对话框
  • 设置脚本行以打开对话框
  • 从对话框中的字段获取值
  • 将该值传递给求解器
  • 使用按钮触发剧情
配置Win32接口的步骤如下:
  • 使用模型构建器创建“Starter Win32 Model” - 选择“UX设计”蓝图集和“Win32 UI Models”蓝图
  • 将 <<Win32屏幕>> 的名称更改为“ScreenA”
  • 将“Edit控件A”的名称更改为更有意义的名称,例如“finish”
  • 单击 State1 并按 Alt+7 在 Entry Operation 的脚本中添加打开对话框的调用:
    对话框.ScreenA .显示= true
要获得有效的用户输入值,用户必须单击确定按钮,因此您必须从确定触发器广播一个事件以启动该过程。要接收触发器您必须有信号并设置转移

由该广播信号触发。

请参阅前面使用触发器保存绘图部分中创建和设置触发器和信号“End”的步骤。在本例中,我们设置了相同的转移

,但是对于一种称为“情节”的新触发器。这是使用按钮上的 OnClick标记值发送 BroadcastSignal('Plot'):

转移

退出 State1 设置为由 BroadcastSignal 触发:

在转移

您必须创建一个触发器,将触发类型设置为信号并创建信号。有关详细细节请参阅Win32用户接口仿真帮助主题

运行绘图的脚本将位于 State2 的 Entry 操作中。在模拟过程中,只有在单击 Win32确定按钮并发送 Plot 触发器后才会转换到 State2。因此我们现在:

  • 添加 Entry Operation 并使用 Alt+7 打开行为
  • 在这个状态的 Entry Operation 中,我们使用以下方法获取字段的值:
    变量 结束时间 = 对话框.ScreenA.完成.文本;
    这将设置一个变量,其中包含要发送给 Octave 进行绘图的最后一个参数的值
  • 在 octave.exec() 语句中,我们放置变量来设置要绘制的秒数:
    octave.exec( '脚本' , 't = 0:0. 1 :' + 结束时间+ ';' );
这为 Entry操作中的脚本提供了两个状态:

运行仿真

运行仿真:

  • 选择仿真功能区,点击“运行仿真>开始”
当您输入一个值并单击确定按钮时,将返回:

学到更多