Современные методы программирования и теоретические основы электротехники

Автор работы: Пользователь скрыл имя, 25 Декабря 2012 в 21:03, курсовая работа

Описание работы

Целью данного курсового проекта является получение законов изменения электрических величин во времени, расчет машин в режиме двигателя и генератора, а так же асинхронных двигателей. Для этого необходимо изучить методику расчета электрических цепей и расчетов двигателей. Решение должно быть получено в результате выполнения соответствующей программы для ЭВМ, составленной самим студентом.

Содержание работы

ВВЕДЕНИЕ 4
1. ПОСТАНОВКА ЗАДАЧИ 5
2. ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ 6
3. ВЫБОР АЛГОРИТМА И МЕТОДОВ РЕШЕНИЯ ЗАДАЧ ПРОЕКТИРОВАНИЯ 7
3.1 МЕТОД РАСЧЕТА ИНТЕГРАЛА ДЮАМЕЛЯ 7
3.2 ЭЛЕКТРИЧЕСКИЕ МАШИНЫ ПОСТОЯННОГО ТОКА 11
3.3 ТРЕХФАЗНЫЕ АСИНХРОННЫЕ ДВИГАТЕЛИ 15
4. ПРОГРАМНАЯ РЕАЛИЗАЦИЯ 19
4.1 C++BUILDER 6 19
4.2ОПИСАНИЕФУНКЦИЙ 22
4.3 КОД ПРОГРАММЫ. 23
4.4 БЛОК – СХЕМА ВЫВОДА ГРАФИКОВ 51
ЗАКЛЮЧЕНИЕ 52
ЛИТЕРАТУРА. 53

Файлы: 1 файл

Пояснительная записка СМП.docx

— 530.38 Кб (Скачать файл)

{

    //Бегущая строка;

static String InitialCaption = GradientLabel1->Caption;

    GradientLabel1->Caption =  GradientLabel1->Caption.SubString(2,(GradientLabel1->Caption.Length() - 1))+ GradientLabel1->Caption.SubString(1,1);

    if(!Caption.Length())

      GradientLabel1->Caption = InitialCaption;

}

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

 

void __fastcall TForm1::ColorButton1Click(TObject *Sender)

{

   double n1,I1nom,Snom,Nnom=0.795,cosF1nom=0.46;

   double P1nom,Mnom;

  //Частота вращения магнитного  поля;

     float f=Edit1->Text.ToDouble();

     int p=Edit2->Text.ToInt();

     float n2nom=Edit8->Text.ToDouble();

     float Pnom=Edit9->Text.ToDouble();

     float U1nom=Edit10->Text.ToDouble();

  n1=60*f/p;

  Form1->Edit3->Text=FloatToStr(n1)+" об/мин";

  //Скольжение в номинальном режиме;

  Snom=1-n2nom/n1;

  Form1->Edit7->Text=FloatToStrF(Snom,ffFixed,8,4);

  //Номинальный момент двигателя;

  Mnom=Pnom*9.55/n2nom;

  Form1->Edit4->Text=FloatToStrF(Mnom,ffFixed,8,3)+" Нм";

  //Активная мощность подведенная к двигателю;

   P1nom=Pnom/Nnom;//Nnom-КПД;

   Form1->Edit5->Text=FloatToStrF(P1nom,ffFixed,8,3)+" Вт";

  //Номинальный ток двигателя;

  I1nom=P1nom/(sqrt(3)*U1nom*cosF1nom);

  Form1->Edit6->Text=FloatToStrF(I1nom,ffFixed,8,3)+" A";

 

  //Построение графиков;

 

  Form1->Chart1->Series[0]->Clear();

  Form1->Chart1->Series[1]->Clear();

  Form2->Chart1->Series[0]->Clear();

  Form2->Chart2->Series[0]->Clear();

 

    int g=0;

     //   for(int i = 1; i<StringGrid1->RowCount; i++)

        for(int j = 1; j<StringGrid1->ColCount; j++)

        {

                //StringGrid1->Cells[i][j]=random(10);

                x[g]=StrToFloat(StringGrid1->Cells[j][0].c_str());

                y[g]=StrToFloat(StringGrid1->Cells[j][1].c_str());

                z[g]=StrToFloat(StringGrid1->Cells[j][2].c_str());

               Form1->Chart1->Series[0]->AddXY((x[g]),(y[g]));

               Form1->Chart1->Series[1]->AddXY((x[g]),(z[g]));

                P1nom=Pnom/y[g];//Nnom-КПД;

               Form2->Chart1->Series[0]->AddXY((x[g]),P1nom);

                I1nom=P1nom/(sqrt(3)*U1nom*z[g]);

                Form2->Chart2->Series[0]->AddXY((x[g]),I1nom);

                g++;

 

        }

         for(int i=0; i<g; i++)

        {

             Memo1->Lines->Add(FloatToStrF(x[i] ,ffFixed,5,3));

                  Memo1->Lines->Add(FloatToStrF(y[i] ,ffFixed,5,3));

                   Memo1->Lines->Add(FloatToStrF(z[i] ,ffFixed,5,3));

                     Memo1->Lines->Add("\n");

         }

  

}

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

void __fastcall TForm1::ColorButton2Click(TObject *Sender)

{

if (MessageBox(0,"вы действительно хотите поменять параметры?","внимание!!!", MB_YESNO) == mrYes)

  {

  Edit1->Text="50";

  Edit2->Text="2";

  Edit8->Text="1475";

  Edit9->Text="4500";

  Edit10->Text="380";

  }

}

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

void __fastcall TForm1::ColorButton3Click(TObject *Sender)

{

if (MessageBox(0,"вы действительно хотите посмотреть графики?","внимание!!!", MB_YESNO) == mrYes)

  {

        Form2->Visible=true;

  }

}

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

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{

        char WinDirChar[255];

        GetWindowsDirectory(WinDirChar,255);

        String IniFile = (String)WinDirChar +"\\INIin1.ini";

 

TIniFile *Ini = new TIniFile(IniFile);

// Запись в ini файл;

  //Асинхронные двигатели;

  Ini->WriteString("Edits","Edit1",Edit1->Text);

  Ini->WriteString("Edits","Edit2",Edit2->Text);

  Ini->WriteString("Edits","Edit8",Edit8->Text);

  Ini->WriteString("Edits","Edit9",Edit9->Text);

  Ini->WriteString("Edits","Edit10",Edit10->Text);

 

  //МПТ в режиме генератора;

 

  Ini->WriteString("Edits","Edit11",Edit11->Text);

  Ini->WriteString("Edits","Edit12",Edit12->Text);

  Ini->WriteString("Edits","Edit13",Edit13->Text);

  Ini->WriteString("Edits","Edit14",Edit14->Text);

  Ini->WriteString("Edits","Edit15",Edit15->Text);

 

  //МПТ в режиме двигателя;

  Ini->WriteString("Edits","Edit21",Edit21->Text);

  Ini->WriteString("Edits","Edit22",Edit22->Text);

  Ini->WriteString("Edits","Edit23",Edit23->Text);

  Ini->WriteString("Edits","Edit24",Edit24->Text);

  Ini->WriteString("Edits","Edit25",Edit25->Text);

 

  //Для четырехполюсников;

  Ini->WriteString("Edits","Edit31",Edit31->Text);

  Ini->WriteString("Edits","Edit32",Edit32->Text);

  Ini->WriteString("Edits","Edit33",Edit33->Text);

  Ini->WriteString("Edits","Edit34",Edit34->Text);

 

  //Для самой формы;

  Form1->Left = Ini->ReadInteger("Position","left",437);

  Form1->Top = Ini->ReadInteger("Position","top",139);

 

  Form1->Height = Ini->ReadInteger("Size","Height",600);

  Form1->Width = Ini->ReadInteger("Size","Width",800);

}

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

void __fastcall TForm1::BitmapButton6Click(TObject *Sender)

{

   //Загрузка параметров;

  // загрузка (-------)

  Form1->AdvProgressBar1->Max=100;

   Form1->AdvProgressBar1->Position=0;

     for(char g=0;g<=100;g++)

        {

          Form1->AdvProgressBar1->Position=g;

           Sleep(10);//Делаем задержку;

        }

//МПТ  в режиме генератра;

  float Pnom=Edit11->Text.ToDouble();

  float Unom=Edit12->Text.ToDouble();

  float nnom=Edit13->Text.ToDouble();

  float Ria=Edit14->Text.ToDouble();

  float Rv=Edit15->Text.ToDouble();

 

  float Inom,Iv,Iianom,Eia,Pem,w,n,Pm,Pne,Pnv,Pob,P1,kpd;

  //3.1 Номинальный ток генератора;

  Inom=Pnom/Unom;

  Form1->Edit16->Text= FloatToStrF(Inom,ffFixed,8,3)+" A";

  //3.2 Ток возбуждения;

   Iv=Unom/Rv;

  //3.3 Ток якоря в номинальном  режиме;

  Iianom=Inom+Iv;

  //3.4 ЭДС якоря;

  Eia=Unom+(Iianom*Ria);

  Form1->Edit17->Text= FloatToStrF(Eia,ffFixed,8,3)+" В";

  //3.5 Электромагнитная мощность;

  Pem=Eia*Iianom;

  //3.5 Электромагнитный момент;

  const float pi=3.14;

  w=(pi*nnom)/30;

  n=Pem/w;

  Form1->Edit19->Text= FloatToStrF(n,ffFixed,8,3)+" Нм";

  //3.7 Мощность механических,магнитных и добавочных потерь;

  Pm=0.06*Pnom;

  //3.8 Мощность электрических потерь  в цепи якоря;

  Pne=Ria*pow(Iianom,2);

  //3.9 Мощность электрических потерь  в цепи возбуждения;

  Pnv=pow(Iv,2)*Rv;

  //3.10 Мощность потерь в генераторе;

  Pob=Pm+Pne+Pnv;

  //3.11 Мощность первичного двигателя;

  P1=Pnom+Pob;

  Form1->Edit20->Text= FloatToStrF(P1,ffFixed,8,3)+" Вт";

  //3.12 КПД генератора;

  kpd=(P1-Pob)/P1;

  Form1->Edit18->Text= FloatToStrF(kpd,ffFixed,8,3)+"";

  ShowMessage("Загрузка параметров завершена!!!");

  }

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

void __fastcall TForm1::ColorButton4Click(TObject *Sender)

{

if (MessageBox(0,"вы действительно хотите поменять параметры?","внимание!!!", MB_YESNO) == mrYes)

  {

                        Edit11->Text=10000;

                        Edit12->Text=230;

                        Edit13->Text=1450;

                        Edit14->Text=0.3;

                        Edit15->Text=150;

   Form1->AdvProgressBar1->Max=100;

   Form1->AdvProgressBar1->Position=0;

     for(char g=0;g<=100;g++)

        {

          Form1->AdvProgressBar1->Position=g;

           Sleep(10);//Делаем задержку;

        }

        ShowMessage("Загрузка параметров завершена!!!");

}

}

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

void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)

{

if (MessageBox(0,"вы действительно хотите выйти из программы?","внимание!!!", MB_YESNO) == mrYes)

  CanClose=true;

  else CanClose=false;

}

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

 

void __fastcall TForm1::BitmapButton5Click(TObject *Sender)

{

//Загрузка  параметров;

  // загрузка (-------)

  Form1->AdvProgressBar2->Max=100;

   Form1->AdvProgressBar2->Position=0;

     for(char g=0;g<=100;g++)

        {

          Form1->AdvProgressBar2->Position=g;

           Sleep(10);//Делаем задержку;

        }

//МПТ  в режиме двигателя;

  float Pnom1=Edit21->Text.ToDouble();

  float Unom1=Edit22->Text.ToDouble();

  float nnom1=Edit23->Text.ToDouble();

  float Ria1=Edit24->Text.ToDouble();

  float kpd2=Edit25->Text.ToDouble();

 

     float P1nom,Inom1,Iianom1,Ip,Iiap,Rp,Rv,w1,Eia1,CoF,Mp,Mnom,Mpol;

    float Mo,Ioia,Io,w2,no;

   //1.Потребляемая из сети мощность в номинальном режиме;

    P1nom=Pnom1/kpd2;

   //2.Номинальный ток двигателя;

    Inom1=P1nom/Unom1;

   Form1->Edit26->Text= FloatToStrF(Inom1,ffFixed,8,3)+" A";

   //3.Номинальный ток якоря;

   const float Iv1=3.44;

    Iianom1=Inom1-Iv1;

   //4.Начальный пусковой момент при заданной начальной пусковой кратности;

   Ip=Inom1*2;

  //5.Начальный пусковой ток якоря;

   Iiap=Ip-Iv1;

  //6.Начальное сопротивление якорной  цепи в момент пуска;

   Rp=Unom1/Iiap;

  //7.Пусковое сопротивление;

   Rv=Rp-Ria1;

   Form1->Edit27->Text= FloatToStrF(Rv,ffFixed,8,3)+" Ом";

  //8.Номинальная угловая скорость врщения;

   const float pi=3.14;

   w1=(pi*nnom1)/30;

   //9.ЭДС якоря при номинальной нагрузке;

   Eia1=Unom1-Iianom1*Ria1;

   //10.Постоянная машина при постоянном  магнитном потоке;

   CoF=Eia1/w1;

   //11.Электромагнитный начальный пусковой  момент;

//   Mp=CoF*Iiap;

   //12.Электромагнитный момент в  номинальном режиме;

   Mnom=CoF*Iianom1;

   //13.Полезный вращающий момент  на валу двигателя;

   Mpol=Pnom1/w1;

   //14.Момент холостого хода;

   Mo=Mnom-Mpol;

  Form1->Edit29->Text= FloatToStrF(Mo,ffFixed,8,3)+" Нм";

   //15.Ток якоря в режиме холостого хода;

    Ioia=Mo/CoF;

   //16.Ток холостого двигателя;

    Io=Ioia+Iv1;

    Form1->Edit30->Text= FloatToStrF(Io,ffFixed,8,3)+" A";

   //17.Частота вращения в режиме холостого хода;

    w2=(Unom1-(Ioia*Ria1))/CoF;

    no=30*w2/pi;

  Form1->Edit28->Text= FloatToStrF(no,ffFixed,8,3)+" об/мин";

  ShowMessage("Загрузка параметров завершена!!!");

}

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

 

void __fastcall TForm1::ColorButton5Click(TObject *Sender)

{

if (MessageBox(0,"вы действительно хотите поменять параметры?","внимание!!!", MB_YESNO) == mrYes)

  {

                        Edit21->Text=4200;

                        Edit22->Text=220;

                        Edit23->Text=1450;

                        Edit24->Text=0.15;

                        Edit25->Text=0.78;

   Form1->AdvProgressBar2->Max=100;

   Form1->AdvProgressBar2->Position=0;

     for(char g=0;g<=100;g++)

        {

          Form1->AdvProgressBar2->Position=g;

           Sleep(10);//Делаем задержку;

        }

        ShowMessage("Загрузка параметров завершена!!!");

}

}

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

 

void __fastcall TForm1::ColorButton6Click(TObject *Sender)

{

if (MessageBox(0,"вы действительно хотите поменять параметры?","внимание!!!", MB_YESNO) == mrYes)

  {

                        Edit31->Text=15;

                        Edit32->Text=1.2;

                        Edit33->Text=22000;

                        Edit34->Text=0.000125;

   Form1->AdvProgressBar3->Max=100;

   Form1->AdvProgressBar3->Position=0;

     for(char g=0;g<=100;g++)

        {

          Form1->AdvProgressBar3->Position=g;

           Sleep(10);//Делаем задержку;

        }

        ShowMessage("Загрузка параметров завершена!!!");

}

}

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

void __fastcall TForm1::BitmapButton7Click(TObject *Sender)

{

//Загрузка  параметров;

  // загрузка (-------)

  Form1->AdvProgressBar3->Max=100;

   Form1->AdvProgressBar3->Position=0;

     for(char g=0;g<=100;g++)

        {

          Form1->AdvProgressBar3->Position=g;

           Sleep(10);//Делаем задержку;

        }

  //Очистка графиков;

  Form3->Chart1->Series[0]->Clear();

  Form3->Chart2->Series[0]->Clear();

  Form3->Chart1->Series[1]->Clear();

  Form3->Chart2->Series[1]->Clear();

 

  double X=Edit33->Text.ToDouble();

  double Y=Edit34->Text.ToDouble();

     function  r;

      r.Set( X, Y);

      r.Run();

   //M(p)=0;

  // float p1=-2.75/2;

  //  float p2=p1;

//Решение  квадратного уравнения;

double x1,x2,x3,x4;

  double A=pow(X,2)*pow(Y,2);

  double R11=22000;double C11=0.000125;

  double A1=pow(R11,2)*pow(C11,2);

  double B=4*X*Y;

  double B1=4*R11*C11;

  double C=4;

  double C1=4;

  double D;

  double D1;

  const double t=1e-8;

  double Np1=1;

double Np2=1;

  double Mp1,Mp2;

  double Mp3,Mp4;

  int q=0;

if (abs(A1)<t && abs(B1)<t && abs(C1)<t )

{

  ShowMessage("Уравнение выраждено!!");

}

  else

    {

      D1=pow(B1,2)-4*A1*C1;

     }

  if(D1>-t)

  {

    if(abs(D1)<t)

    {

     D1=0;

      x3=(-B1)/(2*A1);

      x4=x3;

       Mp3=2.0*7.56*x3+11.0;

       Mp4=2.0*7.56*x4+11.0;

      ShowMessage("2 одинаковых корня!!");

      q=1;

    }

    else

    {

   x3=(-B1+sqrt(D1))/(2*A1);

   x4=(-B1-sqrt(D1))/(2*A1);

   Mp3=2.0*7.56*x3+11.0;

   Mp4=2.0*7.56*x4+11.0;

      ShowMessage(" 2 разных корня!");

    q=1;

    }

  }

  else

   {

   ShowMessage("Действительных корней нет!!!");

   }

 

  double  Mp33=Np1/Mp3;

  double Mp44=Np2/Mp4;

 

Form1->Edit35->Text= FloatToStrF(x3,ffFixed,6,4);

Form1->Edit36->Text= FloatToStrF(x4,ffFixed,6,4);

 

//-------------------------------------------------------;

int z=0;

if (abs(A)>t && abs(B)>t  )

{

  D=pow(B,2)-4*A*C;

  }

else

    {

    ShowMessage("Уравнение выраждено!!!");

    z=1;

     }

if(z!=1)

{

  if(D>-t)

  {

    if(abs(D)<t)

    {

     D=0;

      x1=(-B)/(2*A);

      x2=x1;

       Mp1=(2.0*7.56*x1+11.0);

       Mp2=2.0*7.56*x2+11.0;

      ShowMessage("2 одинаковых корня");

      z=0;

      q=1;

    }

    else

    {

   x1=(-B+sqrt(D))/(2*A);

   x2=(-B-sqrt(D))/(2*A);

   Mp1=(2.0*7.56*x1+11.0);

   Mp2=(2.0*7.56*x2+11.0);

    q=1;

    z=0;

       ShowMessage("2 разных корня");

    }

  }

  else

   {

   ShowMessage("Действительных корней нет!!!");

    z=1;

   };

};

  double  Mp11=Np1/Mp1;

  double Mp22=Np2/Mp2;

  if(z!=1)

{

Form1->Edit37->Text= FloatToStrF(x1,ffFixed,6,4);

Form1->Edit38->Text= FloatToStrF(x2,ffFixed,6,4);

};

//---------------------------------------------------;

  float Uvix1,Uvix2;

  for(float l=0;l<=5;l+=0.2)

{

  if(q==1)

  {

   if (z!=1)

   {

   Uvix1=(Np1*exp(x1*l)/Mp1)+(Np2*exp(x2*l)/Mp2);

   Form3->Chart3->Series[0]->AddXY(l,Uvix1);

   }

    Uvix2=(Np1*exp(x3*l)/Mp3)+(Np2*exp(x4*l)/Mp4);

   Form3->Chart3->Series[1]->AddXY(l,Uvix2);

 

   }

   else

   {

   if(z!=1)

   {

   Uvix1=(Np1*exp(x1*l)/Mp1)+(Np2*exp(x2*l)/Mp2);

   Form3->Chart3->Series[0]->AddXY(l,Uvix1);

    }

Информация о работе Современные методы программирования и теоретические основы электротехники