主要内容

使用脚本自动化项目任务

这个例子展示了如何使用项目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

若要自动启动和关闭任务,请参见自动启动任务

另请参阅

||||

相关的话题