Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Моделирование измерительных задач в среде MATLAB + Simulink. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
ПРИМЕРЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ В MATLAB + SIMULINK
Рис. 32. Настройки параметров интерфейса, объект pushbutton
Для ввода текста необходимо использовать пункт String. Для
полей, в которые предполагается вносить числовые данные, не
-
обходимо определить имя переменой (рис. 33).
Далее в текст программы добавляются элементы программ
­ного кода, включающие в себя необходимые вычисления. Для этого правую кнопку мыши нажимаем на кнопке «Расчет» и выбираем Callback – задание функции вызова. При этом откры
­вается текст m-файла, в который уже внесена автоматически информация по всем объектам. Последние строки содержат ин
­формацию по созданию функции вызова, которая будет запу­скаться при нажатии на кнопку «Расчет».
81
МОДУЛЬ 2
Рис. 33. Настройки параметров интерфейса, объект text
Текст программы:
function varargout = data1(varargin)
% DATA1 M-le for data1.g % DATA1, by itself, creates a new DATA1 or raises the existing
% singleton*. %
% H = DATA1 returns the handle to a new DATA1 or the handle to
% the existing singleton*. %
% DATA1(‘CALLBACK’,hObject,eventData,handles,...) calls the local % function named CALLBACK in DATA1.M with the given input
arguments.
%
% DATA1(‘Property’,’Value’,...) creates a new DATA1 or raises the
% existing singleton*. Starting from the left, property value pairs are
82
ПРИМЕРЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ В MATLAB + SIMULINK
% applied to the GUI before data1_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property
application
% stop. All inputs are passed to data1_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 data1
% Last Modied by GUIDE v2.5 19-Oct-2007 19:05:39 % Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mlename, ...
‘gui_Singleton’, gui_Singleton, ...
‘gui_OpeningFcn’, @data1_OpeningFcn, ... ‘gui_OutputFcn’, @data1_OutputFcn, ... ‘gui_LayoutFcn’, [] , ...
‘gui_Callback’, []); if nargin & isstr(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 data1 is made visible. function data1_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to gure % eventdata reserved - to be dened in a future version of MATLAB % handles structure with handles and user data1 (see GUIDATA)
% varargin command line arguments to data1 (see VARARGIN)
83
МОДУЛЬ 2
% Choose default command line output for data1
handles.output = hObject;
% Update handles structure
guidata(hObject, handles); % UIWAIT makes data1 wait for user response (see UIRESUME) % uiwait(handles.gure1); % --- Outputs from this function are returned to the command line. function varargout = data1_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to gure % eventdata reserved - to be dened in a future version of MATLAB % handles structure with handles and user data1 (see GUIDATA)
% Get default command line output from handles structure varargout{1} = handles.output;
function R_CreateFcn(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be dened 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
set(hObject,’BackgroundColor’,’white’);
else
set(hObject,’BackgroundColor’,get(0,’defaultUicontrolBackgroundC
olor’));
end
function R_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be dened in a future version of MATLAB % handles structure with handles and user data1 (see GUIDATA) % Hints: get(hObject,’String’) returns contents of edit1 as text % str2double(get(hObject,’String’)) returns contents of edit1 as a
double
% --- Executes during object creation, after setting all properties. function L_CreateFcn(hObject, eventdata, handles)
84
ПРИМЕРЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ В MATLAB + SIMULINK
% hObject handle to edit2 (see GCBO) % eventdata reserved - to be dened 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
set(hObject,’BackgroundColor’,’white’);
else
set(hObject,’BackgroundColor’,get(0,’defaultUicontrolBackgroundC
olor’));
end
function L_Callback(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO) % eventdata reserved - to be dened in a future version of MATLAB % handles structure with handles and user data1 (see GUIDATA) % Hints: get(hObject,’String’) returns contents of edit2 as text % str2double(get(hObject,’String’)) returns contents of edit2 as a
double
% --- Executes during object creation, after setting all properties. function C_CreateFcn(hObject, eventdata, handles) % hObject handle to edit3 (see GCBO) % eventdata reserved - to be dened 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
set(hObject,’BackgroundColor’,’white’);
else
set(hObject,’BackgroundColor’,get(0,’defaultUicontrolBackgroundC
olor’));
end
function C_Callback(hObject, eventdata, handles) % hObject handle to edit3 (see GCBO) % eventdata reserved - to be dened in a future version of MATLAB
85
МОДУЛЬ 2
% handles structure with handles and user data1 (see GUIDATA) % Hints: get(hObject,’String’) returns contents of edit3 as text % str2double(get(hObject,’String’)) returns contents of edit3 as a
double
% --- Executes during object creation, after setting all properties. function C0_CreateFcn(hObject, eventdata, handles) % hObject handle to edit4 (see GCBO) % eventdata reserved - to be dened 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
set(hObject,’BackgroundColor’,’white’);
else
set(hObject,’BackgroundColor’,get(0,’defaultUicontrolBackgroundC
olor’));
end
function C0_Callback(hObject, eventdata, handles) % hObject handle to edit4 (see GCBO) % eventdata reserved - to be dened in a future version of MATLAB % handles structure with handles and user data1 (see GUIDATA) % Hints: get(hObject,’String’) returns contents of edit4 as text % str2double(get(hObject,’String’)) returns contents of edit4 as a
double
% --- Executes during object creation, after setting all properties. % --- Executes during object creation, after setting all properties. function wr1_CreateFcn(hObject, eventdata, handles) % hObject handle to edit11 (see GCBO) % eventdata reserved - to be dened in a future version of MATLAB % handles empty - handles not created until after all CreateFcns
called
% --- Executes during object creation, after setting all properties. function wa1_CreateFcn(hObject, eventdata, handles) % hObject handle to text19 (see GCBO) % eventdata reserved - to be dened in a future version of MATLAB
86
ПРИМЕРЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ В MATLAB + SIMULINK
% handles empty - handles not created until after all CreateFcns
called
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be dened in a future version of MATLAB % handles structure with handles and user data1 (see GUIDATA) global R L C C0 R=str2double(get(handles.R,’String’)); % считывание значения из
поля с именем R
и присвоение переменной R числового значения L=str2double(get(handles.L,’String’)); % считывание значения из
поля с именем L
и присвоение переменной L числового значения L=L*1e-3; C=str2double(get(handles.C,’String’)); % считывание значения из
поля с именем C и присвоение переменной C числового значения
C=C*1e-9;
C0=str2double(get(handles.C0,’String’)); % считывание значения
из поля с
именем C0 и присвоение переменной C0 числового значения
C0=C0*1e-9;
% Расчет теоретических значений частот резонанса и антирезо
нанса
wr=(1/(L*C))^0.5; wa=(1/L*(1/C+1/C0))^0.5; N=500; % число точек построения графика зависимости модуля
проводимости от частоты
www = 0.9*wr:(1.2*wa-0.8*wr)/N:1.1*wa; % Задание интервала ча
стот построения графика
YY=Yw(www); % расчет значений модуля проводимости в задан
ном интервале
с помощью внешней функции Yw % Поиск частот резонанса и антирезонанса, как максимума и
минимума на
% графике зависимости модуля проводимости от частоты
-
-
-
87
МОДУЛЬ 2
wr1=fminsearch(@mYw,0.9*wr); wa1=fminsearch(@Yw,1.1*wa);
plot(www,YY) % Рисование графика
axis tight
% Вывод рассчитанных значений частот резонанса и антирезо
-
нанса в
% соответствующие поля
set(handles.wr1,’String’, wr1); set(handles.wa1,’String’, wa1);
Для получения числовых переменных величины, считывае
­мые из полей ввода, необходимо преобразовать из переменных типа string в переменные типа double, учтя при этом размер
­ность величин, вводимых в программу. Далее рассчитываем теоретические значения частот резонанса и антирезонанса по приведенным выше формулам и задаем интервал частот, в ко
­торых будем осуществлять расчет и построение графика функ­ции зависимости модуля проводимости от частоты. Для расчета модуля проводимости используем дополнительную функцию, оформленную в виде отдельного m-файла:
function res = Yw(w)
global R L C C0 G = R./(R^2+(w.*L-1./(w.*C)).^2); B = w.*C0-(w.*L-1./(w.*C))./(R^2+(w.*L-1./(w.*C)).^2);
res=(G.^2+B.^2).^0.5;
Поиск частот резонанса и антирезонанса по графику моду
­ля проводимости осуществляется как поиск минимума модуля проводимости для антирезонанса и минимума, взятого с отри
­цательным знаком, модуля проводимости для резонанса (значе­ние переменной res взято с противоположным знаком). В дан­ном примере для этих целей использована стандартная функ­ция fminsearch.
Рассчитанные значения частот резонанса и антирезонанса
помещаются в соответствующие поля с помощью команды set.
Запуск программы осуществляется нажатием кнопки . Результат работы программы приведен на рис. 34.
88
ПРИМЕРЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ В MATLAB + SIMULINK
Рис. 34. Результат работы программы (пример 1)
Пример 2. Определение добротности по частотной характе-
ристике модуля проводимости в области резонанса. Создадим
интерфейс для реализации данной задачи.
В окне программы необходимо выделить три области: – область задания параметров элементов электрической
схемы;
– область отображения результатов расчета (заполняется по
-
сле нажатия на кнопку «Расчет»);
– область отображения графика частотной зависимости мо
-
дуля проводимости.
Результат работы программы показан на рис. 35.
Рис. 35. Результат работы программы (пример 2)
89
МОДУЛЬ 2
Частота резонанса определяется по максимуму модуля про­водимости. Далее определяется уровень 0,7 от значения макси­мума и вычисляется диапазон частот на этом уровне. Доброт­ность контура определяется по вышеприведенным формулам.
Приведем, как и в предыдущих примерах, текст программ
­ного кода, необходимого для реализации решаемой задачи и включенного в функцию Callback для кнопки «Расчет»:
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be dened in a future version of MATLAB % handles structure with handles and user data3 (see GUIDATA) global R L C C0 Ymax
R=str2double(get(handles.R,’String’));
L=str2double(get(handles.L,’String’)); L=L*1e-3;
C=str2double(get(handles.C,’String’)); C=C*1e-9; C0=str2double(get(handles.C0,’String’)); C0=C0*1e-9;
wr=(1/(L*C))^0.5;
N=500; www = 0.8*wr:0.4*wr/N:1.2*wr; YY=Yw(www); wr1=fminsearch(@mYw,0.8*wr); Ymax=Yw(wr1); plot(www,YY) hold on axis tight a=0.8*wr; b=1.2*wr; dx=0.4*wr/100; nroots = 0; while 1 [x1,x2] = rootsearch(@Ywmax,a,b,dx); if isnan(x1)
90
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]