Проверка результатов

В этом примере показано, как интерпретировать и проверить результаты настройки systune.

Фон

Можно настроить параметры системы управления с помощью systune или looptune. Проектные спецификации получены с помощью TuningGoal объекты требований. Этот пример показывает, как интерпретировать результаты из systuneграфически проверьте требования проекта и выполните дополнительный анализ в разомкнутом и замкнутом циклах.

Настройка контроллера с помощью SYSTUNE

Мы используем приложение настройки автопилота в качестве иллюстрации, см. пример «Настройка автопилота с двумя циклами» для получения дополнительной информации. Настроенный компенсатор - это блок «MIMO Controller», выделенный оранжевым цветом в модели ниже.

open_system('rct_airframe2')

Шаги настройки и настройки повторяются ниже для полноты.

ST0 = slTuner('rct_airframe2','MIMO Controller');

% Compensator parameterization
C0 = tunableSS('C',2,1,2);
C0.D.Value(1) = 0;
C0.D.Free(1) = false;
setBlockParam(ST0,'MIMO Controller',C0)

% Requirements
Req1 = TuningGoal.Tracking('az ref','az',1);                  % tracking
Req2 = TuningGoal.Gain('delta fin','delta fin',tf(25,[1 0])); % roll-off
Req3 = TuningGoal.Margins('delta fin',7,45);                  % margins
MaxGain = frd([2 200 200],[0.02 2 200]);
Req4 = TuningGoal.Gain('delta fin','az',MaxGain);  % disturbance rejection

% Tuning
Opt = systuneOptions('RandomStart',3);
rng('default')
[ST1,fSoft] = systune(ST0,[Req1,Req2,Req3,Req4],Opt);
Final: Soft = 1.51, Hard = -Inf, Iterations = 52
Final: Soft = 1.15, Hard = -Inf, Iterations = 96
Final: Soft = 1.15, Hard = -Inf, Iterations = 67
Final: Soft = 1.15, Hard = -Inf, Iterations = 104

Интерпретация результатов

systune запустите три оптимизации из трёх различных начальных точек и верните лучший общий результат. Первый выход ST является slTuner интерфейс, представляющий настроенную систему управления. Второй выходной fSoft содержит окончательные значения четырех требований к лучшему проекту.

fSoft
fSoft =

    1.1476    1.1476    0.5461    1.1476

Требования нормализуются, поэтому требование выполняется тогда и только тогда, когда его значение меньше 1. Осмотр fSoft показывает, что Требования 1,2,4 являются активными и незначительно нарушены, в то время как Требование 3 (запасов устойчивости) удовлетворено.

Проверка требований

Использование viewGoal графически проверить каждое требование. Это полезно, чтобы понять, приемлемы ли мелкие нарушения или что вызывает крупные нарушения. Сначала проверьте требование к отслеживанию.

viewGoal(Req1,ST1)

Мы наблюдаем небольшое нарушение по частоте, предполагая, что отслеживание уставки будет выполняться близко к ожиданиям. Точно так же проверьте требование к подавлению помех.

viewGoal(Req4,ST1)
legend('location','NorthWest')

Большая часть нарушений находится на низкой частоте с небольшим отбоем около 35 рад/с, что предполагает возможные демпфированные колебания на этой частоте. Наконец, проверьте требование по запасу устойчивости.

viewGoal(Req3,ST1)

Это требование удовлетворяется на всех частотах с наименьшими запасами, достигнутыми около частоты среза, как ожидалось.

Оценка требований

Можно также использовать evalGoal чтобы оценить каждое требование, то есть вычислить его вклад в мягкие и жесткие ограничения. Для примера

[H1,f1] = evalGoal(Req1,ST1);

возвращает значение f1 потребности и базовой взвешенной по частоте передаточной функции H1 раньше вычислял его. Можно проверить, что f1 соответствует первой записи fSoft и совпадает с пиковым усилением H1.

[f1 fSoft(1) getPeakGain(H1,1e-6)]
ans =

    1.1476    1.1476    1.1476

Анализ откликов системы

В дополнение к проверке требований можно выполнить базовый анализ в разомкнутом и замкнутом циклах с помощью getIOTransfer и getLoopTransfer. Для примера проверьте эффективность отслеживания в временной интервал путем построения графика ответа az к шаговой команде azref для настроенной системы ST1.

T = ST1.getIOTransfer('az ref','az');
step(T)

Также постройте график отклика без разомкнутого контура, измеренного на входе объекта управления delta fin. Можно использовать этот график для оценки классического усиления и запасов по фазе на входе объекта.

L = ST1.getLoopTransfer('delta fin',-1);  % negative-feedback loop transfer
margin(L)
grid

Мягкие и жесткие требования

До сих пор мы одинаково относились ко всем четырем требованиям в целевой функции. Кроме того, можно использовать комбинацию мягких и жестких ограничений, чтобы различать обязательные и приятные требования. Для примера можно рассматривать Требования 3,4 как жесткие ограничения и оптимизировать первые два требования, удовлетворяющие этим ограничениям. Для наилучших результатов делайте это только после получения разумного проекта со всеми требованиями, рассматриваемыми одинаково.

[ST2,fSoft,gHard] = systune(ST1,[Req1 Req2],[Req3 Req4]);
Final: Soft = 1.29, Hard = 0.99973, Iterations = 165
fSoft
fSoft =

    1.2897    1.2898

gHard
gHard =

    0.4664    0.9997

Вот fSoft содержит окончательные значения первых двух требований (мягкие ограничения) и gHard содержит окончательные значения последних двух требований (жесткие ограничения). Жесткие ограничения выполняются, так как все записи gHard меньше 1. Как ожидалось, лучшее значение из первых двух требований повысилось, поскольку оптимизатор стремился строго выполнять четвертое требование.

bdclose('all')