Главная | Обратная связь | Поможем написать вашу работу! Найти Создание 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