前页 | 后页 |
状态机求解器示例
本主题提供了一些简单的示例,说明在状态机模拟中在何处以及如何应用求解器,其中包括在状态机操作中以及在转移
中使用脚本转移
连接器。本主题中的图像显示 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 对话框
- 设置脚本行以打开对话框
- 从对话框中的字段中获取值
- 将该值传递给求解器
- 使用按钮触发情节
- Create a 'Starter Win32 Model' using the Home首页' tab Create a 'Starter Win32 Model' 'Set模式' 选项卡(模型向导) - 选择'UX'设计'蓝图''Win32 UI Models'蓝图
- 将 <<Win32屏幕对话框>> 的名称更改为“ScreenA”
- 将“更改”的名称更改为控件意义的名称,例如“finish”
- 单击 State1 并按
对话框。屏幕A。显示=真; 添加 - 在 Entry Operation 的脚本中 - 调用以打开对话框:
由广播到信号触发。
请参阅创建和设置触发器信号和信号“结束”的步骤,如前面的使用触发器来保持绘图部分所示。在这种情况下,我们设置相同的转移
,但换了一个新的触发器的叫做'Plot'。这是使用按钮上的 OnClick标记值发送 BroadcastSignal('Plot') :
转移
退出 State1 设置为由 BroadcastSignal 触发:
关于转移
您必须创建一个触发器的信号,将信号-Type 设置为并创建信号。欲了解更多细节,请参阅接口用户仿真帮助。
运行剧情的脚本将在运行的 Entry 操作中。在模拟过程中,只有在单击 Win32确定按钮并发送 Plot 触发器后才会转换到 State2。所以我们现在:
- 添加条目操作并使用 Alt+7 打开行为
- 在此状态的 Entry Operation 中,我们使用以下方法获取字段的值:
变量 时间结束 = 文本;
这会设置一个变量,其值为要发送到 Octave 以进行绘图的最后一个参数的值 - 在 octave.exec() 语句中,我们放置变量来设置要绘制的秒数:
octave.exec( '脚本' , 't = 0:0。 1 :' + 结束时间+ ';' );
运行仿真
运行仿真:
- 选择仿真功能区,点击“运行仿真>开始”