预订演示

请注意 : 本帮助页面不适用于最新版本的Enterprise Architect. 最新的帮助文档在这里.

前页 后页

状态机求解器示例

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

中使用脚本转移

连接器。本主题中的图像显示 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界面的步骤是:
  • Create a 'Starter Win32 Model' using the Home首页' tab Create a 'Starter Win32 Model' 'Set模式' 选项卡(模型向导) - 选择'UX'设计'蓝图''Win32 UI Models'蓝图
  • 将 <<Win32屏幕对话框>> 的名称更改为“ScreenA”
  • 将“更改”的名称更改为控件意义的名称,例如“finish”
  • 单击 State1 并按 Alt+7 添加 - 在 Entry Operation 的脚本中 - 调用以打开对话框:
    对话框屏幕A。显示=
要获得有效的用户输入值,用户必须单击确定按钮,因此您必须从确定按钮广播一个触发器以启动该过程。要接收触发器,您必须有一个信号和一个转移

由广播到信号触发。

请参阅创建和设置触发器信号和信号“结束”的步骤,如前面的使用触发器来保持绘图部分所示。在这种情况下,我们设置相同的转移

,但换了一个新的触发器的叫做'Plot'。这是使用按钮上的 OnClick标记值发送 BroadcastSignal('Plot') :

转移

退出 State1 设置为由 BroadcastSignal 触发:

关于转移

您必须创建一个触发器的信号,将信号-Type 设置为并创建信号。欲了解更多细节,请参阅接口用户仿真帮助

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

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

运行仿真

运行仿真:

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

学到更多