Tạo file .exe cho giao diện GUI Matlab

Chào các bạn.

Sau khi các bạn đã biết cách để viết một giao diện GUI, biết cách dịch ra file .exe tự chạy trên một máy khác thì bây giờ mình kết hợp làm sao đây ??

Bài này mình dịch một project GUI tương đối là nhiều thành phần: RS232 Communication đã được post trong bài Lập trình giao tiếp RS232 qua Matlab

Bước 1: Thiết lập môi trường dịch (bước này bỏ qua nếu đã làm rồi )

Bước 2: Gõ lệnh deploytool và vào menu File chọn New Project, chọn Standalone Application, chọn tên project và nơi lưu project.

Giao diện Deployment Tool sẽ gồm có Main function, Other files và C/C++ files.

Một project GUI sẽ gồm có 2 file .m và .fig và có thể thêm các file .m và .fig nếu gọi các figure khác. Như vậy file add vào trong Main Function là file .m là file chính sẽ chạy project GUI đó.

Các bạn browse đến thư mục RS232 Communication và sẽ thấy nó chỉ cho phép chọn file .m. Ở đây mình phải chọn file RS232_Communication.m vì là file chính, còn modaldlg.m là file để mở cửa sổ yêu cầu chọn Yes, no.

Tiếp tục, click chuột phải vào Other files, chọn Add files và add các file còn lại trong project (chỉ các file .m và .fig thôi).

Xong xuôi thì giao diện sẽ ra như thế này:

Bước 3: Dịch project

Bây giờ là bước dịch, các bạn vào menu Tools -> Build (Ctr + B). Sau đó đi uống nước chờ nó dịch xong hehe. Cái này chờ lâu phết, đừng có nóng nhé. Không báo lỗi gì thì ok ngay.

Xong vụ rồi thì vào thư mục \distrib sẽ thấy file .exe của mình. Nhấn thử vào chạy xem thế nào.

Còn muốn đem sang máy khác thì phải đóng gói, vào Tools chọn Package (Ctr + P):

Sang máy không cài Matlab thì copy đồng thời file package và McrInstaller vào một thư mục, chạy ngon lành luôn. Mình thử nghiệm rồi.

Chạy nó sẽ ra thế này:

RS232_Communication_exe.zip

Mình có upload file .exe mà mình đã dịch làm bằng chứng he he.

{ 42 comments… add one }
  • hung_dtvt April 27, 2008, 9:19 pm

    Bác này biết nhiều về MATLAB ghê.

    Reply
  • botloc April 28, 2008, 10:24 pm

    ở bước 1: anh có thể giải thích giùm môi trường dịch ở đây là gì không, em đọc mà chẳng hiểu?
    Em đánh lệnh deploytool mà đâu có được, em dùng cả matlab 6.5 và 7 cũng kô được, nó báo lỗi là “Undefined function or variable ‘deploytool’.”. Anh có thể giải thích giùm em. 🙁

    Reply
  • hung_dtvt April 29, 2008, 5:54 am

    Ủa e có cái Help Matlab Compiler sao gõ lệnh Deploytool vẫn bị báo lỗi như bạn trên là sao a nhỉ?

    Reply
  • hung_dtvt May 1, 2008, 4:27 am

    À thế e dùng cái Matlab builder for COM có thể dịch được không vậy a? Đã làm thử nhưng báo lỗi nên ko thực hiện tiếp được. Thế cho e hỏi thời gian của thực hiện 1 chương trình trong GUI và chương trình sau khi dịch ra file .exe thì có giống nhau ko?Thanks a

    Reply
  • Minh Tam June 30, 2008, 7:24 pm

    Em biên dịch file adder.m bằng lệnh :mcc -m adder.m
    theo file help của Matleb nhưng khi chạy file adder.exe thì chỉ chạy ra màn hình lệnh của dos thôi. Anh làm thử và chỉ giúp em đã sai chỗ nào với.
    Cám ơn nhiều.

    Reply
  • tmtm July 24, 2008, 4:50 am

    Chào bạn, mình không biết nhiều về các ngôn ngữ lập trình. Mình cũng đang tìm hiểu để tạo một giao diện cho giao tiếp RS232 giữa PC và PIC. Theo bạn, với vấn đề này thì giải quyết bằng Matlab hay VB hay VC++ cái nào dẽ dàng và hệu quả nhất (mình cũng đã xem về vấn đề này bên picvietnam nhưng thật sự là chưa nắm được nhiều)? à, mình ko có đĩa cài VB 6.0 và VC++ nên mình vào trang của microsof download VB 2008 và VC++ 2008 về, nhưng thấy bảo cái này và cái VB 6.0 … có nhiều điểm khác nhau phải ko bạn? Cái nào thông dụng và dễ dùng hơn?

    Reply
  • tmtm July 25, 2008, 3:00 am

    Cảm ơn bạn! Bạn có thể so sánh ưu nhược điểm giữa VC++ và Matlab trong việc giải quyết vấn đề này giúp mình được ko?

    Reply
  • Lê Minh Huy September 2, 2008, 7:58 am

    Hay quá ! Anh có thể hướng dẫn tạo file .dll ko? Em tìm nhưng chưa thấy có hướng dẫn step by step . Nên gặp nhiều trở ngại quá. Mong anh reply sớm.

    Reply
  • Saochoihaxlay September 21, 2008, 6:18 pm

    Anh Bac cho em hoi lam sao tao duoc file .fig trong khi viet vay?Em viet ham xu ly anh nhung hok biet viet file .fig nen no bao loi

    Reply
  • DUNG_HUT November 10, 2008, 10:09 am

    Anh Bắc ơi cho em hỏi. Sao em copy đồng thời file package và McrInstaller vào một thư mục rùi cho chạy sang máy không cài matlab mà ko được nhỉ. Em làm tất cả các bước đều được giống như của anh.
    thanks.

    Reply
  • tulips June 27, 2009, 12:11 am

    Các bạn cho mình hỏi, mình cũng build ra exe giong nhu hướng dẫn nhưng do project của mình cần DATABASE ( trong project mình su dung cac file trong database theo duong dan tuong toi) mà cái FOLDER DATABASE minh ko dua vao bien dich duoc nen khi bien dich xong mình de no vao trong cung folder distrib, nhưng khi chay bị báo lỗi ở hàm callback. Khong biet fai build cach nao mới đúng?

    Reply
  • tulips June 27, 2009, 12:38 am

    các bạn cho mình hỏi, project cua minh da chay thanh cong tren matlab, nhung khi minh build ra exe theo huong dan tren thi bi loi (loi o ham callback), nguyen nhan theo minh la do: project cua mình sử dụng 1 folder database , khi build thi ko thể build nó, nên khi build project xong minh chep no vao cung folder distrb nhưng no chay bi lỗi, có ai có kinh nghiem trong van de nay giup minh voi, cam on cac ban nhieu

    Reply
  • tulips June 27, 2009, 8:49 am

    chào bạn, project cua minh da chay thanh cong tren matlab, nhưng khi mình build ra thì chuong trinh chay bị loi o ham callback. Vấn đề của mình là project của mình chạy cần database nên khi build xong mình chép folder DATABASE ( khi viet chuong trinh minh dung duong dan tuong doi ” \DATABASE\ “) đó vào folder distrb (cung thu muc voi file exe), khi chay thi co loi, mình ko biết nó bị lỗi gì. Mong bạn giúp cho.

    Reply
    • ngohaibac June 27, 2009, 9:02 am

      Khi bạn chạy file .exe sau khi dịch đó, nếu có thông báo lỗi gì thì sẽ hiện lên cái cửa sổ DOS đó, bạn đọc và xem kĩ xem có vấn đề gì không nhé. Mình nghĩ là có vấn đề gì đó về đường dẫn của thằng Database mà thôi.

      Chúc bạn thành công.

      Reply
  • ngocthuy November 12, 2009, 10:24 pm

    A Bắc giup e voi! e có bài tâp về matlab. Viet giao diện nhập vào ham truyền G(s) rồi nhắn nút OK sẽ hiện thị biểu đồ bode. e mới hoc nên ko biết nhiều xin a giup đỡ.

    Reply
  • Ha April 28, 2010, 4:31 pm

    Chào Anh Bắc,
    Cho em hỏi thăm, em viết một file t.m trong matlab rất đơn giản n/d như sau
    ” clear
    clc
    X=input(‘a=’);
    ss=X+1 ”
    và da biên dịch thành công thành t.exe
    tuy nhiên khi chạy file t.exe thì kết quả hiện ra rồi ngay lập tức màn hình command promt đóng lại.

    Nếu viết một chuong trình có kết quả dài hơn thì sẽ ko kịp xem kết quả.

    Có cách nào để cửa sồ command promt ko bị tắt ko anh

    em sử dung matlab r2008a

    Cảm ơn Anh rất nhiều

    Reply
    • ngohaibac May 1, 2010, 12:13 am

      Anh trả lời qua email của em rồi nhé. Có gì hỏi tiếp ở đây cũng dc.

      Reply
  • Nguyễn Văn Chính August 27, 2010, 10:21 pm

    Em chào anh ạ
    Anh có thể chỉ cho em cách để viết Chương trình giao tiếp với cổng Com Dùng C và sau đó Xuất ra file .exe được không ạ
    Ah anh ở Nam định anh ở đâu thế ạ
    Em ở Giao Thuỷ nè
    Rất mong nhận được sự giúp đỡ của anh

    Reply
  • nguyenhuyhoang November 30, 2010, 9:46 am

    Bạn ơi cho mình hỏi m-file của mình chạy rất bình thường nhưng sao khi xuất ra file exe như bạn nói quá trình thực hiện không thấy báo lỗi gì nhưng khi chạy đến giao diện mình kích hoạt chức năng như kiểu nhập ảnh thì máy báo hàm Callback có vấn đề

    Reply
  • sam August 14, 2011, 11:23 pm

    nếu mình có một tích phân 4 lớp (4 biến số) thì phải viết code trong matlab như thế nào? xin nhờ giúp đỡ…..

    Reply
  • hoaipham September 20, 2011, 4:27 pm

    nho anh ti
    em moi vao hoc matlab ma thay cho bai tap lon ve giao dien GUI. em thu lam 2 bai tap nho nhung sao no khong chay, em chui anh cai doan ma code em duoc, neu sai cho nao, nho anh sua giup em.

    function varargout = DoThi(varargin)
    % DOTHI M-file for DoThi.fig
    % DOTHI, by itself, creates a new DOTHI or raises the existing
    % singleton*.
    %
    % H = DOTHI returns the handle to a new DOTHI or the handle to
    % the existing singleton*.
    %
    % DOTHI(‘CALLBACK’,hObject,eventData,handles,…) calls the local
    % function named CALLBACK in DOTHI.M with the given input arguments.
    %
    % DOTHI(‘Property’,’Value’,…) creates a new DOTHI or raises the
    % existing singleton*. Starting from the left, property value pairs are
    % applied to the GUI before DoThi_OpeningFcn gets called. An
    % unrecognized property name or invalid value makes property application
    % stop. All inputs are passed to DoThi_OpeningFcn via varargin.
    %
    % *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 DoThi

    % Last Modified by GUIDE v2.5 20-Sep-2011 16:01:42

    % Begin initialization code – DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct(‘gui_Name’, mfilename, …
    ‘gui_Singleton’, gui_Singleton, …
    ‘gui_OpeningFcn’, @DoThi_OpeningFcn, …
    ‘gui_OutputFcn’, @DoThi_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

    % — Executes just before DoThi is made visible.
    function DoThi_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject handle to figure
    % eventdata reserved – to be defined in a future version of MATLAB
    % handles structure with handles and user data (see GUIDATA)
    % varargin command line arguments to DoThi (see VARARGIN)

    % Choose default command line output for DoThi
    handles.output = hObject;

    % Update handles structure
    guidata(hObject, handles);

    % UIWAIT makes DoThi wait for user response (see UIRESUME)
    % uiwait(handles.figure1);

    % — Outputs from this function are returned to the command line.
    function varargout = DoThi_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 a_Callback(hObject, eventdata, handles)
    % hObject handle to a (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 a as text
    % str2double(get(hObject,’String’)) returns contents of a as a double

    % — Executes during object creation, after setting all properties.
    function a_CreateFcn(hObject, eventdata, handles)
    % hObject handle to a (see GCBO)
    % eventdata reserved – to be defined in a future version of MATLAB
    % handles empty – handles not created until after all CreateFcns called

    % Hint: edit controls usually have a white background on Windows.
    % See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,’BackgroundColor’), get(0,’defaultUicontrolBackgroundColor’))
    set(hObject,’BackgroundColor’,’white’);
    end

    function b_Callback(hObject, eventdata, handles)
    % hObject handle to b (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 b as text
    % str2double(get(hObject,’String’)) returns contents of b as a double

    % — Executes during object creation, after setting all properties.
    function b_CreateFcn(hObject, eventdata, handles)
    % hObject handle to b (see GCBO)
    % eventdata reserved – to be defined in a future version of MATLAB
    % handles empty – handles not created until after all CreateFcns called

    % Hint: edit controls usually have a white background on Windows.
    % See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,’BackgroundColor’), get(0,’defaultUicontrolBackgroundColor’))
    set(hObject,’BackgroundColor’,’white’);
    end

    % — Executes on button press in pushbutton1.
    function pushbutton1_Callback(hObject, eventdata, handles)
    % hObject handle to pushbutton1 (see GCBO)
    % eventdata reserved – to be defined in a future version of MATLAB
    % handles structure with handles and user data (see GUIDATA)

    % — Executes on button press in close.
    function close_Callback(hObject, eventdata, handles)
    % hObject handle to close (see GCBO)
    % eventdata reserved – to be defined in a future version of MATLAB
    % handles structure with handles and user data (see GUIDATA)

    function DoThi_Callback(hObject, eventdata, handles)
    a=str2double(get(handles.a,’string’))
    b=str2double(get(handles.b,’string’))
    x= 0:pi/100:5*pi;
    y=a*sin(x)+ b*cos(x);
    plot(x,y,’b’)
    set(handles.axes,’string’)

    Reply
  • Phan văn vũ October 30, 2011, 2:52 pm

    hay qua cam on anh bac

    Reply
  • Vu Duong March 29, 2012, 10:48 am

    Mình làm test giống như bạn hướng dẫn nhưng đến lúc chạy file exe trong distrib thì chỉ hiện cửa sổ DOS đen, ko thấy giao diện GUI. Mình kiểm tra lại lúc dịch thì ko thấy báo lỗi, bạn có thể giúp mình được không

    Reply
  • Hương Trà April 22, 2012, 2:29 pm

    Anh Bắc ơi,

    em chỉ Build được mà ko Package được anh ạ (nó bị mờ rùi).

    với lại khi chạy file .exe , ngay sau khi hiện lên giao diện là nó tự động exit luôn.

    em phải làm sao đây anh?

    Reply
  • Hương Trà April 22, 2012, 3:32 pm

    anh Bắc ơi,

    khi em chạy file .exe, ngay khi vừa xuất diện giao diện GUI là nó tự động exit ngay lập tức.

    Anh giúp em với….

    Reply
  • Ngo Bao Quyen June 28, 2012, 10:04 am

    Anh Hải cho em hoi Anh dung Matlab version bao nhieu ma co Deployment Tool vậy Anh. Em đang dùng Matlab2008b. Nhưng Matlab của em không có. Mong nhận được trả lời của anh. Cảm ơn

    Reply
  • Tran trong dat August 16, 2013, 2:52 pm

    em hoi cai loi nay la cai gi?
    (mclmcrrt76.dll)

    Reply

Leave a Comment