このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

モデルアドバイザーへのチェックとタスクの追加

この例では,MATLABベースのAPIを使用してモデルアドバイザーをカスタマイズする方法を説明します。

モデル例を開く

モデル例slvnvdemo_mdladvを開きます。

モデルアドバイザーを開く

[モデル化]タブで[モデルアドバイザー]を選択してモデルアドバイザーを開きます。

[システムセレクター]ダイアログで、[好的]をクリックします。この例では,モデルアドバイザーに以下が含まれています。

  • 非表示の付属のチェック

  • [タスク別],[我的小组2]フォルダー内の新しいチェック

  • 最上位の(我的组)フォルダー

  • 最上位の[我的程序]フォルダー。これには 1.回限りのチェックとサブプロシージャ、[我的sub_程序]が含まれます

カスタムフォルダーの確認

カスタムフォルダー,(我的组)を確認します。

  • 左側のペインで,(我的组)フォルダーをクリックします。

  • 1番目のチェック,[带有输入参数和自动修复能力的示例任务]を選択します。

  • 右側のペインで,(このチェックを実行)をクリックします。

  • モデルアドバイザーの結果エクスプローラーダイアログで結果を確認するには,[結果の探索)をクリックします。

  • 問題を自動修正するには,モデルアドバイザーに戻って右側のペインの(修复块字体)をクリックします。

カスタムプロシージャフォルダーの確認

カスタムフォルダー,[我的程序]を確認します。

  • 左側のペインで,[我的程序]フォルダーをクリックします。

  • 右側のペインで[選択したチェックを実行)をクリックして、プロシージャを実行します。プロシージャはチェックが失敗するまで実行されます。

  • 右側のペインの[アクション]セクションで対応する[修正]ボタンをクリックして,問題を自動修正します。

カスタマイズコードの表示

これらのカスタマイズを実装するには,MATLABパス上にsl_customization.mファイルを作成し,以下を記述します。

函数sl_customization (cm)% SL_CUSTOMIZATION -模型顾问定制演示。%版权所有2005-2017 The MathWorks,Inc。%登记海关支票cm.addModelAdvisorCheckFcn (@defineModelAdvisorChecks);注册自定义工厂组cm.addModelAdvisorTaskFcn (@defineModelAdvisorTasks);%注册自定义任务。cm.addModelAdvisorTaskAdvisorFcn (@defineTaskAdvisor);% -----------------------------%定义模型Advisor任务% -----------------------------函数defineModelAdvisorTasks mdladvRoot=ModelAdvisor.Root;%---样本工厂组rec=ModelAdvisor.FactoryGroup('com.mathworks.sample.factorygroup');rec.DisplayName =“我的组2”;rec.Description =“演示工厂组”; 记录添加检查('com.mathworks.sample.Check1'); 记录添加检查('com.mathworks.sample.Check2'); 记录添加检查('com.mathworks.sample.Check3');mdladvRoot.publish (rec);在按组列表中发布% -----------------------------%定义模型顾问检查% -----------------------------函数defineModelAdvisorChecks mdladvRoot=ModelAdvisor.Root;%——样本检查rec=ModelAdvisor.Check('com.mathworks.sample.Check1');rec.Title ='检查Simu万博1manbetxlink块字体';rec.TitleTips ='示例样式三回调'; rec.setcallbackpcn(@SampleStyleThreeCallback,“没有”“StyleThree”);rec.setInputParametersLayoutGrid (2 [3]);%设置输入参数inputParam1=ModelAdvisor.InputParameter;inputParam1.Name=“跳过字体检查。”;inputParam1。类型=“Bool”; inputParam1.Value=false;inputParam1.说明=“示例工具提示”; inputParam1.setRowSpan([1]);inputParam1.setColSpan([1]);inputParam2=ModelAdvisor.InputParameter;inputParam2.Name=“标准字体大小”;inputParam2。值=“12”;inputParam2。类型=“字符串”; inputParam2.说明=“示例工具提示”;inputParam2。setRowSpan (2 [2]);inputParam2。setColSpan ([1]);inputParam3 = ModelAdvisor.InputParameter;inputParam3。Name =“有效的字体”;inputParam3。类型=组合框的;inputParam3。描述=“示例工具提示”; inputParam3.Entries={“Arial”“Arial黑”}; inputParam3.setRowSpan([2]);inputParam3.setColSpan([2]);rec.setInputParameters({inputParam1,inputParam2,inputParam3});设置固定操作myAction = ModelAdvisor.Action;myAction.setCallbackFcn (@sampleActionCB);myAction。Name =“修复块字体”;myAction。描述='点击按钮以指定字体更新所有方块'; 记录设置动作(myAction);rec.ListViewVisible=true;mdladvRoot.publish(rec,“演示”);%发布签入演示组。%——样本检查2rec=ModelAdvisor.Check('com.mathworks.sample.Check2');rec.Title =“检查Simu万博1manbetxlink窗口屏幕颜色”;rec.TitleTips ='示例样式一个回调';rec.setCallbackFcn (@SampleStyleOneCallback“没有”“StyleOne”);设置固定操作myAction2=ModelAdvisor.Action;myAction2.setcallbackpcn(@sampleActionCB2);我的行动2.姓名=“修复窗口屏幕颜色”;myAction2。描述=“点击按钮将Simulink窗口屏幕颜色更改为白色”万博1manbetx;rec.setAction (myAction2);mdladvRoot.publish (rec,“演示”);%发布签入演示组。%——样品检查rec=ModelAdvisor.Check('com.mathworks.sample.Check3');rec.Title =“检查模型优化设置”;rec.TitleTips ='示例样式二回调';rec.setCallbackFcn (@SampleStyleTwoCallback“没有”“StyleTwo”);设置固定操作myAction3 = ModelAdvisor.Action;myAction3.setCallbackFcn (@sampleActionCB3);myAction3。Name =“修复模型优化设置”;myAction3。描述='点击按钮打开模型优化设置';rec.setAction (myAction3);mdladvRoot.publish (rec,“演示”);%发布签入演示组。% -----------------------------%定义Model Advisor任务请参阅Model Advisor API文档了解更多细节。% -----------------------------函数mdladvRoot = ModelAdvisor.Root;MAT1 = ModelAdvisor。任务(“com.mathworks.sample.TaskSample1”);MAT1。DisplayName =带有输入参数和自动修复能力的示例任务; MAT1.setCheck('com.mathworks.sample.Check1');mdladvRoot.register (MAT1);MAT2 = ModelAdvisor。任务(“com.mathworks.sample.TaskSample2”);MAT2。DisplayName =的示例任务2; MAT2.setCheck('com.mathworks.sample.Check2'); mdladvRoot.寄存器(MAT2);MAT3=ModelAdvisor.Task(“com.mathworks.sample.TaskSample3”);MAT3。DisplayName =的示例任务3; MAT3.setCheck('com.mathworks.sample.Check3');mdladvRoot.register (MAT3);杂志= ModelAdvisor。集团('com.mathworks.sample.GroupSample');MAG.DisplayName =“我的团队”;MAG.addTask (MAT1);MAG.addTask (MAT2);MAG.addTask (MAT3);mdladvRoot.publish (MAG);%在根目录下发布%定义程序= ModelAdvisor地图。过程('com.mathworks.sample.ProcedureSample');地图。DisplayName =“我的程序”;MAP_sub = ModelAdvisor。过程('com.mathworks.sample.sub_ProcedureSample');MAP_sub。DisplayName =“我的sub_程序”%定义任务MAT4 = ModelAdvisor。任务(“com.mathworks.sample.TaskSample4”);MAT4。DisplayName ='检查Simu万博1manbetxlink块字体'; MAT4.setCheck('com.mathworks.sample.Check1');mdladvRoot.register (MAT4);MAT5 = ModelAdvisor。任务(“com.mathworks.sample.TaskSample5”);MAT5。DisplayName =“检查Simu万博1manbetxlink窗口屏幕颜色”;MAT5.setCheck ('com.mathworks.sample.Check2');mdladvRoot.register (MAT5);MAT6 = ModelAdvisor。任务(“com.mathworks.sample.TaskSample6”); MAT6.DisplayName=“检查模型优化设置”;MAT6.setCheck ('com.mathworks.sample.Check3');mdladvRoot.register (MAT6);%将任务添加到过程中:%添加任务4到MAPMAP.addTask (MAT4);%现在将Task5和Task6添加到MAP_sub地图子任务添加任务(MAT5);地图子任务添加任务(MAT6);%在程序中包含子程序MAP.addProcedure (MAP_sub);mdladvRoot.register (MAP_sub);%在根目录下发布mdladvRoot.publish(地图);%在根目录下发布% -----------------------------%三个回调函数的示例,请参阅Model Advisor API文档了解更多细节。% -----------------------------函数[ResultDescription,ResultDetails]=SampleStyleThreeCallback(系统)ResultDescription={};结果详情={};mdladvObj=Simulink.ModelAdvisor.g万博1manbetxetModelAdvisor(系统);mdladvObj.setCheckResultStatus(true);needEnableAction=false;获取输入参数inputParams = mdladvObj.getInputParameters;skipFontCheck = inputParams {1} value;regularFontSize = inputParams {2} value;regularFontName = inputParams {3} value;如果skipFontCheck ResultDescription{end+1} = ModelAdvisor。段(“跳过”。); 结果细节{end+1}={};返回结束regularFontSize = str2double (regularFontSize);如果regularFontSize<1 | | regularFontSize>=99 mdladvObj.setCheckResultStatus(false);结果描述{end+1}=ModelAdvisor.段落(“无效的字体大小。请输入1到99之间的值); 结果细节{end+1}={};结束找到当前系统中的所有块allBlks = find_system(系统);%方框图没有字体属性%获取当前系统中具有字体属性的块allBlks = setdiff(allBlks, {system});找到规则的字体名称块regularBlks = find_system (allBlks,“字体名”,regularFontName);在系统中查找不同的字体块搜索结果= setdiff(allBlks, regularBlks);如果~isempty(searchResult) ResultDescription{end+1} = ModelAdvisor。段落([“我们建议用相同的字体来塑造模特的形象。”...'下面的块使用的字体不是'regularFontName“:”]);ResultDetails{结束+ 1}= searchResult;mdladvObj.setCheckResultStatus(假);myLVParam = ModelAdvisor.ListViewParameter;myLVParam。Name =“无效的字体块”%名称出现在下拉过滤器myLVParam。Data = get_param (searchResult,“对象”)”;myLVParam。属性= {“字体名”};% name是默认属性setListViewParameters({myLVParam});needEnableAction=true;其他的ResultDescription{结束+ 1}= ModelAdvisor。段(“所有的方块字体名称都是一样的。”); 结果细节{end+1}={};结束找到规则的字体大小块regularBlks = find_system (allBlks,“字形大小”, regularFontSize);%在系统中查找不同的字体大小块搜索结果= setdiff(allBlks, regularBlks);如果~isempty(searchResult) ResultDescription{end+1} = ModelAdvisor。段落([“为了保证模特的形象一致,我们建议模特们使用相同的字体大小。”...'以下块使用的字体大小不是'num2str (regularFontSize)“:”]);ResultDetails{结束+ 1}= searchResult;mdladvObj.setCheckResultStatus(假);myLVParam = ModelAdvisor.ListViewParameter;myLVParam。Name =“无效的字体大小块”%名称出现在下拉过滤器myLVParam。Data = get_param (searchResult,“对象”)”;myLVParam。属性= {“字形大小”};% name是默认属性mdladvObj.setListViewParameters ({mdladvObj。getListViewParameters {:}, myLVParam});needEnableAction = true;其他的ResultDescription{结束+ 1}= ModelAdvisor。段(“所有的块状字体大小都是一样的。”); 结果细节{end+1}={};结束mdladvObj.setActionEnable (needEnableAction);mdladvObj.setCheckErrorSeverity (1);% -----------------------------%示例StyleOne回调函数,请参阅Model Advisor API文档了解更多细节。% -----------------------------函数结果= SampleStyleOneCallback(system) mdladvObj = Simul万博1manbetxink.ModelAdvisor.getModelAdvisor(system);%得到对象如果比较字符串(get_param (bdroot(系统),“ScreenColor”),“白色”) result = ModelAdvisor。文本(“通过”,{“通过”});mdladvObj.setCheckResultStatus(真正的);%设置为通过mdladvObj.setActionEnable(假);其他的结果= ModelAdvisor。文本(“建议选择Simulink窗口屏幕的白色,以确保模型的可读性和万博1manbetx可打印性。”);mdladvObj.setCheckResultStatus(假);%设置为失败mdladvObj.setActionEnable(真正的);mdladvObj.setCheckErrorSeverity (1);结束% -----------------------------% Sample StyleTwo回调函数,请参阅Model Advisor API文档了解更多细节。% -----------------------------函数[ResultDescription,ResultDetails]=SampleStyleTwoCallback(系统)ResultDescription={};结果详情={};模型=根(系统);mdladvObj=Simulink.ModelAdvisor.getModelAdvisor(万博1manbetx系统);%得到对象mdladvObj.setCheckResultStatus(真正的);%初始化结果状态%检查模拟优化设置ResultDescription{结束+ 1}= ModelAdvisor。段(“检查模拟优化设置:”);如果strcmp(获取参数(型号、,“BlockReduction”),“关”) ResultDetails{end+1} = {ModelAdvisor. ResultDetails{end+1} = {文本(“建议打开块减少优化选项。”,{“斜体”})}; mdladvObj.setCheckResultStatus(false);%设置为失败mdladvObj.setActionEnable(真正的);其他的ResultDetails{结束+ 1}= {ModelAdvisor。文本(“通过”,{“通过”})};结束%检查代码生成优化设置ResultDescription{结束+ 1}= ModelAdvisor。段('检查代码生成优化设置:'); 结果细节{end+1}={};如果strcmp(获取参数(型号、,“LocalBlockOutputs”),“关”)ResultDetails{end}{end+1}=ModelAdvisor.Text('建议启用启用本地块输出选项。',{“斜体”});ResultDetails{结束}{结束+ 1}= ModelAdvisor.LineBreak;mdladvObj.setCheckResultStatus(假);%设置为失败mdladvObj.setActionEnable(真正的);结束如果strcmp(获取参数(型号、,“BufferReuse”),“关”)ResultDetails{end}{end+1}=ModelAdvisor.Text(“建议打开重用块输出选项。”,{“斜体”});mdladvObj.setCheckResultStatus(假);%设置为失败mdladvObj.setActionEnable(真正的);结束如果isempty(ResultDetails{end})ResultDetails{end}{end+1}=ModelAdvisor.Text(“通过”,{“通过”});结束% -----------------------------%示例操作回调函数,请参阅Model Advisor API文档了解更多细节。% -----------------------------函数结果= sampleActionCB(taskobj) mdladvObj = taskobj. maobj;系统= getfullname (mdladvObj.System);获取输入参数inputParams = mdladvObj.getInputParameters;regularFontSize = inputParams {2} value;regularFontName = inputParams {3} value;找到当前系统中的所有块allBlks = find_system(系统);%框图本身没有字体属性%获取当前系统中具有字体属性的块allBlks = setdiff(allBlks, {system});找到规则的字体名称块regularBlks = find_system (allBlks,“字体名”,regularFontName);在系统中查找不同的字体块fixBlks=setdiff(所有BLKS,常规BLKS);一个一个地修复它们i = 1:长度(fixBlks) set_param (fixBlks {},“字体名”,regularFontName);结束%保存结果resultText1 = ModelAdvisor.Text ([num2str(长度(fixBlks)),'块已更新为指定字体'regularFontName]);找到规则的字体大小块regularBlks = find_system (allBlks,“字形大小”str2double (regularFontSize));%在系统中查找不同的字体大小块fixBlks=setdiff(所有BLKS,常规BLKS);一个一个地修复它们i = 1:长度(fixBlks) set_param (fixBlks {},“字形大小”, regularFontSize);结束%保存结果resultText2 = ModelAdvisor.Text ([num2str(长度(fixBlks)),'块已更新为指定的字体大小'regularFontSize]);结果= ModelAdvisor.Paragraph;结果。addItem ([resultText1 ModelAdvisor。LineBreak resultText2]);mdladvObj.setActionEnable(假);% -----------------------------%检查Simulink窗口屏幕颜色的采样动作回调函数万博1manbetx请参阅Model Advisor API文档了解更多细节。% -----------------------------函数结果= sampleActionCB2(taskobj) mdladvObj = taskobj. maobj;系统= mdladvObj.System;set_param (bdroot(系统),“ScreenColor”“白色”); 结果=ModelAdvisor.Text(S万博1manbetximulink的屏幕颜色已经更新为白色);mdladvObj.setActionEnable(假);% -----------------------------%用于模型优化设置的示例操作回调函数请参阅Model Advisor API文档了解更多细节。% -----------------------------函数结果= sampleActionCB3(taskobj) mdladvObj = taskobj. maobj;模型= bdroot (mdladvObj.System);set_param(模型,“BlockReduction”“上”);set_param(模型,“LocalBlockOutputs”“上”);set_param(模型,“BufferReuse”“上”); 结果=ModelAdvisor.Text(“模型优化选项“块减少”、“启用本地块输出”和“重用块输出”已经打开”。);mdladvObj.setActionEnable(假);