Анализ робастности в 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 для моделирования и анализа неопределенности

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

open('RCTblocks')

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

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

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

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

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

The 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

The 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™, можно использовать тот же рабочий процесс для линеаризации и анализа неопределенных систем в частотный диапазон. Для примера можно построить график обратной связи Bode для 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');

См. также

Блоки

Функции

Похожие темы