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

      //  Сюда идём со случая 2 если при пепесчёте  1/T3 стало правее 1/tau2

else MmEvent.Lines.Add(s5);

  end;

  // T3 правее tau2

  if (1/T3) >= (1/(vars[9]*0.001)) then

  begin

    T3 := sqrt(vars[7]*(vars[7]-1))/(3*W0*(vars[7]+1)); // Пересчитываем T3

    MmEvent.Lines.Add(s3);

    MmEvent.Lines.Add('(1/T3) = '+FloatToStrF((1/T3), ffFixed, 6,3)+'.');

    MmEvent.Lines.Add(s4);

    Form1.Enabled := False;

    FmChooseT3.Show;

    State := 3;

  end

  else DrawGraphics(); // Начинаем рисовать графики

end;

procedure TForm1.SensorGridClick(Sender: TObject);

begin

  bbTestCh.Enabled := True;

end;

procedure TForm1.Button7Click(Sender: TObject);

var

  Mnom,Wdvn,Mp,Uupr: real;

begin

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

  begin

    CopyAppropriate(); // Копируем подходящие по перегрузке и перегреву двигатели

    Button7.Caption := 'Расчёт ПФ';

    Button1.Enabled := False; // Чтобы не вызвало исключение

    MmBase.Lines.Add('Расчитаем передаточную функцию выбранного двигателя, для этого'

    +' воспользуемся формулами №1. Для расчёта нажмите кнопку "Расчёт ПФ."');

end

 else if Button7.Caption = 'Расчёт ПФ' then

 begin

   // !!! <тест 5>

   if test_res[5].right<5 then

   begin

     Form1.Enabled:=false;

     Form2.SetTest(5);

     Form2.Show;

   end

   else begin

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

    Button1.Enabled := False; // Чтобы не вызвало исключение

    Button5.Enabled := False; // Так же с редуктором

    // Для построения ПФ двигателя

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

Wdvn:=2*pi*StrToFloat(EngineGrid.Cells[8,selected])/60;

    Mp:=StrToFloat(EngineGrid.Cells[7,selected])*0.00001;  // пусковой момент

    Uupr:=StrToFloat(EngineGrid.Cells[12,selected]);  // Напряжение управления

    Kdvi:=Mnom*Wdvn/((Mp-Mnom)*Uupr); // Коэффициент усиления двигателя

    // Построение ПФ двигателя

    MmBase.Lines.Add('Передаточная функция выбранного двигателя, '+EngineGrid.Cells[1,selected]+':');

    MmBase.Lines.Add('');

    MmBase.Lines.Add('                        '+FloatToStrF(Kdvi, ffFixed, 5, 2));

    MmBase.Lines.Add('     W(p) = -----------------------');

    MmBase.Lines.Add('                  p*('+FloatToStr(StrToFloat(EngineGrid.Cells[10,selected])*0.001)+'*p+1)');

    MmBase.Lines.Add('');

    MmBase.Lines.Add('Для продолжения нажмите кнопку "Дальше >>".');

    {// Ставим курсор в начало MmRedu !!!

MmBase.SetFocus;

    MmBase.SelStart := Memo1.Perform(EM_LINEINDEX, 0, 0);  // Даёт 0 строку

    MmBase.Perform(EM_SCROLLCARET, 0, 0);}

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

   end; //else begin

 end  // else if Button7.Caption = 'Расчёт ПФ' then

 else if Button7.Caption = 'Дальше >>' then

 begin

  // !!! <тест 2>

  if test_res[2].right<5 then

  begin

    Form1.Enabled:=false;

    Form2.SetTest(2);

    Form2.Show;

  end

  else begin

    // Очистка полей ввода данных редуктора

Edit19.Clear;

    Edit11.Clear;

    Edit12.Clear;

    PageControl1.ActivePageIndex:=2;

  // !!! <тест 2>

    // Вывод информации о расчёте редуктора

    mmRedu.Clear;

    mmRedu.Lines.Add('Подходящий двигатель выбран, теперь необходимо выбрать редуктор и пересчитать двигатель с учётом редуктора.');

    mmRedu.Lines.Add('Выбирите число ступеней редуктора. С точки зрения уменьшения габаритов и люфтов редуктора число ступеней'+

      ' желательно брать наименьшим. Для определения передаточного числа каждой ступени редуктора пользуйтесь номограммой №1.'+

      ' Диаметры нечётных шестерён редуктора примем равными 10 мм, тогда для расчёта диаметров чётных шестерён'+

      ' редуктора используйте "Рассчётные формулы №2"');

    mmRedu.Lines.Add('По номоргамме №2 определяют отношение момента инерции редуктора к моменту инерции первой ступени.'+