前页 | 后页 |
状态机求解器示例
本主题提供了一些简单的示例,说明在状态机模拟中在何处以及如何应用求解器,其中包括在状态机操作中以及在转移
中使用脚本转移
连接器。本主题中的图像显示 Octave Solver 示例;但是,除非另有说明,否则相同的脚本可用于 MATLAB Solver 中的 MATLAB。
初始化求解器
在状态机中初始化求解器的脚本可以放在转移
的影响中转移
或者在某个状态的Entry操作中。通常放在第一个转移
的影响转移
退出初始。
赋值和执行命令
要分配一个值,请使用 octave.set() 或 matlab.set()函数。
对于状态机,该方法可以放在转移
的影响中转移
或在操作的行为(进入/执行/退出)中。
编辑转移
的影响转移
您使用“属性”对话框的“约束”页面。
要将方法放入操作中,请打开操作的行为脚本:
- 通过右键单击元素并选择“特征>操作”上下文菜单选项,从图表或浏览器窗口在状态中创建新的条目操作。
- 单击新的条目操作,然后按 Alt+7。
当使用影响()函数执行 MATLAB 或 Octave 命令时,这些命令可以放在转移
的影响中转移
或操作的行为脚本。
条件分支
在状态机中使用条件分支时,条件可以放在转移
的守卫条件中转移
并且可以包含调用 MATLAB 或 Octave 函数的脚本。例如:
注记:
- 条件也可以使用选择来设置;条件语句的位置是一样的,都是在现有转移
的守卫条件中定义的转移
- 该示例显示了在 State3 上设置的断点处的模拟
获得结果
从外部函数调用返回结果时,您可以使用 Solver 的 get()函数在脚本中返回结果。然后将结果从脚本传递给用户有三个关键选项:
- 跟踪()
- 阴谋
- Win32显示
使用跟踪
跟踪() 命令在最初编写和调试模拟时很有用,因为它允许您检查脚本在不同阶段的结果。结果在仿真窗口中输出。
执行绘图
Octave 和 MATLAB 非常强调生成绘图的能力,因为这是输出结果的关键方法。要生成绘图,您可以使用 Solver 的 .exec()函数来调用绘图生成函数。
掌握情节
在模拟中执行绘图时,如果模拟没有暂停,则该绘图只能在短时间内查看。因此,对于状态机,有两个选项可以在查看绘图时暂停流程:
- 在 Octave 或 MATLAB 中使用 uiwait。例如,这可以在退出操作或转移
中设置转移
影响。以下是使用 Octave 的示例:
octave.exec('脚本','uiwait');
- 设置触发器/事件序列以暂停转移
中的模拟转移
不在生成情节的状态。在示例情况下,这是在最后的转移
.
超越转移
您可以:
- 点击仿真事件窗口中的触发器展示或
- 从 Win32 屏幕中的一个按钮使用BroadcastSignal()(这将在接下来的使用 Win32接口部分中讨论)
使用 Win32接口
使用 Win32 接口时,要执行的主要步骤如下:
- 创建 Win32 对话框
- 设置脚本行以打开对话框
- 从对话框中的字段获取值
- 将该值传递给求解器
- 使用按钮触发剧情
- 使用模型构建器创建“Starter Win32 Model” - 选择“UX设计”蓝图集和“Win32 UI Models”蓝图
- 将 <<Win32屏幕>> 的名称更改为“ScreenA”
- 将“Edit控件A”的名称更改为更有意义的名称,例如“finish”
- 单击 State1 并按
对话框.ScreenA .显示= true ; 在 Entry Operation 的脚本中添加打开对话框的调用:
由该广播信号触发。
请参阅前面使用触发器保存绘图部分中创建和设置触发器和信号“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 :' + 结束时间+ ';' );
运行仿真
运行仿真:
- 选择仿真功能区,点击“运行仿真>开始”