Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Начала прогаммирования в среде MatLab / Начала программирования в среде MatLab.pdf
Скачиваний:
254
Добавлен:
02.05.2014
Размер:
5.66 Mб
Скачать

7.4. Объединение S-моделей с программами MatLab

384

 

 

 

'MaxRows' – максимальное количество строк в выходном векторе; неотрицательное целое; по умолчанию равно 0;

'InitialState' – вектор начальных значений переменных состояния; по умолчанию он пустой ([]);

'FinalStateName' – имя вектора, в который будет записываться конечные значения вектора состояния модели; символьная строка, по умолчанию – пустое ('');

'OutputVariables' – выходные переменные; по умолчанию имеет значение {txy}; возможные варианты | tx | ty | xy | t | x | y; все они неявно указывают, какие именно выходные переменные не будут выводиться.

7.4.5. Образование S-блоков путем использования программ MatLab. S-функции

В системе MatLab предусмотрен механизм преобразования некоторых процедур, написанных языками высокого уровня, в блок SimuLink-модели. Осуществляется этот механизм с помощью так называемых S-функций.

S-функция – эта относительно самостоятельная программа, которая написана на языке MatLab или C. Главное назначение S-функции – решать следующие задачи:

-образования новых блоков, которые дополняют библиотеку пакета

SimuLink;

-описания моделируемой системы в виде системы математических уравнений;

-включения ранее созданных программ на языке С или MatLab в S- модель.

Программа S-функции имеет определенную четкую структуру. Для случая, когда S-функция создается на основе М-файла, эта структура приведена в виде файла SfunTMPL.m в директории TOOLBOX\SIMULINK\BLOCKS. Из рассмотрения этого файла-шаблона вытекает, что заголовок S-функции в общем случае может иметь следующий вид:

function [sys,x0,str,ts] = <Имя_S-функции> (t,x,u,flag{, <Параметры>})

Стандартными аргументами S-функции являются: t – текущее значение аргумента (времени);

x – текущее значение вектора переменных состояния; u – текущее значение вектора входных величин;

flag – целочисленная переменная, отражающая форму представления результатов действия S-функции;

<Параметры> - дополнительные идентификаторы, которые характеризуют значения некоторых параметров системы, которые используются в S- функции; наличие их не является обязательным.

В результате вычислений, осуществляемых при работе S-функции, получают значение такие переменные:

7.4. Объединение S-моделей с программами MatLab

385

 

 

 

sys – системная переменная, содержание которой зависит от значения, которое приобретает переменная flag;

x0 – вектор начальных значений переменных состояния;

str – символьная переменная состояния (обычно она пуста []);

ts – матрица размером (m*2), которая содержит информацию о дискретах времени.

Текст S-функции состоит из текста самой S-функции и текстов собственных (внутренних) подпрограмм, которые она вызывает, а именно:

mdlInitializeSizes, устанавливающей размеры переменных S-функции и начальные значения переменных состояния;

mdlDerivatives, используемой как процедура правых частей системы дифференциальных уравнений модели в форме Коши в случае, когда переменные состояния объявлены как непрерывные;

mdlUpdate, которая используется как процедура обновления на следующем интервале дискрета времени значений переменных состояния, которые объявлены как дискретные;

mdlOutputs, которая формирует вектор значений выходных переменных в блоке S-функции;

mdlGetTimeOfNextVarHit – вспомогательная функция, которая используется для определения момента времени, когда определенная переменная состояния пересекает заданный уровень;

mdlTerminate – функция, которая завершает работу S-функции.

В зависимости от типа уравнений (алгебраические, или дифференциальные, или разностные), которыми описывается блок, который моделируется через S- функцию, некоторые из указанных функций не используются. Так, если блок описывается алгебраическими уравнениями, то не используются почти все внутренние указанные процедуры, за исключением процедуры mdlOutputs, в которой и вычисляются соответствующие алгебраические соотношения, определяющие связь между входными переменными u и выходными y. В случае, когда поведение блока описывается системой непрерывных дифференциальных уравнений, не используется процедура mdlUpdate, а если уравнения блока являются разностными, не используется функция mdlDerivatives. Обязательными являются лишь процедуры инициализации mdlInitializeSizes и формирования выхода mdlOutputs.

Главная процедура S-функции содержит, главным образом, обращения к той или другой внутренней процедуре в соответствия со значением переменной flag на манер нижеследующего:

switch flag, case 0,

[sys,x0,str,ts]=mdlInitializeSizes; case 1,

sys=mdlDerivatives(t,x,u);

case 2,

sys=mdlUpdate(t,x,u);

case 3,

sys=mdlOutputs(t,x,u);

case 4,

7.4. Объединение S-моделей с программами MatLab

386

 

 

 

sys=mdlGetTimeOfNextVarHit(t,x,u);

case 9,

sys=mdlTerminate(t,x,u);

otherwise

error(['Unhandled flag = ',num2str(flag)]);

end

В соответствии со значением переменной flag выполняется та или другая внутренняя процедура:

flag=0 – выполняется инициализация блока S-функции;

flag=1 – осуществляется обращение к процедуре правых частей непрерывных дифференциальных уравнений;

flag=2 – вычисляются новые значения переменных состояния на следующем шаге дискретизации (для дискретной S-функции);

flag=3 – формируется значения вектора выходных величин блока S- функции;

flag=4 – формируется новое значение модельного времени, которое отсчитывается от момента пересечения заданного уровня определенной переменной состояния;

flag=9 – прекращается работа блока S-функции.

Установление и изменение значения переменной flag осуществляется автоматически, без вмешательства пользователя, в соответствии с логикой функционирования блоков SimuLink при моделировании (см. п. 7.4.1).

Итак, использование S-функции позволяет моделировать работу как обычных алгебраических, так и динамических (непрерывных или дискретных) звеньев.

Процесс образования блока S-функции состоит из следующих этапов:

1)написания текста S-функции, например, в виде М-файла; текст составляется на основе файла-шаблона SfunTMPL.m с учетом заданных уравнений поведения блока;

2)перетаскивания из библиотеки SimuLink (SimuLink> Functions & Tables>) стандартного блока S-function (рис. 7.97) в окно блок-схемы, внутри которой будет создаваться новый S-блок;

system

S-Function

Рис. 7.97

3)двойного нажатия мышью на изображении этого блока, что приводит к возникновению на экране нового окна (рис. 7.98), содержащего два окошка ввода:

S-function name (имя S-функции), в которое вводится имя новой написанной S-функции;

7.4. Объединение S-моделей с программами MatLab

387

 

 

 

S-function parameters (параметры S-функции), в которое вводятся имена или значения тех параметров блока, которые указаны в разделе <Параметры> составленного М-файла S-функции;

Рис. 7.98

Рис. 7.99

4)введения в указанные окошки имени написанного М-файла S-функции и списка значений параметров S-функции; если, например, ввести в качестве имени S_KA, а в окошко параметров, - строку J, Ug0, UgSk0, то это окно изменит свой вид на следующий (рис. 7.99):

S_KA

S-Function

Рис. 7.100

5)теперь нужно нажать мышью на кнопку <OK> этого окна; если система обнаружит М-файл с введенным именем в достижимых ей путях, окно (рис. 7.99) исчезнет, а изображение блока в окне блок-схемы изменит свой вид (рис. 7.100) – внутри него возникнет введенное имя S-функции.