Главная страница

Практикум по матлабу. практикум по матлабу. Физических процессов с использованием


Скачать 1.13 Mb.
НазваниеФизических процессов с использованием
АнкорПрактикум по матлабу
Дата21.06.2021
Размер1.13 Mb.
Формат файлаpdf
Имя файлапрактикум по матлабу.pdf
ТипУчебное пособие
#219898
страница17 из 17
1   ...   9   10   11   12   13   14   15   16   17

RUN -запуск программы на счет и EXIT -прекращение работы и удаление графического окна.
На первом этапе необходимо разработать внешний вид интерфейса. Пусть по нашему предварительному экскизу интерфейс должен выглядеть приблизительно следующим образом (рис.
10
). Элементами этого интерфейса являются три окна
159

вывода графиков (axes в терминах панели управления), три статических надписи
N,R,C (text), три окна ввода/редактирования данных (edit) и две кнопки (push).
Для создания подокон, в которые будут выводиться графики, ис- пользуется кнопка, показанная справа на рисунке (окно и оси). Щелк- нув по этому элементу на панели управления и переведя мышь на па- нель рисунка, необходимо поместить крест, котрый будет на кончике мыши, в то место, где должен находиться левый верхний угол первого подокна. Нажав и удер- живая левую кнопку мыши, необходимо вытянуть получающийся прямоугольник до нужных размеров. После этого процедура построения двух других окон повто- ряется аналогично.
Для создания редактируемых окон ввода используется кнопка edit,
показанная справа. Используется она так же, как при создании под- окон с осями. Сначала появляется мышь, нагруженная крестиком, с помощью которой строится прямоугольник ввода.
Надписи на панели рисунка создаются с помощью кнопки text, ко- торая переносится и выравнивается аналогично вышеописанному. Для того чтобы внутри области статического текста появилась какая-либо надпись, необходима работа с редактором свойств, который вызывается либо при помощи кнопки Property editor, либо с помощью двойного нажатия левой кнопкой мыши на соответствующем объекте на панели рисунка.
Для создания и размещения кнопок используется панель с надпи- сью Push. Способ размещения кнопки и выбора ее размера полностью совпадает с методом, описанным выше для окна редактирования и ок- на статического текста.
Построенные таким образом окна вывода и редактирования, окна статического текста и кнопки, а также другие объекты можно выровнять и установить опре- деленные промежутки между ними с помощью панели выравнивания (Alignment
Tools).
Для этого необходимо на панели управления щелкнуть по со- ответствующей кнопке, и появится панель выравнивания. Для за- дания ряда объектов, с которыми будут выполняться какие-либо действия, необходимо их выделить, щелкая по каждому из них при нажатой клавише Shift. Выделенные объекты отмечаются черными точками вокруг соответствующих объектов. При необходимости изменить размер какого-либо объекта (кнопки, окна и т.д.) необходимо щелкнуть по этому объекту с помощью левой кнопки мыши и с помощью мыши изменить требуемый размер так же, как и размер любого окна Windows.
160

При работе с графическими объектами на панели рисунка желательно раскрыть
(с помощью соответствующей кнопки окна Windows) панель рисунка на весь экран и выбрать размер всех объектов на панели рисунка.
Поскольку по умолчанию раз- меры всех объектов задаются в пикселях, это может привести к тому, что при изменении разме- ра окна вывода кнопки и/или окна могут наехать друг на дру- га. Для избежания такого неже- лательного явления необходимо задать единицы размера всех объ- ектов в безразмерных перемен- ных – долях размера окна. Этот размер называется normalized.
Для этого необходимо вызвать редактор свойст щелкнув на па- нели управления на кнопке с над- писью Property editor. Выделив в верхнем окне редактора свойств все введенные нами объекты (с помощью удерживаемой клавиши Ctrl и выделения объектов ле- вой кнопкой мыши), в нижнем окне редактора свойств находим свойство Units
(единицы измерения) и выбираем его щелчком левой кнопки мыши. После этого в средней части редактора в специальном окне слева появится свойство Units, а справа -окно выбора значений, в котором имеется раскрывающийся список с до- пустимыми значениями свойства. Для свойства Units необходимо выбрать значе- ние normalized. Анологично надо задать значение свойства FontUnits – единицы измерения размера шрифтов. Это обеспечивает изменение размера шрифта при из- менении размера окна.
Для размещения надписей на кнопках и в области статического текста необхо- димо выделить соответствующий объект (либо двойным щелчком прямо в обла- сти рисунка, либо в верхнем окне редактора свойств) и в нижнем окне редактора свойств найти свойство String, и после его выделения вписать между кавычка- ми требуемый текст (например, ’Пуск’ на соответствующей кнопке). Для задания надписей над каждым из окон вывода необходимо выделить соответствующее окно и вызвать редактор свойств
8
, в нижнем окне которого надо найти свойство Title.
8
Редактор свойств можно вызвать не только с помощью кнопки на панели управления, но
и двойным щелчком на соответствующем объекте.
161

Поскольку это свойство само является объектом, то, выполнив двойной щелчок на этом свойстве, мы раскроем его свойства. После этого следует найти свойство
String, задать его значение (соответствующий текст, например ’Номер сигнала’) в среднем окне, а, найдя свойство FontUnits, задать его значение normalized.
Следует еще отметить свойство Tag, которое имеют все объекты. Особенно важно знать и/или задать это свойство для тех объектов, к которым потом в про- грамме придется обращаться. Например, если на рисунке задано несколько окон вывода, то для вывода графика в требуемое окно проще всего его будет иденти- фицировать окно с помощью свойства Tag. Это свойство, как правило, имеет по умолчанию вполне осмысленное значение (Axes1, например), но при желании его можно задать так, как вам нравится.
После разработки внешнего вида графического интерфейса с помощью визуаль- ного редактора необходимо сохранить это в виде m-файла. При нажатии на панели управления пункта меню File/Close control panel появится запрос на сохранение созданного интерфейса, и в случае положительного ответа будут созданы два фай- ла – NAME.M и NAME.MAT (где NAME – заданное вами имя). Первый файл – это соответствующий текст программы, реализующий разработанный ин- терфейс, а второй – набор данных для него. При необходимости впоследствии вне- сти изменения во внешний вид графического интерфейса нужно в командном окне
MATLAB запустить файл NAME.M, а потом с помощью команды
guide(gcf)
вызвать визуальный редактор с этим же файлом. Следует полностью выполнить этап разработки внешнего вида графического интерфейса, поскольку дальнейшая модификация текста программы NAME.M будет производиться вручную, путем изменения и/или дополнения текста программы определенными операторами. Ес- ли Вы после этого решите снова вызвать GUIDE – визуальный редактор формы,
то все ваши изменения, внесенные вручную, при попытке сохранить доработанный интерфейс, пропадут. Поэтому сначала разрабатывайте внешний вид своего графи- ческого интерфейса, а потом его дорабатывайте.
9.2.
Способы взаимодействия графического интерфейса с функциями поль-
зователя
Созданный по описанной выше схеме GUI не обладает никакой функционально- стью – он пока ничего не может делать за исключением стандартных функций
Windows -менять размеры окна и закрывать окно. Теперь необходимо научить его выполнять требуемые действия при нажатии соответствующих кнопок и редакти- ровании данных. Основным средством взаимодействия графического интерфейса с функциями, выполняющими требуемые действия, является задание свойств кно-
162
пок и редактируемых окон, которое называется CallBack. Значение (типа строка),
которое присваивается этому свойству, и есть имя функции, которая вызывается при активации соответствующего объекта. Эта активация происходит при нажатии мышкой на соответствующую кнопку (если это свойство кнопки) и при нажатии клавиши Enter либо любой другой кнопки (если это свойство редактируемого ок- на).
Для задания этих свойств можно использовать визуальный редактор GUIDE
(при вызванном рисунке) или с помощью стандартного редактора m-файлов допи- сать соответствующие параметры функции uicontrol при обращении к ней в функ- ции NAME.M, которую создал GUIDE. Например для того, чтобы задать имя функции, вызываемой при нажатии кнопки RUN, необходимо вызвать соответ- ствующий рисунок-интерфейс (запустить NAME.M) и после этого вызвать GUI-
DE. Выделив соответствующий элемент (кнопку RUN) и вызвав редактор свойств,
необходимо в списке свойств выделить свойство CallBack и в строке задания свойств в кавычках вписать имя функции (например, Func_Run), которая будет вызывать- ся при нажатии этой кнопки. Аналогично задаются функции и для других кнопок и редактируемых окон. Тогда соответствующее обращение к функции uicontrol для кнопки RUN будет выглядеть следующим образом:
h1 = uicontrol(’Parent’,h0, ...
’Units’,’normalized’, ...
’FontUnits’,’normalized’, ...
’Callback’,’Func_Run’, ...
’FontSize’,0.45, ...
’ListboxTop’,0, ...
’Position’,[0.722 0.131 0.1 0.0542], ...
’String’,’Run’, ...
’Tag’,’Run’);
При ручной правке функции NAME.M необходимо добавить в аргументы со- ответствующей функции uicontrol строку вида
’CallBack’,’Func_run’, ....
9.2.1.
Общая структура функции NAME.M графического интерфейса
После создания внешнего вида интерфейса и описанной его доработки M-файл имеет, как правило, следующую структуру.
1.
Один или несколько операторов определения окна вывода, которые имеют вид
163
h1 = axes(’Parent’,h0, ...
’FontUnits’,’normalized’, ...
’CameraUpVector’,[0 1 0], ...
’CameraUpVectorMode’,’manual’, ...
’Color’,[1 1 1], ...
’ColorOrder’,mat7, ...
’FontSize’,0.0877, ...
’Position’,[0.061 0.048 0.63 0.24], ...
’Tag’,’Axes3’, ...
’XColor’,[0 0 0], ...
’YColor’,[0 0 0], ...
’ZColor’,[0 0 0]);
Среди всех свойств этого объекта – окна вывода – для нас наибольший ин- терес представляет свойство ’Tag’, ибо по имени свойства (в данном примере
’Axes3’) впоследствие можно будет направлять вывод результатов расчета в это окно.
2.
Каждый оператор определения окна выбора сопровождается целым рядом операторов, определяющих разметку осей, надписи на осях и т.д. Это опе- раторы вида h2 = text(’Parent’,h1, ...
’Color’,[0 0 0], ...
’HandleVisibility’,’off’, ...
’HorizontalAlignment’,’center’, ...
’Position’,[-0.0648 0.487 9.160], ...
’Rotation’,90, ...
’Tag’,’Axes2Text3’, ...
’VerticalAlignment’,’baseline’);
set(get(h2,’Parent’),’YLabel’,h2);
Первый оператор ответственен за создание текста – подписи под осью. В
приведенном примере сам текст отсутствует – у этого объекта свойству ’String’
никакое значение не присвоено, а, значит, под данной осью нет никакого тек- ста. Второй оператор указывает на то, что этот текст является наследником объекта ’YLabel’ и что текст, если бы он был, размещался бы под осью Y.
164

3.
Остальные операторы – операторы uicontrol, определяющие свойства таких объектов, как редактируемые окна, статический текст и кнопки. Типичный оператор, определяющий редактируемое окно, имеет вид h1 = uicontrol(’Parent’,h0, ...
’Units’,’normalized’, ...
’FontUnits’,’normalized’, ...
’BackgroundColor’,[1 1 1], ...
’Callback’,’Func_Edit’, ...
’FontSize’,0.260, ...
’ListboxTop’,0, ...
’Position’,[0.814 0.889 0.120 0.0583], ...
’String’,num2str(N), ...
’Style’,’edit’, ...
’Tag’,’EditN’);
Следует обратить внимание на такие свойства этого объекта, как ’Callback’
– его значение (в данном примере ’Func_Edit’) определяет имя процедуры,
которая осуществляет редактирование значения, введенного в соответству- ющее окно. Свойство ’Tag’, имеющее в данном примере значение ’EditN’,
определяет возможность найти этот объект по этому свойству. Свойство ’Style’,
имеющее значение ’edit’, указывает на то, что это редактируемое окно. Зна- чение свойства ’String’ определяет строку, которая будет выводиться в редак- тируемом окне. В данном примере для вывода используется функция num2str,
которая переводит значение числовой переменной (в данном примере N) в строковое представление.
4.
Оператор, определяющий кнопку, как правило, имеет вид h1 = uicontrol(’Parent’,h0, ...
’Units’,’normalized’, ...
’FontUnits’,’normalized’, ...
’Callback’,’Func_Run’, ...
’FontSize’,0.45, ...
’ListboxTop’,0, ...
’Position’,[0.722 0.13125 0.1 0.0542], ...
’Style’,’pushbutton’, ...
’String’,’Run’, ...
’Tag’,’Run’);
165

Из существенных для нас свойств этого объекта отметим свойство ’Callback’,
значение которого (в данном примере ’Func_Run’) определяет имя функ- ции, которая будет вызываться при нажатии мышкой на эту кнопку. Текст,
который выводится на кнопке, определяется значением свойства ’String’, а свойство ’Tag’ (значение которого можно выбрать по своему усмотрению)
определяет возможность впоследствии обратиться к этому объекту.
Начальные значения, которые необходимо задать для занесения начальных зна- чений в интерфейсную форму, помещаются в начале функции NAME.M в виде
N=1;
R=1;
% Задание начальных значений
C=1;
info.N=N;
info.R=R;
% Задание начальных значений в записи INFO.
info.C=C;
В операторах uicontrol, которые ответственны за редактируемые окна (призна- ком этого является строка
’Style’,’edit’,...), необходимо свойству ’String’ при- своить значение
num2str(N), а вместо формального, одинакового дескриптора
h1 использовать в этих строках дескриптор info.sN, так что соответствующее об- ращение будет иметь вид info.sN = uicontrol(’Parent’,h0, ...
’Units’,’normalized’, ...
’FontUnits’,’normalized’, ...
’BackgroundColor’,[1 1 1], ...
’Callback’,’Func_Edit’, ...
’FontSize’,0.26, ...
’ListboxTop’,0, ...
’Position’,[0.814 0.89 0.12 0.058], ...
’String’,num2str(N), ...
’Style’,’edit’, ...
’Tag’,’EditN’);
В конце функции NAME.M необходимо вставить строку
Set(h0,’UserData’,info);.
Это сохранение всех данных из записи info в общем хранилище данных - UserData.
9.2.2.
Функционирование графического интерфейса
Принципиальная схема взаимодействия модулей разработанной программы пока- зана на рис.
11
. Головная программа DRIVE вызывает основную графическую
166

RUN
EDIT
EXIT
GRAPH
DRIVE
G?L
>:
MOUSE?
Рис. 11. Принципиальная схема функционирования графического интерфейса программу NAME.M, которая при первом исполнении создает графический ин- терфейсный экран с кнопками, окнами, поясняющим текстом и т.д. После этого система переходит в режим ожидания событий -нажатия мышкой в интерфейсном окне. Если это нажатие происходит в редактируемом окне, после чего с помощью клавиатуры изменяется значение в этом окне и нажимается клавиша Enter, то на- чинается выполнение процедуры Func_Edit, которая и обновляет соответствую- щие данные в записи info, после чего заносит обновленные значения в UserData.
Если же происходит нажатие на кнопку
Run, то обновляются значения редакти- руемых окон и выполняется функция
Run.
9.2.3.
Разработка функции
Run
Функция выполнения основного действия (кнопка RUN) пишется на основании ранее имевшейся программы расчета R-C цепочки. Первая группа добавляемых операторов -извлечение новых значений задаваемых переменных
h0=gcf;
info=get(h0,’UserData’);
N=info.N;
R=info.R;
C=info.C;
167

....................
% Основной расчетный алгоритм
% Построение насчитанных графиков в окне
% Первое окно - рисуем сигнал
hax1=finobj(’Tag’,’Axes1’);
% Определение дескриптора осей этого окна
subplot(hax1);
% Рисуем подрисунок в этом окне
cla;
% Стирание предыдущего изображения в этом окне
hl1=line(t,E);
% Определить линию с дескриптором hl1
set(hl1,’color’,’r’,...
% Обновить данные для линии hl1 цветом ’r’
’parent’,hax1);
% в осях h ax1
title(’Сигнал E(t)’);
% добавить надпись к этому окну
И так далее для каждого окна.
9.2.4.
Разработка функции
Exit
Самая простая процедура -это процедура отключения программы и стирания ри- сунка
function f=Func_Exit()
delete(gcf);
После выполнения этой процедуры удаляются все графические объекты в текущем окне и закрывается графическое окно.
9.2.5.
Разработка функции
Edit
Функция редактирования значений в окнах ввода.
h0=gcf;
% Считывание данных из общего блока всего рисунка.
info=get(h0,’UserData’);
% Определение дескриптора редактируемого окна
hedN=findobj(h0,’Tag’,’EditN’
% Сканирование строки с преобразованием к формату e
newN=sscanf(get(hedN,’string’),’%e’);
if isempty(newN)
info.N=newN;
end;
................
168

Дескриптор соответствующего редактируемого окна в данном примере находится с помощью функции
findobj -нахождение объекта по известному значению его свойства (в данном случае -свойству Tag). Можно эти дескрипторы передавать из процедуры NAME.M с помощью оператора
global или через свойство UserData.
В конце всей функции после выполнения группы операторов, подобных приведен- ным, для каждого редактируемого окна необходимо результаты обновления
info
присвоить свойству
’UserData’ с помощью оператора
set(h0,’UserData’,info);
% Занесение новых данных из info в UserData.
169

Глеб Леонидович Коткин
Валерий Семенович Черкасский
КОМПЬЮТЕРНОЕ МОДЕЛИРОВАНИЕ ФИЗИЧЕСКИХ
ПРОЦЕССОВ
Учебное пособие
Подписано в печать
Формат
60 × 84/16
Офсетная печать.
Уч.-изд.
Заказ №
Тираж 300 экз.
Цена
Редакционно-издательский отдел Новосибирского университета;
участок оперативной полиграфии НГУ; 630090, Новосибирск-90,
ул. Пирогова, 2.
1   ...   9   10   11   12   13   14   15   16   17


написать администратору сайта