電子商務(wù)網(wǎng)站建設(shè)商城網(wǎng)站百度網(wǎng)站推廣一年多少錢
目錄
一、前言
二、Simulink 知多少
三、濾波算法
四、Model Verification
五、Model Coverage
六、Simulink測試實例
七、Simulink Test
八、Test Manager
九、Test Harness?
?十、 學(xué)習(xí)
一、前言
Simulink從2017b以后更加工程化和實用化,基于MBD的功能日趨完善,從需求定義、模型鏈接,測試用例,模型測試,代碼生成等等,那對于初識它的朋友可能需要先了解一些前期知識,然后在項目和工程中實戰(zhàn)積攢經(jīng)驗,變成一個老手。
二、Simulink 知多少
派生對象包括Simulink Signal ,Simulink Parameter, Simulink Bus, Simulink Alias, Simulink Variant, 創(chuàng)建方式包括在腳本以構(gòu)造函數(shù)的方法創(chuàng)建,在模型瀏覽器創(chuàng)建。
Simulink Parameter是Simulink 參數(shù)對象?, 在工程中常以配置參數(shù)的方式設(shè)置; Simulink Lookup Table是與lookup table模塊相對應(yīng)的數(shù)據(jù)類型,插值點和插值點對應(yīng)數(shù)據(jù)的集合。Breakpoint是插值點的集合。Simulink Signal是信號,與信號線相關(guān)聯(lián)。Numeric/Alias?Type是其他數(shù)據(jù)類型的別名。Bus是總線,類似于結(jié)構(gòu)體。Simulink.Variant有兩種狀態(tài)滿足條件激活,未激活是0激活是1。
?如何對Bus中的各元素進行初始化,使用Bus Assignment 。
如何保存工作空間數(shù)據(jù)?點擊數(shù)據(jù)工作空間,然后Ctrl+S即可??梢员4?mat或者m文件。
數(shù)據(jù)字典即數(shù)據(jù)源,模型運行時不需要重新加載。使模型和數(shù)據(jù)字典關(guān)聯(lián),模型運行時自動從數(shù)據(jù)字典里搜索數(shù)據(jù)。數(shù)據(jù)字典,可回溯,因為數(shù)據(jù)字典不僅記錄數(shù)據(jù),還記錄對數(shù)據(jù)的修改行為和版本。如何創(chuàng)建數(shù)據(jù)字典?
?手動創(chuàng)建數(shù)據(jù)字典?
Simulink.data.dictionary.create('DataDictionary\dic2.sldd');obj=Simulink.data.dictionary.open('DataDictionary\dic2.sldd');importFromBaseWorkspace(obj,'varList',{'Sig','Var'});listEntry(obj)saveChanges(obj)close(obj)
?Bus針對結(jié)構(gòu)體,Mux可以合成向量,Mux要求多個元素具有相同的數(shù)據(jù)類型。
Selector是Signal Routine里面的模塊,主要用于提取向量或者元素。
Weighted Sample Time Math與采樣時間相關(guān)的模塊
Goto模塊用于連接兩個斷開連線的端口,Goto設(shè)置為Global表示全局可見(其他子系統(tǒng)都可見),設(shè)置為Scoped表示定義范圍內(nèi)可見,此時要結(jié)合Goto Tag Visibility模塊一起使用,表示該層級及該層級以下的子系統(tǒng)均可以識別。
Multiport Switch 可以實現(xiàn)switch case功能。
Signal Specification?模塊是虛擬模塊,允許您指定連接到其輸入和輸出端口上的信號的屬性,如果指定的屬性與其端口上連接的模塊所指定的屬性沖突,Simulink??軟件將在編譯模型時顯示錯誤消息,在模型的仿真中不起任何作用。
零階保持器(ZOH,Zero-Order Hold)是將輸入信號每過一個采樣時間更新一次,并保持到下一次采樣,多用于將連續(xù)信號離散化。
Signal Builder可以生成各式各樣的信號,也可以從workspace和外部導(dǎo)入。
1.創(chuàng)建excel文件
?2.導(dǎo)入到SB中:打開設(shè)置,選擇File下Import from File
?如何查看模型模塊的執(zhí)行順序?
?如何設(shè)置多速率模型?打開Block parameter參數(shù),設(shè)置為原子,然后設(shè)置采樣時間[0.2,0.1]表示偏置為0.1后開始,速率為0.2。
三、濾波算法
3.1 均值濾波
均值濾波是典型的線性濾波算法
,是指用當(dāng)前像素點周圍nxn個像素值的均值來代替當(dāng)前像素值。
當(dāng)前是指設(shè)置一個緩沖區(qū)Buf,存儲上N個時刻的值,然后取平均值作為當(dāng)前值。
3.2 中值濾波
中值濾波法是一種非線性平滑技術(shù)
,它將每一像素點的灰度值設(shè)置為該點某鄰域窗口內(nèi)的所有像素點灰度值的中值。
中值濾波的方法
是用某種結(jié)構(gòu)的二維滑動模板,將板內(nèi)像素按照像素值的大小進行排序,生成單調(diào)上升(或下降)的為二維數(shù)據(jù)序列,選取中間的數(shù)值。
3.3 低通濾波
一階低通濾波法采用本次采樣值與上次濾波輸出值進行加權(quán),得到有效濾波值,使得輸出對輸入有反饋作用。濾波系數(shù)越小,濾波結(jié)果越平穩(wěn),靈敏度越低;濾波系數(shù)越大,靈敏度越高,濾波結(jié)果越不穩(wěn)定。
四、Model Verification
模型檢查模塊主要分為基本用途,防止報錯,底層實現(xiàn),結(jié)果觀測,梯度檢測提示
Check Discrete Gradient 模塊用于檢查本時刻和上一時刻差值。
?Assertion模塊對是否為零進行驗證,為零報錯。
Check? Static Range 檢查輸入信號的最大最小值,超出范圍報錯。
五、Model Coverage
執(zhí)行覆蓋度Execution Coverage,EC是最基本的覆蓋形式。對于每個項目,執(zhí)行覆蓋度確定項目是否在仿真期間執(zhí)行
決策覆蓋度Decision Coverage,DC:分析表示模型中決策點的元素,例如 Switch 模塊或 Stateflow 狀態(tài)。對于每個項目,決策覆蓋度確定通過仿真所遍歷的項目的仿真路徑總數(shù)的百分比
條件覆蓋度Condition Coverage,CC:分析輸出其輸入(例如,邏輯運算符模塊)和Stateflow轉(zhuǎn)移的邏輯組合的模塊。當(dāng)測試用例導(dǎo)致模型中邏輯模塊的每個實例的每個輸入以及轉(zhuǎn)移的每個條件在仿真期間至少為真一次,在仿真期間至少為假一次時,測試用例可實現(xiàn)完全覆蓋。條件覆蓋度分析報告測試用例是否完全覆蓋了模型中每個模塊。
收集模型的覆蓋度時,可能無法實現(xiàn) 100% 的條件覆蓋度。例如,如果指定短路邏輯模塊,通過在配置參數(shù)的覆蓋度窗格中選擇將 Simulink 邏輯模塊視為短路,您可能無法實現(xiàn)該模塊的 100% 條件覆蓋度。
修正條件決策覆蓋度MCDC:Simulink Coverage 軟件修正的條件/決策覆蓋度分析擴展了決策和條件覆蓋度功能。它分析輸出其輸入和 Stateflow 轉(zhuǎn)移的邏輯組合的模塊,以確定測試用例測試邏輯模塊輸入和轉(zhuǎn)移條件的獨立性的程度。
- 當(dāng)一個輸入的變化(獨立于任何其他輸入)導(dǎo)致模塊輸出發(fā)生變化時,測試用例可實現(xiàn)模塊的完全覆蓋。
- 當(dāng)至少一次條件的更改觸發(fā)每個條件的轉(zhuǎn)移時,測試用例可實現(xiàn) Stateflow 轉(zhuǎn)移的完全覆蓋。
在模型配置中點擊Coverage,勾選Enable coverage analysis,在Coverage metrics中選擇具體的覆蓋度類型,運行模型后會自動彈出覆蓋度窗口。
?
?
?六、Simulink測試實例
具備成為VIP的條件1&&2&&(3||4);1年齡滿18歲,2至少充過100元,3游戲年齡至少1年,4被舉報次數(shù)少于3次
使用Signal Builder作為測試輸入,設(shè)置輸入及輸出VIP
?簡單的模型設(shè)置為:
?子系統(tǒng)為:
?測試輸出結(jié)果:
?打開Simulink Data Inspector
?七、Simulink Test
Test Sequence &&?Test Assessment
使用Test Sequence 模塊可以指定測試步驟,行為,轉(zhuǎn)移。當(dāng)輸入時間序列步驟時,應(yīng)當(dāng)提供時間定義的測試向量。一個test sequence 可以包含測試步驟,且測試步驟是富有層級的,根據(jù)Tag進行跳轉(zhuǎn)。編寫示例:
?Test Assessment與Test Sequence非常類似,但是作為評估仿真測試場景,步驟來使用,關(guān)鍵詞是Verify
示例1:
模型如下:
?設(shè)置TestSequence
?設(shè)置Test Assessment:
?示例2:
1.打開sltestTestSequenceExample
2.右擊shift_controller建立Test Harness,Sources? and Sink 選擇Test Sequence
??3.添加常量Limit設(shè)置為2,并編寫序列步驟
?4.將仿真時間設(shè)置為15s,然后運行test harness
?Simulation Inspector
?示例3:
八、Test Manager
TestManager的組件包含下面的關(guān)系:Test File >Test Suite > Test Case > Simulation = Baseline,
Test File對應(yīng)模型文件,Test Suite 對應(yīng)子系統(tǒng),Test Case 對應(yīng)子功能。
simulation test 不依賴于其他的文件,只要TestHarness可以執(zhí)行通過,那么simulation test也可以通過。Baseline test依賴外部文件,比如期望輸入和輸出。
模型:
simulation test
?然后對每一個子系統(tǒng)建立一個test harness,建立4個harness, constant 作為輸入。
九、Test Harness?
Baseline test?測試模型如下:
?該子系統(tǒng)的功能是對值進行有效性驗證:
?對該子系統(tǒng)創(chuàng)建Test Harness:
?創(chuàng)建Signal Builder信號Group1和Group2:
Test File:一個Test File對應(yīng)一個模型文件
Test Suite:每一個測試文件中,都可以定義若干個Test Suite,可以把同一類型或同一功能的測試用例放到一個Test Suite中
Test Case:每一個Test Suite中,可以定義若干個Test Case,Test Case中規(guī)定了測試詳細的執(zhí)行信息。實際測試執(zhí)行的時候也針對每一個Test Case進行測試的
Create Test Case from External File:測試用例的具體信息從excel模板中提取,這篇文章重點介紹以這種形式來創(chuàng)建測試用例
?在Harness中打開Test Manager,?創(chuàng)建TestFile并對Test Suit和Test case命名,在case中“System Under Test”選擇模型及harness 文件名,Baseline Criteria中加載期望輸出,(如果不會,可以點擊Capture給你創(chuàng)建一個示例),如果有多個輸出,要對列的名字加以命名。
?在“Iterations”欄中點擊“Auto Generate”,并在右上角+號欄選擇Baseline,選擇相應(yīng)的文件
?點擊運行即可生成測試結(jié)果,也可以導(dǎo)出測試報告Report。
?TestCase 設(shè)置項描述:
TAGS:可以給一個標(biāo)簽名,比如按照功能,測試類型等,方便以后批量查找測試用例
DESCRIPTION:可以給描述測試用例的測試步驟,方法等,方便理解
REQUIREMENTS:可以和需求關(guān)聯(lián)。Matlab現(xiàn)在有“Simulink Requirements”這個Toolbox,可以在里面寫需求文檔,將需求和模型,以及對應(yīng)的測試用例關(guān)聯(lián)起來,以滿足A-ASPICE或者ISO26262所規(guī)定的軟件開發(fā)流程中的可追溯性的要求。
SYSTEM UNDER TEST:里面設(shè)置了要被測試的模型,或者針對模型中所創(chuàng)建的某一個Test Harness模型進行測試
PARAMETER OVERRIDES:這里如果是根據(jù)excel模板生成的測試用例的話,是鎖定不能修改的,里面列出了某個測試用例中,需要改變的參數(shù)
CALLBACKS:里面分為3個不同時刻的,運行我們想要的腳本
INPUTS:定義測試的輸入信號,這里如果是根據(jù)excel模板生成的測試用例的話,是鎖定不能修改的。另外這邊有兩個選項可以勾選,如果勾選“Include input data in test result”的話,在最后的結(jié)果中,也會顯示輸入信號。如果勾選“Stop simulation at last time point”的話,仿真測試到最后一個輸入點的時候就會停止。
SIMULATION OUTPUTS:可以在里面再選取模型中l(wèi)ogged的信號作為觀測量
CONFIGURATION SETTINGS OVERRIDES:可以在仿真測試的時候?qū)υP偷脑O(shè)置進行覆蓋
BASELINE CRITERIA:里面設(shè)置了期望值,以及比較仿真測試結(jié)果和期望值的一些參數(shù)。這里如果是根據(jù)excel模板生成的測試用例的話,是鎖定不能修改的。但可以點擊Edit在excel文件中修改。對比數(shù)據(jù)時,可以設(shè)置絕對誤差,相對誤差,時序領(lǐng)先誤差和時序滯后誤差。
ITERATIONS:迭代測試。這里如果是根據(jù)excel模板生成的測試用例的話,是鎖定不能修改的。會根據(jù)測試用例數(shù)自動生成,表示這個測試會根據(jù)不同的配置重復(fù)進行
COVERAGE SETTINGS:統(tǒng)計覆蓋度的設(shè)置。如果需要統(tǒng)計模型的覆蓋度的話,就勾選“Record coverage for referenced models”和“Record coverage for system under test”
test Sequence基本知識:
ramp(et)根據(jù)測試步執(zhí)行的時間返回值,也就是測試步執(zhí)行時間,可以用這個函數(shù)來線性變化輸出,et表示的是當(dāng)前測試步執(zhí)行的時間
Heaviside(x):創(chuàng)建一個階躍信號,x<0時輸出0,x>0時輸出1
swatooth(x)創(chuàng)建一個鋸齒波,要指定測試步驟內(nèi)的鋸齒波周期數(shù),請將此運算符與經(jīng)過時間(et)運算符一起使用;sawtooth(et/10) 10s一個周期的鋸齒波
square(x)創(chuàng)建周期為1且范圍為-1到1的方波。在區(qū)間0<=x<1中,square(x)返回1表示0<=x<0.5,返回-1表示0.5<=x<1。square(et/10) 10s一個周期的方波
triangle(x)創(chuàng)建周期為1且范圍為-1到1的三角形波。在區(qū)間0<=x<0.5時,三角形(x)增加。三角波和鋸齒波的區(qū)別在于三角波的上升和下降時間相等;triangle(et/10)10s一個周期的三角波
verify(expression,errorMessage)為失敗的verify語句返回指定的錯誤消息。如果在Test manager中運行測試,錯誤消息將顯示在仿真日志中。如果在Test manager之外運行測試,則診斷查看器中將顯示該消息
在實時環(huán)境中,驗證語句失敗不會產(chǎn)生警告。但是,如果在Test manager中運行實時測試用例,則失敗將顯示在測試用例結(jié)果的驗證語句部分。還可以使用getVerifyRuns訪問有關(guān)驗證運行的信息
verify(expression,identifier,errorMessage) 比上面一個多了標(biāo)識,
verify(x > y && z > 10,'TestReq1:bothGreater','x, y, and z are %d,%d,%d',x,y,z)該驗證語句的結(jié)果以標(biāo)簽TestReq1:bothCreate開頭,如果測試失敗,則以errorMessage開頭。
assert(expression)對邏輯表達式求值。如果assert語句的計算結(jié)果為false,仿真將停止并返回錯誤。assert(expression,errmsg)為失敗的assert語句返回指定的錯誤消息字符串(errmsg)
test Harness總結(jié):
1.如果驗證的模型比較簡單,直接上輸入:Signal Builder仿真,輸出 baseline excel
2.模型比較復(fù)雜也可以用上述方法,Signal Builder使用外部excel作為輸入,建立多個group,然后使用迭代的方法進行測試,輸出 baseline excel
3.建立testharness使用test sequence 作為輸入,拷貝之前建立的測試用例excel,每一個case對應(yīng)一個testHarness。
4.使用import和output,這樣的話建立testFile使用模板來建立比較快速
5.使用Constant 作為輸入,使用Model Verification來對比;直接在Constant中建立測試用例即可,每一個case對應(yīng)一個testHarness
?十、 學(xué)習(xí)
命令窗口demo,doc,help xx。
Video Portal Main Page - MATLAB & Simulink (mathworks.cn)
首頁 - MATLAB中文論壇 (ilovematlab.cn)
參考:
MATLAB Simulink的各種模型覆蓋度 - 知乎 (zhihu.com)
使用Simulink Test進行單元測試 - 知乎 (zhihu.com)Test Sequence與Test Manager聯(lián)合測試Simulink模型_贊哥哥s的博客-CSDN博客