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

В этом примере показано, как использовать 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\airframe"
       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\airframe"
         SimulinkCacheFolder: "C:\workSpace\examples\airframe\work\cache"
        ProjectStartupFolder: "C:\workSpace\examples\airframe"
       SimulinkCodeGenFolder: "C:\workSpace\examples\airframe\work\codegen"

Найдите команды проекта

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

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                  updateDependencies            
findFile                      
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\airframe\data\system_model.sldd"
                 Labels: [1×1 matlab.project.Label]
               Revision: ""
    SourceControlStatus: Unmodified

Исследуйте метки 10-го файла.

proj.Files(10).Labels
ans = 

  Label with properties:

            File: "C:\workSpace\examples\airframe\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\airframe\models\AnalogControl.slx"
                 Labels: [1×1 matlab.project.Label]
               Revision: ""
    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 в Проекте, где вы видите модифицированный файл модели и соответствующий файл определения проекта.

modifiedfiles = listModifiedFiles(proj)
modifiedfiles = 

  1×2 ProjectFile array with properties:

    Path
    Labels
    Revision
    SourceControlStatus

Получите второй модифицированный файл. Наблюдайте файл SourceControlStatus свойство Изменяется. Точно так же listModifiedFiles возвращает любые файлы, которые добавляются, конфликтовал, удаленный, и т.д., которые обнаруживаются в представлении Modified Files в Проекте.

modifiedfiles(2)
ans = 

  ProjectFile with properties:

                   Path: "C:\workSpace\examples\airframe\resources\project\uuid-690c4c18-ad11-4b55-af18-a925aee17dd8.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 содержит график зависимостей между файлами проекта, хранившими как объект диграфа 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\airframe\models\AnalogControl.slx'}
    {'C:\workSpace\examples\airframe\data\controller.sldd'    }
    {'C:\workSpace\examples\airframe\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\airframe\models\DigitalControl.slx'}
    {'C:\workSpace\examples\airframe\models\LinearActuator.slx'}
    {'C:\workSpace\examples\airframe\models\slproject_f14.slx' }
    {'C:\workSpace\examples\airframe\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\airframe\models\vertical_channel.slx'}
    {'C:\workSpace\examples\airframe\models\f14_airframe.slx'    }
    {'C:\workSpace\examples\airframe\models\slproject_f14.slx'   }
    {'C:\workSpace\examples\airframe\tests\f14_airframe_test.m'  }

Найдите файлы повлиявшими словарем данных.

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

  11×1 cell array

    {'C:\workSpace\examples\airframe\data\buses.sldd'             }
    {'C:\workSpace\examples\airframe\data\controller.sldd'        }
    {'C:\workSpace\examples\airframe\data\system_model.sldd'      }
    {'C:\workSpace\examples\airframe\tests\f14_airframe_test.m'   }
    {'C:\workSpace\examples\airframe\models\AnalogControl.slx'    }
    {'C:\workSpace\examples\airframe\models\DigitalControl.slx'   }
    {'C:\workSpace\examples\airframe\models\f14_airframe.slx'     }
    {'C:\workSpace\examples\airframe\models\LinearActuator.slx'   }
    {'C:\workSpace\examples\airframe\models\NonLinearActuator.slx'}
    {'C:\workSpace\examples\airframe\models\slproject_f14.slx'    }
    {'C:\workSpace\examples\airframe\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×7 Shortcut array with properties:

    Name
    Group
    File

Исследуйте ярлык в массиве.

shortcuts(7)
% Get the file path of a shortcut.
shortcuts(7).File
ans = 

  Shortcut with properties:

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


ans = 

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

Исследуйте все файлы в массиве ячеек ярлыков.

{shortcuts.File}'
ans =

  7×1 cell array

    {["C:\workSpace\examples\airframe\custom_tasks\analyzeModelFiles.m"]}
    {["C:\workSpace\examples\airframe\custom_tasks\billOfMaterials.m"  ]}
    {["C:\workSpace\examples\airframe\custom_tasks\checkCodeProblems.m"]}
    {["C:\workSpace\examples\airframe\custom_tasks\runUnitTest.m"      ]}
    {["C:\workSpace\examples\airframe\models\slproject_f14.slx"        ]}
    {["C:\workSpace\examples\airframe\reports\slproject_f14.pdf"       ]}
    {["C:\workSpace\examples\airframe\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"

Присоедините метку к полученному файлу, myfile. Если вы выбираете файл в Проекте, вы видите эту метку в редакторе метки панель.

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

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

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

  Label with properties:

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

Закройте проект

Закрытие проекта в командной строке совпадает с закрытием проекта с помощью инструмента Project. Например, проект осуществляет проверки объявления скриптов завершения работы для несохраненных моделей.

close(proj)

Больше информации

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

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

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

| | | |

Похожие темы