此示例演示如何在独立的Stateflow®图表中对图形用户界面的逻辑建模。独立图表使用MATLAB®作为动作语言实现经典图表语义。您可以使用MATLAB的全部功能对图表进行编程,包括那些在Simulink®中受代码生成限制的功能。有关详细信息,请参见万博1manbetx对于执行创建Stateflow图的MATLAB对象。
通过调用其输入事件并使用时态运算符,可以执行独立的状态流图。事件和计时器驱动的执行工作流适用于设计人机界面(HMI)和图形用户界面(UI)的底层逻辑。
使用MATLAB应用程序设计器时,界面小部件中的回调函数调用图表中的事件。
在状态流图表,时间运营商和本地数据控制用户界面的属性。
有关如何使用MATLAB创建图形用户界面的详细信息,请参阅开发应用程式使用App设计师(MATLAB)。
该用户界面包含一个通断开关,其控制的灯。当开关处于打开位置时,所述灯中的两种模式之一点亮,固体或闪烁,这取决于模式选项按钮的位置。您可以控制通过移动闪烁频率滑块闪烁的速度。
文件sf_lamp_logic.sfx
限定一个独立的状态流图表,用于实现用户接口的逻辑。该图表具有输入事件(打开
,关闭
,BLINKING
,和固体
)和本地数据(延迟
和应用
)。在图表控制哪些窗口小部件的操作是从每一个状态访问。举例来说,在行动离
状态使灯部件,所述模式选项按钮和闪烁速率滑块在所述用户接口显示为灰色。
在打开
状态时,子状态固体
和闪烁
表示操作的两种模式。为了实现一个闪烁灯,图表依赖于时间逻辑运算符后
。当图表进入的状态Blinking.Off
, 表达方式后(延迟,秒)
在传出转换上创建一个MATLAB计时器对象,该对象在数秒后执行图表。然后图表转换为状态闪烁。打开
并创建另一个计时器对象以触发转换回Blinking.Off
. 当图表在两种状态之间持续转换时,您可以通过更改本地数据延迟的值来调整闪烁速率,或者通过调用输入事件从闪烁模式转换出来固体
或关闭
。
历史的交汇点打开
状态保留最近激活的子状态的信息,以便在您打开指示灯时,用户界面返回到以前的操作模式。
通过在MATLAB命令窗口中调用独立图表的输入事件函数,可以执行独立图表。Stateflow编辑器通过突出显示活动状态和通过图表动画的转换来显示每个命令的效果。
一。在Stateflow编辑器中打开独立图表。
编辑sf_lamp_logic.sfx
2.创建图表对象大号
并初始化延迟
至0.5。此值对应于每秒闪烁一次的闪烁速率。
L = sf_lamp_logic('延迟',0.5分);
3.打开灯泡。
ON(L)
4.切换到闪烁模式。
闪烁(L)
5.设置的值延迟
0.25。此值对应于每秒两个闪烁的闪烁速率。
L.delay = 0.25;
6。切换到固态模式。
固体(L)
7.关闭灯。
OFF(L)
8.删除图表对象大号
从MATLAB工作区。
删除(L)
要在用户界面和独立的状态流程图之间建立双向连接,请打开App Designer窗口并选择代码视图。
1.在应用程序设计器窗口,创建一个私有财产lampLogic
存储句柄状态流图表对象。
属性(Access=private)lampLogic结束
2.创建启动FCN
创建图表对象并设置其本地数据回调函数应用
用户界面的手柄。图表对象句柄分配给lampLogic
私人财产。
%代码组件创建后执行功能StartupFcn(APP)app.lampLogic = sf_lamp_logic('延迟',0.5分,“应用”,应用程序);结束
3.创建CloseRequestFcn
回调函数,当您关闭用户界面,删除图表对象。
%关闭请求函数:UIFigure功能UIFigureCloseRequest(app,event)删除(应用程序lampLogic);删除(app);结束
4.对于用户界面窗口小部件中的每一个,添加调用独立图表上的适当的事件的回调函数。
ValueChangedFcn
回调开关插件功能:
功能SwitchValueChanged(应用程序,事件)值= app.Switch.Value;转换降低(值)案件“关”OFF(app.lampLogic);案件'上'ON(app.lampLogic);结束结束
SelectionChangedFcn
回调模式按钮控件功能:
功能ModeButtonGroupSelectionChanged(应用程序,事件)selectedButton = app.ModeButtonGroup.SelectedObject;如果app.SolidButton == selectedButton固体(app.lampLogic);其他闪烁(应用程序lampLogic);结束结束
ValueChangedFcn
回调闪烁频率滑块功能部件:
功能BlinkRateSliderValueChanged(应用程序、事件)app.lampLogic.delay程序=圆形(0.5/app.BlinkRateSlider.Value值,2个);结束
当您运行用户界面时,您可以观察在图表画布和lamp小部件上调整控件小部件的效果。