- •Часть1 Расчетно-конструкторская
- •Введение
- •Преимущества оборудования кластерного типа.
- •Установка нанесения слоя подзатворного диэлектрика.
- •Выбор и обоснование варианта компоновки разрабатываемой установки.
- •Назначение модуля пирогенного окисления и условия его эксплуатации.
- •Устройство и работа модуля.
- •Устройство и работа составных частей модуля. Функции системы управления модулем
- •Тепловой и электрический расчет нагревателя пирогенной горелки.
- •Основные формулы и соотношения и допущения.
- •Описание алгоритма программы.
- •Описание программной реализации алгоритма.
- •Требования к системе.
- •Процесс инсталляции программы.
- •Запуск программы.
- •Описание меню программы.
- •Работа программы.
- •Результаты работы программы.
- •*Мгиэт(ту) 1997г.*
Результаты работы программы.
При помощи разработанной программы был произведен тепловой и электрический расчет нагревателя пирогенной горелки:
Исходные данные:
Результаты вычислений:
По результатам работы программы определены основные параметры разрабатываемого устройства, сделаны выводы о соблюдении условий по ваттной нагрузке. Полученные данные полностью согласуются с параметрами, определенными ранее при помощи оценочных расчетов и экспериментальных прогонов установки.
Примечание. Исходные тексты программы наObject Pascal приведены в приложении.
Главный файл проекта:
program ProjectTerra;
uses
Forms,
SVDal in 'SVDal.pas' {SetVar},
terra in 'terra.pas' {Form1},
About2 in 'About2.pas' {Form2},
scheme in 'scheme.pas' {Form3};
{$R *.RES}
begin
Application.Initialize;
Application.Title := 'Terra Incognita';
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TSetVar, SetVar);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.Run;
end.
Диалог ввода переменных:
unit SVDal;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Mask, CurrEdit, Spin;
Type
InputData = record
di: double;
d1: double;
d2: double;
d3: double;
d4: double;
dpr: double;
dnam: double;
dmagr: double;
res: double;
time: double;
sopr: double;
sec: longint;
num: longint;
end;
type
TSetVar = class(TForm)
Label1: TLabel;
GroupBox1: TGroupBox;
Edit1: TCurrencyEdit;
Edit7: TCurrencyEdit;
Edit2: TCurrencyEdit;
Edit3: TCurrencyEdit;
Edit4: TCurrencyEdit;
Edit5: TCurrencyEdit;
Edit8: TCurrencyEdit;
Edit9: TCurrencyEdit;
Button1: TButton;
Edit6: TCurrencyEdit;
Label6: TLabel;
Label10: TLabel;
CurrencyEdit1: TCurrencyEdit;
Label11: TLabel;
CurrencyEdit2: TCurrencyEdit;
GroupBox3: TGroupBox;
Label12: TLabel;
Label13: TLabel;
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
Label14: TLabel;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
private
OKPressed: Boolean;
{ Private declarations }
public
{ Public declarations }
end;
var
SetVar: TSetVar;
idata: InputData;
implementation
uses terra;
{$R *.DFM}
procedure TSetVar.FormShow(Sender: TObject);
begin
Edit1.Value := idata.di;
Edit2.Value := idata.d1;
Edit3.Value := idata.d2;
Edit4.Value := idata.d3;
Edit5.Value := idata.d4;
Edit7.Value := idata.dpr;
Edit8.Value := idata.dnam;
Edit9.Value := idata.dmagr;
Edit6.Value := idata.res;
CurrencyEdit1.Value:=idata.sopr;
CurrencyEdit2.Value:=idata.time;
SpinEdit1.Value:=idata.sec;
SpinEdit2.Value:=idata.num;
OKPressed := False;
end;
procedure TSetVar.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if OKPressed Then
Begin
if
((Edit1.Value<=Edit2.Value)or(Edit2.Value<=Edit3.Value)
or(Edit3.Value<=Edit4.Value)or(Edit4.Value<=Edit5.Value)
or(Edit8.Value<=2*Edit7.Value)or(Edit9.Value<=2*Edit7.Value)
or(Edit1.Value<=0)or(Edit2.Value<=0)or(Edit3.Value<=0)
or(Edit4.Value<=0)or(Edit5.Value<=0)or(Edit7.Value<=0)
or(Edit8.Value<=0)or(Edit9.Value<=0)or(((Edit3.ValueEdit4.Value)/ 2<=Edit8.Value)or(Edit6.Value<=Edit7.Value)or(SpinEdit1.Value<=0 )or(SpinEdit2.Value<=0)or(CurrencyEdit2.Value<=0))
then
begin
Application.MessageBox('Подумайте еше разок хорошенько!','Некорректный ввод!',MB_OK+MB_ICONERROR);
Action:=caNone;
OKPressed := False;
end Else
Begin
idata.di := Edit1.Value;
idata.d1 := Edit2.Value;
idata.d2 := Edit3.Value;
idata.d3 := Edit4.Value;
idata.d4 := Edit5.Value;
idata.dpr := Edit7.Value;
idata.dnam := Edit8.Value;
idata.dmagr := Edit9.Value;
idata.res := Edit6.Value;
idata.sec := SpinEdit1.Value;
idata.num := SpinEdit2.Value;
idata.time := CurrencyEdit2.Value;
Form1.SpeedButton1.Enabled:=TRUE;
Form1.SpeedButton7.Enabled:=TRUE;
Form1.N14.enabled:=TRUE;
Form1.N8.enabled:=TRUE;
End;
end;
end;
procedure TSetVar.Button1Click(Sender: TObject);
begin
OKPressed := True;
Form1.ProgressBar1.Position:=0;
Form1.Label4.Caption:='0';
Form1.Label3.Caption:='N/D';
Form1.Label8.Caption:='N/D';
Form1.Label10.Caption:='N/D';
Form1.Label12.Caption:='N/D';
Form1.Label14.Caption:='N/D';
end;
end.
Главное окно программы:
unit terra;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, ComCtrls, Buttons, ExtCtrls, AppEvent, RXShell, RXSlider, RXClock,
RXCtrls, Animate, StdCtrls, RXSpin, RXDice, SpeedBar, OleCtnrs, PicClip;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
Panel1: TPanel;
SpeedButton1: TSpeedButton;
RxLabel1: TRxLabel;
Bevel1: TBevel;
SpeedButton7: TSpeedButton;
StatusBar1: TStatusBar;
ProgressBar1: TProgressBar;
N14: TMenuItem;
N4: TMenuItem;
RxLabel2: TRxLabel;
Bevel2: TBevel;
Label1: TLabel;
SpeedButton8: TSpeedButton;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
N15: TMenuItem;
SpeedButton5: TSpeedButton;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N13Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure SpeedButton8Click(Sender: TObject);
procedure SpeedButton7Click(Sender: TObject);
procedure FormOnClic(Sender: TObject);
procedure FormClick(Sender: TObject);
private
procedure DisplayHint(Sender: TObject);
{ Private declarations }
public
{ Public declarations }
protected
Procedure CreateParams(var Params: TCreateParams); override;
end;
var
Form1: TForm1;
implementation
uses SVDal, About2, scheme,math;
{$R *.DFM}
Procedure TForm1.CreateParams(var Params: TCreateParams);
Begin
Inherited CreateParams(Params);
Params.Style := Params.Style and not (WS_MAXIMIZEBOX or WS_THICKFRAME);
End;
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
SetVar.ShowModal;
end;
procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
iData.di:=125;
iData.d1:=88;
iData.d2:=72;
iData.d3:=40;
iData.d4:=12;
iData.dpr:=1;
iData.dnam:=8;
iData.dmagr:=100;
iData.res:=1.5;
iData.sopr:=1.2;
iData.time:=10;
iData.sec:=2;
iData.num:=4;
SpeedButton1.Enabled:=TRUE;
SpeedButton7.Enabled:=TRUE;
N8.Enabled:=TRUE;
N14.Enabled:=TRUE;
ProgressBar1.Position:=0;
Label4.Caption:='0';
end;
procedure TForm1.N10Click(Sender: TObject);
begin
SetVar.ShowModal;
end;
procedure TForm1.N13Click(Sender: TObject);
var userResponse : integer;
begin
userResponse := Application.MessageBox('Программа Terra предназначена для произв'+
'едения теплового и электрического расчета нагревателя пирогенной горелки','О программе',MB_OK+
MB_ICONINFORMATION+MB_SYSTEMMODAL);
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
iData.di:=0;
iData.d1:=0;
iData.d2:=0;
iData.d3:=0;
iData.d4:=0;
iData.dpr:=0;
iData.dnam:=0;
iData.dmagr:=0;
iData.res:=0 ;
iData.sopr:=0;
iData.time:=0;
iData.sec:=0;
iData.num:=0;
SpeedButton1.Enabled:=FALSE;
SpeedButton7.Enabled:=FALSE;
N8.Enabled:=FALSE;
N14.Enabled:=FALSE;
ProgressBar1.Position:=0;
Label4.Caption:='0';
Label4.Caption:='0';
Label3.Caption:='N/D';
Label8.Caption:='N/D';
Label10.Caption:='N/D';
Label12.Caption:='N/D';
Label14.Caption:='N/D';
end;
procedure TForm1.N12Click(Sender: TObject);
begin
Form2.ShowModal;
end;
procedure TForm1.N8Click(Sender: TObject);
begin
Form1.SpeedButton1Click(Form1);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnHint:=DisplayHint;
end;
procedure TForm1.DisplayHint(Sender: TObject);
begin
StatusBar1.SimpleText:=Application.Hint;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.SpeedButton8Click(Sender: TObject);
begin
Form3.Show;
end;
{==================================================}
procedure TForm1.SpeedButton7Click(Sender: TObject);
var
N:integer;
U,R,l,powerRes,powerH,powerO:double;
function GetRe(w,l,v:double):double;
begin
GetRe:= w*l/v;
end;
function GettGsr(tst,tin,tout:double):double;
begin
GettGsr:= tst-((tout-tin)/ln((tst-tin)/(tst-tout)));
end;
{=====================================================}
procedure HDefineTemp(var powerH:double,N:integer);
const
roH: double =0.4;
laH: double =387E-3;
vH: double =1;
CpH: double =14655;
G: double =2.8E-5;
var
F,tPrev,tHsten,alpha,Nu,Qst,Qg,Qpot,Pe:double;
begin
tHsten:=N;
F:=pi*iData.d3*iData.dmagr*1E-6;
Pe:=4*G*roH*CpH*1000/(pi*(iData.d3-iData.d4)*laH);
If Pe*(iData.d3-iData.d4)/iData.dmagr>12
then Nu:= 1.61*Power((Pe*(iData.d3-iData.d4)/iData.dmagr),1/3)
else Nu:= 3.66;
alpha:=Nu*laH*1000/(iData.d3-iData.d4);
repeat
Qst:=alpha*F*(tHsten-GettGsr(tHsten, tPrev,N));
Qg:=CpH*roH*G*(N-tPrev);
Qpot:=2*pi*0.15*(tHsten-30)*iData.dmagr*1E-3/ln(iData.di/iData.d3);
tHSten:=tHsten+0.5;
until (Qst>(Qg+Qpot));
powerH:=Qst;
end;
{==================================================}
procedure ODefineTemp(var powerO:double,N:integer);
const
roO: double =0.6;
laO: double =52E-3;
vO: double =1;
CpO: double =754;
G: double =1.2E-4;
var
F, tPrev,tOsten,alpha,Nu,Qst,Qg,Qpot,Pe:double;
begin
tOsten:=N;
F:=pi*iData.d2*iData.dmagr*1E-6;
Pe:=4*G*roO*CpO*1000/(pi*(iData.d1-iData.d2)*laO);
If Pe*(iData.d1-iData.d2)/iData.dmagr>70
then Nu:= 1.85*Power((Pe*(iData.d1-iData.d2)/iData.dmagr),1/3)
else Nu:= 7.6;
alpha:=Nu*laO*1000/(iData.d1-iData.d2);
repeat
Qst:=alpha*F*(tOsten-GettGsr(tOsten, tPrev,N));
Qg:=CpO*roO*G*(N- tPrev);
Qpot:=2*pi*0.15*(tOsten-30)*iData.dmagr*1E-3/ln(iData.di/iData.d1);
tOSten:=tOsten+0.5;
until (Qst>(Qg+Qpot));
powerO:=Qst;
end;
begin
For N = 20 to 800 do
begin
ODefineTemp(powerO,N);
ProgressBar1.Position:=50;
Label4.Caption:='50';
HDefineTemp(powerH/);
ProgressBar1.Position:=100;
Label4.Caption:='100';
powerRes:= powerRes+powerO+powerH+3450/iData.time;
end;
Label3.Caption:=IntToStr(Ceil(powerRes));
l:=idata.sec*idata.num*(idata.dmagr/idata.res)*pi*idata.dnam*1E-1;
Label8.Caption:=FloatToStr((round(powerRes*10/
(l*pi*iData.dpr*1E-1)))/10);
R:=round(4*idata.sopr*l/
(pi*idata.dpr*idata.dpr*idata.sec))/10;
Label10.Caption:=FloatToStr(R);
U:=round(Sqrt(powerRes*R/2));
Label12.Caption:=FloatToStr(U);
Label14.Caption:=FloatToStr(round(U*10/R)/10);
{Label6.Font.Color:=clRed;}
end;
end.
Дипломный проект Страница