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

本文摘要:

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

比如我们想创建一个自定义的规则,对于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,一经查实,立即删除!

相关文章

DBCP连接池配置常用参数说明

参数默认值说明username\传递给JDBC驱动的用于建立连接的用户名password\传递给JDBC驱动的用于建立连接的密码url\传递给JDBC驱动的用于建立连接的URLdriverClassName\使用的JDBC驱动的完整有效的Java 类名initialSize 0初始化连接:连接池启动时创建的初始化连接数量,1.2版本后…

科大讯飞 ai算法挑战赛_为井字游戏挑战构建AI算法

科大讯飞 ai算法挑战赛by Ben Carp通过本卡尔普 为井字游戏挑战构建AI算法 (Building an AI algorithm for the Tic-Tac-Toe challenge) As part of the freeCodeCamp curriculum, I was challenged build a Tic-Tac-Toe web app. It was a real pleasure.作为freeCodeCamp课程…

js serialize php 解,[转]JavaScript 版本的 PHP serialize/unserialize 完整实现

下载: phpserializer.js/* phpserializer.js - JavaScript to PHP serialize / unserialize class.** This class is designed to convert php variables to javascript* and javascript variables to php with a php serialize unserialize* compatible way.** Copyright (C) …

Git 的 .gitignore 配置

.gitignore 配置文件用于配置不需要加入版本管理的文件,配置好该文件可以为我们的版本管理带来很大的便利,以下是个人对于配置 .gitignore 的一些心得。 1、配置语法: 以斜杠“/”开头表示目录; 以星号“*”通配多个字符&#xff…

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

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

时钟设置

date --set"05/31/16 18:16" 时钟设置 设置系统时间# date --set“07/07/06 10:19" (月/日/年 时:分:秒)2、hwclock/clock查看硬件时# hwclock --show# clock --show设置硬件时间# hwclock --set --date"07/07/06 10:19" &…

《成为一名机器学习工程师》_成为机器学习的拉斐尔·纳达尔

《成为一名机器学习工程师》by Sudharsan Asaithambi通过Sudharsan Asaithambi 成为机器学习的拉斐尔纳达尔 (Become the Rafael Nadal of Machine Learning) One year back, I was a newbie to the world of Machine Learning. I used to get overwhelmed by small decisions…

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

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

php-fpm 内存 facebook,【百家号】脸书百科,安装php-fpm-5.4.16-42.遇到的小问题 Web程序 - 贪吃蛇学院-专业IT技术平台...

环境:redhat 7.2版本 yum源也是7.2的iso[[email protected] lnmp_soft]# yum -y install php-fpm-5.4.16-42.el7.x86_64.rpm已加载插件:langpacks, product-id, search-disabled-repos, subscription-managerThis system is not registered to Red Hat S…

Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals)

昨晚的没来得及打,最近错过好几场CF了,这场应该不算太难 A. Unimodal Arraytime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputArray of integers is unimodal, if: it is strictly increasing in…

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

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

ajax的一些相关

1、AJAX Asynchronous(异步的) JavaScript and XML AJAX是能不刷新整个网页的前提下,更新内容。通过少量的数据交换,达成局部页面刷新的效果。 而form表单提交经常是刷新整个页面,很繁琐 2、AJAX是基于现有的Internet…

select ...as_一起使用.select .map和.reduce方法可充分利用Ruby

select ...asby Declan Meehan由Declan Meehan 一起使用.select .map和.reduce方法可充分利用Ruby (Get the most out of Ruby by using the .select .map and .reduce methods together) You should absolutely never ever repeat yourself when writing code. In other word…

一些书单

仅对近来的学习做些回顾吧 学习永无止境--> 2015年已完成书单: 文学: 硅谷之火浪潮之巅天才在左疯子在右从0到1生命咖啡馆黑客与画家奇思妙想:15位计算机天才及其重大发现乔布斯传平凡的世界(三部全)一只iphone的全…

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…

今天听说了一个压缩解压整型的方式-group-varint

group varint https://github.com/facebook/folly/blob/master/folly/docs/GroupVarint.md 这个是facebook的实现 https://www.slideshare.net/parallellabs/building-software-systems-at-google-and-lessons-learned/48-Group_Varint_Encoding_Idea_encode

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…

小猪佩奇python_python画个小猪佩奇

#!/usr/bin/python #-*- coding: utf-8 -*-import turtleast def nose(x,y):#鼻子 t.pu() t.goto(x,y) t.pd() t.seth(-30) t.begin_fill() a0.4 for i in range(120):if 0<i<30 or 60<i<90: aa0.08t.lt(3) #向左转3度 t.fd(a) #向前走a的步长else: aa-0.08t.lt(3)…

javascript 符号_理解JavaScript中“ =”符号的直观指南

javascript 符号by Kevin Kononenko凯文科诺年科(Kevin Kononenko) 理解JavaScript中“ ”符号的直观指南 (A Visual Guide to Understanding the “” Sign in JavaScript) 实际上&#xff0c;对于第一次学习编码的人来说&#xff0c;赋值运算符(或“ ”符号)实际上会产生误导…

iOS开发UIScrollView的底层实现

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