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

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


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

16.7.6.2. Пример S-функции для ДПТ НВ

Для создания S-функции для ДПТ НВ за основу взят файл примера модели непрерывной системы csfunc.m . Принципиальные отличия нового файла от образца сводятся к следующему:

  1. Для расчета матриц уравнений пространства состояния A, В и С используются параметры передаваемые в S-функцию через окно диалога блока S-function. Эти параметры (L,R,J,Cm,Cw,Fi) записываются в конце списка параметров в заголовке S-функции : function [sys,x0,str,ts] = dpt_sfunc_1(t,x,u,flag,L,R,J,Cm,Cw,Fi)

  2. Для исключения одинаковых (повторяющихся) вычислений расчет матриц A, В и С выполняется в методе mdlInitializeSizes. Для этого параметры блока (L,R,J,Cm,Cw,Fi) передаются в метод mdlInitializeSizes через его заголовок: [sys,x0,str,ts] = mdlInitializeSizes(L,R,J,Cm,Cw,Fi) Поскольку инициализация модели происходит лишь один раз, то и расчет матриц A, В и С будет выполнен также один раз, что значительно повысит скорость моделирования.

  3. Передача рассчитанных в mdlInitializeSizes матриц выполняется с помощью глобальных переменных. Для этого объявления вида: global A B C; выполнены в теле S-функции, методе mdlInitializeSizes (где выполняется расчет этих матриц), а также методах mdlDerivatives и mdlOutputs (где эти матрицы используются для расчетов).

  4. Поскольку в уравнения пространства-состояния матрица D отсутствует (входные переменные не участвуют в формировании выходных переменных), то параметр sizes.DirFeedthrough в методе mdlInitializeSizes задан равным нулю.

Ниже приводится текст S-функции dpt_sfunc_1 (файл dpt_sfunc_1.m):

function [sys,x0,str,ts] = dpt_sfunc_1(t,x,u,flag,L,R,J,Cm,Cw,Fi)

% DPT_SFUNC_1 Пример S-функции для моделирования двигателя постоянного тока

% независимого возбуждения.

%

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

% пространства-состояния:

% x' = Ax + Bu

% y = Cx + Du

%

% Copyright 2002, Chernykh ILya

% $Revision: 1.8

% Автор: Черных И.В.

%

% Параметры S-функции, передаваемые через окно диалога блока S-function:

%

% L - Индуктивность цепи якоря

% R - Активное сопротивление цепи якоря

% J - Момент инерции

% Cm - Коэффициент связи между моментом и током

% Cw - Коэффициент связи между потоком и скоростью вращения вала

% Fi - Поток, создаваемый обмоткой возбуждения

%

global A B C; % Объявление глобальными переменных, необходимых для

% расчетов внутри функций mdlDerivatives и mdlOutputs .

% Сами матрицы расчитываются в методе mdlInitializeSizes .
switch flag, % В зависимости от значения переменной flag происходит

% вызов того или иного метода:
%===============%

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

%===============%

case 0,

[sys,x0,str,ts]=mdlInitializeSizes(L,R,J,Cm,Cw,Fi);

%====================%

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

%====================%

case 1,

sys=mdlDerivatives(t,x,u);

%===========================================%

% Расчет значений вектора выходных сигналов %

%===========================================%

case 3,

sys=mdlOutputs(t,x,u);

%=========================================%

% Неиcпользуемые значения переменной flag %

%=========================================%

case { 2, 4, 9 },

sys = [];

%======================================%

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

%======================================%

otherwise

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

% Окончание dpt_sfunc_1

%===============================================================%

% mdlInitializeSizes %

% Функция инициализации %

% Расчет начальных условий, значений вектора шагов модельного %

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

%===============================================================%
function [sys,x0,str,ts]=mdlInitializeSizes(L,R,J,Cm,Cw,Fi)

sizes = simsizes;
sizes.NumContStates = 2; % Число непрерывных переменных состояния

% В данном случае этот параметр равен 2

% (ток якоря и скорость вращения вала).
sizes.NumDiscStates = 0; % Число дискретных переменных состояния

% В данном случае этот параметр равен 0,

% поскольку модель непрерывная.
sizes.NumOutputs = 2; % Число выходных переменных (размерность выходного

% вектора). В данном случае этот параметр равен 2

% (скорость вращения и момент на валу).
sizes.NumInputs = 2; % Число входных переменных (размерность входного

% вектора). В данном случае этот параметр равен 2

% (напряжение на обмотке якоря и момент

% сопротивления).
sizes.DirFeedthrough = 0; % Прямой проход. Значение параметра равно нулю,

% поскольку матрица обхода D - отсутствует (входные

% переменные не участвуют в формировании выходных

% переменных).
sizes.NumSampleTimes = 1; % Размерность вектора модельного времени.
sys = simsizes(sizes);
x0 = zeros(2,1); % Задание вектора начальных значений переменных

% состояния. Начальные условия нулевые.
str = []; % Зарезервированный параметр
ts = [0 0]; % Матрица из двух колонок, задающая шаг модельного

% времени и смещение.
% Далее в функцию mdlInitializeSizes добавлены операторы для

% вычисления матриц A, B и C уравнений пространства состояния

% модели двигателя постоянного тока
global A B C; % Объявление глобальными переменных, необходимых для

% расчетов внутри функций mdlDerivatives и mdlOutputs.
% Расчет матриц А,В и С:

%

A=[-R/L -Cw*Fi/L

Cm*Fi/J 0 ];

%

B=[1/L 0

0 -1/J];

%

C=[Cm*Fi 0

0 1];

% Окончание mdlInitializeSizes
%========================================================================%

% mdlDerivatives %

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

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

%========================================================================%
function sys=mdlDerivatives(t,x,u)

%

global A B; % Объявление глобальными переменных, необходимых для

% расчетов внутри метода.

sys = A*x + B*u;
% Окончание mdlDerivatives
%========================================================%

% mdlOutputs %

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

%========================================================%
function sys=mdlOutputs(t,x,u)
global C; % Объявление глобальными переменных, необходимых для

% расчетов внутри метода.

sys = C*x;
% Окончание mdlOutputs

На рис.16.10 показаны модели двигателя постоянного тока на базе S-функции и с использованием стандартных блоков. Результаты расчета для обеих моделей идентичны. Окно диалога блока S-function изображено на рис. 16.11.



Рис. 16.10 Модели ДПТ НВ






Рис. 16.11 Окно диалога блока S-function

[Скачать пример]

16.8. Создание S-функций на языке C с помощью S-Function Builder

Инструментарий Simulink предоставляет пользователю два способа создания S-функций на языке C: с помощью автоматического построителя S-Function Builder и вручную, с использованием шаблона (аналогично созданию S-функций на языке MATLAB). И хотя наибольшими возможностями обладает именно второй способ, первый способ прост и наименее трудоемок, и, поэтому именно с помощью S-Function Builder пользователь может легко и быстро создать нужную ему S-функцию. При этом как во втором, так и в первом случаях S-функция будет создана в виде исполняемого dll-файла, что обеспечивает повышенное быстродействие этой функции.

Создание S-функции рассмотрим на примере двигателя постоянного тока независимого возбуждения. Его математическое описание дано в п. 16.7.6.1. Поскольку в стандарте языка C отсутствуют матричные операции, то уравнения (9) - (12) перепишем в обычной форме:



(15)



(16)



(17)



(18)

Значения элементов матриц даны в п. 16.7.6.1.

S-Function Builder оформлен в виде обычного блока Simulink и находится в библиотеке Function&Tables (функции и таблицы). Пиктограмма блока показана на рис.16.12.


Рис. 16.12 Пиктограмма блока S-Function Builder

Двойной щелчок на пиктограмме открывает окно S - Function Builder . Окно S - Function Builder (см. рис. 16.13) содержит панель параметров ( Parameters), в которой находится графа для ввода имени S -функции ( S - function name ) и графа для ввода начальных значений параметров, передаваемых через окно диалога блока S - function ( S - function parameters ). Также на этой панели находится кнопка Build, предназначенная для запуска процесса компиляции S -функции . В нижней части окна S - Function Builder находятся кнопки Help (вызов справки) и Close / Cancel (закрыть окно).

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

и фрагментов ее кода:

1. Initialization - Инициализация. На вкладке Initialization задаются следующие свойства S -функции:

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

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

  • Number of parameters - Количество параметров, передаваемых в S-функцию через окно диалога блока.

  • Sample time - Шаг модельного времени. Может принимать значения (из списка): Inherited - наследуемый, Continuous - непрерывный, Discrete - дискретный.

  • Discrete sample time value - Шаг модельного времени для дискретной системы. Параметр доступен для ввода значения, если выбран дискретный шаг расчета.

  • Number of discrete states - Число дискретных переменных состояния.

  • Discrete states IC - Начальные значения дискретных переменных состояния. Значения вводятся через запятую.

  • Number of continuous states - Число непрерывных переменных состояния.

  • Continuous states IC - Начальные значения непрерывных переменных состояния. Значения вводятся через запятую.

Окно S-Function Builder с открытой вкладкой Ininialization показано на рис.16.13. Для рассматриваемого примера число входных переменных равно двум (напряжение на обмотке якоря и момент сопротивления). Число выходных переменных равно двум (момент и скорость). Количество переменных состояния также равно двум (ток якоря и скорость). Число параметров S-функции, передаваемых через окно диалога равно 6 (см. п. 16.7.6.2), шаг модельного времени - наследуемый, число дискретных переменных состояния - 0, начальные значения дискретных и непрерывных переменных состояния нулевые.


Рис. 16.13 Окно S-Function Builder (вкладка Ininialization)

2. Libraries - Библиотеки. На вкладке имеется три окна для ввода фрагментов С-кода:

  • Library/Object/Source files - Имена подключаемых библиотечных (*. lib) и объектных (*. obj ) файлов. Указанные файлы должны находиться в текущей рабочей папке, либо следует полностью указать путь к этим файлам. Имена файлов указываются по одному в каждой строке.

  • Includes - Директивы для подключения заголовочных (*. h ) и обычных (*.с, *.с pp ) файлов. Например:
    # include
    # include "myutils.c" и т.п.
    В данном окне следует записать файлы, содержащие функции пользователя, которые будут использоваться в проекте.

  • External Function Declarations - Объявления внешних функций, если они отсутствуют в заголовочных или иных подключаемых файлах. Например :
    extern double func(double a);

Окно S - Function Builder с открытой вкладкой Libraries показано на рис. 16.14.


Рис. 16.14 Окно S-Function Builder ( вкладка Libraries)

3. Outputs - Выходы. Вкладка содержит текстовое окно, предназначенное для ввода выражений расчета выходных переменных. В расчетных выражениях можно использовать следующие переменные (не объявляя их специально):

  • u 0[0] , u 0[1] , u 0[2] … u 1[0] , u 1[1] , u 1[2]… и т.д. - Входные сигналы блока S - function . Входные сигналы должны быть действительными и иметь тип double .

  • y [0] , y [1] , y [2] и т.д. - Выходные сигналы блока S - function . Выходные сигналы должны быть действительными и иметь тип double .

  • param 1[0] , param 2[0] , param 3[0] и т.д. - Параметры блока S - function , передаваемые через окно диалога. Параметры быть действительными и иметь тип double .

  • p _ width 0, p _ width 1, p _ width 2 - и т.д. Переменные целого типа, значения которых равны размерности нулевого, первого, второго и т.д. параметров блока S- function , передаваемых через окно диалога.

  • u _ width - Фактическая размерность входного сигнала (переменная целого типа). Переменная доступна, если размерность входного сигнала на вкладке Initialization задана равной -1 (минус один). Если входной сигнал матрица - значением переменной u _ width будет вектор из двух элементов.

  • y _ width - Фактическая размерность выходного сигнала (переменная целого типа). Переменная доступна, если размерность выходного сигнала на вкладке Initialization задана равной -1 (минус один). Если выходной сигнал матрица - значением переменной y _ width будет вектор из двух элементов.

  • xC [0], xC [1], xC [2] и т.д. - Непрерывные переменные состояния. Тип переменных - double .

  • xD [0], xD [1], xD [2] и т.д. - Дискретные переменные состояния. Тип переменных - double .

На вкладке имеется флажок для установки параметра Inputs are needed in the output function ( direct feedthrough ) - использование входных сигналов для расчета выходных (прямой проход).

Текст автоматически генерируемого метода mdl Outputs , приведен ниже:

void sfun_Outputs_wrapper(const real_T *u,

real_T *y,

const real_T *xD, /* optional */

const real_T *xC, /* optional */

const real_T *param0, /* optional */

int_T p_width0 /* optional */

real_T *param1 /* optional */

int_t p_width1 /* optional */

int_T y_width, /* optional */

int_T u_width) /* optional */

{

/* Место для ввода расчетного кода */

} ,

где sfun - имя S -функции.

Окно S - Function Builder с открытой вкладкой Output s показано на рис. 16.15.


Рис. 16.15 Окно S-Function Builder (вкладка Outputs)

В примере на рис. 16.15 в первой строке объявляются переменные - параметры электродвигателя, и этим переменным присваиваются значения параметров передаваемых в S -функцию через окно диалога. Во второй строке объявляются и вычисляются переменные COO и С11, входящие в уравнения (17), (18). В третьей и четвертой строках записаны выражения для расчета выходных сигналов в соответствии с уравнениями (17) и (18). Параметр Inputs are needed in the output function ( direct feedthrough ) не установлен, поскольку в выражениях для расчета выходных сигналов отсутствуют входные. После генерации С-кода в тексте S-функции появится код, введенный в окне вкладки Outputs .

4. Continuous Derivatives - Производные непрерывных переменных состояния. Вкладка содержит текстовое окно, предназначенное для ввода выражений расчета производных непрерывных переменных состояния. В расчетных выражениях можно использовать те же переменные, что и на вкладке Outputs , за исключением дискретных переменных состояния xD . Сами производные обозначаются как dx [0], dx [1], dx [2] и т.п.

Текст автоматически генерируемого метода mdl Derivatives , приведен ниже:
1   ...   18   19   20   21   22   23   24   25   26


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