Этот пример показывает, как увеличить линеаризацию блока с дополнительной динамикой с временной задержкой, с помощью функции спецификации линеаризации блока.
Откройте модель Simulink®.
mdl = 'scdFcnCall';
open_system(mdl)
Эта модель включает непрерывный объект времени, Plant
, и контроллер дискретного времени, Controller
. Блок D/A
дискретизирует объект вывод со временем выборки 0,1 с. Блок External Scheduler
инициировал контроллер, чтобы выполниться с тем же периодом, 0,1 с. Однако триггер имеет смещение 0,05 с относительно дискретизированного объекта вывод. По этой причине контроллер не обрабатывает изменение в ссылочном сигнале до 0,05 с после того, как изменение произойдет. Это смещение вводит задержку 0,05 с в модель.
(Необязательно) Линеаризуйте модель с обратной связью в образцовой рабочей точке, не задавая линеаризацию для блока Controller
.
io = getlinio(mdl); sys_nd = linearize(mdl,io);
Функция getlinio
возвращает точки ввода и вывода линеаризации, которые уже заданы в модели.
(Необязательно) Проверка результат линеаризации по оценке частотной характеристики.
input = frest.Sinestream(sys_nd); sysest = frestimate(mdl,io,input); bode(sys_nd,'g',sysest,'r*',{input.Frequency(1),input.Frequency(end)}) legend('Linearization without delay',... 'Frequency Response Estimation','Location','SouthWest')
Точная линеаризация не составляет задержку, введенную смещением выполнения контроллера. Несоответствие заканчивается между линеаризовавшей моделью и предполагаемой моделью, особенно на более высоких частотах.
Запишите функцию, чтобы задать линеаризацию блока Controller
, который включает задержку.
Следующая функция конфигурирования задает линейную систему, которая равняется линеаризации блока по умолчанию, умноженной на задержку. Сохраните эту функцию конфигурирования в местоположение на вашем пути MATLAB®. (В данном примере функция уже сохранена как scdAddDelayFcn.m
.)
function sys = scdAddDelayFcn(BlockData)
sys = BlockData.BlockLinearization*thiran(0.05,0.1);
Вход к функции, BlockData
, является структурой, которую программное обеспечение автоматически создает каждый раз, когда это линеаризует блок. Когда вы задаете функцию конфигурирования линеаризации блока, программное обеспечение автоматически передает BlockData
функции. Поле BlockData.BlockLinearization
содержит текущую линеаризацию блока.
Эта функция конфигурирования аппроксимирует задержку как фильтр thiran
. Фильтр указывает на приближение дискретного времени дробной задержки 0,5 периодов выборки. (0,05 задержки с имеют время выборки 0,1 с).
Задайте функцию конфигурирования scdAddDelayFcn
как линеаризация для блока Controller
.
Щелкните правой кнопкой по блоку Controller
и выберите Linear Analysis > Specify Selected Block Linearization.
Установите флажок Specify block linearization using one of the following. Затем выберите Configuration Function из выпадающего списка.
Введите имя функции scdAddDelayFcn
в текстовом поле. scdAddDelayFcn
не имеет никаких параметров, поэтому оставьте незаполненную таблицу параметров.
Нажмите OK.
Линеаризуйте модель с помощью заданной линеаризации блока.
sys_d = linearize(mdl,io);
Линейная модель sys_d
является линеаризацией модели с обратной связью, которая составляет задержку.
(Необязательно) Сравните линеаризацию, которая включает задержку с предполагаемой частотной характеристикой.
bode(sys_d,'b',sys_nd,'g',sysest,'r*',... {input.Frequency(1),input.Frequency(end)}) legend('Linearization with delay','Linearization without delay',... 'Frequency Response Estimation','Location','SouthWest')
Линейная модель, полученная с заданной линеаризацией блока теперь, составляет задержку. Эта линейная модель является поэтому намного лучшим соответствием к действительной частотной характеристике модели Simulink.