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

    procedure AssimRaspLax(Kw,taus,tau1,tau2 : real); // Построение ассимптотической ЛАХ исх. сист.

    procedure AssimZLax(Kw,T1,T2,T3 : real); // Построение ассимптотической желаемой ЛАХ системы

    procedure LowDenyZone(Kw,T1 : real); // Построение запретной зоны для ЛАХ в области низких частот

    procedure WritePf(Kw, KwUp, Ts, tau1, tau2, T1, T2, T3: real; vibor: byte); // Вывод передаточных функций

    procedure AssimKULax(Kw, KwUp, Ts, tau1, tau2, T1, T2, T3: real; vibor : byte); // Ассимптотическая ЛАХ КУ

// procedure WMSize(var Msg: TWMSize); message WM_SIZE;// Обработка сообщений Windows: WM_SIZE

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form1: TForm1;

  vars: array [1..10] of real;  //Исходные данные, вводимые пользователем.

  power: real;                  //Мощность двигателя - глобальная.

  Ts,Kw,KwUp,T1,T2,T3 : real; // Постоянные для построения ЛАХ

  State : Byte; // Вариант постоения ЖЛах после T3

  Kdvi: real; // КОэффициент усиления двигателя!!!

selected, selected_ch: integer;

  curDM, curU, curUCol: integer;

implementation

uses Unit2, Unit3, Unit4, Unit5, Unit6;

{$R *.dfm}

function pow(x,y:real):real;

begin

 Result:= exp(y*ln(x));

end;

function TForm1.pch(): real;

begin

 Result := StrToFloat(EngineGrid.Cells[8,selected])*2*pi/60.0/vars[3];

end;

procedure TForm1.ClearTable(Grid: TStringGrid);

var i,j:integer;

begin

 for i:=1 to Grid.RowCount-1 do

  for j:=1 to Grid.ColCount-1 do

   Grid.Cells[j,i]:='';

end;

procedure TForm1.CopyAppropriate();

var i,j:integer;

begin

 EngineGrid.ColCount := Table1.FieldCount;

 EngineGrid.Cells[EngineGrid.ColCount-2,0]:='Peregrev';

 EngineGrid.Cells[EngineGrid.ColCount-1,0]:='Peregruzka';

 //Вписываем имена столбцов.

 for j:=1 to Table1.FieldCount-3 do EngineGrid.Cells[j,0] := Table1.Fields[j].DisplayName;

 Table1.First;

 for i:=1 to Table1.RecordCount do

  begin

   {УСЛОВИЕ ОТБОРА ЗАПИСЕЙ ИЗ ТАБЛИЦЫ!!!}

if (Table1.FieldByName('Peregrev').AsFloat>=0.7) and (Table1.FieldByName('Peregruzka').AsFloat<=2.8) and

   (Table1.FieldByName('Peregruzka').AsFloat>=1.3) then

   begin

    //Делаем номер записи.

    EngineGrid.Cells[0,EngineGrid.RowCount-1]:=IntToStr(EngineGrid.RowCount-1);

    //Копируем запись в таблицу.

    for j:=1 to Table1.FieldCount-3 do EngineGrid.Cells[j, EngineGrid.RowCount-1] := Table1.Fields[j].AsString;

    //Добавляем запись из невидимых столбцов.

EngineGrid.Cells[EngineGrid.ColCount-2,EngineGrid.RowCount-1]:=FloatToStrF(Table1.FieldByName('Peregrev').AsFloat,ffFixed,5,4);

    EngineGrid.Cells[EngineGrid.ColCount-1,EngineGrid.RowCount-1]:=FloatToStrF(Table1.FieldByName('Peregruzka').AsFloat,ffFixed,5,4);

    //Увеличиваем кол-во рядов.

    EngineGrid.RowCount:=EngineGrid.RowCount+1;

   end;

   Table1.Next;

  end;

 Table1.First;

 //Удаляем лишний ряд.

 if EngineGrid.RowCount>2 then EngineGrid.RowCount:=EngineGrid.RowCount-1;

end;

procedure TForm1.Button1Click(Sender: TObject);

var i:integer;

begin

  // Выключение кнопок временное

  Button7.Enabled := False; // Выключаем кнопку расчёта двигателей

  Button5.Enabled := False; // Кнопка редуктора

  bbVar.Enabled := False; // Кнопка выбора данных

if Button1.Caption = 'Начать расчёт' then

  begin

    //Подготавливаем всё для расчёта.

Label18.Caption:='';

    CloseDatabase();

    EngineGrid.RowCount:=2;

    for i:=0 to EngineGrid.ColCount do EngineGrid.Cells[i,1]:='';

    for i:=1 to UpDown1.Max do  PeredGrid.Cells[1,i]:=''; UpDown1.Position:=1;

    {Проверяем корректность введённых данных}

    try {Пытаемся преобразовать строки в числа}

vars[1]:=StrToFloat(Edit1.Text);

      vars[2]:=StrToFloat(Edit2.Text);

      vars[3]:=StrToFloat(Edit3.Text);

      vars[4]:=StrToFloat(Edit4.Text);

      vars[5]:=StrToFloat(Edit5.Text);

      vars[6]:=StrToFloat(Edit6.Text);