不同的模块中定义同样的宏为不同的值合法吗_如何创建自定义的建模规范
本文摘要:
主要介紹如何創(chuàng)建自定義的建模規(guī)范檢查,以及在建模規(guī)范檢查中,如何增加自動修正模型使之符合規(guī)范。
比如我們想創(chuàng)建一個(gè)自定義的規(guī)則,對于constant模塊,
1. 如果value是參數(shù)的話,則輸出數(shù)據(jù)類型必須定義為Inherit: Inherit from 'Constant value',這樣方便通過數(shù)據(jù)詞典修改數(shù)據(jù)類型。
2.?如果value是數(shù)字的話,則輸出數(shù)據(jù)類型不能定義為"Inherit: Inherit from 'Constant value'",這樣的話會產(chǎn)生double的數(shù)據(jù)類型。
3. 如果value是邏輯常數(shù)true或false的話,輸出數(shù)據(jù)類型必須定義為"boolean"
下面就具體介紹要創(chuàng)建這個(gè)規(guī)范的步驟。
創(chuàng)建自定義建模規(guī)范檢查的流程
創(chuàng)建一個(gè)"sl_customization.m"的函數(shù)文件,并且把該文件所在的路徑加到matlab的path中。
其中,參數(shù)cm是customization manager object,
addModelAdvisorCheckFcn是cm這個(gè)對象的一個(gè)方法,作用就是添加自定義的檢查規(guī)范,
defineModelAdvisorChecks是定義檢查規(guī)范的函數(shù)
有了這個(gè)函數(shù),就是告訴matlab,我要添加一個(gè)自定義的模型規(guī)范檢查策略的函數(shù),具體的內(nèi)容在@后跟隨的函數(shù)中定義。
定義模型規(guī)范檢查策略的函數(shù)
在第一步中用到了了一個(gè)模型規(guī)范檢查策略的函數(shù)defineModelAdvisorChecks,這里就具體定義這個(gè)函數(shù)。
這個(gè)函數(shù)里主要需要定義的內(nèi)容如下:
Check ID (必須):給這個(gè)檢查起一個(gè)唯一的名字Handle to check callback function (必須):檢查時(shí)所調(diào)用的函數(shù)Check name (推薦):在做建模規(guī)范檢查時(shí)顯示的名字Model compiling (可選):確定做這個(gè)檢查時(shí)是否需要對模型進(jìn)行編譯Input Parameters (可選):可定義建模規(guī)范檢查的參數(shù)Action (可選):可添加一個(gè)自動修復(fù)模型使之符合規(guī)范的函數(shù)
具體函數(shù)定義的內(nèi)容如下:
首先這個(gè)函數(shù)里要添加一個(gè)檢查項(xiàng),起名為"custom_rule_001",這個(gè)就是Check ID。
然后可以給這個(gè)檢查項(xiàng)取一個(gè)標(biāo)題的描述,也就是Title
接下來是設(shè)置這個(gè)檢查項(xiàng)要調(diào)用的函數(shù),也就是執(zhí)行這項(xiàng)檢查時(shí),運(yùn)行哪個(gè)函數(shù)來進(jìn)行檢查。
由于這個(gè)規(guī)則是有固定設(shè)置規(guī)范的,所以當(dāng)模型違反規(guī)則的時(shí)候,可以根據(jù)規(guī)則自動對模型的輸出數(shù)據(jù)類型進(jìn)行設(shè)置。所以可以定義一個(gè)行為,當(dāng)模型違反規(guī)則時(shí),可以執(zhí)行這個(gè)行為來對模型自動修正。
最后是把這個(gè)檢查策略添加到Simulink默認(rèn)的環(huán)境中,并且可以給這個(gè)策略起一個(gè)名字。
檢查函數(shù)的定義
接下來就是要定義檢查函數(shù)"CheckConstantOutDataType"
一般這種函數(shù)里主要分為兩部分,一個(gè)是通過腳本找出模型中不符合規(guī)范的模塊,另一部分是把結(jié)果在ModelAdvisor的界面上顯示出來。
下圖是找出不符合規(guī)范的模塊的代碼,具體原理就是利用find_system來找到所有的Constant模塊,然后判斷每個(gè)Constan模塊的Vaule屬性是數(shù)字,還是邏輯true,false,還是標(biāo)定參數(shù)。針對這3種不同的Value設(shè)置判斷輸出數(shù)據(jù)類型的設(shè)置是否符合要求,不符合要求的就記錄下來。
然后就是結(jié)果的顯示,這里首先定義了一些提示文字,包括這個(gè)檢查項(xiàng)是檢查什么內(nèi)容,檢查失敗的提示,檢查成功的提示,可以自動修正模型設(shè)置的提示。
"ft = ModelAdvisor.FormatTemplate('ListTemplate');"是創(chuàng)建一個(gè)顯示的模板,針對檢查通過與否(不符合的模塊記錄變量是否為空),填寫不同的內(nèi)容。
“Simulink.ModelAdvisor.getModelAdvisor(system);”是獲取系統(tǒng)的model advisor的對象,可以設(shè)置最后的檢查結(jié)果以及修復(fù)動作。
修正函數(shù)的定義
接下來就是要定義修正函數(shù)"FixConstantOutDataType"。這個(gè)函數(shù)同樣可以分為兩部分,一部分是針對不符合規(guī)范的模塊進(jìn)行自動修正,另一部分是顯示修改的結(jié)果。
下圖是自動修正函數(shù)中,自動修正部分的代碼。這部分和上面的檢查函數(shù)相似,先是找出不符合規(guī)范的模塊,然后記錄下來。同時(shí)把不符合規(guī)范的模塊的輸出數(shù)據(jù)類型自動修改成符合規(guī)范的數(shù)據(jù)類型,并且記錄下修改前后的值,以供后面的結(jié)果顯示。
接下來就是顯示修正結(jié)果部分,這里設(shè)置的是顯示3列,分別是修改數(shù)據(jù)類型的模塊路徑,修改前的數(shù)據(jù)類型和修改后的數(shù)據(jù)類型。最后把修正按鈕禁止掉。
模型規(guī)范檢查實(shí)例
在定義完自定義的建模規(guī)范檢查后,可以執(zhí)行sl_refresh_customizations來更新最新的設(shè)置。
然后打開模型,點(diǎn)擊Model Advisor就會跳出界面。
然后在Product里面,就能看到我們新加的建模規(guī)范內(nèi)容,點(diǎn)擊Run This Check,就可以針對這項(xiàng)進(jìn)行檢查。因?yàn)檫@里的模型設(shè)置都是正確的,所以結(jié)果是pass,顯示的內(nèi)容就是之前腳本里定義的提示文字。
接下來,我們故意把一個(gè)constan模塊的輸出數(shù)據(jù)類型改的不符合規(guī)范。
可以看到,這樣就顯示檢查失敗,列出了有問題的模塊,并在Action欄的Fix Function變成可以點(diǎn)擊得到狀態(tài)。
這時(shí),我們可以點(diǎn)擊Fix Function進(jìn)行自動修復(fù)。可以看到這里列出了修改記錄,并且Fix Function按鈕再次被禁止。
同時(shí),模型上的設(shè)置已經(jīng)被修改。
這時(shí)再重新運(yùn)行檢查,就得到了通過的結(jié)果。
后記
這篇文章主要介紹自定義模型規(guī)范檢查的基本方法,想要實(shí)際自己添加這個(gè)功能,還要對通過腳本查找和修改模型屬性這方面比較熟悉,具體也可以參考之前的文章:
如何找到模型中你想要找的所有元素
這篇文章用到的模型和腳本可以在百度云盤上下載到:
鏈接:https://pan.baidu.com/s/1AMxpHKfwPl1RSHifdQ_RoA
提取碼:ki13
總結(jié)
以上是生活随笔為你收集整理的不同的模块中定义同样的宏为不同的值合法吗_如何创建自定义的建模规范的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: acer软件保护卡怎么解除_Acer软件
- 下一篇: Codeforces 173E Camp