simulink如何編譯成c代碼
⑴ 如何將c文件在matlab simulink中混編
方法/步驟
菜單:工程→ 屬性... 選擇配置屬性下的 VC++ 目錄。在包含目錄欄目中添加matlab相關的include文件。我的matlab裝在F盤中,只要把F:\MatLab\extern\include\win64和F:\MatLab\extern\include兩個目錄配置上去就好,這里注意下要是win64的vs所建立的工程必須是x64的,否則會出錯,比較低的版本則沒有win64,只有win32 這樣是建立一個x86或win32工程即可
在 庫目錄欄目中添加matlab相關的lib文件。例如:F:\MatLab\extern\lib\win32\microsoft;F:\MatLab\extern\lib\win32;F:\MatLab\extern\lib\win64\microsoft;F:\MatLab\extern\lib\win64;
注意這里是針對於不同的工程和機器位數,最好全部加上去,以免出錯。
菜單:工程 屬性 選擇配置屬性下的 連接器→ 輸入。
在 附加依賴項 欄目中輸入項目需要引用matlab的的lib文件庫。
libmat.lib libeng.lib libmx.lib
菜單:工程 屬性 選擇配置屬性下的 連接器→ 常規。
在 附加庫目錄 欄目中,添加庫所在的目錄名稱。如:F:\MatLab\bin\win64
這一步相當的重要,不然的話,各種dll文件找不到,lib文件找不到之類的報錯。
測試:從網上隨便找一個代碼
#include <iostream>#include <iomanip>using namespace std;#include <engine.h>#include <string.h>
void main(){ // 定義循環變數 int i = 0, j = 0;
// 狀態變數
int nStatus = 0; // 定義MATLAB引擎指針 Engine *ep;
// 定義mxArray變數指針 mxArray *A, *B;
// 定義矩陣數組
// 注意:VC中矩陣的行列次序與MATLAB正好時相反,需要轉置。 double arData[3][3] = {{7.5,16.3,9.6},{13.2,8.9,12.3},{9.6,5.4,13.7}}; double arResData[3][3];
// 輸出原矩陣 cout<<"原矩陣為:"<<endl; for(i = 0; i < 3; i++) { for(j = 0; j < 3; j++) { cout<<setw(10)<<arData[i][j]<<" "; } cout<<endl; } // 打開MATLAB引擎 ep = engOpen(NULL); if(ep == NULL) { cout<<"無法打開MATLAB引擎。"<<endl; exit(EXIT_FAILURE); }
// 是否顯示MATLAB窗口:true-顯示;false-隱藏。
nStatus = engSetVisible(ep, false);
if(nStatus != 0)
{
cout<<"設置MATLAB顯示屬性失敗。"<<endl;
exit(EXIT_FAILURE);
}
// 為mxArray變數分配空間 A = mxCreateDoubleMatrix(3,3,mxREAL); B = mxCreateDoubleMatrix(3,3,mxREAL); if(A == NULL || B == NULL) { cout<<"為mxArray變數分配空間失敗。"<<endl;
exit(EXIT_FAILURE); }
// 將數組中的數據寫入到mxArray空間中
memcpy((void*)mxGetPr(A),(void*)arData,sizeof(arData));
// 將矩陣變數A寫入到MATLAB引擎空間
nStatus = engPutVariable(ep,"A",A);
if(nStatus != 0)
{
cout<<"矩陣變數寫入MATLAB引擎空間失敗。"<<endl;
exit(EXIT_FAILURE);
}
// 執行引擎命令求矩陣A的逆矩陣
nStatus = engEvalString(ep,"B=inv(A)");
if(nStatus != 0)
{
cout<<"執行MATLAB引擎命令失敗。"<<endl;
exit(EXIT_FAILURE);
}
// 從MATLAB引擎空間中讀取執行結果
B = engGetVariable(ep,"B");
// 將矩陣變數B復制到數組arResData中
memcpy((void*)arResData,(void*)mxGetPr(B),sizeof(arResData));
// 釋放矩陣變數空間
mxDestroyArray(A);
mxDestroyArray(B);
// 關閉MATLAB引擎
engClose(ep);
// 輸出計算結果
cout<<"逆矩陣為:"<<endl;
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
cout<<setw(10)<<arResData[i][j]<<" ";
}
cout<<endl;
}
// 暫停程序,查看結果
system("pause");
}
⑵ 如何將simulink中的模塊轉成c語言代碼並在vc中實現
滑鼠分別點擊選擇Target Platforms下屬的 32-bit windows 或 64-bit windows
Target Platforms分別顯示
Target Platforms(win32)
Target Platforms(win64)
表示IDE默認編譯的方式。括弧內就是將要編譯的是32位,還是64位。執行Run就完成編譯了。
⑶ simulink 怎麼生成C語言
Simulink是MATLAB最重要的組件之一,它提供一個動態系統建模、模擬和綜合分析的集成環境。在該環境中,無需大量書寫程序,而只需要通過簡單直觀的滑鼠操作,就可構造出復雜的系統。Simulink具有適應面廣、結構和流程清晰及模擬精細、貼近實際、效率高、靈活等優點,並基於以上優點Simulink已被廣泛應用於控制理論和數字信號處理的復雜模擬和設計。同時有大量的第三方軟體和硬體可應用於或被要求應用於Simulink。
至於怎樣生成C語言,我也不知道,查了下,看人說要選擇Simulink窗口下Simulation/Configuration Parameters命令,選擇Real-Time Workshop控制面板來選擇參數。
⑷ 菜鳥請教如何在Simulink下利用Real-Time Workshop生成C語言代碼。
我剛剛弄了一下,是在Simulation/ConfigurationParameter/codegeneration
設置systermtargetfile ,如下圖:
其生成的文件,就在你打開這個模型文件夾里,生成的好像是.autosave其可以用c++6.0打開。如果你看不習慣,可以下個UE軟體,把其轉換成.c或.c++文件。希望能夠幫助你哈!!
⑸ 你好。看到您的提問:simulink如何轉換c語言的帖子。最近我也在弄這個東西。。我用rtw生成C代碼後。
混編的時候經常會因為版本啊 非正版啊 之類的出現各種問題。你的VC是正常安裝的嗎?不會是綠色版吧。
可以嘗試輸入mex -setup,首先會提示是否自動尋找安裝好的編譯器路徑,輸入n,然後matlab會列出所有該版本支持的compiler,你可以選擇Microsoft VC++ 6.0,然後提示是否使用默認路徑,你可以選擇n然後自己輸入路徑。
這樣嘗試一下,看看能否解決搜索不到編譯器的問題。
另外就是需要保證你的matlab中其他設置(如你使用dll的話就要設置mbuild)和VC++中工程的有關設置正確。提醒一下,matlab生成的文件要拷貝到工程文件夾下,相應的頭文件也要記得include進去。
有時候一些安裝上的問題,可以通過來解決。據說有時……貌似……能解決在VC++中使用matlab某些庫里的函數時找不到頭文件的問題。不過這個操作的機理我始終沒太搞清楚。
具體請上網查閱有關VC++與matlab混編的有關介紹。
⑹ 如何利用matlab把simulink轉化為c語言,出現這個錯誤,麻煩專家給指導
更改文件夾就好了
⑺ Simulink應用層模型與手寫C語言底層代碼如何打包集成
方式一在代碼中集成:應用層模型生成代碼後,在底層代碼中增加介面層,與應用層代碼整合編譯
方式二在模型中集成;編寫c mex s-function底層驅動模塊,將代碼封裝成模型,在simulink庫中直接使用
⑻ simulink模型怎麼變成代碼的
Simulink的代碼生成是靠RTW完成的,RTW生成代碼的過程大致分為4步:模型分析、由TLC生成C代碼、生成聯編文件、生成可執行程序。
除了第一步之外,其它幾步都可以進行定向設置,以生成所需的目標代碼,尤其是tlc文件的選擇,最為重要。
⑼ simulink生成的代碼如何使用
simulink的代碼生成是靠rtw完成的,rtw生成代碼的過程大致分為4步:模型分析、由tlc生成c代碼、生成聯編文件、生成可執行程序。
除了第一步之外,其它幾步都可以進行定向設置,以生成所需的目標代碼,尤其是tlc文件的選擇,最為重要。
⑽ simulink 轉換成c語言
混編的時候經常會因為版本啊 非正版啊 之類的出現各種問題。你的VC是正常安裝的嗎?不會是綠色版吧。
可以嘗試輸入mex -setup【注意mex和後面的-setup之間要有空格】,首先會提示是否自動尋找安裝好的編譯器路徑,輸入n,然後matlab會列出所有該版本支持的compiler,你可以選擇Microsoft VC++ 6.0,然後提示是否使用默認路徑,你可以選擇n然後自己輸入路徑。
這樣嘗試一下,看看能否解決搜索不到編譯器的問題。
另外就是需要保證你的matlab中其他設置(如你使用dll的話就要設置mbuild)和VC++中工程的有關設置正確。提醒一下,matlab生成的文件要拷貝到工程文件夾下,相應的頭文件也要記得include進去。
有時候一些安裝上的問題,可以通過【設置環境變數"matlab":<matlab安裝路徑>;"path"中添加:<matlab的安裝路徑\bin\win32> 】來解決。據說有時……貌似……能解決在VC++中使用matlab某些庫里的函數時找不到頭文件的問題。不過這個操作的機理我始終沒太搞清楚。
具體請上網查閱有關VC++與matlab混編的有關介紹。