И.В.Черных. Simulink. И. В. Черных. "Simulink Инструмент моделирования динамических систем"
Скачать 3.7 Mb.
|
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-функции используются следующие методы: mdlInitializesizes – Инициализация. До начала первого цикла моделирования, Simulink инициализирует S-функцию. В течение этого этапа Simulink: Инициализирует структуру с именем SimStruct, содержащую информацию о S-функции. Устанавливает количество и размерность входных и выходных портов. Устанавливает шаг модельного времени для блока. Выделяет память для хранения переменных и устанавливает размерность массивов. mdlGetTimeOfNextVarHit – Вычисление времени следующего срабатывания блока (для блоков с дискретным переменным шагом расчета). mdlOutputs – Вычисление значений выходных сигналов на внешнем шаге моделирования. На этом этапе рассчитанные выходные сигналы блока передаются на его выходные порты. mdlUpdate – Расчет дискретных переменных состояния на внешнем шаге моделирования. Дискретные переменные состояния сохраняют свое значение до следующего цикла моделирования. mdlDerivatives – Расчет производных переменных состояния. 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 обеспечивает следующие варианты задания шага модельного времени: Continuous sample time – Непрерывное модельное время. Задается для систем имеющих непрерывные переменные состояния. Для этого типа S-функций выходные переменные вычисляются на внутреннем шаге моделирования. •Continuous but fixed in minor time step sample time – Непрерывное модельное время с фиксированным шагом во внутреннем цикле. Задается для S-функций, выходные переменные которых должны изменяться только в соответствии с внешним шагом моделирования, но должны быть неизменными на внутреннем. Discrete sample time – Дискретное модельное время. Задается для дискретной системы (дискретной части системы). Пользователь должен задать шаг модельного времени sample time и смещение (задержку) offset, чтобы определить моменты времени, в которые Simulink должен вызвать на выполнение данный блок. Величина смещения не может превышать величину шага модельного времени. Время срабатывания блока определяется выражением: TimeHit = (n * sample_time) + offset , где n – целое число шагов расчета. Если задано дискретное модельное время, то Simulink обращается к методам mdlUpdate и mdlOutputs на каждом внешнем шаге моделирования. Variable sample time – Дискретный переменный шаг расчета. Модельное время дискретное, но интервалы времени между срабатываниями блока могут быть разными. В начале каждого шага моделирования S-функция должна определить значение времени следующего срабатывания. Для этого используется mdlGetTimeOfNextVarHit метод. 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); %==================================================================% |