这个例子展示了如何在一个独立的statflow®图表中建模图形用户界面的逻辑。独立图表以MATLAB®为操作语言实现经典图表语义。您可以通过使用MATLAB的全部功能来编程图表,包括那些在Simulink®中代码生成受到限制的函数。金宝app有关更多信息,请参见创建用于执行的状态流图作为MATLAB对象.
您可以通过调用其输入事件和使用临时操作符来执行独立的状态流图。事件和定时器驱动的执行工作流适用于设计底层人机界面(HMIs)和图形用户界面(ui)的逻辑。
当您使用MATLAB App Designer时,来自接口小部件的回调函数调用图表中的事件。
在状态流图中,时间操作符和本地数据控制用户界面的属性。
有关如何使用MATLAB创建图形用户界面的更多信息,请参见使用应用程序设计师开发应用程序.
这个用户界面包含一个控制灯的开关。当开关处于“开”位置时,根据“模式”单选按钮的位置,指示灯会以两种模式之一亮起,是亮起或闪烁。您可以通过移动“眨眼速率”滑块来控制眨眼速率。要启动应用程序,请在应用程序设计器工具条中单击运行.
该文件sf_lamp_logic.sfx
定义一个独立的状态流图,它实现用户界面的逻辑。图表有输入事件(在
,从
,闪烁的
,固体
)及本地数据(延迟
和应用程序
).图表中的操作控制哪些小部件可以从每个状态访问。例如,在从
状态导致用户界面中的Lamp小部件、模式选项按钮和Blink Rate滑块变暗。
在在
状态,亚态固体
和闪烁的
表示两种操作模式。为了实现闪烁灯,图表依赖于时间逻辑运算符后
.当图表进入状态时眨眼睛。从
,该表达式(延迟,sec)后
创建一个MATLAB计时器对象,该对象在数秒后执行图表。然后图表转换到状态眨眼睛。在
并创建另一个计时器对象来触发转换回眨眼睛。从
.当图表在两种状态之间不断转换时,您可以通过改变本地数据延迟的值来调整闪烁的速率,或者通过调用输入事件来切换出闪烁模式固体
或从
.
历史交汇在在
State保存最近活动的子状态的信息,以便当您打开灯时,用户界面返回到以前的操作模式。
您可以通过调用MATLAB命令窗口中的输入事件函数来执行独立的图表。statflow Editor通过图表动画突出显示活动状态和转换来显示每个命令的效果。
1.创建图表对象l
并初始化延迟
到0.5。每秒闪1次(亮0.5秒,灭0.5秒)。
L = sf_lamp_logic (“延迟”, 0.5);
2.把灯打开。
(左)
3.切换到闪烁模式。
眨眼(左)
4.设置的值延迟
到0.25。每秒闪2次(开0.25秒,关0.25秒)。
L.delay = 0.25;
5.切换到固态模式。
固体(左)
6.把灯关掉。
(左)
7.删除图表对象l
从MATLAB工作空间。
删除(左)
要在用户界面和独立的状态流程图之间建立双向连接,请打开App Designer窗口并选择代码视图.
1.在App Designer窗口中,创建一个私有属性lampLogic
以存储状态流图对象的句柄。
lampLogic . properties (Access = private结束
2.创建一个StartupFcn
用于创建图表对象并设置其本地数据的回调函数应用程序
到用户界面句柄。将图表对象句柄分配给lampLogic
私人财产。
%创建组件后执行的代码函数app. lamplogic = sf_lamp_logic(“延迟”, 0.5,“应用程序”、应用程序);结束
3.创建一个CloseRequestFcn
回调函数,在关闭用户界面时删除图表对象。
%关闭请求功能:ui函数UIFigureCloseRequest(应用程序、事件)删除(app.lampLogic);删除(应用);结束
4.对于每个用户界面小部件,添加一个调用独立图表上适当事件的回调函数。
ValueChangedFcn
Switch小部件的回调函数:
函数SwitchValueChanged(app,event) value = app. switch . value;开关低(值)情况下“关闭”(app.lampLogic);情况下“上”(app.lampLogic);结束结束
SelectionChangedFcn
Mode Button小部件的回调函数:
函数ModeButtonGroupSelectionChanged(app,event) selectedButton = app. modebuttongroup . selectetobject;如果app.SolidButton == selectedButton SOLID(app.lampLogic);其他的眨眼(app.lampLogic);结束结束
ValueChangedFcn
Blink Rate Slider小部件的回调函数:
函数app. lamplogic .delay = round(0.5/app. blinkrateslider . value,2);结束
当您运行用户界面时,您可以观察在图表画布和灯具小部件上调整控件小部件的效果。