Simulin金宝appk上的Guy

金宝appSimulink &基于模型的设计

冰壶游戏更新:应用程序设计器和状态流

最近有人向我提出挑战,要我将我们几年前发布的冰壶模拟器进行转换这篇文章而且这篇文章),以利用当时尚未推出的新功能:程序设计师而且MATLAB的状态流

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

你可以在这里找到最终结果:冰壶游戏App

概述

下面是一个图表说明在一个高层次如何冰壶应用程序的实现:

冰壶应用程序概述

如果你下载了这个应用程序,下面是你将看到的文件的描述:

  • TestCurling.m:属性创建的测试应用测试框架.这允许我以编程方式执行我的应用程序,并验证它的行为符合预期。
  • curling.mlapp:主应用程序。
  • curlingLogic.sfx:状态流图,其中定义了应用程序的所有逻辑和操作。
  • curlingSimulator.slx:一个金宝app模拟冰上石块动态的Simulink模型。
  • msfcn_showTrack。M和msfcnsweep . M:MATLAB S-Function中使用Simulink模型金宝app在app中对冰壶游戏进行动画化。

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

程序设计师

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

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

App Designer design视图

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

App Designer代码视图

MATLAB状态流程图

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

冰壶游戏逻辑

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

一旦用户单击应用中的“Go”按钮,状态流图就会启动模拟并等待它完成。方法定期检查模拟状态函数。

对于图表中多个位置需要的一些实用程序,我在Stateflow中创建了MATLAB函数,可以从图表中的多个位置调用它们。这里有一个例子函数,每次我需要画一个新的石头。

绘制石头工具

金宝app仿真软件模型

与我在我的2018年后, Simu金宝applink模型变化不大。我唯一需要修改的项目是MATLAB S-Function,以便在模拟过程中使石头动画。

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

让石头动起来

测试

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

我创建了一个以编程方式执行一次抛出的函数。为此,新闻App Testing框架的方法允许我在App中按下一个按钮或特定的位置。

测试应用

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

测试应用

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

现在轮到你了

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

|

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。