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

  SensorGrid.Cells[2,2]:='400';

  SensorGrid.Cells[3,2]:='27';

  SensorGrid.Cells[4,2]:='1';

  SensorGrid.Cells[5,2]:='25';

  //3-й ЧЭ

  SensorGrid.Cells[0,3]:='СКТ-6465-Д';

  SensorGrid.Cells[1,3]:='1,00';

  SensorGrid.Cells[2,3]:='400';

  SensorGrid.Cells[3,3]:='36';

  SensorGrid.Cells[4,3]:='1';

  SensorGrid.Cells[5,3]:='36';

end;

// Кнопка проверить редуктор

procedure TForm1.Button5Click(Sender: TObject);

var i: integer;

var res, plotn, J1, b, Jred, Jdv, Mnom, M_max_priv, M_eqv_priv, gamma_eqv, gamma_per: real;

begin

  if Button5.Caption = 'Проверить' then

  begin

    if (Edit18.Text = '') then

    begin

      MessageBox(Handle,'Введите отношение J/J1!','Ошибка',MB_OK or MB_ICONERROR);

      exit;

    end;

    for i:=1 to PeredGrid.RowCount-2 do

    try

      StrToFloat(PeredGrid.Cells[1,i]);

    except

      begin

        MessageBox(Handle,'Данные введены неверно','Ошибка',MB_OK or mb_ICONERROR);

        exit;

      end;

    end;

    for i:=1 to PeredGrid.RowCount-2 do

      if (StrToFloat(PeredGrid.Cells[1,i])>7.0) or (StrToFloat(PeredGrid.Cells[1,i])<=0.0) then

      begin

        MessageBox(Handle,'Передаточное число ступени должно лежать в интервале (0;7)!','Ошибка',MB_OK or MB_ICONERROR);

        exit;

      end;

    // Расчёт передаточного числа последней ступени

res:=pch(); // Расчёт передаточного числа

    for i:=1 to PeredGrid.RowCount-2 do

      res:=res/StrToFloat(PeredGrid.Cells[1,i]);

    PeredGrid.Cells[1,PeredGrid.RowCount-1] := FloatToStrF(res,ffFixed,8,6);

    if (StrToFloat(PeredGrid.Cells[1,PeredGrid.RowCount-1])>7.0) or (StrToFloat(PeredGrid.Cells[1,PeredGrid.RowCount-1])<=0.0) then

    begin

      MessageBox(Handle,'Передаточное число ступени должно лежать в интервале (0;7)!','Ошибка',MB_OK or MB_ICONERROR);

exit;

    end;

    DiameterGrid.RowCount:=PeredGrid.RowCount*2-1;

    ClearTable(DiameterGrid);

    for i:=0 to PeredGrid.RowCount do

      DiameterGrid.Cells[1,2*i+1]:='10';

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

      DiameterGrid.Cells[1,2*i]:=FloatToStrF(10*StrToFloat(PeredGrid.Cells[1,i]),ffFixed,5,4);

    //Расчёт отношения J/J1.

    plotn:=StrToFloat(Edit16.Text)*1000.0;

    b:=StrToFloat(Edit17.Text)/1000.0;

    J1:=pi*plotn*(0.00000001)*b/32;

    // Проверка Jred

    try

      Jred:=J1*StrToFloat(Edit18.Text);

    except

      begin

        MessageBox(Handle, 'Определите отношение J/J1 по номограмме','Ошибка',MB_OK or MB_ICONERROR);

        exit;

      end;

    end;

    // Проверка гамма эквивалентного и перегрузки

Jdv:=StrToFloat(EngineGrid.Cells[11,selected])*0.000000001;

    Mnom:=StrToFloat(EngineGrid.Cells[6,selected])*0.00001;

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

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

    gamma_eqv := Mnom/M_eqv_priv;                                                                                                             //Overheat coefficient

    gamma_per := M_max_priv/Mnom;                                                                                                            //Overload coefficient

    // Вывод значений кожффициентов и Jred

    Edit19.Text := FloatToStr(Jred);

    Edit11.Text := FloatToStr(gamma_eqv);

    Edit12.Text := FloatToStr(gamma_per);

    if (gamma_eqv>=0.7) and (gamma_per<=2.8) and (gamma_per>=1.3) then

    begin

      yes.Visible:=true;

      Button5.Caption := 'Дальше >>';

      mmRedu.Lines.Add('Двигатель подходит, для дальнейшего рассчёта нажмите кнопку "Дальше >>"');

end

    else begin

      no.Visible:=true;

      mmRedu.Lines.Add('Двигатель не подходит, выберите другой двигатель.');

      if not(gamma_eqv >= 0.7) then no.Caption:='Двигатель не подходит '+#10+#13+'по перегреву'