使用脚本自动化项目任务
这个例子展示了如何使用项目API来自动化操作文件的项目任务,包括处理已修改的文件、依赖项、快捷方式和标签。
在命令行获取项目
打开Airframe项目,使用currentProject获取一个项目对象,以便在命令行中操作该项目。
Proj = sldemo_slproject_airframe
使用“MinGW64编译器(C)”构建。MEX完成成功。proj =项目属性:名称:“机身示例”sourcecontrolinintegration:“Git”RepositoryLocation:“C:\workSpace\examples\repositories\airframe3”SourceControlMessages:[“分支状态:正常”…]ReadOnly: 0 TopLevel: 1依赖项:[1×1 digraph]类别:[1×1 matlab.project。文件:[1×32 matlab.project.]ProjectFile]快捷方式:[1×7 matlab.project。快捷方式]ProjectPath: [1×7 matlab.project。]项目引用:[1×0 matlab.project. path]ProjectReference] StartupFiles: [1×0 string] ShutdownFiles: [1×0 string] DefinitionFilesType: FixedPathMultiFile描述:“这是一个示例项目。(()使用“项目快捷方式”工具条选项卡找到开始此项目的方法。”RootFolder: "C:\workSpace\examples\airframe3\w金宝appork\codegen" ProjectStartupFolder: "C:\workSpace\examples\airframe3" SimulinkCacheFolder: "C:\workSpace\examples\airframe3\work\cache"
查找项目命令
找出你可以用你的项目做什么。
方法(项目)
类的方法:addFile listImpactedFiles addfolderinclingchildfiles listModifiedFiles addPath listRequiredFiles addReference refreshsourcectrol addShortcut reload addShutdownFile removeCategory addStartupFile removeFile addprop removePath close removeReference createCategory removeShortcut export removeShutdownFile findCategory removeStartupFile findFile runChecks isLoaded updateDependencies listAllProjectReferences调用"methods('handle')"用于继承自handle的matlab.project.Project的方法。
检查项目文件
获得项目对象后,可以检查项目属性,例如文件。
Files = proj。文件
files = 1×32 ProjectFile数组,属性为:Path Labels Revision SourceControlStatus
使用索引访问此列表中的文件。下面的命令获取文件号10。每个文件都有描述其路径和附加标签的属性。
proj.Files (10)
路径:“C:\workSpace\examples\airframe3\data\controller.”sldd"标签:[1×1 matlab.project。Label] Revision: "27b6d5ec735ea103997d4cf6fc7abe625665678b" SourceControlStatus: Unmodified
检查第10个文件的标签。
proj.Files .Labels (10)
ans =标签属性:文件:“C:\workSpace\examples\airframe3\data\控制器。sldd" DataType: 'none' Data: [] Name: "设计" CategoryName: "分类"
按名称获取特定文件。
myfile = findFile(proj,“模型/ AnalogControl.slx”)
myfile = ProjectFile与属性:路径:"C:\workSpace\examples\airframe3\models\AnalogControl. "slx"标签:[1×1 matlab.project.]Label] Revision: "27b6d5ec735ea103997d4cf6fc7abe625665678b" SourceControlStatus: Unmodified
看看你能对这个文件做些什么。
方法(myfile)
类matlab.project.ProjectFile的方法:addLabel findLabel removeLabel
获取修改过的文件
通过添加任意块来修改项目模型文件。
open_system (“AnalogControl”) add_block (“内置/子系统”,“AnalogControl /测试”) save_system (“AnalogControl”)
获取项目中所有修改过的文件。观察两个修改后的文件。与Project中的Modified Files视图进行比较,在那里您可以看到一个修改过的模型文件,以及相应的项目定义文件。
modifiedfiles = listModifiedFiles(proj)
modifiedfiles = 1×2 ProjectFile数组,属性为:Path Labels Revision SourceControlStatus
获取第二个修改过的文件。观察文件SourceControlStatus
属性为“修改”。同样的,listModifiedFiles
返回在Project中的Modified files视图中显示的任何被添加、冲突、删除等的文件。
modifiedfiles (2)
ans = ProjectFile与属性:路径:"C:\workSpace\examples\airframe3\resources\project\ uid-08e31a06-2b0a-43a0-8031-deb3ab31ef15.xml"修订:"" SourceControlStatus:已添加
在查询单个文件之前,请刷新源代码控制状态。使用前不需要这样做listModifiedFiles
.
refreshSourceControl(项目)
获取具有特定源代码控制状态的所有项目文件。例如,获取的文件未修改的
.
proj.Files (ismember ([proj.Files。SourceControlStatus], matlab.sourcecontrol.Status.Unmodified))
ans = 1×23 ProjectFile数组,属性为:Path Labels Revision SourceControlStatus
获取文件依赖关系
更新文件依赖项。项目运行依赖项分析来更新项目文件之间的已知依赖项。
updateDependencies(项目)
获取Airframe项目中的依赖项列表。Dependencies属性包含项目文件之间的依赖关系图,存储为MATLAB有向图对象。
G = proj。依赖关系
g =有向图属性:边:[21×1 table]节点:[21×1 table]
获取模型所需的文件。
requiredFiles = bfsearch(g, which(“AnalogControl”))
requiredFiles = 3×1单元格数组{'C:\workSpace\examples\airframe3\models\AnalogControl。基金的}{“C: \ workSpace \ \ airframe3 \ data \控制器实例。sldd'} {'C:\workSpace\examples\airframe3\data\总线。sldd '}
获取图中所有类型的顶级文件。
g.Nodes.Name(入度(g) = = 0);
获取具有依赖关系的顶级文件。
g. nodes . name (indegree(g)==0 & outdegree(g)>0)
ans = 4×1单元格数组{'C:\workSpace\examples\airframe3\models\DigitalControl。基金的}{“C: \ workSpace \ \ airframe3 \ \ LinearActuator模型实例。基金的}{“C: \ workSpace \ \ airframe3 \ \ slproject_f14模型实例。基金的}{'C:\workSpace\examples\airframe3\tests\f14_airframe_test.m'}
通过创建转置图来查找受影响的(或“上游”)文件。
转置= flipedge(g) affected = bfsearch(转置,其中(“vertical_channel”))
转置=有向图与属性:边:[21×1表]节点:[21×1表]受影响= 4×1单元格阵列{'C:\workSpace\examples\airframe3\models\vertical_channel。基金的}{“C: \ workSpace \ \ airframe3 \ \ f14_airframe模型实例。基金的}{'C:\workSpace\examples\airframe3\models\slproject_f14.slx' } {'C:\workSpace\examples\airframe3\tests\f14_airframe_test.m' }
查找受数据字典影响的文件。
Impacted2 = bfsearch(转置,其中(“buses.sldd”))
impacted2 = 11×1 cell array {'C:\workSpace\examples\airframe3\data\总线。C:\workSpace\examples\airframe3\data\控制器。sldd '}{'C:\workSpace\examples\airframe3\data\system_model.sldd' } {'C:\workSpace\examples\airframe3\tests\f14_airframe_test.m' } {'C:\workSpace\examples\airframe3\models\AnalogControl.slx' } {'C:\workSpace\examples\airframe3\models\DigitalControl.slx' } {'C:\workSpace\examples\airframe3\models\LinearActuator.slx' } {'C:\workSpace\examples\airframe3\models\NonLinearActuator.slx'} {'C:\workSpace\examples\airframe3\models\f14_airframe.slx' } {'C:\workSpace\examples\airframe3\models\slproject_f14.slx' } {'C:\workSpace\examples\airframe3\models\vertical_channel.slx' }
获取有关文件的信息,例如依赖项和孤儿的数量。
averageNumDependencies = mean(outdegree(g));numberOfOrphans = sum(度(g)+度(g)==0);
如果您想对模型层次结构进行更改,从下往上开始,找到拓扑顺序。
ordered = g. nodes . name (flip(topsort (g)));
查询快捷键
检查项目的Shortcuts属性。
捷径= proj。快捷键
shortcuts = 1×7具有属性的快捷方式数组:名称组文件
检查数组中的快捷方式。
快捷键(7)
ans =快捷方式与属性:名称:“重建项目的s功能”组:“实用工具”文件:“C:\workSpace\examples\airframe3\utilities\rebuild_s_functions.m”
获取快捷方式的文件路径。
快捷键(7)。文件
ans = "C:\workSpace\examples\airframe3\utilities\rebuild_s_functions.m"
检查快捷方式单元格数组中的所有文件。
{快捷方式。文件}’
ans = 7×1单元格数组{["C:\workSpace\examples\airframe3\custom_tasks\analyzeModelFiles。m”]}{[" C: \ workSpace \ \ airframe3 \ custom_tasks \ billOfMaterials例子。m”)}{["C:\workSpace\examples\airframe3\custom_tasks\checkCodeProblems.m"]} {["C:\workSpace\examples\airframe3\custom_tasks\runUnitTest.m" ]} {["C:\workSpace\examples\airframe3\models\slproject_f14.slx" ]} {["C:\workSpace\examples\airframe3\reports\slproject_f14.pdf" ]} {["C:\workSpace\examples\airframe3\utilities\rebuild_s_functions.m" ]}
标签文件
创建一个新的标签类别,类型为char。在Project中,新的Engineers类别出现在Labels窗格中。
createCategory(项目,“工程师”,“字符”)
ans =类别与属性:名称:“工程师”singlevalue: 0数据类型:“char”LabelDefinitions: [1×0 matlab.project.LabelDefinition]
找出你可以用这个新类别做什么。
类别= findCategory(proj,“工程师”);方法(类别)
类的方法:createLabel findLabel removeLabel
在新类别中定义一个新标签。
createLabel(类别,“鲍勃”);
获取标签定义。
ld = findLabel(类别,“鲍勃”)
ld = LabelDefinition with properties: Name: "Bob" CategoryName: "Engineers"
为检索到的文件myfile附加一个标签。如果在Project中选择该文件,则可以在标签编辑器窗格中看到该标签。
addLabel (myfile“工程师”,“鲍勃”);
获取一个特定的标签并向其附加数据,例如一些文本。
标签= findLabel(myfile,“工程师”,“鲍勃”);标签。Data =“请评估”
标签=标签属性:文件:"C:\workSpace\examples\airframe3\models\AnalogControl. "slx"数据类型:'char'数据:'请评估'名称:"Bob"类别名称:"工程师"
你可以为标签数据指定一个变量,例如:
Mydata =标签。数据
mydata = '请评估'
创建一个数字数据类型的新标签类别。
createCategory(项目,“评估”,“双”);类别= findCategory(proj,“评估”);createLabel(类别,“山姆”);
将新标签附加到指定的文件,并将数据值2赋给标签。
myfile = projproject . files (14);addLabel (myfile“评估”,“山姆”, 2)
ans =标签与属性:文件:"C:\workSpace\examples\airframe3\lib\timesthree. "tlc" DataType: 'double'数据:2名称:“Sam”类别名称:“Assessors”
关闭项目
在命令行中关闭项目与使用项目工具关闭项目是相同的。例如,项目运行关闭脚本并检查未保存的模型。
关上(项目)
更多的信息
有关使用API的更多详细信息,请输入:医生currentProject
.
若要自动启动和关闭任务,请参见自动启动任务.
另请参阅
currentProject
|listModifiedFiles
|refreshSourceControl
|addLabel
|createLabel