Этот пример показывает, как интерпретировать и подтвердить настраивающиеся результаты systune
.
Можно настроить параметры системы управления с systune
или looptune
. Спецификации проекта получены с помощью объектов требования TuningGoal
. Этот пример показывает, как интерпретировать результаты systune
, графически проверить конструктивные требования и выполнить дополнительный открытый - и анализ с обратной связью.
Мы используем настраивающее приложение автопилота в качестве рисунка, видим "Настройку примера" Автопилота 2D Цикла для деталей. Настроенный компенсатор является блоком "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.15, Hard = -Inf, Iterations = 115 Final: Soft = 1.15, Hard = -Inf, Iterations = 96 Final: Soft = 1.15, Hard = -Inf, Iterations = 71 Final: Soft = 1.15, Hard = -Inf, Iterations = 102
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 = 164
fSoft
fSoft = 1.2879 1.2879
gHard
gHard = 0.4665 0.9997
Здесь fSoft
содержит окончательные значения первых двух требований (мягкие ограничения), и gHard
содержит окончательные значения последних двух требований (трудные ограничения). Трудные ограничения удовлетворены, поскольку все записи gHard
- меньше чем 1. Как ожидалось оптимальное значение первых двух требований повысилось, когда оптимизатор стремился строго осуществить четвертое требование.
bdclose('all')