Задайте опцию компиляции для пользовательских проверок Model Advisor

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

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

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

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

Проверки, которые Оценивают Готовность Генерации кода Модели

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

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

Создайте собственную проверку, чтобы оценить активные и неактивные различные пути из модели

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

Модель обновления, чтобы анализировать все варианты

Для Model Advisor, чтобы оценить активные и неактивные пути в вариантной системе, необходимо установить Различный параметр времени активации на Code compile для различных блоков (Различный Приемник, Различный Источник, и Различная Подсистема, Различная Модель).

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

  1. Откройте модель ex_check_compile_code_gen в качестве примера.

  2. Для каждого Различного Исходного блока откройте параметры блоков и установите Различный параметр времени активации на 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 и выполните собственную проверку

Прежде, чем открыть Model Advisor и осуществить собственную проверку, необходимо обновить кэш информации о проверке Model Advisor. В командном окне MATLAB, введите:

Advisor.Manager.refresh_customizations

Открыть Model Advisor и выполнить собственную проверку:

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

  2. Во вкладке Modeling выберите Model Advisor. Диалоговое окно System Selector - Model Advisor открывается. Нажать ОК. Model Advisor открывается.

  3. На левой панели выберите By Product> Demo> Check, чтобы идентифицировать Один к преобразованию Bool. Если Папкой продукта не отображен в окне Model Advisor, выберите Settings> Preferences> Show By Product Folder.

  4. Щелкните правой кнопкой по проверке и выберите Run This Check. Model Advisor компилирует модель и выполняет проверку. Model Advisor обновляет диаграмму модели. Неактивные различные пути появляются, потускнел.

Рассмотрите результаты Model Advisor

Рассмотрите результаты контрольного анализа в Model Advisor. Кликните по гиперссылкам, чтобы открыть блок нарушения в редакторе моделей.

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

rec.CallbackContext = 'PostCompileForCodegen';

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

Если вы задали опцию компиляции в sl_customization.m файл как

rec.CallbackContext = 'PostCompile';

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

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

|

Похожие темы