![]() |
|
|
Курсовая работа: Технология строительства метрополитена
При определении области
применения типовой тюбинговой обделки ствола на различное сочетание нагрузок : 3.3. Расчет параметров и построение паспорта прочности несущей способности тюбинговых обделок вертикальных стволов метрополитенов.
Параметры паспорта несущей
способности тюбинговой обделки, т.е. координаты точек пересечения линий с осями
1. Железобетонная тюбинговая обделка: линия 1 - условие прочности по сжимающим напряжениям в ребре тюбинга:
линия 2 - условие прочности по растягивающим напряжениям в ребре тюбинга:
линия 3 - условие положительности нагрузок:
линия 4 - условие прочности по сжимающим напряжениям в спинке тюбинга:
линия 5 - условие прочности по растягивающим напряжениям в спинке тюбинга:
2. Чугунная тюбинговая обделка: линия 1 - условие прочности по сжимающим напряжениям в ребре тюбинга:
линия 2 - условие прочности по растягивающим напряжениям в ребре тюбинга:
линия 3 - условие положительности нагрузок:
линия 4 - условие прочности по сжимающим напряжениям в спинке тюбинга:
линия 5 - условие прочности по растягивающим напряжениям в спинке тюбинга:
Примечание: при построении паспортов прочности тюбинговых обделок можно использовать программу для ЭВМ, приведенную в приложении 1. При При 3.4. Проверка устойчивости тюбинговых обделок вертикальных стволов метрополитенов.
Проверку устойчивости обделки вертикальных стволов метрополитенов, т.е. способности сопротивляться выпучиванию в сторону ствола, производится исходя из условия:
где 4. Приложения 4.1. Программа для проверки несущей способности и построения паспорта прочности тюбинговых обделок вертикальных стволов метрополитенов.
unit Calc1; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, DBTables, DB, DBFilter, Grids, DBGrids, StdCtrls, RXLookup, ExtCtrls, Buttons; type TForm1 = class(TForm) Panel1: TPanel; Panel2: TPanel; rxDBLookupCombo1: TrxDBLookupCombo; Edit1: TEdit; Label1: TLabel; Label2: TLabel; Edit2: TEdit; Label3: TLabel; DBGrid1: TDBGrid; Label4: TLabel; TableSTUFF: TTable; DataSourceSTUFF: TDataSource; rxDBFilter1: TrxDBFilter; DataSourceDATA: TDataSource; TableDATA: TTable; TableDATAR: TFloatField; TableDATAMass: TFloatField; TableDATAR_press: TFloatField; TableDATAR_stretch: TFloatField; TableDATAPuasson: TFloatField; TableDATAR1: TFloatField; TableDATARb: TFloatField; TableDATAA: TFloatField; TableDATAB: TFloatField; TableDATAStuff: TSmallintField; BitBtn1: TBitBtn; RadioGroup1: TRadioGroup; RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; procedure rxDBLookupCombo1Change(Sender: TObject); procedure DBGrid1DblClick(Sender: TObject); procedure RadioButton1Click(Sender: TObject); procedure RadioButton2Click(Sender: TObject); procedure RadioButton3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Draw; {$R *.DFM} procedure TForm1.rxDBLookupCombo1Change(Sender: TObject); var S: String; begin rxDBFilter1.Deactivate; rxDBFilter1.Filter.Clear; s:='Stuff = '+TableSTUFF.FieldByName('Code').AsString; rxDBFilter1.Filter.Add(S); rxDBFilter1.Activate; end; procedure TForm1.DBGrid1DblClick(Sender: TObject); var Mass, R_press, R_stretch, Puasson, PuassonP, R1, Rb, R, A, B: Double; P0, P2: Double; C1, C2: Double; K0, K1, K2, K3, K4: Double; L, L1: Double; ALFA1, ALFA2: Double; BETA, BETA1, BETA2: Double; DELTA1, DELTA2: Double; GAMMA1, GAMMA2: Double; D1, D2: Double; F: Double; SIGMARS, SIGMARR, SIGMASS, SIGMASR: Double; i: Integer; Pkr, PkrOld: Double; Eo, Ep, J: Double; procedure Calc; begin C1 := R1/Rb; C2 := R/R1; F := (C2*C2-1)/(C1*C1-1)*(C2*C2-1)/(C1*C1-1)* (C2*C2-1)/(C1*C1-1)*(1+B/A); D2 := (C2*C2+1)*(C2*C2+1)*(C2*C2+1)/(Puasson+1); D1 := (C1*C1-1)*(C1*C1-1)/(Puasson+1); DELTA2 := C2*C2*(C2*C2+1); DELTA1 := C2*C2*(3-C2*C2); GAMMA2 := C2*C2*(2*C2*C2*C2*C2+C2*C2+1); GAMMA1 := C2*C2*(3+C2*C2); BETA := (3+R/Rb*R/Rb)/(3-R/Rb*R/Rb); BETA2 := C2*C2*C2*C2*(C2*C2+1)-D2+F*(C1*C1+1+D1); BETA1 := 3*C2*C2-1-D2+F*((3-C2*C2)*C1*C1*C1*C1+D1); ALFA2 := C2*C2*(2+C2*C2+C2*C2*C2*C2)- D2+F*(2*C1*C1*C1*C1+C1*C1+1+D1); ALFA1 := 3*C2*C2+1+D2+F*((C1*C1+3)*C1*C1*C1*C1-D1); K4 := (ALFA2*DELTA1-ALFA1*DELTA2)/(ALFA2*BETA1-ALFA1*BETA2); K3 := (ALFA1*GAMMA2-ALFA2*GAMMA1)/(ALFA2*BETA1-ALFA1*BETA2); K2 := (BETA2*DELTA1-BETA1*DELTA2)/(ALFA2*BETA1-ALFA1*BETA2); K1 := (BETA1*GAMMA2-BETA2*GAMMA1)/(ALFA2*BETA1-ALFA1*BETA2); L1 := 4*C2*C2*(C2*C2+1-BETA)-(K1+BETA*K2)*((C1*C1+1)*(C1*C1+1) +4*C2*C2)+2*(K3+BETA*K4)*((C2*C2+1)*(C2*C2+1)-2); L := (K1+BETA*K2)*(C1*C1+1)-(K3+BETA*K4); K0 := 3*C2*C2/((1+B/A)*(C2*C2-1)/(C1*C1-1)*(2+C1*C1)+2*C2*C2+1); end; begin with TableDATA do begin Mass := FieldByName('Mass').AsFloat; R_press := FieldByName('R_press').AsFloat; R_stretch := FieldByName('R_stretch').AsFloat; Puasson := FieldByName('Puasson').AsFloat; R1 := FieldByName('R1').AsFloat; Rb := FieldByName('Rb').AsFloat; R := FieldByName('R').AsFloat; A := FieldByName('A').AsFloat; B := FieldByName('B').AsFloat; end; if RadioButton1.Checked then begin Calc; if TableDATA.FieldByName('Stuff').AsInteger = 0 {Железо-бетон} then begin PLines[isP0,1] := (C1*C1-1)*Mass*R_press/2*C1*C1*K0*(1+B/A); PLines[isP2,1] := (C1*C1-1)*(C1*C1-1)* Mass*R_press/4*C1*C1*K0*(1+B/A); PLines[isP0,2] := -(C1*C1-1)*Mass*R_stretch/2*C1*C1*K0*(1+B/A); PLines[isP2,2] := (C1*C1-1)*(C1*C1-1)* Mass*R_stretch/4*C1*C1*K0*(1+B/A); PLines[isP0,4] := (C2*C2-1)*Mass*R_press/(2*C2*C2-K0* (C2*C2+1)); PLines[isP2,4] := (C2*C2-1)*(C2*C2-1)*Mass*R_press/L1; PLines[isP0,5] := -(C2*C2-1)* Mass*R_stretch/(2*C2*C2-K0*(C2*C2+1)); PLines[isP2,5] := (C2*C2-1)*(C2*C2-1)*Mass*R_stretch/L1; end else begin {Чугун} PLines[isP0,1] := (C1*C1-1)*Mass*R_press/2*C1*K0*(1+B/A); PLines[isP2,1] := (C2*C2-1)*(C2*C2-1)* Mass*R_press/4*C1*C1*K0*(1+B/A); PLines[isP0,2] := -(C2*C2-1)*Mass*R_stretch/2*C1*K0*(1+B/A); PLines[isP2,2] := (C1*C1-1)*(C1*C1-1)* Mass*R_stretch/4*C1*C1*K0*(1+B/A); PLines[isP0,4] := (C2*C2-1)*Mass*R_press/(2*C2*C2-K0* (C2*C2+1)); PLines[isP2,4] := (C2*C2-1)*(C2*C2-1)*Mass*R_press/L1; PLines[isP0,5] := -(C2*C2-1)*Mass*R_stretch/(2*C2*C2-K0* (C2*C2+1)); PLines[isP2,5] := (C2*C2-1)*(C2*C2-1)*Mass*R_stretch/L1; end; DrawForm.ShowModal; end else if RadioButton2.Checked then begin Calc; P0 := StrToFloat(Edit1.Text); P2 := StrToFloat(Edit2.Text); SIGMARS := ABS(2*C1*C1/(C1*C1-1)*(1+B/A)*(P0*K0+2*P2*L/ (C1*C1-1))); SIGMARR := ABS(2*C1*C1/(C1*C1-1)*(1+B/A)*(P0*K0-2*P2*L/ (C1*C1-1))); SIGMASS := ABS(P0/(C2*C2-1)*(2*C2*C2-K0*(C2*C2+1))+P2*L1/ (C2*C2-1)*(C2*C2-1)); SIGMASR := ABS(P0/(C2*C2-1)*(2*C2*C2-K0*(C2*C2+1))-P2*L1/ (C2*C2-1)*(C2*C2-1)); if (SIGMARS>Mass*R_press) or (SIGMARR>Mass*R_stretch) or (SIGMASS>Mass*R_press) or (SIGMASR>Mass*R_stretch) then MessageDlg('Несущая способность не обеспечена',mtInformation,[mbOk],0) else MessageDlg('Несущая способность обеспечена',mtInformation,[mbOk],0); end else begin i:=1; PkrOld :=0; repeat i := i+1; Pkr := (i*i-1)*Eo*J/((1-Puasson)*(1-Puasson)*R*R*R)+Ep/(2* (1+PuassonP))*((i+1)*(i+1)/(i*i*(i-1))+(i-1)* (i-1)/(i*i*(i+1)*(3-4*PuassonP))); if Pkr < PkrOld then PkrOld := Pkr else i:=0; until i = 0; P0 := StrToFloat(Edit1.Text); if P0<=Pkr then MessageDlg('Устойчивость обеспечена',mtInformation,[mbOk],0) else MessageDlg('Устойчивость не обеспечена',mtInformation,[mbOk],0); end; end; procedure TForm1.RadioButton1Click(Sender: TObject); begin Label2.Visible := False; Label3.Visible := False; Edit1.Visible := False; Edit2.Visible := False; end; procedure TForm1.RadioButton2Click(Sender: TObject); begin Label2.Visible := True; Label3.Visible := True; Edit1.Visible := True; Edit2.Visible := True; end; procedure TForm1.RadioButton3Click(Sender: TObject); begin Label2.Visible := True; Label3.Visible := False; Edit1.Visible := True; Edit2.Visible := False; end; end. unit Draw; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls; type TDrawForm = class(TForm) BitBtn1: TBitBtn; procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } end; TPaintData = (isP0,isP2); TDiagramArray = Array[TPaintData,1..5] of Double; var PLines : TDiagramArray; DrawForm: TDrawForm; implementation {$R *.DFM} procedure TDrawForm.FormActivate(Sender: TObject); var R: TRect; MaxX, MinX: Double; MaxY, MinY: Double; Nx, Ny: Integer; Kx, Ky: Double; i: Byte; PointMin, PointMax: Double; procedure DrawLine(X0, k, b:Double); begin Canvas.MoveTo(R.Left+60+Round(Kx*X0),R.Bottom-30); if k<0 then Canvas.LineTo(R.Left+60,Round(R.Bottom - 33 - (Ky*(b+(k*(10)/Kx))))) else Canvas.LineTo(R.Right-10,Round(R.Bottom - 33 - (Ky*(-b+(k*((R.Right-R.Left-70)/Kx)))))); end; begin PLines[isP0,3] := 0; PLines[isP2,3] := 0; MaxX := 0.0; MinX := 0.0; MaxY := 0.0; MinY := 0.0; for i := 1 to 5 do begin if PLines[isP0,i] > MaxX then MaxX := PLines[isP0,i]; if PLines[isP2,i] > MaxY then MaxY := PLines[isP2,i]; if PLines[isP0,i] < MinX then MinX := PLines[isP0,i]; if PLines[isP2,i] < MinY then MinY := PLines[isP2,i]; end; if MaxX > 200 then Nx := 100 else Nx := 10; MaxX := Round(MaxX/Nx)*Nx+Nx; if MaxY > 200 then Ny := 100 else Ny := 10; MaxY := Round(MaxY/Ny)*Ny+Ny; with DrawForm do begin Canvas.Pen.Color := clBlack; R.Left := 10; R.Top := 10; R.Right := Width - 15; R.Bottom := Height - 70; Canvas.FrameRect(R); Canvas.Brush.Color := clBtnFace; Kx := (R.Right - R.Left - 80)/MaxX; Ky := (R.Bottom - R.Top - 80)/MaxY; {Ось Po} Canvas.MoveTo(R.Left+10,R.Bottom-30); Canvas.LineTo(R.Right-10,R.Bottom-30); {Ось P2} Canvas.MoveTo(R.Left+60,R.Top+30); Canvas.LineTo(R.Left+60,R.Bottom-30); i := 0; while i*Nx<MaxX do begin Inc(i); Canvas.MoveTo(R.Left+60+Round(Kx*i*Nx),R.Bottom-33); Canvas.LineTo(R.Left+60+Round(Kx*i*Nx),R.Bottom-27); Canvas.TextOut(R.Left+50+Round(Kx*i*Nx), R.Bottom-20, IntToStr(i*Nx)); end; i := 0; while i*Ny<MaxY do begin Inc(i); Canvas.MoveTo(R.Left+63,R.Bottom-30-Round(Ky*i*Ny)); Canvas.LineTo(R.Left+57,R.Bottom-30-Round(Ky*i*Ny)); Canvas.TextOut(R.Left+30, R.Bottom-35-Round(Ky*i*Ny), IntToStr(i*Ny)); end; if PLines[isP0,1] > PLines[isP0,4] then PointMax := PLines[isP0,4] else PointMax := PLines[isP0,1]; if PLines[isP0,2] > PLines[isP0,5] then PointMin := PLines[isP0,2] else PointMin := PLines[isP0,5]; if PointMin < 0 then PointMin := 0.0; DrawLine(PLines[isP0,1], -(PLines[isP2,1]/PLines[isP0,1]),PLines[isP2,1]); DrawLine(PLines[isP0,2], -(PLines[isP2,2]/PLines[isP0,2]),PLines[isP2,2]); DrawLine(0,1,0); DrawLine(PLines[isP0,4], -(PLines[isP2,4]/PLines[isP0,4]),PLines[isP2,4]); DrawLine(PLines[isP0,5], -(PLines[isP2,5]/PLines[isP0,5]),PLines[isP2,5]); Canvas.Brush.Color := clGreen; Canvas.FloodFill(Round((((PointMax-PointMin)/2)*Kx)+R.Left+60), R.Bottom-55, clBlack, fsBorder); Canvas.Brush.Color := clBtnFace; Canvas.TextOut(R.Right-80, R.Bottom-50, 'P0, TC/M*2'); Canvas.TextOut(R.Left+20, R.Top+10, 'P2, TC/M*2'); end; end; end. unit Edittub; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,Forms, Dialogs, DBFilter, DB, DBTables, Grids, DBGrids, RXLookup, ExtCtrls, DBCtrls; type TEditDataForm = class(TForm) Panel1: TPanel; rxDBLookupCombo1: TrxDBLookupCombo; TableSTUFF: TTable; DataSourceSTUFF: TDataSource; DBGrid1: TDBGrid; DataSourceDATA: TDataSource; TableDATA: TTable; TableDATAMass: TFloatField; TableDATAR_press: TFloatField; TableDATAR_stretch: TFloatField; TableDATAPuasson: TFloatField; TableDATAR1: TFloatField; TableDATARb: TFloatField; TableDATAR: TFloatField; TableDATAA: TFloatField; TableDATAB: TFloatField; rxDBFilter1: TrxDBFilter; TableDATAStuff: TSmallintField; DBNavigator1: TDBNavigator; procedure rxDBLookupCombo1Change(Sender: TObject); procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); procedure DBGrid1DblClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var EditDataForm: TEditDataForm; implementation {$R *.DFM} uses EditForm; procedure TEditDataForm.rxDBLookupCombo1Change(Sender: TObject); var S: String; begin rxDBFilter1.Deactivate; rxDBFilter1.Filter.Clear; s:='Stuff = '+TableSTUFF.FieldByName('Code').AsString; rxDBFilter1.Filter.Add(S); rxDBFilter1.Activate; end; procedure TEditDataForm.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); begin case Button of nbInsert: begin EditDataTub(TableDATA, True, TableSTUFF.FieldByName('Code').AsInteger); end; nbEdit: begin EditDataTub(TableDATA, False, TableSTUFF.FieldByName('Code').AsInteger); end; end; end; procedure TEditDataForm.DBGrid1DblClick(Sender: TObject); begin EditDataTub(TableDATA, False, TableSTUFF.FieldByName('Code').AsInteger); end; end. unit Editform; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Mask, DBCtrls, ExtCtrls, DB, DBTables, Buttons; type TEdTubForm = class(TForm) DataSource1: TDataSource; Panel1: TPanel; DBEdit1: TDBEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; DBEdit2: TDBEdit; DBEdit3: TDBEdit; Label4: TLabel; Label5: TLabel; Label6: TLabel; DBEdit4: TDBEdit; DBEdit5: TDBEdit; DBEdit6: TDBEdit; Label7: TLabel; DBEdit7: TDBEdit; Label8: TLabel; Label9: TLabel; Panel2: TPanel; Panel3: TPanel; DBEdit8: TDBEdit; DBEdit9: TDBEdit; BitBtn1: TBitBtn; BitBtn2: TBitBtn; Table1: TTable; Label10: TLabel; DBText1: TDBText; DataSource2: TDataSource; Query1: TQuery; Query1Material: TStringField; procedure FormCreate(Sender: TObject); public FCode: Integer; function EditTub( Table: TTable; IsNew: Boolean; Code: Integer): Boolean; end; var EdTubForm: TEdTubForm; |
|
|||||||||||||||||||||||||||||
![]() |
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |