为了检查模型是否符合您公司的标准和建模指南,您可以自定义model Advisor。这个例子向您展示了如何向Model Advisor添加自定义检查,并删除您不需要的运输检查。您可以保存自定义配置并将其部署到开发组中的其他人。部署自定义配置允许您的开发小组使用相同的检查集来检查模型。
这个例子定义了三种类型的自定义检查:
通过/失败检查,将结果按块和子系统分组,并提供固定操作。
一种验证模型配置参数设置的检查。
为块参数设置指定约束并提供固定操作的检查。
在本例中,您将向Model Advisor添加三个检查,并删除所有运输检查。
1.将当前文件夹设置为可写目录。
2.复制脚本prepare_cust_chk_code
到当前文件夹并运行脚本。该脚本将此示例所需的文件复制到当前文件夹。
拷贝文件(fullfile (matlabroot,“例子”,“slcheck”,“主要”,“prepare_cust_chk_code.m”),...“prepare_cust_chk_code.m”,“f”);运行(“prepare_cust_chk_code.m”);
3.其中一份文件,sl_customization.m
,包括sl_customization
定义自定义检查的函数。打开并检查sl_customization.m
文件。
函数sl_customization (cm)% SL_CUSTOMIZATION -模型顾问定制演示。版权所有2019 The MathWorks, Inc.%登记自定义支票cm.addModelAdvisorCheckFcn (@defineModelAdvisorChecks);% -----------------------------定义模型顾问检查% -----------------------------函数defineModelAdvisorChecks defineDetailStyleCheck;defineConfigurationParameterCheck;defineBlockConstraintCheck;
的sl_customization
函数接受自定义管理器对象。自定义管理器对象包括addModelAdvisorCheckFcn
注册自定义支票的方法。此方法的输入是函数的句柄(defineModelAdvisorChecks
).此函数包含对对应于三个自定义检查的三个检查定义函数的调用。
的defineDetailStyleCheck.m
文件包含defineDetailStyleCheck
函数,该函数定义了一个检查,该检查列出了未在块下面显示其名称的块。该检查提供了一个修复程序,将这些名称移到块下面。这张支票的名字是检查块名称是否出现在块的下面.打开并检查defineDetailStyleCheck.m
文件。
函数mdladvRoot = ModelAdvisor.Root;创建ModelAdvisor。检查对象并设置属性。rec = ModelAdvisor。检查(“com.mathworks.sample.detailStyle”);rec.Title ='检查区块名称是否出现在区块下方';rec.TitleTips =“检查块名称的位置”;rec.setCallbackFcn (@DetailStyleCallback“没有”,“DetailStyle”);创建ModelAdvisor。行动object for setting fix operation.myAction = ModelAdvisor.Action;myAction.setCallbackFcn (@ActionCB);myAction。Name =“让区块名称出现在区块下方”;myAction。描述=“点击按钮将区块名称放置在区块下方”;rec.setAction (myAction);mdladvRoot.publish (rec,“演示”);%发布检查到Demo组。结束% -----------------------------此回调函数使用DetailStyle CallbackStyle类型。% -----------------------------函数mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(金宝appsystem);%获取对象查找所有名称没有出现在块下面的块violationBlks = find_system(系统,“类型”,“块”,...“NamePlacement”,“替代”,...“ShowName”,“上”);如果isempty(violationBlks) ElementResults = ModelAdvisor.ResultDetail;ElementResults。IsInformer = true;ElementResults。描述=“识别没有显示名称的区块。”;ElementResults。状态=所有块的下面都显示有名称;mdladvObj.setCheckResultStatus(真正的);其他的ElementResults(元素个数(violationBlks)) = ModelAdvisor.ResultDetail;为i = 1:元素个数(ElementResults) ElementResults (i) .setData (violationBlks{我});ElementResults(我)。描述=“识别没有显示名称的区块。”;ElementResults(我)。状态='以下块的名称不显示在块下面:';ElementResults(我)。RecAction =“更改位置,使块名称位于块的下方。”;结束mdladvObj.setCheckResultStatus(假);mdladvObj.setActionEnable(真正的);结束CheckObj.setResultDetails (ElementResults);结束% -----------------------------此动作回调函数更改块名称的位置。% -----------------------------函数result = ActionCB(taskobj) mdladvObj = taskobj. maobj;checkObj = taskobj.Check;resultDetailObjs = checkObj.ResultDetails;为i = 1:元素个数(resultDetailObjs)为他们每一个人采取一些行动块= Sim金宝appulink.ID.getHandle (resultDetailObjs(我). data);set_param(块,“NamePlacement”,“正常”);结束result = ModelAdvisor。文本(“更改了位置,使块名称位于块的下方。”);mdladvObj.setActionEnable(假);结束
此支票使用setCallbackFcn
类型的DetailStyle
.应用此样式会生成默认格式,因此不必使用ModelAdvisor。FormatTemplate
或其他Model Advisor格式化api来格式化出现在Model Advisor中的结果。有关如何创建这种类型的检查定义函数的详细信息,请参见修复模型以符合您使用模型顾问指定的条件.
的defineConfigurationParameterCheck.m
文件包含defineConfigurationParameterCheck
check定义函数,它定义了一个检查,识别可能影响MISRA C:2012兼容代码生成的模型配置参数设置。这张支票的名字是检查型号配置参数.
这种检查类型需要一个支持的XML数据文件,其中包含您想金宝app要检查的模型配置参数设置。该文件必须在MATLAB路径中。对于本例,该文件为configurationParameterDataFile.xml。
有关如何创建此检查类型的详细信息,请参见创建模型顾问检查模型配置参数.
打开并检查defineConfigurationParameterCheck.m
文件.
函数defineConfigurationParameterCheck创建ModelAdvisor。检查对象并设置属性。rec = ModelAdvisor。检查(“com.mathworks.sample.configurationParameter”);rec.Title =“检查模型配置参数”;rec.setCallbackFcn(@(系统)(Advisor.authoring.CustomCheck.checkCallback...(系统)),“没有”,“StyleOne”);rec.TitleTips =“确定可能影响MISRA C:2012合规代码生成的配置参数。”;%——data文件输入参数rec.setInputParametersLayoutGrid ([1]);inputParam1 = ModelAdvisor.InputParameter;inputParam1。Name =“数据文件”;inputParam1。值=“configurationParameterDataFile.xml”;inputParam1。类型=“字符串”;inputParam1。描述=' XML数据文件的名称或完整路径。';inputParam1。setRowSpan ([1]);inputParam1。setColSpan ([1]);rec.setInputParameters ({inputParam1});设置修复操作act = ModelAdvisor.Action;act.setCallbackFcn(@(任务)(Advisor.authoring.CustomCheck.actionCallback...(任务)));的行为。Name =“修改设置”;的行为。描述=“修改模型配置设置。”;rec.setAction(行为);%发布检查到Demo组。mdladvRoot = ModelAdvisor.Root;mdladvRoot.publish (rec,“演示”);结束
的defineBlockConstraintCheck.m
文件包含defineBlockConstraintCheck检查定义函数,该函数定义了一个检查,用于标识没有矩形形状的逻辑运算符块。这张支票的名字是检查逻辑运算符块的图标形状.
这种检查类型支持编辑时检查,并需金宝app要一个包含块约束信息的支持XML文件。这个XML文件必须在MATLAB路径上。对于本例,该文件名为blockConstraintDataFile.xml。
有关此检查类型的更多信息,请参见为支持或不支持的块和参数定义模型顾问检查金宝app.
打开并检查defineBlockConstraintChec
k.m
文件.
函数defineBlockConstraintCheck rec = Advisor.authoring.createBlockConstraintCheck(“com.mathworks.sample.blockConstraint”);rec.Title =“检查逻辑运算符块的图标形状”;rec.setCallbackFcn(@(系统)(Advisor.authoring.CustomCheck.checkCallback...(系统)),“没有”,“StyleOne”);rec.TitleTips =检查逻辑运算符块的图标形状。逻辑运算符的图标形状应该是矩形的。;%——data文件输入参数rec.setInputParametersLayoutGrid ([1]);inputParam1 = ModelAdvisor.InputParameter;inputParam1。Name =“数据文件”;inputParam1。值=“blockConstraintDataFile.xml”;inputParam1。类型=“字符串”;inputParam1。描述=' XML数据文件的名称或完整路径。';inputParam1。setRowSpan ([1]);inputParam1。setColSpan ([1]);rec.setInputParameters ({inputParam1});rec.金宝appSupportExclusion = false;rec.金宝appSupportLibrary = true;%发布检查到Demo组。mdladvRoot = ModelAdvisor.Root;mdladvRoot.publish (rec,“演示”);结束
1.为了让您的自定义检查在Model Advisor中可见,您必须刷新Model Advisor检查信息缓存。在MATLAB命令提示符下,输入以下命令:
Advisor.Manager.refresh_customizations ();
2.打开示例模型。
open_system (“AdvisorCustomizationExample.slx”);
3.在建模选项卡,打开模型的顾问.您也可以通过在MATLAB命令提示符中输入以下命令来打开Model Advisor:
modeladvisor (“AdvisorCustomizationExample.slx”);
正在更新Model Advisor缓存…模型Advisor缓存已更新。对于新的定制,要更新缓存,请使用Advisor.Manager。refresh_customizations方法。
Model Advisor正在删除现有的报表。
4.遵守自定义检查产品>演示文件夹中。
在检查定义函数中,发布
命令将检查添加到产品>演示文件夹中。注意,如果您已经有一个默认配置集,那么检查不会出现在Model Advisor中。通过选择恢复默认传送配置设置>恢复默认配置.
注意检查块名称是否出现在块的下面和检查型号配置参数检查包含行动选项框与修复任何检查违规。在自定义检查定义文件中,将修复作为操作回调函数的一部分提供。有关如何定义自定义检查的更多信息,请参见定义您自己的自定义模型顾问检查.
在模型画布上,观察到Unit Delay和Logical Operator块被高亮显示为黄色,因为编辑时检查是打开的。这些块包含检查违规。编辑时检查允许您交互地检查并修复模型遵从性问题。
要修复这些违规,请将鼠标悬停在一个突出显示的块上并单击黄色图标。一个诊断盒修复按钮打开。
要打开或关闭编辑时检查,请在建模选项卡上,选择模型顾问>编辑时检查.
要指定哪些检查要包含在模型顾问中,哪些检查要用于编辑时检查,请使用模型顾问配置编辑器。
1.要打开配置编辑器,请在建模选项卡上,选择模型顾问配置编辑器.
2.控件中的选项中进行选择,以添加或删除支票和文件夹编辑模型顾问配置编辑器的部分。
3.要保存配置,请选择保存.这时会打开一个窗口,提示您将配置保存为.json文件。对于本例,您不必将配置保存为对应的demoConfiguration.json
此示例附带文件。您以前将此文件复制到工作文件夹中。
4.关闭模型和模型顾问配置编辑器。
bdclose;
当您保存一个配置时,您会得到一个提示,询问您是否希望将该配置保存为默认配置。设置默认配置允许模型顾问在每次打开模型顾问时使用该配置。有关更多信息,请参见使用模型顾问配置编辑器自定义模型顾问.
1.打开示例模型。
open_system (“AdvisorCustomizationExample.slx”);
2.打开模型顾问。通过选择加载自定义配置>加载配置.在开放对话框中,导航到并选择demoConfiguration.json
文件。或者在MATLAB命令提示符下输入以下命令:
modeladvisor (“AdvisorCustomizationExample.slx”,“配置”,...“demoConfiguration.json”);
Model Advisor正在删除现有的报表。
3.弹出“警告”对话框。点击删除现有报告并继续.
模型顾问只包含产品>演示文件夹中包含三个自定义检查。
3.单击演示文件夹并单击运行选中的检查。
4.单击检查块名称是否出现在块的下面检查。此检查包含警告。要应用修复程序并解决警告,请在右侧窗格中单击使块名称出现在块的下面按钮。
5.单击检查型号配置参数检查。此检查包含警告。若要应用修复程序并解决警告,请单击修改设置按钮。
6.单击检查逻辑运算符块的图标形状检查。此检查包含一个警告,但没有自动修复。要应用修复程序,请遵循推荐的操作。
7.关闭模型和模型顾问。
bdclose;
8.从工作目录中删除文件。在命令类型处输入以下命令,刷新Model Advisor检查信息缓存:
Advisor.Manager.refresh_customizations
您可以以编程方式运行Model Advisor配置,然后在Model Advisor中打开结果。
1.调用ModelAdvisor.run
函数。
SysResultObjArray = ModelAdvisor.run({“AdvisorCustomizationExample”},...“配置”,“demoConfiguration.json”);
2.在Model Advisor中查看结果:
viewReport (SysResultObjArray {1},“马”)
3.点击继续在对话框中。您现在可以应用修复程序并解决警告,就像上一节末尾所做的那样。
4.关闭模型和模型顾问。
bdclose;
5.从工作目录中删除文件。在命令类型处输入以下命令,刷新Model Advisor检查信息缓存:
Advisor.Manager.refresh_customizations