Simulin万博1manbetxk上的家伙

万博1manbetxSimulink与基于模型的设计

冰壶游戏更新:App Designer和statflow

最近有人向我提出挑战,要我对我们几年前发布的冰壶模拟器进行改造本帖本帖)要利用当时不可用的新功能,请执行以下操作:应用程序设计师MATLAB的状态流

你可以猜到,这不是我能拒绝的挑战!

你可以在这里找到最终的结果:冰壶游戏应用程序

概述

下面是一个图表,说明了冰壶应用程序是如何实现的:

冰壶应用程序概述

如果您下载该应用程序,以下是您将看到的文件说明:

  • TestCurling.m:属性创建的测试应用程序测试框架。这允许我以编程方式执行我的应用程序,并验证它是否按预期运行。
  • curling.mlapp:主应用程序。
  • curlingLogic.sfx:状态流程图,其中定义了应用程序的所有逻辑和操作。
  • curlingSimulator.slx:模拟万博1manbetx冰上石头动力学的Simulink模型。
  • msfcn_showTrack.m和msfcnsweeper.m:MatlabS函数在Simulink模型中用于在应用程序中设万博1manbetx置冰壶游戏动画。

现在让我们分别来看每一部分

应用程序设计师

正如我在以前的文章,在MATLAB中执行的状态流图非常方便地定义MATLAB应用程序的行为。在这样的应用程序中,MATLAB应用程序本身只定义应用程序中的图形元素,并将应用程序的回调映射到状态流图中的事件。

以下是应用程序在设计视图中的样子:

App Designer设计视图

就代码而言,这非常简单。我只是简单地定义了一个startupFcn回调来实例化状态流图,在那里我传递给它一个句柄给MATLAB应用程序。然后对于应用程序中的每个项目(按钮,轴等),我定义了一个回调来触发状态流图中的事件。

应用程序设计器代码视图

MATLAB状态流程图

这是定义所有应用程序功能的地方。下面是它的外观:

冰壶游戏逻辑

这个逻辑将一次投掷分为4种状态:等待、选择目标、指定速度和旋转以及投掷。每个状态之间的转换都是由应用程序触发的,在每个状态中,我可以像在MATLAB代码中那样与应用程序的组件进行交互。在这篇文章的最后,你会看到更多关于石头动画的内容。

一旦用户点击应用中的“Go”按钮,状态流程图就会开始模拟并等待完成。为此,我定期检查模拟状态使用函数。

对于图表中多个位置需要的一些实用程序,我在Stateflow中创建了MATLAB函数,我可以从图表中的多个位置调用这些函数。

绘图石实用程序

万博1manbetx仿真软件模型

和我在我的2018年后, Simu万博1manbetxlink模型没有太大变化。我唯一需要修改的是MATLAB S-Function,以便在模拟过程中使石头动画化。

为了让S函数与应用程序交互,它需要一个句柄。在开始模拟之前,状态流程图将此句柄存储到S函数中的应用程序阻止用户数据.这样,s函数可以检索它,并在每个时间步骤中设置石头的位置。下面是Output方法的样子:

有生命的石头

测试

在开发像这样的应用程序时,如果你需要一次又一次地手动点击相同的一系列按钮,那么测试和调试可能会很乏味。这就是应用程序测试框架发挥作用了。

我创建了一个以编程方式执行一次抛出的函数新闻应用程序测试框架的方法允许我按一个按钮或应用程序中的特定位置。

测试应用程序

然后在一个测试中,我用不同的目标和速度调用这个方法。最后,我验证所有的石头都在预期的位置。

测试应用程序

下面是我运行测试时屏幕的样子。请注意编程单击发生的蓝色圆圈,以及Stateflow动画,这使我很容易验证它是否在做正确的事情:

现在轮到你了

下载此最新版本的MATLAB Central上的冰壶游戏应用程序请在下面的评论中告诉我们你的想法。

|

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。