主要内容

利用状态流程图设计人机界面逻辑

这个例子展示了如何在一个独立的Stateflow®图表中建模图形用户界面的逻辑。独立图表使用MATLAB®作为操作语言实现经典图表语义。您可以使用MATLAB的全部功能对图表进行编程,包括在Simulink®中限制代码生成的那些函数。万博1manbetx有关更多信息,请参见创建作为MATLAB对象执行的状态流程图

您可以通过调用输入事件和使用时态操作符来执行独立的状态流图。事件和定时器驱动的执行工作流适用于设计底层人机界面(hmi)和图形用户界面(ui)的逻辑。

  • 使用MATLAB应用程序设计器时,来自界面小部件的回调函数会调用图表中的事件。

  • 在状态流图中,时态操作符和本地数据控制用户界面的属性。

有关如何使用MATLAB创建图形用户界面的详细信息,请参见使用应用设计器开发应用程序

控制一个应用程序设计器用户界面

这个用户界面包含一个控制灯的开关。当开关处于On位置时,灯以两种模式之一亮起,固态或闪烁,这取决于模式选项按钮的位置。您可以通过移动闪烁速率滑块来控制闪烁速率。要启动应用程序,请在应用程序设计器工具栏中单击运行

该文件sf_lamp_logic.sfx定义一个实现用户界面逻辑的独立状态流图。图表有输入事件(闪烁的,固体)和本地数据(延迟而且应用程序).图表中的操作控制从每个状态可以访问哪些小部件。的操作状态导致灯小部件,模式选项按钮和闪烁速率滑块在用户界面中显示为暗。

态,次态固体而且闪烁的表示两种操作模式。为了实现一个闪烁的灯,图表依赖于时间逻辑运算符.当图表进入状态时眨眼睛。从,表达式(延迟,sec)后在传出转换上创建一个MATLAB计时器对象,该对象在数秒后执行图表。然后图表转换到状态眨眼睛。在并创建另一个计时器对象来触发转换回眨眼睛。从.当图表不断地在两种状态之间转换时,您可以通过更改本地数据延迟值来调整闪烁速率,或者通过调用输入事件来转换出闪烁模式固体

历史的交汇处State保存有关最近活动子状态的信息,以便当您打开灯时,用户界面返回到以前的操作模式。

使用事件执行独立图表

您可以通过在MATLAB命令窗口中调用其输入事件函数来执行独立图表。状态流编辑器通过图表动画突出显示活动状态和转换来显示每个命令的效果。

1.创建图表对象l并初始化的值延迟到0.5。该值对应每秒闪烁1次(亮0.5秒,灭0.5秒)。

L = sf_lamp_logic(延迟=0.5);

2.把灯打开。

(左)

3.切换到闪烁模式。

眨眼(左)

4.设置的值延迟到0.25。该值对应每秒闪烁两次(亮0.25秒,灭0.25秒)。

L.delay = 0.25;

5.切换到立体模式。

固体(左)

6.把灯关掉。

(左)

7.删除图表对象l从MATLAB工作空间。

删除(左)

将独立图表连接到用户界面

要在用户界面和独立状态流程图之间建立双向连接,请打开应用程序设计器窗口并选择代码视图

1.在应用程序设计器窗口中,创建一个私有属性lampLogic将句柄存储到状态流图对象。

lampLogic . properties (Access = private结束

2.创建一个StartupFcn创建图表对象并设置其本地数据的回调函数应用程序到用户界面句柄。对象的图表对象句柄lampLogic私人财产。

函数StartupFcn(app) app. lamplogic = sf_lamp_logic(延迟=0.5,app=app);结束

3.创建一个CloseRequestFcn在关闭用户界面时删除图表对象的回调函数。

函数UIFigureCloseRequest(app, event) delete(app. lamplogic);删除(应用);结束

4.对于每个用户界面小部件,添加在独立图表上调用适当事件的回调函数。

  • ValueChangedFcnSwitch小部件的回调函数:

函数SwitchValueChanged(app, event) value = app. switch . value;开关低(值)情况下“关闭”(app.lampLogic);情况下“上”(app.lampLogic);结束结束
  • SelectionChangedFcn模式按钮小部件的回调函数:

函数ModeButtonGroupSelectionChanged(app, event) selectedButton = app. modebuttongroup . selectedobject;如果selectedButton == app.SolidButton SOLID(app.lampLogic);其他的眨眼(app.lampLogic);结束结束
  • ValueChangedFcn闪烁速率滑块小部件的回调函数:

函数BlinkRateSliderValueChanged(app, event) app. lamplogic .delay = round(0.5/app. blinkrateslider . value,2);结束

当您运行用户界面时,您可以观察到在图表画布和灯小部件上调整控制小部件的效果。

另请参阅

相关的话题