Смекни!
smekni.com

Обделка вертикальных стволов (стр. 7 из 9)

;

;

линия 3 - условие положительности нагрузок:

;

линия 4 - условие прочности по сжимающим напряжениям в спинке тюбинга:

;

;

линия 5 - условие прочности по растягивающим напряжениям в спинке тюбинга:

;

;

2. Чугунная тюбинговая обделка:

линия 1 - условие прочности по сжимающим напряжениям в ребре тюбинга:

;

;

линия 2 - условие прочности по растягивающим напряжениям в ребре тюбинга:

;

;

линия 3 - условие положительности нагрузок:

;

линия 4 - условие прочности по сжимающим напряжениям в спинке тюбинга:

;

;

линия 5 - условие прочности по растягивающим напряжениям в спинке тюбинга:

;

;

Примечание: при построении паспортов прочности тюбинговых обделок можно использовать программу для ЭВМ, приведенную в приложении 1.

При

несущую способность железобетонных обделок конструкции ВНИИМШС, марка бетона 400 для стволов диаметром 4.5 - 8.0 м можно определить по паспортам прочности приведенным на листах 3 и 4.

При

несущую способность чугунных тюбинговых обделок конструкции Шахтспецстрой, чугун марки СЧ 12-28 для стволов диаметром 6.0 - 7.0 м можно определить по паспортам прочности приведенным на листе 4.

3.4. Проверка устойчивости тюбинговых обделок вертикальных стволов метрополитенов.

Проверку устойчивости обделки вертикальных стволов метрополитенов, т.е. способности сопротивляться выпучиванию в сторону ствола, производится исходя из условия:

;

где

- коэффициент формы упругой линии кольца обделки при потере устойчивости; расчетное критическое давление
находится как наименьшее значение функции
.

Приложения

Программа для проверки несущей способности и построения паспорта прочности тюбинговых обделок вертикальных стволов метрополитенов.

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],