Model advisor 检查规则自定义
1. Model advisor 检查规则简介
model advisor是simulink自带的静态模型检查器,能够根据设定的规则对模型进行检查,并且能够进行部分错误的自动修改。在汽车电子以及相关基于MBD(Model Based Design)开发的嵌入式项目中有重要的作用,能够帮助开发人员和团队搭建高质量的模型和使用高度统一的风格。自带的检查规则中,包含MAAB这种行业中应用广泛的规则,随着团队或者项目进程的积累,后续会慢慢发展出属于自己的一套建模规则和体系。此时则需要进行对model advisor的检查规则进行自定义。
- 下图为Model advisor的界面截图
2. 检查规则自定义
自定义规则分两种情况,一种是对现有规则进行勾选,组合成团队需要的检查体系,另外一种是编写脚本,创建新的检查规则。在确认现有检查规则中无法满足所需要的检查,则可以进行新规则的编写。例如:
- 找出所有具有integer rounding mode 配置的模块,并检查这些模块的这项配置是否配成
Simplest
。
这条模型检查规则在官方自带的检查中就没有,如果想要统一团队风格只能通过编写脚本或者组织人工审查,显然作为程序员的我们对于这种选择问题的思考是不存在的,答案只有一个,代码撸起来。
本文主要针对这条规则需求进行编写脚本的详细说明和示例。
2.1 创建新的规则及放到相应目录中
既然是在model advisor中添加新的检查规则,就需要将编写的检查规则都放到统一文件夹目录下,不能与其它检查规则混用。
%--- test_int_round_mode_check function description----------------------------
function test_int_round_mode_check
int_round_mode = ModelAdvisor.Check('int_round_mode');
int_round_mode.Title = 'int_round_mode:Check the integer rounding mode 检查整数舍入模式设定';
int_round_mode.TitleTips = ['Fail if the rounding mode config is not <Simplest>'...
'该模块设置如果不为<Simplest>则判断为违反本条规则'];
int_round_mode.setCallbackFcn(@test_int_round_mode_checkCallback,'None','StyleOne');
% publish the check
mdladvRoot = ModelAdvisor.Root;
mdladvRoot.publish(int_round_mode,'TEST');
这些代码定义了检查规则的名字、简介、调用具体函数的句柄test_int_round_mode_checkCallback
,并将这条规则发布在TEST
文件夹下。
2.2 确定是否需要增加自动修改功能
model advisor中,允许进行部分规则的自动修改,就是点一个按钮直接把模型改的符合本条检查规则,这个功能十分实用,尤其对于规模庞大的模型简直就是福音,所以回到本示例中,因为需要检查的内容单一,规则明确,所以可以增加自动修改的功能。当检查出整数舍入模式没有设置成Simplest
的模块,点击一个按钮,自动将这些模块舍入模式设成Simplest
。
% fix action description
int_round_modeAct = ModelAdvisor.Action;
int_round_modeAct.Name = 'Fix settings';
int_round_modeAct.Description = ['Click the button to set all blocks to Simplest'...
'按下按钮,将所有模块设置成 Simpleset'];