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

И.В.Черных. Simulink. И. В. Черных. "Simulink Инструмент моделирования динамических систем"


Скачать 3.7 Mb.
НазваниеИ. В. Черных. "Simulink Инструмент моделирования динамических систем"
Дата21.09.2022
Размер3.7 Mb.
Формат файлаdoc
Имя файлаИ.В.Черных. Simulink.doc
ТипДокументы
#689048
страница18 из 26
1   ...   14   15   16   17   18   19   20   21   ...   26

S-функция подключается к модели Simulink с помощью библиотечного блока S-function (библиотека Functions&Tables). На рис. 16.1 показано окно модели с блоком S-function и его окно диалога.



Рис. 16.1 Блок S-function и его окно диалога

Параметрами блока являются:

  • S-function name – Имя S-функции. Имя S-функции не должно совпадать с именем модели (mdl-файла).

  • S-function parameters – Параметры S-функции, передаваемые в нее через окно диалога. Параметры записываются в окне диалога в том же порядке, что и в заголовке S-функции.

16.2. Математическое описание S-функции

Simulink-блок однозначно описывается наборами входных переменных u, переменных состояния x и выходных переменных y (рис. 16.2).



Рис. 16.2 Общий вид Simulink-блока

В математической форме блок можно описать в общем виде следующей системой уравнений:



16.3. Этапы моделирования

Процесс расчета модели выполняется Simulink в несколько этапов. На первом этапе выполняется инициализация модели: подключение библиотечных блоков к модели, определение размерностей сигналов, типов данных, величин шагов модельного времени, оценка параметров блоков, а также определяется порядок выполнения блоков и выполняется выделение памяти для проведения расчета. Затем Simulink начинает выполнять цикл моделирования. На каждом цикле моделирования (временном шаге) происходит расчет блоков в порядке, определенном на этапе инициализации. Для каждого блока, Simulink вызывает функции, которые вычисляют переменные состояния блока x, производные переменных состояния, и выходы y в течение текущего шага модельного времени. Этот процесс продолжается, пока моделирование не будет завершено. На рис. 16.3 показана диаграмма, иллюстрирующая этот процесс.



Рис. 16.3 Процесс моделирования

16.4. Callback-методы S-функции

Каждая задача при вызове S-функции в процессе моде моделирования решается с помощью специальной внутренней функцией (сallback-метода). В MATLAB S-функции используются следующие методы:

  1. mdlInitializesizes – Инициализация. До начала первого цикла моделирования, Simulink инициализирует S-функцию. В течение этого этапа Simulink:

    • Инициализирует структуру с именем SimStruct, содержащую информацию о S-функции.

    • Устанавливает количество и размерность входных и выходных портов.

    • Устанавливает шаг модельного времени для блока.

    • Выделяет память для хранения переменных и устанавливает размерность массивов.

  2. mdlGetTimeOfNextVarHit – Вычисление времени следующего срабатывания блока (для блоков с дискретным переменным шагом расчета).

  3. mdlOutputs – Вычисление значений выходных сигналов на внешнем шаге моделирования. На этом этапе рассчитанные выходные сигналы блока передаются на его выходные порты.

  4. mdlUpdate – Расчет дискретных переменных состояния на внешнем шаге моделирования. Дискретные переменные состояния сохраняют свое значение до следующего цикла моделирования.

  5. mdlDerivatives – Расчет производных переменных состояния.

  6. mdlTerminate – Завершение работы S-функции.

Если S-функция содержит непрерывные переменные состояния, Simulink вызывает сallback-методы mdlDerivatives и mdlOutputs для расчета производных переменных состояния и выходных переменных на внутренних шагах моделирования.

Вызов каждого из методов Simulink задает с помощью переменной flag, являющейся входным параметром S-функции.

16.5. Основные понятия S-функции

Для того, чтобы создать S-функцию правильно необходимо определить основные понятия, используемые в технологии создания S-функций. К эти понятиям относятся:

  • Direct feedthrough – Прямой проход. Проход входных сигналов на выход. Прямой проход реализуется в S-функций, если в выражениях для выходных переменных присутствуют входные переменные, либо при расчете времени следующего срабатывания блока также используются входные переменные. Установка правильного значения параметра Direct feedthrough очень важна, поскольку именно с помощь него Simulink определяет наличие в модели замкнутых алгебраических контуров.

  • Dynamically sized inputs – Динамическая размерность входов. S-функция может быть написана таким образом, чтобы обеспечить произвольную размерность векторов входных и выходных переменных, а также векторов состояния непрерывной и(или) дискретной части системы. В этом случае фактическая размерность переменных определяется в самом начале процесса моделирования и устанавливается равной размерности входных сигналов. Чтобы задать динамическую размерность какой-либо переменной, нужно задать значение размерности для этой переменной равное -1 (минус один) в соответствующем поле структуры sizes (см. приведенный ниже шаблон S-функции).

  • Setting sample times and offsets - Установка шагов модельного времени и смещений. S-функция может задавать время срабатывания достаточно гибко. Simulink обеспечивает следующие варианты задания шага модельного времени:

  1. Continuous sample time – Непрерывное модельное время. Задается для систем имеющих непрерывные переменные состояния. Для этого типа 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 может быть унаследован от предыдущего или последующего блока, либо от блока, имеющего наименьший шаг расчета.

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

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

Ниже приводится шаблон S-функции с авторским переводом комментариев. Оригинальный файл шаблона sfuntmpl.m находится в папке ...\toolbox\simulink\blocks .

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

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

%

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

% С помощью 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

% приведены в таблице:

% _________________________________________________________________________

% | | | | |

% | flag | РЕЗУЛЬТАТ | ВЫПОЛНяЕМАя ФУНКЦИя | ОПИСАНИЕ |

% | | | (сallback-метод) | |

% |______|___________|________________________|_____________________________|

% | 0 | [sizes,x0,| mdlInitializesizes | Инициализация: Расчет |

% | | str,ts] | | начальных условий, значений |

% | | | | вектора модельного времени |

% | | | | времени, размерности матриц.|

% | 1 | dx | mdlDerivatives | Расчет значений производных|

% | | | | вектора x состояния системы.|

% | 2 | ds | mdlUpdate | Расчет значений вектора |

% | | | | состояний x дискретной |

% | | | | системы: sys = x(n+1). |

% | 3 | y | mdlOutputs | Расчет значений выходного |

% | | | | вектора sys . |

% | 4 | tnext | mdlGetTimeOfNextVarHit | Расчет значения времени для|

% | | | | следующей расчетной точки |

% | | | | дискретной части системы. |

% | | | | Используется при расчете |

% | | | | дискретной или гибридной |

% | | | | системы с переменным шагом. |

% | 5 | | | Зарезервировано для будущего|

% | | | | использования. |

% | 9 | [] | mdlTerminate | Завершение расчета |

% |______|___________|________________________|_____________________________|

%

%

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

% значении переменной flag.

%

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

% следующие величины:

%

% sys(1) - Число непрерывных переменных состояния.

% sys(2) - Число дискретных переменных состояния.

% sys(3) - Число выходных переменных.

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

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

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

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

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

% будет равна размерности входного вектора u.

% Например, при 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 = [0 0, % Шаг модельного времени для непрерывной

% % части системы.

% 0 1, % Фиксированный шаг расчета для непрерывной

% % части системы.

% period offset, % Фиксированный шаг модельного времени для

% % дискретной части системы,

% % где - period > 0 & offset < PERIOD.

% -2 0]; % Переменный шаг модельного времени для

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

% S-функции со значением переменной flag = 4

% выполняется расчет следующей точки по времени.

%

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

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

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

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

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

% Обычно задаваемая погрешность при проверке равна 1e-8. Она зависит от

% величин шага модельного времени и времени окончания расчета.

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

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

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

% sys(7) = 1 и ts = [-1 0] .

% Для функций, не изменяющихся внутри основного временного шага

% должно быть задано sys(7) = 1 и ts = [-1 1] .

%

% Copyright 1990-2001 The MathWorks, Inc.

% $Revision: 1.17 $

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

%

% Нижележащие строки показывают базовую структуру S-функции:

%

switch flag, % В зависимости от значения переменной 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);
%==================================================================%
1   ...   14   15   16   17   18   19   20   21   ...   26


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