![b0c52dfa286c7a2ff1a80500ddca003f.png](https://img-blog.csdnimg.cn/img_convert/b0c52dfa286c7a2ff1a80500ddca003f.png)
上一篇:
Lily:Matlab模型静态检查 - 自定义建模规范1zhuanlan.zhihu.com![0a443a4721e51c1002847a95eea355e0.png](https://img-blog.csdnimg.cn/img_convert/0a443a4721e51c1002847a95eea355e0.png)
本文主要介绍3个主函数的撰写内容与含义。
defineModelAdvisorChecks函数的撰写
% register custom checks
defineModelAdvisorChecks函数内包含的就是静态检查的项目,也叫check,即新建check。包含了check的id, title, check的检查callback和执行callback。
下面就以Matlab示例中自带的3个check进行详细的解释说明。
Check0
function
上面语句的主要作用就是新建ID为com.mathworks.sample.Check0的check, 并且详细配置该Check。具体check哪些内容,以及action如何动作,分别在SampleNewCheckStyleCallback和sampleActionCB0这两个函数中。每条语句的注释和界面的对应关系已经在图1中标注出,可参照编号查看。如果Check没有被publish, 那么该check会被隐藏,见图2。
![622b1146e5c6da355feffb7672a6e117.png](https://img-blog.csdnimg.cn/img_convert/622b1146e5c6da355feffb7672a6e117.png)
![bf9346d4d76049c064a027a574e47ddf.png](https://img-blog.csdnimg.cn/img_convert/bf9346d4d76049c064a027a574e47ddf.png)
Check1
% --- sample check 1
这个Check的callbackfcn里的style不一样,各种Style的界面风格如下图,Matlab的help推荐使用Detailed Style, 即Check0使用的风格。其实不同的style相对的返回参数是有区别的,建议熟练掌握后可灵活应用,入门是选择一个先掌握。Check1相对多的是增加了用户交互参数,使用ModelAdvisor.InputParameter进行了参数对话框的设置,详细语句解释见备注与图3。不同Style视觉效果见图4,后续若有人感兴趣可详细介绍其它区别。
![0efbcfac5f604d3702ddeac94f9c2655.png](https://img-blog.csdnimg.cn/img_convert/0efbcfac5f604d3702ddeac94f9c2655.png)
![db2700da8d33b019446fc922246b46e7.png](https://img-blog.csdnimg.cn/img_convert/db2700da8d33b019446fc922246b46e7.png)
Check2
% --- sample check 2
Check2的定义主要是callbackfcn的style的Check0不一样,结构很好理解。关键就是具体的SampleStyleOneCallback和sampleActionCB2这两个函数。
Check3
% --- sample check 3
Check3的定义主要还是callbackfcn的style的Check0不一样,结构很好理解。关键也是回调函数,SampleStyleTwoCallback和sampleActionCB3。
到此,函数defineModelAdvisorChecks的解释基本完成,其主要功能就是建立基本的check,每个check的回调函数后续再详细解释。
defineModelAdvisorTasks函数的撰写
function
上述语句用来在Model Advisor的根目录下新增任务组,具体实现见代码注释。defineModelAdvisorTasks这个函数是在By Task目录下新增任务组,复用的check项目都是之前定义过的,或者可以使用Model Advisor的自带check库。
defineTaskAdvisor函数的撰写
代码Part 1:
function
首先实现的是在根目录新建用户自定义文件夹,具体实现代码见注释,实现效果见图5。
![408479d9c55858c39d4f7a7dda916376.png](https://img-blog.csdnimg.cn/img_convert/408479d9c55858c39d4f7a7dda916376.png)
代码Part 2:
% Define procedures
然后是实现自定义procedure, procedure是会按顺序执行,一旦当前检查未通过,便不会继续执行下去,而代码Part1中的group则不会,即使当前检查项错误,也会继续检查其他项目。这里有如何在自定义文件夹下面添加子文件夹的方法,group也同理。
到此,整个ModelAdvisor的目录结构定义的基本语句和函数都覆盖了,接下来,就是解释如何具体实现静态检查。我们再返回到defineModelAdvisorChecks函数下面,每个check的check的setCallbackFcn和action的setCallbackFcn下面的函数。具体见下一篇文章。
Lily:Matlab模型静态检查 - 自定义建模规范3zhuanlan.zhihu.com![0a443a4721e51c1002847a95eea355e0.png](https://img-blog.csdnimg.cn/img_convert/0a443a4721e51c1002847a95eea355e0.png)