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