Tải bản đầy đủ (.doc) (22 trang)

Bài tập lớn lập trình giao diện trong matlab

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (501.51 KB, 22 trang )

BÀI TẬP LỚN

LẬP TRÌNH GIAO DIỆN TRONG
MATLAB


Đề bài:
Viết giao diện thực hiện những yêu cầu sau:
(3 điện trở Rx lần lượt là 10, 20, 15 Ω)
1)
2)
3)
4)
5)

Hiển thị mạch điện lên giao diện
Đóng, mở khóa Kx bằng check box
Cho phép nhập giá trị R và điện áp V
Hiển thị chỉ số gá trị các linh kiện
Hiển thị chỉ số ampe kế và vôn kế, cảnh báo quá dòng qua R (Imax=5A)


MỤC LỤC
GIỚI THIỆU.........................................................................................................................1
THIẾT KẾ GIAO DIỆN......................................................................................................6
THỰC NGHIỆM................................................................................................................13
PHỤ LỤC: CODE ĐẦY ĐỦ..............................................................................................16


BÀI TẬP LỚN
Trang 1/19



GIỚI THIỆU
1.1 Cơ bản về GUI trong matlab
Để vào guide, ta làm như sau:
Mở phần mềm Matlab (ở đây là Matlab 2015a, các phiên bản khác cũng tương tự):

Hình 1-

Trong cửa sổ Command Windows, nhập lệnh “guide” nhấn Enter sẽ xuất hiện cửa
sổ Guide Quick Start:

Hình 1-

Chọn OK sẽ xuất hiện 1 cửa sổ khác, chúng ta sẽ thực hiện tạo giao diện tại đây.

Lập trình giao diện trong Matlab

NCT


BÀI TẬP LỚN
Trang 2/19

Hình 1-

Phía trái cửa sổ có các thành phần sau:
+ Push Button: là nút nhấn, khi nhấn vào sẽ thực thi lệnh trong cấu trúc hàm
callback của nó.
+ Slider: là thanh trượt cho phép người dùng di chuyển thanh trượt để thục thi lệnh.
+ Radio Button: Nó giống như Check Box nhưng thường được sử dụng để tạo sự

lựa chọn duy nhất, tức là 1 lần chỉ được chọn 1 trong số các nhóm nhiều nút. Khi
một ô được chọn thì các ô còn lại trong nhóm bị bỏ chọn.
+ Check box: Sử dụng để đánh dấu tích (thực thi) vào và có thể check nhiều ô để
thực thi.
+ Edit Text: là nơi các kí tự được nhập vào từ người dùng, người dùng có thể thay
đổi được.
+ Static Text: Là các kí tự được hiển thị thông qua các callback, hoặc thông thường
để viết nhãn cho các biểu tượng, người dùng không thể thay đổi nội dung.

Lập trình giao diện trong Matlab

NCT


BÀI TẬP LỚN
Trang 3/19

+ Pop-up Menu: mở ra danh sách các lực chọn khi người dùng nhấp chuột vào. Chỉ
chọn được 1 mục trong danh sách các mục.
+ List Box: hộp thoại danh sách cách mục, cho phép người dùng chọn một hoặc
nhiều mục.
+ Toggle Button: là nút nhấn có 2 điều khiển, khi nhấp chuột và nhả ra, nút nhấn
được giữ và lệnh thực thi, khi nhấp chuột vào lần thứ 2, nút nhấn nhả ra, hủy bỏ
lệnh vừa thực thi.
+ Table: tạo ra một bảng tương tự trong Excel.
+ Axes: Đây là giao diện đồ họa hiển thị hình ảnh, nó có nhiều thuộc tính bao gồm:
không gian 2D (theo trục đứng và trục ngang), 3D (hiển thị không gian 3 chiều).
+ Panel: Tạo ra một mảng nhóm các biểu tượng lại với nhau giúp ta dễ kiểm soát và
thao tác khi di chuyển.
+ Button Group: quản lí sự lựa chọn của nút Radio Button.

+ Active Control: Quản lí một nhóm các bút hoặc các chương trình liên quan với
nhau trong Active.

Lập trình giao diện trong Matlab

NCT


BÀI TẬP LỚN
Trang 4/19

Ví dụ để tạo 1 nút nhấn, ta chọn Push Button sau đó kéo thả trong vùng làm việc:

Hình 1-

Khi double click vào phần vừa tạo sẽ hiện ra cửa sổ Inspector:

Hình 1-

Trong này ta có thể thay đổi tên, cỡ chữ, màu sắc, đặt tên tag…

Lập trình giao diện trong Matlab

NCT


BÀI TẬP LỚN
Trang 5/19

1.2 Giao diện thực hiện đề bài


Hình 1-

Giao diện thực hiện yêu cầu hiển thị mạch điện, đóng/mở khóa K bằng check
box, cho phép nhập R và V, hiển thị chỉ sổ giá trị linh kiện, hiển thị chỉ số ampe kế,
volt kế, cảnh báo quá dòng qua R.
Việc sử dụng giao diện rất đơn giản, người dùng chỉ cần check chọn khóa K nào
đóng/mở, nhập giá trị R, V trong phần tùy chỉnh mạch điện, sau đó nhấn nút “tính
toán” các chỉ sổ sẽ được hiện lên trên giao diện.

Lập trình giao diện trong Matlab

NCT


BÀI TẬP LỚN
Trang 6/19

THIẾT KẾ GIAO DIỆN

Trong phần này sẽ mô tả các bước để tạo được giao diện thực hiện yêu cầu của
đề bài như trong phần 1B.

1.1 Thiết kế giao diện
Mở matlab, nhập “guide” vào command windows sau đó nhấn enter để vào gui,
thêm các thành phần như sau:

Hình 2 -

Lập trình giao diện trong Matlab


NCT


BÀI TẬP LỚN
Trang 7/19

Chỉnh sửa String trong Inspector và save lại vào 1 thư mục nào đó:

Hình 2 -

Đặt tag cho từng thành phần:
Để tiện cho việc gọi các thành phần ra trong code thì ta đặt tên tag được thống kê
trong bảng dưới đây (có thể chỉnh sửa theo ý thích):
Phần
Axes3 hiện hình mạch điện
Hiển thị dòng R
Hiển thị dòng Rn
Đóng mở khóa Kn
Nhập vào giá trị R
Nhập vào giá trị V
Nút tính toán
Hiển thị Vn
Hiển thị V

Để chạy thử giao diện, nhấn vào nút

Tag
machdien
I

In (n = 1, 2, 3)
Kn (n = 1, 2, 3)
R
V
tinh
Vn (n=1,2,3)
V

trên thanh công cụ hoặc nhấn tổ hợp

phím ctrl + T
Nó sẽ hiện ra giao diện như thế này:

Lập trình giao diện trong Matlab

NCT


BÀI TẬP LỚN
Trang 8/19

Hình 2 -

Nếu đã ưng ý thì tiếp tục đến phần thứ 2: Lập trình cho các thành phần.

Lập trình giao diện trong Matlab

NCT



BÀI TẬP LỚN
Trang 9/19

1.2 Lập trình cho các thành phần
Có 2 thành phần cơ bản mà ta cần phải lập trình đó là axes hiển thị mạch điện và
nút nhấn cho ra kết quả.
1.2.1 Hiển thị mạch điện lên giao diện:
Để có mạch điện hiển thị trong giao diện thì tất nhiên chúng ta cần phải vẽ rồi, đơn
giản nhất là dùng Paint có sẵn trong windows:
Mở paint lên:

Hình 2 -

Lập trình giao diện trong Matlab

NCT


BÀI TẬP LỚN
Trang 10/19

Dùng các dụng cụ có sẵn để vẽ thành 1 mạch điện hoàn chỉnh:

Hình 2 -

Sau đó ta save lại trong thư mục mà ta đã save giao diện, đặt tên cho nó, chẳng hạn
như: machdien.png
Khi đã có hình vẽ mạch điện rồi thì ta viết code cho nó hiện lên giao diện: click
chuột phải vào axes View callbacks CreateFcn
Nhập code vào vị trí như hình dưới:

imshow('C:\Users\5480\Pictures\machdien.png');

Lập trình giao diện trong Matlab

NCT


BÀI TẬP LỚN
Trang 11/19

Hình 2 -

1.2.2 Lập trình cho nút tính toán

Hình 2 -

Gần giống như axes, click chuột phải vào nút tính toánView callbacks 
Callback

Lập trình giao diện trong Matlab

NCT


BÀI TẬP LỚN
Trang 12/19

Sau đó nhập code vào dưới phần này:
function tinh_Callback(hObject, eventdata, handles)
% hObject

handle to tinh (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)

Code + giải thích:
R1 = 10; t1 = 1; %gia tri cua dien tro R va bien tam t
R2 = 20; t2 = 1;
R3 = 15; t3 = 1;
%lay thuoc tinh gia tri cua check box, neu khong check thi gia tri = 0,
check thi la 1
if get(handles.K1,'Value') == 0
t1 = 0; %neu gia tri cua check box k = 0 thi dat t = 0
end
if get(handles.K2,'Value') == 0
t2 = 0;
end
if get(handles.K3,'Value') == 0
t3 = 0;
end
R = str2num(get(handles.R,'String')); %chuyen R va V nhap vao tu ki tu
%thanh so
V = str2num(get(handles.V,'String'));
Rtd = 1/ ((t1/R1) + (t2/R2) + (t3/R3)); % tinh dien tro tuong duong cua
%3 dien tro R, them t vao bieu thuc de neu khoa k mo thi t =0, nhu vay
%xem nhu khong co R
IR =
IR1 =
IR2 =
IR3 =


V/(Rtd + R); % tinh dong qua cac dien tro
t1*(V-IR*R)/R1;
t2*(V-IR*R)/R2;
t3*(V-IR*R)/R3;

% hien thi ket qua
set(handles.I, 'String', IR); % dat gia tri IR vao thuoc tinh String cua
thanh phan I
set(handles.I1, 'String', IR1); % tuong tu o tren
set(handles.I2, 'String', IR2);
set(handles.I3, 'String', IR3);
set(handles.v, 'String', V-IR*R)
set(handles.V1, 'String', IR1*R1)
set(handles.V2, 'String', IR2*R1)
set(handles.V3, 'String', IR3*R1)
if IR>=5 %hien thi canh bao qua dong, neu dong lon hon 5A thi dat mau cua
IR thanh mau do
set(handles.I,'BackgroundColor','Red');
end

Như vậy sau khi lập trình cho nút tính toán thì ta đã hoàn thành các yêu cầu của đề
bài, giờ thì chuyển sang phần thực nghiệm, kiểm tra giao diện.

Lập trình giao diện trong Matlab

NCT


BÀI TẬP LỚN

Trang 13/19

THỰC NGHIỆM

Giao diện hoàn chỉnh:

Hình 3 -

Lập trình giao diện trong Matlab

NCT


BÀI TẬP LỚN
Trang 14/19

Thử nghiệm giao diện với các thông số sau:
Đóng khóa K1
R = 10 Ohm
V = 10 Vol
Giao diện cho ra kết quả:
Dòng R = 0,5 A
Dòng R1 = 0,5 A
Dòng R2 = Dòng R3 = 0 A
Chỉ số V = 5V

Chỉ số A = 0,5A

Hình 3 -


Kết quả thực nghiệm đúng với tính toán  Giao diện hoạt động tốtPASS

Lập trình giao diện trong Matlab

NCT


BÀI TẬP LỚN
Trang 15/19

• Thử nghiệm quá dòng:

Hình 3 -

Khi dòng qua R >5A đã cảnh báo quá dòng bằng cách bôi đỏ giá trị dòng
điệnPASS

Lập trình giao diện trong Matlab

NCT


BÀI TẬP LỚN
Trang 16/19

Phụ lục: Code đầy đủ
function varargout = BTL_41301662(varargin)
% BTL_41301662 MATLAB code for BTL_41301662.fig
%
BTL_41301662, by itself, creates a new BTL_41301662 or raises the

existing
%
singleton*.
%
%
H = BTL_41301662 returns the handle to a new BTL_41301662 or the
handle to
%
the existing singleton*.
%
%
BTL_41301662('CALLBACK',hObject,eventData,handles,...) calls the
local
%
function named CALLBACK in BTL_41301662.M with the given input
arguments.
%
%
BTL_41301662('Property','Value',...) creates a new BTL_41301662 or
raises the
%
existing singleton*. Starting from the left, property value pairs
are
%
applied to the GUI before BTL_41301662_OpeningFcn gets called. An
%
unrecognized property name or invalid value makes property
application
%
stop. All inputs are passed to BTL_41301662_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 BTL_41301662
% Last Modified by GUIDE v2.5 18-Oct-2015 11:10:09
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @BTL_41301662_OpeningFcn, ...
'gui_OutputFcn', @BTL_41301662_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


Lập trình giao diện trong Matlab

NCT


BÀI TẬP LỚN
Trang 17/19

% End initialization code - DO NOT EDIT
% --- Executes just before BTL_41301662 is made visible.
function BTL_41301662_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 BTL_41301662 (see VARARGIN)
% Choose default command line output for BTL_41301662
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes BTL_41301662 wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = BTL_41301662_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;
% --- Executes on button press in tinh.
function tinh_Callback(hObject, eventdata, handles)
% hObject
handle to tinh (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
% Tinh toan
R1 = 10; t1 = 1; %gia tri cua dien tro R va bien tam t
R2 = 20; t2 = 1;
R3 = 15; t3 = 1;
%lay thuoc tinh gia tri cua check box, neu khong check thi gia tri = 0,
check thi la 1
if get(handles.K1,'Value') == 0
t1 = 0; %neu gia tri cua check box k = 0 thi dat t = 0
end
if get(handles.K2,'Value') == 0
t2 = 0;
end
if get(handles.K3,'Value') == 0
t3 = 0;
end
R = str2num(get(handles.R,'String')); %chuyen R va V nhap vao tu ki tu
thanh so
V = str2num(get(handles.V,'String'));


Lập trình giao diện trong Matlab

NCT


BÀI TẬP LỚN
Trang 18/19

Rtd = 1/ ((t1/R1) + (t2/R2) + (t3/R3)); % tinh dien tro tuong duong cua
3 dien tro R, them t vao bieu thuc de neu khoa k mo thi t =0, nhu vay xem
nhu khong co R
IR =
IR1 =
IR2 =
IR3 =

V/(Rtd + R); % tinh dong qua cac dien tro
t1*(V-IR*R)/R1;
t2*(V-IR*R)/R2;
t3*(V-IR*R)/R3;

% hien thi ket qua
set(handles.I, 'String', IR); % dat gia tri IR vao thuoc tinh String cua
thanh phan I
set(handles.I1, 'String', IR1); % tuong tu o tren
set(handles.I2, 'String', IR2);
set(handles.I3, 'String', IR3);
set(handles.v, 'String', V-IR*R)
set(handles.vr, 'String', IR*R)

set(handles.V1, 'String', IR1*R1)
set(handles.V2, 'String', IR2*R2)
set(handles.V3, 'String', IR3*R3)
if IR>=5 %hien thi canh bao qua dong, neu dong lon hon 5A thi dat mau cua
IR thanh mau do
set(handles.I,'BackgroundColor','Red');
end
% --- Executes on button press in K1.
function K1_Callback(hObject, eventdata, handles)
% hObject
handle to K1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of K1
% --- Executes on button press in K2.
function K2_Callback(hObject, eventdata, handles)
% hObject
handle to K2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of K2
% --- Executes on button press in K3.
function K3_Callback(hObject, eventdata, handles)
% hObject
handle to K3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of K3
% --- Executes during object creation, after setting all properties.

Lập trình giao diện trong Matlab

NCT


BÀI TẬP LỚN
Trang 19/19

function R_Callback(hObject, eventdata, handles)
% hObject
handle to R (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
%Bao loi
R = str2double(get(hObject, 'String'));
if isnan(R)
set(hObject, 'String', 0);
errordlg('R, V phai la con so','Loi');
end
set(handles.r,'String',R);
% Hints: get(hObject,'String') returns contents of R as text
%
str2double(get(hObject,'String')) returns contents of R as a
double

%Bao loi

V = str2double(get(hObject, 'String'));
if isnan(R)
set(hObject, 'String', 0);
errordlg('R, V phai la con so','Loi');
end
% hObject
handle to VR (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 VR as text
%
str2double(get(hObject,'String')) returns contents of VR as a
double
% --- Executes during object creation, after setting all properties.
function hinh_CreateFcn(hObject, eventdata, handles)
% hObject
handle to hinh (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
empty - handles not created until after all CreateFcns
called
imshow('C:\Users\5480\Pictures\machdien.png');
% Hint: place code in OpeningFcn to populate hinh

Lập trình giao diện trong Matlab

NCT




×