Анализ робастности в 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.5893
       unc_pole: -4.9557

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

В случае необходимости можно сконфигурировать модель, чтобы использовать различное значение неопределенности 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');