В этом примере показано, как интерпретировать и проверить результаты настройки systune
.
Можно настроить параметры системы управления с помощью systune
или looptune
. Проектные спецификации получены с помощью TuningGoal
объекты требований. Этот пример показывает, как интерпретировать результаты из 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')