exponenta event banner

Определение опции компиляции для пользовательских проверок помощника по модели

В зависимости от реализации модели и того, чего должна достичь пользовательская проверка, важно указать правильную опцию компиляции. Вы указываете опцию компиляции для функции определения проверки ModelAdvisor.Check путем установки CallbackContext следующим образом:

  • None указывает, что помощник по модели не должен компилировать модель перед анализом с помощью пользовательской проверки. None является настройкой по умолчанию CallbackContext собственность.

  • PostCompile указывает, что помощник по модели должен скомпилировать модель для обновления схемы модели, а затем смоделировать модель для выполнения пользовательской проверки. Мастер моделей не помечает проблемы моделирования, которые не удается решить во время создания кода, поскольку эти проблемы не влияют на моделируемую модель.

  • PostCompileForCodegen указывает, что мастер модели должен компилировать и обновлять схему модели специально для создания кода, но не моделирует модель. Эта опция используется для проверок Model Advisor, которые анализируют готовность модели к созданию кода.

Проверки, оценивающие готовность модели к созданию кода

Можно создать пользовательские проверки Model Advisor, которые позволяют модулю Model Advisor выявлять проблемы с настройкой создания кода в модели на более ранней стадии, чтобы избежать непредвиденных ошибок при создании кода. Например, в этой модели Red перечисление в BasicColors и OtherColors являются приемлемыми для использования в моделируемой модели. Однако в сгенерированном коде они Red перечисления приводят к конфликту перечисления. С помощью 'PostCompileForCodegen' , пользовательская проверка Model Advisor может определить этот тип проблемы с настройкой генерации кода.

'PostCompileForCodegen' компилирует модель для всех вариантов исполнения. Эта компиляция позволяет анализировать возможные проблемы, присутствующие в сгенерированном коде для активных и неактивных путей вариантов в модели. Пример приведен в разделе Создание пользовательской проверки для вычисления активных и неактивных путей исполнения из модели.

Создание пользовательской проверки для вычисления активных и неактивных путей исполнения из модели

В этом примере показано создание пользовательской проверки помощника по модели, которая оценивает активные и неактивные пути исполнения из модели системы исполнения. В этом примере представлены результаты работы Model Advisor, демонстрирующие, почему используется PostCompileForCodegen вместо PostCompile в качестве значения для ModelAdvisor.Check.CallbackContext свойство при создании кода из модели является конечной целью.

Обновление модели для анализа всех вариантов

Чтобы помощник по модели мог оценить активные и неактивные пути в системе исполнения, необходимо задать для параметра Время активации исполнения значение Code compile для блоков исполнения («Приемник исполнения», «Источник исполнения» и «Подсистема исполнения», «Модель исполнения»). Необходимо также установить для параметра конфигурации системного целевого файла значение ert.tlc.

Примечание.Выбор этой опции может повлиять на время выполнения и увеличить время, необходимое консультанту по модели для оценки модели.

  1. Открыть пример модели ex_check_compile_code_gen.

  2. Для каждого блока Variant Source откройте параметры блока и установите для параметра Variant activation time значение Code compile.

  3. Сохраните модель в локальной рабочей папке.

Создание sl_customization Функция

В рабочей папке создайте sl_customization и сохраните его.

function sl_customization(cm)

% register custom checks 
cm.addModelAdvisorCheckFcn(@defineModelAdvisorCheck);

% -----------------------------
% defines Model Advisor Checks
% -----------------------------
function defineModelAdvisorCheck
CheckSingleToBoolConversion;

sl_customization принимает объект диспетчера настройки. Объект диспетчера настройки включает в себя addModelAdvisorCheckFcn способ регистрации пользовательских чеков. Вход в этот метод является дескриптором функции (defineModelAdvisorCheck). Эта функция содержит вызов функции определения проверки, которая соответствует пользовательской проверке.

Откройте и проверьте функцию определения проверки.CheckSingleToBoolConversion.m:

function CheckSingleToBoolConversion
mdladvRoot = ModelAdvisor.Root;

rec = ModelAdvisor.Check('exampleCheck1');
rec.Title = 'Check to identify Single to Bool conversions';
rec.TitleID = 'custom.dtcCheck.CompileForCodegen1';
rec.TitleTips = 'Custom check to identify Single to Bool conversions';
rec.setCallbackFcn(@DetailStyleCallback,'None','DetailStyle');
rec.CallbackContext = 'PostCompileForCodegen'; % Compile for Code Generation

mdladvRoot.publish(rec, 'Demo');

end
    
function DetailStyleCallback(system, CheckObj)

mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system);

violationBlks = find_system(system, 'BlockType', 'DataTypeConversion');
for ii = numel(violationBlks):-1:1
    dtcBlk = violationBlks{ii};
    compDataTypes = get_param(dtcBlk, 'CompiledPortDataTypes');
    if isempty(compDataTypes)
        violationBlks(ii) = [];
        continue;
    end
    if ~(strcmp(compDataTypes.Inport, 'single') && strcmp(compDataTypes.Outport, 'boolean'))
        violationBlks(ii) = [];
        continue;
    end
end

if isempty(violationBlks)
    ElementResults = ModelAdvisor.ResultDetail;
    ElementResults(1,numel(violationBlks))=ModelAdvisor.ResultDetail;
    ElementResults.IsInformer = true;
    ElementResults.Description = 'This check looks for data type conversion blocks that convert single data to boolean data';
    ElementResults.Status = 'Check has passed. No data type conversion blocks that convert single data to boolean were found.';
    mdladvObj.setCheckResultStatus(true);
else
    ElementResults(1,numel(violationBlks))=ModelAdvisor.ResultDetail;
    for i=1:numel(ElementResults)
        ElementResults(i).setData(violationBlks{i});
        ElementResults(i).Description = 'This check looks for data type conversion blocks that convert single data to boolean data';
        ElementResults(i).Status = 'Check has failed. The following data type conversion blocks convert single data to boolean:';
        ElementResults(i).RecAction =  'Modify the model to avoid converting data type from single to boolean';
    end
    mdladvObj.setCheckResultStatus(false);
    mdladvObj.setActionEnable(true);
end
CheckObj.setResultDetails(ElementResults);
end

Дополнительные сведения о создании пользовательских проверок см. в разделе Определение собственных пользовательских проверок помощника по модели.

Открыть мастер модели и выполнить пользовательскую проверку

Перед открытием Model Advisor и запуском пользовательской проверки необходимо обновить кэш сведений о проверке Model Advisor. В окне команд MATLAB введите:

Advisor.Manager.refresh_customizations

Чтобы открыть Model Advisor и выполнить пользовательскую проверку, выполните следующие действия.

  1. Откройте сохраненную модель.

  2. На вкладке Моделирование (Modeling) выберите Помощник по модели (Model Advisor). Откроется диалоговое окно Выбор системы - Консультант по модели (System Selector - Model Advisor). Нажмите кнопку OK. Откроется окно Model Advisor.

  3. На левой панели выберите По продукту > Демонстрация > Проверить, чтобы определить преобразование Single to Bool. Если папка По продукту (By Product) не отображается в окне Мастер модели (Model Advisor), выберите Настройки (Settings) > Настройки (Preferences) > Показать по папке продукта (Show By Product Folder).

  4. Щелкните правой кнопкой мыши по чеку и выберите Выполнить эту проверку. Помощник по модели компилирует модель и выполняет проверку. Помощник по модели обновляет схему модели. Неактивные пути вариантов отображаются затемненными.

Просмотр результатов работы помощника по модели

Просмотрите результаты анализа проверки в Model Advisor. Щелкните гиперссылки, чтобы открыть нарушающий блок в редакторе модели.

В этом примере, поскольку вы определили опцию компиляции в sl_customization.m файл как

rec.CallbackContext = 'PostCompileForCodegen';

Мастер модели генерирует предупреждения для блоков преобразования типов данных в активных путях и неактивных путях исполнительных систем.

Если была определена опция компиляции в sl_customization.m файл как

rec.CallbackContext = 'PostCompile';

результаты включают только блоки преобразования типов данных в активном пути.

См. также

|

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