Анализ робастности в Simulink

Этот пример показывает, как использовать блоки Simulink® и функции помощника, обеспеченные Robust Control Toolbox™, чтобы задать и анализировать неопределенные системы в Simulink и как использовать эти инструменты, чтобы выполнить симуляции Монте-Карло неопределенных систем.

Введение

Модель Simulink usim_model состоит из неопределенного объекта в обратной связи с датчиком:

open_system('usim_model')

Объект является моделью первого порядка с двумя источниками неуверенности:

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

  • Несмоделированные движущие силы, которые составляют 25%-ю относительную неуверенность в низкой частоте, повышающейся до 100%-й неуверенности на уровне 130 рад/с.

Путь к обратной связи имеет дешевый датчик, который моделируется фильтром первого порядка на уровне 20 рад/с и неопределенным усилением, располагающимся между 0,1 и 2. Чтобы задать эти неопределенные переменные, ввести

% First-order plant model
unc_pole = ureal('unc_pole',-5,'Range',[-10 -4]);
plant = ss(unc_pole,5,1,1);

% Unmodeled plant dynamics
input_unc = ultidyn('input_unc',[1 1]);
wt = makeweight(0.25,130,2.5);

% Sensor gain
sensor_gain = ureal('sensor_gain',1,'Range',[0.1 2]);

Блоки Simulink, по причине неопределенности моделируя и анализ

Библиотека RCTblocks содержит блоки, чтобы смоделировать и анализировать эффекты неуверенности в Simulink. Чтобы открыть библиотеку, ввести

open('RCTblocks')

Блок Uncertain State Space позволяет вам задать неопределенные линейные системы (объекты USS). usim_model содержит три таких блока, которые подсвечены в синем. Диалоговое окно для блока "Plant" появляется ниже.

В этом диалоговом окне,

  • "Неопределенная системная переменная" параметр задает неопределенную модель объекта управления (модель первого порядка с неопределенным полюсом unc_pole).

  • "Параметр" значения неуверенности задает значения для неопределенных переменных блока (unc_pole в этом случае).

uval является структурой, имена полей которой и значения являются неопределенными именами переменных и значениями, чтобы использовать для симуляции. Можно установить uval на [] использовать номинальную стоимость для неопределенных переменных или отличаться uval, чтобы анализировать, как неуверенность влияет на образцовые ответы.

Блок MultiPlot Graph является удобным способом визуализировать распространение ответа, когда вы отличаетесь неуверенность. Этот блок накладывает результаты симуляции, полученные для каждого значения неуверенности.

Симуляция Монте-Карло неопределенных систем

Чтобы легко управлять значением неуверенности, используемым для симуляции, usim_model использует то же "Значение неуверенности" uval во всех трех блоках Uncertain State Space. Установка uval к [] моделирует ответ с обратной связью для номинальной стоимости unc_pole, input_unc и sensor_gain:

uval = [];   % use nominal value of uncertain variables
sim('usim_model',10);   % simulate response

Чтобы анализировать, как неуверенность влияет на образцовые ответы, можно использовать ufind и команды usample, чтобы сгенерировать случайные значения unc_pole, input_unc и sensor_gain. Сначала используйте ufind, чтобы найти блоки Uncertain State Space в usim_model и составить список всех неопределенных переменных в этих блоках:

[uvars,pathinfo] = ufind('usim_model');
uvars          % uncertain variables
uvars = 

  struct with fields:

      input_unc: [1x1 ultidyn]
    sensor_gain: [1x1 ureal]
       unc_pole: [1x1 ureal]

pathinfo(:,1)  % paths to USS blocks
ans =

  3x1 cell array

    {'usim_model/Plant'                   }
    {'usim_model/Sensor Gain'             }
    {'usim_model/Unmodeled Plant Dynamics'}

Затем используйте usample, чтобы сгенерировать значения неуверенности uval, сопоставимый с заданными областями значений неуверенности. Например, можно моделировать ответ с обратной связью для 10 случайных значений unc_pole, input_unc и sensor_gain можно следующим образом:

for i=1:10;
   uval = usample(uvars);   % generate random instance of uncertain variables
   sim('usim_model',10);   % simulate response
end

Окно MultiPlot Graph теперь показывает 10 возможных ответов неопределенной обратной связи. Обратите внимание на то, что каждый экземпляр uval является структурой, содержащей значения для неопределенных переменных input_unc, sensor_gain и unc_pole:

uval  % sample value of uncertain variables
uval = 

  struct with fields:

      input_unc: [1x1 ss]
    sensor_gain: 0.9495
       unc_pole: -5.6164

Рандомизированные симуляции

В случае необходимости можно сконфигурировать модель, чтобы использовать различное значение неуверенности uval для каждой новой симуляции. Для этого добавьте uvars в Базовое рабочее пространство или Рабочее пространство модели и присоедините вызов usample модели InitFcn:

bdclose('usim_model'), open_system('usim_model')
% Write the uncertain variable list in the Base Workspace
evalin('base','uvars=ufind(''usim_model'');')
% Modify the model InitFcn
set_param('usim_model','InitFcn','uval = usample(uvars);');

% Simulate ten times (same as pressing "Start simulation" ten times)
for i=1:10;
   sim('usim_model',10);
end

% Clean up
set_param('usim_model','InitFcn','');

Снова окно MultiPlot Graph показывает 10 возможных ответов неопределенной обратной связи.

Линеаризация неопределенных моделей Simulink

Если у вас есть Simulink Control Design™, можно использовать тот же рабочий процесс, чтобы линеаризовать и анализировать неопределенные системы в частотном диапазоне. Например, можно построить с обратной связью, Предвещают ответ для 10 случайных выборок неуверенности модели:

clear sys
wmax = 50;  % max natural frequency for unmodeled dynamics (input_unc)
for i=1:10;
   uval = usample(uvars,1,wmax);
   sys(:,:,i) = linearize('usim_model');
end

bode(sys)
title('Ten linearizations of usim\_model');

Если рабочая точка независима от неопределенных переменных, более быстрый подход должен вычислить неопределенную линеаризацию (объект USS) в одном выстреле с помощью команды ulinearize:

usys = ulinearize('usim_model')
usys =

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

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

Можно затем выбрать неопределенную модель в пространстве состояний usys, чтобы сгенерировать подобную Диаграмму Боде:

bode(usample(usys,10,wmax))
title('Ten linearizations of usim\_model');