Можно использовать инструмент 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.
Откройте модель mInterpolationOptim
. В MATLAB® командная строка, введите:
addpath(fullfile(docroot,'toolbox','simulink','examples')) mInterpolationOptim
Сохраните модель в свою рабочую папку.
На вкладке Apps нажмите Model Transformer.
В папке Transformations выберите Интерполяцию Замены Используя проверку Блоков Перед поиском.
Выберите опцию Skip Interpolation-ND blocks in libraries from this transformation, чтобы не заменять Интерполяцию Используя блоки Перед поиском, которые соединяются с библиотекой.
В поле Prefix of transformed model задайте префикс для пересмотренной модели.
Нажмите Run This Check. Главная таблица Result содержит гиперссылки на блоки Interpolation Using Prelookup и соответствующие индексы порта блока Multiport Switch.
Снимите флажки под Candidate Groups для групп, которые вы не хотите преобразовывать.
Нажмите 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 как вход.
Чтобы использовать Трансформатор Модели программно, используйте:
Simulink.ModelTransform.CommonSourceInterpolation.identifyCandidates
идентифицировать кандидатов на преобразование
Simulink.ModelTransform.CommonSourceInterpolation.refactorModel
осуществлять рефакторинг модель
Сохраните модель в текущей рабочей директории.
addpath(fullfile(docroot,'toolbox','simulink','examples')) mInterpolationOptim
Идентифицировать кандидатов имело право на преобразование, используйте функциональный 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]
Просмотрите InterpolationPorts
поле .
transformResults.Candidates.InterpolationPorts =
4×1 struct array with fields: Block Port
InterpolationPorts
поле состоит из двух массивов, Block
и Port
. Точно так же SwitchPorts
имеет те же свойства.
Преобразуйте 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.
Чтобы осуществить рефакторинг модель, используйте функциональный 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 через контуры атомарных подсистем, моделей, на которые ссылаются или соединенных библиотекой блоков.