不同的模塊中定義同樣的宏為不同的值合法嗎_如何創建自定義的建模規范

本文摘要:

主要介紹如何創建自定義的建模規范檢查,以及在建模規范檢查中,如何增加自動修正模型使之符合規范。

比如我們想創建一個自定義的規則,對于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.pswp.cn/news/394928.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394928.shtml
英文地址,請注明出處:http://en.pswp.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…