В зависимости от реализации вашей модели и чего вы хотите, чтобы ваша собственная проверка достигла, важно, чтобы вы задали правильную опцию компиляции. Вы задаете опцию компиляции для функции определения проверки 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
или startup
для различных блоков (Различный Приемник, Различный Источник, и Различная Подсистема, Различная Модель). Необходимо также установить Системный параметр конфигурации конечного файла на ert.tlc
.
Примечание: Выбирание этой опции может влиять на время выполнения и увеличить время, которое требуется для Model Advisor, чтобы оценить модель.
Откройте модель ex_check_compile_code_gen
в качестве примера.
Для каждого Различного Исходного блока откройте параметры блоков и установите Различный параметр времени активации на 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 for i=1:numel(violationBlks) ElementResults(1,i) = ModelAdvisor.ResultDetail; end for i=1:numel(ElementResults) ModelAdvisor.ResultDetail.setData(ElementResults(i), 'SID',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 и выполнить собственную проверку:
Откройте свою сохраненную модель.
Во вкладке Modeling выберите Model Advisor. Диалоговое окно System Selector - Model Advisor открывается. Нажать ОК. Model Advisor открывается.
На левой панели выберите By Product> Demo> Check, чтобы идентифицировать Один к преобразованию Bool. Если Папкой продукта не отображен в окне Model Advisor, выберите Settings> Preferences> Show By Product Folder.
Щелкните правой кнопкой по проверке и выберите 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';
результаты включают только блоки Преобразования типа данных в активный путь.
ModelAdvisor.Check
| ModelAdvisor.Check.CallbackContext