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 входами.
BlockSubs2 = struct('Name','mdl/Varying PID Controller','Value',ss([0 0 0]));
С теми заменами блока следующие команды создают slTuner
интерфейс, который вы можете использовать, чтобы настроить расписание усиления внутреннего цикла.
st0 = slTuner('mdl','Kp_in'); st0.BlockSubstitutions = [BlockSubs1; BlockSubs2];
Смотрите пример Угловое Управление Уровнем в автопилоте HL-20 для другого случая, в котором несколько элементов кроме самого объекта заменяются заменой блока.
Затем предположите, что вы уже настроили расписание усиления внутреннего цикла и получили массив 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);