125014 (690236), страница 6
Текст из файла (страница 6)
и условиям на концах стержня
Е(0,х)=j1(z), u(z,t)=j2(z). (3)
Значения u(0,0) и u(L,0), полученные из (2) и (3), должны совпадать. Это будет если j1(0)=f(0), j2(0)=f(L).
Следует отметить, что путем замены переменных
z ў= z
уравнение (1) можно преобразовать к виду
. (4)
Это означает, что решение задачи (1)-(3) путем замены переменных сводится к решению задачи (4),(2),(3).
Построим на плоскости (z,x) сетку с шагом h по переменной z и с шагом m по переменной x (xj = (j-1)m). Обозначим Tij = T(zi,tj).
Производные в уравнении (1) аппроксимируем следующим образом:
,(5)
.(6)
Подставляя (5) и (6) в (1) при a=1, получим разностное уравнение:
(7)
В соответствии с (2) и (3) значения
Ti0 = f(zi), T0j = j1(zj), Tnj = j2(zj)(8)
являются известными. Тогда, подставляя в (7) j=0, получим систему n-1 линейных уравнений, решив которую можно определить ui1, i=1,..,n-1.
При этом, поскольку u01=j1(t1), un1=j2(t1), известными оказываются все значения временного слоя j=1, (t=t1). Затем, подставляя в (7) j=2, решаем систему уравнений относительно ui2 и т.д. для всех j=2,..,m.
Из (7) следует, что в каждое i-тое уравнение (i=1,..,n-1) с ненулевыми коэффициентами входят только три неизвестных Ti-1,j; Tij; Ti+1,j. Величина Ti,j-1 к этому моменту является известной и потому отнесена в правую часть уравнения.
Пусть на j-том шаге заданными являются параметры Ti,j-1 (i=1,..,n-1), T0j, Tnj, l. Все неизвестные значения Tij можно разместить в массиве xi (xi=Tij, i=0,..,n). Ищем связь xi-1 с xi в виде рекуррентного соотношения
xi-1=ci-1xi+ni-1, i=1,..,n.(10)
Подставляя (10) в (7), получаем
lci-1xi-(1+2l)xi+lxi+1 = -Тi,j-1-lni-1.
Отсюда
(11)
Сравнивая (11) с (10), находим рекуррентные соотношения
,
, (12)
c0= 0, n0 = T0j .
Таким образом, алгоритм определения значений Tij по известным Ti,j-1 состоит из двух этапов: прямого хода прогонки по формулам (12) при i=1,..,n-1 и обратного хода прогонки.
-
Инструкция по пользованию программой
Рисунок 10.1 – Рабочее окно программы.
На рисунке 10.1 показано рабочее окно программы. Программа выполнена на языке программирования Borland C++ Builder, содержит информацию о различных прокатываемых профилях и марках стали. Для изменения Всада заготовки необходимо выбрать требуемый из выпадающего списка меню "Всад заготовки". Аналогично выбирается и марка стали и требуемая заготовка (рисунок 10.2)
Рисунок 10.2 – Выбор требуемых параметров.
Информация о выбранных параметрах отображается на панелях слева, причем в нижней панели возможно изменять параметры, выбрав для этого "Ввод данных". По умолчанию на этой панели отображаются параметры текущей заготовки. По нажатии кнопки "Расчет" в окне появятся графики изменения температур по сечению заготовки (рисунок 10.3).
Рисунок 10-3 – Работа программы.
ВЫВОДЫ
На данный момент отделение методических печей занимает важное место в цикле производства проката различных сортов, видов и т. д. Для эффективной работы методической печи необходим серьезный контроль и автоматизация всех ее узлов.
Рост производства проката, повышение требований к его качеству, а также поточность технологических процессов создали условия для широкого внедрения эффективных средств автоматического контроля и управления и поставили задачу дальнейшего повышения уровня автоматизации. Автоматическое управление внедряют практически на всех участках отделения методических печей. Автоматизируются процессы нагрева, расходов топлива и воздуха, получают развитие новые, более совершенные способы контроля и управления процессами нагрева металла.
В рамках данного курсового проекта мною были рассмотрены контуры контроля и регулирования. Так же мною была разработана математическая модель процесса нагрева металла. Эта модель разработана на основании метода конечных разностей.
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
-
В.А.Шамис "Borland C++ Builder 6. для профессионалов" СПб.:Питер,2003
-
А.Я.Архангельский. "C++ Builder 6. Справочное пособие." М.:Бином – Пресс, 2004г.
-
Нагрев металла и эксплуатация методических печей рельсобалочного цеха. Технологическая инструкция ТИ 232-7-89.
-
Матвеев А.Г. "Теплотехника". М. "Высшая школа" 1981.
-
А.С.Телегин "Теплотехнические расчеты металлургических печей"
-
И.Н.Сушкин "Теплотехника" М. "Металлургия" 1973
-
С.А.Малый "Автоматизация методических печей" Москва 1962.
-
Хоу Чэн Лян. Современное состояние и перспективы развития высокопроизводительных регенеративных печей в КНР // "Металлургическая теплотехника". Сборник научных трудов Государственной металлургической академии Украины. В 2-х томах. Т. 1 – Днепропетровск: ГМетАУ, 1999. – 214 с.
-
Патент 61495А Украина, С21D 9/70. Нагревательный колодец с шариковыми регенераторами / Сокуренко А.В., Шеремет В.А., Кекух А.В. и другие. Опубл. 17.11.2003. Бюллетень No 11.
-
Губинский В.И., Лу Чжун-У. Теория пламенных печей. – М.: Машиностроение, 1995. – 256 с.
Приложение А
Листинг программы
void __fastcall TForm1::Button1Click(TObject *Sender)
{float h,t,l;
float u[1000][100];
float ug[1000][100];
float k[1000];
float v[1000];
float x[1000], w[1000];
int n,m;
double as=0;
if ( CheckBox1->Checked==true)
{
T1=StrToFloat(Edit1->Text);
T2=StrToFloat(Edit2->Text);
Tv=StrToFloat(Edit4->Text);
tau=StrToFloat(Edit5->Text);
StaticText4->Caption=T1;
StaticText5->Caption=T2;
StaticText2->Caption=" ";
StaticText3->Caption=" ";
}
Edit1->Text=T1;
Edit2->Text=T2;
Edit4->Text=Tv;
Edit5->Text=tau;
Series13->Clear();
h=0.01;
n=1/h;
m=n;
Series9->Clear();
Series10->Clear();
for (int i=0; i { k[i]=0; v[i]=0; x[i]=0; w[i]=0; } for (int i=0; i { for (int j=0; j { u[i][j]=0; } } for (int j=0; j { u[0][j]=Tv; } for (int i=0; i<=n+1; i++) { if (as<=0.234) { u[i][0]=300/0.234*as+T2-300; Series13->AddXY(as,u[i][0]); } else if (as>0.234 && as<0.694) { u[i][0]=T2; Series13->AddXY(as,T2); } else if(as>=0.694) { u[i][0]=T1; Series13->AddXY(as,u[i][0]); } as+=h; } l=(500*(1-0.1*tau))/(h*h*7200*0.6*n); for (int j=1; j<=m; j+=1) { k[0]=0; v[0]=u[0][j-1]; for (int i=1; i<=n-1; i+=1) { v[i]=(u[i][j-1]+l*v[i-1])/(1+2*l-l*k[i-1]); k[i]=l/(1+2*l-l*k[i-1]); } for (int i=n; i>=1; i--) { x[n]=u[n][j-1]; x[i-1]=x[i]*k[i-1]+v[i-1]; } for (int i=1; i<=n; i++) { u[i][j]=x[i]; } for (int i=0; i<=n; i++) { w[0]=0; for (int j=1; j<=n+1; j++) { float dw=h; w[j]=w[j-1]+dw; } } } Series1->Clear(); Series2->Clear(); Series3->Clear(); Series4->Clear(); Series5->Clear(); Series6->Clear(); Series7->Clear(); Series8->Clear(); Series11->Clear(); Series12->Clear(); float asd; if(T2 asd=T1; else asd=T2; for(int f=Tv;f<=asd+10;f+=10) { Series11->AddXY(0.234,f); Series12->AddXY(0.694,f); } for (int i=0; i { Series1->AddXY(w[i],u[i][5]); Series2->AddXY(w[i],u[i][10]); Series3->AddXY(w[i],u[i][20]); Series4->AddXY(w[i],u[i][30]); Series5->AddXY(w[i],u[i][40]); Series6->AddXY(w[i],u[i][50]); Series7->AddXY(w[i],u[i][60]); Series8->AddXY(w[i],u[i][70]); Series9->AddXY(w[i],u[i][80]); Series10->AddXY(w[i],u[i][99]); } } //--------------------------------------------------------------------------- void __fastcall TForm1::N24241Click(TObject *Sender) { T1=1260; if (vsad==1) { T2=1350; tau=4; } else if(vsad==2) { T2=1320; tau=3.3; } else if(vsad==3) { T2=1290; tau=3; } T3=T2-50; StaticText4->Caption=T1; StaticText5->Caption=T2; StaticText2->Caption="Ñò0 - Ñò5"; StaticText3->Caption="Øâåëëåð ¹ 24, 24Ò"; } //--------------------------------------------------------------------------- void __fastcall TForm1::N271Click(TObject *Sender) { T1=1260; if (vsad==1) { T2=1350; tau=4; } else if(vsad==2) { T2=1320; tau=3.3; } else if(vsad==3) { T2=1290; tau=3; } StaticText2->Caption="Ñò0 - Ñò5"; StaticText3->Caption="Øâåëëåð ¹ 27"; T3=T2-50; StaticText4->Caption=T1; StaticText5->Caption=T2; } //--------------------------------------------------------------------------- void __fastcall TForm1::N302Click(TObject *Sender) { T1=1260; if (vsad==1) { T2=1350; tau=4; } else if(vsad==2) { T2=1320; tau=3.3; } else if(vsad==3) { T2=1290; tau=3; } StaticText2->Caption="Ñò0 - Ñò5"; StaticText3->Caption="Øâåëëåð ¹ 30,30Â"; T3=T2-50; StaticText4->Caption=T1; StaticText5->Caption=T2; } //--------------------------------------------------------------------------- void __fastcall TForm1::N3011Click(TObject *Sender) { T1=1260; if (vsad==1) { T2=1360; tau=4; } else if(vsad==2) { T2=1330; tau=3.3; } else if(vsad==3) { T2=1300; tau=3; } T3=T2-50; StaticText2->Caption="Ñò0 - Ñò5"; StaticText3->Caption="Øâåëëåð ¹ 30Â-1"; StaticText4->Caption=T1; StaticText5->Caption=T2; } //--------------------------------------------------------------------------- void __fastcall TForm1::N3021Click(TObject *Sender) { T1=1260; if (vsad==1) { T2=1370; tau=4; } else if(vsad==2) { T2=1340; tau=3.3; } else if(vsad==3) { T2=1310; tau=3; } T3=T2-50; StaticText4->Caption=T1; StaticText5->Caption=T2; StaticText2->Caption="Ñò0 - Ñò5"; StaticText3->Caption="Øâåëëåð ¹ 30Â-2"; } //--------------------------------------------------------------------------- void __fastcall TForm1::N241Click(TObject *Sender) { T1=1260; if (vsad==1) { T2=1350; tau=4; } else if(vsad==2) { T2=1320; tau=3.3; } else if(vsad==3) { T2=1290; tau=3; } T3=T2-50; StaticText4->Caption=T1; StaticText5->Caption=T2; StaticText2->Caption="Ñò0 - Ñò5"; StaticText3->Caption="Áàëêà ¹24"; } //--------------------------------------------------------------------------- void __fastcall TForm1::N272Click(TObject *Sender) { T1=1260; if (vsad==1) { T2=1350; tau=4; } else if(vsad==2) { T2=1320; tau=3.3; } else if(vsad==3) { T2=1290; tau=3; } T3=T2-50; StaticText4->Caption=T1; StaticText5->Caption=T2; StaticText2->Caption="Ñò0 - Ñò5"; StaticText3->Caption="Áàëêà ¹27"; } //--------------------------------------------------------------------------- void __fastcall TForm1::N303Click(TObject *Sender) { T1=1260;