В этом примере показано, как вычислить неопределенную линеаризацию с помощью Robust Control Toolbox™ и Simulink® Control Design™. Существует два удобных рабочих процесса, предлагаемые в зависимости от того, как Simulink используется. Получившаяся неопределенная линеаризация в форме структуры данных неопределенного пространства состояний (USS) в Robust Control Toolbox, который может использоваться аналитическими функциями в Robust Control Toolbox.
Графический интерфейс пользователя в Simulink является окружающей средой, чтобы смоделировать и симулировать системы управления. Используя возможности линеаризации в Simulink Control Design и элементы неопределенности в Robust Control Toolbox, можно задать неопределенность на определенных блоках в модели Simulink и затем извлечь неопределенную линеаризовавшую модель.
В этом примере производительность ПИД-регулятора исследована в присутствии неопределенности. Существует два подхода, доступные, чтобы вычислить линеаризацию неопределенных систем. Каждый из подходов спроектирован, чтобы удовлетворить различные потребности при работе в Simulink. Эти подходы получены в итоге в следующих разделах.
Этот первый подход является самым применимым, когда вы уже используете Неопределенные блоки Пространства состояний в качестве части вашего процесса проектирования системы управления в Simulink. Как показано в Анализе Робастности в качестве примера в Simulink, блок Uncertain State Space в 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]);
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 неопределенная переменная. Этот подход подходит лучше всего при работе с моделями, которые не используют блок Uncertain State Space. Первичное преимущество этого подхода состоит в том, что спецификация неопределенности не влияет ни на какую другую операцию в Simulink, таком как симуляция.
Модифицированную версию исходной модели с помощью только встроенные блоки Simulink показывают ниже.
mdl = 'rct_ulinearize_builtin';
open_system(mdl);
Путем щелчка правой кнопкой по rct_ulinearize_builtin/Plant
блокируйтесь и выбор пункта меню Linear Analysis-> Specify Linearization, можно задать, к какому значению этот блок должен линеаризовать. Если вы вводите выражение 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);