Линеаризация моделей Simulink с неопределенностью

Этот пример показывает, как вычислить неопределенные линеаризации с помощью Robust Control Toolbox™ и Simulink ® Control Design™. Существуют два удобных рабочих процессов в зависимости от того, как используется Simulink. Получившиеся неопределенные линеаризации имеют форму структуры данных пространства неопределенных состояний (USS) в Robust Control Toolbox, которая может использоваться функциями анализа в Robust Control Toolbox.

Введение

Графический пользовательский интерфейс в Simulink является естественным окружением для моделирования и симуляции систем управления. Используя возможности линеаризации в Simulink Control Design и элементы неопределенности в Robust Control Toolbox, можно задать неопределенность на конкретных блоках в модели Simulink, а затем извлечь неопределенную линеаризированную модель.

В этом примере эффективности ПИД-регулятора исследуется в присутствии неопределенности. Существует два подхода к вычислению линеаризации неопределенных систем. Каждый из подходов разработан для удовлетворения различных потребностей при работе в Simulink. Эти подходы обобщены в следующих разделах.

Подход № 1: Использование блоков пространства неопределенных состояний

Этот первый подход наиболее применим, когда вы уже используете блоки Secretain State Space как часть процесса разработки системы управления в Simulink. Как показано в примере Анализ робастности в Simulink, блок Пространства Неопределенного Состояния в Robust Control Toolbox позволяет вам задать неопределенность в модели Simulink.

В следующем примере динамика как объекта, так и датчика неопределенна. Неопределенность в динамике объектов включает:

  • Реальный полюс unc_pole местоположение которого варьируется от -10 до -4

  • Немоделированные input_unc динамики (25% относительной неопределенности при низкой частоте, растущей до 100% неопределенности при 130 рад/с).

unc_pole = ureal('unc_pole',-5,'Range',[-10 -4]);
plant = ss(unc_pole,5,1,0);
wt = makeweight(0.25,130,2.5);
input_unc = ultidyn('input_unc',[1 1]);

Неопределенная динамика датчика определяется как

sensor_pole = ureal('sensor_pole',-20,'Range',[-30 -10]);
sensor = tf(1,[1/(-sensor_pole) 1]);

The rct_ulinearize_uss модель использует блоки Пространства Неопределенных Состояний (выделены синим цветом), чтобы смоделировать эту неопределенность:

mdl = 'rct_ulinearize_uss';
open_system('rct_ulinearize_uss')

Эта модель Simulink готова к вычислению неопределенной линеаризации. Линейная модель имеет вход в блоке ссылки rct_ulinearize_uss/Reference и выход объекта rct_ulinearize_uss/Uncertain Plant. Эти входные и выходные точки линеаризации заданы с помощью Simulink Control Design. Точки линеаризации находят с помощью следующей команды:

io = getlinio(mdl);

Неопределенная линеаризация вычисляется с помощью команды ulinearize. Эта команда возвращает объект пространства неопределенных состояний (USS), который зависит от неопределенных переменных input_unc, sensor_pole, и unc_pole:

sys_ulinearize = ulinearize(mdl,io)
sys_ulinearize =

  Uncertain continuous-time state-space model with 1 outputs, 1 inputs, 5 states.
  The model uncertainty consists of the following blocks:
    input_unc: Uncertain 1x1 LTI, peak gain = 1, 1 occurrences
    sensor_pole: Uncertain real, nominal = -20, range = [-30,-10], 1 occurrences
    unc_pole: Uncertain real, nominal = -5, range = [-10,-4], 1 occurrences

Type "sys_ulinearize.NominalValue" to see the nominal value, "get(sys_ulinearize)" to see all properties, and "sys_ulinearize.Uncertainty" to interact with the uncertain elements.

На этом первый подход завершается. Закройте модель Simulink:

bdclose(mdl)

Подход № 2: Использование встроенных блоков Simulink

Второй подход использует пользовательский интерфейс Simulink Control Design для спецификации линеаризации блоков, чтобы задать неопределенность для линеаризации. Функция спецификации линеаризации блоков в Simulink Control Design позволяет заменить любой блок Simulink либо усилением, либо объектом LTI, либо неопределенной переменной Robust Control Toolbox. Этот подход лучше всего подходит при работе с моделями, которые не используют блок Secretain State Space. Основным преимуществом этого подхода является то, что спецификация неопределенности не влияет ни на одну другую операцию в Simulink, такую как симуляция.

Измененная версия исходной модели, использующая только встроенные блоки Simulink, показана ниже.

mdl = 'rct_ulinearize_builtin';
open_system(mdl);

Щелчком правой кнопкой мыши по rct_ulinearize_builtin/Plant блок и выбор элемента меню Линейный анализ - > Задать линеаризацию, можно задать, к какому значению должен линеаризироваться этот блок. Если вы вводите выражение plant*(1+wt*input_unc) в диалоговом окне, показанном ниже, блок «Plant» линеаризируется с соответствующей моделью пространства неопределенных состояний (объект USS).

Точно так же можно назначить неопределенную модель sensor как линеаризация для блока rct_ulinearize_builtin/Sensor Gain.

Теперь можно линеаризировать rct_ulinearize_builtin использование команды Simulink Control Design linearize:

io = getlinio(mdl);
sys_linearize = linearize(mdl,io)
sys_linearize =

  Uncertain continuous-time state-space model with 1 outputs, 1 inputs, 5 states.
  The model uncertainty consists of the following blocks:
    input_unc: Uncertain 1x1 LTI, peak gain = 1, 1 occurrences
    sensor_pole: Uncertain real, nominal = -20, range = [-30,-10], 1 occurrences
    unc_pole: Uncertain real, nominal = -5, range = [-10,-4], 1 occurrences

Type "sys_linearize.NominalValue" to see the nominal value, "get(sys_linearize)" to see all properties, and "sys_linearize.Uncertainty" to interact with the uncertain elements.

Получившаяся модель является моделью неопределенного пространства состояний (USS), эквивалентной неопределенной линеаризации, вычисленной с помощью первого подхода.

Использование неопределенного результата линеаризации

Оба подхода линеаризации генерируют объект с неопределенным пространством состояний (USS), который можно анализировать стандартными командами Robust Control Toolbox. В этом примере эта модель USS используется, чтобы найти худший коэффициент усиления линеаризированной обратной связи.

[maxg,worstun] = wcgain(sys_linearize);

Получившиеся значения в худшем случае для неопределенных переменных могут затем использоваться, чтобы сравнить с номинальным ответом. Это сравнение показывает, что эффективность ПИД не является надежной для объекта и неопределенности датчика.

sys_worst = usubs(sys_linearize,worstun);
step(sys_linearize.NominalValue,sys_worst)
legend('Nominal','Worst-case');

На этом пример завершается. Закройте модель Simulink:

bdclose(mdl);

См. также

Блоки

Функции

Похожие темы