创建Stateflow执行图表为MATLAB对象
将状态机编程的优点与MATLAB的全部功能结合起来®,创建一个独立的状态流®图表之外的Simulink金宝app®模型。保存带有扩展的独立图表.sfx
并将其作为MATLAB对象执行。通过使用图表动画和图形调试工具来优化设计。
使用独立图表,您可以创建MATLAB应用程序,例如:
使用模式逻辑管理小部件行为的MATLAB应用程序设计器用户界面。看到利用状态流程图设计人机界面逻辑.
使用顺序逻辑的通信协议和数据流处理应用程序。看到使用图表对象建模通信协议.
数据采集工具箱™或仪器控制工具箱™应用程序,使用基于计时器的逻辑来监控和控制外部任务。看到通过使用状态流实现财务策略.
可以共享和执行这些应用程序,而不需要statflow许可。有关更多信息,请参见共享独立图表.
构建独立图表
属性打开“状态流编辑器”,以构造独立的状态流图编辑
函数。例如,在MATLAB命令窗口中输入:
编辑chart.sfx
chart.sfx
不存在时,状态流编辑器会打开带有名称的空图表图表
.类定义的图表自解压
文件。
在“状态流编辑器”中,通过组合状态、转换、数据和其他元素来创建独立的图表。有关更多信息,请参见构造并运行状态流程图.
保存独立图表后,将帮助
函数显示关于在MATLAB中执行它的信息:
帮助chart.sfx
若要从MATLAB命令窗口关闭独立图表,请使用sfclose
功能:
sfclose图表
创建一个Stateflow图对象
要在MATLAB中执行一个独立的图表,首先要创建一个Stateflow图表对象。的名称自解压
文件将独立图表作为函数。将数据的初始值指定为名称-值对。例如,假设您定义了一个独立的图表,其中的数据对象为data1
而且data2
.然后这个命令创建图表对象chartObject
,初始化data1
而且data2
,并执行它的默认转换:
chartObject = chart(data1=value1,data2=value2)
要显示图表信息,例如执行的语法、图表数据的值和活动状态列表,请使用disp
功能:
disp (chartObject)
执行独立图表
定义statflow图表对象后,可以通过调用一步
函数(如果需要,带数据值):
步骤(chartObject, data1 = value1, data2 = value2)
或者,你可以调用一个输入事件函数:
event_name (chartObject data1 = value1, data2 = value2)
在这两种情况下,值都是在图表执行之前分配给本地数据的。
如果您的图表具有图形化或MATLAB函数,则可以直接在MATLAB命令窗口中调用它们。调用图表函数不会执行独立的图表。
function_name (chartObject, u1, u2)
请注意
如果你使用输入参数个数
在图形或MATLAB函数中,输入参数个数
将图表对象作为输入参数之一进行计数。的价值输入参数个数
无论从图表还是从MATLAB命令窗口调用函数都是一样的。
您可以在不打开状态流编辑器的情况下执行独立图表。如果图表是打开的,那么状态流编辑器将通过图表动画突出显示活动状态和转换。
出于调试和单元测试的目的,您可以直接从Stateflow Editor执行一个独立的图表。在执行期间,您从用户界面输入数据值和广播事件。有关更多信息,请参见执行和单元测试状态流程图对象.
您可以从MATLAB脚本、Simulink模型或App Designer用户界面执行独立图表。金宝app有关更多信息,请参见:
停止图表执行
方法销毁图表对象,以停止执行图表删除
功能:
删除(chartObject)
删除图表对象后,图表对象的任何句柄都保留在工作区中,但变得无效。要从工作区中删除无效句柄,请使用以下命令清晰的
:
清晰的chartObject
如果清除了一个有效的图表对象句柄,而该图表对象有其他句柄,则不会销毁该图表对象。例如,当您执行图表时,状态流编辑器包含图表对象的内部句柄。从工作空间清除图表对象句柄不会破坏图表对象或删除编辑器中突出显示的图表动画。要重置动画高亮显示,右键单击图表画布并选择删除高亮显示.
共享独立图表
您可以与没有statflow许可的合作者共享独立图表。
如果您的合作者拥有与您相同或更高版本的MATLAB,他们可以将您的独立图表作为MATLAB对象执行,而无需打开状态流编辑器。不支持图表动画和调试。金宝app运行时错误消息不会链接到发生错误的图表中的状态或转换。
请注意
若要运行您保存在R2019a或R2019b中的独立图表,协作者必须具有相同版本的MATLAB。
如果您的合作者有较早版本的MATLAB,请将独立图表导出为他们可以使用的格式。只能导出到R2019a及更高版本。要完成导出过程,您需要访问从中导出和导出到的statflow版本。
使用statflow的最新版本,打开独立图表。
在状态图选项卡上,选择保存>之前的版本.
在“导出到以前版本”对话框中,指定导出图表的文件名。
从另存为类型列表中,选择要导出图表的较早版本。
点击保存.
使用statflow的早期版本,打开并重新保存导出的图表。
要从MATLAB命令窗口导出图表,请调用statflow函数exportToVersion
.有关更多信息,请参见导出图表到早期版本的MATLAB.
请注意
试图在重新保存之前执行导出的图表将导致错误。
的性质和功能Stateflow图对象
Stateflow图表对象通过提供以下功能将数据和操作封装在单个结构中:
包含独立图表的内部状态变量的私有属性。
一个
一步
函数,调用实现图表语义的各种操作。
图表对象可以具有与图表中出现的各种元素相对应的其他属性和函数。
独立图表元素 | 图表对象元素 |
---|---|
本地和常量数据 | 公共属性 |
输入事件 | 执行图表的函数 |
图形和MATLAB函数 | 可以从MATLAB命令窗口调用的函数 |
图表对象配置选项
创建图表对象时,可以通过将这些配置选项作为名值对来指定图表行为。
配置选项 | 描述 | 例子 |
---|---|---|
-animationDelay |
指定图表动画用来突出显示每个过渡段的延迟。默认值为0.01 秒。若要生成没有动画延迟的图表,请设置为0。 |
通过指定一秒延迟来创建具有慢动画的图表对象。 chartObject =图表(“-animationDelay”, 1)
|
-enableAnimation |
启用图表动画和调试仪器。默认值为真正的 . |
创建禁用动画和调试工具的图表对象。 chartObject =图表(“-enableAnimation”假)
|
-eventQueueSize |
指定用于事件和临时逻辑操作的队列的大小。默认值为20. .若要禁用事件排队,请设置为0。有关更多信息,请参见独立图表中的事件. |
创建一个图表对象,如果在图表处理其他操作时发生事件,则忽略所有事件而不发出警告。 chartObject =图表(“-eventQueueSize”, 0)
|
-executeInitStep |
启用默认转换的初始执行。默认值为真正的 . |
创建一个图表对象,但不执行默认转换。 chartObject =图表(“-executeInitStep”假)
|
-warningOnUninitializedData |
在初始化图表对象后启用关于空图表数据的警告。默认值为真正的 . |
在创建图表对象时消除该警告。 chartObject =图表(“-warningOnUninitializedData”假)
|
海图数据初始化
在状态流编辑器中,可以使用符号窗格指定图表数据的初始值。在创建图表对象时,图表数据将根据其作用域按字母顺序初始化。常量数据首先初始化。本地数据最后初始化。
如果您使用表达式指定初始值,则图表将尝试通过以下方式解析表达式:
使用图表中其他数据的值。
调用搜索路径上的函数。
例如,假设您为本地数据指定了一个初始值x
通过使用表达式y
.然后:
如果图表有一个常数叫做
y
,y
在之前初始化x
.本地数据x
是否分配了相同的初始值y
.如果图表中有一个本地数据叫做
y
,x
在之前初始化y
.本地数据x
分配给空数组。如果配置选项-warningOnUninitializedData
设置为真正的
,出现警告。如果图表没有指定的数据
y
,x
通过调用函数初始化y
.如果文件y.m
不在搜索路径上,则发生此错误:未定义的函数或变量“y”。
Stateflow不搜索MATLAB工作空间来解析初始值,因此即使有一个名为y
在MATLAB工作空间中。
能力和限制
金宝app支持的功能
经典的图表语义,以MATLAB为动作语言。您可以使用MATLAB的全部功能,包括在Simulink中限制用于代码生成的那些函数。金宝app看到通过脚本和模型执行状态图对象.
请注意
在独立状态流图中,操作系统命令符号
!
不支持。金宝app当需要执行操作系统命令时,使用此功能系统
.具有层次结构的排他(OR)和并行(and)状态分解。看到使用状态分解定义排他和并行模式而且使用状态层次结构设计多级状态复杂性.
流程图,图形函数,MATLAB函数。看到图表中的可重用组件.
通过使用模式向导将MATLAB代码转换为图形函数。看到转换MATLAB代码为状态流流程图.
绘制本地和固定数据,不受类型限制。看到执行和单元测试状态流程图对象.
输入事件。看到利用状态流程图设计人机界面逻辑.
运营商
焕然一新
,hasChangedFrom
,hasChangedTo
用于检测本地数据值的更改。请注意
独立状态流程图不支持对矩阵的元素或结构中的字段进行更改检测。金宝app
时间逻辑运算符:
独立图表根据挂钟时间定义绝对时间时间逻辑,其精度限制在1毫秒。
函数
getActiveStates
访问图表执行期间活动的状态。要将活动状态存储为单元格数组,输入:states = getActiveStates(chartObject)
Stateflow函数
exportAsClass
将独立的图表导出为等效的MATLAB类。使用此函数可以调试难以诊断的运行时错误。例如,假设您在执行控制MATLAB应用程序的Stateflow图时遇到错误。如果将图表导出为MATLAB类文件,则可以在应用程序中用类替换图表,并使用MATLAB调试器诊断错误。导出图表chart.sfx
作为类文件chart.m
,输入:Stateflow.exportAsClass (“chart.sfx”)
限制
Simulink专用内容:金宝app
采样时间和连续时间语义。
C动作语言。
金宝app作为状态的Simulink函数和Simulink子系统。
输入、输出和参数数据。
数据存储内存数据。
输出和本地事件。
输入、输出和本地消息。
其他限制:
没有Mealy或Moore的语义。
没有状态转换表。
无真相表函数。
没有状态父级本地数据或函数。
没有转换操作(退出转换的源状态之后、进入目标状态之前执行的操作)。
另请参阅
disp
|编辑
|exportAsClass
|exportToVersion
|帮助
|sfclose