定义自定义模型顾问检查的Compile选项
根据模型的实现和自定义检查的目标,指定正确的编译选项非常重要。属性的检查定义函数指定编译选项ModelAdvisor。检查
对象,通过设置CallbackContext
属性如下:
没有一个
指定模型顾问不必在自定义检查分析之前编译模型。没有一个
的默认设置是CallbackContext
财产。PostCompile
指定Model Advisor必须编译模型以更新模型图,然后模拟模型以执行自定义检查。Model Advisor不会标记在代码生成期间失败的建模问题,因为这些问题不会影响模拟模型。PostCompileForCodegen
指定Model Advisor必须专门为代码生成编译和更新模型图,但不模拟模型。将此选项用于Model Advisor检查,分析模型的代码生成准备情况。自定义编辑时检查不支持此选项。金宝app
检查评估模型的代码生成准备情况
您可以创建自定义Model Advisor检查,使Model Advisor引擎能够在早期阶段识别模型中的代码生成设置问题,这样您就可以避免在代码生成期间出现意外错误。例如,在这个模型中红色的
枚举的BasicColors
而且OtherColors
可以在模拟模型中使用。然而,在生成的代码中,这些红色的
枚举将导致枚举冲突。通过使用“PostCompileForCodegen”
选项,您的自定义Model Advisor检查可以识别这种类型的代码生成设置问题。
的“PostCompileForCodegen”
Option编译所有变体选项的模型。这种编译使您能够分析在生成的代码中为模型中的活动和非活动变量路径所出现的可能问题。中提供了示例创建自定义检查以评估模型中的活动和非活动变量路径.
创建自定义检查以评估模型中的活动和非活动变量路径
这个例子展示了一个自定义的Model Advisor检查的创建,该检查评估来自一个可变系统模型的活动和非活动的可变路径。该示例提供了Model Advisor结果,演示了使用的原因PostCompileForCodegen
而不是PostCompile
的值ModelAdvisor.Check.CallbackContext
属性是最终目标。
更新模型以分析所有变体选择
为使Model Advisor能够评估变体系统中的活动路径和非活动路径,您必须设置变体激活时间参数代码编译
或启动
对于变体块(变体水槽,变异来源,不同子系统,不同模型)。您还必须设置系统目标文件配置参数为ert.tlc
.
请注意:选择此选项会影响执行时间,并增加Model Advisor评估模型所需的时间。
打开示例模型
ex_check_compile_code_gen
.对于每个Variant Source块,打开块参数并设置变体激活时间参数
代码编译
.将模型保存到您的本地工作文件夹。
创建一个sl_customization
函数
在您的工作文件夹中创建这个sl_customization
函数并保存。
函数sl_customization(cm) %注册自定义检查cm. addmodeladvisorcheckfcn (@defineModelAdvisorCheck);% ----------------------------- % 定义模型顾问检查 % ----------------------------- 函数defineModelAdvisorCheck CheckSingleToBoolConversion;
的sl_customization
函数接受自定义管理器对象。自定义管理器对象包括addModelAdvisorCheckFcn
注册自定义检查的方法。此方法的输入是函数的句柄(defineModelAdvisorCheck
)。此函数包含对对应于自定义检查的检查定义函数的调用。
打开并检查检查定义函数,CheckSingleToBoolConversion.m
:
函数CheckSingleToBoolConversion mdladvRoot = ModelAdvisor.Root;rec = ModelAdvisor。检查(“exampleCheck1”);rec.Title =“检查识别单Bool转换”;rec.TitleID =“custom.dtcCheck.CompileForCodegen1”;rec.TitleTips =自定义检查以识别单Bool转换;rec.setCallbackFcn (@DetailStyleCallback“没有”,“DetailStyle”);rec.CallbackContext =“PostCompileForCodegen”;%编译代码生成mdladvRoot.publish (rec,“演示”);结束函数DetailStyleCallback(system, CheckObj) mdladvObj = 金宝appSimulink.ModelAdvisor.getModelAdvisor(system);violationBlks = find_system(系统,“BlockType”,“DataTypeConversion”);为ii = numel(violationBlks):-1:1 dtcBlk = violationBlks{ii};compDataTypes = get_param(dtcBlk,“CompiledPortDataTypes”);如果isempty(compDataTypes) violationBlks(ii) = [];继续;结束如果~(比较字符串(compDataTypes。轮廓尺寸,“单一”) && strcmp(compDataTypes.)输出港,“布尔”)) violationBlks(ii) = [];继续;结束结束如果isempty(violationBlks) ElementResults = ModelAdvisor.ResultDetail;ElementResults(元素个数(violationBlks)) = ModelAdvisor.ResultDetail;ElementResults。IsInformer = true;ElementResults。描述='此检查查找将单个数据转换为布尔数据的数据类型转换块';ElementResults。状态=“支票通过了。没有发现将单个数据转换为布尔值的数据类型转换块。”;mdladvObj.setCheckResultStatus(真正的);其他的为i=1:numel(violationBlks) ElementResults(1,i) = ModelAdvisor.ResultDetail;结束为i = 1:元素个数(ElementResults) ModelAdvisor.ResultDetail.setData (ElementResults(我),“席德”我,violationBlks {});ElementResults(我)。描述='此检查查找将单个数据转换为布尔数据的数据类型转换块';ElementResults(我)。状态=“检查失败。以下数据类型转换块将单个数据转换为布尔值:;ElementResults(我)。RecAction =修改模型以避免将数据类型从单个转换为布尔值;结束mdladvObj.setCheckResultStatus(假);mdladvObj.setActionEnable(真正的);结束CheckObj.setResultDetails (ElementResults);结束
有关创建自定义检查的详细信息,请参见定义自定义模型顾问检查.
打开模型顾问并执行自定义检查
在打开Model Advisor并运行自定义检查之前,您必须刷新Model Advisor检查信息缓存。在MATLAB命令窗口中输入:
Advisor.Manager.refresh_customizations
打开Model Advisor并执行自定义检查:
打开您保存的模型。
在建模选项卡上,选择模型的顾问.一个系统选择器-模型顾问对话框。点击好吧.打开模型顾问。
在左侧窗格中,选择通过产品>演示>检查识别单Bool转换.
右键单击检查并选择运行这个检查.Model Advisor编译模型并执行检查。模型顾问更新模型图。非活跃的变异路径显得暗淡。
检查Model Advisor结果
在Model Advisor中检查检查分析结果。单击超链接在模型编辑器中打开违规块。
类中定义了compile选项,因此在本例中sl_customization.m
文件
rec.CallbackContext = 'PostCompileForCodegen';
Model Advisor为变量系统的活动路径和非活动路径中的数据类型转换块生成警告。
类中定义了编译选项sl_customization.m
文件
rec.CallbackContext = 'PostCompile';
结果只包括活动路径中的数据类型转换块。
另请参阅
ModelAdvisor。检查
|ModelAdvisor.Check.CallbackContext