К | Смотрите |
---|---|
Добавьте индивидуально настраиваемую проверку в подпапку Model Advisor By Product > Demo. | Добавьте собственную проверку в папкой продукта |
Создайте проверку передачи/сбоя Model Advisor. | Создайте Индивидуально настраиваемую Проверку Передачи/Сбоя |
Создайте передачу/сбой Model Advisor, сверяются с действием фиксации. | Создайте Индивидуально настраиваемую Передачу/Сбой, Сверяются, Фиксируют Действие |
Создайте передачу/сбой Model Advisor, сверяются с подробными наборами результата | Создайте Индивидуально настраиваемую Передачу/Сбой, Сверяются с Подробными Наборами Результата |
В этом примере показано, как добавить собственную проверку в подпапку Model Advisor By Product > Demo. В этом примере индивидуально настраиваемая проверка не проверяет элементы модели.
В вашей рабочей папке создайте sl_customization.m
файл. Этот файл указывает и создает регистрационную функцию проверки defineModelAdvisorChecks
, который в свою очередь указывает функцию обратного вызова проверки SimpleCallback
. Функциональный defineModelAdvisorChecks
использует ModelAdvisor.Root
объект задать интерфейс проверки.
function sl_customization(cm) % --- register custom checks cm.addModelAdvisorCheckFcn(@defineModelAdvisorChecks); % --- defineModelAdvisorChecks function function defineModelAdvisorChecks mdladvRoot = ModelAdvisor.Root; rec = ModelAdvisor.Check('exampleCheck'); rec.Title = 'Example of a customized check'; rec.TitleTips = 'Added customized check to Product Folder'; rec.setCallbackFcn(@SimpleCallback,'None','StyleOne'); mdladvRoot.publish(rec, 'Demo'); % --- creates SimpleCallback function function result = SimpleCallback(system); result={};
Закройте Model Advisor и вашу модель, если любой открыт.
В Командном окне, введите:
Advisor.Manager.refresh_customizations
Из окна MATLAB® выберите New > Simulink Model, чтобы открыть новое окно модели Simulink®.
Во вкладке Modeling выберите Model Advisor. Диалоговое окно System Selector ― Model Advisor открывается. Нажмите OK. Model Advisor открывается.
На левой панели расширьте папку By Product, чтобы отобразить подпапки. Индивидуально настраиваемая проверка Example of a customized check появляется в подпапке By Product > Demo .
Если папка By Product не отображена в окне Model Advisor, выберите Settings Preferences Show By Product Folder.
Следующие команды в sl_customization.m
файл создает правую панель Model Advisor.
rec.Title = 'Example of a customized check'; rec.TitleTips = 'Added customized check to Product Folder';
В этом примере показано, как создать проверку передачи/сбоя Model Advisor. В этом примере Model Advisor проверяет блоки Константа. Если значение блоков Константа является числовым, сбои проверки.
В вашей рабочей папке обновите sl_customization.m
файл. Этот файл указывает и создает регистрационную функцию проверки defineModelAdvisorChecks
, который также указывает функцию обратного вызова проверки SimpleCallback
. Функциональный SimpleCallback
создает проверку, которая находит блоки Константа, которые имеют числовые значения. SimpleCallback
использует шаблон формата Model Advisor.
function sl_customization(cm) % --- register custom checks cm.addModelAdvisorCheckFcn(@defineModelAdvisorChecks); % --- defineModelAdvisorChecks function function defineModelAdvisorChecks mdladvRoot = ModelAdvisor.Root; rec = ModelAdvisor.Check('exampleCheck'); rec.Title = 'Check Constant block usage'; rec.TitleTips = ['Fail if Constant block value is a number; Pass if' ... ' Constant block value is a letter']; rec.setCallbackFcn(@SimpleCallback,'None','StyleOne') mdladvRoot.publish(rec, 'Demo'); % --- SimpleCallback function that checks constant blocks function result = SimpleCallback(system) mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system); result = {}; all_constant_blk=find_system(system,'LookUnderMasks','all',... 'FollowLinks','on','BlockType','Constant'); blk_with_value=find_system(all_constant_blk,'RegExp','On','Value','^[0-9]'); ft = ModelAdvisor.FormatTemplate('ListTemplate'); ft.setInformation(['This check looks for constant blocks that'... ' use numeric values']); if ~isempty(blk_with_value) ft.setSubResultStatusText(['Check has failed. The following '... 'Constant blocks have numeric values:']); ft.setListObj(blk_with_value); ft.setSubResultStatus('warn'); ft.setRecAction('Parameterize the constant block'); mdladvObj.setCheckResultStatus(false); else ft.setSubResultStatusText(['Check has passed. No constant blocks'... ' with numeric values were found.']); ft.setSubResultStatus('pass'); mdladvObj.setCheckResultStatus(true); end ft.setSubBar(0); result{end+1} = ft;
Закройте Model Advisor и вашу модель, если любой открыт.
В Командном окне, введите:
Advisor.Manager.refresh_customizations
Из окна MATLAB выберите New > Simulink Model, чтобы открыть новое окно модели Simulink.
В окне модели Simulink создайте два блока Константа по имени Const_one и Const_1. Щелкните правой кнопкой по блоку, выберите Block Parameters и присвойте Constant value можно следующим образом:
Для Const_one, установленного значение к one
.
Для Const_1, установленного значение к 1
.
Сохраните свою модель как example2_qs
Во вкладке Modeling выберите Model Advisor. Диалоговое окно System Selector ― Model Advisor открывается. Нажмите OK. Model Advisor открывается.
На левой панели выберите By Product > Demo > Check Constant block usage.
Если папка By Product не отображена в окне Model Advisor, выберите Settings Preferences Show By Product Folder.
Выберите Run This Check. Проверка Model Advisor приводит к сбою для блока Const_1 и отображений Recommended Action.
Следующие команды в sl_customization.m
файл создает правую панель в Model Advisor.
Check Constant block usage
rec.Title = 'Check Constant block usage'; rec.TitleTips = ['Fail if Constant block value is a number; Pass if' ... ' Constant block value is a letter'];
ft.setInformation(['This check looks for constant blocks that'... ' use numeric values']); ft.setSubResultStatusText(['Check has failed. The following '... 'Constant blocks have numeric values:']); ft.setListObj(blk_with_value); ft.setSubResultStatus('warn'); ft.setRecAction('Parameterize the constant block');
Следуйте за Recommended Action для фиксации не пройдено блока Constant. В диалоговом окне Model Advisor:
Дважды кликните the example2_qs/Const_1
гиперссылка.
Измените Constant value в two
, или нечисловое значение.
Повторно выполните проверку Model Advisor. Оба Постоянных блока теперь передают проверку.
В этом примере показано, как создать передачу/сбой Model Advisor, сверяются с действием фиксации. В этом примере Model Advisor проверяет блоки Константа. Если значение блока Constant является числовым, сбои проверки. Model Advisor также настраивается, чтобы создать действие фиксации для не пройдено проверок.
В вашей рабочей папке обновите sl_customization.m
файл. Этот файл содержит три функции, каждая из которых используют шаблон формата Model Advisor:
defineModelAdvisorChecks
— Задает проверку, создает входные параметры и задает действие фиксации.
simpleCallback
— Создает функцию обратного вызова проверки, которая находит блоки Константа с числовыми значениями.
simpleActionCallback
— Создает фиксацию для блоков Константа, которые приводят проверку к сбою.
function sl_customization(cm) % --- register custom checks cm.addModelAdvisorCheckFcn(@defineModelAdvisorChecks); % --- defineModelAdvisorChecks function function defineModelAdvisorChecks mdladvRoot = ModelAdvisor.Root; rec = ModelAdvisor.Check('exampleCheck'); rec.Title = 'Check Constant block usage'; rec.TitleTips = ['Fail if Constant block value is a number; Pass if '... 'Constant block value is a letter']; rec.setCallbackFcn(@SimpleCallback,'None','StyleOne') % --- input parameters rec.setInputParametersLayoutGrid([1 1]); inputParam1 = ModelAdvisor.InputParameter; inputParam1.Name = 'Text entry example'; inputParam1.Value='VarNm'; inputParam1.Type='String'; inputParam1.Description='sample tooltip'; inputParam1.setRowSpan([1 1]); inputParam1.setColSpan([1 1]); rec.setInputParameters({inputParam1}); % -- set fix operation myAction = ModelAdvisor.Action; myAction.setCallbackFcn(@simpleActionCallback); myAction.Name='Fix Constant blocks'; myAction.Description=['Click the button to update all blocks with'... ' Text entry example']; rec.setAction(myAction); mdladvRoot.publish(rec, 'Demo'); % --- SimpleCallback function that checks constant blocks function result = SimpleCallback(system) mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system); result = {}; all_constant_blk=find_system(system,'LookUnderMasks','all',... 'FollowLinks','on','BlockType','Constant'); blk_with_value=find_system(all_constant_blk,'RegExp','On','Value','^[0-9]'); ft = ModelAdvisor.FormatTemplate('ListTemplate'); ft.setInformation(['This check looks for constant blocks that'... ' use numeric values']); if ~isempty(blk_with_value) ft.setSubResultStatusText(['Check has failed. The following '... 'Constant blocks have numeric values:']); ft.setListObj(blk_with_value); ft.setSubResultStatus('warn'); ft.setRecAction('Parameterize the constant block'); mdladvObj.setCheckResultStatus(false); mdladvObj.setActionEnable(true); else ft.setSubResultStatusText(['Check has passed. No constant blocks'... 'with numeric values were found.']); ft.setSubResultStatus('pass'); mdladvObj.setCheckResultStatus(true); end ft.setSubBar(0); result{end+1} = ft; % --- creates SimpleActionCallback function that fixes failed check function result = simpleActionCallback(taskobj) mdladvObj = taskobj.MAObj; result = {}; system = getfullname(mdladvObj.System); % Get the string from the input parameter box. inputParams = mdladvObj.getInputParameters; textEntryEx = inputParams{1}.Value; all_constant_blk=find_system(system,'LookUnderMasks','all',... 'FollowLinks','on','BlockType','Constant'); blk_with_value=find_system(all_constant_blk,'RegExp','On','Value','^[0-9]'); ft = ModelAdvisor.FormatTemplate('TableTemplate'); % Define table col titles ft.setColTitles({'Block','Old Value','New Value'}) for inx=1:size(blk_with_value) oldVal = get_param(blk_with_value{inx},'Value'); ft.addRow({blk_with_value{inx},oldVal,textEntryEx}); set_param(blk_with_value{inx},'Value',textEntryEx); end ft.setSubBar(0); result = ft; mdladvObj.setActionEnable(false);
Закройте Model Advisor и вашу модель, если любой открыт.
В командной строке, введите:
Advisor.Manager.refresh_customizations
Из Командного окна выберите New > Simulink Model, чтобы открыть новую модель.
В окне модели Simulink создайте два блока Константа по имени Const_one и Const_1. Щелкните правой кнопкой по блоку, выберите Block Parameters и присвойте Constant value можно следующим образом:
Для Const_one, установленного значение к one
.
Для Const_1, установленного значение к 1
.
Сохраните свою модель как example3_qs
.
Во вкладке Modeling выберите Model Advisor. Диалоговое окно System Selector ― Model Advisor открывается. Нажмите OK. Model Advisor открывается.
На левой панели выберите By Product > Demo > Check Constant block usage.
Если папка By Product не отображена в окне Model Advisor, выберите Settings Preferences Show By Product Folder.
Выберите Run This Check. Проверка Model Advisor перестала работать для блока Const_1.
Следующие команды в sl_customization.m
файл создает правую панель в Model Advisor.
Check Constant block usage
rec.Title = 'Check Constant block usage'; rec.TitleTips = ['Fail if Constant block value is a number; Pass if '... 'Constant block value is a letter']; rec.setInputParametersLayoutGrid([1 1]); inputParam1 = ModelAdvisor.InputParameter; inputParam1.Name = 'Text entry example'; inputParam1.Value='VarNm'; inputParam1.Type='String'; inputParam1.Description='sample tooltip'; inputParam1.setRowSpan([1 1]); inputParam1.setColSpan([1 1]); rec.setInputParameters({inputParam1});
myAction.Name='Fix Constant blocks'; myAction.Description=['Click the button to update all blocks with'... 'Text entry example'];
Поле Model Advisor имеет кнопку Fix Constant blocks в разделе Action диалогового окна Model Advisor.
В диалоговом окне Model Advisor введите нечисловое значение в поле параметра Text entry example в. В этом примере значением является VarNm
.
Нажмите Fix Constant blocks. Constant block value Const_1 изменяется от 1 до нечислового значения, которое вы ввели. Раздел Result диалогового окна перечисляет Старое Значение и Новое Значение блока Const_1.
Следующие команды в sl_customization.m
файл создает правую панель в Model Advisor.
Action
ft = ModelAdvisor.FormatTemplate('TableTemplate'); ft.setColTitles({'Block','Old Value','New Value'}) for inx=1:size(blk_with_value) oldVal = get_param(blk_with_value{inx},'Value'); ft.addRow({blk_with_value{inx},oldVal,textEntryEx}); set_param(blk_with_value{inx},'Value',textEntryEx); end
В диалоговом окне Model Advisor нажмите Run This Check. Оба постоянных блока теперь передают проверку.
В этом примере показано, как создать проверку Model Advisor, результаты которой собраны в группу, такую как блоки в подсистеме, которые нарушают проверку. Когда проверка не нарушена, результаты содержат описание проверки и состояние результата. Когда проверка нарушена, результаты содержат описание проверки, состояние результата и рекомендуемое действие, чтобы устранить проблему. Этот метод рекомендуется при создании пользовательских проверок Model Advisor.
Можно рассмотреть результаты в Model Advisor путем выбора:
View By> Recommended Action ─, Когда проверка нарушена, это представление, показывает список элементов модели, которые нарушают проверку. Когда нет никакого нарушения, это представление предоставляет краткое описание, утверждая, что проверка не была нарушена.
View By> Subsystem ─ Это представление показывает таблицу элементов модели, которые нарушают проверку, организованную моделью или подсистемой (когда применимый).
View By> Block ─ Это представление предоставляет список нарушений проверки для каждого блока.
Когда проверка не передает, результаты включают гиперссылку на каждый элемент модели, который нарушает проверку. Используйте эти гиперссылки, чтобы легко определить местоположение областей в вашей модели или подсистеме.
Чтобы создать индивидуально настраиваемое сверяются с подробным результатом, представленным как набор:
В вашей рабочей папке обновите sl_customization.m
файл, как показывает в примере. Этот файл содержит три функции, специфичные для создания проверки, результаты которой представлены на Model Advisor как набор:
defineModelAdvisorChecks
─ Задает проверку, и зафиксируйте действия. В этой функции стилем коллбэка является 'DetailStyle
', который является шаблоном формата Model Advisor, который представляет результаты как набор в Model Advisor.
SampleNewCheckStyleCallback
─ Создает функцию обратного вызова проверки, которая находит блоки, имя которых не расположено ниже блока. Функция использует имя и пары значения, чтобы собрать результаты в наборы. Смотрите Функцию обратного вызова Проверки для Подробных Наборов Результата.
sampleActionCB0
─ Создает фиксацию для блоков, имя которых не расположено ниже блока. В этом примере это перемещает имя ниже блока. Смотрите Функцию обратного вызова Действия для Подробных Наборов Результата.
function sl_customization(cm) % ----------------------------- % Register custom checks cm.addModelAdvisorCheckFcn(@defineModelAdvisorChecks); % ----------------------------- % Define Model Advisor check "Check whether block names appear % below blocks". function defineModelAdvisorChecks mdladvRoot = ModelAdvisor.Root; rec = ModelAdvisor.Check('com.mathworks.sample.Check0'); rec.Title = 'Check whether block names appear below blocks (recommended check style)'; rec.TitleTips = 'Example new style callback (recommended check style)'; rec.setCallbackFcn(@SampleNewCheckStyleCallback,'None', 'DetailStyle'); % set fix operation myAction0 = ModelAdvisor.Action; myAction0.setCallbackFcn(@sampleActionCB0); myAction0.Name='Make block names appear below blocks'; myAction0.Description='Click the button to place block names below blocks'; rec.setAction(myAction0); mdladvRoot.publish(rec, 'Demo'); % publish check into Demo group. % ----------------------------- % Callback function for check "Check whether block names appear % below blocks". 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); % ----------------------------- % Action callback function for check "Check whether block names % appear below blocks". 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 и вашу модель, если любой открыт.
В окне команды MATLAB, введите:
Advisor.Manager.refresh_customizations
Из окна MATLAB откройте модель sldemo_fuelsys
.
В окне модели Simulink:
В топ-модели щелкните правой кнопкой по Engine Speed
блокируйте и выберите Rotate & Flip> Flip Block Name.
Откройте fuel_rate_control
подсистема. Щелкните правой кнопкой по validate_sample_time
блокируйте и выберите Rotate & Flip> Flip Block Name.
Возвратитесь к топ-модели и сохраните как example_sldemo_fuelsys
.
Во вкладке Modeling выберите Model Advisor. Диалоговое окно System Selector ― Model Advisor открывается. Нажмите OK. Model Advisor открывается.
На левой панели выберите By Product > Demo > Check whether block names appear below blocks.
Если папка By Product не отображена в окне Model Advisor, выберите Settings Preferences Show By Product Folder.
Выберите Run This Check. Проверка Model Advisor перестала работать для блоков.
Рассмотрите результаты путем выбора одной из опций View by.
Отчет обеспечивает рекомендуемое действие для каждой проверки. Можно кликнуть по пути к гиперссылке, чтобы открыть блок нарушения в редакторе моделей. Например,
Следующие команды в sl_customization.m
файл создает правую панель в Model Advisor.
Check title and subtitle
rec.Title = 'Check whether block names appear below blocks (recommended check style)'; rec.TitleTips = 'Example new style callback (recommended check style)';
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.';
myAction0.Name='Make block names appear below blocks'; myAction0.Description='Click the button to place block names below blocks';
Следуйте за рекомендуемым действием для фиксации блоков нарушения при помощи одного из этих методов:
Обновите каждое нарушение индивидуально путем двойного клика по гиперссылке, чтобы открыть блок. Щелкните правой кнопкой по блоку и выберите Rotate & Flip> Flip Block Name.
Нажмите кнопку Make block names appear below blocks. Model Advisor автоматически фиксирует проблемы в модели. Заметьте, что кнопка отображается серым после того, как нарушения фиксируются.
Сохраните модель и повторно выполните проверку Model Advisor. Передачи проверки.
Следующие команды в sl_customization.m
файл создает правую панель в Model Advisor.
Result
ElementResults.Description = 'Identify blocks where the name is not displayed below the block.'; ElementResults.Status = 'All blocks have names displayed below the block.';
ModelAdvisor.Check
| ModelAdvisor.Check.CallbackContext
| ModelAdvisor.FormatTemplate
| ModelAdvisor.FormatTemplate