主要内容

定义自定义模型的编译选项顾问检查

根据你的模型的实现和定制检查来实现你想要的,重要的是,您指定正确的编译选项。您指定的编译选项检查定义的函数ModelAdvisor.Check对象通过设置CallbackContext属性如下:

  • 没有一个指定模型前顾问没有编译您的模型分析,定制检查。没有一个是默认设置的CallbackContext财产。

  • PostCompile指定模型顾问必须编译模型更新模型图,然后模拟模型来执行您的自定义检查。模型顾问没有国旗建模失败在代码生成的问题,因为这些问题不影响模拟模型。

  • PostCompileForCodegen指定模型顾问必须编译和更新专门为代码生成模型图,但不模拟模型。使用这个选项为模型顾问检查分析代码生成模型的准备。

检查评估模型的代码生成的准备

您可以创建自定义模型顾问检查,使模型顾问引擎识别代码生成模型在早期阶段的设置问题,这样你就可以避免意想不到的错误在代码生成。例如,在这个模型中,红色的枚举的BasicColorsOtherColors可以用在一个模拟的模型。在生成的代码中,然而,这些红色的枚举导致枚举冲突。通过使用“PostCompileForCodegen”选项,您的自定义模型顾问检查可以确定这种类型的代码生成设置问题。

“PostCompileForCodegen”选择编译所有变体选择的模型。这允许您编译分析可能的问题出现在生成的代码路径模型中活跃的和不活跃的变体。提供了一个例子创建自定义检查路径从一个模型评估活跃的和不活跃的变体

创建自定义检查路径从一个模型评估活跃的和不活跃的变体

这个例子显示了创建一个自定义模型顾问检查评估活跃的和不活跃的系统模型变体路径从一个变体。顾问提供模型结果的例子说明你为什么使用PostCompileForCodegen而不是PostCompile的值ModelAdvisor.Check.CallbackContext房地产从模型生成代码时是最终目标。

更新模型来分析所有变体的选择

为模型评估顾问活跃的和不活跃的路径在不同系统中,你必须设置变体激活时间参数代码编译变体的块(变体水槽,变异来源,变体子系统,变体模型)。

请注意:选择这个选项会影响执行时间,提高时间的模型顾问评估模型。

  1. 打开示例模型ex_check_compile_code_gen

  2. 对于每一个变异源块,打开块参数和设置变体激活时间参数代码编译

  3. 模型保存到您的本地工作目录。

创建一个sl_customization函数

在工作目录中,创建sl_customization函数并保存它。

函数sl_customization (cm) %注册自定义检查cm.addModelAdvisorCheckFcn (@defineModelAdvisorCheck);% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %定义模型顾问检查% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -函数defineModelAdvisorCheck CheckSingleToBoolConversion;

sl_customization函数接受一个定制管理器对象。包括定制管理器对象addModelAdvisorCheckFcn注册自定义检查的方法。这个方法是一个句柄的输入函数(defineModelAdvisorCheck)。这个函数调用包含检查定义函数,对应于自定义检查。

打开并检查检查定义函数,CheckSingleToBoolConversion.m:

函数CheckSingleToBoolConversion mdladvRoot = ModelAdvisor.Root;rec = ModelAdvisor.Check (“exampleCheck1”);rec.Title =“Bool转换检查确认单”;rec.TitleID =“custom.dtcCheck.CompileForCodegen1”;rec.TitleTips =“自定义检查识别单一Bool转换”;rec.setCallbackFcn (@DetailStyleCallback“没有”,“DetailStyle”);rec.CallbackContext =“PostCompileForCodegen”;%编译的代码生成mdladvRoot.publish (rec,“演示”);结束函数DetailStyleCallback(系统,CheckObj) mdladvObj = Simul金宝appink.ModelAdvisor.getModelAdvisor(系统);violationBlks = find_system(系统,“BlockType”,“DataTypeConversion”);2 =元素个数(violationBlks): 1:1 dtcBlk = violationBlks {2};compDataTypes = get_param (dtcBlk,“CompiledPortDataTypes”);如果isempty (compDataTypes) violationBlks (ii) = [];继续;结束如果~ (strcmp (compDataTypes.Inport,“单一”)& & strcmp (compDataTypes.Outport“布尔”)violationBlks (ii) = [];继续;结束结束如果isempty (violationBlks) ElementResults = ModelAdvisor.ResultDetail;ElementResults(元素个数(violationBlks)) = 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);结束

有关创建自定义检查的更多信息,请参阅定义您自己的自定义模型顾问检查

开放模式顾问和执行自定义检查

打开模型之前顾问和运行自定义检查,必须刷新缓存模型顾问检查信息。在MATLAB命令窗口中,输入:

Advisor.Manager.refresh_customizations

打开模型顾问和执行自定义检查:

  1. 打开保存的模型。

  2. 建模选项卡上,选择模型的顾问。一个系统选择器——模型顾问对话框打开。点击好吧。顾问模式打开。

  3. 在左侧窗格中,选择通过产品演示> >检查确定单一Bool转换。如果通过产品文件夹不显示在模型顾问窗口中,选择设置> Preferences >显示通过产品文件夹

  4. 右键单击检查和选择运行这个检查。模型顾问编译模型和执行检查。顾问的模型更新模型图。不活跃的变体路径显得黯淡。

顾问审核该模型的结果

回顾检查分析结果模型中的顾问。单击超链接打开违反块在模型编辑器中。

在这个例子中,因为你定义的编译选项sl_customization.m文件

rec.CallbackContext =“PostCompileForCodegen”;

模型顾问为数据类型转换块生成警告的活动路径和不活跃的路径变量系统。

如果你定义的编译选项sl_customization.m文件

rec.CallbackContext =“PostCompile”;

结果只包含数据类型转换块活动路径。

另请参阅

|

相关的话题