检查模型是否满足贵公司的标准和建模指南,你可以定制模型顾问。这个例子向您展示了如何向模型中添加自定义检查顾问和删除航运你不需要检查。你可以保存自定义配置并将其部署到别人在你的开发团队。部署自定义配置允许您的开发团队使用同一组检查评估模型。
这个例子定义了这三种类型的自定义检查:
通过/失败结果的检查组织块和子系统,并提供修复行动
检查验证模型配置参数设置
检查指定块的约束参数设置和提供了一个解决行动
在本例中,您将向模型中添加三个检查顾问并删除所有航运检查。
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年版权MathWorks公司。%注册自定义检查cm.addModelAdvisorCheckFcn (@defineModelAdvisorChecks);% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -%定义模型顾问检查% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -函数defineModelAdvisorChecks defineDetailStyleCheck;defineConfigurationParameterCheck;defineNewBlockConstraintCheck;
的sl_customization
函数接受一个定制管理器对象。包括定制管理器对象addModelAdvisorCheckFcn
注册自定义检查的方法。这个方法是一个句柄的输入函数(defineModelAdvisorChecks
)。这个函数包含调用三个检查定义函数对应的三个自定义检查。
的defineDetailStyleCheck.m
文件包含defineDetailStyleCheck
定义函数,它定义了一个检查列表模块的名字不显示以下的块。这个检查提供了一种解决移动块以下这些人的名字。这张支票的名字检查块的名字是否出现下面的块。打开并检查defineDetailStyleCheck.m
文件。
函数defineDetailStyleCheck mdladvRoot = ModelAdvisor.Root;%创建ModelAdvisor。检查对象,并设置属性。rec = ModelAdvisor.Check (“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.Description =“点击下面的按钮将块名称块”;rec.setAction (myAction);mdladvRoot.publish (rec,“演示”);%发布查看演示组。结束% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -%这个回调函数使用DetailStyle CallbackStyle类型。% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -函数DetailStyleCallback(系统,CheckObj) mdladvObj = Simul金宝appink.ModelAdvisor.getModelAdvisor(系统);%得到对象%找到所有阻塞的名字没有出现下面violationBlks = find_system(系统,“类型”,“块”,…“NamePlacement”,“替代”,…“ShowName”,“上”);如果isempty (violationBlks) ElementResults = ModelAdvisor.ResultDetail;ElementResults。IsInformer = true;ElementResults。描述=“识别模块,下面显示的名字不是块。”;ElementResults。状态=所有块名称显示下面的块。;mdladvObj.setCheckResultStatus(真正的);其他的为i = 1:元素个数(violationBlks) ElementResults(我)= ModelAdvisor.ResultDetail;结束为i = 1:元素个数(ElementResults) ModelAdvisor.ResultDetail.setData (ElementResults(我),“席德”我,violationBlks {});ElementResults(我)。描述=“识别模块,下面显示的名字不是块。”;ElementResults(我)。状态=下面的模块名称,不显示以下模块:“;ElementResults(我)。RecAction =“改变位置,这样下面的块的名字是块。”;结束mdladvObj.setCheckResultStatus(假);mdladvObj.setActionEnable(真正的);结束CheckObj.setResultDetails (ElementResults);结束% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -%这个动作回调函数改变块的位置名称。% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -函数结果= ActionCB (taskobj) mdladvObj = taskobj.MAObj;checkObj = taskobj.Check;resultDetailObjs = checkObj.ResultDetails;为i = 1:元素个数(resultDetailObjs)%为他们每个人采取行动块= Sim金宝appulink.ID.getHandle (resultDetailObjs(我). data);set_param(块,“NamePlacement”,“正常”);结束结果= ModelAdvisor.Text (“改变了位置,这样下面的块的名字是块。”);mdladvObj.setActionEnable(假);结束
这张支票使用setCallbackFcn
类型的DetailStyle
。应用这种风格产生的默认格式,所以您不需要使用ModelAdvisor.FormatTemplate
或其他顾问格式化api模型格式的结果出现在模型顾问。为更多的信息关于如何创建这种类型的检查定义函数,看看修复一个模型符合您指定的条件与模型顾问。
的defineConfigurationParameterCheck.m
文件包含defineConfigurationParameterCheck
检查定义函数,它定义了一个检查,识别模型配置参数设置,可能会影响MISRA - C: 2012兼容的代码生成。这张支票的名字检查模型配置参数。
这种检查需要一个支持XML文件,其中包含数据模型配置参金宝app数设置您想要检查。这个文件必须在MATLAB的道路。对于这个示例,该文件configurationParameterDataFile.xml。
有关如何创建这个检查类型的更多信息,见创建模型顾问检查模型配置参数。
打开并检查defineConfigurationParameterCheck.m
文件。
函数defineConfigurationParameterCheck%创建ModelAdvisor。检查对象,并设置属性。rec = ModelAdvisor.Check (“com.mathworks.sample.configurationParameter”);rec.Title =“检查模型配置参数”;rec.setCallbackFcn(@(系统)(Advisor.authoring.CustomCheck.checkCallback…(系统)),“没有”,“StyleOne”);rec.TitleTips =识别配置参数,可能会影响MISRA - C: 2012兼容的代码生成。;% - - -数据文件输入参数rec.setInputParametersLayoutGrid ([1]);inputParam1 = ModelAdvisor.InputParameter;inputParam1。Name =“数据文件”;inputParam1。值=“configurationParameterDataFile.xml”;inputParam1。类型=“字符串”;inputParam1。描述=的名字或XML数据文件的完整路径。;inputParam1。setRowSpan ([1]);inputParam1。setColSpan ([1]);rec.setInputParameters ({inputParam1});%——设置修复操作行动= ModelAdvisor.Action;act.setCallbackFcn(@(任务)(Advisor.authoring.CustomCheck.actionCallback…(任务)));的行为。Name =“修改设置”;的行为。描述=修改模型配置设置。;rec.setAction(行为);%发布查看演示组。mdladvRoot = ModelAdvisor.Root;mdladvRoot.publish (rec,“演示”);结束
的defineNewBlockConstraintCheck.m
文件包含defineNewBlockConstraintCheck
检查定义函数,它定义了一个检查,确定逻辑算符块没有一个矩形形状。这张支票的名字检查逻辑算符的图标形状块。
这张支票类型支持编辑时间检查。金宝app这张支票类型的更多信息,请参阅定义模型顾问检查支持和不支持的模块和参数金宝app。
打开并检查defineNewBlockConstraintChec
k。m
文件。
函数defineNewBlockConstraintCheck rec = Advisor.authoring.createBlockConstraintCheck (“com.mathworks.sample.blockConstraint”,…“约束”,@createBlockConstraints);%约束创建块约束检查的定义的一部分rec.Title =检查逻辑算符的图标形状块的;rec.TitleTips =“检查图标的形状块逻辑运算符。逻辑操作符图标的形状应该是矩形。;%发布查看演示组。mdladvRoot = ModelAdvisor.Root;mdladvRoot.publish (rec,“演示”);结束函数约束= createBlockConstraints ()%创建块约束c1 = Advisor.authoring.PositiveBlockParameterConstraint;c1。ID =“ID_c1”;c1。BlockType =“逻辑”;c1。ParameterName =“IconShape”;c1。金宝appSupportedParameterValues = {“矩形”};c1。ValueOperator =“情商”;约束= {c1};结束
的createBlockConstraints
函数定义了块约束c1
。的Advisor.authoring.createBlockConstraintCheck
函数有一个“约束”
名称-值参数,调用约束创建函数createBlockConstraints
。
1。为了您的自定义模型中检查可见顾问,你必须刷新缓存模型顾问检查信息。在MATLAB命令提示符,键入这个命令:
Advisor.Manager.refresh_customizations ();
2。打开示例模型。
open_system (“AdvisorCustomizationExample.slx”);
3所示。在建模选项卡,打开模型的顾问。你也可以打开模型顾问通过输入这个命令在MATLAB命令提示符:
modeladvisor (“AdvisorCustomizationExample.slx”);
更新缓存模型顾问……模型顾问缓存更新。新定制,更新缓存,使用Advisor.Manager。refresh_customizations方法。
4所示。观察的自定义检查通过产品>演示文件夹中。
检查函数定义的发布
命令添加了检查通过产品>演示文件夹中。请注意,如果您已经有一个默认的配置设置,检查没有出现在模型顾问。恢复默认发货配置选择设置>恢复默认配置。
请注意,检查块的名字是否出现下面的块和检查模型配置参数检查包含一个行动框的选项修复任何检查违规行为。在您的自定义检查定义文件,您提供修复作为行动的一部分,回调函数。如何自定义检查的更多信息,参见定义您自己的自定义模型顾问检查。
的检查逻辑算符的图标形状块检查包含一个建议的行动支持编辑金宝app时间检查。您可以使用修复按钮编辑时间检查诊断窗口做出改变和地址块约束违反。更多信息关于如何定义块约束检查,看看定义模型顾问检查支持和不支持的模块和参数金宝app。
模型的画布上,观察到单位延迟和逻辑操作符块用黄色突出显示,因为编辑时间检查。这些块包含检查违规行为。编辑时间检查允许交互式检查并修复您的模型对合规问题。
修复这些违规行为,强调块上空悬停,点击黄色的图标。有一个诊断窗口修复按钮打开。
打开或关闭编辑时间检查,建模选项卡上,选择模型顾问>编辑时间检查。
在模型中指定检查包括顾问并检查用于编辑时间检查,使用模型顾问配置编辑器。
1。打开配置编辑器,建模选项卡上,选择模型顾问>配置编辑器。
2。添加或删除检查和文件夹,选择的选项编辑模型的部分顾问配置编辑器。
3所示。保存配置,选择保存。将打开一个窗口,提示您保存配置为. json文件。对于这个示例,您不必保存配置,是相应的demoConfiguration.json
文件附带这个例子。您之前复制该文件到你的工作目录。
4所示。关闭模型和模型顾问配置编辑器。
bdclose;
当您保存配置,得到一个提示,问你是否要保存配置为默认配置。设置一个默认的配置允许模型顾问使用配置顾问每次你打开模型。有关更多信息,请参见使用模型顾问配置编辑器定制模型顾问。
1。打开示例模型。
open_system (“AdvisorCustomizationExample.slx”);
2。打开模型顾问。加载自定义配置选择设置>加载配置。在开放对话框中,浏览并选择demoConfiguration.json
文件。在MATLAB命令提示符或输入这个命令:
modeladvisor (“AdvisorCustomizationExample.slx”,“配置”,…“demoConfiguration.json”);
3所示。一个警告对话框打开。点击删除现有的报告和继续。
顾问只包含模型通过产品>演示与三个自定义文件夹检查。
3所示。单击演示文件夹,然后单击选择运行检查。
4所示。单击检查块的名字是否出现下面的块检查。这张支票包含警告。应用修复和解决警告,在右边窗格中,单击块名称下面出现按钮。
5。单击检查模型配置参数检查。这张支票包含警告。应用修复和解决警告,点击修改设置按钮。
6。单击检查逻辑算符的图标形状块检查。这张支票包含一个顾问警告,但没有自动修复模型。应用解决方案,按照推荐的行动或使用修复按钮编辑时间检查的建议采取行动。
7所示。关闭模型和模型的顾问。
bdclose;
8。把文件从你的工作目录。刷新缓存模型顾问检查信息通过输入这个命令在命令类型:
Advisor.Manager.refresh_customizations
您可以通过编程的方式运行一个模型顾问配置,然后打开结果模型中的顾问。
1。调用ModelAdvisor.run
函数。
SysResultObjArray = ModelAdvisor.run ({“AdvisorCustomizationExample”},…“配置”,“demoConfiguration.json”);
2。在模型中查看结果顾问:
viewReport (SysResultObjArray {1},“马”)
3所示。点击继续在对话框中。你现在可以应用补丁和解决警告你年底前一节中所做的那样。
4所示。关闭模型和模型的顾问。
bdclose;
5。把文件从你的工作目录。刷新缓存模型顾问检查信息通过输入这个命令在命令类型:
Advisor.Manager.refresh_customizations