Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Моделирование измерительных задач в среде MATLAB + Simulink. Учебное пособие
.pdf
ТЕОРЕТИЧЕСКИЕ ОСНОВЫ MATLAB + SIMULINK
– set(gca,’XGrid’,’on’) – включается сетка, перпендикуляр-
ная оси X;
– set(gca,’GridLines’,’-’) – тип линий сетки;
– set(gca,’Color’,[0.8 0.8 0.8]) – цвет осей.
Рассмотрим свойства линий. Сделаем линию текущей и с по
мощью команды get(gco) выведем на экран список доступных
свойств этого объекта. Рассмотрим теперь примеры изменения
свойств объекта – линии:
– set(gco,’Color’,’r’) – красная линия;
– set(gco,’Linewidth’,2) – толщина линии;
– set(gco,’Marker’,’o’) – маркер-круг;
– set(gco,’MarkerfaceColor’,’g’) – зеленый цвет заливки мар
кера;
– set(gco,’MarkerSize’,8) – размер маркера.
Создание объекта в MATLAB сопровождается созданием чис
лового указателя на него. Функции gcf, gca и gco как раз возвращают указатели. Целесообразно при создании объектов указатели записывать в переменные, которые впоследствии могут
быть использованы. Например,
– t=[0:0.1:7]; x=sin(t); y=cos(t);
– hfig=figure; – создание графического окна и указателя на
него;
– hax=axes; – создание осей;
– hlines=plot(t,x,t,y); – строится две линии; hlines – вектор,
содержащий два указателя. Теперь свойства каждой линии
можно изменять независимо.
Удаление объектов производится с помощью команды delete.
Например, delete(hlines(1)) удалит синусоиду.
Рассмотрим пример использования объекта line. Функция
line(X,Y) строит линию, соединяющую точки с координатами
, y1), (x2,y2) и т. д.
(x
1
Рассмотрим анимацию движения точки по заданной траекто
-
рии, например: y = cos(x). Создадим m-файл kom.m:
% Движение точки по траектории
x=linspace(0,2*pi,60);
y=cos(x); n=length(x);
41

МОДУЛЬ 1
hold on;
% Задаем масштабы по осям координат
axis([0,2*pi,-1,1]);
% Создаем объект, который будет отображать движущуюся точку
hLine=line([x(1),x(1)],[y(1),y(1)]);
set(hLine,’Marker’,’o’,’Color’,’r’);
% Цикл для отображения движения точки
for i=1:n
set(hLines,’XData’,[x(i),x(i)],’YData’,[y(i),y(i)]);
% Если точка не начальная, проводим участок траектории от
предыдущего положения до текущего
if i>1
line([x(i-1),x(i)],[y(i-1),y(i)])
% пауза
pause(0.3)
end
end
Запишем файл и вызовем его на выполнение, набрав в ко
мандной строке kom.
1.3. Программирование приложений в MATLAB
-
Приложения MATLAB являются графическими окнами, со
держащими элементы управления – элементы интерфейса пользователя: кнопки, списки, переключатели, флажки, полосы
скроллинга, поля ввода, текстовые области для вывода резуль
татов работы, пользовательское меню.
Приложения можно разрабатывать в виде m-файлов самосто
ятельно или используя редактор приложений GUIDE.
При разработке приложений в виде m-файлов используются
функции figure, axes, uicontrol. Первая создает объект «графи
ческое окно» и указатель на него, вторая – «оси координат» и
указатель на объект, третья – «элемент пользовательского ин
терфейса» и указатель на этот элемент.
Просмотреть свойства объектов можно с помощью функции
get, используя в качестве аргумента одну из перечисленных
42

ТЕОРЕТИЧЕСКИЕ ОСНОВЫ MATLAB + SIMULINK
функций создания объектов. Управление свойствами созданных
объектов осуществляется с помощью функции set.
Рассмотрим свойства объектов, создаваемых функцией
uicontrol:
>> h=uicontrol;
После выполнения этой команды создается графическое окно
с одним элементом управления – по умолчанию создается ко
мандная кнопка, расположенная в левом нижнем углу графического окна. Позиция и размеры элемента управления задаются
свойством Position, которое представляет собой вектор со сле
дующими компонентами: x- и y-координаты левой нижней вершины прямоугольника относительно левого нижнего угла графического окна, ширина и высота прямоугольника. Все эти величины по умолчанию измеряются в пикселях. Единицы измерения записаны в свойстве Units. Список допустимых значений
свойства можно получить с помощью функции set(h,’Units’). На
экран будет выведен следующий список:
[ inches | centimeters | normalized | points | {pixels} | characters ]
Вид создаваемого элемента управления определяется свой
ством Style. Просмотреть возможные значения этого свойства
можно с помощью команды set(h,’Style’):
[ {pushbutton} | togglebutton | radiobutton | checkbox | edit | text |
slider | frame | listbox | popupmenu ]
В обоих случаях в фигурных скобках указано значение свой
ства по умолчанию.
Еще одно свойство – Callback – представляет собой назва
ние функции-обработчика, описывающей реакцию элемента на
действия пользователя. В простейшем случае это может быть
допустимая в данной ситуации команда MATLAB или название
файла-функции. Выполнив команду set(h,’Callback’), получим
на экране сообщение:
string -or- function handle -or- cell array
То есть, кроме символьной строки, это может быть также
указатель на функцию или массив ячеек.
Рассмотрим теперь простой пример приложения. Создадим
m-файл mydemo.m:
43

МОДУЛЬ 1
fg=gure;
set(fg,’Name’,’MyDemo’,’Numbertitle’,’off’,’Menubar’,’none’)
% Создадим текстовое поле, в котором выводится приветствие
ht=uicontrol(fg,’Style’,’Text’,’Units’,’centimeter’,’position’,[5 5 5 0.5]);
set(ht,’HorizontalAlignment’,’center’,’String’,’Hello, Word!’);
% Создадим командную кнопку, при нажатии на которую прило
жение %закрывается
hp=uicontrol(fg,’Style’,’pushb’,’String’,’Close’,’Units’,’normalized’);
set(hp, ‘Position’,[0.8 0.1 0.1 0.05],’Callback’,’close(gcf)’);
Сохраним файл и вызовем его командой mydemo. Результат
работы показан на рис. 1.
Рассмотрим теперь создание приложений в редакторе прило
жений. Вызов редактора осуществляется набором в командном
окне команды guide.
Выберем в списке Blank GUI и нажмем ОК. Откроется окно
редактора приложений (рис. 2).
-
-
44
Рис. 1. Результат работы программы

ТЕОРЕТИЧЕСКИЕ ОСНОВЫ MATLAB + SIMULINK
Рис. 2. Окно редактора приложений
Редактор содержит:
– строку меню;
– панель инструментов управления приложением;
– заготовку окна приложения с нанесенной сеткой;
– вертикальную и горизонтальную линейки;
– панель инструментов для добавления элементов интерфей
са в окно приложения.
Разработка приложения состоит в том, что в заготовку окна
заносятся разные элементы интерфейса, определяются функ
ции, задающие действия, производимые объектом при обращении к нему пользователя, – обработчики событий.
Рассмотрим основы программирования элементов управле
ния.
Разрабатываемое приложение хранится в двух файлах –
с расширениями fig и m. Первый файл содержит информацию
о размещении в окне приложения объектов, а второй является
m-файлом с основной функцией и подфункциями.
45
-
-
-

МОДУЛЬ 1
Добавление элемента интерфейса в редакторе приложения
приводит к автоматическому созданию соответствующей ему
подфункции. От пользователя требуется заполнить ее команда
ми обработки события, возникающего при обращении пользователя к элементу.
В меню Tools в позиции Applications Options выберем в спи
ске Command-line accessibility строку On, необходимую для корректного построения графиков в приложении.
Разместим в заготовке окна оси координат и командную
кнопку. Кнопка является элементом интерфейса, поэтому ей
следует задать имя, которое уникальным образом идентифици
рует кнопку среди всех объектов окна приложения. Щелкнув
по кнопке правой кнопкой мыши, вызовем редактор свойств
объекта «кнопка». В свойство Tag занесем значение btn_Plot –
имя кнопки, а в свойстве String – «Построить» – надпись на
кнопке. Аналогично осям задаем название ax_Main. Выберем
в меню Save as, создадим в текущем каталоге папку FirstGui и
запишем приложение в файл mygui.fig. При этом автоматиче
ски редактор m-файлов создает файл, содержащий текст файла
mygui.m.
В конце файла располагается подфункция pbn_Plot_Callback –
обработчик события Callback, возникающего при нажатии на
кнопку пользователем. Добавим в эту функцию текст:
x=[-2:0.2:2];
y=exp(-x.^2);
plot(x,y)
Сохраним m-файл и запустим приложение, нажав на соответ
ствующую кнопку панели управления приложением (Run). При
нажатии на кнопку «Построить» в графическом окне выводится
график функции y(x).
Добавим новую кнопку очистки графического окна. Зададим
имя кнопки pbn_Clear и надпись на кнопке «Очистить». Перейдем к обработчику событий данной кнопки, выбрав из контекстного меню строку m-file Editor. Разместим в нем команду
очистки графического окна: cla. Запишем и запустим приложе
-
ние. Убедимся, что обе кнопки работают.
46

ТЕОРЕТИЧЕСКИЕ ОСНОВЫ MATLAB + SIMULINK
Сделаем некоторые усовершенствования в этом приложении.
При запуске приложения кнопка «Очистить» должна быть не
доступной, поскольку очищать пока нечего. После построения
графика кнопка «Очистить» должна стать доступной, а кнопка
«Построить» – недоступной. Для этого используется свойство
кнопок Enable.
Установим в редакторе приложения свойство Enable кнопки
«Очистить» в off. В обработчике событий кнопки «Построить»
добавляем текст:
set(gco,’Enable’,’off’)
set(handles.btn_Clear,’Enable’,’on’)
В первой команде set используется указатель на текущий
объект gco, во второй – структура указателей на объекты соз
даваемого приложения – handles. Поля структуры совпадают с
названиями объектов.
Аналогично в обработчик кнопки «Очистить» добавляется
текст:
set(gco,’Enable’,’off’)
set(handles.btn_Plot,’Enable’,’on’)
Запишем и закроем приложение. Запуск приложения произ
водится набором команды mygui.
Продолжим работу над приложением. Для этого нужно вы
полнить команду guide mygui. При этом запускается редактор
приложения с загруженным приложением mygui.
Изменим заголовок окна. Щелкнув по окну правой кноп
кой мыши (например, по сетке окна), выберем из контекстного
меню редактор свойств и изменим свойство Name на «Построе
ние графика функции».
Рассмотрим теперь применение и программирование других
элементов интерфейса пользователя.
Флаги и рамки
Флаги позволяют произвести одну или несколько установок,
определяющих работу приложения. Обычно схожие по функци
ональности элементы размещаются в одной рамке. Рассмотрим
47
-

МОДУЛЬ 1
пример применения флагов для нанесения сетки на график
функции.
Расширим окно приложения вправо, разместим вверху пра
вой части окна рамку и поместим в нее два флага (Checkbox).
Первому флагу присвоим имя chbx_GridX и надпись «сетка по
X», второму – chbx_GridY и «сетка по Y».
Состояние флагов определяется значением свойства Value.
Функцию Callback кнопки «Построить» дополняем проверкой
состояния флагов. Состояние флагов, в свою очередь, влияет на
значение свойств XGrid и YGrid осей:
if get(handles.chbx_GridX,’Value’)
set(gca,’XGrid’,’on’)
else
set(gca,’XGrid’,’off’)
end
if get(handles.chbx_GridY,’Value’)
set(gca,’YGrid’,’on’)
else
set(gca,’YGrid’,’off’)
end
Смена состояния флагов не приводит к немедленному изме
нению на графике. Для этого необходимо определить события
Callback флагов. Добавим в функцию-обработчик первого флага
текст:
if get(gco,’Value’)
set(gca,’XGrid’,’on’)
else
set(gca,’XGrid’,’off’)
end
И аналогично для второго флага:
if get(gco,’Value’)
set(gca,’YGrid’,’on’)
else
set(gca,’YGrid’,’off’)
end
48

ТЕОРЕТИЧЕСКИЕ ОСНОВЫ MATLAB + SIMULINK
На рис. 3 показан вид окна приложения на данном этапе
разработки.
Рис. 3. Окно приложения
Переключатели
В отличие от флагов переключатель должен позволять выбор
только одной опции из нескольких. Используем переключатели
для выбора типа маркера на графике: кружок, квадрат или без
маркера.
Добавим рамку и разместим в ней три переключателя. Для
первого зададим имя rb_MarkCirc и надпись «маркер-круг»,
для второго rb_MarkSq и «маркер-квадрат», для третьего –
rb_MarkNone и «без маркера». Зададим в редакторе свойству
Value третьего переключателя значение 1, т. е. он включен по
умолчанию. Дальнейшее управление осуществляется программ
-
ным путем.
Для изменения маркера на линии необходим указатель на
линию. Для этого в обработчике событий кнопки «Построить»
49

МОДУЛЬ 1
надо запомнить указатель в выходном аргументе функции
Plot. (hLine=plot(x,y);). Однако переменная hLine является
локальной для подфункции обработки событий кнопки «По
строить», т. е. значение ее теряется после выхода из подфункции. Для осуществления доступа к свойствам линии можно
объявить переменную hLines как глобальную. Мы рассмотрим
более общий подход с использованием структуры handles, с по
мощью которой происходит обмен данными между различными подфункциями программы. Подфункция, передающая данные, должна содержать запись данных в новое поле структуры
и сохранение структуры с помощью команды guidata. Доба
вим в обработчик событий кнопки «Построить» следующий
текст:
handles.hLine=plot(x,y);
guidata(gcbo,handles);
Первая строка заменяет строку plot(x,y).
Теперь изменим обработчики событий переключателей. Вста
вим строки:
– для первого переключателя:
set(handles.rb_MarkCirc,’Value’,0);
set(handles.rb_MarkNone,’Value’,0);
– для второго переключателя:
set(handles.rb_MarkSq,’Value’,0);
set(handles.rb_MarkNone,’Value’,0);
– для третьего переключателя:
set(handles.rb_MarkCirc,’Value’,0);
set(handles.rb_MarkSq,’Value’,0).
Запишем и запустим приложение. После работы с ним мы
видим, что нужны дальнейшие улучшения алгоритма:
– при входе в приложение переключатели маркера должны
быть недоступны, поскольку еще нет объекта «линия»;
– при повторном построении графика тип маркера не соот
ветствует включенному переключателю;
– при повторном щелчке по отмеченному переключателю он
визуально отключается, хотя тип маркера при этом не изменя
ется.
50
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
