Создание 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-функции
Некоторые из указанных процедур 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.
Пример выполнения работы для варианта:
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 Переходные процессы: выхода объекта управления - а) и графики изменения входного сигнала - б); в) – без помехи; г) – с помехой. По оси ординат время, с; по оси абсцисс выходное значение сигналов: а) – выход ОУ; б) вход ОУ
Читайте также: A) за создание условий неэффективного использования ресурсов Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|