Uploaded by formail3

Создание S-блоков MATLAB

advertisement
Главная
|
Обратная связь | Поможем написать вашу
работу!
Найти
Создание S-блоков с использованием программ
MATLAB
⇐ Предыдущая
Стр 13 из 14
АРХИТЕКТУРА
БИОЛОГИЯ
ГЕОГРАФИЯ
ИСКУССТВО
ИСТОРИЯ
ИНФОРМАТИКА
МАРКЕТИНГ
МАТЕМАТИКА
МЕДИЦИНА
МЕНЕДЖМЕНТ
ОХРАНА ТРУДА
ПОЛИТИКА
ПРАВООТНОШЕНИЕ
РАЗНОЕ
СОЦИОЛОГИЯ
СТРОИТЕЛЬСТВО
ФИЗИКА
ФИЛОСОФИЯ
ФИНАНСЫ
ХИМИЯ
ЭКОЛОГИЯ
ЭКОНОМИКА
ЭЛЕКТРОНИКА
В
системе
MATLAB
Следующая ⇒
предусмотрен механизм
преобразования некоторых
процедур, написанных на языках
высокого уровня, в блок Sмодели. Он реализуется с помо­щью так называемых S-функций.
S-функция — это относительно
самостоятельная программа,
которая написана на языке
MATLAB или С. Главное
назначение S-функции состоит в
решении сле­дующих задач:
· создание новых блоков, которые
дополняют библиотеку пакета
Simulink;
· описание моделируемой системы
в виде системы математических
уравнений;
· включение ранее созданных
программ на языке С или MATLAB
в S-модель.
Программный код S-функции имеет четкую структуру. Для случая,
когда S-функ­ция создается на основе М-файла, эта структура
приведена в файле Sfuntmpl.m, ко­торый находится в папке
T00LB0X\SIMULINK\BLOCKS. Заголовок S-функции в об­щем случае
может иметь следующий вид:
function [sys,x0,str,ts] = <Имя_S-функции> (t,x,u,flag{,
<Параметры>})
Стандартными аргументами S-функции являются:
· t – текущее значение аргумента (времени);
· х — текущее значение вектора переменных состояния;
· u — текущее значение вектора входных величин;
· flag — целочисленная переменная, отражающая форму
представления резуль­татов действия S-функции;
· <Параметры> — дополнительные идентификаторы,
характеризующие значения некоторых параметров системы,
используемых в S-функции (наличие их не является
обязательным).
В результате вычислений, осуществляемых при работе S-функции,
получают зна­чение такие переменные:
· sys — системная переменная, содержимое которой зависит от
значения, кото­рое приобретает переменная flag;
· х0 — вектор начальных значений переменных состояния;
· str — символьная переменная состояния (обычно она пуста []);
· ts — матрица, которая содержит информацию о дискретах
времени.
Текст S-функции состоит из текста самой S-функции и текстов
подпрограмм (внут­ренних), которые она вызывает. В табл. 1
приведены внутренние процедуры, S-функции.
Таблица 1. Внутренние процедуры S-функции
Процедура
Описание
mdlInitializeSizes
Устанавливает размеры переменных S-функции и
начальные значения переменных состояния
mdlDerivatives
Используется как процедура правых частей системы
дифференциальных уравнений модели в форме Коши в
случае, когда переменные состояния объявлены как
непрерывные
mdlUpdate
Используется как процедура обновления на следующем
интервале дискрета времени значений переменных
состояния, которые объявлены как дискретные
mdlOutputs
Формирует вектор значений выходных переменных в
блоке S-функции
Является вспомогательной функцией, которая
используется для определения момента времени, когда
mdlGetTimeOfNextVarHit
конкретная переменная состояния пересекает заданный
уровень
mdlTerminate
Является функцией, которая завершает работу Sфункции
Некоторые из указанных процедур S-функции могут не
использоваться. Это за­висит от типа уравнений (алгебраические,
дифференциальные или разностные), которыми описывается
моделируемый через S-функцию блок. Так, если блок за­дан
алгебраическими уравнениями, то не используются почти все
указанные внут­ренние процедуры, за исключением процедуры
mdlOutputs, в которой и вычисля­ются соответствующие
алгебраические соотношения, определяющие связь между
входными переменными и выходными переменными у. В том
случае, если пове­дение блока задано системой непрерывных
дифференциальных уравнений, не ис­пользуется функция mdl
Update, если уравнения блока являются разностными — функция
mdlDerivatives. Обязательными являются лишь процедуры
mdlInitializeSizes и mdlOutputs (инициализации и формирования
выхода).
В зависимости от значения переменной flag главная процедура Sфункции со­держит обращение к той или иной внутренней
процедуре. Например:
switch flag,
case 0,
[sys.xO.str.ts] = mdllnitializeSizes;
case 1,
sys = mdlDerivatives(t,x,u);
case 2,
sys = mdlUpdate(t,x,u);
case 3,
sys = mdlOutputs(t,x,u);
case 4,
sys = mdlGetTimeOfNextVarHit(t,x,u);
case 9,
sys = mdlTerminate(t,x,u);
otherwise
error(['Unhandled flag - ',num2str(flag)]);
end
В зависимости от значения переменной flag выполняются
следующие действия (через вызов соответствующей внутренней
процедуры):
· 0 — инициализация блока S-функции;
· 1 — обращение к процедуре правых частей непрерывных
дифференциальных уравнений;
· 2 — вычисление новых значений переменных состояния на
следующем шаге дискретизации (для дискретной S-функции);
· 3 — формирование значения вектора выходных величин блока Sфункции;
· 4 — формирование нового значения модельного времени, которое
отсчитывается от момента пересечения заданного уровня
определенной переменной со­стояния;
· 9 — прекращение работы блока S-функции.
Установка и изменение значения переменной flag осуществляется
автоматиче­ски, без вмешательства пользователя, в соответствии с
логикой функционирова­ния блоков при моделировании.
Итак, использование S-функции позволяет моделировать работу
как обычных алгебраических, так и динамических (непрерывных
или дискретных) звеньев.
Чтобы создать блок S-функции, выполните следующие действия.
1. Напишите текст S-функции, например в виде М-файла; текст
составляется на основе файла-шаблона SfunTMPL.m с учетом
заданных уравнений поведения блока.
2. Перетащите стандартный блок S-Function (рис. 13) из раздела
User-Defined Functions библиотеки Simulink в окно блок-схемы, в
которой будет создаваться новый S-блок.
Рис. 13 Заготовка S – функции
3. Дважды щелкните мышью на изображении блока S-Function, что
приведет к по­явлению на экране окна его настройки. Окно
содержит два поля: S-function name (Имя S-функции), в которое
вводится имя написанной S-функции, и S-function parameters
(Параметры S-функции), в которое вводятся имена или значения
параметров блока, указанных в разделе <Параметры> М-файла,
содержащего S-функцию.
4. Введите в указанные поля имя М-файла, в котором хранится Sфункция, и список значений параметров S-функции.
5. Щелкните мышью на кнопке ОК. Если система обнаружит М-файл
с указан­ным именем в папках, которые для нее доступны, то на
изображении блока в окне блок-схемы появится вве­денное имя Sфункции.
S-блок на основе S-функции будет соз­дан. Теперь его можно
использовать как обычный S-блок в блок-схеме S-модели. На вход
этого блока должен поступать векторный сигнал u. Выходом блока
станет векторный сигнал у, который сформирован S-функцией во
внутренней процеду­ре mdlOutputs.
Пример выполнения работы для варианта:
№
Нелинейная
варианта функция ОУ
Y = 25 - (x
-5)(x -5)
Границы
Чистая
изменения
Шаг
Структура Постоянная
задержка
входного
поиска ОУ
времени ОУ
ОУ
параметра ОУ
[0;10]
ЛН
S – функция:
function [sys,x0,str,ts] = extr(t,x,u,flag)
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
case 2,
sys=mdlUpdate(t,x,u);
case 3,
sys=mdlOutputs(t,x,u);
case {1,4,9}
sys=[];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 3;
sizes.NumOutputs = 1;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [0 0 1];
str = [];
ts = [-1 0];
sizes = simsizes;
function sys=mdlUpdate(t,x,u)
step=1; % шаг поиска
if mod(t,75)==0 % t – модельное время
if u<x(2) % х(2) – старое значение входа, u – текущее значение
входа
x(3)=x(3)*(-1); % x(3) – направление поиска
end
if u>x(2) & x(3)==1
x(3)=1;
end
if u>x(2) & x(3)==-1
x(3)=-1;
end
x(1)=x(1)+x(3)*step; % x(1) – входной параметр ОУ
x(2)=u;
end
if x(1)>10 x(1)=10; end
if x(1)<0 x(1)=0; end
sys(1)=x(1);
sys(2)=x(2);
sys(3)=x(3);
function sys=mdlOutputs(t,x,u)
sys(1) = x(1);
Переходные процессы выхода объекта управления и графики
изменения входного сигнала снятые со схемы рис.15 представлены
на рис. 14:
а)
б)
в) г)
Рис. 14 Переходные процессы: выхода объекта управления - а) и
графики изменения входного сигнала - б); в) – без помехи; г) – с
помехой. По оси ординат время, с; по оси абсцисс выходное
значение сигналов: а) – выход ОУ; б) вход ОУ
⇐ Предыдущая
9
10
11
12
5
6
7
8
13
Поделиться:
14
Download