В этом примере показано, как настроить Simulink® модель для устойчивой настройки относительно неопределенности параметра. Устойчивая настройка контроллера или синтез робастного контроллера для системы, смоделированной в Simulink, требует линеаризации модели так, чтобы программное обеспечение учитывало неопределенность параметра. Это требует подстановки блоков (Simulink Control Design) для линеаризации, чтобы заменить значение блоков, которые имеют неопределенность параметров, неопределенными параметрами или системами.
В этом примере вы настраиваете модель системы масса-пружина-демпфер для устойчивой настройки, где физические параметры системы неопределенны. Пример показывает, как настроить модель для устойчивой настройки с помощью программного обеспечения, такого как Control System Tuner или systune
для slTuner
. Это также показывает, как извлечь неопределенную систему для использования в устойчивом проектировании контроллера с musyn
.
Откройте модель Simulink rct_mass_spring_damper
.
open_system('rct_mass_spring_damper')
Эта модель представляет систему для управления системой демпфера масса-пружина на следующем рисунке.
В этой системе приложенная сила F является входом объекта. ПИД-регулятор генерирует силу, необходимую для управления x положения массы. Когда масса m, постоянные c демпфирования и коэффициента упругости k фиксированы и известны, настройка коэффициентов ПИД для желаемой эффективности проста. Однако на практике параметры физической системы могут быть неопределенными. Можно использовать Control System Tuner или systune
устойчиво настроить систему против неопределенности и достичь удовлетворительной эффективности в области значений ожидаемых значений для этих параметров.
Модель сконфигурирована, чтобы использовать номинальные или наиболее вероятные значения физических параметров, m = 3, c = 1 и k = 2. Чтобы настроить систему против неопределенности в этих параметрах, задайте неопределенность параметра в модели.
Во-первых, создайте неопределенную реальность (ureal
) параметры для каждой из трех неопределенностей. В данном примере задайте неопределенность как процентное изменение от номинального значения.
m_un = ureal('m',3,'Percentage',40); c_un = ureal('c',1,'Percentage',20); k_un = ureal('k',2,'Percentage',30);
Чтобы задать эти неопределенности в модели, используйте замену блоков. Подстановка блоков позволяет вам задать линеаризацию конкретного блока в модели Simulink. В модели щелкните правой кнопкой мыши по Spring Stiffness
заблокировать в модели и выбрать Linear Analysis > Specify Selected Block Linearization.
В Блок окне Спецификации линеаризации установите флажок Specify block linearization using one of the following и введите k_un
в текстовом поле. Нажмите OK.
Когда вы используете Control System Tuner для этой модели, программное обеспечение линеаризирует модель и настраивает настраиваемые параметры, используя эту линеаризацию, чтобы вычислить отклики системы. Определение k_un
как линеаризация Spring Stiffness
блок заставляет программное обеспечение использовать неопределенный параметр в качестве линеаризованного значения блока вместо его номинального значения, которое является постоянным фиксированным усилением 2.
Поскольку неопределенные параметры в этой модели, такие как жесткость пружины, реализованы как скалярные блоки усиления, используйте простой ureal
параметр как подстановка блоков. Для более сложных блоков создайте a uss
модель, которая представляет неопределенное значение всего блока.
Примечание
Используйте подстановку блоков, чтобы задать неопределенность блока, даже если блок является Uncertain LTI System
блок. Если вы явным образом не задаете неопределенное значение в качестве замены блоков, Control System Tuner и slTuner
используйте номинальное значение при линеаризации Uncertain LTI System
блоки.
Точно так же задайте c_un
как блочная линеаризация для Damping
блок. Для Mass
блок, в диалоговом окне Block Linearization Спецификации, введите 1/m_un
как неопределенное значение, потому что усиление этого блока является обратным массе.
Теперь можно открыть Control System Tuner для модели, создать цели настройки и настроить модель. Когда вы делаете это, Control System Tuner настраивает параметры контроллера, чтобы оптимизировать эффективность во всей области значений неопределенностей. Графики целей настройки и графики отклика в Control System Tuner отображают несколько откликов, вычисленных случайными значениями неопределенных параметров, как показано.
Эта выборка дает общее представление о области значений возможных ответов, но не обязательно отражает истинно худший ответ.
slTuner
Когда вы используете slTuner
для настройки командной строки можно задать неопределенности в модели с помощью диалогового окна Спецификация линеаризации блоков (Block Linearization Specification). Кроме того, можно задать неопределенные замены блоков, не изменяя модель. Для этого используйте структуру замещения блоков при создании slTuner
интерфейс. Например, создайте структуру замещения блоков для rct_mass_spring_damper
модель.
blocksubs(1).Name = 'rct_mass_spring_damper/Mass'; blocksubs(1).Value = 1/m_un; blocksubs(2).Name = 'rct_mass_spring_damper/Damping'; blocksubs(2).Value = c_un; blocksubs(3).Name = 'rct_mass_spring_damper/Spring Stiffness'; blocksubs(3).Value = k_un;
Используйте эту структуру для получения slTuner
интерфейс с моделью с неопределенными значениями.
UST0 = slTuner('rct_mass_spring_damper','Controller',blocksubs);
Теперь можно создать цели настройки и настроить модель. systune
настраивает систему на оптимизацию эффективности во всей области значений неопределенности. Для примера, иллюстрирующего этот рабочий процесс устойчивой настройки с slTuner
, см. Робастная настройка системы масса-пружина-демпфер.
uss
Модель объекта управления для робастного Проектирования контроллера с musyn
musyn
команда синтезирует устойчивый контроллер для объекта управления, принимая строение управления LFT.
Сопоставление этой структуры с моделью Simulink,
w - ссылка вход r
, выход блока Step.
u является управляющим сигналом F
, выходы блока ПИД-регулятор.
z - выход объекта управления x
, выход блока Integrator.
y - сигнал измерения, который является входом контроллера или выходом блока Sum.
Используйте эти сигналы с getIOTransfer
(Simulink Control Design), чтобы извлечь P объекта из slTuner
интерфейс UST0
. Для этого UST0
должны быть определены точки анализа в каждом из этих местоположений. Исследуйте точки анализа UST0
.
getPoints(UST0)
ans = 2×1 cell array {'rct_mass_spring_damper/Step/1[r]' } {'rct_mass_spring_damper/Integrator/1[x]'}
Уже есть точки анализа на w и z. Добавьте точки анализа для u и y.
addPoint(UST0,{'Sum1','Controller'}); getPoints(UST0)
ans = 4×1 cell array {'rct_mass_spring_damper/Step/1[r]' } {'rct_mass_spring_damper/Integrator/1[x]'} {'rct_mass_spring_damper/Sum1/1' } {'rct_mass_spring_damper/Controller/1[F]'}
Теперь можно извлечь P модели объекта управления для настройки с musyn
. Используйте имена сигналов точек анализа, показанные в скобках в выходах getPoints
, для определения входов и выходов P. Для точек анализа, которые не имеют имен сигналов, используйте имя блока.
Pg = getIOTransfer(UST0,{'r','F'},{'x','Sum'});
getIOTransfer
возвращает genss
модель. В данном случае, потому что Pg
исключает блок контроллера, Pg
является genss
модель только с неопределенными блоками. Преобразование Pg
на uss
для проектирования контроллера с musyn
.
P = uss(P)
P = Uncertain continuous-time state-space model with 2 outputs, 2 inputs, 3 states. The model uncertainty consists of the following blocks: c: Uncertain real, nominal = 1, variability = [-20,20]%, 1 occurrences k: Uncertain real, nominal = 2, variability = [-30,30]%, 1 occurrences m: Uncertain real, nominal = 3, variability = [-40,40]%, 1 occurrences Type "P.NominalValue" to see the nominal value, "get(P)" to see all properties, and "P.Uncertainty" to interact with the uncertain elements.
Теперь можно использовать musyn
для разработки робастного контроллера для P. Например, чтобы спроектировать неструктурированный устойчивый контроллер, обратите внимание, что P имеет один сигнал измерения и один сигнал управления, и используйте следующую команду.
[K,CLperf,info] = musyn(P,1,1);
В качестве альтернативы спроектируйте ПИД-регулятор с фиксированной структурой, как в исходной модели Simulink.
C0 = tunablePID('K','PID'); CL0 = lft(P,C0); [CL,CLperf,info] = musyn(CL0);
Для получения дополнительной информации о конструкции робастного проектирования контроллера musyn
.
musyn
| systune
| getIOTransfer
(Simulink Control Design) | slTuner
(Simulink Control Design) | systune (for slTuner)
(Simulink Control Design)