Создайте функции обратного вызова и результаты

О функциях обратного вызова

callback function задает действия, которые Model Advisor выполняет на модели или подсистеме, на основе проверки или действия, которое запускает пользователь. Необходимо создать функцию обратного вызова для каждой собственной проверки и действия так, чтобы Model Advisor мог выполнить функцию, когда вы осуществляете проверку. Все типы функций обратного вызова обеспечивают один или несколько возвращаемых аргументов для отображения результатов после выполнения проверки или действия. В некоторых случаях возвращаемые аргументы являются векторами символов или массивами ячеек из символьных векторов, которые поддерживают встроенные HTML-тэги для текстового форматирования.

ДействиеБольше информации

Создайте информационную функцию обратного вызова для собственной проверки, которая находит и отображает настройку модели и информацию о контрольной сумме.

Информационная функция обратного вызова проверки

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

Простая функция обратного вызова проверки

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

Подробная функция обратного вызова проверки

Создайте функцию обратного вызова, которая автоматически отображает гиперссылки для каждого объекта, возвращенного проверкой.

Проверяйте функцию обратного вызова со связанными гиперссылками результатами

Создайте функцию обратного вызова, которая собирает результаты в группу, такие как блоки в подсистеме, которые нарушают проверку. Эти результаты представлены в пользовательском интерфейсе Model Advisor при помощи стилей отчета, которые просматриваются рекомендуемым действием, подсистемой или блоком.Проверяйте функцию обратного вызова на подробные наборы результата

Создайте функцию обратного вызова действия, которая задает действия, которые Model Advisor выполняет на модели или подсистеме, когда вы кликаете по кнопке действий.

Функция обратного вызова действия

Создайте функцию обратного вызова для собственной проверки с двумя подпроверками.

Сверьтесь с подпроверками и действиями

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

Основная Проверка с Состоянием Передачи/Сбоя

Информационная функция обратного вызова проверки

Этот пример показывает, как создать функцию обратного вызова для пользовательской проверки informational, которая находит и отображает настройку модели и информацию о контрольной сумме. Информационная проверка использует API Шаблона Результата, чтобы отформатировать результат проверки.

Проверка informational включает следующие элементы в результаты:

  • Описание того, что рассматривает проверка.

  • Ссылки на стандарты, если применимо.

Информационная проверка не включает следующие элементы в результаты:

  • Состояние проверки. Model Advisor отображает полное состояние проверки, но состояние не находится в результате.

  • Описание состояния.

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

  • Подпроверяйте результаты.

  • Строка ниже результатов.

% Sample Check 1 Callback Function: Informational Check
% Find and display model configuration and checksum information
% Informational checks do not have a passed or warning status in the results

function resultDescription = modelVersionChecksumCallbackUsingFT(system)
resultDescription = [];
system = getfullname(system);
model = bdroot(system);

% Format results in a list using Model Advisor Result Template API
ft = ModelAdvisor.FormatTemplate('ListTemplate');
% Add See Also section for references to standards
docLinkSfunction{1}     = {['IEC 61508-3, Table A.8 (5)' ...
                            ' ''Software configuration management'' ']};
setRefLink(ft,docLinkSfunction);

% Description of check in results
desc = 'Display model configuration and checksum information.';
% If running the Model Advisor on a subsystem, add note to description
if strcmp(system, model) == false
    desc = strcat(desc, ['<br/>NOTE: The Model Advisor is reviewing a' ...
        ' sub-system, but these results are based on root-level settings.']);
end
setCheckText(ft, desc);

mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system);
% If err, use these values
mdlver = 'Error - could not retrieve Version';
mdlauthor = 'Error - could not retrieve Author';
mdldate = 'Error - could not retrieve Date';
mdlsum = 'Error - could not retrieve CheckSum';

% Get model configuration and checksum information
try
    mdlver = get_param(model,'ModelVersion');
    mdlauthor = get_param(model,'LastModifiedBy');
    mdldate = get_param(model,'LastModifiedDate');
    mdlsum = Simulink.BlockDiagram.getChecksum(model);
    mdlsum = [num2str(mdlsum(1)) ' ' num2str(mdlsum(2)) ' ' ...
                     num2str(mdlsum(3)) ' ' num2str(mdlsum(4))];
    mdladvObj.setCheckResultStatus(true); % init to true
catch err
    mdladvObj.setCheckResultStatus(false);
    setSubResultStatusText(ft,err.message);
    resultDescription{end+1} = ft;
    return
end

% Display the results
lbStr ='<br/>';
resultStr = ['Model Version: ' mdlver lbStr 'Author: ' mdlauthor lbStr ...
    'Date: ' mdldate lbStr 'Model Checksum: ' mdlsum];
setSubResultStatusText(ft,resultStr);

% Informational checks do not have subresults, suppress line
setSubBar(ft,false);
resultDescription{end+1} = ft;

Простая функция обратного вызова проверки

Этот пример показывает, как создать простую функцию обратного вызова проверки. Используйте простую функцию обратного вызова проверки с результатами, отформатированными с помощью API Шаблона Результата, чтобы указать, передала ли модель или привела проверку к сбою, или рекомендовать устранить проблему. Ключевым словом для этой функции обратного вызова является StyleOne. Определение проверки требует этого ключевого слова.

Функция обратного вызова проверки берет следующие аргументы.

АргументТип ввода-выводаОписание
systemВходной параметрПуть к модели или подсистеме анализируется Model Advisor.
resultВывод Вектор символов MATLAB®, который поддерживает Model Advisor, Форматирующий вызовы API или встроенные HTML-тэги для текстового форматирования.

Подробная функция обратного вызова проверки

Этот пример показывает, как создать подробную функцию обратного вызова проверки. Используйте подробную функцию обратного вызова проверки, чтобы возвратить и организовать результаты как строки многоуровневым, иерархическим способом. Функция обеспечивает два выходных аргумента, таким образом, можно сопоставить текстовые описания с одним или несколькими абзацами подробной информации. Ключевым словом для подробной функции обратного вызова является StyleTwo. Определение проверки требует этого ключевого слова.

Подробная функция обратного вызова берет следующие аргументы.

АргументТип ввода-выводаОписание
systemВходной параметрПуть к модели или системе анализируется Model Advisor.
ResultDescriptionВывод Массив ячеек векторов символов MATLAB, который поддерживает Model Advisor, Форматирующий вызовы API или встроенные HTML-тэги для текстового форматирования. Model Advisor конкатенирует вектор символов ResultDescription с соответствующим массивом векторов символов ResultDetails.
ResultDetailsВывод Массив ячеек массивов ячеек, каждый из которых содержит один или несколько векторов символов.

Примечание

Массив ячеек ResultDetails должен быть той же длиной как массив ячеек ResultDescription.

Этот пример показывает подробную функцию обратного вызова проверки что настройки оптимизации проверок для симуляции и генерации кода.

% -----------------------------
% Sample StyleTwo callback function, used for check "Check model optimization settings"
% Please refer to Model Advisor API document for more details.
% -----------------------------
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, Форматирующий вызовы API или встроенные HTML-тэги для текстового форматирования.
ResultDetailsВывод Массив ячеек массивов ячеек, каждый из которых содержит один или несколько объектов Simulink®, таких как блоки, порты, строки и графики Stateflow®. Объекты должны быть в форме пути Simulink или указателя.

Примечание

Массив ячеек ResultDetails должен быть той же длиной как массив ячеек ResultDescription.

Model Advisor автоматически конкатенирует каждый вектор символов от ResultDescription с соответствующим массивом объектов от ResultDetails. Model Advisor отображает содержимое ResultDetails как набор гиперссылок, один для каждого объекта, возвращенного в массивах ячеек. Когда вы кликаете по гиперссылке, Model Advisor отображает целевой объект, подсвеченный в вашей модели Simulink.

Этот пример показывает функцию обратного вызова проверки со связанными гиперссылками результатами. Этот пример проверяет модель на сопоставимое использование типа шрифта и размера шрифта в его блоках. Это также содержит входные параметры, действия и вызов Проводника Результата Model Advisor, которые описаны в более поздних разделах.

-----------------------------
% Sample StyleThree callback function, used for check "Check Simulink block font".
% Please refer to Model Advisor API document for more details.
% -----------------------------
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 all 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 to ensure uniform appearance of 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(['All 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 to ensure uniform appearance of 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(['All block font sizes '...
    'are identical.']);
    ResultDetails{end+1}     = {};
end

mdladvObj.setActionEnable(needEnableAction);
mdladvObj.setCheckErrorSeverity(1);

В Model Advisor, если вы запускаете Example task with input parameter and auto-fix ability для модели slvnvdemo_mdladv, можно просмотреть связанные гиперссылками результаты. Отмечание первой гиперссылки, slvnvdemo_mdladv/Input, отображает модель Simulink с подсвеченным блоком Input.

Проверяйте функцию обратного вызова на подробные наборы результата

Этот пример показывает функцию обратного вызова проверки, которая создает объекты детали результата, которые собраны в группу, такую как блоки в подсистеме, которые нарушают проверку. Когда проверка не нарушена, детали результата содержат описание проверки и состояние результата. Когда проверка нарушена, детали результата содержат описание проверки, состояние результата и рекомендуемое действие, чтобы устранить проблему.

Ключевым словом для этой функции обратного вызова является DetailStyle. Определение проверки требует этого ключевого слова. Смотрите Функцию Определения Проверки.

Функция обратного вызова берет перечисленные в таблице аргументы.

АргументТип ввода-выводаОписание
systemВходной параметрПуть к модели или системе анализируется Model Advisor.
CheckObjВходной параметрОбъект ModelAdvisor.Check для проверки.

В этом примере функция обратного вызова рассматривает модель и идентифицирует блоки, имя которых не расположено ниже блока. Это использует имя и пары значения, чтобы собрать результаты в наборы.

% -----------------------------
% Sample new check style callback function, used for check "Check whether block names appear below blocks".
% Please refer to Model Advisor API document for more details.
% -----------------------------
function SampleNewCheckStyleCallback(system, CheckObj)
mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system); % get object

% find all blocks whose name does not appear below blocks
violationBlks = find_system(system, 'Type','block',...
                           'NamePlacement','alternate',...
                           'ShowName', 'on');
if isempty(violationBlks)
    ElementResults = ModelAdvisor.ResultDetail;
    ElementResults.IsInformer = true;
    ElementResults.Description = 'Identify blocks where the name is not displayed below the block.';
    ElementResults.Status = 'All blocks have names displayed below the block.';
    mdladvObj.setCheckResultStatus(true);
else
    ElementResults(1,numel(violationBlks))=ModelAdvisor.ResultDetail;
    for i=1:numel(ElementResults)
        ElementResults(i).setData(violationBlks{i});
        ElementResults(i).Description = 'Identify blocks where the name is not displayed below the block.';
        ElementResults(i).Status = 'The following blocks have names that do not display below the blocks:';
        ElementResults(i).RecAction =  'Change the location such that the block name is below the block.';
    end
    mdladvObj.setCheckResultStatus(false);
    mdladvObj.setActionEnable(true);
end

CheckObj.setResultDetails(ElementResults);

В Model Advisor, если вы запускаете Check whether block names appear below blocks (recommended check style) для модели slvnvdemo_mdladv, можно просмотреть результаты путем выбора:

  • View By> Recommended Action ─, Когда проверка нарушена, это представление, показывает список элементов модели, которые нарушают проверку. Когда нет никакого нарушения, это представление предоставляет краткое описание, утверждая, что проверка не была нарушена.

  • View By> Subsystem ─ Это представление показывает таблицу элементов модели, которые нарушают проверку, организованную моделью или подсистемой (когда применимый)

  • View By> Block ─ Это представление предоставляет список нарушений проверки для каждого блока

Когда будут нарушения проверки, кликните по гиперссылке, чтобы легко рассмотреть проблемы в вашей модели или подсистеме. Чтобы создать проверку с помощью этой функции обратного вызова, смотрите, Создают Индивидуально настраиваемую Передачу/Сбой, Сверяются с Подробными Наборами Результата.

Функция обратного вызова действия

Этот пример показывает, как создать функцию обратного вызова действия. action callback function задает действия, которые Model Advisor выполняет на модели или подсистеме, когда пользователь кликает по кнопке действий. Необходимо создать одну функцию обратного вызова для мер, которые вы хотите принять.

Функция обратного вызова действия берет следующие аргументы.

АргументТип ввода-выводаОписание
taskobjВходной параметрОбъект ModelAdvisor.Task для проверки, которая включает определение действия.
resultВывод Вектор символов MATLAB, который поддерживает Model Advisor, Форматирующий вызовы API или встроенные HTML-тэги для текстового форматирования.

Этот пример показывает функцию обратного вызова действия, которая фиксирует настройки оптимизации, которые Model Advisor рассматривает, как задано под контролем С Подпроверками и Действиями.

% Sample Check 3 Action Callback Function: Check with Subresults and Actions
% Fix optimization settings
function result = modifyOptmizationSetting(taskobj)
% Initialize variables
result =  ModelAdvisor.Paragraph();
mdladvObj = taskobj.MAObj;
system = bdroot(mdladvObj.System);

% 'Block reduction' is selected
% Clear the check box and display text describing the change
if ~strcmp(get_param(system,'BlockReduction'),'off')
    set_param(system,'BlockReduction','off');
    result.addItem(ModelAdvisor.Text( ...
        'Cleared the ''Block reduction'' check box.',{'Pass'}));
    result.addItem(ModelAdvisor.LineBreak);
end
% 'Conditional input branch execution' is selected
% Clear the check box and display text describing the change
if ~strcmp(get_param(system,'ConditionallyExecuteInputs'),'off')
    set_param(system,'ConditionallyExecuteInputs','off');
    result.addItem(ModelAdvisor.Text( ...
       'Cleared the ''Conditional input branch execution'' check box.', ...
   {'Pass'}));
end

Функция обратного вызова действия для подробных наборов результата

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

% -----------------------------
% Sample Check 0 Action Callback Function: Check whose Results are Viewed as Detailed Result Collections
% please refer to Model Advisor API document for more details.
% -----------------------------
function result = sampleActionCB0(taskobj)
mdladvObj = taskobj.MAObj;
checkObj = taskobj.Check;
resultDetailObjs = checkObj.ResultDetails;
for i=1:numel(resultDetailObjs)
    % take some action for each of them
    block=Simulink.ID.getHandle(resultDetailObjs(i).Data);
    set_param(block,'NamePlacement','normal');
end

result = ModelAdvisor.Text('Changed the location such that the block name is below the block.');
mdladvObj.setActionEnable(false);

В Model Advisor откройте модель slvnvdemo_mdladv. Щелкните правой кнопкой по блоку и выберите Rotate & Flip> Flip Block Name. Когда вы запускаете Check whether block names appear below blocks (recommended check style), сбои проверки.

Можно зафиксировать не пройдено блоки при помощи одного из этих методов:

  • Обновите каждое нарушение индивидуально путем двойного клика по гиперссылке, чтобы открыть блок. Щелкните правой кнопкой по блоку и выберите Rotate & Flip> Flip Block Name.

  • Нажмите кнопку Make block names appear below blocks. Model Advisor автоматически фиксирует проблемы в модели. Заметьте, что кнопка теперь greyed.

Чтобы создать проверку с помощью этой функции обратного вызова действия, смотрите, Создают Индивидуально настраиваемую Передачу/Сбой, Сверяются с Подробными Наборами Результата.

Сверьтесь с подпроверками и действиями

Этот пример показывает, как создать функцию обратного вызова для собственной проверки, которая находит и сообщает о настройках оптимизации. Проверка состоит из двух подпроверок. Первые отзывы установка оптимизации Block reduction и вторые отзывы установка оптимизации Conditional input branch execution.

check with subchecks включает следующие элементы в результаты:

  • Описание того, что рассматривает полная проверка.

  • Заголовок для подпроверки.

  • Описание того, что рассматривает подпроверка.

  • Ссылки на стандарты, если применимо.

  • Состояние подпроверки.

  • Описание состояния.

  • Результаты для подпроверки.

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

  • Строка между результатами подпроверки.

% Sample Check 3 Callback Function: Check with Subchecks and Actions
% Find and report optimization settings
function ResultDescription = OptmizationSettingCallback(system)
% Initialize variables
system =getfullname(system);
mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system);
mdladvObj.setCheckResultStatus(false); % Default check status is 'Warning'
ResultDescription = {};
system = bdroot(system);

% Format results in a list using Model Advisor Result Template API
% Create a list template object for first subcheck
ft1 = ModelAdvisor.FormatTemplate('ListTemplate');

% Description of check in results
setCheckText(ft1,['Check model configuration for optimization settings that'...
    'can impact safety.']);

% Title and description of first subcheck
setSubTitle(ft1,'Verify Block reduction setting');
setInformation(ft1,'Check whether the ''Block reduction'' check box is cleared.');
% Add See Also section with references to applicable standards
docLinks{1}     = {['Reference DO-178B Section 6.3.4e - Source code ' ...
    'is traceable to low-level requirements']};
% Review 'Block reduction' optimization
setRefLink(ft1,docLinks);
if strcmp(get_param(system,'BlockReduction'),'off')
    % 'Block reduction' is cleared
    % Set subresult status to 'Pass' and display text describing the status
    setSubResultStatus(ft1,'Pass');
    setSubResultStatusText(ft1,'The ''Block reduction'' check box is cleared.');
    ResultStatus = true;
else
    % 'Block reduction' is selected
    % Set subresult status to 'Warning' and display text describing the status
    setSubResultStatus(ft1,'Warn');
    setSubResultStatusText(ft1,'The ''Block reduction'' check box is selected.');
    setRecAction(ft1,['Clear the ''Optimization > Block reduction''' ...
        ' check box in the Configuration Parameters dialog box.']);
    ResultStatus = false;
end

ResultDescription{end+1} = ft1;

% Title and description of second subcheck
ft2 = ModelAdvisor.FormatTemplate('ListTemplate');
setSubTitle(ft2,'Verify Conditional input branch execution setting');
setInformation(ft2,['Check whether the ''Conditional input branch execution'''...
    ' check box is cleared.'])
% Add See Also section and references to applicable standards
docLinks{1} = {['Reference DO-178B Section 6.4.4.2 - Test coverage ' ...
    'of software structure is achieved']};
setRefLink(ft2,docLinks);

% Last subcheck, suppress line
setSubBar(ft2,false);

% Check status of the 'Conditional input branch execution' check box
if strcmp(get_param(system,'ConditionallyExecuteInputs'),'off')
    % The 'Conditional input branch execution' check box is cleared
    % Set subresult status to 'Pass' and display text describing the status
    setSubResultStatus(ft2,'Pass');
    setSubResultStatusText(ft2,['The ''Conditional input branch execution''' ...
        'check box is cleared.']);
else
    % 'Conditional input branch execution' is selected
    % Set subresult status to 'Warning' and display text describing the status
    setSubResultStatus(ft2,'Warn');
    setSubResultStatusText(ft2,['The ''Conditional input branch execution'''...
        ' check box is selected.']);
    setRecAction(ft2,['Clear the ''Optimization > Conditional input branch ' ...
        'execution'' check box in the Configuration Parameters dialog box.']);
    ResultStatus = false;
end

ResultDescription{end+1} = ft2; % Pass list template object to Model Advisor
mdladvObj.setCheckResultStatus(ResultStatus); % Set overall check status
% Enable Modify Settings button when check fails
mdladvObj.setActionEnable(~ResultStatus);

Основная Проверка с Состоянием Передачи/Сбоя

Этот пример показывает функцию обратного вызова для пользовательской проверки basic, которая находит и сообщает о несвязанных строках, входных портах и выходных портах.

Проверка basic включает следующие элементы в результаты:

  • Описание того, что рассматривает проверка.

  • Ссылки на стандарты, если применимо.

  • Состояние проверки.

  • Описание состояния.

  • Результаты для проверки.

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

Основная проверка не включает следующие элементы в результаты:

  • Подпроверяйте результаты.

  • Строка ниже результатов.

% Sample Check 2 Callback Function: Basic Check with Pass/Fail Status
% Find and report unconnected lines, input ports, and output ports
function ResultDescription = unconnectedObjectsCallbackUsingFT(system)
mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system);
% Initialize variables
mdladvObj.setCheckResultStatus(false);
ResultDescription ={};
ResultStatus = false; % Default check status is 'Warning'
system = getfullname(system);
isSubsystem = ~strcmp(bdroot(system), system);

% Format results in a list using Model Advisor Result Template API
% Create a list template object
ft = ModelAdvisor.FormatTemplate('ListTemplate');

% Description of check in results
if isSubsystem
    checkDescStr = ['Identify unconnected lines, input ports, and ' ...
                                        'output ports in the subsystem.'];
else
    checkDescStr = ['Identify unconnected lines, input ports, and ' ...
                                        'output ports in the model.'];
end
setCheckText(ft,checkDescStr);

% Add See Also section with references to applicable standards
checkStdRef = 'IEC 61508-3, Table A.3 (3) ''Language subset'' ';
docLinkSfunction{1}     = {checkStdRef};
setRefLink(ft,docLinkSfunction);

% Basic checks do not have subresults, suppress line
setSubBar(ft,false);

% Check for unconnected lines, inputs, and outputs
sysHandle = get_param(system, 'Handle');
uLines = find_system(sysHandle, ...
    'Findall', 'on', ...
    'LookUnderMasks', 'on', ...
    'Type', 'line', ...
    'Connected', 'off');
uPorts = find_system(sysHandle, ...
    'Findall', 'on', ...
    'LookUnderMasks', 'on', ...
    'Type', 'port', ...
    'Line', -1);

% Use parents of port objects for the correct highlight behavior
if ~isempty(uPorts)
    for i=1:length(uPorts)
        uPorts(i) = get_param(get_param(uPorts(i), 'Parent'), 'Handle');
    end
end

% Create cell array of unconnected object handles
modelObj = {};
searchResult = union(uLines, uPorts);
for i = 1:length(searchResult)
    modelObj{i} = searchResult(i);
end

% No unconnected objects in model
% Set result status to 'Pass' and display text describing the status
if isempty(modelObj)
    setSubResultStatus(ft,'Pass');
    if isSubsystem
        setSubResultStatusText(ft,['There are no unconnected lines, ' ...
            'input ports, and output ports in this subsystem.']);
    else
        setSubResultStatusText(ft,['There are no unconnected lines, ' ...
            'input ports, and output ports in this model.']);
    end
    ResultStatus            = true;
% Unconnected objects in model
% Set result status to 'Warning' and display text describing the status
else
    setSubResultStatus(ft,'Warn');
    if ~isSubsystem
        setSubResultStatusText(ft,['The following lines, input ports, ' ...
         'or output ports are not properly connected in the system: ' system]);
    else
        setSubResultStatusText(ft,['The following lines, input ports, or ' ...
         'output ports are not properly connected in the subsystem: ' system]);
    end
    % Specify recommended action to fix the warning
    setRecAction(ft,'Connect the specified blocks.');
    % Create a list of handles to problem objects
    setListObj(ft,modelObj);
    ResultStatus = false;
end
% Pass the list template object to the Model Advisor
ResultDescription{end+1} = ft;
% Set overall check status
mdladvObj.setCheckResultStatus(ResultStatus);

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

| |

Похожие темы