exponenta event banner

Автоматизация задач проекта с помощью сценариев

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

Получить проект в командной строке

Откройте проект Планер и используйте currentProject, чтобы получить объект проекта для управления проектом в командной строке.

sldemo_slproject_airframe
proj = currentProject
Building with 'MinGW64 Compiler (C)'.
MEX completed successfully.

proj = 

  Project with properties:

                        Name: "Airframe Example"
    SourceControlIntegration: "Git"
          RepositoryLocation: "C:\workSpace\examples\repositories\airframe1"
       SourceControlMessages: [1×3 string]
                    ReadOnly: 0
                    TopLevel: 1
                Dependencies: [1×1 digraph]
                  Categories: [1×1 matlab.project.Category]
                       Files: [1×31 matlab.project.ProjectFile]
                   Shortcuts: [1×7 matlab.project.Shortcut]
                 ProjectPath: [1×7 matlab.project.PathFolder]
           ProjectReferences: [1×0 matlab.project.ProjectReference]
                StartupFiles: [1×0 string]
               ShutdownFiles: [1×0 string]
                 Description: "This is an example project.↵↵Use the "Project Shortcuts" toolstrip tab to find ways of getting started with this project."
                  RootFolder: "C:\workSpace\examples\airframe1"
       SimulinkCodeGenFolder: "C:\workSpace\examples\airframe1\work\codegen"
        ProjectStartupFolder: "C:\workSpace\examples\airframe1"
         SimulinkCacheFolder: "C:\workSpace\examples\airframe1\work\cache"

Поиск команд проекта

Узнайте, что можно сделать с проектом.

methods(proj)
Methods for class matlab.project.Project:

addFile                       listModifiedFiles             
addFolderIncludingChildFiles  listRequiredFiles             
addPath                       refreshSourceControl          
addReference                  reload                        
addShortcut                   removeCategory                
addShutdownFile               removeFile                    
addStartupFile                removePath                    
addprop                       removeReference               
close                         removeShortcut                
createCategory                removeShutdownFile            
export                        removeStartupFile             
findCategory                  runChecks                     
findFile                      updateDependencies            
isLoaded                      

Call "methods('handle')" for methods of matlab.project.Project inherited from handle.

Проверка файлов проекта

После получения объекта проекта можно проверить свойства проекта, такие как файлы.

files = proj.Files
files = 

  1×31 ProjectFile array with properties:

    Path
    Labels
    Revision
    SourceControlStatus

Используйте индексирование для доступа к файлам в этом списке. Следующая команда получает файл номер 10. Каждый файл имеет свойства, описывающие его путь и прикрепленные метки.

proj.Files(10)
ans = 

  ProjectFile with properties:

                   Path: "C:\workSpace\examples\airframe1\data\system_model.sldd"
                 Labels: [1×1 matlab.project.Label]
               Revision: "3e2de2b2a43515259c0843aacf330775d8fda493"
    SourceControlStatus: Unmodified

Проверьте метки 10-го файла.

proj.Files(10).Labels
ans = 

  Label with properties:

            File: "C:\workSpace\examples\airframe1\data\system_model.sldd"
        DataType: 'none'
            Data: []
            Name: "Design"
    CategoryName: "Classification"

Получить конкретный файл по имени.

myfile = findFile(proj, 'models/AnalogControl.slx')
myfile = 

  ProjectFile with properties:

                   Path: "C:\workSpace\examples\airframe1\models\AnalogControl.slx"
                 Labels: [1×1 matlab.project.Label]
               Revision: "3e2de2b2a43515259c0843aacf330775d8fda493"
    SourceControlStatus: Unmodified

Узнайте, что можно сделать с файлом.

methods(myfile)
Methods for class matlab.project.ProjectFile:

addLabel     findLabel    removeLabel  

Получить измененные файлы

Измените файл модели проекта путем добавления произвольного блока.

open_system('AnalogControl')
add_block('built-in/SubSystem', 'AnalogControl/test')
save_system('AnalogControl')

Получение всех измененных файлов в проекте. Обратите внимание на два измененных файла. Сравните с видом Измененные файлы (Modified Files) в окне Проект (Project), где можно просмотреть измененный файл модели и соответствующий файл определения проекта.

modifiedfiles = listModifiedFiles(proj)
modifiedfiles = 

  1×2 ProjectFile array with properties:

    Path
    Labels
    Revision
    SourceControlStatus

Получить второй измененный файл. Наблюдать за файлом SourceControlStatus свойство имеет значение Modified. Аналогично, listModifiedFiles возвращает все добавленные, конфликтующие, удаленные и т.д. файлы, отображаемые в представлении «Измененные файлы» в Project.

modifiedfiles(2)
ans = 

  ProjectFile with properties:

                   Path: "C:\workSpace\examples\airframe1\resources\project\uuid-0988ac9d-5add-4cac-83a5-6a4af6c0cf34.xml"
               Revision: ""
    SourceControlStatus: Added

Перед запросом отдельных файлов обновите состояние системы управления версиями. Вам не нужно делать перед использованием listModifiedFiles .

refreshSourceControl(proj)

Получение всех файлов проекта с определенным состоянием системы управления версиями. Например, получить файлы, которые Unmodified .

proj.Files(ismember([proj.Files.SourceControlStatus], matlab.sourcecontrol.Status.Unmodified))
ans = 

  1×22 ProjectFile array with properties:

    Path
    Labels
    Revision
    SourceControlStatus

Получить зависимости от файлов

Обновите зависимости файлов. Проект выполняет анализ зависимостей для обновления известных зависимостей между файлами проекта.

updateDependencies(proj)

Получение списка зависимостей в проекте планера. Свойство Dependencies содержит график зависимостей между файлами проекта, сохраненный как объект digraph MATLAB.

g = proj.Dependencies
g = 

  digraph with properties:

    Edges: [21×1 table]
    Nodes: [21×1 table]

Получение файлов, требуемых для модели.

requiredFiles = bfsearch(g, which('AnalogControl'))
requiredFiles =

  3×1 cell array

    {'C:\workSpace\examples\airframe1\models\AnalogControl.slx'}
    {'C:\workSpace\examples\airframe1\data\controller.sldd'    }
    {'C:\workSpace\examples\airframe1\data\buses.sldd'         }

Получите файлы верхнего уровня всех типов на графике.

g.Nodes.Name(indegree(g)==0);

Получение файлов верхнего уровня с зависимостями.

g.Nodes.Name(indegree(g)==0 & outdegree(g)>0)
ans =

  4×1 cell array

    {'C:\workSpace\examples\airframe1\models\DigitalControl.slx'}
    {'C:\workSpace\examples\airframe1\models\LinearActuator.slx'}
    {'C:\workSpace\examples\airframe1\models\slproject_f14.slx' }
    {'C:\workSpace\examples\airframe1\tests\f14_airframe_test.m'}

Поиск затронутых (или «восходящих») файлов путем создания транспонированного графа.

transposed   = flipedge(g)
impacted = bfsearch(transposed, which('vertical_channel'))
transposed = 

  digraph with properties:

    Edges: [21×1 table]
    Nodes: [21×1 table]


impacted =

  4×1 cell array

    {'C:\workSpace\examples\airframe1\models\vertical_channel.slx'}
    {'C:\workSpace\examples\airframe1\models\f14_airframe.slx'    }
    {'C:\workSpace\examples\airframe1\models\slproject_f14.slx'   }
    {'C:\workSpace\examples\airframe1\tests\f14_airframe_test.m'  }

Поиск файлов, на которые влияет словарь данных.

impacted2 = bfsearch(transposed, which('buses.sldd'))
impacted2 =

  11×1 cell array

    {'C:\workSpace\examples\airframe1\data\buses.sldd'             }
    {'C:\workSpace\examples\airframe1\data\controller.sldd'        }
    {'C:\workSpace\examples\airframe1\data\system_model.sldd'      }
    {'C:\workSpace\examples\airframe1\tests\f14_airframe_test.m'   }
    {'C:\workSpace\examples\airframe1\models\AnalogControl.slx'    }
    {'C:\workSpace\examples\airframe1\models\DigitalControl.slx'   }
    {'C:\workSpace\examples\airframe1\models\f14_airframe.slx'     }
    {'C:\workSpace\examples\airframe1\models\LinearActuator.slx'   }
    {'C:\workSpace\examples\airframe1\models\NonLinearActuator.slx'}
    {'C:\workSpace\examples\airframe1\models\slproject_f14.slx'    }
    {'C:\workSpace\examples\airframe1\models\vertical_channel.slx' }

Получение информации о файлах, например, о количестве зависимостей и сирот.

averageNumDependencies = mean(outdegree(g));
numberOfOrphans = sum(indegree(g)+outdegree(g)==0);

Если требуется внести изменения в иерархию модели, начиная снизу вверх, найдите топологический порядок.

ordered = g.Nodes.Name(flip(toposort(g)));

Запрос ярлыков

Проверьте свойство проекта «Ярлыки».

shortcuts = proj.Shortcuts
shortcuts = 

  1×7 Shortcut array with properties:

    Name
    Group
    File

Проверьте ярлык в массиве.

shortcuts(7)
ans = 

  Shortcut with properties:

     Name: "Rebuild Project's S-functions"
    Group: "Utility"
     File: "C:\workSpace\examples\airframe1\utilities\rebuild_s_functions.m"

Получение пути к файлу ярлыка.

shortcuts(7).File
ans = 

    "C:\workSpace\examples\airframe1\utilities\rebuild_s_functions.m"

Проверьте все файлы в массиве ячеек ярлыков.

{shortcuts.File}'
ans =

  7×1 cell array

    {["C:\workSpace\examples\airframe1\custom_tasks\analyzeModelFiles.m"]}
    {["C:\workSpace\examples\airframe1\custom_tasks\billOfMaterials.m"  ]}
    {["C:\workSpace\examples\airframe1\custom_tasks\checkCodeProblems.m"]}
    {["C:\workSpace\examples\airframe1\custom_tasks\runUnitTest.m"      ]}
    {["C:\workSpace\examples\airframe1\models\slproject_f14.slx"        ]}
    {["C:\workSpace\examples\airframe1\reports\slproject_f14.pdf"       ]}
    {["C:\workSpace\examples\airframe1\utilities\rebuild_s_functions.m" ]}

Файлы меток

Создайте новую категорию меток типа char. В проекте на панели «Метки» появится новая категория «Инженеры».

createCategory(proj, 'Engineers', 'char')
ans = 

  Category with properties:

                Name: "Engineers"
        SingleValued: 0
            DataType: "char"
    LabelDefinitions: [1×0 matlab.project.LabelDefinition]

Узнайте, что можно сделать с новой категорией.

category = findCategory(proj, 'Engineers');
methods(category)
Methods for class matlab.project.Category:

createLabel  findLabel    removeLabel  

Определите новую метку в новой категории.

createLabel(category, 'Bob');

Получение определения метки.

ld = findLabel(category, 'Bob')
ld = 

  LabelDefinition with properties:

            Name: "Bob"
    CategoryName: "Engineers"

Прикрепите метку к полученному файлу, файл. При выборе файла в окне «Проект» эта метка отображается на панели редактора меток.

addLabel(myfile, 'Engineers', 'Bob');

Получите определенную метку и прикрепите к ней данные, например, текст.

label = findLabel(myfile, 'Engineers', 'Bob');
label.Data = 'Please assess'
label = 

  Label with properties:

            File: "C:\workSpace\examples\airframe1\models\AnalogControl.slx"
        DataType: 'char'
            Data: 'Please assess'
            Name: "Bob"
    CategoryName: "Engineers"

Можно указать переменную для данных метки, например:

mydata = label.Data
mydata =

    '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:\workSpace\examples\airframe1\models"
        DataType: 'double'
            Data: 2
            Name: "Sam"
    CategoryName: "Assessors"

Закрыть проект

Закрытие проекта в командной строке аналогично закрытию проекта с помощью инструмента «Проект». Например, в проекте выполняются рекламные проверки сценариев завершения работы для несохраненных моделей.

close(proj)

Дополнительные сведения

Для получения дополнительной информации об использовании API введите: doc currentProject.

Сведения об автоматизации задач запуска и завершения работы см. в разделе Автоматизация задач запуска.

См. также

| | | |

Связанные темы