Создавание настраиваемых моделей

Этот пример показывает, как создать настраиваемые модели систем управления для использования с systune или looptune.

Фон

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

Используя предопределенные настраиваемые элементы

Можно использовать один из следующих "параметрических" блоков, чтобы смоделировать настраиваемые элементы, с которыми обычно сталкиваются:

  • tunableGain: Настраиваемое усиление

  • tunablePID: Настраиваемый ПИД-регулятор

  • tunablePID2: Настраиваемые два ПИД-регулятора степени свободы

  • tunableTF: Настраиваемая передаточная функция

  • tunableSS: Настраиваемая модель в пространстве состояний.

Например, создайте настраиваемую модель feedforward/feedback настройки рисунка 1 где C настраиваемый ПИД-регулятор и F настраиваемая передаточная функция первого порядка.

Рисунок 1: система управления с Feedforward и Feedback Paths

Первая модель каждый блок в блок-схеме, с помощью подходящих параметрических блоков для C и F.

G = tf(1,[1 1]); 
C = tunablePID('C','pid');  % tunable PID block
F = tunableTF('F',0,1);     % tunable first-order transfer function

Затем используйте connect, чтобы создать модель полной блок-схемы. Чтобы задать, как блоки соединяются, маркируйте вводы и выводы каждого блока и смоделируйте соединения подведения итогов с помощью sumblk.

G.u = 'u';  G.y = 'y';
C.u = 'e';  C.y = 'uC';
F.u = 'r';  F.y = 'uF';

% Summing junctions
S1 = sumblk('e = r-y');
S2 = sumblk('u = uF + uC');

T = connect(G,C,F,S1,S2,'r','y')
T =

  Generalized continuous-time state-space model with 1 outputs, 1 inputs, 3 states, and the following blocks:
    C: Parametric PID controller, 1 occurrences.
    F: Parametric SISO transfer function, 0 zeros, 1 poles, 1 occurrences.

Type "ss(T)" to see the current value, "get(T)" to see all properties, and "T.Blocks" to interact with the blocks.

Это создает обобщенную модель в пространстве состояний T передаточной функции с обратной связью от r до y. Эта модель зависит от настраиваемых блоков C и F. Можно использовать systune, чтобы автоматически настроить коэффициенты ПИД и feedforward коэффициенты a,b, подвергающийся требованиям к производительности. Используйте showTunable, чтобы видеть текущее значение настраиваемых блоков.

showTunable(T)
C =
 
        1 
  Ki * ---
        s 

  with Ki = 0.001
 
Name: C
Continuous-time I-only controller.
-----------------------------------
F =
 
    10
  ------
  s + 10
 
Name: F
Continuous-time transfer function.

Взаимодействие с настраиваемыми параметрами

Можно настроить параметризацию настраиваемых элементов C и F путем взаимодействия с объектами C и F. Используйте get, чтобы видеть их список свойств.

get(C)
             Kp: [1x1 param.Continuous]
             Ki: [1x1 param.Continuous]
             Kd: [1x1 param.Continuous]
             Tf: [1x1 param.Continuous]
       IFormula: ''
       DFormula: ''
           Name: 'C'
             Ts: 0
       TimeUnit: 'seconds'
      InputName: {'e'}
      InputUnit: {''}
     InputGroup: [1x1 struct]
     OutputName: {'uC'}
     OutputUnit: {''}
    OutputGroup: [1x1 struct]
          Notes: [0x1 string]
       UserData: []

ПИД-регулятор имеет четыре настраиваемых параметра Kp,Ki,Kd,Tf. Настраиваемый блок C содержит описание каждого из этих параметров. Атрибуты параметра включают текущее значение, минимальные и максимальные значения, и свободен ли параметр или фиксирован.

C.Kp
 
ans =
 
       Name: 'Kp'
      Value: 0
    Minimum: -Inf
    Maximum: Inf
       Free: 1
      Scale: 1
       Info: [1x1 struct]

 
1x1 param.Continuous
 

Установите соответствующие атрибуты заменять значения по умолчанию. Например, можно зафиксировать временную константу Tf к значению 0.1

C.Tf.Value = 0.1;
C.Tf.Free = false;

Создание пользовательских настраиваемых элементов

Для настраиваемых элементов, не покрытых предопределенными упомянутыми выше блоками, можно создать собственную параметризацию с точки зрения элементарных действительных параметров (realp). Рассмотрите фильтр нижних частот

F(s)=as+a

где коэффициент a является настраиваемым. Чтобы смоделировать этот настраиваемый элемент, создайте действительный параметр a и задайте F как передаточная функция, числитель которой и знаменатель являются функциями a. Это создает обобщенную модель в пространстве состояний F фильтра нижних частот, параметризованного настраиваемым скалярным a.

a = realp('a',1);   % real tunable parameter, initial value 1
F = tf(a,[1 a])
F =

  Generalized continuous-time state-space model with 1 outputs, 1 inputs, 1 states, and the following blocks:
    a: Scalar parameter, 2 occurrences.

Type "ss(F)" to see the current value, "get(F)" to see all properties, and "F.Blocks" to interact with the blocks.

Точно так же можно использовать действительные параметры, чтобы смоделировать фильтр метки

N(s)=s2+2ζ1ωns+ωn2s2+2ζ2ωns+ωn2

с настраиваемыми коэффициентами ωn,ζ1,ζ2.

wn = realp('wn',100);
zeta1 = realp('zeta1',1);   zeta1.Maximum = 1;    % zeta1 <= 1
zeta2 = realp('zeta2',1);   zeta2.Maximum = 1;    % zeta2 <= 1
N = tf([1 2*zeta1*wn wn^2],[1 2*zeta2*wn wn^2]);  % tunable notch filter

Можно также создать настраиваемые элементы с параметрами с матричным знаком. Например, смоделируйте основанный на наблюдателе контроллер C(s) с уравнениями

dxdt=Ax+Bu+L(y-Cx),u=-Kx

и настраиваемые матрицы усиления K и L.

% Plant with 6 states, 2 controls, 3 measurements
[A,B,C] = ssdata(rss(6,3,2));

K = realp('K',zeros(2,6));
L = realp('L',zeros(6,3));

C = ss(A-B*K-L*C,L,-K,0)
C =

  Generalized continuous-time state-space model with 2 outputs, 3 inputs, 6 states, and the following blocks:
    K: Parametric 2x6 matrix, 2 occurrences.
    L: Parametric 6x3 matrix, 2 occurrences.

Type "ss(C)" to see the current value, "get(C)" to see all properties, and "C.Blocks" to interact with the blocks.

Включение требований разомкнутого цикла

Команда systune берет модель с обратной связью полной системы управления, как настраиваемая модель T, созданная в начале этого примера. Такие модели с готовностью не поддерживают анализ разомкнутого цикла или спецификации разомкнутого цикла, такие как формы цикла и запасы устойчивости. Чтобы получить доступ к ответам разомкнутого цикла, вставьте блок AnalysisPoint как показано в рисунок 2.

Рисунок 2: аналитический блок точки

Блок AnalysisPoint может использоваться, чтобы отметить внутренние сигналы интереса, а также местоположений, где открыть обратную связь и измерить ответы разомкнутого цикла. Этот блок оценивает к модульному усилению и не оказывает влияния на образцовые ответы. Например, создайте модель T с обратной связью обратной связи рисунка 2 где C настраиваемый ПИД.

G = tf(1,[1 1]);
C = tunablePID('C','pid');
AP = AnalysisPoint('X');
T = feedback(G*C,AP);

Можно теперь использовать getLoopTransfer, чтобы вычислить (отрицательная обратная связь) передаточную функцию цикла, измеренную в местоположении "X". Обратите внимание на то, что эта передаточная функция цикла L=GC для обратной связи рисунка 2.

L = getLoopTransfer(T,'X',-1);  % loop transfer at "X"
clf, bode(L,'b',G*C,'r--')

Можно также обратиться к местоположению "X" при определении целевых форм цикла или запасов устойчивости для systune. Требование затем применяется к передаче цикла, измеренной в этом местоположении.

% Target loop shape for loop transfer at "X"
Req1 = TuningGoal.LoopShape('X',tf(5,[1 0]));

% Target stability margins for loop transfer at "X"
Req2 = TuningGoal.Margins('X',6,40);

В целом отделения открывающего цикла заданы в свойстве Location блоков AnalysisPoint. Для одноканальных аналитических точек имя блока используется в качестве имени местоположения по умолчанию. Для многоканальных аналитических точек индексы добавлены к имени блока, чтобы сформировать имена местоположения по умолчанию.

AP = AnalysisPoint('Y',2);  % two-channel analysis point
AP.Location
ans = 2x1 cell array
    {'Y(1)'}
    {'Y(2)'}

Можно заменить имена местоположения по умолчанию и использовать более описательные имена путем изменения свойства Location.

% Rename loop opening locations to "InnerLoop" and "OuterLoop".
AP.Location = {'InnerLoop' ; 'OuterLoop'};
AP.Location
ans = 2x1 cell array
    {'InnerLoop'}
    {'OuterLoop'}

Смотрите также

Похожие темы