Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
практикум по матлабу.pdf
Скачиваний:
157
Добавлен:
29.03.2015
Размер:
1.19 Mб
Скачать

Из существенных для нас свойств этого объекта отметим свойство ’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

DRIVE

 

GRAPH

 

 

 

G?L

 

MOUSE?

 

 

>:

 

RUN

EDIT

EXIT

Рис. 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);

% в осях hax1

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.