slTuner
ИнтерфейсДля настройки системы управления с запланированным усилением необходимо сделать Simulink® модель линеаризируется с массивом моделей LTI, соответствующих различным условиям работы, которые являются вашими проектными точками. Таким образом, после того, как вы получите семейство линейных моделей объекта управления, как описано в Моделях объекта управления для настройки Контроллер, вы должны связать его с slTuner
интерфейс с вашей моделью Simulink. Для этого вы используете замену блоков, чтобы вызвать slTuner
замените подсистему объекта модели массивом линейных моделей. Этот процесс создает семейство настраиваемых моделей замкнутой системы в slTuner
интерфейс.
Предположим, что у вас есть массив линейных моделей объекта управления, полученных в каждой рабочей точке в сетке проекта. В наиболее простом случае выполняются следующие условия:
Линейные модели в массиве точно соответствуют подсистеме объекта в вашей модели.
Кроме элементов, которые вы хотите настроить, больше ничего в модели не меняется с переменными планирования.
Для модели Simulink mdl
содержащая подсистему объекта G
и линейный массив моделей Garr
который представляет объект в сетке проекта точек, следующие команды создают slTuner
интерфейс:
BlockSubs = struct('Name','mdl/G','Value',Garr); st0 = slTuner('mdl',{'Kp','Ki'},BlockSubs);
st0
содержит семейство линейных моделей с обратной связью, каждая из которых линеаризируется в точке проекта и каждая с соответствующим линейным объектом, вставленным для G
. Если 'Kp'
и 'Ki'
- спецификации усиления, которые вы хотите настроить (такие как интерполяционные таблицы), можно параметризовать их настраиваемыми поверхностями усиления, как описано в разделе «Параметризация расписаний усиления» и настроить их.
В других случаях линеаризированный массив моделей объекта управления, которые вы имеете, может не соответствовать точно подсистеме объекта в вашей модели Simulink. Или, возможно, вам потребуется заменить другие части модели, которые варьируются от рабочих условий. В таких случаях необходима большая осторожность при построении правильной подстановки блоков. В следующих разделах описывается несколько таких случаев.
Например, рассмотрим модель следующего рисунка.
Эта модель имеет внутренний цикл с пропорционально-только запланированным контроллером усиления. Контроллер представлен интерполяционной таблицей Kp_in
и блок продукта prod
. Внешний контур включает ПИ-контроллер с запланированными по усилению пропорциональными и интегральными коэффициентами, представленными интерполяционными таблицами Kp
и Ki
. Все графики усиления зависят от одной и той же переменной планирования alpha
.
Предположим, вы хотите настроить график усиления внутреннего контура Kp_in
при открытом внешнем контуре. С этой целью вы получаете массив линейных моделей G_in
от входного u
к выходам {q,alpha}
. Этот массив моделей имеет неправильные размерности ввода-вывода, чтобы использовать в качестве замены блоков для G
. Поэтому необходимо «дополнить» G_in
с дополнительной выходной размерностью.
Garr = [0; G_in]; BlockSubs1 = struct('Name','mdl/G','Value',Garr);
В сложение можно удалить весь эффект внешнего контура, заменив блок Varying PID Controller на систему, которая линеаризируется до нуля при всех рабочих условиях. Поскольку этот блок имеет три входа, замените его на 3-входную, 1-выходную нулевую систему.
BlockSubs2 = struct('Name','mdl/Varying PID Controller','Value',ss([0 0 0]));
С этими заменами блоков следующие команды создают slTuner
интерфейс, который можно использовать для настройки графика усиления внутреннего контура.
st0 = slTuner('mdl','Kp_in'); st0.BlockSubstitutions = [BlockSubs1; BlockSubs2];
Смотрите пример Управление Угловой Частотой в HL-20 Autopilot для другого случая, в котором несколько элементов, отличных от самого объекта, заменяются заменой блоков.
Затем предположим, что вы уже настроили расписание усиления внутреннего цикла и получили массив Kp_in_tuned
, значений Kp_in
которые соответствуют каждой проектной точке (каждому значению alpha
на котором вы линеаризировали объект). Предположим также, что у вас есть новый Garr
что является полным объектом от u
на {y,q,alpha}
линеаризируется с закрытым настроенным внутренним циклом. Чтобы настроить графики усиления внешнего контура, необходимо заменить блок продукта массивом Kp_in_tuned
. Важно отметить, что вы заменяете точку впрыска, блок продукта prod
, а не интерполяционная таблица Kp_in
. Замена блока продукта эффективно преобразует его в меняющийся коэффициент усиления. Кроме того, вы должны обнулить первый вход блока продукта, чтобы удалить эффект интерполяционной таблицы Kp_in
.
prodsub = [0 ss(Kp_in_tuned)]; BlockSubs1 = struct('Name','mdl/prod','Value',prodsub); BlockSubs2 = struct('Name','mdl/G','Value',Garr); st0 = slTuner('mdl',{'Kp','Ki'}); st0.BlockSubstitutions = [BlockSubs1; BlockSubs2];
Следующий рисунок фрагмента модели подсвечивает другой сценарий, в котором вам может потребоваться заменить блоки, которые варьируются на переменную планирования. Предположим, что переменная планирования alpha
, и где-то в вашей модели сигнал u
получает разделенный на alpha
.
Чтобы гарантировать, что slTuner
правильно линеаризирует этот блок при всех значениях alpha
в проект сетке необходимо заменить его массивом линейных моделей, по одной на каждую alpha
значение. Этот блок эквивалентен отправке u
через коэффициент усиления 1/ alpha
:
Поэтому вы можете использовать следующую замену блоков в своем slTuner
интерфейс, где alphagrid
является массивом alpha
значения в ваших проектных точках.
divsub = ss[(1/alphagrid), 0] BlockSubs = struct('Name','mdl/div-by-alpha','Value',divsub); st0.BlockSubstitutions = [st0.BlockSubstitutions; BlockSubs]
Каждая запись в массиве моделей divsub
разделяет его первый вход на соответствующую запись в alphagrid
, и обнуляет его второй вход. Таким образом, это замещение дает желаемый результат y = u/alpha
.
Иногда имеющийся у вас линейный массив моделей не является точной заменой части модели, которую вы хотите заменить. Например, рассмотрим следующий рисунок подсистемы с тремя входами и одним выходом.
Предположим, что у вас есть массив линеаризированных моделей Garr
соответствующий G
. Можно сконфигурировать подстановку блоков для всей подсистемы G_full
путем создания модели замещения, которая воспроизводит эффект усреднения трёх входов следующим образом:
Gsub = Garr*[1/3 1/3 1/3]; BlockSubs = struct('Name','mdl/G_full','Value',Gsub);
Иногда можно разрешить несоответствие в размерностях ввода-вывода путем заполнения входных параметров или выходов нулями, как показано на Нескольких Заменах Блоков. В других случаях вам может потребоваться выполнить другую арифметику модели, используя такие команды, как series
, feedback
, или connect
создать подходящую замену.
Если объект в вашей модели Simulink представлен LPV System , вы все еще должны выполнить замену блоков при создании slTuner
интерфейс для настройки графиков усиления. slTuner
не может считать линейный массив моделей непосредственно из блока LPV System. Однако можно использовать линейный массив моделей, заданный в блоке для подстановки блоков, если он соответствует проектным точкам, для которых вы настраиваете. Например, предположим, что ваш объект является блоком LPV System, LPVPlant
, который задает массив моделей PlantArray
. Можно сконфигурировать замену блоков на LPVPlant
следующим образом:
BlockSubs = struct('Name','mdl/LPVPlant','Value',PlantArray);
slTuner
(Simulink Control Design)