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
cellArray.
Этот пример показывает подробную функцию обратного вызова проверки что настройки оптимизации проверок для симуляции и генерации кода.
% ----------------------------- % 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
cellArray.
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);
ModelAdvisor.Check
| ModelAdvisor.FormatTemplate
| ModelAdvisor.Task