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

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

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
ТЕОРЕТИЧЕСКИЕ ОСНОВЫ 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]