一个独立的Stateflow®图是MATLAB®定义有限状态机行为的类。独立图表用MATLAB作为动作语言实现经典的图表语义。您可以使用MATLAB的全部功能对图表进行编程,包括那些在Simulink中限制代码生成的函数金宝app®.有关更多信息,请参见创建状态流图表作为MATLAB对象执行.
该文件sf_chart.sfx
包含独立的Stateflow图表sf_chart
.图表中有本地数据u
,x
,y
.
这个例子展示了如何从状态流编辑器和在MATLAB命令窗口中执行这个图表。
要对独立的图表进行单元测试和调试,可以直接从状态流编辑器执行该图表。在执行过程中,您输入数据值并从用户界面广播事件。
在状态流编辑器中打开图表:
编辑sf_chart.sfx
在“符号”窗格中,输入值u
= 1并点击运行.图表执行它的默认转换,并且:
初始化x
等于0。
使国家一个
活动状态。
分配y
值为1。
增加了x
为1。
图表动画突出显示了活动状态一个
.“符号”窗格显示值u
= 1,x
= 1,y
= 1.图表维护其当前状态和本地数据,直到下一个执行命令。
点击一步.因为u
不满足条件(u < 0)
转移到其他国家一个
,这种状态保持活跃和价值x
和y
增加到2。“符号”窗格现在显示值u
= 1,x
= 2,y
= 2.
在“符号”窗格中,输入值u
=−1并点击一步.负数据值触发到状态的转换B
.“符号”窗格显示值u
=−1,x
= 1,y
= 3.
您可以在“符号”窗格中修改任何图表数据的值。例如,输入值为x
= 3.图表将在下一次执行步骤中使用此数据值。
输入值u
= 2并点击一步.图表转换回状态一个
.“符号”窗格显示值u
= 2,x
= 4,y
= 5.
要停止图表动画,请单击停止.
若要中断执行并逐个执行图表中的每个操作,请在执行图表之前添加断点。有关更多信息,请参见调试一个独立的状态流图.
你可以在MATLAB中执行一个独立的图表,而不需要打开状态流编辑器。如果图表是打开的,那么编辑器会通过图表动画突出显示活动状态和转换。
在状态流编辑器中打开图表。在MATLAB命令窗口中,输入:
编辑sf_chart.sfx
的名称创建Stateflow图表对象自解压
作为函数的独立图表文件。指定数据的初始值u
作为名称-值对。
s = sf_chart (“u”, 1)
Stateflow图表执行函数y =步骤(s)本地数据u: 1 x: 1 y: 1活动状态:{'A'}
年代
,执行默认转换,并初始化x
和y
.状态流编辑器动画图表并突出显示活动状态一个
.
要执行图表,请调用一步
函数。例如,假设您调用一步
值为的函数u
= 1:
步骤(年代,“u”, 1)
disp (s)
Stateflow图表执行函数y =步骤(s)本地数据u: 1 x: 2 y: 2活动状态:{'A'}
u
不满足条件(u < 0)
转移到其他国家一个
,这种状态保持活跃和价值x
和y
增加到2。
再次执行该图表,这次的值为u
=−1:
步骤(年代,“u”, 1)
disp (s)
Stateflow图表执行函数y =步骤(s)本地数据u: -1 x: 1 y: 3活动状态:{'B'}
B
.的价值x
减为1,且值为y
增加到3。
要访问任何图表数据的值,请使用点表示法。例如,您可以将值3赋给本地数据x
通过输入:
s.x = 3
Stateflow图表执行函数y =步骤(s)本地数据u: -1 x: 3 y: 3活动状态:{'B'}
执行值为的图表u
= 2:
步骤(年代,“u”, 2)
disp (s)
Stateflow图表执行函数y =步骤(s)本地数据u: 2 x: 4 y: 5活动状态:{'A'}
一个
并修改值x
和y
.
要停止图表动画,请删除Stateflow图表对象年代
:
删除(年代)
您可以执行同一独立图表定义的多个图表对象。并发图表对象独立维护其内部状态,但在编辑器中保持与同一图表的关联。图表动画反映了最近执行的图表对象的状态。在状态流编辑器打开的情况下执行多个图表对象可能会产生混乱的结果,不推荐使用。