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