Несколько точек проекта в 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];
Для другого примера, который показывает этот вид замены на ранее настроенную интерполяционную таблицу, смотрите Управление ориентацией в автопилоте HL-20 - Проект SISO.

Следующий рисунок фрагмента модели подсвечивает другой сценарий, в котором вы можете должны быть заменить блоки, которые меняются в зависимости от переменной планирования. Предположим, что переменной планирования является 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 создавать подходящую замену.

Блокируйте замену на блоки LPV

Если объект в вашей модели Simulink представлен LPV System , необходимо все еще выполнить замену блока при создании slTuner интерфейс для настройки расписаний усиления. slTuner не может считать линейный массив моделей непосредственно из блока LPV System. Однако можно использовать линейный массив моделей, заданный в блоке для замены блока, если это соответствует точкам проекта, для которых вы настраиваетесь. Например, предположите, что ваш объект является блоком LPV System, LPVPlant, это задает массив моделей PlantArray. Можно сконфигурировать замену блока на LPVPlant можно следующим образом:

BlockSubs = struct('Name','mdl/LPVPlant','Value',PlantArray);

Смотрите также

Похожие темы