我經常跟做MBD開發的朋友說:
MBD軟件開發中一定要做SIL。
為什么這么說?下面我來掰扯掰扯。
MSIL測試的背景
SIL測試的目的是為了驗證自動生成的代碼和用于代碼生成的模型的一致性,做這項測試的初衷是因為代碼生成過程可能會引入錯誤。注意,我這里提到的代碼生成過程出錯,這里面可能涵蓋兩方面的錯誤:
來自于代碼生成工具本身:代碼生成工具作為一款軟件,它和其他所有軟件一樣,都是可能有bug的,沒有哪個軟件公司可以承諾自己公司的軟件產品沒有bug,MathWorks也不例外;
來自于代碼生成用戶:代碼生成過程是一個可以定制化的過程,用戶在這個過程中可能做一些自己的定制,如果定制化的內容沒有經過嚴格、充分的驗證,那么也是很容易引入bug的。
并且,相比之下,第二種錯誤發生的概率會更大一些。
既然這個過程可能引入bug,那么,即便是正確的模型,也可能被生成出來不正確的代碼。為了防止這類bug,SIL測試是有必要做的。當然,也有人說他們對代碼生成過程不做定制,并且,他們也充分信任MathWorks的代碼生成工具。
我們選擇了代碼生成工具,選擇了代碼生成的開發模式,我們自然是信任代碼生成工具的。問題是,信任不能保證代碼生成工具就不發生錯誤,盡管代碼生成工具發生錯誤的概率非常小,小到很多用戶可能從來沒有遇到過,但概率小不代表沒有,咱們中國有句老話,叫做“以防萬一”,即便是非常小概率發生的事情,可一旦發生,很可能會帶來很嚴重的后果。如果可以通過增加一個環節,在基本上不增加開發成本的情況下,就可以驗證代碼和模型的一致性,就可以避免代碼生成過程出錯導致的最終結果出錯,那我們又有什么理由拒絕呢?
沒錯,SIL就是這樣一種測試,基本上不增加你的開發時間,又能夠“以防萬一”。
M為什么SIL測試能夠“以防萬一”
如上圖所示,SIL測試是對比測試,測試過程中,我們給代碼編譯成的可執行文件和用于代碼生成的模型相同的輸入,我們觀測它們的輸出是否一致,如果輸入信號的數據量足夠大,能夠覆蓋各種路徑,涵蓋各種信號范圍,并且兩者的輸出結果一致,我們可以大致認為代碼和模型做行為上是一致的。
M為什么SIL基本上不增加開發時間
測試用例創建
SIL測試發生在代碼生成之后,我們知道,代碼生成的前提是模型經過充分驗證,所以SIL測試階段,模型的單元測試早已完成,我們可以復用模型單元測試時使用的測試用例,所以,測試過程中耗時最多的測試用例設計環節在SIL測試的時候就不再是問題。
前面我們提到,SIL測試的測試數據越多越好,如果我們認為單元測試的測試用例不夠多,沒有關系,除了使用單元測試的測試用例之外,還可以通過工具自動產生測試用例,在MathWorks工具鏈中,Simulink Design Verifier就可以用于自動生成測試用例。注意,我在SIL測試的時候提到自動產生測試用例,這種測試用例不能用于功能測試,因為這種測試用例不能表達功能意義,但卻能滿足覆蓋率要求。我們做SIL測試的時候,驗證的就是相同的測試輸入條件下,代碼和模型產生出相同的輸出,所以這個環節沒有必要關心功能,這個環節里,我們希望有覆蓋各種狀況的大量數據。
測試過程的執行
在有了測試用例之后,可以通過幾行命令執行測試過程。假如我們使用了如下命令
slvnvmakeharness(‘demo_model’)
創建了測試框架,如下圖:
假如測試數據已經導入到SignalBuilder模塊,那么,SIL測試只需執行如下命令:
test_frame_name=‘demo_model_harness’;
set_param(test_frame_name,‘SaveOutput’,‘on’);
set_param(test_frame_name,‘OutputSaveName’,’model_output’);
set_param(‘demo_model_harnss/TestUnit’,’SimulationMode’,’Normal’);
sim(test_frame_name);
set_param(test_frame_name,‘OutputSaveName’,’SIL_output’);
set_param(‘demo_model_harnss/TestUnit’,’SimulationMode’,’Software-in-the-Loop(SIL)’);
sim(test_frame_name);
compare_and_report(model_output,SIL_output);
兩次仿真的結果被分別保存在model_output和SIL_output里面,對比這兩個變量,并給出報告,就算是完成SIL過程了。這里compare_and_report()不是MATLAB內置的函數,需要用戶按照自己的要求自行編寫,無非是把兩次仿真的結果做對比,并生成報告,僅此而已。
現在可以理解我為什么一直強調一定要做SIL的原因了吧?因為:
SIL不增加開發時間,又能夠做到“以防萬一”。
往期 | 老胡專欄
為什么要基于模型設計?
自動代碼生成五大原則
說說代碼生成中的數據管理
什么樣的模型算正確的模型?
簡單說說MIL、SIL、PIL和HIL
-
數據
+關注
關注
8文章
7257瀏覽量
91938 -
輸入信號
+關注
關注
0文章
473瀏覽量
12898
發布評論請先 登錄
大模型在半導體行業的應用可行性分析
求助,關于NXP S32K3xx硬件板的SIL測試問題求解
模型測試全流程實戰沙盤,賦能CI/CD及SiL測試 ——TPT Workshop邀請函

用于 SIL3 應用工業 PLC 解決方案的評估套件STEVAL-SILKT01
斯丹麥德電子SIL干簧繼電器:專為自動測試設備(ATE)設計
IEC 60947-2用于充電樁漏電流保護標準認證的可行性分析

關于電氣火災監控系統與電氣火災防護在實際應用中的可行性分析

基于智能照明系統在民用建筑中的可行性研究分析

服務器數據恢復—LINUX系統刪除/格式化的數據恢復可行性分析
基于LIBS的馬鈴薯中鉻元素定量分析方法研究

應用案例分享 | 智駕路試數據分析及 SiL/HiL 回灌案例介紹

評論