Этот пример показывает, как вычислить неопределенные линеаризации с помощью Robust Control Toolbox™ и Simulink ® Control Design™. Существуют два удобных рабочих процессов в зависимости от того, как используется Simulink. Получившиеся неопределенные линеаризации имеют форму структуры данных пространства неопределенных состояний (USS) в Robust Control Toolbox, которая может использоваться функциями анализа в Robust Control Toolbox.
Графический пользовательский интерфейс в Simulink является естественным окружением для моделирования и симуляции систем управления. Используя возможности линеаризации в Simulink Control Design и элементы неопределенности в Robust Control Toolbox, можно задать неопределенность на конкретных блоках в модели Simulink, а затем извлечь неопределенную линеаризированную модель.
В этом примере эффективности ПИД-регулятора исследуется в присутствии неопределенности. Существует два подхода к вычислению линеаризации неопределенных систем. Каждый из подходов разработан для удовлетворения различных потребностей при работе в Simulink. Эти подходы обобщены в следующих разделах.
Этот первый подход наиболее применим, когда вы уже используете блоки 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)
Второй подход использует пользовательский интерфейс 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);