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

//------------------ Построение и разбиение точной лах КУ-------------------

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

// Построение лах КУ на заданном участке

// flag - для построения 1-го звена если KwUp > Kw

// UpT,DownT - верхняя и нижняя постоянные времени

// GrafNum - номер графика

procedure KU(flag: boolean; UpT,DownT : real; GrafNum : byte);

var

  A_ku,L,lgw : real;

begin

  lgw:=-1.5;

  while lgw<=5 do

  begin

    A_ku := sqrt(sqr(UpT*pow(10,lgw)) + 1)/sqrt(sqr(DownT*pow(10,lgw)) + 1);

    if flag then A_ku := A_ku*(Kw/KwUp);

    L:=20*log10(A_ku);

    KULAX.Series[GrafNum].AddXY(lgw,L);

    lgw:=lgw+0.001;

  end;

end;

begin

  // Строим в зависимости от случая расположения T3

///  if T1<>T3 then      !!! Случай T1  близко T3

  KU(true,Ts,T1,0);    // так же далее в 1 ненадо

KU(false,T2,T3,1);

  case vibor of

    1 : begin    // 1/T3 левее 1/tau1

    end;

    2,3 : begin  // 1/tau1 < 1/T3 < 1/tau2

        KU(false,tau1,T3,2);

    end;

    4 : begin  // 1/T3 правее 1/tau2

        KU(false,tau1,T3,2);

        KU(false,tau2,T3,3);

    end;

  end;  // case vibor of

end;

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

// Построение запретной зоны для ЛАХ в области низких частот

procedure TForm1.LowDenyZone(Kw,T1 : real);

var

  lgw20,lgw40,y : real;

begin

  // левее 1/T1 наклон 20

  lgw20 := -1.5;

  y := -20*lgw20 + 20*log10(Kw);

  LAX.Series[2].AddXY(lgw20,y);

  // точка 1/T1

  lgw20 := log10(1/T1);

  y := -20*lgw20 + 20*log10(Kw);

  LAX.Series[2].AddXY(lgw20,y);

  // правее 1/T1 наклон 40

  lgw40 := lgw20 + y/40;

  y := 0;

  LAX.Series[2].AddXY(lgw40,y);

end;

// Построение ассимптотической ЛАХ разомкнутой системы

procedure TForm1.AssimRaspLax(Kw,taus,tau1,tau2 : real);

var

  y, lgw20, lgw40, lgw60, lgw80 : real;

begin

  // левее taus

  lgw20 := -1.5;

  y := -20*lgw20 + 20*log10(Kw);

  LAX.Series[0].AddXY(lgw20,y);

  // точка taus

  lgw20 := log10(1/Ts);

  y := -20*lgw20 + 20*log10(Kw);

  LAX.Series[0].AddXY(lgw20,y);

  // правее taus - наклон 40, точка tau1

  lgw40 := log10(1/(vars[8]*0.001));

  y := -40*lgw40 + y + 40*lgw20;

  LAX.Series[0].AddXY(lgw40,y);

  // правее tau1 - наклон 60, точка tau2

  lgw60 := log10(1/(vars[9]*0.001));

  y := -60*lgw60 + y + 60*lgw40;

  LAX.Series[0].AddXY(lgw60,y);

  // правее tau2 - наклон 80, точка 5

  lgw80 := 5;

y := -80*lgw80 + y + 80*lgw60;

  LAX.Series[0].AddXY(lgw80,y);

end;

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

procedure TForm1.AssimZLax(Kw,T1,T2,T3 : real);

var

  y, lgw20, lgw40,lgw60,lgw80 : real;

begin

  // левее 1/T1 наклон 20

  lgw20 := -1.5;

  y := -20*lgw20 + 20*log10(Kw);

  LAX.Series[1].AddXY(lgw20,y);

  // точка 1/T1, правее наклон 40

  lgw20 := log10(1/T1);

y := -20*lgw20 + 20*log10(Kw);

  LAX.Series[1].AddXY(lgw20,y);

  // точка 1/T2, правее наклон 20

  lgw40 := log10(1/T2);

y := -40*lgw40 + y + 40*lgw20;

  LAX.Series[1].AddXY(lgw40,y);

  // точка 1/T3, правее наклон по выюору

lgw20 := log10(1/T3);

  y := -20*lgw20 + y + 20*lgw40;

  LAX.Series[1].AddXY(lgw20,y);

  // точка правее T3 - "-5"

  case State of

    1 : begin // наклон на 40, на tau1 на 60, на tau2 на 80

// точка 1/T3

          lgw40 := log10(1/(vars[8]*0.001));

          y := -40*lgw40 + y + 40*lgw20;

          LAX.Series[1].AddXY(lgw40,y);

          // точка 1/tau2

          lgw60 := log10(1/(vars[9]*0.001));

          y := -60*lgw60 + y + 60*lgw40;

          LAX.Series[1].AddXY(lgw60,y);

          // правее 1/tau2

          lgw80 := 5;

          y := -80*lgw80 + y + 80*lgw60;

          LAX.Series[1].AddXY(lgw80,y);

        end;

    2 : begin // наклон на 60, затем на tau2 на 80

// точка 1/tau2

          lgw60 := log10(1/(vars[9]*0.001));

          y := -60*lgw60 + y + 60*lgw20;