資源簡介
MatlabGUI調用Simulink編譯成可執行的exe文件的解決方法-GUIDE_fig.m
我(們)曾經N次遇到過這樣的提問:
“為什么GUI里如果使用sim, simset等函數時,就不能編譯成可執行的exe文件發布呢?”
我們也解釋過很多次,原因是Matlab的compiler不支持sim等與simulink相關的函數,同樣,比如說神經網絡相關的函數也不支持。
然而,GUI和Simulink混合編程,是可以編譯成可執行exe文件的,使用Matlab自帶的RTbuilder工具箱函數編譯即可。
使用的方法是:先使用RTW把simulink編譯成exe文件,然后與GUI一起編譯(GUI可以和exe文件一起編譯的)
當然,這個時候請特別注意:不需要在GUI里使用sim函數了,流程是這樣的:
1:設計GUI回調函數的時候,把GUI傳遞的參數傳遞給Simulink時,不要直接使用simset等函數,而是把參數寫到一個mat文件里,比如:
x = [0.2 handles.In1 handles.In2]';
save Input.mat x
2:設計Simulink模型的時候,記得讓simulink從mat文件里讀取參數(就是剛剛GUI寫入的參數),同樣,輸出參數也寫到mat文件里,(如output.mat), 比如:
Matlab57.jpg Matlab GUI調用Simulink,編譯成可執行的exe文件的解決方法
3:在GUI回調函數里,不要直接使用sim命令,而是直接調用exe文件(simulink模型編譯 好的exe文件)
!SL_model.exe
4:如果要在GUI上面顯示參數,直接讀取output.mat文件即可:
load Output.mat
set))
guidata
現在大家對整個流程應該熟悉了吧? 也就是Matlab GUI與Simulink設計的程序,照樣可以編譯成exe文件發布...
附件里為用到的.m, ,fig和mdl文件,下載試一下如下命令:
GUIDE_fig.fig Matlab GUI調用Simulink,編譯成可執行的exe文件的解決方法
GUIDE_fig.m Matlab GUI調用Simulink,編譯成可執行的exe文件的解決方法
SL_model.mdl Matlab GUI調用Simulink,編譯成可執行的exe文件的解決方法
x = [0 0 0]';
save Input.mat x
rtwbuild
mcc -m GUIDE_fig.m -a SL_model.exe
注明:以上文件均來自Mathworks公司提供,Matlab中文論壇翻譯整理。
我(們)曾經N次遇到過這樣的提問:
“為什么GUI里如果使用sim, simset等函數時,就不能編譯成可執行的exe文件發布呢?”
我們也解釋過很多次,原因是Matlab的compiler不支持sim等與simulink相關的函數,同樣,比如說神經網絡相關的函數也不支持。
然而,GUI和Simulink混合編程,是可以編譯成可執行exe文件的,使用Matlab自帶的RTbuilder工具箱函數編譯即可。
使用的方法是:先使用RTW把simulink編譯成exe文件,然后與GUI一起編譯(GUI可以和exe文件一起編譯的)
當然,這個時候請特別注意:不需要在GUI里使用sim函數了,流程是這樣的:
1:設計GUI回調函數的時候,把GUI傳遞的參數傳遞給Simulink時,不要直接使用simset等函數,而是把參數寫到一個mat文件里,比如:
x = [0.2 handles.In1 handles.In2]';
save Input.mat x
2:設計Simulink模型的時候,記得讓simulink從mat文件里讀取參數(就是剛剛GUI寫入的參數),同樣,輸出參數也寫到mat文件里,(如output.mat), 比如:
Matlab57.jpg Matlab GUI調用Simulink,編譯成可執行的exe文件的解決方法
3:在GUI回調函數里,不要直接使用sim命令,而是直接調用exe文件(simulink模型編譯 好的exe文件)
!SL_model.exe
4:如果要在GUI上面顯示參數,直接讀取output.mat文件即可:
load Output.mat
set))
guidata
現在大家對整個流程應該熟悉了吧? 也就是Matlab GUI與Simulink設計的程序,照樣可以編譯成exe文件發布...
附件里為用到的.m, ,fig和mdl文件,下載試一下如下命令:
GUIDE_fig.fig Matlab GUI調用Simulink,編譯成可執行的exe文件的解決方法
GUIDE_fig.m Matlab GUI調用Simulink,編譯成可執行的exe文件的解決方法
SL_model.mdl Matlab GUI調用Simulink,編譯成可執行的exe文件的解決方法
x = [0 0 0]';
save Input.mat x
rtwbuild
mcc -m GUIDE_fig.m -a SL_model.exe
注明:以上文件均來自Mathworks公司提供,Matlab中文論壇翻譯整理。
代碼片段和文件信息
function?varargout?=?GUIDE_fig(varargin)
%GUIDE_FIG?M-file?for?GUIDE_fig.fig
%??????GUIDE_FIG?by?itself?creates?a?new?GUIDE_FIG?or?raises?the?existing
%??????singleton*.
%
%??????H?=?GUIDE_FIG?returns?the?handle?to?a?new?GUIDE_FIG?or?the?handle?to
%??????the?existing?singleton*.
%
%??????GUIDE_FIG(‘Property‘‘Value‘...)?creates?a?new?GUIDE_FIG?using?the
%??????given?property?value?pairs.?Unrecognized?properties?are?passed?via
%??????varargin?to?GUIDE_fig_OpeningFcn.??This?calling?syntax?produces?a
%??????warning?when?there?is?an?existing?singleton*.
%
%??????GUIDE_FIG(‘CALLBACK‘)?and?GUIDE_FIG(‘CALLBACK‘hobject...)?call?the
%??????local?function?named?CALLBACK?in?GUIDE_FIG.M?with?the?given?input
%??????arguments.
%
%??????*See?GUI?Options?on?GUIDE‘s?Tools?menu.??Choose?“GUI?allows?only?one
%??????instance?to?run?(singleton)“.
%
%?See?also:?GUIDE?GUIDATA?GUIHANDLES
%?Edit?the?above?text?to?modify?the?response?to?help?GUIDE_fig
%?Last?Modified?by?GUIDE?v2.5?12-Dec-2005?09:54:06
%?Begin?initialization?code?-?DO?NOT?EDIT
gui_Singleton?=?1;
gui_State?=?struct(‘gui_Name‘???????mfilename?...
???????????????????‘gui_Singleton‘??gui_Singleton?...
???????????????????‘gui_OpeningFcn‘?@GUIDE_fig_OpeningFcn?...
???????????????????‘gui_OutputFcn‘??@GUIDE_fig_OutputFcn?...
???????????????????‘gui_LayoutFcn‘??[]?...
???????????????????‘gui_Callback‘???[]);
if?nargin?&&?ischar(varargin{1})
???gui_State.gui_Callback?=?str2func(varargin{1});
end
if?nargout
????[varargout{1:nargout}]?=?gui_mainfcn(gui_State?varargin{:});
else
????gui_mainfcn(gui_State?varargin{:});
end
%?End?initialization?code?-?DO?NOT?EDIT
%?---?Outputs?from?this?function?are?returned?to?the?command?line.
function?varargout?=?GUIDE_fig_OutputFcn(hobject?eventdata?handles)
%?varargout??cell?array?for?returning?output?args?(see?VARARGOUT);
%?hobject????handle?to?figure
%?eventdata??reserved?-?to?be?defined?in?a?future?version?of?MATLAB
%?handles????structure?with?handles?and?user?data?(see?GUIDATA)
%?Get?default?command?line?output?from?handles?structure
varargout{1}?=?handles.output;
function?In1_Callback(hobject?eventdata?handles)
%?hobject????handle?to?In1?(see?GCBO)
%?eventdata??reserved?-?to?be?defined?in?a?future?version?of?MATLAB
%?handles????structure?with?handles?and?user?data?(see?GUIDATA)
%?Hints:?get(hobject‘String‘)?returns?contents?of?In1?as?text
%????????str2double(get(hobject‘String‘))?returns?contents?of?In1?as?a?double
handles.In1?=?str2double(get(hobject‘String‘));
guidata(hobjecthandles)
%?---?Executes?during?object?creation?after?setting?all?properties.
f
評論
共有 條評論