Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Создание S-блоков с использованием программ MATLAB




В системе 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 Переходные процессы: выхода объекта управления - а) и графики изменения входного сигнала - б); в) – без помехи; г) – с помехой. По оси ординат время, с; по оси абсцисс выходное значение сигналов: а) – выход ОУ; б) вход ОУ

 

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...