Автоматизируйте задачи проекта Simulink Используя скрипты

Этот пример показывает, как использовать API проекта Simulink, чтобы автоматизировать задачи проекта, управляющие файлами, включая работу с измененными файлами, зависимостями, ярлыками и метками.

Получите проект 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.

Чтобы автоматизировать запускают и завершают работу задач, видят, Автоматизируют Задачи Запуска.

Смотрите также

| | | | |

Похожие темы