Главная страница

Учебное пособие для студентов высших учебных заведений


Скачать 5.41 Mb.
НазваниеУчебное пособие для студентов высших учебных заведений
Дата10.03.2022
Размер5.41 Mb.
Формат файлаpdf
Имя файлаmatlab.pdf
ТипУчебное пособие
#390741
страница40 из 44
1   ...   36   37   38   39   40   41   42   43   44
7.4. Объединение S-моделей с программами MatLab
383
записаны по правую сторону от надписей соответствующих окошек, то эти же данные будут записаны под этими именами.
Так же, активизируя (рис. 7.96) окошко
Initial state (начальные значения пе- ременных состояния), можно ввести в S-модель начальные значения переменных состояния системы. Активизировав окошко
States (Переменные состояния), мож- но записать текущие значения переменных состояния системы в рабочее про- странство под именем
xout (или другим именем, если его записать по правую сто- рону от этой надписи).
Наконец, можно записать и конечные значения переменных состояния в вектор
xFinal, если активизировать окошко Final state.
7.4.4. Запуск процесса моделирования S-модели из среды
MatLab
Рассмотрим теперь средства, которые позволяют запускать на моделирова- ние созданные S-модели из программы MatLab.
S-модель запускается на выполнение, если в программе MatLab вызвать процедуру sim по следующему образцу
[t,x,y1, y2, ..., yn] = sim(model,timespan,options,ut),
где
model – текстовая переменная, являющаяся именем mdl-файла, который со- держит запись соответствующей S-модели;
timespan – вектор из двух элементов, - значения начального и конечного моментов времени моделирования;
options – вектор значений опций интегрирования; устанавливается процедурой simset:
options = simset('Свойство1', Значения1,' Свойство2', Значения2, ...);
t – массив выходных значений моментов времени; x – массив (вектор) переменных состояния системы;
y1 – первый столбец матрицы выходных переменных системы
(которые подаются на выходные порты) и т.д.
Устанавливать (и изменять) параметры решателя и процесса интегрирова- ния в программе MatLab можно при помощи функции simset как это показано выше. Так можно установить значение следующих (среди прочих) свойств реша- теля или интегрирования:
'Solver', - название решателя; значения, которые может принять это свойст- во, может быть одним из следующих (указывается в апострофах):
ode45 | ode23 | ode113 | ode15s | ode23s – для интегрирования с автоматически изменяемым шагом, а для фиксированного шага - ode5 | ode4 | ode3 | ode2 | ode1;
'RelTol' – относительная допустимая погрешность; значение может быть по- ложительным скаляром; по умолчанию устанавливается 1e-3;
'AbsTol' – абсолютная допустимая погрешность; значение может быть по- ложительным скаляром; по умолчанию устанавливается 1e-6;
'FixedStep' – фиксированный шаг (положительный скаляр);
'MaxOrder' – максимальный порядок метода (применяется лишь для метода
ode15); может быть одним из целых
1 | 2 | 3 | 4 |; по умолчанию равняется
5;

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

7.4. Объединение S-моделей с программами MatLab
388
S-блок на основе S-функции, которая содержится в М-файле по имени
S_KA.m, создан.
Теперь его можно использовать как обычный S-блок в блок схеме S-модели.
При этом на вход этого блока должен поступать векторный сигнал u. Выходом блока является также векторный сигнал y, который сформирован S-функцией во внутренней процедуре mdlOutputs.
7.4.6. Пример создания S-функции
Образуем S-функцию, которая реализует динамические свойства твердого тела в его вращательном движении. Для описания динамики тела воспользуемся динамическими уравнениями Ейлера в матричной форме:
M
ω
J
ω
ω
J
=


×
+

)
(
)
(
dt
d
, (7.4) здесь - матрица моментов инерции тела относительно осей, связанных с телом;
- матрица-столбец из проекций абсолютной угловой скорости тела на одни и те же оси;
- кососиметрична матрица вида
J
ω
)
(
×
ω













=
×
0 0
0
)
(
x
y
x
z
y
z
ω
ω
ω
ω
ω
ω
ω
, (7.5) составленная из тех же проекций;
- матрица-столбец из проекций вектора мо- мента внешних сил на связанные оси.
M
Создадим М-файл соответствующей S-функции. Назовем его S_DUE.m :
Файл S_DUE.m
function [sys,x0,str,ts] = S_DUE(t,x,M,flag,J,UgSk0)
% S-функция S_DUE Динамических Уравнений Ейлера
% Реализует динамику вращательного движения твердого тела,
% отыскивая вектор абсолютной угловой скорости тела
% по заданному вектору моментов внешних сил,
% действующих на тело
% ВХОД блока:
%
M - вектор проекций момента внешних сил на оси
%
X, Y i Z связанной с телом системы координат
% ВЫХОД блока:
% y - вектор из шести элементов: первые три - проекции
% абсолютной угловой скорости om тела на указанные оси,
% последние три - проекции на те же оси
% углового ускорения тела
% Входные ПАРАМЕТРЫ S-функции:
%
J - матрица моментов инерции тела в указанных осях;
%
UgSk0 - вектор начальных значений проекций
% угловой скорости тела
% Лазарев Ю.Ф., Украина, 18-12-2001
IJ=inv(J); % вычисление обратной матрицы моментов инерции
switch flag,
case 0
[sys,x0,str,ts] = mdlInitializeSizes(UgSk0);

7.4. Объединение S-моделей с программами MatLab
389
case 1,
sys = mdlDerivatives(t,x,M,J,IJ);
case 3,
sys = mdlOutputs(x,M,J,IJ);
case 9
sys = [];
end
% Конец процедуры
%=======================================================
function [sys,x0,str,ts] = mdlInitializeSizes(UgSk0,Ug0)
sizes = simsizes;
sizes.NumContStates = 3;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 6;
sizes.NumInputs = 3;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = UgSk0;
str = [];
ts = [0 0];
% Конец процедуры mdlInitializeSizes
%==========================================
function z = mdlDerivatives(t,x,M,J,IJ)
% ВХОДНОЙ вектор "M" является вектором проекций моментов внешних сил,
% действующих на космический аппарат соответственно по осям X Y Z
% х(1)=om(1); х(2)=om(2); х(3)=om(3);
% z(1)=d(om(1))/dt; z(2)=d(om(2))/dt; z(3)=d(om(3))/dt;
% |Jx Jxy Jxz|
% J=|Jxy Jy Jyz| - матрица моментов инерции КА
% |Jxz Jyz Jz |
om=x(1:3); omx=vect2ksm(om);
z=IJ*(M-cross(om,J*om));
% ДИНАМИЧЕСКИЕ уравнения Ейлера
% Конец процедуры mdlDerivatives
%=================================
function y = mdlOutputs(x,M,J,IJ)
y(1:3)=x;
om=x(1:3);
zom=IJ*(M-cross(om,J*om)) ; %
Определения УСКОРЕНИЙ
y(4:6)=zom;
% Конец процедуры mdlOutputs
В качестве входного вектора создаваемого S-блока принят вектор М, со- стоящий из трех значений текущих проекций момента внешних сил, которые дей- ствуют на тело, на оси системы декартових координат, связанной с телом. Обра- зуем выходной вектор y из шести элементов: первые три – текущие значения про- екций абсолютной угловой скорости тела, вторые три, - проекции на те же оси аб- солютного углового ускорения тела:
y=[omx,omy,omz,epsx,epsy,epsz].
Создаваемый S-блок рассматривается как непрерывная система (с тремя не- прерывными состояниями x=[omx,omy,omz]). Поэтому в тексте S-функции изъята процедура mdlUpdate и оставлена процедура mdlDerivative, которая фактически является подпрограммой правых частей динамических уравнений Ейлера.
Создадим новое (пустое) окно блок-схемы SimuLink. Перетянем у него стандартный блок S-функции из раздела
Functions & Tables.

7.4. Объединение S-моделей с программами MatLab
390
Дважды щелкнув мышью на изображении этого блока, вызовем его окно настраивания и запишем в него название М-файла созданной S-функции и его па- раметры (рис. 7.101). Нажмем кнопку .
Рис. 7.101
Вследствие этого на изображении блока возникнет надпись имени S- функции, а окно настраивания исчезнет.
Теперь в том же окне с S-блоком S-функции создадим цепь для проверки правильности его работы.
Но для этого предварительно нужно продумать условия тестового примера.
Рассмотрим, например, такой случай:
- на тело не действуют внешние силы, т. е. тело свободно вращается в пространстве;
- оси декартовой системы координат, которая связана жестко с телом, на- правлены по главным осям инерции тела; при таком условии матрица моментов инерции будет диагональной;
- тело является динамично симметричным, а его ось фигуры направлена вдоль второй оси (Y) связанной системы координат; это означает, что матрица моментов инерции будет иметь вид:










=
e
e
J
J
J
0 0
0 0
0 0
J
, где обозначено:
- экваториальный момент инерции,
e
J
J
- момент инер- ции тела относительно его оси фигуры (осевой момент инерции тела), причем в случае, если тело является сплющенным в направлении оси
e
J
J
>
Y
;
- тело предварительно "раскручено" с угловой скоростью вокруг оси его фигуры и имеет незначительную (по сравнению с
) начальную уг- ловую скорость


0
ω
вокруг оси Х.

7.4. Объединение S-моделей с программами MatLab
1   ...   36   37   38   39   40   41   42   43   44


написать администратору сайта