В зависимости от реализации вашей модели и того, чего вы хотите, чтобы ваша собственная проверка достигла, важно, чтобы вы указали правильную опцию компиляции. Вы задаете опцию компиляции для функции определения проверки 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
являются OK для использования в моделируемой модели. Однако в сгенерированном коде эти Red
перечисления приводят к конфликту перечислений. При помощи 'PostCompileForCodegen'
опция, ваша пользовательская проверка Model Advisor может идентифицировать этот тип проблемы настройки генерации кода.
The 'PostCompileForCodegen'
опция компилирует модель для всех вариантов выбора. Эта компиляция позволяет вам анализировать возможные проблемы, существующие в сгенерированном коде, для активных и неактивных путей вариантов в модели. Пример приведен в разделе «Создание собственной проверки для оценки активных и неактивных путей исполнения из модели».
В этом примере показано создание пользовательской проверки Model Advisor, которая оценивает активные и неактивные пути исполнения из вариантной системной модели. Пример предоставляет результаты Model Advisor, которые демонстрируют, почему вы используете PostCompileForCodegen
вместо PostCompile
как значение для ModelAdvisor.Check.CallbackContext
свойство при генерации кода из модели является конечной целью.
Обновите модель, чтобы проанализировать все варианты выбора
Чтобы Model Advisor вычислял активные и неактивные пути в вариантную систему, необходимо задать значение параметра Variant activation time Code compile
для блоков варианта (Варианта Sink, Variant Source и Variant Subsystem, Варианта Модели). Необходимо также задать системную цель, файл параметра конфигурации равной ert.tlc
.
Примечание. Выбор этой опции может повлиять на время выполнения и увеличить время, необходимое Model Advisor для оценки модели.
Откройте пример модели ex_check_compile_code_gen
.
Для каждого исходного блока Variant Source откройте параметры блоков и установите параметр Variant activation на Code compile
.
Сохраните модель в локальной рабочей папке.
Создайте sl_customization
Функция
В рабочей папке создайте эту sl_customization
функцию и сохранить ее.
function sl_customization(cm) % register custom checks cm.addModelAdvisorCheckFcn(@defineModelAdvisorCheck); % ----------------------------- % defines Model Advisor Checks % ----------------------------- function defineModelAdvisorCheck CheckSingleToBoolConversion;
The 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 и выполнить собственную проверку:
Откройте сохраненную модель.
На вкладке Моделирование выберите Model Advisor. Откроется диалоговое окно System Selector - Model Advisor. Нажмите OK. Откроется Model Advisor.
На левой панели выберите По продукту > Демонстрация > Проверить, чтобы идентифицировать преобразование Сингл в Bool. Если Папкой продукта не показан в окне Model Advisor, выберите Параметры настройки> Настройки> Показ Папкой продукта.
Щелкните правой кнопкой мыши по проверке и выберите Запуск This Check. Model Advisor компилирует модель и выполняет проверку. Model Advisor обновляет диаграмму модели. Неактивные пути к варианту отображаются затемненными.
Просмотр результатов Model Advisor
Проверьте результаты анализа проверки в Model Advisor. Щелкните гиперссылки, чтобы открыть блок в редакторе моделей.
В этом примере, потому что вы определили опцию компиляции в sl_customization.m
файл как
rec.CallbackContext = 'PostCompileForCodegen';
Model Advisor генерирует предупреждения для блоков преобразования типов данных в активных путях и неактивных путях вариантных систем.
Если вы определили опцию компиляции в sl_customization.m
файл как
rec.CallbackContext = 'PostCompile';
результаты включают только блоки преобразования типов данных в активном пути.
ModelAdvisor.Check
| ModelAdvisor.Check.CallbackContext