標籤:

Interpreted matlab function與matlab function兩個模塊區別?

Simulink中Interpreted matlab function與matlab function兩個模塊都可以實現用戶自定義函數編寫的功能。在下以為兩者區別只是前者需要單獨編寫m文件,後者雙擊模塊打開後編寫m文件。最近發現編寫同樣的m程序時,兩者的輸出結果的Struct維度不一樣。請教一下這兩者到底有何區別?


MATLAB Function Block 在運行Simulink Model之前會生成C/C++代碼,然後編譯成二進位文件在模擬的時候來執行 (R2015a之後這個過程被簡化為JIT (just-in-time))。 Interpreted MATLAB Function Block採用的是MATLAB本身的引擎來解釋執行對應的MATLAB函數。

從模擬角度講:兩者的區別不是太大。當然,Interpreted MATLAB Function Block的執行速度會比較穩定,MATLAB Function Block因為會產生二進位文件,在第一次執行前需要進行code generation和compilation, 之後每次支持速度都會相對比較快。

從設置角度講:MATLAB Function Block里可以設置每個輸入輸出變數的類型,大小,維數等屬性。這些都會被用於Code generation和模擬. Interpreted MATLAB Function Block不需要擔心這些步驟,因此設置上會更簡單一些, 但是局限是不支持多維信號,不支持可變維數的信號,不支持zero-crossing detection,不支持code generation.採樣時間必須從驅動模塊繼承。

關於編譯器: Interpreted MATLAB Function Block是解釋執行,所以不需要使用編譯器,也不會生成任何文件。使用MATLAB Function Block要求系統安裝至少一個編譯器,否則模擬時可能會出現一些錯誤信息。下面的鏈接里能找到各個版本支持的編譯器

Support - Supported and Compatible Compilers for R2015b

如果是在Windows環境下,可以使用免費的SDK

關於Code generation: 如果最終需要把Simulink模型生成C代碼或者二進位/可執行文件,那麼應該選擇MATLAB Function Block。因為Interpreted MATLAB Function Block不支持code generation。最後請注意,在使用MATLAB Function Block時,不是所有的MATLAB函數能自動轉換成C/C++代碼。具體見如下文檔。

Functions and Objects Supported for C and C++ Code Generation

一旦需要在MATLAB Function Block里使用不在這個列表裡的函數,那麼只能採用coder.extrinsic來聲明它們,讓Simulink對它們進行解釋執行。但是在這種情況下就不能把模型自動編譯成可獨立執行的程序了。


推薦閱讀:

TAG:MATLAB | simulink |