Тип функции обратного вызова
'DetailStyle' |
'StyleOne' (по умолчанию) |
'StyleTwo' |
'StyleThree' |
The CallbackStyle свойство задает тип функции обратного вызова.
| Проверьте функцию обратного вызова для детального набора результатов. рекомендуется. |
| Простая проверка функции обратного вызова. |
| Подробная проверка функции обратного вызова |
| Проверяйте функцию обратного вызова с гиперссылками результатов |
Чтобы использовать формат по умолчанию отчета Model Advisor, используйте функцию обратного вызова подробного набора результатов. Ключевое слово для этой функции обратного вызова DetailStyle. Для определения проверки требуется это ключевое слово. С форматом по умолчанию вы не должны использовать ModelAdvisor.FormatTemplate класс или другие API-интерфейсы Model Advisor Formatting для форматирования результатов, отображаемых в Model Advisor. Этот стиль также позволяет просматривать результаты по блокам, подсистемам или рекомендуемым действиям.
Для примеров смотрите Исправить модель, чтобы соответствовать условиям, которые вы задаете с помощью Model Advisor и Создать функцию определения проверки для проверки прохождения/отказа без действия исправления.
Если форматирование по умолчанию не соответствует вашим потребностям, используйте один из других стилей функции обратного вызова и ModelAdvisor.FormatTemplate API или другие форматирующие API.
Функция обратного вызова набора результатов принимает следующие аргументы
| Аргумент | Тип ввода-вывода | Описание |
|---|---|---|
system | Вход | Путь к модели или подсистеме, проанализированной Model Advisor. |
CheckObj | Вход | ModelAdvisor.Check объект |
Чтобы указать, прошла ли модель или не прошла проверку, или рекомендовать устранить проблему с помощью API Model Advisor Formatting для форматирования результатов, используйте функцию простого обратного вызова проверки. Ключевое слово для этой функции обратного вызова StyleOne. Для определения проверки требуется это ключевое слово.
Функция обратного вызова простого чека принимает следующие аргументы.
| Аргумент | Тип ввода-вывода | Описание |
|---|---|---|
system | Вход | Путь к модели или подсистеме, проанализированной Model Advisor. |
result | Выход | MATLAB® вектор символов, который поддерживает вызовы API Model Advisor Formatting или встроенные HTML для форматирования текста. |
Используйте функцию подробного обратного вызова для возврата и организации результатов в виде строк многоуровневым иерархическим способом. Функция предоставляет два выходных аргументов, чтобы можно было связать текстовые описания с одним или несколькими абзацами подробной информации. Ключевое слово для подробной функции обратного вызова StyleTwo. Для определения проверки требуется это ключевое слово.
Подробная функция обратного вызова принимает следующие аргументы.
| Аргумент | Тип ввода-вывода | Описание |
|---|---|---|
system | Вход | Путь к модели или системе, проанализированный Model Advisor. |
ResultDescription | Выход | Массив ячеек из символьных векторов MATLAB, который поддерживает Вызовы Model Advisor Formatting или встроенные HTML для форматирования текста. Model Advisor конкатенирует ResultDescription вектор символов с соответствующим массивом ResultDetails векторы символов. |
ResultDetails | Выход | Массив ячеек из массивов ячеек, каждый из которых содержит один или несколько векторы символов. The ResultDetails массив ячеек должен быть такой же длины, как и ResultDescription массив ячеек. |
В этом примере показана функция подробной проверки обратного вызова, которая проверяет настройки оптимизации для симуляции и генерации кода.
function [ResultDescription, ResultDetails] = SampleStyleTwoCallback(system) ResultDescription ={}; ResultDetails ={}; model = bdroot(system); mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system); % get object mdladvObj.setCheckResultStatus(true); % init result status to pass % Check Simulation optimization setting ResultDescription{end+1} = ModelAdvisor.Paragraph(['Check Simulation '... 'optimization settings:']); if strcmp(get_param(model,'BlockReduction'),'off'); ResultDetails{end+1} = {ModelAdvisor.Text(['It is recommended to '... 'turn on Block reduction optimization option.',{'italic'}])}; mdladvObj.setCheckResultStatus(false); % set to fail mdladvObj.setActionEnable(true); else ResultDetails{end+1} = {ModelAdvisor.Text('Passed',{'pass'})}; end % Check code generation optimization setting ResultDescription{end+1} = ModelAdvisor.Paragraph(['Check code generation '... 'optimization settings:']); ResultDetails{end+1} = {}; if strcmp(get_param(model,'LocalBlockOutputs'),'off'); ResultDetails{end}{end+1} = ModelAdvisor.Text(['It is recommended to'... ' turn on Enable local block outputs option.',{'italic'}]); ResultDetails{end}{end+1} = ModelAdvisor.LineBreak; mdladvObj.setCheckResultStatus(false); % set to fail mdladvObj.setActionEnable(true); end if strcmp(get_param(model,'BufferReuse'),'off'); ResultDetails{end}{end+1} = ModelAdvisor.Text(['It is recommended to'... ' turn on Reuse block outputs option.',{'italic'}]); mdladvObj.setCheckResultStatus(false); % set to fail mdladvObj.setActionEnable(true); end if isempty(ResultDetails{end}) ResultDetails{end}{end+1} = ModelAdvisor.Text('Passed',{'pass'}); end
Чтобы автоматически отобразить гиперссылки для каждого объекта, возвращенного проверкой, используйте функцию обратного вызова с гиперссылками результатов. Ключевое слово для функции обратного вызова этого типа StyleThree. Для определения проверки требуется это ключевое слово.
Эта функция обратного вызова принимает следующие аргументы.
| Аргумент | Тип ввода-вывода | Описание |
|---|---|---|
system | Вход | Путь к модели или системе, проанализированный Model Advisor. |
ResultDescription | Выход | Массив ячеек из символьных векторов MATLAB, который поддерживает Вызовы Model Advisor Formatting или встроенные HTML для форматирования текста. |
ResultDetails | Выход | Массив ячеек из массивов ячеек, каждый из которых содержит один или несколько Simulink® объекты, такие как блоки, порты, линии и Stateflow® чарты. Объекты должны быть в форме указателя или пути Simulink. The ResultDetails массив ячеек должен быть такой же длины, как и ResultDescription массив ячеек. |
Model Advisor автоматически конкатенирует каждый вектор символов с ResultDescription с соответствующим массивом объектов из ResultDetails. Model Advisor отображает содержимое ResultDetails как набор гиперссылок, по одной для каждого объекта, возвращаемого в массивах ячеек. При клике гиперссылки Model Advisor отображает целевой объект, подсвеченный в модели Simulink.
Этот пример показывает функцию обратного вызова с гиперссылкой результатов. Этот пример проверяет модель на последовательное использование типа шрифта и размера шрифта в его блоках. Он также содержит входные параметры, действия и вызов Model Advisor Result Explorer, которые описаны в последующих разделах.
function [ResultDescription, ResultDetails] = SampleStyleThreeCallback(system) ResultDescription ={}; ResultDetails ={}; mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system); mdladvObj.setCheckResultStatus(true); needEnableAction = false; % get input parameters inputParams = mdladvObj.getInputParameters; skipFontCheck = inputParams{1}.Value; regularFontSize = inputParams{2}.Value; regularFontName = inputParams{3}.Value; if skipFontCheck ResultDescription{end+1} = ModelAdvisor.Paragraph('Skipped.'); ResultDetails{end+1} = {}; return end regularFontSize = str2double(regularFontSize); if regularFontSize<1 || regularFontSize>=99 mdladvObj.setCheckResultStatus(false); ResultDescription{end+1} = ModelAdvisor.Paragraph(['Invalid font size. '... 'Please enter a value between 1 and 99']); ResultDetails{end+1} = {}; end % find blocks inside current system allBlks = find_system(system); % block diagram doesn't have font property % get blocks inside current system that have font property allBlks = setdiff(allBlks, {system}); % find regular font name blocks regularBlks = find_system(allBlks,'FontName',regularFontName); % look for different font blocks in the system searchResult = setdiff(allBlks, regularBlks); if ~isempty(searchResult) ResultDescription{end+1} = ModelAdvisor.Paragraph(['It is recommended to '... 'use same font for blocks for a uniform appearance in the model. '... 'The following blocks use a font other than ' regularFontName ': ']); ResultDetails{end+1} = searchResult; mdladvObj.setCheckResultStatus(false); myLVParam = ModelAdvisor.ListViewParameter; myLVParam.Name = 'Invalid font blocks'; % pull down filter name myLVParam.Data = get_param(searchResult,'object')'; myLVParam.Attributes = {'FontName'}; % name is default property mdladvObj.setListViewParameters({myLVParam}); needEnableAction = true; else ResultDescription{end+1} = ModelAdvisor.Paragraph(['Block font names '... 'are identical.']); ResultDetails{end+1} = {}; end % find regular font size blocks regularBlks = find_system(allBlks,'FontSize',regularFontSize); % look for different font size blocks in the system searchResult = setdiff(allBlks, regularBlks); if ~isempty(searchResult) ResultDescription{end+1} = ModelAdvisor.Paragraph(['It is recommended to '... 'use same font size for blocks for a uniform appearance in the model. '... 'The following blocks use a font size other than ' ... num2str(regularFontSize) ': ']); ResultDetails{end+1} = searchResult; mdladvObj.setCheckResultStatus(false); myLVParam = ModelAdvisor.ListViewParameter; myLVParam.Name = 'Invalid font size blocks'; % pull down filter name myLVParam.Data = get_param(searchResult,'object')'; myLVParam.Attributes = {'FontSize'}; % name is default property mdladvObj.setListViewParameters... ({mdladvObj.getListViewParameters{:}, myLVParam}); needEnableAction = true; else ResultDescription{end+1} = ModelAdvisor.Paragraph([' Block font sizes '... 'are identical.']); ResultDetails{end+1} = {}; end mdladvObj.setActionEnable(needEnableAction); mdladvObj.setCheckErrorSeverity(1); % enddocexample check_callback_hyperlink_fcn % - % Sample StyleOne callback function, % please refer to Model Advisor API document for more details. % - % begindocexample simple_check_callback_fcn function result = SampleStyleOneCallback(system) mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system); % get object if strcmp(get_param(bdroot(system),'ScreenColor'),'white') result = ModelAdvisor.Text('Passed',{'pass'}); mdladvObj.setCheckResultStatus(true); % set to pass mdladvObj.setActionEnable(false); else result = ModelAdvisor.Text(['It is recommended to select a Simulink '... 'window screen color of white for a readable and printable model.']); mdladvObj.setCheckResultStatus(false); % set to fail mdladvObj.setActionEnable(true);