Этот пример показывает, как использовать API проекта Simulink, чтобы автоматизировать задачи проекта, управляющие файлами, включая работу с измененными файлами, зависимостями, ярлыками и метками.
Откройте проект Корпуса и используйте simulinkproject, чтобы получить объект проекта управлять проектом в командной строке. Необходимо открыть проект в Проекте Simulink выполнить операции командной строки на проекте.
sldemo_slproject_airframe proj = simulinkproject
Creating sandbox for project.
Created example files in "C:\slexamples\airframe21"
Initializing: Project Path
Identifying shadowed project files
Running: C:\slexamples\airframe21\utilities\set_up_project.m
Building with 'MinGW64 Compiler C '.
MEX completed successfully.
proj =
ProjectManager with properties:
Name: 'Simulink Project Airframe Example'
Information: [1×1 slproject.Information]
Dependencies: [1×1 slproject.Dependencies]
Shortcuts: [1×9 slproject.Shortcut]
ProjectPath: [1×7 slproject.PathFolder]
ProjectReferences: [1×0 slproject.ProjectReference]
Categories: [1×1 slproject.Category]
Files: [1×33 slproject.ProjectFile]
RootFolder: 'C:\slexamples\airframe21'
Узнайте то, что можно сделать с проектом.
methods(proj)
Methods for class slproject.ProjectManager: addFile isLoaded addFolderIncludingChildFiles listModifiedFiles close refreshSourceControl createCategory reload export removeCategory findCategory removeFile findFile getFilesRequiredBy
После того, как вы получите объект проекта, можно исследовать свойства проекта, такие как файлы.
files = proj.Files
files =
1×33 ProjectFile array with properties:
Path
Labels
Revision
SourceControlStatus
Используйте индексацию, чтобы получить доступ к файлам в этом списке. Следующая команда получает номер документа 14. Каждый файл имеет свойства, описывающие его путь и присоединенные метки.
proj.Files(14)
ans =
ProjectFile with properties:
Path: 'C:\slexamples\airframe21\models\AnalogControl.mdl'
Labels: [1×1 slproject.Label]
Revision: '2'
SourceControlStatus: Unmodified
Исследуйте метки 14-го файла.
proj.Files(14).Labels
ans =
Label with properties:
File: 'C:\slexamples\airframe21\models\AnalogControl.mdl'
DataType: 'none'
Data: []
Name: 'Design'
CategoryName: 'Classification'
Получите конкретный файл по наименованию.
myfile = findFile(proj, 'models/AnalogControl.mdl')
myfile =
ProjectFile with properties:
Path: 'C:\slexamples\airframe21\models\AnalogControl.mdl'
Labels: [1×1 slproject.Label]
Revision: '2'
SourceControlStatus: Unmodified
Узнайте то, что можно сделать с файлом.
methods(myfile)
Methods for class slproject.ProjectFile: addLabel findLabel removeLabel
Измените образцовый файл проекта путем добавления произвольного блока.
open_system('AnalogControl') add_block('built-in/SubSystem', 'AnalogControl/test') save_system('AnalogControl')

Получите все измененные файлы в проекте. Наблюдайте два измененных файла. Сравните с представлением Modified Files в Проекте Simulink, где вы видите измененный образцовый файл и соответствующий.SimulinkProject файл определения.
modifiedfiles = listModifiedFiles(proj)
modifiedfiles =
1×2 ProjectFile array with properties:
Path
Labels
Revision
SourceControlStatus
Получите второй измененный файл. Заметьте, что свойство SourceControlStatus файла Изменяется. Точно так же listModifiedFiles возвращает любые файлы, которые добавляются, конфликтовал, удаленный, и т.д., которые обнаруживаются в представлении Modified Files в Проекте Simulink.
modifiedfiles(2)
ans =
ProjectFile with properties:
Path: 'C:\slexamples\airframe21\models\AnalogControl.mdl'
Labels: [1×1 slproject.Label]
Revision: '2'
SourceControlStatus: Modified
Обновите состояние системы контроля версий прежде, чем запросить отдельные файлы. Вы не должны делать перед использованием listModifiedFiles.
refreshSourceControl(proj)
Получите все файлы проекта с особым состоянием системы контроля версий. Например, получите файлы, которые являются Unmodified.
proj.Files(ismember([proj.Files.SourceControlStatus], matlab.sourcecontrol.Status.Unmodified))
ans =
1×32 ProjectFile array with properties:
Path
Labels
Revision
SourceControlStatus
Обновите зависимости от файла. Проект запускает анализ зависимостей, чтобы обновить известные зависимости между файлами проекта.
update(proj.Dependencies)
Исследуйте зависимости в объекте проекта. Свойство зависимостей объекта проекта содержит график зависимостей между файлами проекта в объекте диграфа MATLAB. Можно просмотреть тот же график анализа зависимостей в представлении Impact Проекта Simulink. Если вы хотите построить график графика, вместо того, чтобы работать с объектом диграфа, сохраните представление влияния в файл изображения.
proj.Dependencies
ans =
Dependencies with properties:
Graph: [1×1 digraph]
Получите зависимости от графика. Можно использовать методы диграфа, чтобы получить информацию из графика.
g = proj.Dependencies.Graph
g =
digraph with properties:
Edges: [24×1 table]
Nodes: [25×1 table]
Потребуйте файлов моделью.
requiredFiles = bfsearch(g, which('AnalogControl'))
requiredFiles =
3×1 cell array
'C:\slexamples\airframe21\models\AnalogControl.mdl'
'C:\slexamples\airframe21\data\controller.sldd'
'C:\slexamples\airframe21\data\buses.sldd'
Получите файлы верхнего уровня всех типов в графике.
top = g.Nodes.Name(indegree(g)==0);
Получите файлы верхнего уровня, которые имеют зависимости.
top = g.Nodes.Name(indegree(g)==0 & outdegree(g)>0)
top =
7×1 cell array
'C:\slexamples\airframe21\models\DigitalControl.slx'
'C:\slexamples\airframe21\models\LinearActuator.slx'
'C:\slexamples\airframe21\models\slproject_f14.slx'
'C:\slexamples\airframe21\tests\f14_airframe_test.m'
'C:\slexamples\airframe21\utilities\rebuild_s_functions.m'
'C:\slexamples\airframe21\utilities\set_up_project.m'
'C:\slexamples\airframe21\utilities\upgrade_project.m'
Найдите повлиявшими (или "в восходящем направлении") файлы путем создания транспонированного графика.
transposed = flipedge(g)
impacted = bfsearch(transposed, which('vertical_channel'))
transposed =
digraph with properties:
Edges: [24×1 table]
Nodes: [25×1 table]
impacted =
4×1 cell array
'C:\slexamples\airframe21\models\vertical_channel.slx'
'C:\slexamples\airframe21\models\f14_airframe.slx'
'C:\slexamples\airframe21\models\slproject_f14.slx'
'C:\slexamples\airframe21\tests\f14_airframe_test.m'
Найдите файлы повлиявшими словарем данных.
impacted2 = bfsearch(transposed, which('buses.sldd'))
impacted2 =
11×1 cell array
'C:\slexamples\airframe21\data\buses.sldd'
'C:\slexamples\airframe21\data\controller.sldd'
'C:\slexamples\airframe21\data\system_model.sldd'
'C:\slexamples\airframe21\tests\f14_airframe_test.m'
'C:\slexamples\airframe21\models\AnalogControl.mdl'
'C:\slexamples\airframe21\models\DigitalControl.slx'
'C:\slexamples\airframe21\models\f14_airframe.slx'
'C:\slexamples\airframe21\models\LinearActuator.slx'
'C:\slexamples\airframe21\models\NonLinearActuator.mdl'
'C:\slexamples\airframe21\models\slproject_f14.slx'
'C:\slexamples\airframe21\models\vertical_channel.slx'
Получите информацию о своих файлах, таких как количество зависимостей и висячих строк.
averageNumDependencies = mean(outdegree(g)); numberOfOrphans = sum(indegree(g)+outdegree(g)==0);
Если вы хотите внести изменения в иерархию модели, начиная с самого начала, найдите топологический порядок.
ordered = g.Nodes.Name(flip(toposort(g)));
Исследуйте свойство Shortcuts проекта. Вы можете автоматизировать запуск и завершить работу задач с помощью ярлыков, или использовать их, чтобы сохранить частые задачи и часто получали доступ к файлам.
shortcuts = proj.Shortcuts
shortcuts =
1×9 Shortcut array with properties:
File
RunAtStartup
RunAtShutdown
Исследуйте ярлык в массиве.
shortcuts(9)
ans =
Shortcut with properties:
File: 'C:\slexamples\airframe21\utilities\set_up_project.m'
RunAtStartup: 1
RunAtShutdown: 0
RunAtStartup свойство установлено в 1, таким образом, этот файл ярлыка собирается запуститься при запуске проекта. В командной строке можно просмотреть, но не изменить свойства RunAtStartup и RunAtShutdown. Чтобы установить эти свойства, используйте инструменты Simulink Project ярлыка. Получите путь к файлу ярлыка.
shortcuts(6).File
ans = 1×50 char array C:\slexamples\airframe21\reports\slproject_f14.pdf
Исследуйте все файлы в массиве ячеек ярлыков.
{shortcuts.File}'
ans =
9×1 cell array
'C:\slexamples\airframe21\batch_jobs\billOfMaterials.m'
'C:\slexamples\airframe21\batch_jobs\checkCodeProblems.m'
'C:\slexamples\airframe21\batch_jobs\runUnitTest.m'
'C:\slexamples\airframe21\batch_jobs\saveModelFiles.m'
'C:\slexamples\airframe21\models\slproject_f14.slx'
'C:\slexamples\airframe21\reports\slproject_f14.pdf'
'C:\slexamples\airframe21\utilities\clean_up_project.m'
'C:\slexamples\airframe21\utilities\rebuild_s_functions.m'
'C:\slexamples\airframe21\utilities\set_up_project.m'
Создайте логический массив, который показывает набор ярлыков, чтобы запуститься при запуске.
idx = [shortcuts.RunAtStartup]
idx = 1×9 logical array 0 0 0 0 0 0 0 0 1
Используйте логический массив, чтобы получить только ярлыки запуска.
startupshortcuts = shortcuts(idx)
startupshortcuts =
Shortcut with properties:
File: 'C:\slexamples\airframe21\utilities\set_up_project.m'
RunAtStartup: 1
RunAtShutdown: 0
Получите путь ярлыка запуска путем доступа к свойству File.
startupshortcuts.File
ans = 1×51 char array C:\slexamples\airframe21\utilities\set_up_project.m
Создайте новую категорию меток char типа. В Проекте Simulink новая категория Инженеров появляется в панели Меток.
createCategory(proj, 'Engineers', 'char')
ans =
Category with properties:
Name: 'Engineers'
SingleValued: 0
DataType: 'char'
LabelDefinitions: [1×0 slproject.LabelDefinition]
Узнайте то, что можно сделать с новой категорией.
category = findCategory(proj, 'Engineers');
methods(category)
Methods for class slproject.Category: createLabel findLabel removeLabel
Задайте новую метку в новой категории.
createLabel(category, 'Bob');
Получите определение метки.
ld = findLabel(category, 'Bob')
ld =
LabelDefinition with properties:
Name: 'Bob'
CategoryName: 'Engineers'
Присоедините метку к полученному файлу, myfile. Если вы выбираете файл в Проекте Simulink, вы видите эту метку в редакторе метки панель.
addLabel(myfile, 'Engineers', 'Bob');
Получите конкретную метку и присоедините данные к ней, например, некоторый текст.
label = findLabel(myfile, 'Engineers', 'Bob'); label.Data = 'Please assess'
label =
Label with properties:
File: 'C:\slexamples\airframe21\models\AnalogControl.mdl'
DataType: 'char'
Data: 'Please assess'
Name: 'Bob'
CategoryName: 'Engineers'
Можно задать переменную для данных метки, например:
mydata = label.Data
mydata = 1×13 char array Please assess
Создайте новую категорию метки с типом числовых данных.
createCategory(proj, 'Assessors', 'double'); category = findCategory(proj, 'Assessors'); createLabel(category, 'Sam');
Присоедините новую метку к заданному файлу и присвойте значение данных 2 метке.
myfile = proj.Files(14); addLabel(myfile, 'Assessors', 'Sam', 2)
ans =
Label with properties:
File: 'C:\slexamples\airframe21\models\AnalogControl.mdl'
DataType: 'double'
Data: 2
Name: 'Sam'
CategoryName: 'Assessors'
Закрытие проекта в командной строке совпадает с закрытием проекта с помощью инструмента Simulink Project. Например, проект осуществляет проверки объявления скриптов завершения работы для несохраненных моделей.
close(proj)
Running: C:\slexamples\airframe21\utilities\clean_up_project.m Closing Project Models Clearing: Project Path
Для получения дополнительной информации при использовании API, войдите: doc simulinkproject.
Чтобы автоматизировать запускают и завершают работу задач, видят, Автоматизируют Задачи Запуска.
addLabel | createCategory | createLabel | listModifiedFiles | refreshSourceControl | simulinkproject