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

本文摘要:

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

比如我们想创建一个自定义的规则,对于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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wsdl文件是怎么生成的_C++ 动态库.dll的生成---超级详细!!!

怎么将建好的工程生成.dll工程?1、在C中打开工程2、运行结果:输出Print修改开始:1、打开属性。2、修改以下内容:目标文件扩展名,由.exe--》.dll,直接删除修改即可配置类型,由.exe--》.dll,下拉菜单可选择最…

HTTP基本认证(Basic Authentication)的JAVA示例

大家在登录网站的时候,大部分时候是通过一个表单提交登录信息。但是有时候浏览器会弹出一个登录验证的对话框,如下图,这就是使用HTTP基本认证。下面来看看一看这个认证的工作过程:第一步: 客户端发送http request 给服务器,服务器验证该用户…

python能print中文吗_python怎么print汉字

今天就为大家分享一篇python中使用print输出中文的方法,具有很好的参考价值,希望对大家有所帮助。看Python简明教程,学习使用print打印字符串,试了下打印中文,不行。(推荐学习:Python视频教程&a…

oracle 11gogg,【OGG】Oracle GoldenGate 11g (二) GoldenGate 11g 单向同步配置 上

Oracle GoldenGate 11g (二)GoldenGate 11g 单向同步配置 上ItemSource SystemTarget SystemPlatformRHEL6.4 - 64bitRHEL6.4 - 64bitHostnamerhel64.oracle.comora11g.oracle.comDatabaseOracle 11.2.0.3Oracle 11.2.0.3Character SetAL32UTF8AL32UTF8ORACLE_SIDPRODEMREPList…

Centos7-卸载自带的jdk 安装jdk8

卸载JDK Centos7一般都会带有自己的openjdk,我们一般都回用oracle的jdk,所以要卸载 步骤一:查询系统是否以安装jdk #rpm -qa|grep java 或 #rpm -qa|grep jdk 或 #rpm -qa|grep gcj 步骤二:卸载已安装的jdk #rpm -e --nodeps java-1.8.0-openjdk…

iOS开发UIScrollView的底层实现

起始 做开发也有一段时间了,经历了第一次完成项目的激动,也经历了天天调用系统的API的枯燥,于是就有了探索底层实现的想法。 关于scrollView的思考 在iOS开发中我们会大量用到scrollView这个控件,我们使用的tableView/collectionv…

oracle查看登录时间黑屏,oracle 11g默认用户名、密码解锁 以及安装后重启黑屏问题.doc...

oracle 11g默认用户名、密码解锁 以及安装后重启黑屏问题.doc还剩3页未读,继续阅读下载文档到电脑,马上远离加班熬夜!亲,喜欢就下载吧,价低环保!内容要点:遇的同学,参考一下解决办法…

第六十二节,html分组元素

html分组元素 学习要点: 1.分组元素总汇 2.分组元素解析 本章主要探讨HTML5中分组元素的用法。所谓分组,就是用来组织相关内容的HTML5元素,清晰有效的进行归类。 一.分组元素总汇 为了页面的排版需要,HTML5提供了几种语…

WebSocket 实战--转

原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-WebSocket/ WebSocket 前世今生 众所周知,Web 应用的交互过程通常是客户端通过浏览器发出一个请求,服务器端接收请求后进行处理并返回结果给客户端,客户端浏览器将信息呈…

mongodb 安装、启动

MongoDB 之 你得知道MongoDB是个什么鬼 MongoDB - 1 最近有太多的同学向我提起MongoDB,想要学习MongoDB,还不知道MongoDB到底是什么鬼,或者说,知道是数据库,知道是文件型数据库,但是不知道怎么来用 那么好,所谓千呼万唤始出来,现在我就拉给你们看: 一.初识MongoDB 之 什么东西都…

[转载]PSCAD调用MATLAB/SIMULINK之接口元件设计

原文地址:PSCAD调用MATLAB/SIMULINK之接口元件设计作者:luckyhappier1)接口元件 接口元件包括Graphics,Parameters和Script。注意:变量要与DSDYN要一致(PSCAD根据变量名区别变量)。 2)Circuit 定…

oracle数字类型ef映射,Entity Framework 学习中级篇5—使EF支持Oracle9i - ♂风车车.Net - 博客园...

从Code MSDN上下载下来的EFOracleProvider不支持Oracle9i.但是,目前我所使用的还是Oracle9i。为此,对EFOracleProvider修改了以下,以便使其支持Oracle9i.下面说说具体修改地方.(红色部分为添加或修改的代码部分)一,修改EFOracleProvider1,修改EFOraclePr…

Oracle 数据库之最:你见过最高的 SQL Version 是多少?

Oracle数据库中执行的SQL,很多时候会因为种种原因产生多个不同的执行版本,一个游标的版本过多很容易引起数据库的性能问题,甚至故障。 有时候一个SQL的版本数量可能多达数万个,以下是我之前在"云和恩墨大讲堂”分享过的一个案…

C 怎么读取Cpp文件_opencv从yaml文件中读取矩阵(c++)

PS:由于我是新手,因此记录的比较罗里吧嗦,本文也属于一个没有任何技术的编程积累。在SLAM系统中,经常需要从配置文件中读取参数文件,读取整型,浮点型都是比较常见的操作,在读取矩阵卡了一下,记录…

3.SFB标准版前端安装

SFB服务器准备部分:1.修改服务器名称,sfb加入域,用域管理员账户登录2.配置服务器IP地址,DNS3.安装Windows组件Add-WindowsFeature NET-Framework-Core, RSAT-ADDS, Windows-Identity-Foundation, Web-Server, Web-Static-Content,…

向spark standalone集群提交任务

文档链接 #切换到spark安装目录,执行下面一条命令,192.168.0.10是master的ip, examples/src/main/python/pi.py 是python 文件的路径 ./bin/spark-submit --master spark://192.168.0.106:7077 examples/src/main/python/pi.py任务已经执行完毕,耗时10秒 转载于:https://www.c…

python excelwriter保存路径_Python和Excel 终于可以互通了!!

点击“开发者技术前线”,选择“星标🔝”在看|星标|留言, 真爱作者:小天真_5eed 链接:https://www.jianshu.com/p/6ecf414f3372今天为大家分享一篇使用python将大量数据导出到Excel中的技巧心得,可以让Python和Excel…

MySQL 导出数据

2019独角兽企业重金招聘Python工程师标准>>> 1、导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 存放位置比如: mysqldump -u root -p project > c:/a.sql 2.导出一个表的结构,并且带表中的数据 mysqldump -u 用户名 -p 数据库名 …

单片机STM8S测量电压电路_单片机电路设计中的10个难点

单片机是嵌入式系统的核心元件,使用单片机的电路要复杂得多,但在更改和添加新功能时,带有单片机的电路更加容易实现,这也正是电器设备使用单片机的原因。那么在单片机电路的设计中需要注意的难点有哪些?嵌入式ARM开发 …

oracle ebs 数据源,Oracle EBS环境下查找数据源(Form篇)

关于在Oracle EBS环境下如何查找数据源的文章几年前就已经开始整理,但是其中关于OAF方面的一直没有整理,导致这份文档一直残缺不全,有很多次同事都向我索要相关文档都未能如愿以偿,新的一届培训工作再次启动,为了自己也…