В системе matlab файлы с расширением c предназначены для хранения
М-файл-функция является типичным объектом языка программирования системы MATLAB. Одновременно он является полноценным модулем с точки зрения структурного программирования, поскольку содержит входные и выходные параметры и использует аппарат локальных переменных. Структура такого модуля с одним выходным параметром выглядит следующим образом:
М-файл-функция имеет следующие свойства:
- он начинается с объявления function, после которого указывается имя переменной van – выходного параметра, имя самой функции и список ее входных параметров;
- функция возвращает свое значение и может использоваться в виде name (Список_параметров) в математических выражениях;
- все переменные, имеющиеся в теле файла-функции, являются локальными, т. е. действуют только в пределах тела функции;
- файл-функция является самостоятельным программным модулем, который общается с другими модулями через свои входные и выходные параметры;
- правила вывода комментариев те же, что у файлов-сценариев;
- файл-функция служит средством расширения системы MATLAB;
- при обнаружении файла-функции он компилируется и затем исполняется, а созданные машинные коды хранятся в рабочей области системы MATLAB.
Последняя конструкция vаг=выражение вводится, если требуется, чтобы функция возвращала результат вычислений.
Приведенная форма файла-функции характерна для функции с одним выходным параметром. Если выходных параметров больше, то они указываются в квадратных скобках после слова function. При этом структура модуля имеет следующий вид:
Такая функция во многом напоминает процедуру. Ее нельзя слепо использовать непосредственно в математических выражениях, поскольку она возвращает не единственный результат, а множество результатов – по числу выходных параметров. Если функция используется как имеющая единственный выходной параметр, но имеет ряд выходных параметров, то для возврата значения будет использоваться первый из них. Это зачастую ведет к ошибкам в математических вычислениях. Поэтому, как отмечалось, данная функция используется как отдельный элемент программ вида:
После его применения переменные выхода var1, var2,… становятся определенными и их можно использовать в последующих математических выражениях и иных сегментах программы. Если функция используется в виде nаmе(Список_параметров), то возвращается значение только первого выходного параметра – переменной var1.
методическое пособие к лабораторным работам по курсу «Компьютерное проектирование систем автоматического управления» д для студентов специальности 53 01 07 «Информационные технологии и управление в технических системах» / М.К.Хаджинов. – Мн.: БГУИР, 2013.-22 с.
ISBN
Проведено описание и порядок выполнения лабораторных работ по курсу «Компьютерное проектирование систем автоматического управления». Содержание работ определено рабочей программой курса в соответствии с учебными планами специальности 53 01 07 «Информационные технологии и управление в технических системах».
По каждой работе изложены краткие теоретические сведения, представлены варианты заданий, приведены примеры программ в MATLAB, сформулированы контрольные вопросы, написанны электронные тренажёры.
УДК 519.95 (075.8)
ББК 22.18 я 73
ISBN М.К.Хаджинов, 2013
ISBN © БГУИР, 2013
Лабораторная работа №1
ПРОГРАММИРОВАНИЕ В СРЕДЕ MATLAB. ИЗУЧЕНИЕ ХАРАКТЕРИСТИК ОДНОКОНТУРНЫХ СИСТЕМ.
Цель работы: научиться составлять программы на языке Matlab в виде М-файлов для исследования одноконтурных систем с типовыми регуляторами. Освоить методику расчёта ПИД-регулятора.
Краткие теоретические сведения:
Система Matlab является интерактивной системой для выполнения инженерных и научных расчетов, которая ориентирована на матричные вычисления. Matlab – это одновременно и операционная среда, и язык программирования. Пользователь может сам написать специализированные функции и программы, которые оформляются в виде М-файлов. Накопление родственных функций приводит к концепции пакетов прикладных программ, каждый из которых решает определенную задачу или проблему. Операционная среда Matlab – это множество интерфейсов, которые поддерживают связь этой системы с внешним миром через командное окно, инструментальную панель, подсистемы просмотра рабочей области и путей доступа, редактор / отладчик М-файлов, специальные меню.
Командное окно позволяет использовать Matlab как мощный научный калькулятор, который отображает символы набранных с клавиатуры команд, результаты их выполнения, текст исполняемой программы, а также информацию об ошибках выполнения программы.
В командной строке после знака приглашения (>>) можно выполнять любые операции с действительными или комплексными числами (простейшие арифметические действия, элементарные и специальные математические функции). Результат вычислений будет представлен в предварительно установленном формате.
Управление путями доступа(включение рабочего каталога work в список путей доступа Matlab).
Для поиска М-файлов используют механизм путей доступа. В процессе сеанса работы можно вывести на терминал или внести изменения в список путей доступа, используя следующие функции:
addpath d:\work – добавляет каталог d:\work в список путей доступа;
rmpath d:\work – удаляет путь к d:\work из списка.
path – выводит на экран список путей доступа.
Создание М-файлов в среде Matlab.
В языке Matlab имеются программы двух типов с расширением *.m.
· Script-файлы( файлы-сценарии или управляющие программы)
При помощи Script-файлов оформляются основные программы, управляющие от начала до конца организацией всего вычислительного процесса. Как файл-функции оформляются отдельные процедуры и функции т.е. такие части программы, которые рассчитаны на неоднократное использование Script-файлами или другими процедурами при изменяемых значениях входных параметров и не могут быть выполнены без предварительного задания значений переменных, которые называют входными.
Главным внешним отличием текстов этих двух видов файлов является то, что файл-функции имеют первую строку вида:
function [перечень выходных величин] = имя процедуры (перечень входных величин).
Например, создадим функцию, вычисляющую значения квадратичного полинома:
%Функция, вычисляющая значения квадратичного полинома
%Формат вызова: example(x,a,b,c)
Принципиальное же отличие заключается в совершенно разном восприятии системой имен переменных в этих файлах. В файлах-функциях все имена переменных внутри файла и в заголовке воспринимаются как локальные, а переменные Script-файлов образуют так называемое рабочее пространство и сохраняют свой смысл и значения в течение всего сеанса работы с системой.
Некоторые особенности записи текста программы на языке Matlab:
· Любой оператор, записанный в командной строке исполняется при нажатии клавиши Enter.
· Несколько операторов в одной строке разделяются символами “ ; ” или “ , ”. Пробел является разделителем только элементов массива внутри квадратных скобок.
· Длинный оператор можно записать в несколько строк, используя знак переноса - три точки (…).
· Если оператор не заканчивается символом “ ; ”, то результат его действия при выполнении программы будет выведен в командное окно.
· Строка программы или её часть, начинающаяся с символа “ % ” не выполняется, она воспринимается системой как комментарий.
· Строки комментария, предшествующие первому выполняемому оператору, воспринимаются как описание программы и выводятся в командное окно по команде help.
· Операторы начала и окончания текста программы отсутствуют, т.е. начало и конец программы никак не маркируются.
· Переменные не описываются и не объявляются. Любое новое имя воспринимается системой как имя матрицы, размер которой устанавливается при предварительном вводе значений ее элементов.
· Имена переменных могут содержать лишь буквы латинского алфавита или цифры и должны начинаться с буквы. Общее число символов - не более 19.
· В именах переменных могут использоваться как прописные, так и строчные буквы с учетом того, что система Matlab их различает.
Создание программы на языке Matlab осуществляется при помощи текстового редактора, который вызывается автоматически при открытии m-файлов командами New, Open из меню File. Запуск m-файлов на выполнение производится из командной строки по имени файла без расширения.
Получение справочной информации (команды работы с Help).Получить информацию о функциях Matlab можно командой help:
Список каталогов выводит на экран команда help без аргументов. Список команд каталога выводится на экран командой help . Основной и наиболее быстрый способ выяснить синтаксис и особенности применения М-функции – это использовать команду help .
Порядок выполнения работы:
1. Подключить к Матлабу команды addpath рабочий каталог trenag с программами и электронными тренажёрами.
2. Освоить методику расчёта интегральных регуляторов с помошью электронного тренажёра (tr_PID) и получить параметры ПИД-регулятора для конкретного объекта.
3. Написать программу исследования одноконтурной системы управления.
Блок схема программы:
1. Ввод модели объекта управления.
1.1. Запись ss-формы модели по передаточной функции tf-формы (test_ssmodel).
1.2. Преобразование форм моделей в tf, zpk, ss-формы.
1.3. Запись передаточной функции по ЛАХ (test_LAXmodel).
2. Ввод регулятора.
3. Формирование и исследование разомкнутого контура управления.
3.1. ЛАХ (bode).
3.2. Запасы устойчивости (margin, wc_ph).
3.3. АФЧХ (nyquist).
4. Замыкание контура управления (feedback, connect).
5. Исследование характеристик замкнутого контура управления.
5.1. Переходных характеристик (step, khar_sysz).
5.2. Показателя колебательности АЧХ (norm).
5.3. Карты нулей и полюсов (pzmap).
5.4. Интегральных оценок (khar_sysz).
В скобках указаны имена функций, программ или электронных тренажёров.
Команды с выводом в графические окна предварять функцией figure открывания нового окна, чтобы сохранить предидущие графики, и заключать паузой pause(0), для немедленного вывода.
Контрольные вопросы:
1. Чем отличаются друг от друга переменные Script-файла и m-функции в использовании рабочего пространства системы?
2. Как воспользоваться справочной информацией?
3. Объяснить физический смысл переходной характеристики, передаточной функции, амплитудно- и фазо-частотной характеристик.
4. В чем отличие точной ЛАХ от асимптотической?
5. Что такое коэффициент затухания, как он влияет на вид переходной характеристики колебательного звена?
6. Что такое физическая реализуемость звеньев? Сформулируйте условие физической реализуемости звена для его передаточной функции.
7. Как реализуются и используются дифференциальные звенья на практике?
8. Как определить передаточную функцию звена по виду его логарифмической амплитудно-частотной характеристики?
9. Как строятся ЛАХ по передаточным функциям элементарных звеньев САУ?
10. Как различаются ЛАХ непрерывных и дискретных звеньев?
11. При разделении звеньев на дифференцирующие, позиционные и интегрирующие какая часть характеристик step определяет тип звена?
12. На каких частотах характеристик bode, nyquist определяется тип звена?
Создание программ часто предполагает сохранение результатов расчетов в файлы для их дальнейшего анализа, обработки и хранения. В связи с этим в среде MATLAB реализованы различные функции по работе с файлами, содержащие данные в разных форматах.
Для загрузки данных из файла,расположенного на локальном диске в рабочую средуMATLAB, используются следующие операторы:load, freadиfscanf. Для сохранения данных из рабочей среды MATLAB в файл на локальном диске предусмотрено использование следующих операторов: save, fwrite, fprintf.
В самом простом случае для сохранения и последующей загрузки каких-либо данных в среде MATLAB предусмотрены следующие функции, соответственно: save и load, имеющие следующий синтаксис:
Функция save позволяет сохранять произвольные переменные, используемые в программе в файл, который будет по умолчанию располагаться в рабочем каталоге (обычно поддиректория work) и иметь расширение mat. Соответственно функция loadпозволяет загрузить из указанного mat-файла ранее сохраненные переменные.
Недостатком функций save и load является то, что они работают с определенными форматами файлов (обычно mat-файлы) и не позволяют загружать или сохранять данные в других форматах. Между тем бывает необходимость загружать информацию, например, из бинарных файлов, созданных другими программными продуктами для дальнейшей обработки результатов в среде MATLAB. С этой целью в среде MATLAB предусмотрены следующие функции
где: – это указатель на файл, с которым предполагается работать. Для того, чтобы получить идентификатор файла, используется функция fopen, имеющая следующий синтаксис:
где: параметр режим работы> может принимать значения, приведенные в таблице 1.
В том случае, если функция fopen() по каким-либо причинам не может корректно открыть файл, то она возвращает значение –1. После выполнения всех файловых операций файл должен быть закрыт с помощью функции fcloseследующей структуры:
С помощью команды fclose(all)можно закрыть сразу все открытые файлы, кроме стандартных системных файлов.
Пример использования функций работы с файлами:
A=[1 2 3 4 5];
fid=fopen('my_file.dat', 'wb');% открытие файла на запись
fwrite(fid, A, 'double');% запись матрицы А в файл
fclose(fid);% закрытие файла
B=fread(fid, 5, 'double'); % чтение 5 значений в формате double
disp(B); % отображение на экране
fclose(fid); % закрытие файла
В результате выполнения данных операций в рабочем каталоге MATLABбудет создан файл my_file.dat размером 40 байт, в котором будут содержаться 5 значений типа double, записанных в виде последовательности байт (по 8 байт на каждое значение). Функция fread() считывает последовательно сохраненные байты и автоматически преобразовывает их к типу double, т.е. каждые 8 байт интерпретируются как одно значение типа double.
В приведенном примере в явном виде указывалось число элементов для считывания из файла. Однако, часто общее количество элементов бывает неизвестным, либо изменяется в процессе работы программы. В этом случае необходимо считывать данные из файла до тех пор, пока не будет достигнут его конец. В MATLAB существует функция для проверки достижения конца файла,которая возвращает 1 при достижении конца файла и 0 в других случаях и имеет следующий синтаксис:
Таблица 1 - Режимы работы с файлами в среде MATLAB при использовании функции fopen
Значение параметра | Описание параметра |
'r' | чтение |
'w' | запись (стирает предыдущее содержимое файла) |
'a' | добавление (создает файл, если его нет) |
'r+' | чтение и запись (не создает файл, если его нет) |
'w+' | чтение и запись (очищает прежнее содержимое или создает файл, если его нет) |
'a+' | чтение и добавление (создает файл, если его нет) |
'b' | дополнительный параметр, означающий работу с бинарными файлами, например, ‘wb’, ‘rb’ ‘rb+’, ‘ab’ |
Описанные ранее функции работы с файлами позволяют записывать и считывать информацию по байтам, которые затем требуется правильно интерпретировать для преобразования их в числа или строки. В то же время выходными результатами многих программ являются текстовые файлы, в которых явным образом записаны те или иные числа или текст. Прочитать такой файл побайтно, а затем интерпретировать полученные данные довольно трудоемкая задача, поэтому для этих целей были специально разработаны функции форматированного чтения или записи информации: fscanf и fprintf, соответственно.
Функция чтения fscanfимеет следующий синтаксис:
[value, count]=fscanf(fid, format, size)
где: value – результат считывания данных из файла; count – число прочитанных (записанных) данных; fid – указатель на файл; format – формат чтения (записи) данных; size – максимальное число считываемых данных
Функция записиfprintfимеет следующий синтаксис:
count=fprintf(fid, format, a,b. )
где:a,b,… – переменные для записи в файл.
Таблица 2- Список основных спецификаторов параметра formatдля функций fscanf() и fprintf()
Спецификатор | Описание |
%d | целочисленные значения |
%f | вещественные значения |
%s | строковые данные |
%c | символьные данные |
%u | беззнаковые целые значения |
В форматной строке могут бытьтакже использованы различные управляющие символы:
\r – возврат каретки;
\t – горизонтальная табуляция;
\n – переход на новую строку
С помощью функции fprintf() можно осуществлять запись разнородных данных в файл в требуемом формате, в том числе и строковых переменных, что позволяет размещать в файле различные текстовые надписи.
Файлы – это довольно распространенные объекты системы MATLAB. О некоторых типах файлов уже говорилось в предшествующих главах. В этом уроке рассматриваются свойства файлов, которые не зависят от их типа и относятся к любым файлам.
Файл обычно является некоторой совокупностью данных, объединенных одним именем. Тип файла, как правило, определяется его расширением. Мы рассматриваем файл как некое целое, хотя физически на диске он может быть представлен несколькими областями – говорят, что в этом случае файл фрагментирован.
Перед использованием любого файла он должен быть открыт, а по окончании использования – закрыт. Много файлов может быть открыто и доступно для чтения одновременно. Рассмотрим команды открытия и закрытия файлов.
- Команда open имя, где имя должно содержать массив символов или символьную переменную, открывает файлы в зависимости от анализа параметра имя и расширения в имени имя:
- переменная – открывает массив, названный по имени, в редакторе массивов (Array Editor);
- .mat – открывает файл, сохраняет переменные в структуре в рабочей области;
- .fig – открывает его в редакторе дескрипторонй графики Property Editor;
- .m – открывает m-файл в редакторе-отладчике;
- .mdl – открывает модель в Simulink;
- .р – открывает, если он есть, m-файл с тем же именем;
- .html – открывает HTML документ в браузере помощи.
Если файлы с расширением существуют в пути MATLAB, то открывается тот файл, который возвращается командой which имя, если нет – то файл из файловой системы. Если файл не имеет расширение имени, то он открывается той программой, формат файлов которой был бы обнаружен функцией which ('имя файла') По умолчанию для всех файлов с окончаниями, отличными от вышеперечисленных, вызывается openother. Open вызывает функции орепххх, где ххх – расширение файла. Исключение – переменные рабочей области, для которых вызывается openvar, и рисунки, для работы с которыми вызывается openim. Создавая т-файлы с именем орепххх, пользователи могут изменять обработку файлов и добавлять новые расширения в список. Закрывать файлы, открытые при помощи open, нужно из редакторов, вызываемых ореnххх.
- [FILENAME, PATHNAME] = uigetfile(FILTERSPEC. Title). Открывает диалог с именем Title и фильтром FILTERSPEC (например, массивом ячеек, содержащим расширения файлов) и возвращает файл, выбранный пользователем, и путь к нему. Возвращает FILENAME=0, если файл не существует или если пользователь нажал на Cancel. [FILENAME, PATHNAME] = uigetfile (FILTERSPEC, Title. X. Y) размещает окно диалога в точке X, Y (координаты в пикселях).
[filename, pathname] = uigetfile( '*.m;*.fig;*.mat:*.mdl' , 'All MATLAB Files (*.m, *.fig, *.mat. *.mdl)' ).
- Команда uiload открывает файл в диалоге, управляемом пользователем, с использованием команды load.
Функция ui import запускает Мастер импорта (Import Wizard), импортирующий из файла в текущей папке или буфера обмена Windows. Она соответствует выбору Import Data из меню File или выбору Paste Special из меню Edit MATLAB.
- ui import (FILENAME) – запускает Мастер Импорта, открывая файл FILENAME. Мастер импорта показывает данные для предварительного просмотра. В окне предварительного просмотра появляются данные и их представление в виде переменных MATLAB. Собственно данные, текст и заголовки представляются разными переменными MATLAB. Для данных ASCII вы должны удостовериться, что Мастер импорта распознал разделители столбцов. Самостоятельно он может распознать только символ табуляции, пробел, запятую или точку с запятой. Нужно щелкнуть мышью на кнопке Next и в следующем окне либо подтвердить выбор разделителя, сделанный Мастером, либо выбрать Other и ввести любой разделитель.
- ui import (' -file') – вначале выводит диалог выбора файла.
- ui import ('-pastespecial') – вначале выводит для предварительного просмотра содержимое буфера обмена Windows.
- S = ui import (…) хранит результирующие переменные как поля структуры S.
- Команда uisave – управляемое пользователем сохранение (команда save описана в уроке 2) с Windows диалогом.
- Функция saveas – сохраняет рисунок или модель Simulink в желаемом формате на носителе информации или на устройстве, разрешенном print.
- Функция saveas (H, 'FILENAME') – сохраняет данные в соответствии с командой дескрипторной графики Н в файле FILENAME. Формат файла определяется расширением имени FILENAME.
- Функция saveas (H. 'FILENAME'. 'FORMAT') – выполняет то же, но с параметром FORMAT (формат задается тем же способом, что и расширение имени файла и может от него отличаться). FORMAT имеет приоритет перед расширением имени файла. Параметры функции:
- 'fig' – сохранить рисунок (график) в двоичном fig-файле;
- 'm' или 'mfig' – сохранить рисунок в двоичном fig-файле и создать m-файл для его загрузки;
- 'mmat' – сохранить рисунок в m-файле как последовательность команд создания рисунка. Может не поддерживать новейшие графические функции.
Команда или функция delete удаляет файл или объект графики.
- delete имя файла удаляет файл текущей папки. Может быть использована *. Предпочтительно использование с записью в форме функции delete('mw файла'), когда имя файла – строка.
- delete(H) удаляет графический объект с дескриптором Н. Если этот объект – окно, то оно предварительно закрывается.
- Функция close(H) закрывает только графические окна. Для закрытия файлов необходимо использовать команду f close.
Для записи файлов на диск служит команда save, используемая в довольно очевидных формах:
Соответственно для считывания файлов с диска служит команда load:
В этих командах имя файла указывается по правилам, принятым в операционных системах класса MS-DOS. Эти команды обычно дублируются кнопками панелей инструментов и браузером файлов.
М-файлы сценариев и функций. Структура и свойства файлов сценариев.
Итак, мы установили, что работа в командном режиме (сессия) не является программированием. Внешним атрибутом последнего в MATLAB служит задание последовательности действий по программе, записанной в виде m-файла. В уроке 5 было показано, что для создания m-файлов может использоваться как встроенный редактор, так и любой текстовый редактор, поддерживающий формат ASCII. Подготовленный и записанный на диск m-файл становится частью системы, и его можно вызывать как из командной строки, так и из другого m-файла. Есть два типа m-файлов: файлы-сценарии и файлы-функции. Важно, что в процессе своего создания они проходят синтаксический контроль с помощью встроенного в систему MATLAB редактора/отладчика m-файлов.
Файл-сценарий, именуемый также Script-файлом, является просто записью серии команд без входных и выходных параметров. Он имеет следующую структуру:
Важны следующие свойства файлов-сценариев:
- они не имеют входных и выходных аргументов;
- работают с данными из рабочей области;
- в процессе выполнения не компилируются;
- представляют собой зафиксированную в виде файла последовательность операций, полностью аналогичную той, что используется в сессии.
Основным комментарием является первая строка текстовых комментариев, а дополнительным – последующие строки. Основной комментарий выводится при выполнении команд lookfor и help имя_каталога. Полный комментарий выводится при выполнении команды help Имя_файла. Рассмотрим следующий файл-сценарий:
Обратите внимание на то, что такой файл нельзя запустить без предварительной подготовки, сводящейся к заданию значений переменным xmin и хmах, использованным в теле файла. Это следствие первого свойства файлов-сценариев – они работают с данными из рабочей области. Переменные, используемые в файлах-сценариях, являются глобальными, т. е. они действуют одинаково в командах сессии и внутри программного блока, которым является файл-сценарий. Поэтому заданные в сессии значения переменных используются и в теле файла. Имена файлов-сценариев нельзя использовать в качестве параметров функций, поскольку файлы-сценарии не возвращают значений. Можно сказать, что файл-сценарий – это простейшая программа на языке программирования MATLAB [Файлы-сценарии нельзя компилировать. Перед компилированием их нужно преобразовать в файлы-функции – Примеч. ред.].
Читайте также: