ПОВЫШЕНИЕ ЭФФЕКТИВНОСТИ ОБСЛЕДОВАНИЯ АВТОМОБИЛЬНЫХ ДОРОГ В РАЙОНАХ ЛЕСОЗАГОТОВОК
Лобанов Ю. В., Кондрашова Е. В., Курьянов В. К.,
{Фрагмент модуля программного комплекса управления состоянием автомобильных дорог в районах лесозаготовок}
unit Vidp;
interface
uses Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, Grids;
type
TForm4 = class(TForm)
S1: TStringGrid; CheckBox1: TCheckBox; Label1: TLabel;
Button1: TButton; Button3: TButton; Label2: TLabel; Edit1: TEdit;
Label3: TLabel; Edit2: TEdit; Label4: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Edit2Change(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure Button3Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var
Form4: TForm4;
k,uk,so1,so2,so3,so4,v1,v2,v3,fi2:real;
kl,i,code,flag,chet,chet1:integer;
s,s111,sv,sv1:string;
s11,s22,r1,r2,min,lo,fi,l2,l3:real;
implementation
uses Vidpr; {$R *.DFM}
procedure TForm4.FormCreate(Sender: TObject);
begin Form4.Refresh;
S1.Options:=[goFixedVertLine,goFixedHorzline,goVertLine,
goHorzline,goRangeSelect,goAlwaysShowEditor,goEditing];
for i:=1 to 50 do begin
str(i,s);S1.Cells[0,i]:= +s;end;
S1.Cells[0,0]:=№; S1.Cells[1,0]:= Пикеты; S1.Cells[2,0]:=Уклон, %; S1.Cells[3,0]:=Скорость 1-го автомобиля, км/ч ;
S1.Cells[4,0]:=Скорость 2-го автомобиля, км/ч ;
S1.Cells[5,0]:=Скорость 3-го автомобиля, км/ч ;
S1.Cells[6,0]:=Коэффициент сцепления;
k:=1;lo:=5;fi2:=0.2;
sv:=Видимость обеспечена;
sv1:=Видимость не обеспечена;flag:=0;end;
procedure TForm4.Button1Click(Sender: TObject);
begin kl:=1;chet:=0;chet1:=0;
while S1.Cells[1,kl]<> do kl:=kl+1;
for i:=1 to kl-1 do
begin val(S1.Cells[2,i],uk,code);
val(S1.Cells[3,i],v1,code);
val(S1.Cells[4,i],v2,code);
val(S1.Cells[5,i],v3,code);
val(S1.Cells[6,i],fi,code);
so1:=v1/3.6+k*v1*v1/(254*(fi+uk))+lo;min:=so1;
so2:=(v1+v2)/3.6+k*v1*v1/(254*(fi+uk))+k*v2*v2/(254*(fi+uk))+lo;
r1:=v1*v1/(127*fi2); r2:=v2*v2/(127*fi2);s11:=k*v1*v1/(254*(fi+uk));
s22:=k*v2*v2/(254*(fi+uk));l2:=v1*(s11-s22)/(v1-v2);
l3:=v3/v1*(2*l2);
so3:=v1/3.6+2*sqrt(4*r1)+v2/3.6+2*(v1/v2)*sqrt(4*r2)+lo;
so4:=v1/3.6+2*l2+l3+lo;str(uk:10:4,s);Form2.S2.Cells[2,i]:=s;
str(v1:10:4,s);Form5.S2.Cells[3,i]:=s;str(v2:10:4,s);
Form5.S2.Cells[4,i]:=s;str(v3:10:4,s);Form5.S2.Cells[5,i]:=s;
str(fi:10:4,s);Form5.S2.Cells[6,i]:=s;if min<so2 then min:=so2
else if min<so3 then min:=so3
else if min<so4 then min:=so4;
str(min:10:4,s);Form5.S2.Cells[7,i]:=s;
Form5.S2.Cells[0,i]:=S1.Cells[0,i];
Form5.S2.Cells[1,i]:=S1.Cells[1,i];
if s111=I then begin
if so1>=150 then chet:=chet+1;
if so1>=300 then chet1:=chet+1;end
else if s111=II then begin
if so1>=125 then chet:=chet+1;
if so1>=250 then chet1:=chet+1;end
else if s111=III then begin
if so1>=100 then chet:=chet+1;
if so1>=200 then chet1:=chet+1;end
else if s111=IV then begin
if so1>=75 then chet:=chet+1;
if so1>=150 then chet1:=chet+1;end
else if s111=V then begin
if so1>=50 then chet:=chet+1;
if so1>=100 then chet1:=chet1+1;end
else flag:=1;end;
Form5.S2.Cells[0,0]:=№;
Form5.S2.Cells[1,0]:= Пикеты;
Form5.S2.Cells[2,0]:=Уклон, %;
Form5.S2.Cells[3,0]:=Скорость 1-го автомобиля, км/ч;
Form5.S2.Cells[4,0]:= Скорость 2-го автомобиля, км/ч ;
Form5.S2.Cells[5,0]:= Скорость 3-го автомобиля, км/ч ;
Form5.S2.Cells[6,0]:=Коэффициент сцепления;
Form5.S2.Cells[7,0]:=Видимость, м;
so1:=chet*100/(kl-1);so2:=chet1*100/(kl-1);
str(so1:4:2,s111);Form5.Label3.Caption:=s111+ %;
str(so2:4:2,s111);Form5.Label6.Caption:=s111+ %;
Form4.Hide;Form5.Show;end;
procedure TForm4.Edit2Change(Sender: TObject);
begin s111:=Edit2.text;end;
procedure TForm4.Edit1Change(Sender: TObject);
begin Form5.Label2.caption:=Edit1.text;end;
procedure TForm4.Button3Click(Sender: TObject);
begin close;end;end.
unit Vidpr; interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Grids, ExtCtrls;
type
TForm5 = class(TForm)
S2: TStringGrid; Button1: TButton; Button2: TButton;
Label1: TLabel; Label2: TLabel;
Label3: TLabel; Label4: TLabel;
Label5: TLabel; Label6: TLabel; PB:TPaintBox;
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var Form5: TForm5; kl1,code:integer; i1,i2,j1,j2,a,b,i,p:integer;
y1,y2,x1,x2,m,max,pos:real;
s,s1:string;
implementation uses Vidp;
{Функция перевода абсцисс в режим экрана }
function II(x:extended):integer;
begin II:=i1+round((x-x1)*(i2-i1)/(x2-x1)); end;
{Функция перевода ординат в режим экрана }
function JJ(y:extended):integer;
begin JJ:=j2-round((y-y1)*(j2-j1)/(y2-y1)); end;
{$R *.DFM} procedure TForm5.Button1Click(Sender: TObject);
begin close;end;
procedure TForm5.FormActivate(Sender: TObject);
begin Form5.Refresh;
Pb.Canvas.Brush.Color:=clWhite;
kl1:=1;max:=-100000;p:=1;
while S2.Cells[1,kl1]<> do kl1:=kl1+1;
s:=S2.Cells[1,1];
pos:=Pb.Width div (kl1-1);while s[p]<>+ do p:=p+1;
for i:=1 to kl1-1 do
begin val(S2.Cells[7,i],m,code);
if max<m then max:=m;end;
i1:=0;j1:=0;i2:=Pb.Width;j2:=PB.Height;a:=0;b:=i2;x1:=a;x2:=b;
y1:=-0.001;y2:=max;
Pb.Canvas.Pen.Color:=clblack;Pb.Canvas.Rectangle(0,0,i2,j2);
Pb.Canvas.Pen.Width:=1;Pb.Canvas.Pen.Style:=psSolid;
val(S2.Cells[7,1],m,code);PB.Canvas.MoveTo(II(0),JJ(m));
for i:=2 to kl1-1 do begin val(S2.Cells[7,i],m,code);
PB.Canvas.LineTo(II(pos),JJ(m));pos:=pos+Pb.Width div (kl1-1);
end;end;end.
unit Virash;
interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;
Type TForm1 = class(TForm)
SG1: TStringGrid; Button1: TButton;
Button2: TButton; Edit1: TEdit;
Edit2: TEdit; Label1: TLabel; Label2: TLabel;
procedure Button2Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit2Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var Form1: TForm1; i,code,k:integer;
id,idop,r,v,mu,B,ib,l:real; s, s111: string;
implementation
{$R *.DFM}
procedure TForm4.Edit2Change(Sender: TObject);
begin s111:=Edit2.text;end;
procedure TForm1.Button2Click(Sender: TObject);
begin close;end;
procedure TForm1.FormActivate(Sender: TObject);
begin Form1.Refresh;
SG1.Options:=[goFixedVertline, goFixedHorzline, goVertLine,
goHorzLine, goRangeSelect, goAlwaysShowEditor, GoEditing];
SG1.Cells[0,i]:= №;
for i:=1 to 100 do
begin str(i,s); SG1.Cells[0,i]:=s;end;
i:=0;SG1.Cells[1,i]:=Пикеты;SG1.Cells[2,i]:=Радиус горизонт. кривой; SG1.Cells[3,i]:=Скорость движения, км/ч;
SG1.Cells[4,i]:=Коэффициент поперечной силы;
SG1.Cells[5,i]:=Ширина проезжей части;
SG1.Cells[6,i]:=Длина отгона виража;
SG1.Cells[7,i]:=Уклон виража, промили;end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var code:integer;
begin if key=#13 then begin
val(Edit1.text,id,code);
if (id>-0.1)and(id<100000) then Edit2.SetFocus
else Edit1.SelectAll;end;end;
procedure TForm1.Edit2Change(Sender: TObject);
begin k:=1;end;
procedure TForm1.Button1Click(Sender: TObject);
begin k:=1;
while SG1.Cells[1,k]<> do k:=k+1;
if (Edit2.text=I)or(Edit2.text=II) then idop:=5
else idop:=10;for i:=1 to k-1 do begin
val(SG1.Cells[2,i],r,code);val(SG1.Cells[3,i],v,code);
val(SG1.Cells[4,i],mu,code);
val(SG1.Cells[5,i],B,code);
if r>2000 then SG1.Cells[7,i]:=Двускатный поперечный профиль
else ib:=v*v/(127*r)-mu;
str(ib:10:4,s);SG1.Cells[7,i]:=s;
l:=B*(id+idop)/idop;str(l:10:4,s);SG1.Cells[6,i]:=s;end;end; end.