В зависимости от реализации модели и того, чего должна достичь пользовательская проверка, важно указать правильную опцию компиляции. Вы указываете опцию компиляции для функции определения проверки 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.
Примечание.Выбор этой опции может повлиять на время выполнения и увеличить время, необходимое консультанту по модели для оценки модели.
Открыть пример модели ex_check_compile_code_gen.
Для каждого блока Variant Source откройте параметры блока и установите для параметра Variant activation time значение Code compile.
Сохраните модель в локальной рабочей папке.

Создание 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 и выполнить пользовательскую проверку, выполните следующие действия.
Откройте сохраненную модель.
На вкладке Моделирование (Modeling) выберите Помощник по модели (Model Advisor). Откроется диалоговое окно Выбор системы - Консультант по модели (System Selector - Model Advisor). Нажмите кнопку OK. Откроется окно Model Advisor.
На левой панели выберите По продукту > Демонстрация > Проверить, чтобы определить преобразование Single to Bool. Если папка По продукту (By Product) не отображается в окне Мастер модели (Model Advisor), выберите Настройки (Settings) > Настройки (Preferences) > Показать по папке продукта (Show By Product Folder).
Щелкните правой кнопкой мыши по чеку и выберите Выполнить эту проверку. Помощник по модели компилирует модель и выполняет проверку. Помощник по модели обновляет схему модели. Неактивные пути вариантов отображаются затемненными.

Просмотр результатов работы помощника по модели
Просмотрите результаты анализа проверки в Model Advisor. Щелкните гиперссылки, чтобы открыть нарушающий блок в редакторе модели.
В этом примере, поскольку вы определили опцию компиляции в sl_customization.m файл как
rec.CallbackContext = 'PostCompileForCodegen';
Мастер модели генерирует предупреждения для блоков преобразования типов данных в активных путях и неактивных путях исполнительных систем.

Если была определена опция компиляции в sl_customization.m файл как
rec.CallbackContext = 'PostCompile';
результаты включают только блоки преобразования типов данных в активном пути.

ModelAdvisor.Check | ModelAdvisor.Check.CallbackContext