Создание обучающей системы автоматизированного проектирования маломощных электромеханических следящих систем, страница 52

  KULAX.Series[8].AddXY(log10(1/tau1),min);

  KULAX.Series[8].AddXY(log10(1/tau1),max);

  KULAX.Series[9].AddXY(log10(1/tau2),min);

  KULAX.Series[9].AddXY(log10(1/tau2),max);

end;

//----------- Для построения точной лах разомкнутой системы------------

// функция вычисляющая значение фазы разомкнутой ПФ для исходной системы

function TForm1.PhiRazomkn(Ts, tau1, tau2, w :real):real;

begin

  Result:=-90-arctan(w*Ts)*180.0/pi-arctan(w*tau1)*180.0/pi-arctan(w*tau2)*180.0/pi;

end;

// функция вычисляющая значение амплитуды разомкнутой ПФ для исходной системы

function TForm1.ARazomkn(Kw, Ts, tau1, tau2, w :real):real;

begin

  Result:=Kw/(  w * sqrt((Ts*Ts*w*w+1)*(tau1*tau1*w*w+1)*(tau2*tau2*w*w+1)) );

end;

// Построение исходной ЛАХ

procedure TForm1.LaxRazomkn(Kw, Ts, tau1, tau2 :real);

var lgw, startlgw, endlgw, L, phi: real;

begin

  startlgw:=-1.5;

  endlgw:=5;

  lgw:=startlgw;

  while lgw<=endlgw do

  begin

    L:=20*log10(ARazomkn(Kw, Ts, tau1, tau2, pow(10,lgw)));

    phi:=PhiRazomkn(Ts, tau1, tau2, pow(10,lgw));

    LAX.Series[3].AddXY(lgw,L);

    LAX.Series[4].AddXY(lgw,-phi-180.0);

    lgw:=lgw+0.001;

  end;

end;

//------------------------------------------------------------------------

//----------- Для построения точной желаемой лах системы------------

// функция вычисляющая значение амплитуды желаемой ПФ системы

function TForm1.AZhelaem(Kw, T1, T2, T3, tau1, tau2, w :real; vibor: byte):real;

begin

  case vibor of

    // 1/T3 < 1/tau1

    1: Result:=Kw*sqrt(T2*T2*w*w+1)/(w * sqrt((T1*T1*w*w+1)*(T3*T3*w*w+1)*(tau1*tau1*w*w+1)*(tau2*tau2*w*w+1)));

    // 1/tau1 <= 1/T3 < 1/tau2

    2: Result:=Kw*sqrt(T2*T2*w*w+1)/(w * sqrt((T1*T1*w*w+1)*(T3*T3*w*w+1)*(T3*T3*w*w+1)*(tau2*tau2*w*w+1)));

    // 1/T3 > 1/tau2

    3,4: Result:=Kw*sqrt(T2*T2*w*w+1)/(w * sqrt((T1*T1*w*w+1)*(T3*T3*w*w+1)*(T3*T3*w*w+1)*(T3*T3*w*w+1)));

  end;

end;

// функция вычисляющая значение фазы желаемой ПФ системы

function TForm1.PhiZhelaem(T1, T2, T3, tau1, tau2, w :real; vibor: byte) : real;

begin

  case vibor of

    // 1/T3 < 1/tau1

    1: Result:=-90+arctan(w*T2)*180.0/pi-arctan(w*T1)*180.0/pi-arctan(w*T3)*180.0/pi-arctan(w*tau1)*180.0/pi-arctan(w*tau2)*180.0/pi;

    // 1/tau1 <= 1/T3 < 1/tau2

    2: Result:=-90+arctan(w*T2)*180.0/pi-arctan(w*T1)*180.0/pi-2*arctan(w*T3)*180.0/pi-arctan(w*tau2)*180.0/pi;

    // 1/T3 > 1/tau2

    3,4: Result:=-90+arctan(w*T2)*180.0/pi-arctan(w*T1)*180.0/pi-3*arctan(w*T3)*180.0/pi;

  end;

end;

// Построение желаемой ЛАХ

procedure TForm1.LAXZhelaem(Kw, T1, T2, T3, tau1, tau2 :real; vibor: byte);

const

  n = 300; // Число разбиений при построении запретной зоны для ЛФЧХ

  eps = 0.1; // Точность при построении запретной зоны для ЛФЧХ

var lgw, startlgw, endlgw, L, phi: real;

begin

  startlgw:=-1.5;

  endlgw:=5;

  lgw:=startlgw;

  while lgw<=endlgw do

  begin

    L:=20*log10(AZhelaem(Kw, T1, T2, T3, tau1, tau2, pow(10,lgw), vibor));

    phi:=PhiZhelaem(T1, T2, T3, tau1, tau2, pow(10,lgw), vibor);

    LAX.Series[5].AddXY(lgw,L);

    LAX.Series[6].AddXY(lgw,-phi-180);

    lgw:=lgw+0.001;

  end;

end;

//------------------------------------------------------------------------

//----------- Для построения лах корректирующего устройства --------------

procedure TForm1.LaxKU(KwUp, Kw, T1, T2, T3, tau1, tau2 :real; vibor: byte);

var lgw, startlgw, endlgw, L, A_ku: real;

begin

  startlgw:=-1.5;

  endlgw:=5;

  lgw:=startlgw;

  while lgw<=endlgw do

  begin

    A_ku := AZhelaem(Kw, T1, T2, T3, tau1, tau2, pow(10,lgw), vibor)/ARazomkn(KwUp, Ts, tau1, tau2, pow(10,lgw));

    L:=20*log10(A_ku);

    LAX.Series[14].AddXY(lgw,L);

    KULAX.Series[10].AddXY(lgw,L);    // строим график ЛАХ КУ на на другом chart-те

    lgw:=lgw+0.001;

  end;

end;

//------------------------------------------------------------------------