Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit form_rej;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, ExtCtrls, Grids, Buttons, MMSYSTEM;
- type
- TForm11 = class(TForm)
- Label1: TLabel;
- ComboBox1: TComboBox;
- BitBtn1: TBitBtn;
- RadioGroup1: TRadioGroup;
- BitBtn2: TBitBtn;
- BitBtn4: TBitBtn;
- Panel1: TPanel;
- Edit1: TEdit;
- Label2: TLabel;
- BitBtn3: TBitBtn;
- BitBtn5: TBitBtn;
- BitBtn6: TBitBtn;
- BitBtn7: TBitBtn;
- BitBtn8: TBitBtn;
- BitBtn9: TBitBtn;
- LabeledEdit1: TLabeledEdit;
- LabeledEdit2: TLabeledEdit;
- RadioGroup3: TRadioGroup;
- Timer1: TTimer;
- BitBtn10: TBitBtn;
- Panel2: TPanel;
- BitBtn11: TBitBtn;
- BitBtn12: TBitBtn;
- Edit2: TEdit;
- Label3: TLabel;
- RadioGroup2: TRadioGroup;
- ComboBox2: TComboBox;
- Label4: TLabel;
- Timer2: TTimer;
- Button1: TButton;
- procedure FormShow(Sender: TObject);
- procedure BitBtn1Click(Sender: TObject);
- procedure FormKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure BitBtn2Click(Sender: TObject);
- procedure BitBtn4Click(Sender: TObject);
- procedure Timer1Timer(Sender: TObject);
- procedure RadioGroup3Click(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure BitBtn9Click(Sender: TObject);
- procedure BitBtn3Click(Sender: TObject);
- procedure BitBtn8Click(Sender: TObject);
- procedure BitBtn5Click(Sender: TObject);
- procedure BitBtn6Click(Sender: TObject);
- procedure BitBtn7Click(Sender: TObject);
- procedure RadioGroup1Click(Sender: TObject);
- procedure BitBtn12Click(Sender: TObject);
- procedure BitBtn11Click(Sender: TObject);
- procedure RadioGroup2Click(Sender: TObject);
- procedure BitBtn10Click(Sender: TObject);
- procedure Button1Click(Sender: TObject);
- procedure Timer2Timer(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- Procedure pl_pos;
- Procedure min_pos;
- Procedure n_sch_vp;
- Procedure ud_tochki;
- Procedure ud_n_tochek;
- Procedure pl_pos2;
- Procedure min_pos2;
- Procedure min_vse;
- Procedure pereschet;
- Procedure djostik;
- var
- Form11: TForm11;
- pkm_s:Array[1..4,1..10000000]of Integer;
- pkm_t:Array[1..4] of Integer;
- schag:Integer;//Шаг расчета
- pt:Integer; //текущая позиция расчета
- pausa:Integer;//0-Пауза;1-считаем
- rej_dv,rej_dv2:Integer;
- implementation
- uses Unit21,nastr_ras,Basa,vip_tr2,vagon_ch,Exel_vs,telo_rasch, vagon_basa2,lokomotiv,lok_tabl,lok_plus,profil_basa,vip_tr;
- {$R *.dfm}
- //Добавление позиции
- Procedure pl_pos;
- var i,j:integer;
- Begin
- i:=Form11.ComboBox1.ItemIndex+1;
- //Тяга
- IF rej_dv=1 then Begin
- pkm_s[i,pt]:=pkm_s[i,pt]+1;
- IF pkm_s[i,pt]>P_lk[i].Npkm then pkm_s[i,pt]:=P_lk[i].Npkm;
- Form11.Edit1.Text:=IntToStr(pkm_s[i,pt]);
- End;
- //Пневматическое торможение
- IF rej_dv=2 then Begin
- If pkm_s[i,pt]>-100.1 then
- pkm_s[i,pt]:=pkm_s[i,pt]-5;IF pkm_s[i,pt]<-100 then
- pkm_s[i,pt]:=-100;
- Form11.Edit1.Text:=IntToStr(-pkm_s[i,pt]);
- End;
- //Реостатное торможение
- If rej_dv=4 then Begin
- IF P_lk[i].N_reost>0.3 then
- Begin If pkm_s[i,pt]>-100 then pkm_s[i,pt]:=-100;
- If pkm_s[i,pt]>-100-P_lk[i].N_reost+0.1 then pkm_s[i,pt]:=pkm_s[i,pt]-1;
- End else pkm_s[i,pt]:=0;
- Form11.Edit1.Text:=IntToStr(-pkm_s[i,pt]-100);
- ENd;
- //Рекуперативное торможение
- If rej_dv=3 then Begin
- IF P_lk[i].N_rek>0.4 then
- Begin If pkm_s[i,pt]>-200 then pkm_s[i,pt]:=-200;
- IF pkm_s[i,pt]>-200-P_lk[i].N_rek+0.1 then pkm_s[i,pt]:=pkm_s[i,pt]-1;
- End else pkm_s[i,pt]:=0;
- Form11.Edit1.Text:=IntToStr(-pkm_s[i,pt]-200);
- End;
- End;
- //Плюс позиция со второго пульта
- Procedure pl_pos2;
- var i,j:Integer;
- Begin
- i:=Form11.ComboBox2.ItemIndex+1;
- //Тяга
- IF rej_dv2=1 then Begin
- pkm_s[i,pt]:=pkm_s[i,pt]+1;
- IF pkm_s[i,pt]>P_lk[i].Npkm then pkm_s[i,pt]:=P_lk[i].Npkm;
- Form11.Edit2.Text:=IntToStr(pkm_s[i,pt]);
- End;
- //Пневматическое торможение
- IF rej_dv2=2 then Begin
- If pkm_s[i,pt]>-100.1 then
- pkm_s[i,pt]:=pkm_s[i,pt]-5;IF pkm_s[i,pt]<-100 then
- pkm_s[i,pt]:=-100;
- Form11.Edit2.Text:=IntToStr(-pkm_s[i,pt]);
- End;
- //Реостатное торможение
- If rej_dv2=4 then Begin
- IF P_lk[i].N_reost>0.3 then
- Begin If pkm_s[i,pt]>-100 then pkm_s[i,pt]:=-100;
- If pkm_s[i,pt]>-100-P_lk[i].N_reost+0.1 then pkm_s[i,pt]:=pkm_s[i,pt]-1;
- End else pkm_s[i,pt]:=0;
- Form11.Edit2.Text:=IntToStr(-pkm_s[i,pt]-100);
- ENd;
- //Рекуперативное торможение
- If rej_dv2=3 then Begin
- IF P_lk[i].N_rek>0.4 then
- Begin If pkm_s[i,pt]>-200 then pkm_s[i,pt]:=-200;
- IF pkm_s[i,pt]>-200-P_lk[i].N_rek+0.1 then pkm_s[i,pt]:=pkm_s[i,pt]-1;
- End else pkm_s[i,pt]:=0;
- Form11.Edit2.Text:=IntToStr(-pkm_s[i,pt]-200);
- End;
- End;
- //Уменьшение позиции со второго пульта
- Procedure min_pos2;
- var i,j:integer;
- Begin
- i:=Form11.ComboBox2.ItemIndex+1;
- //Тяга
- IF rej_dv2=1 then Begin
- pkm_s[i,pt]:=pkm_s[i,pt]-1; IF pkm_s[i,pt]<0 then pkm_s[i,pt]:=0;
- Form11.Edit2.Text:=IntToStr(pkm_s[i,pt]);
- End;
- //Пневматическое торможение
- IF rej_dv2=2 then Begin
- If pkm_s[i,pt]<0.1 then
- pkm_s[i,pt]:=pkm_s[i,pt]+5;IF pkm_s[i,pt]>0 then
- pkm_s[i,pt]:=0;
- Form11.Edit2.Text:=IntToStr(-pkm_s[i,pt]); End;
- //Реостатное торможение
- If rej_dv2=4 then Begin
- IF P_lk[i].N_reost>0.3 then
- Begin If pkm_s[i,pt]>-100 then pkm_s[i,pt]:=-100;
- If pkm_s[i,pt]<-100.1 then pkm_s[i,pt]:=pkm_s[i,pt]+1;
- End else pkm_s[i,pt]:=0;
- Form11.Edit2.Text:=IntToStr(-pkm_s[i,pt]-100);
- ENd;
- //Рекуперативное торможение
- If rej_dv2=3 then Begin
- IF P_lk[i].N_rek>0.4 then
- Begin If pkm_s[i,pt]>-200 then pkm_s[i,pt]:=-200;
- IF pkm_s[i,pt]<-200.1 then pkm_s[i,pt]:=pkm_s[i,pt]+1;
- End else pkm_s[i,pt]:=0;
- Form11.Edit2.Text:=IntToStr(-pkm_s[i,pt]-200);
- End;
- End;
- //Уменьшение позиции
- Procedure min_pos;
- var i,j:integer;
- Begin
- i:=Form11.ComboBox1.ItemIndex+1;
- //Тяга
- IF rej_dv=1 then Begin
- pkm_s[i,pt]:=pkm_s[i,pt]-1; IF pkm_s[i,pt]<0 then pkm_s[i,pt]:=0;
- Form11.Edit1.Text:=IntToStr(pkm_s[i,pt]);
- End;
- //Пневматическое торможение
- IF rej_dv=2 then Begin
- If pkm_s[i,pt]<0.1 then
- pkm_s[i,pt]:=pkm_s[i,pt]+5;IF pkm_s[i,pt]>0 then
- pkm_s[i,pt]:=0;
- Form11.Edit1.Text:=IntToStr(-pkm_s[i,pt]);
- End;
- //Реостатное торможение
- If rej_dv=4 then Begin
- IF P_lk[i].N_reost>0.3 then
- Begin If pkm_s[i,pt]>-100 then pkm_s[i,pt]:=-100;
- If pkm_s[i,pt]<-100.1 then pkm_s[i,pt]:=pkm_s[i,pt]+1;
- End else pkm_s[i,pt]:=0;
- Form11.Edit1.Text:=IntToStr(-pkm_s[i,pt]-100);
- ENd;
- //Рекуперативное торможение
- If rej_dv=3 then Begin
- IF P_lk[i].N_rek>0.4 then
- Begin If pkm_s[i,pt]>-200 then pkm_s[i,pt]:=-200;
- IF pkm_s[i,pt]<-200.1 then pkm_s[i,pt]:=pkm_s[i,pt]+1;
- End else pkm_s[i,pt]:=0;
- Form11.Edit1.Text:=IntToStr(-pkm_s[i,pt]-200);
- End;
- End;
- //Удаление точки из расчета
- Procedure ud_tochki;
- var i:Integer;
- Begin
- If pt>1.5 then Begin
- //Перечисляем всё, что нужно обнулить
- For i:=1 to N_lok do Begin
- pkm_s[i,pt]:=0;
- Fk_sap[i,pt]:=0;
- fk_ud[i,pt]:=0;
- end;
- BTd[pt]:=0;
- v_sap[pt]:=0;
- v_n:=v_sap[pt-1];
- t_sap[pt]:=t_sap[pt-1];
- ww_r[pt]:=0; pt:=pt-1; pror_mgn; pereschet;
- i:=Form11.ComboBox1.ItemIndex+1;
- Form11.Edit1.Text:=IntToStr(pkm_s[i,pt]);
- IF N_lok>1.5 then Begin
- i:=Form11.ComboBox2.ItemIndex+1;
- Form11.Edit2.Text:=IntToStr(pkm_s[i,pt]);
- End; End;
- End;
- //Удаление нескольких точек
- Procedure ud_n_tochek;
- var pos_f,i,j:Integer;
- Begin
- pos_f:=Round(pos_pols/10);
- For i:=pos_f+1 to pt do
- Begin
- For j:=1 to N_lok do
- Begin
- pkm_s[j,i]:=0;
- Fk_sap[j,i]:=0;
- fk_ud[j,i]:=0;
- End;
- Btd[i]:=0;v_sap[i]:=0;ww_r[i]:=0;
- End;
- v_n:=v_sap[pos_f-1];pt:=pos_f;
- i:=Form11.ComboBox1.ItemIndex+1;
- Form11.Edit1.Text:=IntToStr(pkm_s[i,pt]);
- IF N_lok>1.5 then Begin
- i:=Form11.ComboBox2.ItemIndex+1;
- Form11.Edit2.Text:=IntToStr(pkm_s[i,pt]);
- End;
- mn:=Round(pos_f/2);
- pereschet;
- pror_mgn;
- End;
- Procedure min_vse;
- var pos_f,i,j:Integer;
- Begin
- pos_f:=1;//Round(pos_pols/10);
- For i:=pos_f+1 to pt do
- Begin
- For j:=1 to N_lok do
- Begin
- pkm_s[j,i]:=0;
- Fk_sap[j,i]:=0;
- fk_ud[j,i]:=0;
- End;
- Btd[i]:=0;v_sap[i]:=0;ww_r[i]:=0;
- End;
- v_n:=v_nach;//v_sap[pos_f-1];
- pt:=pos_f;
- i:=Form11.ComboBox1.ItemIndex+1;
- Form11.Edit1.Text:=IntToStr(pkm_s[i,pt]);
- mn:=1;pereschet;
- pror_mgn;
- End;
- //Пересчет счетчика смены позиций и распр. времени работы по позициям
- Procedure pereschet;
- var i,j,k,l,pl:Integer;
- Begin
- //Обнуление
- For i:=1 to 4 do
- For j:=0 to 70 do
- For k:=0 to 70 do
- Kol_sm_pkm[i,j,k]:=0;
- For i:=1 to 4 do
- FOr j:=1 to 70 do t_rab_pos[i,j]:=0;
- //Запись по новому
- For l:=1 to pt do
- IF l>2.5 then Begin
- For i:=1 to N_lok do
- Begin j:=pkm_s[i,l];k:=pkm_s[i,l-1];
- If j<0 then j:=0; If k<0 then k:=0;
- IF j<>k then Kol_sm_pkm[i,j,k]:=Kol_sm_pkm[i,j,k]+1;
- End;
- End;
- For l:=2 to pt do
- For i:=1 to N_lok do
- Begin pl:=pkm_s[i,l-1]; If pl<0 then pl:=0;
- t_rab_pos[i,pl]:=t_rab_pos[i,pl]+t_sap[l]-t_sap[l-1];
- end;
- End;
- procedure TForm11.FormShow(Sender: TObject);
- Var i:integer;
- begin
- For i:=1 to 10 do
- pkm_s[i,1]:=0;
- end;
- procedure TForm11.BitBtn1Click(Sender: TObject);
- begin
- Form11.Visible:=False;
- end;
- procedure TForm11.FormKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- //Управление клавишами
- If Key=VK_UP then pl_pos;
- IF Key=VK_DOWN then min_pos;
- end;
- //Расчет нескольких шагов вперед до указателя
- Procedure n_sch_vp;
- var pos_f,i:Integer;
- Begin pausa:=0;
- pos_f:=Round(pos_pols/10)-pt;
- For i:=1 to pos_f do BEgin
- pt:=pt+1;rasch_schag;
- ENd;
- pror_mgn;
- End;
- procedure TForm11.BitBtn2Click(Sender: TObject);
- begin
- pl_pos;
- end;
- procedure TForm11.BitBtn4Click(Sender: TObject);
- begin
- min_pos;
- end;
- procedure TForm11.Timer1Timer(Sender: TObject);
- begin
- If pausa=1 then Begin
- pt:=pt+1;
- rasch_schag;pror_mgn; End;
- end;
- procedure TForm11.RadioGroup3Click(Sender: TObject);
- begin
- IF Form11.RadioGroup3.ItemIndex=0 then Form11.Timer1.Interval:=10;
- IF Form11.RadioGroup3.ItemIndex=1 then Form11.Timer1.Interval:=50;
- IF Form11.RadioGroup3.ItemIndex=2 then Form11.Timer1.Interval:=100;
- IF FOrm11.RadioGroup3.ItemIndex=3 then Form11.Timer1.Interval:=500;
- IF Form11.RadioGroup3.ItemIndex=4 then Form11.Timer1.Interval:=1000;
- If Form11.RadioGroup3.ItemIndex=5 then Form11.Timer1.Interval:=2000;
- If Form11.RadioGroup3.ItemIndex=6 then Form11.Timer1.Interval:=5000;
- end;
- procedure TForm11.FormCreate(Sender: TObject);
- begin
- pt:=1; pausa:=0;schag:=1; rej_dv:=1; rej_dv2:=1;
- end;
- procedure TForm11.BitBtn9Click(Sender: TObject);
- begin pausa:=0;
- pt:=pt+1;rasch_schag;pror_mgn;
- end;
- procedure TForm11.BitBtn3Click(Sender: TObject);
- begin
- pausa:=1;
- end;
- procedure TForm11.BitBtn8Click(Sender: TObject);
- begin
- n_sch_vp;
- end;
- procedure TForm11.BitBtn5Click(Sender: TObject);
- begin
- pausa:=0;
- end;
- procedure TForm11.BitBtn6Click(Sender: TObject);
- begin
- pausa:=0; ud_tochki;
- end;
- procedure TForm11.BitBtn7Click(Sender: TObject);
- begin
- pausa:=0; ud_n_tochek;
- end;
- procedure TForm11.RadioGroup1Click(Sender: TObject);
- var i:Integer;
- begin
- rej_dv:=Form11.RadioGroup1.ItemIndex+1;
- i:=Form11.ComboBox1.ItemIndex+1;
- pkm_s[i,pt]:=0;
- FOrm11.Edit1.Text:=IntToStr(pkm_s[i,pt]);
- end;
- procedure TForm11.BitBtn12Click(Sender: TObject);
- begin
- pl_pos2;
- end;
- procedure TForm11.BitBtn11Click(Sender: TObject);
- begin
- min_pos2;
- end;
- procedure TForm11.RadioGroup2Click(Sender: TObject);
- var i:Integer;
- begin
- rej_dv2:=Form11.RadioGroup2.ItemIndex+1;
- i:=Form11.ComboBox2.ItemIndex+1;
- pkm_s[i,pt]:=0;
- FOrm11.Edit2.Text:=IntToStr(pkm_s[i,pt]);
- end;
- procedure TForm11.BitBtn10Click(Sender: TObject);
- begin
- min_vse;
- end;
- //Работа Джостика
- Procedure djostik;
- var myjoy: tjoyinfo;x,y,i,z1,z2,z3:Integer; ErrorResult: MMRESULT;
- Begin ErrorResult := joyGetPos(joystickid1, @MyJoy);
- if ErrorResult = JOYERR_NOERROR then Begin
- joygetpos(joystickid1,@myjoy);
- x:=myjoy.wxpos;
- y:= myjoy.wypos;
- //Изменение позиции рукоятка вперед-назад
- IF y<30000 then pl_pos;
- IF y>36000 then min_pos;
- //Шаг вперед-назад рукоятка вправо-влево
- IF x<30000 then Begin pausa:=0; ud_tochki;end;
- IF x>36000 then Begin pausa:=0;
- pt:=pt+1;rasch_schag;pror_mgn;end;
- //ПУСК кнопка 1
- IF (myjoy.wbuttons and joy_button1)>0 then
- pausa:=1;
- //ПАУЗА кнопка 2
- IF (myjoy.wbuttons and joy_button2)>0 then
- pausa:=0;
- //Изменение режима ведения поезда кнопка 3
- IF (myjoy.wbuttons and joy_button3)>0 then
- Begin
- z1:=Form11.RadioGroup1.ItemIndex+1;
- If z1>3.5 then z1:=0;
- Form11.RadioGroup1.ItemIndex:=z1;
- rej_dv:=Form11.RadioGroup1.ItemIndex+1;
- i:=Form11.ComboBox1.ItemIndex+1;
- pkm_s[i,pt]:=0;
- FOrm11.Edit1.Text:=IntToStr(pkm_s[i,pt]);
- End;
- //Изменение скорости расчета кнопка 4
- IF (myjoy.wbuttons and joy_button4)>0 then
- Begin
- z2:=FOrm11.RadioGroup3.ItemIndex+1;
- If z2>6.5 then z2:=0;
- Form11.RadioGroup3.ItemIndex:=z2;
- IF Form11.RadioGroup3.ItemIndex=0 then Form11.Timer1.Interval:=10;
- IF Form11.RadioGroup3.ItemIndex=1 then Form11.Timer1.Interval:=50;
- IF Form11.RadioGroup3.ItemIndex=2 then Form11.Timer1.Interval:=100;
- IF FOrm11.RadioGroup3.ItemIndex=3 then Form11.Timer1.Interval:=500;
- IF Form11.RadioGroup3.ItemIndex=4 then Form11.Timer1.Interval:=1000;
- If Form11.RadioGroup3.ItemIndex=5 then Form11.Timer1.Interval:=2000;
- If Form11.RadioGroup3.ItemIndex=6 then Form11.Timer1.Interval:=5000;
- End;
- //ОТПУСК ТОРМОЗА - кнопка 5
- IF (myjoy.wbuttons and joy_button5)>0 then
- Begin
- sost_otpuska:=0;t_otp:=0;
- End;
- //Плюс ПКМ толкача кнопка 6
- IF (myjoy.wbuttons and joy_button6)>0 then
- Begin IF Form11.Panel2.Visible=true
- then pl_pos2;
- End;
- //Изменение режима ведения толкача - кнопка 7
- IF (myjoy.wbuttons and joy_button7)>0 then
- Begin IF Form11.Panel2.Visible=true
- then Begin
- z3:=Form11.RadioGroup2.ItemIndex+1;
- If z3>3.5 then z3:=0;
- Form11.RadioGroup2.ItemIndex:=z3;
- rej_dv2:=Form11.RadioGroup2.ItemIndex+1;
- i:=Form11.ComboBox2.ItemIndex+1;
- pkm_s[i,pt]:=0;
- FOrm11.Edit2.Text:=IntToStr(pkm_s[i,pt]);
- End;
- End;
- //Минус позиция контроллера толкача
- IF (myjoy.wbuttons and joy_button8)>0 then
- Begin IF Form11.Panel2.Visible=true
- then min_pos2;
- End;
- End;
- End;
- procedure TForm11.Button1Click(Sender: TObject);
- begin
- sost_otpuska:=0;t_otp:=0;
- end;
- procedure TForm11.Timer2Timer(Sender: TObject);
- begin
- IF Form11.Visible=true then djostik;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment