
- •Постановка задачи
- •Краткие теоретические сведения
- •1. Переходные процессы в линейных электрических цепях
- •1. Классический метод расчета переходных процессов
- •1.1Алгоритм расчета переходных процессов классическим методом
- •1.2. Операторный метод расчета переходных процессов
- •1.2.1. Преобразование Лапласа
- •1.2.2. Алгоритм расчета операторным методом
- •2. Периодические несинусоидальные токи в линейных
- •3. Выбор электродвигателей
- •3.2. Принципы выбора электродвигателей
- •3.3. Определение мощности двигателя. Выбор двигателя по каталогу
- •8.4. Определение мощности двигателей для некоторых механизмов
- •Глава2. Современные методы программирования
- •1.1 Объектно-ориентированное программирование
- •1.2 Основы визуального
- •Краткие теоретические сведения
- •Текст программы
Текст программы
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include<math.h>
#include "Unit5.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#define e 1e-5
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Button2->Enabled=false;
Button4->Enabled=false;
}
//---------------------------------------------------------------------------
double L,c,E,R1,R2,R3,idk1,idk2,idk3,ipr1,Ucdk,Ucpr,Ucp,dUc;
int i,k;
Boolean g_o=0,g_k=0;
double p [3];
double A [3];
//---------------------------------------------------------------------------
double znach1(double t)
{
return A[0]*exp(p[0]*t)+A[1]*exp(p[1]*t);
}
//---------------------------------------------------------------------------
void kv_korn(double a,double b,double c)
{
double D;
D=(b*b-(4.0*a*c));
if (D<0)
{
ShowMessage("Дискрименант меньше 0");
Abort();
}
else
{
p[0]=((-b+sqrt(D))/(2*a));
p[1]=((-b-sqrt(D))/(2*a));
}
}
//---------------------------------------------------------------------------
void klasik (zero)
{
ipr1=E/(R1+R3);
Ucpr=0;
dUc=ipr1/c ;
kv_korn(R2*c*L*(R1+R3),L*(R2+R1+R3),R2*(R1+R3));
A[1]=(ipr1/c)/(p[0]-p[1]);
A[0]=-A[1];
g_k=1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::But_kalClick(TObject *Sender)
{
try
{
E=StrToFloat(Ed_E->Text);
L=StrToFloat(Ed_L->Text)/1000.0;
c=StrToFloat(Ed_C->Text)/1000000.0;
R1=StrToFloat(Ed_R1->Text);
R2=StrToFloat(Ed_R2->Text);
R3=StrToFloat(Ed_R3->Text);
}
catch (EConvertError &E)
{
int k=MessageBox(NULL,"Вернуть значения по умолчанию?",
"Входные данные должны быть числа!",MB_ICONQUESTION+MB_YESNO);
if (k==6)
{
Ed_E->Text="100";
Ed_L->Text="5";
Ed_C->Text="50";
Ed_R1->Text="3";
Ed_R2->Text="8";
Ed_R3->Text="5";
}
Abort();
}
if ((E<e) || (L<e) || (c<e) || (R1<e) || (R2<e) || (R3<e))
{
int k=MessageBox(NULL,"Вернуть значения по умолчанию?",
"Входные данные должны быть больше 0!",MB_ICONQUESTION+MB_YESNO);
if (k==6)
{
Ed_E->Text="100";
Ed_L->Text="5";
Ed_C->Text="50";
Ed_R1->Text="3";
Ed_R2->Text="8";
Ed_R3->Text="5";
}
Abort();
}
klasik();
SG_vihod->Cells[0][0]="Uc пр=";
SG_vihod->Cells[1][0]=FloatToStr(Ucpr);
SG_vihod->Cells[0][1]="B1=";
SG_vihod->Cells[1][1]=FloatToStr(A[0]);
SG_vihod->Cells[0][2]="B2=";
SG_vihod->Cells[1][2]=FloatToStr(A[1]);
SG_vihod->Cells[0][3]="p1=";
SG_vihod->Cells[1][3]=FloatToStr(p[0]);
SG_vihod->Cells[0][4]="p2=";
SG_vihod->Cells[1][4]=FloatToStr(p[1]);
But_graf->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::But_grafClick(TObject *Sender)
{
Chart->Series[2]->Clear();
for(double t=0.0005;t<0.01;t+=0.00001)
{
Chart->Series[2]->AddXY(t,znach1(t));
} }
//Задание3
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
double M1,M2,M3,T1,T2,T3,to,N2,Ku,Mekv,PV,PVst,Pekv,Pr,mt;
//----------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
try
{
M1=StrToFloat(Edit1->Text);
M2=StrToFloat(Edit2->Text);
M3=StrToFloat(Edit3->Text);
T1=StrToFloat(Edit4->Text);
T2=StrToFloat(Edit5->Text);
T3=StrToFloat(Edit6->Text);
to=StrToFloat(Edit7->Text);
N2=StrToFloat(Edit8->Text);
//Ku=StrToFloat(Edit9->Text);
}
catch (EConvertError &E)
{
int k=MessageBox(NULL,"Вернуть значения по умолчанию?",
"Входные данные должны быть числа!",MB_ICONQUESTION+MB_YESNO);
if (k==6)
{
Edit1->Text="25";
Edit2->Text="15";
Edit3->Text="10";
Edit4->Text="15";
Edit5->Text="10";
Edit6->Text="20";
Edit7->Text="5";
Edit8->Text="950";
// Edit9->Text="0.95";
}
Abort();
}
if ((M1<e) || (M2<e) || (M3<e) || (T1<e) || (T2<e) || (T3<e) || (to<e) || (N2<e))
{
int k=MessageBox(NULL,"Вернуть значения по умолчанию?",
"Входные данные должны быть больше 0!",MB_ICONQUESTION+MB_YESNO);
if (k==6)
{
Edit1->Text="25";
Edit2->Text="15";
Edit3->Text="10";
Edit4->Text="15";
Edit5->Text="10";
Edit6->Text="20";
Edit7->Text="5";
Edit8->Text="950";
// Edit9->Text="0.95";
}
Abort();
}
mt=(M1*M1*T1+M2*M2*T2+M3*M3*T3)/(T1+T2+T3+2*to);
Mekv=exp(log(abs(mt))/2);
PVst=40;
PV=(T1+T2+T3)/(T1+T2+T3+2*to);
PV=PV*100;
Pekv=0.105*Mekv*N2;
Pr=Pekv*exp(log(abs(PV/PVst))/2);
SG_1->Cells[0][0]="Mэкв=";
SG_1->Cells[1][0]=FloatToStr(Mekv);
SG_1->Cells[0][1]="ПВ=";
SG_1->Cells[1][1]=FloatToStr(PV);
SG_1->Cells[0][2]="ПВст";
SG_1->Cells[1][2]=FloatToStr(PVst);
SG_1->Cells[0][3]="Pэкв";
SG_1->Cells[1][3]=FloatToStr(Pekv);
SG_1->Cells[0][4]="Pном=";
SG_1->Cells[1][4]=FloatToStr(Pr);
Button2->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
DBChart1->Series[0]->Clear();
DBChart1->Series[0]->AddXY(0,M1+5);
DBChart1->Series[0]->AddXY(0,M1);
DBChart1->Series[0]->AddXY(T1,M1);
DBChart1->Series[0]->AddXY(T1,0);
DBChart1->Series[0]->AddXY((T1+to),0);
DBChart1->Series[0]->AddXY((T1+to),M2);
DBChart1->Series[0]->AddXY((T1+to+T2),M2);
DBChart1->Series[0]->AddXY((T1+to+T2),0);
DBChart1->Series[0]->AddXY((T1+to+T2+to),0);
DBChart1->Series[0]->AddXY((T1+to+T2+to),M3);
DBChart1->Series[0]->AddXY((T1+to+T2+to+T3),M3);
DBChart1->Series[0]->AddXY((T1+to+T2+to+T3),0);
DBChart1->Series[0]->AddXY((T1+to+T2+to+T3+to),0);
}
//---------------------------------------------------------------------------
//Задание3
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
StringGrid1->Cells[0][0]="U(t)=";
StringGrid1->Cells[1][0]="48.7sinwt";
StringGrid1->Cells[2][0]="-16.2sin3wt";
StringGrid1->Cells[3][0]="+1.9sin5wt";
StringGrid1->Cells[4][0]="-0.99sin7wt";
StringGrid1->Cells[0][1]="i(t)=";
StringGrid1->Cells[1][1]="0.12sin(wt+97)";
StringGrid1->Cells[2][1]="-0.0135sin(3wt+92.3)";
StringGrid1->Cells[3][1]="+0.00091sin(5wt+91.5)";
StringGrid1->Cells[4][1]="-0.00036sin(7wt+91)";
StringGrid1->Cells[0][2]="w=816.5";
Button4->Enabled=true;
StringGrid1->Enabled=true;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
double w=816.5;
Chart1->Series[0]->Clear();
for(double tp=0;tp<0.7;tp+=0.043)
{
double i=0.12*sin(w*tp+97)-0.0135*sin(3*w*tp+92.3)+0.00091*sin(5*w*tp+91.5)-0.00036*sin(7*w*tp+91);
Chart1->Series[0]->AddXY(tp,i);
}
}
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Label8->Caption=Time();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Label7Click(TObject *Sender)
{
Form1->Close();
Form2->Close();
Form3->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Label6Click(TObject *Sender)
{
Form2->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image2Click(TObject *Sender)
{
Form3->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image3Click(TObject *Sender)
{
Form1->Close();
Form2->Close();
Form3->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Label10Click(TObject *Sender)
{
Form3->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1Click(TObject *Sender)
{
WinExec("hh help1.chm",SW_RESTORE);
}
//---------------------------------------------------------------------------
Приложение 2
Результаты работы программы
Задание1. «Переходные процессы в линейных электрических цепях»
Задание2. «Периодические несинусоидальные токи в линейных электрических цепях»
Задание3. «Расчёт электродвигателей»
Приложение3
Инструкция по работе с программой представлена в виде справки:
1 Все периодические функции, с которыми имеют дело в электротехнике, условиям Дирихле удовлетворяют. Поэтому производить проверку на выполнение условий Дирихле не требуется.