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

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

См. также

Похожие темы