通过使用创建图表StateflowAPI
创建一个新的模型和图表
关闭所有模型。
类型的函数
sfnew
创建一个新的,新的Stateflow untitled模型®图表。
MATLAB®是图表创建默认动作的语言sfnew
。打开一个新的C图表或改变默认动作语言,明白了修改一个图表的动作语言。
你只有一个模型金宝app®模型在内存中。不要打开图表。你现在可以访问的API机
对象代表了模型本身。
访问机
对象
Stateflow API,每个模型您创建或加载到内存中表示一个对象的类型机
。之前访问Stateflow图表创建在前面的小节中,您必须首先连接到它机
对象。然而,在Stateflow API,机
被包含的对象Stateflow API根
对象,因此您必须使用的根
对象返回的函数sfroot
访问一个机
对象:
使用此命令可获得一个句柄
根
对象:rt = sfroot;
使用的句柄
根
对象,rt
,发现机
对象代表你的新untitled仿真软件模型和分配处理金宝app米
在这个命令:m = rt.find(“是”、“Stateflow.Machine”);
而不是一个模型,如果有几个模型打开,该命令返回一个数组不同的机
你可以通过索引访问的对象((1)
,(2)
等),你可以确定一个特定的机
对象使用每个模型的属性,特别是的名字
模型的属性,也就是名字。例如,您可以使用的名字
属性来找到一个机
对象命名myMachine
使用这个命令:
m = rt.find (isa, Stateflow。机”、“——”,……“名称”、“myMachine”);
然而,由于你现在只有一个模型加载,对象句柄米
在第2步返回的命令机
您刚刚创建的对象模型。你现在可以使用了米
访问空表,这样您就可以开始填充Stateflow对象。
图表对象的访问
在访问本机对象,你访问机
对象包含你的新表返回一个句柄机
对象为您的新模型,米
。执行这些步骤来访问新的图表:
访问新
图表
对象,并将其分配给工作空间变量ch
如下:ch = m.find(“是”、“Stateflow.Chart”);
在前面的命令中,
找到
的方法机
对象米
返回一个数组的所有图表属于这种模式。因为只创建一个图表,这个命令的结果是您创建的图表。如果你创建了一些图表,找到
方法返回一个数组的图表,你可以通过索引访问(例如,ch (1)
,ch (2)
等等)。您还可以使用标准函数符号相反的点符号前面的命令。在本例中,第一个参数是
机
对象句柄,米
。ch =找到(m,‘是’,‘Stateflow.Chart’);
-
ch.view;
前面的命令调用
视图
的方法图表
对象的句柄ch
。指定的表出现。其他Stateflow API对象视图
方法。
在图表创建新对象
在前面的小节中,您创建了一个新的处理图表
对象,ch
。继续通过创建新对象对你的图表使用这些步骤:
-
sA = Stateflow.State (ch);
这个命令是一个Stateflow API构造函数的新状态
Stateflow.State
是一个国家的对象类型,ch
是一个工作空间变量包含处理到父表的新状态,然后呢sA
是一个工作空间变量接收返回的句柄的新状态。现在一个空的状态出现在左上角的图表。
使用
ch.view
命令来前台查看图表。指定一个名称和位置的新状态的属性赋值
状态
对象如下:sA。Name = ' A ';sA。位置= [50 50 310 200];
创建新的状态A1和A2内部状态与这些命令和分配属性:
sA1 = Stateflow.State (ch);sA1。的名字= 'A1'; sA1.Position = [80 120 90 60]; sA2 = Stateflow.State(ch); sA2.Name = 'A2'; sA2.Position = [240 120 90 60];
这些命令创建和使用工作空间变量
sA
,sA1
,sA2
现在处理的新国家,出现如下。创建一个从3点位置(右侧)的A1到9点钟位置(左)的A2这些命令:
tA1A2 = Stateflow.Transition (ch);tA1A2。源= sA1;tA1A2。目的地= sA2;tA1A2。SourceOClock = 3;tA1A2。DestinationOClock = 9;
一个过渡现在看起来如图所示。
添加标签
E1
的过渡状态A1
州A2
使用这个命令:tA1A2。LabelPosition = (180 140 0 0);tA1A2。LabelString =“E1”;
现在的图是这样的:
状态和转换标签在这个图表是简单的一行标签。进入更复杂的多行标签,看到的在状态和转换输入多行标签。标签转换也有一个
LabelPosition
属性可以使用标签移动到更好的位置。使用这些命令来移动标签从A1, A2过渡到正确的5像素:
pos = tA1A2.LabelPosition;pos pos (1) = (1) + 5;tA1A2。LabelPosition = pos;
完成你的新表通过添加默认转换到州和A1来源分20像素以上,10像素顶部左边的中点每个状态:
%添加一个默认的过渡状态dtA = Stateflow.Transition (ch);dtA。目的地= sA);dtA。DestinationOClock = 0;xsource = sA.Position (1) + sA.Position (3) / 2;ysource = sA.Position (2) -30;dtA。SourceEndPoint = [xsource ysource];dtA。MidPoint = [xsource ysource+15]; % Add a default transition to state A1 dtA1 = Stateflow.Transition(ch); dtA1.Destination = sA1; dtA1.DestinationOClock = 0; xsource = sA1.Position(1)+sA1.Position(3)/2; ysource = sA1.Position(2)-30; dtA1.SourceEndPoint = [xsource ysource]; dtA1.MidPoint = [xsource ysource+15];
你的完整的图是这样的:
保存模型与新表到当前文件夹
myModel
:sfsave (m。的名字,'myModel');
这个命令使用了
的名字
模型对象的属性米
保存模型在一个新名字。
另请参阅
Stateflow.State
|Stateflow.Transition
|找到
|sfroot
|sfsave
|视图