Этот пример показывает, как использовать 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