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

        'выбора схожих по требуемой мощности двигателей, проводится полный расчёт для каждого двигателя '+

        'и определяются коэффициенты переграва и перегрузки двигателей. Если коэффициенты удовлетворяют '+

        'следующим требованиям, то двигатель считается подходящим: ');

      mmBase.Lines.Add('1,3 < Коэффициент перегрузки < 2,8; Коэффициент перегрева > 0,7.');

      mmBase.Lines.Add('При полном расчёте двигателей пользуйтесь расчётными формулами №1.');

      mmBase.Lines.Add('Момент инерции редуктора при полном расчёте двигателя, берётся равным моменту инерции двигателя.');

      imFormuls.Show; // Показываем формулы <если пройден тест> !!!

      //  Включение кнопок

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

Button7.Caption := 'Полный расчёт';

      Button7.SetFocus;

      Button1.Caption := 'Начать расчёт'; // Меняем заголовок кнопки

bbVar.Enabled := True;

    end; //  else begin

  end;  // else if Button1.Caption := 'Дальше >>' then

end;

procedure TForm1.OpenDatabase();

var

  i : integer;

  Path : String;

begin

 //Подключаем таблицу

 try

  // Получам путь к базе данных

  Path:=Application.ExeName; // полный путь и название запущенной программы

  Path:=ExtractFileDir(Path); // отбрасываем название программы. Остается путь.

  if Path[Length(Path)]<>'\' then Path:=Path+'\'; // если последний символ не \ то добавить его

  {Последняя строка нужна для присвоения последнего символа '\',

  потому что при обрезке файла 'C:\PROG.EXE' получим 'C:\',

  а при обрезке 'C:\WINDOWS\PROG.EXE' получим 'C:\WINDOWS' }

Table1.DataBaseName := Path; // Путь к БД

  Table1.Active:=true;

 except

  begin

  {Если нельзя открыть таблицу - закрываем программу}

  Table1.Active:=false;

  Application.MessageBox('Не могу подключить базу с двигателями.','Ошибка базы данных.',MB_OK or MB_ICONERROR);

  exit;

  end;

 end;

 //Выравниваем ширину столбцов в таблице

for i:=2 to 5 do

  DBGrid1.Columns[i].Width:=50;

 for i:=6 to DBGrid1.Columns.Count-3 do

  DBGrid1.Columns[i].Width:=70;

 DBGrid1.Columns[0].Width:=15;

 DBGrid1.Columns[1].Width:=100;

 DBGrid1.Columns[DBGrid1.Columns.Count-2].Width:=75;

 DBGrid1.Columns[DBGrid1.Columns.Count-1].Width:=75;

end;

procedure TForm1.CloseDatabase();

begin

 Table1.Active:=false;

end;

// Вычисление гамма_экспуатации и гамма_перегрузки

procedure TForm1.Table1CalcFields(DataSet: TDataSet);

var Omega_dv, i, M_max_priv, M_eqv_priv, Jred, Jdv, gamma_per, gamma_eqv :real;

begin

  //Memo1.Lines.Add(Table1.FieldByName('Engine').AsString);

  Omega_dv := Table1.FieldByName('Nn').AsInteger*2*pi/60.0;

  //Memo1.Lines.Add('Omega_dv ='+FloatToStr(Omega_dv));

  i := Omega_dv/vars[3];      // можно отбросить дробную часть

//Memo1.Lines.Add('i = '+FloatToStr(Omega_dv)+'/'+FloatToStr(vars[3])+' = '+FloatToStr(i));

  Jdv:=Table1.FieldByName('J').AsFloat*0.000000001;

  Jred:=Jdv;

  //Memo1.Lines.Add('Jred ='+FloatToStr(Jred));

  //  Рассчёт моментов

  M_max_priv := vars[1]/(vars[10]*i) + (Jred+Jdv+vars[2]/(i*i) )*vars[4]*i;

  M_eqv_priv := sqrt( 0.5*sqr(Jred+Jdv+vars[2]/(i*i))*sqr(vars[4]*i) + sqr(vars[1]/(vars[10]*i))  );

  //Memo1.Lines.Add('M_max_priv ='+FloatToStr(M_max_priv));

  //Memo1.Lines.Add('M_eqv_priv ='+FloatToStr(M_eqv_priv));

  gamma_eqv := (Table1.FieldByName('Mnom').AsFloat*0.00001)/M_eqv_priv;                                                                                                             //Overheat coefficient

  gamma_per := M_max_priv/(Table1.FieldByName('Mnom').AsFloat*0.00001);                                                                                                            //Overload coefficient

  //Memo1.Lines.Add('gamma_eqv ='+FloatToStr(gamma_eqv));

  //Memo1.Lines.Add('gamma_per ='+FloatToStr(gamma_per));

  //Заполняем калькулируемое поле таблицы.