9.2对象的属性和方法在介绍如何利用Stateflow API创建Stateflow框图模型之前,首先需要掌握的是获取Stateflow API对象句柄、查看属性和方法的基本步骤。其实这些方法和步骤就是利用Stateflow API创建框图的基础。

9.2.1获取句柄与MATLAB句柄图形类似,每个Stateflow API对象都具有句柄,只有获取了对象句柄才能够针对对象进行操作。获取Stateflow对象句柄的方法是使用sfroot命令以及find函数。其中:

sfroot命令用于获取Stateflow的根对象句柄。前文所述的所有Stateflow状态机都具有一个且只有一个根对象。如果在MATLAB命令行窗体中键入以下指令,则可以获取Stateflow根对象句柄:

rt = sfroot

rt = Simulink.Root

whos rt

Name Size Bytes Class Attributes

rt 1x1 Simulink.Root

获取根对象句柄是获取其他对象句柄的前提,因为Stateflow的对象按照层次分布,如果需要获取具体对象句柄,则需要在指定层次下查找获取,而获取查找对象就需要使用find函数。

find函数能够在指定的层次下,根据用户定义的查询条件将符合要求的Stateflow对象句柄返回。其基本语法为:

objArray = thisObject.find(Specifier,Value, ...)

其中,thisObject是已经获取的Stateflow对象句柄,它其实就是搜索工作的起始层次节点。例如,如果thisObject为Stateflow的根对象,则搜索工作就从根对象开始往下搜索;如果thisObject为状态图(Chart)对象,则搜索工作就从状态图对象开始往下搜索。find指令的参数是具体的搜索条件,可以指明搜索对象的类型或者对象所具备的某种属性。例如在MATLAB命令行窗体中键入指令:

m = rt.find('-isa','Stateflow.Machine', '-and','Name','sf_car')

则表明从当前的根对象(根对象句柄通过sfroot指令获取)开始,搜索查找类型为状态机(Stateflow Machine),名称(Name)为sf_car的状态机对象。如果此时模型sf_car被打开或者加载到了内存空间,则变量m就是状态机的句柄。还可以进一步键入指令:

d = m.find('-isa','Stateflow.Data','-and','Scope','Output')

则从状态机层次开始搜索类型为Output的数据对象,而如果键入指令:

states = m.find('-isa','Stateflow.State')

states =。

为了更好地理解和掌握Stateflow API对象句柄的操作,可以参考以下资源:

  1. MATLAB图形对象句柄详解

对象的属性和方法-sas编程技术教程(朱世武)

  1. MATLAB Simulink Stateflow建模规范及应用

![MATLAB Simulink Stateflow建模规范及应用](//imgcdn2.kaledl.com/uploads/images/pre