exponenta event banner

Линеаризация моделей с задержками

В этом примере показано, как линеаризовать модель Simulink с задержками.

Линеаризация моделей с непрерывными задержками

Можно линеаризовать модель Simulink с непрерывными блоками временных задержек, такими как Транспортная задержка (Transport Delay), Переменная транспортная задержка (Variable Transport Delay) и Переменная временная задержка (Variable Time Delay), используя одну из следующих опций.

  • Используйте аппроксимации Паде задержек, чтобы получить рациональную линейную систему через линеаризации.

  • Вычислите линеаризацию, где задержка представлена точно. Эта опция используется, когда требуется точное моделирование и частотные характеристики линеаризованной модели, а также при оценке точности аппроксимации Pade.

По умолчанию модуль Simulink Control Design использует аппроксимации Pade блоков задержки в модели Simulink.

Чтобы открыть модель частоты вращения двигателя, используемую в этом примере, введите

model = 'scdspeed';
open_system(model);

Модель частоты вращения двигателя содержит блок переменной задержки передачи с именем dM/dt в подсистеме «Задержка индукции до хода мощности». Для удобства можно сохранить путь к блоку в переменной MATLAB путем ввода

DelayBlock = 'scdspeed/Induction to  Power Stroke Delay/dM//dt delay';

Чтобы вычислить линеаризацию с использованием аппроксимации первого порядка, используйте одну из следующих методик, чтобы установить порядок аппроксимации Паде равным 1:

  • В диалоговом окне «Блок переменной задержки переноса» введите 1 в поле «Порядок прокладки» (для линеаризации).

  • В командной строке введите следующую команду:

set_param(DelayBlock,'PadeOrder','1');

Затем задайте угол ввода/вывода линеаризации для дроссельной заслонки в качестве входного значения и частоту вращения двигателя в качестве выходного значения путем выполнения:

io(1) = linio('scdspeed/throttle (degrees)',1,'input');
io(2) = linio('scdspeed/rad//s to rpm',1,'output');

Вычислите линеаризацию с помощью следующей команды линеаризации:

sys_1st_order_approx = linearize(model,io);

Можно вычислить линеаризацию с помощью аппроксимации второго порядка, установив порядок Pade равным 2:

set_param(DelayBlock,'PadeOrder','2');
sys_2nd_order_approx = linearize(model,io);

Чтобы вычислить линейную модель с точным представлением задержки, задайте свойству UseExactDelayModel в объекте linoptions значение on:

opt = linearizeOptions;
opt.UseExactDelayModel = 'on';

Линеаризация модели с помощью следующей команды линеаризации:

sys_exact = linearize(model,io,opt);

Сравните отклик Бода модели аппроксимации Паде и точной модели линеаризации, выполнив:

p = bodeoptions('cstprefs');
p.Grid = 'on';
p.PhaseMatching = 'on';
p.XLimMode = {'Manual'};
p.XLim = {[0.1 1000]};
f = figure;
bode(sys_1st_order_approx,sys_2nd_order_approx,sys_exact,p);
h = legend('sys_1st_order_approx','sys_2nd_order_approx','sys_exact',...
            'Location','SouthWest');
h.Interpreter = 'none';

В случае аппроксимации первого порядка фаза начинает расходиться около 50 рад/с и расходиться около 100 рад/с.

Закройте модель Simulink.

bdclose(model)

Линеаризация моделей с дискретными задержками

При линеаризации модели с дискретными блоками задержки, такими как (целочисленная) задержка и единичная задержка, используйте опцию точной задержки, чтобы учесть задержки без добавления состояний к динамике модели. Явный учет этих задержек повышает производительность моделирования для систем со многими дискретными задержками, поскольку в модели меньше состояний.

Чтобы открыть модель Simulink дискретной системы с блоком задержки с состоянием задержки 20, используемым в этом примере, выполните следующее.

model = 'scdintegerdelay';
open_system(model)

По умолчанию линеаризация включает все состояния, свернутые в линейную модель. Установите ввод/вывод линеаризации и линеаризуйте модель следующим образом:

io(1) = linio('scdintegerdelay/Step',1,'input');
io(2) = linio('scdintegerdelay/Discrete Filter',1,'output');
sys_default = linearize(model,io);

Интегрируйте результирующую модель, чтобы увидеть, что она имеет 21 состояние (1 - дискретный фильтр, 20 - целочисленная задержка).

size(sys_default)
State-space model with 1 outputs, 1 inputs, and 21 states.

Эту модель можно линеаризовать с помощью свойства UseExactDelayModel следующим образом:

opt = linearizeOptions;
opt.UseExactDelayModel = 'on';
sys_exact = linearize(model,io,opt);

Опрос новой результирующей модели показывает, что она имеет 1 состояние и задержки учитываются внутри линеаризованной модели.

size(sys_exact)
State-space model with 1 outputs, 1 inputs, and 1 states.

Выполните моделирование реакции шага для обеих линеаризованных моделей, чтобы убедиться, что они идентичны, выполнив следующие команды.

step(sys_default,sys_exact);
h = legend('sys_default','sys_exact',...
            'Location','SouthEast');
h.Interpreter = 'none';

Закройте модель Simulink и очистите фигуры.

bdclose(model)
close(f)

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

Дополнительные сведения о манипулировании линеаризованными моделями с задержками см. в разделах Определение временных задержек и Анализ систем управления с задержками.

См. также

|

Связанные темы