В этом примере показано, как линеаризовать модель Simulink®, которая содержит задержки.
Для получения дополнительной информации об управлении линеаризовавшими моделями с задержками смотрите Задержки Определения и Анализ Систем управления с Задержками.
Можно линеаризовать модель Simulink с блоками задержки непрерывного времени, такими как Транспортная Задержка, Переменная Транспортная Задержка и Переменная Задержка с помощью одной из следующих опций.
Используйте приближения Padé задержек, чтобы получить рациональную линейную систему через линеаризацию. Эта опция является методом по умолчанию, используемым программным обеспечением Simulink Control Design™.
Вычислите линеаризацию, где задержка точно представлена. Используйте эту опцию, когда вам будут нужны точная симуляция и частотные характеристики из линеаризовавшей модели и при оценке точности приближения Padé.
Откройте модель скорости вращения двигателя, используемую в этом примере.
model = 'scdspeed';
open_system(model)
Индукция к подсистеме Задержки Диапазона Степени содержит блок Variable Transport Delay, названный dM/dt. Задайте путь к этому блоку.
DelayBlock = 'scdspeed/Induction to Power Stroke Delay/dM//dt delay';
Чтобы вычислить линеаризацию с помощью приближения первого порядка, установите порядок приближения Padé к 1. Для блока Variable Transport Delay, свойства Pade Order к 1
.
В качестве альтернативы в командной строке, введите следующий код.
set_param(DelayBlock,'PadeOrder','1');
Задайте угол дросселя как вход линеаризации и скорость вращения двигателя как линеаризация выход.
io(1) = linio('scdspeed/throttle (degrees)',1,'input'); io(2) = linio('scdspeed/rad//s to rpm',1,'output');
Линеаризуйте модель.
sysOrder1 = linearize(model,io);
Чтобы линеаризовать модель с помощью приближения второго порядка, установите порядок Padé к 2
.
set_param(DelayBlock,'PadeOrder','2'); sysOrder2 = linearize(model,io);
Чтобы вычислить линейную модель с точным представлением задержки, создайте линеаризацию, опции возражают и включают UseExactDelayModel
опция.
opt = linearizeOptions;
opt.UseExactDelayModel = 'on';
Линеаризуйте модель с помощью заданных опций линеаризации.
sysExactDiscrete = linearize(model,io,opt);
Сравните Предвещать ответ моделей приближения Padé и точной модели линеаризации.
p = bodeoptions('cstprefs'); p.Grid = 'on'; p.PhaseMatching = 'on'; p.XLimMode = {'Manual'}; p.XLim = {[0.1 1000]}; bode(sysOrder1,sysOrder2,sysExactDiscrete,p); legend('1st Order','2nd Order','Exact','Location','SouthWest')
В случае приближения первого порядка фаза начинает отличать приблизительно 50 рад/с и отличает приблизительно 100 рад/с.
Закройте модель Simulink.
bdclose(model)
Когда линеаризация модели с дискретными блоками задержки, такими как (Целочисленная) Задержка и блоки Unit Delay, использует точную опцию задержки с учетом задержек, не добавляя состояния в динамику модели. Явным образом составление этих задержек улучшает производительность симуляции для систем со многими дискретными задержками, потому что существует меньше состояний в вашей модели.
Откройте модель Simulink дискретной системы, которая содержит блок Delay с 20 состояниями задержки.
model = 'scdintegerdelay';
open_system(model)
По умолчанию линеаризация включает все состояния, свернутые в линейную модель. Установите сигналы ввода и вывода линеаризации и линеаризуйте модель.
io(1) = linio('scdintegerdelay/Step',1,'input'); io(2) = linio('scdintegerdelay/Discrete Filter',1,'output'); sysDefault = linearize(model,io);
Просмотрите размер модели. Это имеет 21 состояние (1 - Дискретный Фильтр, 20 - Целочисленная Задержка).
size(sysDefault)
State-space model with 1 outputs, 1 inputs, and 21 states.
Линеаризуйте модель с помощью точного представления задержки.
opt = linearizeOptions;
opt.UseExactDelayModel = 'on';
sysExactDiscrete = linearize(model,io,opt);
Просмотрите получившийся размер модели. Это имеет 1 состояние. Задержки составляются внутренне в линеаризовавшей модели.
size(sysExactDiscrete)
State-space model with 1 outputs, 1 inputs, and 1 states.
Сравните эффективность моделей с помощью переходного процесса. Модели производят тот же ответ.
step(sysDefault,sysExactDiscrete) legend('Default','Exact','Location','SouthEast')
Закройте модель Simulink.
bdclose(model)