不同的模块中定义同样的宏为不同的值合法吗_如何创建自定义的建模规范

本文摘要:

主要介绍如何创建自定义的建模规范检查,以及在建模规范检查中,如何增加自动修正模型使之符合规范。

比如我们想创建一个自定义的规则,对于constant模块,

1. 如果value是参数的话,则输出数据类型必须定义为Inherit: Inherit from 'Constant value',这样方便通过数据词典修改数据类型。

dc608634b5f0b4c0141003e6d15bcea6.png

2. 如果value是数字的话,则输出数据类型不能定义为"Inherit: Inherit from 'Constant value'",这样的话会产生double的数据类型。

3. 如果value是逻辑常数true或false的话,输出数据类型必须定义为"boolean"

下面就具体介绍要创建这个规范的步骤。

创建自定义建模规范检查的流程

  1. 创建一个"sl_customization.m"的函数文件,并且把该文件所在的路径加到matlab的path中。

    422883ef0e3cce6ff71a5b07bbbf169e.png

    其中,参数cm是customization manager object,

    addModelAdvisorCheckFcn是cm这个对象的一个方法,作用就是添加自定义的检查规范,

    defineModelAdvisorChecks是定义检查规范的函数

    有了这个函数,就是告诉matlab,我要添加一个自定义的模型规范检查策略的函数,具体的内容在@后跟随的函数中定义。

  2. 定义模型规范检查策略的函数

    在第一步中用到了了一个模型规范检查策略的函数defineModelAdvisorChecks,这里就具体定义这个函数。

    这个函数里主要需要定义的内容如下:

    Check ID (必须):给这个检查起一个唯一的名字Handle to check callback function (必须):检查时所调用的函数Check name (推荐):在做建模规范检查时显示的名字Model compiling (可选):确定做这个检查时是否需要对模型进行编译Input Parameters (可选):可定义建模规范检查的参数Action (可选):可添加一个自动修复模型使之符合规范的函数

    具体函数定义的内容如下:

    fe68f4317c37fe6b9f0aacad55f0fa1c.png

    首先这个函数里要添加一个检查项,起名为"custom_rule_001",这个就是Check ID。

    然后可以给这个检查项取一个标题的描述,也就是Title

    接下来是设置这个检查项要调用的函数,也就是执行这项检查时,运行哪个函数来进行检查。

    由于这个规则是有固定设置规范的,所以当模型违反规则的时候,可以根据规则自动对模型的输出数据类型进行设置。所以可以定义一个行为,当模型违反规则时,可以执行这个行为来对模型自动修正。

    最后是把这个检查策略添加到Simulink默认的环境中,并且可以给这个策略起一个名字。

  3. 检查函数的定义

    接下来就是要定义检查函数"CheckConstantOutDataType"

    一般这种函数里主要分为两部分,一个是通过脚本找出模型中不符合规范的模块,另一部分是把结果在ModelAdvisor的界面上显示出来。

    下图是找出不符合规范的模块的代码,具体原理就是利用find_system来找到所有的Constant模块,然后判断每个Constan模块的Vaule属性是数字,还是逻辑true,false,还是标定参数。针对这3种不同的Value设置判断输出数据类型的设置是否符合要求,不符合要求的就记录下来。

    e314e5ef39b36667035b3fa6c0731b6a.png

    然后就是结果的显示,这里首先定义了一些提示文字,包括这个检查项是检查什么内容,检查失败的提示,检查成功的提示,可以自动修正模型设置的提示。

    "ft = ModelAdvisor.FormatTemplate('ListTemplate');"是创建一个显示的模板,针对检查通过与否(不符合的模块记录变量是否为空),填写不同的内容。

    “Simulink.ModelAdvisor.getModelAdvisor(system);”是获取系统的model advisor的对象,可以设置最后的检查结果以及修复动作。

    36bab1c7097df51f2fcbf43c706eae54.png

  4. 修正函数的定义

    接下来就是要定义修正函数"FixConstantOutDataType"。这个函数同样可以分为两部分,一部分是针对不符合规范的模块进行自动修正,另一部分是显示修改的结果。

    下图是自动修正函数中,自动修正部分的代码。这部分和上面的检查函数相似,先是找出不符合规范的模块,然后记录下来。同时把不符合规范的模块的输出数据类型自动修改成符合规范的数据类型,并且记录下修改前后的值,以供后面的结果显示。

    c60924f346dc143ff591084477c9d39b.png

    接下来就是显示修正结果部分,这里设置的是显示3列,分别是修改数据类型的模块路径,修改前的数据类型和修改后的数据类型。最后把修正按钮禁止掉。

    abd3410001506629091c2b43e49f9eb1.png

模型规范检查实例

在定义完自定义的建模规范检查后,可以执行sl_refresh_customizations来更新最新的设置。

然后打开模型,点击Model Advisor就会跳出界面。

1554ff01ace36dc38e9748f7475b1cef.png

然后在Product里面,就能看到我们新加的建模规范内容,点击Run This Check,就可以针对这项进行检查。因为这里的模型设置都是正确的,所以结果是pass,显示的内容就是之前脚本里定义的提示文字。

301f9d4e62dbfdb70d3b1937f60f442d.png

接下来,我们故意把一个constan模块的输出数据类型改的不符合规范。

3bd8f926144e61400ffbae753865e8ea.png

可以看到,这样就显示检查失败,列出了有问题的模块,并在Action栏的Fix Function变成可以点击得到状态。

f9aaa97609693378ef22218867b3042b.png

这时,我们可以点击Fix Function进行自动修复。可以看到这里列出了修改记录,并且Fix Function按钮再次被禁止。

8091680f1b08aab3b47d92a00c2114d3.png

同时,模型上的设置已经被修改。

17c631f930476cf27143e6336f568097.png

这时再重新运行检查,就得到了通过的结果。

584b96eebb87bb635e7193a96a77550f.png

后记

这篇文章主要介绍自定义模型规范检查的基本方法,想要实际自己添加这个功能,还要对通过脚本查找和修改模型属性这方面比较熟悉,具体也可以参考之前的文章:

如何找到模型中你想要找的所有元素

这篇文章用到的模型和脚本可以在百度云盘上下载到:

链接:https://pan.baidu.com/s/1AMxpHKfwPl1RSHifdQ_RoA
提取码:ki13

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值