Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИЛЬЯ ЗАДАЧА стр 50.pdf
Скачиваний:
66
Добавлен:
26.03.2015
Размер:
1.74 Mб
Скачать

 

для систем имеющих непрерывные переменные состояния. Для этого

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

,

 

типа S-функций выходные переменные вычисляются на внутреннем ша-

 

ге моделирования.

 

 

 

 

 

 

 

 

 

У

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Continuous but fixed in minor time step sample time

непрерывное

 

 

 

 

 

 

 

 

 

 

 

 

 

 

П

 

 

модельное время с фиксированным шагом во внутреннем цикле. Зада-

 

ется для S-функций, выходные переменные которых должны изменять-

 

ся только в соответствии с внешним шагом моделирования, но должны

 

быть неизменными на внутреннем.

 

 

 

 

 

 

 

 

3. Discrete sample time дискретное модельное время. Задается для

 

 

 

 

 

 

 

 

 

 

Н

 

 

 

 

дискретной системы (дискретной части системы). Пользователь должен

 

задать шаг модельного времени sample time и смещениеТ(задержку)

 

offset, чтобы определить моменты времени, в которые Simulink должен

 

 

 

 

 

 

 

 

 

 

И

 

 

 

.

 

 

вызвать на выполнение данный блок. Величина смещения не может

 

превышать величину шага модельного времени. Время срабатывания

 

 

 

 

 

 

 

 

 

 

 

 

 

Ю

 

 

блока определяется выражением: TimeHit = (n * sample time) + offset,

 

где n – целое число шагов расчета.Если задано дискретное модельное

 

 

 

 

 

 

 

 

 

 

 

.

 

 

время, то Simulink обращается к методам mdlUpdate

и mdlOutputs на ка-

 

ждом внешнем шаге моделирования.

И

 

 

 

 

4. Variable sample time – дискретныйНпеременный шаг расчета. Мо-

 

 

 

 

 

О

 

 

в

 

 

 

 

 

 

дельное время дискретное, но интервалы времени между срабатыва-

 

ниями блока могут быть разнымиЭ. В начале каждого шага моделирова-

 

ния S-функция должна определить значение ремени следующего сра-

 

 

 

Э

 

 

 

 

 

 

 

 

 

 

 

батывания. Для этого используется mdlGetTimeOfNextVarHit метод.

 

 

5. Inherited sample time – наследуемый шаг расчета. В некоторых

 

 

 

 

 

 

 

реализован

 

 

 

 

 

 

 

случаях работа блока не зависит

т выб ра варианта задания шага мо-

 

 

 

 

 

 

с

 

 

 

 

 

 

 

 

дельного времени. На пример, дляблокаGain не имеет значения, какой

 

Э

 

 

 

 

 

 

 

– блок выполняет усиление вход-

 

шаг модельного времени

 

 

 

 

 

 

 

 

блока

 

 

 

 

 

 

 

 

 

ного сигнала для любого варианта sample time. В подобных случаях па-

 

раметр sampleПtime может быть унаследован от предыдущего или после-

.

 

 

р

 

 

, имеющего наименьший шаг расчета.

 

ц

дующего блока, либо от

 

 

 

 

 

К

Создание S-функций на языке MATLAB

 

о

 

3.2.7.

 

 

Наиболее простой и быстрый путь создать S-функцию – это напи-

сать ее на языке MATLAB с использованием файла-шаблона. И хотя соз-

дание S-функций на языке MATLAB имеет некоторые ограничения (например, MATLAB S-функция может иметь только по одному входному и выходному порту, а также передаваемые и принимаемые данные через эти порты могут быть только скалярами и векторами типа double), этот способ является наилучшим с точки зрения изучения механизма работы

74

 

S-функции.

 

 

 

 

 

 

 

 

 

 

,

 

 

Ниже приводится шаблон S-функции. Оригинальный файл шаблона

 

sfuntmpl.m находится в папке ...\toolbox\simulink\blocks.

 

 

У

 

 

Шаблон MATLAB S-функции:

 

 

 

 

П

 

 

 

 

 

 

 

 

 

 

 

 

SFUNTMPL - Базовый шаблон для создания MATLAB S-функции

 

[44-45, 50-51].

 

 

 

 

 

 

 

 

 

 

 

 

С помощью MATLAB S-функции пользователь может задать систе-

 

 

 

 

 

 

 

 

Н

 

 

 

 

 

му обыкновенных дифференциальных уравнений (ODE), уравнения

 

дискретной системы, и (или) любой алгоритм, описывающийТ

работу

 

Simulink-блока.

 

Базовая форма

синтаксиса S-функции выглядит сле-

 

дующим образом:

 

И

 

 

.

 

 

 

[sys, x0, str,ts] = sfunc(t, x, u, flag, p1,..., pn)

 

 

Ю

 

 

 

 

Параметры S-функции:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t – текущее время;

 

 

 

.

 

 

 

 

 

x – вектор переменных состояния системы;

 

 

 

 

 

u – вектор входных сигналов;

 

И

 

 

 

 

 

 

flag – флаг – целое число, определяющееН

, какая функция внутри S-

 

функции выполняется при вызове.

задаваемые

 

 

 

 

 

 

 

 

 

 

О

 

 

 

 

 

 

 

 

p1,..., pn – параметры S-функцииЭ,

 

 

в окне диалога блока

 

S-function.

Э

о

 

 

 

 

 

 

 

 

Результат, возвращаемый (вычисляемый) S-функцией в момент

 

времени t, зависит от значения переменн й flag, значения вектора со-

 

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

 

 

 

Результаты работы S-фу кции в зависимости от значения перемен-

 

Э

 

 

а

 

 

 

 

 

 

 

 

 

ной flag приведены в таблице 4.

 

 

 

 

 

 

 

 

 

 

араметры блока "S-functionн" p1,..., pn передаются в S-функцию при

 

любом значенииП

переменной flag.

 

 

 

 

 

 

 

.

 

р

 

 

 

 

 

 

 

 

ц

При вызове S-функциисозначением переменной flag = 0 ею рас-

 

считываются следующие величины:

 

 

 

 

 

 

 

о

 

sys(1) – число неп е ывных переменных состояния;

 

 

 

 

sys(2) – число дискретных переменных состояния;

 

 

 

 

 

 

 

 

 

 

sys(3)

– число выходных переменных;

sys(4)

Кчисло входных переменных (размерность вектора u).

75

Таблица 4. – Выполнение функции по значению переменной flag

 

 

flag

 

РЕЗУЛЬТАТ

ВЫПОЛНЯЕМАЯ

 

ОПИСАНИЕ

 

 

 

 

 

 

 

 

 

 

 

 

ФУНКЦИЯ

 

 

 

 

У

 

 

 

 

 

 

 

 

 

 

,

 

 

0

 

[sizes, x0, str,ts]

 

mdlInitializesizes

 

 

Инициализация: рас-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

П

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

чет начальных

усло-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вий, значений векто-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ра модельного време-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ни времени, размер-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ности матриц

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Т

 

 

 

1

 

 

 

dx

 

 

 

mdlDerivatives

 

 

Расчет значений про-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

изводных

вектора x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

состояния системы

 

 

 

 

 

 

 

 

 

 

 

Н

 

 

 

2

 

 

 

ds

 

 

 

mdlUpdate

Расчет значений век-

 

 

 

 

 

 

 

 

 

 

 

Н

 

 

тора состояний.x дис-

 

 

 

 

 

 

 

 

 

 

 

 

И

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

sys

 

 

 

 

 

 

 

 

 

 

Э

 

 

 

= x(n+1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

y

 

 

 

mdlOutputs

И

 

 

 

вы-

 

 

 

 

 

 

 

 

 

 

Расчет значений

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ходногоЮвектора sys

 

 

4

 

 

Tnext

 

О

 

 

в

 

Расчет значения

вре-

 

 

 

 

 

 

mdlGetTimeOfNextVarHit

 

 

 

 

 

 

 

Э

 

 

 

 

 

 

мени для следующей

 

 

 

 

 

 

 

н

 

 

 

расчетной точки дис-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

кретной части систе-

 

 

 

 

П

 

 

 

 

о

 

 

 

 

 

 

 

 

 

 

 

 

мы. Используется при

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Э

 

 

 

а

 

 

 

расчете

дискретной

 

 

 

 

 

 

 

 

 

с

 

 

 

 

или

гибридной

сис-

.

 

 

 

р

 

 

 

 

темы

с переменным

 

 

 

 

 

 

 

шагом.

 

 

 

 

ц

5

 

 

К

 

 

 

 

 

 

 

Зарезервировано

 

для

о

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

будущего

использо-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вания.

 

 

 

 

 

 

9

 

 

 

[]

 

 

 

mdlTerminate

 

 

Завершение расчета

 

 

 

 

Любой из первых четырех элементов в sys может быть задан рав-

 

 

ным -1 (минус один), что означает динамически задаваемую размер-

 

 

ность соответствующих переменных. Фактическая размерность при вы-

 

 

зове S-функции с другими значениями переменной flag будет равна

 

 

размерности

 

входного

вектора

u.

 

Например,

при

 

 

 

 

 

 

 

 

 

 

 

76

 

 

 

 

 

 

 

 

 

 

sys(3) = -1, размерность выходного вектора будет задана равной размер-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

,

 

ности входного вектора. sys(5) - значение зарезервировано “для будуще-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

У

 

го использования. sys(6) - значение, равное 1, соответствует прохожде-

 

нию входного сигнала на выход. Значение, равное 0, определяет, что

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

П

 

 

входной сигнал не используется для вычисления выходного сигнала в

 

функции mdlOutputs, вызываемой при значении переменной flag = 3.

 

sys(7) - размерность вектора модельного времени (количество строк в

 

матрице ts).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

Н

 

 

 

 

Если переменных состояния нет – значение параметра задается равным

 

[]. str – зарезервированный параметр. Значение параметраТзадается рав-

 

ным []. ts – матрица, размерностью (m×2), задающая модельное время и

 

 

 

 

 

 

 

 

 

 

 

И

 

 

.

 

 

смещение (period и offset), где m – число строк в матрице ts.

 

 

 

 

 

Если в матрице ts

заданы несколько значений шага модельного

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ю

 

 

времени, то его значения должны располагаться в порядке возрастания.

 

В том случае, если задано более одного значения шага, требуется про-

 

верка времени срабатывания блока в явном виде:

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

И

 

 

 

 

 

 

abs(round((T - OFFSET) / PERIODН) - (T - OFFSET) / PERIOD)

 

 

 

 

 

 

 

О

 

 

времени

 

 

 

 

 

 

 

Обычно задаваемая погрешностьЭ

при проверке равна 1e-8. Она за-

 

висит от величин шага модельного

 

 

и ремени окончания расче-

 

 

 

 

Э

 

 

о

 

 

 

 

 

 

та. Можно также задать,

чтобы значение ременного шага передавалось

 

в блок "S-function" из предшествующего блока модели. Для функций,

 

 

 

П

 

 

 

 

 

 

 

 

 

 

 

 

изменяющихся внутри основ ого временн го шага, должно быть задано

 

 

 

 

 

 

 

с

 

 

 

1

 

 

 

 

 

sys(7) = 1 и ts = [-1 0]. Для фу кций,

е изменяющихся внутри основно-

 

 

Э

 

 

 

 

 

 

 

 

 

 

 

 

 

 

го временного шага, долж о быть задано sys(7) = 1 и ts = [-1 1]. Ниже

 

лежащие строки

показывают

нбазовую структуру S-функции:

 

 

.

 

 

р

 

 

 

 

 

 

 

 

 

 

 

function [sys,x0,str,ts] = sfuntmpl(t,x,u,flag)

 

 

 

 

 

ц

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

switch flag,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

иного метода:

 

 

 

 

 

 

 

 

 

 

 

 

 

Инициализация.

 

 

 

 

 

 

 

 

 

 

 

о

case 0, [sys,Кx0,str,ts]=mdlInitializeSizes;

 

 

 

 

 

 

Расчет производных.

 

 

 

 

 

 

 

 

 

 

case 1, sys=mdlDerivatives(t,x,u);

Расчет значений вектора состояний дискретной части системы.

1 Copyright 1990-2001 The MathWorks, Inc. $Revision: 1.9$

Авторский перевод комментариев: Черных И.В.

77

 

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);

 

 

 

Н

 

 

 

 

 

Неизвестное значение переменной flag.

 

 

 

 

 

 

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

 

 

 

Окончание функции sfuntmpl.

 

 

И

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mdlInitializeSizes – функция инициализации: расчет начальных условий,

 

значений вектора модельного времени, размерности матриц

 

 

 

 

function [sys,x0,str,ts]=mdlInitializeSizes

 

 

 

Ю

 

 

 

 

 

 

 

 

 

 

 

Приведенные ниже значения параметров даны в качестве примера и не

 

отражают реально задаваемых значений.

 

 

.

 

 

 

 

sizes = simsizes;

 

 

 

 

 

 

 

И

 

 

 

 

 

Первый вызов функции simsizes создаетНструктуру

 

 

 

 

 

 

 

О

 

 

в

 

 

 

 

 

 

sizessizes.NumContStates = 0;

 

 

 

 

 

 

 

 

 

 

 

Число непрерывных переменныхЭсостояния.

 

 

 

 

 

 

 

sizes.NumDiscStates = 0;

 

 

 

о

 

 

 

 

 

 

 

 

Э

 

 

 

 

 

 

 

 

 

 

Число дискретных переменных с ст яния.

 

 

 

 

 

 

 

sizes.NumOutputs = 0;

 

 

 

 

 

 

 

 

 

 

 

 

 

Число выходных переменных (размер сть выходного вектора).

 

 

 

sizes.NumInputs = 0;

с

 

 

 

 

 

 

 

 

 

 

Э

 

а

 

 

 

 

 

 

 

 

 

 

 

Число входных переменных (размер ость вектора u).

 

 

 

 

 

sizes.DirFeedthrough = 1;

 

н

 

 

 

 

 

 

 

 

 

ПараметрП, задающий проход входного сигнала на выход. Этот параметр

.

имер

 

 

 

 

 

 

 

 

 

 

 

 

нужно задавать авным 1, в том случае, если входной сигнал прямо или

ц

 

 

 

, через логическое выражение или алгебраиче-

 

опосредованно(нап

 

 

 

скую операцию) п оходит на выход системы (иными словами: если

 

входной сигнал u, входит в выражения задаваемые в функции mdlOut-

 

puts) или используется метод mdlGetTimeOfNextVarHit. При описании

о

системы вКуравнениях пространства состояний этот параметр следует

задать равным 1, если матрица D (матрица обхода) не пустая и равным

нулю, в противном случае sizes.NumSampleTimes = 1;

Размерность вектора модельного времени.

Минимальное значение параметра = 1 (одна строка в матрице ts). sys = simsizes(sizes);

78

 

Второй вызов функции simsizes. Данные о размерностях передаются в

 

Simulink.

 

 

 

 

 

 

 

 

 

 

 

,

 

x0 = [];

 

 

 

 

 

 

 

 

 

 

У

 

Задание вектора начальных значений переменных состояния (началь-

 

ных условий).

 

 

 

 

 

 

 

 

П

 

 

 

 

 

 

 

 

 

 

 

 

 

 

str = [];

 

 

 

 

 

 

 

 

 

 

 

 

 

Задание параметра str, как пустой матрицы. Параметр заразервирован

 

для будущего использования.

 

 

 

 

 

 

 

 

 

ts = [0 0];

 

 

 

 

 

 

 

Н

.

 

 

Матрица из двух колонок, задающая шаг модельного времени и смеще-

 

ние.

 

 

 

 

 

 

 

 

Т

 

 

 

Окончание mdlInitializeSizes.

 

 

 

И

 

 

 

 

 

mdlDerivatives – функция для расчета значений производных вектора

 

состояния непрерывной части системы.

 

 

 

Ю

 

 

 

function sys=mdlDerivatives(t,x,u)

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

sys = [];

 

 

 

Э

 

 

 

 

 

 

Окончание mdlDerivatives.

 

 

 

 

И

 

 

 

 

mdlUpdate – функция для расчета значенийН

вектора выходных сигналов

 

 

 

О

 

 

в

 

 

 

 

 

непрерывной части системы.

 

 

 

 

 

 

 

 

 

function sys=mdlUpdate(t,x,u)

о

 

 

 

 

 

 

sys = [];

Э

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Окончание mdlUpdate.

 

 

 

 

 

 

 

 

 

 

 

mdlOutputs – функция для расчета з ачений вектора выходных сигналов

 

 

 

 

с

 

 

 

 

 

 

 

 

 

непрерывной части системы.

 

 

 

 

 

 

 

 

 

Э

 

а

 

 

 

 

 

 

 

 

 

function sys=mdlOutputs(t,x,u)н

 

 

 

 

 

 

 

 

sys = [];П

 

 

 

 

 

 

 

 

 

 

 

.

р

 

 

 

 

 

 

 

 

 

 

 

Окончание mdlOutputs.

 

 

 

 

 

 

 

 

 

 

ц

 

 

 

 

 

 

 

 

 

 

 

 

 

mdlGetTimeOfNextVarHit – р счет значения времени для следующей

 

расчетной точки диск етной части системы. Функция рассчитывает

 

время (абсолютное значение), по достижении которого значения дис-

 

кретной части системы передаются в Simulink-модель. Функция исполь-

о

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

ременным шагом (variable discrete-time sample time). В этом случае па-

раметр ts функции mdlInitializeSizes должен быть задан как [-2 0].

function sys=mdlGetTimeOfNextVarHit(t,x,u) sampleTime = 1;

Пример: время срабатывания блока увеличивается на 1 секунду. 79