主要内容

创建Stateflow执行图表为MATLAB对象

将状态机编程的优点与MATLAB的完整功能相结合®,创建一个独立的statflow®在Simulink外绘制图表金宝app®模型。用扩展保存独立图表.sfx并将其作为MATLAB对象执行。使用图表动画和图形调试工具来优化您的设计。

有了独立的图表,您可以创建MATLAB应用程序,如:

这些应用程序可以在不需要statflow许可证的情况下共享和执行。有关更多信息,请参见分享独立图表

构建一个独立的图表

要构造独立的状态流图,请使用编辑函数。例如,在MATLAB命令窗口,输入:

编辑chart.sfx
如果文件chart.sfx时,状态流编辑器将打开一个名称为图表.控件定义的图表,编辑器将打开自解压文件。

在statflow Editor中,通过组合状态、转换、数据和其他元素创建一个独立的图表。有关更多信息,请参见构造并运行状态流程图

保存独立图表后,帮助函数显示在MATLAB中执行它的信息:

帮助chart.sfx

要从MATLAB命令窗口关闭独立的图表,请使用sfclose功能:

sfclose图表

创建一个Stateflow图对象

要在MATLAB中执行一个独立的图表,首先创建一个状态流图表对象。使用的名称自解压文件为独立图表作为一个函数。将数据的初始值指定为名称-值对。例如,假设您定义了一个独立的图表,其中的数据对象被称为data1data2.然后这个命令创建图表对象chartObject,初始化data1data2,并执行其默认转换:

chartObject =图(“data1”value1,“data2”value2)

要显示图表信息,例如执行语法、图表数据的值和活动状态列表,请使用disp功能:

disp (chartObject)

执行独立图表

定义状态流图对象后,可以通过调用一步函数(如有必要,带数据值):

步骤(chartObject,“data1”value1,“data2”value2)

或者,你可以调用其中一个输入事件函数:

event_name (chartObject“data1”value1,“data2”value2)

在这两种情况下,在图表执行之前将值分配给本地数据。

如果您的图表具有图形或MATLAB函数,您可以在MATLAB命令窗口中直接调用它们。调用图表函数不会执行独立的图表。

function_name (chartObject, u1, u2)

请注意

如果你使用输入参数个数在图形或MATLAB函数中,输入参数个数将图表对象计算为输入参数之一。的价值输入参数个数无论是从图表调用函数还是从MATLAB命令窗口调用函数都是相同的。

您可以在不打开statflow编辑器的情况下执行独立的图表。如果图表是打开的,则statflow Editor通过图表动画突出显示活动状态和转换。

出于调试和单元测试的目的,您可以直接从statflow Editor执行独立的图表。在执行期间,您输入数据值并从用户界面广播事件。有关更多信息,请参见执行和单元测试状态流程图对象

您可以从MATLAB脚本、Simulink模型或App Designer用户界面执行独立的图表。金宝app有关更多信息,请参见:

停止表执行

要停止执行图表,可以通过调用删除功能:

删除(chartObject)

删除图表对象后,图表对象的任何句柄仍保留在工作区中,但将失效。若要从工作区中删除无效句柄,请使用命令清晰的

清晰的chartObject

如果清除一个有效的图表对象句柄,而同一图表对象还有其他句柄,则不会销毁该图表对象。例如,在执行图表时,statflow Editor包含图表对象的内部句柄。从工作区中清除图表对象句柄不会破坏图表对象或删除编辑器中突出显示的图表动画。要重置动画高亮显示,右键单击图表画布并选择删除高亮显示

分享独立图表

您可以与没有statflow许可证的合作者共享独立图表。

如果您的合作者拥有与您相同或更高版本的MATLAB,他们可以将您的独立图表作为MATLAB对象执行,而无需打开statflow Editor。不支持图表动画和调试。金宝app运行时错误消息不会链接到发生错误的图表中的状态或转换。

请注意

要运行保存在R2019a或R2019b中的独立图表,协作者必须拥有相同版本的MATLAB。

如果你的合作者有一个较早版本的MATLAB,导出一个独立的图表到他们可以使用的格式。您只能导出到R2019a及以后的版本。要完成导出过程,您需要访问要导出的statflow版本。

  1. 使用statflow的最新版本,打开独立图表。

  2. 状态图选项卡上,选择保存>之前的版本

  3. 在“导出到以前版本”对话框中,指定导出图表的文件名。

  4. 另存为类型列表,选择要将图表导出到的较早版本。

  5. 点击保存

  6. 使用早期版本的statflow,打开并保存导出的图表。

要从MATLAB命令窗口导出图表,调用statflow函数exportToVersion.有关更多信息,请参见导出图表到较早版本的MATLAB

请注意

试图在保存之前执行导出的图表将导致错误。

的性质和功能Stateflow图对象

statflow对象将数据和操作封装在一个结构中,方法是:

  • 包含独立图表的内部状态变量的私有属性。

  • 一个一步函数,调用实现图表语义的各种操作。

图表对象可以具有与图表中呈现的各种元素相对应的其他属性和函数。

独立的图表元素 图表对象元素
局部和常数数据 公共属性
输入事件 执行图表的函数
图形和MATLAB函数 可以从MATLAB命令窗口调用的函数

图表对象配置选项

在创建图表对象时,可以通过将这些配置选项包含为名称-值对来指定图表行为。

配置选项 描述 例子
-animationDelay 指定图表动画用于突出显示每个过渡段的延迟。默认值为0.01秒。要生成没有动画延迟的图表,设置为零。

通过指定一秒的延迟,创建具有慢动画的图表对象。

chartObject =图(“-animationDelay”, 1)

-enableAnimation 启用图表动画和调试仪器。默认值为真正的

创建禁用动画和调试检测的图表对象。

chartObject =图(“-enableAnimation”假)

-eventQueueSize 指定用于事件和时态逻辑操作的队列的大小。默认值为20..若要禁用事件排队,请将其设置为零。有关更多信息,请参见独立图表中的事件

创建一个图表对象,该对象忽略在图表处理另一个操作时发生的所有事件而不发出警告。

chartObject =图(“-eventQueueSize”, 0)

-executeInitStep 启用默认转换的初始执行。默认值为真正的

创建图表对象,但不执行默认转换。

chartObject =图(“-executeInitStep”假)

-warningOnUninitializedData 在初始化图表对象之后,启用关于空图表数据的警告。默认值为真正的

在创建图表对象时消除警告。

chartObject =图(“-warningOnUninitializedData”假)

海图数据初始化

在状态流编辑器中,可以使用“符号”窗格为图表数据指定初始值。当您创建一个图表对象时,图表数据将根据其范围的字母顺序进行初始化。首先初始化常量数据。最后初始化本地数据。

如果您使用表达式来指定一个初始值,则图表将尝试通过以下方式解析该表达式:

  • 使用图表中其他数据的值。

  • 在搜索路径上调用函数。

例如,假设您为本地数据指定了一个初始值x通过使用表达式y.然后:

  • 如果图表中有一个常数叫做yy初始化之前x.本地数据x初始值与y

  • 如果图表有一个本地数据叫做yx初始化之前y.本地数据x赋给空数组。如果配置选项-warningOnUninitializedData被设置为真正的,则会出现警告。

  • 如果图表没有命名数据yx是通过调用函数初始化的y.如果文件y.m不在搜索路径上,则发生此错误:

    未定义函数或变量'y'。

statflow不搜索MATLAB工作区来解析初始值,因此即使调用了一个变量,也会出现这个错误y在MATLAB工作空间中。

功能和限制

金宝app支持的功能

  • 经典的图表语义,以MATLAB为动作语言。您可以使用MATLAB的全部功能,包括那些在Simulink中代码生成受到限制的函数。金宝app看到通过脚本和模型执行状态流程图对象

    请注意

    在独立的状态流图中,操作系统命令符号不支持。金宝app执行操作系统命令时,可使用该功能系统

  • 具有层次结构的Exclusive (OR)和Parallel (and)状态分解。看到状态分解国家层次

  • 流程图,图形函数,MATLAB函数。看到图表中的可重用组件

  • 使用模式向导将MATLAB代码转换为图形函数。看到转换MATLAB代码到状态流流程图

  • 图表局部和常量数据,不受类型限制。看到执行和单元测试状态流程图对象

  • 输入事件。看到利用状态流图设计人机界面逻辑

  • 运营商焕然一新hasChangedFrom,hasChangedTo用于检测本地数据值的变化。

    请注意

    独立的状态流图不支持对矩阵元素或结构中的字段的更改检测。金宝app

  • 时序逻辑运算符:

    • ,每一个操作输入事件、图表调用的数量(蜱虫)和绝对时间(证券交易委员会).在状态中使用这些操作符操作和作为转换触发器。

    • 操作图表调用次数(蜱虫).

    • temporalCount作用于绝对时间(证券交易委员会msec,购买).

    • 运行作用于绝对时间(证券交易委员会).

    独立图表定义绝对时间时序逻辑,以时钟时钟时间为标准,其精度限制在1毫秒。

  • 函数getActiveStates访问图表执行期间活动的状态。要将活动状态存储为单元格数组,请输入:

    州= getActiveStates (chartObject)

  • Stateflow函数exportAsClass将独立图表导出为等效的MATLAB类。使用此函数调试运行时错误,否则很难诊断。例如,假设您在执行控制MATLAB应用程序的状态流程图时遇到错误。如果将图表导出为MATLAB类文件,则可以使用应用程序中的类替换图表,并使用MATLAB调试器诊断错误。导出图表chart.sfx作为类文件chart.m,输入:

    Stateflow.exportAsClass (“chart.sfx”
    当您执行MATLAB类时,statflow Editor不会对原始图表进行动画处理。

限制

Simulink特有的内容:金宝app

  • 采样时间和连续时间语义。

  • C动作语言。

  • 金宝app作为状态的Simulink函数和Simulink子系统。

  • 输入、输出和参数数据。

  • 数据存储内存中的数据。

  • 输出和本地事件。

  • 输入、输出和本地消息。

其他限制:

  • 没有Mealy或Moore语义学。

  • 没有状态转换表。

  • 无真相表函数。

  • 没有由国家提供的本地数据或函数。

  • 没有转换操作(退出转换的源状态之后但进入目标状态之前执行的操作)。

另请参阅

|||||

相关的话题