主要内容

使用脚本自动化项目任务

这个例子展示了如何使用项目API来自动化操作文件的项目任务,包括使用修改过的文件、依赖项、快捷键和标签。

在命令行获取项目

打开Airframe项目,并使用currentProject获取一个项目对象,以便在命令行操作项目。

项目= sldemo_slproject_airframe
使用“MinGW64 Compiler (C)”编译。墨西哥人成功完成。proj = Project with properties: Name: "Airframe Example" sourcecontrolinintegration: "Git" RepositoryLocation: "C:\workSpace\examples\repositories\airframe3" SourceControlMessages: ["Branch status: Normal"…]ReadOnly: 0 topllevel: 1 Dependencies: [1×1 digraph] Categories: [1×1 matlab.project. jar . jar]文件:[1×32 matlab.project。快捷方式:[1×7 matlab.project.]ProjectPath: [1×7 matlab.project.][1×0 matlab.project.]ProjectReference] StartupFiles: [1×0 string] ShutdownFiles: [1×0 string] DefinitionFilesType: FixedPathMultiFile说明:“这是一个示例项目。↵↵使用“项目快捷方式”工具条选项卡找到开始这个项目的方法。C:\workSpace\examples\airframe3" SimulinkCodeG金宝appenFolder: "C:\workSpace\examples\airframe3\work\codegen" ProjectStartupFolder: "C:\workSpace\examples\airframe3" SimulinkCacheFolder: "C:\workSpace\examples\airframe3\work\cache"

发现项目的命令

找出你可以用你的项目做什么。

方法(项目)
类matlab.project.Project的方法:addFile listtimpactedfiles addfolderinclingchildfiles listModifiedFiles addPath listRequiredFiles addReference refreshsourceccontrol addShortcut reload addShutdownFile removeCategory addStartupFile removeFile addprop removePath close removeReference createCategory removesshortcut export removeShutdownFile findCategory removeStartupFile findFile对于继承自handle的matlab.project.Project的方法调用"methods('handle')"。

检查项目文件

获得项目对象后,可以检查项目属性,如文件。

=项目文件。文件
files = 1×32 ProjectFile数组,带有属性:Path Labels Revision SourceControlStatus

使用索引来访问此列表中的文件。下面的命令获取文件编号10。每个文件都有描述其路径和附加标签的属性。

proj.Files (10)
"C:\workSpace\examples\airframe3\data\controller. "“1×1 matlab.project. sldd”标签:修订版本:"27b6d5ec735ea103997d4cf6fc7abe625665678b" SourceControlStatus:未修改

检查第10个文件的标签。

proj.Files .Labels (10)
文件:"C:\workSpace\examples\airframe3\data\controller. "sldd" DataType: 'none' Data: [] Name: "设计" CategoryName: "分类"

通过名称获取特定的文件。

myfile = findFile(项目,“模型/ AnalogControl.slx”
路径:"C:\workSpace\examples\airframe3\models\AnalogControl. "“1×1 matlab.project. slx”标签:修订版本:"27b6d5ec735ea103997d4cf6fc7abe625665678b" SourceControlStatus:未修改

找出您可以对该文件做什么。

方法(myfile)
类matlab.project.ProjectFile的方法:addLabel findLabel removeLabel

把修改的文件

通过添加任意块来修改项目模型文件。

open_system (“AnalogControl”) add_block (“内置/子系统”“AnalogControl /测试”) save_system (“AnalogControl”

获取项目中所有修改过的文件。观察两个修改后的文件。与Project中的Modified Files视图进行比较,在该视图中您可以看到一个修改过的模型文件,以及相应的项目定义文件。

modifiedfiles = listModifiedFiles(项目)
modifiedfiles = 1×2 ProjectFile数组,带有属性:Path Labels Revision SourceControlStatus

获取第二个修改后的文件。观察到的文件SourceControlStatus属性修改。同样的,listModifiedFiles返回显示在Project中Modified files视图中的任何添加的、冲突的、删除的文件。

modifiedfiles (2)
ans = ProjectFile with properties: "C:\workSpace\examples\airframe3\resources\project\uuid-08e31a06-2b0a-43a0-8031-deb3ab31ef15.xml" Revision: "" SourceControlStatus: Added .

在查询单个文件之前刷新源控制状态。使用前不需要做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 =项目。依赖关系
g = diggraph with properties: Edges: [21×1 table] Nodes: [21×1 table]

获取模型所需的文件。

requiredFiles = bfsearch(g, which(“AnalogControl”))
requiredFiles = 3×1 cell array {'C:\workSpace\examples\airframe3\models\AnalogControl。基金的}{“C: \ workSpace \ \ airframe3 \ data \控制器实例。sldd’}{“C: \ workSpace \ \ airframe3例子\ data \公交车。sldd '}

获取图中所有类型的顶级文件。

g.Nodes.Name(入度(g) = = 0);

获取具有依赖项的顶级文件。

g.Nodes.Name(入度(g) = = 0 &出度(g) > 0)
ans = 4×1 cell array {'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)“vertical_channel”))
{'C:\workSpace\examples\airframe3\models\vertical_channel. '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(转置,which(“buses.sldd”))
{'C:\workSpace\examples\airframe3\data\公共汽车。sldd’}{“C: \ workSpace \ \ 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 =意味着(出度(g));numberOfOrphans =总和(入度(g) +出度(g) = = 0);

如果您想要对模型层次结构进行更改,从下向上开始,请找到拓扑顺序。

命令= g.Nodes.Name(翻转(toposort (g)));

查询快捷键

检查项目的快捷方式属性。

快捷键=项目。快捷键
shortcuts = 1×7带有属性:Name Group File的快捷数组

检查数组中的快捷方式。

快捷键(7)
名称:"Rebuild Project's -functions"组:"Utility"文件:"C: workSpace\examples\airframe3\utilities\rebuild_s_functions.m"

获取快捷方式的文件路径。

快捷键(7)。文件
ans = " C: \ workSpace \ \ airframe3例子\工具\ rebuild_s_functions.m”

检查快捷键单元格数组中的所有文件。

{快捷方式。文件}’
ans = 7×1 cell array {"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。在“项目”中,新的“工程师”类别出现在“标签”窗格中。

createCategory(项目,“工程师”“字符”
名称:"Engineers" singlevalue: 0 DataType: "char" LabelDefinitions: [1×0 matlab.project.LabelDefinition]

找出你可以用这个新类别做什么。

类别= findCategory(项目,“工程师”);方法(类别)
类matlab.project.Category的方法:createLabel findLabel removeLabel

在新类别中定义一个新标签。

createLabel(类别,“鲍勃”);

获取一个标签定义。

ld = findLabel(类别,“鲍勃”
ld = LabelDefinition with properties:名称:"Bob" CategoryName: "Engineers"

给检索到的文件myfile附加一个标签。如果您选择Project中的文件,您可以在标签编辑器窗格中看到此标签。

addLabel (myfile“工程师”“鲍勃”);

获取一个特定的标签并将数据附加到其上,例如,一些文本。

标签= findLabel (myfile,“工程师”“鲍勃”);标签。Data =“请评估”
C:\workSpace\examples\airframe3\models\AnalogControl. label =带有属性的标签。slx" DataType: 'char' Data: 'Please assess' Name: "Bob" CategoryName: "Engineers"

你可以为标签数据指定一个变量,例如:

mydata =标签。数据
mydata = '请评估'

创建具有数字数据类型的新标签类别。

createCategory(项目,“评估”“双”);类别= findCategory(项目,“评估”);createLabel(类别,“山姆”);

将新标签附加到指定的文件并将数据值2赋给该标签。

myfile = proj.Files (14);addLabel (myfile“评估”“山姆”,2)
文件:"C:\workSpace\examples\airframe3\lib\timesthree. "tlc" Data type: 'double' Data: 2 Name: "Sam" CategoryName: "Assessors"

关闭项目

在命令行关闭项目与使用project工具关闭项目相同。例如,该项目运行关闭脚本,并检查未保存的模型。

关上(项目)

更多的信息

有关使用API的详细信息,请输入:医生currentProject

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

另请参阅

||||

相关的话题