Этот пример показывает, как линеаризировать модель Simulink с задержками в ней.
Можно линеаризировать модель Simulink с непрерывными блоками задержек времени, такими как Задержка Переноса, Переменная Задержка Переноса и Переменная Задержка Времени с помощью одной из следующих опций:
Используйте Аппроксимации Паде задержек, чтобы получить рациональную линейную систему посредством линеаризации.
Вычислите линеаризацию, где задержка точно представлена. Используйте эту опцию, когда вам нужно точная симуляция и частотные характеристики от линеаризированной модели и при оценке точности аппроксимации Паде.
По умолчанию Simulink Control Design использует аппроксимации Паде блоков задержки в модели Simulink.
Чтобы открыть модель скорости вращения двигателя, используемую в этом примере, введите
model = 'scdspeed';
open_system(model);
Модель скорости вращения двигателя содержит блок Variable Transport Delay с именем dM/dt в подсистеме Induction to Степени Штриха Delay. Для удобства можно хранить путь к блоку в переменном MATLAB путем ввода
DelayBlock = 'scdspeed/Induction to Power Stroke Delay/dM//dt delay';
Чтобы вычислить линеаризацию с помощью приближения первого порядка, используйте один из следующих методов, чтобы задать порядок аппроксимации Паде равным 1:
В диалоговое окно блока Переменная задержка переноса введите 1 в поле Pade Порядка (для линеаризации).
В командной строке введите следующую команду:
set_param(DelayBlock,'PadeOrder','1');
Затем задайте ввод-вывод линеаризации, чтобы дроссельный угол как вход и скорость вращения двигателя как выход при запуске:
io(1) = linio('scdspeed/throttle (degrees)',1,'input'); io(2) = linio('scdspeed/rad//s to rpm',1,'output');
Вычислите линеаризацию с помощью следующей команды linearize:
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';
Линеаризируйте модель с помощью следующей команды linearize:
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)
При линеаризации модели с дискретными блоками задержки, такими как (Целое число) Блоки Задержки и Unit Delay, используйте опцию точной задержки, чтобы учесть задержки, не добавляя состояния в динамику модели. Явный учет этих задержек улучшает эффективность симуляции для систем с многими дискретными задержками, потому что в вашей модели меньше состояний.
Чтобы открыть модель Simulink дискретной системы с блоком Delay с 20 состоянием задержки, используемым в этом примере, запустите следующее.
model = 'scdintegerdelay';
open_system(model)
По умолчанию линеаризация включает все состояния, сложенные в линейную модель. Установите I/Os линеаризации и линеаризируйте модель следующим образом:
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)
Для получения дополнительной информации о манипулировании линеаризированными моделями с задержками, смотрите Определение временных задержек и Анализ систем управления с задержками.