Повысьте эффективность кода путем слияния нескольких интерполяции Используя блоки перед поиском

Можно использовать инструмент Model Transformer, чтобы осуществить рефакторинг шаблон моделирования, чтобы повысить эффективность сгенерированного кода. Трансформатор Модели идентифицирует и объединяет несколько блоков Interpolation Using Prelookup, которые имеют те же входные сигналы, соединенные от выходных параметров блоков Перед поиском в один блок Interpolation Using Prelookup.

Трансформатор Модели работает, если свойства блоков Interpolation Using Prelookup - то же самое за исключением Table data. Сокращение количества Интерполяции Используя блоки Перед поиском в модели сокращает количество переменных присвоений в коде, который повышает эффективность сгенерированного кода. Можно использовать приложение Трансформатора Модели или программируемые команды, чтобы осуществить рефакторинг модель.

Трансформатор Модели может заменить несколько Interpolation Using Prelookup что:

  • Соедините те же входные сигналы с блоками Перед поиском с тем же индексом и дробными параметрами

  • Соедините выходные сигналы с тем же блоком Multiport Switch

  • Имейте ту же спецификацию точки останова, значения и типы данных

  • Имейте те же параметры алгоритма

  • Имейте совпадающий тип данных для дробных параметров

Объедините интерполяцию Используя блоки перед поиском Используя приложение трансформатора модели

В этом примере показано, как использовать приложение Трансформатора Модели и API, чтобы идентифицировать избыточную Интерполяцию Используя блоки Перед поиском, и затем осуществить рефакторинг модель.

Модель mInterpolationOptim Предварительный поиск использования блокируется к входным сигналам к нескольким Интерполяциям Используя блоки Перед поиском. Выход этих блоков Интерполяции соединяется с блоком Multiport Switch.

В этом примере вы идентифицируете Интерполяцию Используя блоки Перед поиском, которые имеют право на преобразование и заменяют их на один блок Interpolation Using Prelookup и блоки Constant, соединенные с Многопортовым блоком switch.

  1. Откройте модель mInterpolationOptim. В MATLAB® командная строка, введите:

    addpath(fullfile(docroot,'toolbox','simulink','examples'))
    mInterpolationOptim

  2. Сохраните модель в свою рабочую папку.

  3. На вкладке Apps нажмите Model Transformer.

  4. В папке Transformations выберите Интерполяцию Замены Используя проверку Блоков Перед поиском.

  5. Выберите опцию Skip Interpolation-ND blocks in libraries from this transformation, чтобы не заменять Интерполяцию Используя блоки Перед поиском, которые соединяются с библиотекой.

  6. В поле Prefix of transformed model задайте префикс для пересмотренной модели.

  7. Нажмите Run This Check. Главная таблица Result содержит гиперссылки на блоки Interpolation Using Prelookup и соответствующие индексы порта блока Multiport Switch.

  8. Снимите флажки под Candidate Groups для групп, которые вы не хотите преобразовывать.

  9. Нажмите Refactor Model. Таблица Result содержит гиперссылку на новую модель. Таблица содержит гиперссылки на разделяемые блоки Interpolation Using Prelookup и соответствующие порты блока Multiport Switch. Инструмент также создает m2m_mInterpolationOptim папка, которая содержит новый gen_mInterpolationOptim.slx модель.

Два блока Prelookup Prelookup и Prelookup1 в gen_mInterpolationOptim.slx модель connect с одним блоком Interpolation Using Prelookup и блоками Константа соединяется с портом блока Multiport Switch, чтобы дать Table data как вход.

Объедините интерполяцию Используя блоки перед поиском программно

Чтобы использовать Трансформатор Модели программно, используйте:

  1. Сохраните модель в текущей рабочей директории.

    addpath(fullfile(docroot,'toolbox','simulink','examples'))
    mInterpolationOptim
  2. Идентифицировать кандидатов имело право на преобразование, используйте функциональный Simulink.ModelTransform.CommonSourceInterpolation.identifyCandidates создать объект transformResults.

    transformResults = Simulink.ModelTransform.CommonSourceInterpolation.identifyCandidates('mInterpolationOptim')
    
    transformResults =
    
      Results with properties:
    
        Candidates: [1×1 struct]

    transformResults объект имеет одно свойство, Candidates, это - структура с двумя полями, InterpolationPorts и SwitchPorts.

    
    transformResults.Candidates = 
    
      struct with fields:
    
            InterpolationPorts: [4×1 struct]
                   SwitchPorts: [4×1 struct]

  3. Просмотрите InterpolationPorts поле .

    transformResults.Candidates.InterpolationPorts = 
      4×1 struct array with fields:
    
        Block
        Port

    InterpolationPorts поле состоит из двух массивов, Block и Port. Точно так же SwitchPorts имеет те же свойства.

  4. Преобразуйте Candidates.InterpolationPorts и Candidates.SwitchPorts поля к таблицам.

    struct2table(transformResults.Candidates.InterpolationPorts)
    struct2table(transformResults.Candidates.SwitchPorts)
    ans =
      4×2 table
                            Block                                Port
        _____________________________________________            ____
        {'mInterpolationOptim/Interpolation↵Using Prelookup' }     0  
        {'mInterpolationOptim/Interpolation↵Using Prelookup1'}     0  
        {'mInterpolationOptim/Interpolation↵Using Prelookup2'}     0  
        {'mInterpolationOptim/Interpolation↵Using Prelookup3'}     0  
    
    
    ans =
      4×2 table
                    Block                           Port
        ______________________________              ____
        {'mInterpolationOptim/Multiport_Switch'}     1  
        {'mInterpolationOptim/Multiport_Switch'}     2  
        {'mInterpolationOptim/Multiport_Switch'}     3  
        {'mInterpolationOptim/Multiport_Switch'}     4  

    Используйте SwitchPorts видеть, какие блоки Interpolation Using Prelookup соединяются с который Многопортовый порт блока switch.

  5. Чтобы осуществить рефакторинг модель, используйте функциональный Simulink.ModelTransform.CommonSourceInterpolation.refactorModel. Эта функция использует объект transformResults от identifyCandidate функция.

    refactorResults = Simulink.ModelTransform.CommonSourceInterpolation.refactorModel(transformResults)
    
    refactorResults = 
    
      RefactorResults with properties:
    
               ModelName: 'mInterpolationOptim'
          ModelDirectory: ''
        TraceabilityInfo: [4×1 containers.Map]

    ModelName и ModelDirectory свойства refactorResults список объектов название и местоположение пересмотренной модели. TraceabilityInfo containers.Map возразите, что перечисляет информацию о трассировке блока.

Условия и ограничения

Трансформатор Модели не может заменить блоки Interpolation Using Prelookup если:

  • Блоки Interpolation Using Prelookup находятся в прокомментированных областях или неактивных вариантах.

  • Блоки Interpolation Using Prelookup маскируются.

  • Приложение Трансформатора Модели не заменяет блоки Interpolation Using Prelookup через контуры атомарных подсистем, моделей, на которые ссылаются или соединенных библиотекой блоков.

Похожие темы