diff --git a/DynObj.cpp b/DynObj.cpp index e071ed48..b9128d9c 100644 --- a/DynObj.cpp +++ b/DynObj.cpp @@ -2591,8 +2591,11 @@ bool TDynamicObject::Update(double dt, double dt1) // inaczej // if (NoVoltTime>0.02) //tu można ograniczyć czas rozłączenia // if (DebugModeFlag) //logowanie nie zawsze - if (MoverParameters->Mains) + if ((MoverParameters->Mains) && + ((MoverParameters->EngineType != ElectricInductionMotor) + || (MoverParameters->GetTrainsetVoltage() < 0.1f))) { // Ra 15-01: logować tylko, jeśli WS załączony + // yB 16-03: i nie jest to asynchron zasilany z daleka // if (MoverParameters->PantFrontUp&&pants) // Ra 15-01: bezwzględne współrzędne pantografu nie są dostępne, // więc lepiej się tego nie zaloguje @@ -2722,9 +2725,13 @@ bool TDynamicObject::Update(double dt, double dt1) if (((MoverParameters->ShuntMode) && (Frj < 0.0015 * masa)) || (MoverParameters->V * MoverParameters->DirAbsolute < -0.2)) { - Fzad = Max0R(0.5 * masa, Fzad); + Fzad = Max0R(MoverParameters->StopBrakeDecc * masa, Fzad); } - FzadED = Min0R(Fzad, FmaxED); + + if (MoverParameters->BrakeHandle == MHZ_EN57?MoverParameters->BrakeOpModeFlag & bom_MED:MoverParameters->EpFuse) + FzadED = Min0R(Fzad, FmaxED); + else + FzadED = 0; FzadPN = Fzad - FrED; //np = 0; bool* PrzekrF = new bool[np]; diff --git a/McZapkie/Mover.hpp b/McZapkie/Mover.hpp index 40d9c2d9..98c609a6 100644 --- a/McZapkie/Mover.hpp +++ b/McZapkie/Mover.hpp @@ -154,6 +154,7 @@ struct TCurrentCollector double CSW; double MinV; double MaxV; + double OVP; double InsetV; double MinPress; double MaxPress; @@ -432,6 +433,7 @@ public: Byte Lights[2][16]; bool ScndInMain; bool MBrake; + double StopBrakeDecc; TSecuritySystem SecuritySystem; TScheme RList[65]; int RlistSize; @@ -565,6 +567,8 @@ public: bool EmergencyBrakeFlag; Byte BrakeDelayFlag; Byte BrakeDelays; + Byte BrakeOpModeFlag; + Byte BrakeOpModes; bool DynamicBrakeFlag; double LimPipePress; double ActFlowSpeed; @@ -883,6 +887,10 @@ static const Shortint eimv_Pmax = 0x11; static const Shortint eimv_Fzad = 0x12; static const Shortint eimv_Imax = 0x13; static const Shortint eimv_Fful = 0x14; +static const Shortint bom_PS = 0x1; +static const Shortint bom_PN = 0x2; +static const Shortint bom_EP = 0x4; +static const Shortint bom_MED = 0x8; extern PACKAGE double __fastcall Distance(const TLocation &Loc1, const TLocation &Loc2, const TDimension &Dim1, const TDimension &Dim2); diff --git a/McZapkie/_Mover.hpp b/McZapkie/_Mover.hpp index fde872e8..09463a1e 100644 --- a/McZapkie/_Mover.hpp +++ b/McZapkie/_Mover.hpp @@ -152,6 +152,7 @@ struct TCurrentCollector double CSW; double MinV; double MaxV; + double OVP; double InsetV; double MinPress; double MaxPress; @@ -410,6 +411,7 @@ public: Byte Lights[2][16]; bool ScndInMain; bool MBrake; + double StopBrakeDecc; TSecuritySystem SecuritySystem; TScheme RList[65]; int RlistSize; @@ -543,6 +545,8 @@ public: bool EmergencyBrakeFlag; Byte BrakeDelayFlag; Byte BrakeDelays; + Byte BrakeOpModeFlag; + Byte BrakeOpModes; bool DynamicBrakeFlag; double LimPipePress; double ActFlowSpeed; @@ -880,6 +884,10 @@ static const Shortint eimv_Pmax = 0x11; static const Shortint eimv_Fzad = 0x12; static const Shortint eimv_Imax = 0x13; static const Shortint eimv_Fful = 0x14; +static const Shortint bom_PS = 0x1; +static const Shortint bom_PN = 0x2; +static const Shortint bom_EP = 0x4; +static const Shortint bom_MED = 0x8; extern PACKAGE double __fastcall Distance(const TLocation &Loc1, const TLocation &Loc2, const TDimension &Dim1, const TDimension &Dim2); diff --git a/McZapkie/_mover.pas b/McZapkie/_mover.pas index 8158e123..010206a9 100644 --- a/McZapkie/_mover.pas +++ b/McZapkie/_mover.pas @@ -209,6 +209,10 @@ CONST eimv_Imax=19; eimv_Fful=20; + bom_PS = 1; + bom_PN = 2; + bom_EP = 4; + bom_MED = 8; TYPE {ogolne} @@ -294,6 +298,7 @@ TYPE MinH,MaxH: real; //zakres ruchu pantografu, nigdzie nie używany CSW: real; //szerokość części roboczej (styku) ślizgacza MinV,MaxV: real; //minimalne i maksymalne akceptowane napięcie + OVP: real; //czy jest przekaznik nadnapieciowy InsetV: real; //minimalne napięcie wymagane do załączenia MinPress: real; //minimalne ciśnienie do załączenia WS MaxPress: real; //maksymalne ciśnienie za reduktorem @@ -492,6 +497,7 @@ TYPE Lights: array [0..1] of array [1..16] of byte; ScndInMain: boolean; {zaleznosc bocznika od nastawnika} MBrake: boolean; {Czy jest hamulec reczny} + StopBrakeDecc: real; SecuritySystem: TSecuritySystem; {-sekcja parametrow dla lokomotywy elektrycznej} @@ -632,6 +638,8 @@ TYPE EmergencyBrakeFlag: boolean; {hamowanie nagle} BrakeDelayFlag: byte; {nastawa opoznienia ham. osob/towar/posp/exp 0/1/2/4} BrakeDelays: byte; {nastawy mozliwe do uzyskania} + BrakeOpModeFlag: byte; {nastawa trybu pracy PS/PN/EP/MED 1/2/4/8} + BrakeOpModes: byte; {nastawy mozliwe do uzyskania} DynamicBrakeFlag: boolean; {czy wlaczony hamulec elektrodymiczny} // NapUdWsp: integer; LimPipePress: real; {stabilizator cisnienia} @@ -1130,6 +1138,12 @@ function T_MoverParameters.BrakeRatio: real; function T_MoverParameters.LocalBrakeRatio: real; var LBR:real; begin + if BrakeHandle=MHZ_EN57 then + if (BrakeOpModeFlag>=bom_EP) then + LBR:=(Handle as TMHZ_EN57).GetEP(BrakeCtrlPosR) + else + LBR:=0 + else if LocalBrakePosNo>0 then LBR:=LocalBrakePos/LocalBrakePosNo else @@ -2281,7 +2295,17 @@ end; function T_MoverParameters.BrakeDelaySwitch(BDS:byte): boolean; begin // if BrakeCtrlPosNo>0 then - if Hamulec.SetBDF(BDS) then + if BrakeHandle=MHZ_EN57 then + begin + if (BDS<>BrakeOpModeFlag) and ((BDS and BrakeOpModes) > 0) then + begin + BrakeOpModeFlag:=BDS; + BrakeDelaySwitch:=true; + end + else + BrakeDelaySwitch:=false; + end + else if Hamulec.SetBDF(BDS) then begin BrakeDelayFlag:=BDS; BrakeDelaySwitch:=true; @@ -2467,7 +2491,12 @@ with BrakePressureTable[BrakeCtrlPos] do temp:=ScndPipePress; Handle.SetReductor(BrakeCtrlPos2); - dpMainValve:=Handle.GetPF(BrakeCtrlPosR, PipePress, temp, dt, EqvtPipePress); + if (BrakeOpModeFlag<>bom_PS) then + if (BrakeOpModeFlagMHZ_EN57) then + dpMainValve:=Handle.GetPF(BrakeCtrlPosR, PipePress, temp, dt, EqvtPipePress) + else + dpMainValve:=Handle.GetPF(0, PipePress, temp, dt, EqvtPipePress); + if (dpMainValve<0){and(PipePressureVal>0.01)} then {50} if Compressor>ScndPipePress then begin @@ -4145,7 +4174,7 @@ begin // dec(MainCtrlActualPos); FuseOff; {wywalanie bezpiecznika z powodu przetezenia silnikow} if (Mains) then //nie wchodzić w funkcję bez potrzeby - if (Abs(Voltage)EnginePowerSource.CollectorParameters.MaxV) then + if (Abs(Voltage)EnginePowerSource.CollectorParameters.MaxV) then if MainSwitch(false) then EventFlag:=true; //wywalanie szybkiego z powodu niewłaściwego napięcia @@ -4337,7 +4366,7 @@ begin ElectricInductionMotor: begin if (Mains) then //nie wchodzić w funkcję bez potrzeby - if (Abs(Voltage)EnginePowerSource.CollectorParameters.MaxV+100) then + if (Abs(Voltage)EnginePowerSource.CollectorParameters.MaxV+200) then begin MainSwitch(false); end; @@ -4346,7 +4375,9 @@ begin begin dtrans:=(Hamulec as TLSt).GetEDBCP; - if ((dtrans<0.25) and (LocHandle.GetCP<0.25) and (AnPos<0.01)) or ((ShuntModeAllow) and (LocalBrakePos=0)) then + if ((DoorLeftOpened)or(DoorRightOpened)) then + DynamicBrakeFlag:=true + else if ((dtrans<0.25) and (LocHandle.GetCP<0.25) and (AnPos<0.01)) or ((dtrans<0.25) and (ShuntModeAllow) and (LocalBrakePos=0)) then DynamicBrakeFlag:=false else if (((BrakePress>0.25) and (dtrans>0.25) or (LocHandle.GetCP>0.25))) or (AnPos>0.02) then DynamicBrakeFlag:=true; @@ -4391,8 +4422,8 @@ begin dmoment:=eimv[eimv_Fful]; // else // dmoment:=eimc[eimc_p_F0]*0.99; - if (abs((PosRatio+9.66*dizel_fill)*dmoment*100)>Adhesive(RunningTrack.friction)*TotalMassxg) then begin PosRatio:=0; tmp:=4; SandDoseOn; end;//przeciwposlizg - if (abs((PosRatio+9.80*dizel_fill)*dmoment*100)>Adhesive(RunningTrack.friction)*TotalMassxg) then begin PosRatio:=0; tmp:=9; SandDoseOn; end;//przeciwposlizg + if (abs((PosRatio+9.66*dizel_fill)*dmoment*100)>0.95*Adhesive(RunningTrack.friction)*TotalMassxg) then begin PosRatio:=0; tmp:=4; SandDoseOn; end;//przeciwposlizg + if (abs((PosRatio+9.80*dizel_fill)*dmoment*100)>0.95*Adhesive(RunningTrack.friction)*TotalMassxg) then begin PosRatio:=0; tmp:=9; SandDoseOn; end;//przeciwposlizg if (SlippingWheels) then begin PosRatio:=-PosRatio*0; tmp:=9; SandDoseOn; end;//przeciwposlizg dizel_fill:=dizel_fill+Max0R(Min0R(PosRatio-dizel_fill,0.1),-0.1)*2*(tmp{2{+4*byte(PosRatio0 then BrakeOpModeFlag:=bom_PS; +// if (BrakeOpModes and bom_EP)>0 then BrakeOpModeFlag:=bom_EP; +// if (BrakeOpModes and bom_MED)>0 then BrakeOpModeFlag:=bom_MED; +// //yB: jesli pojazdy nie maja zadeklarowanych czasow, to wsadz z przepisow +-16,(6)% for b:=1 to 4 do begin @@ -6440,6 +6479,11 @@ function PowerDecode(s:string): TPowerType; MaxH:=s2rE(DUE(ExtractKeyWord(lines,'MaxH='))); CSW:=s2rE(DUE(ExtractKeyWord(lines,'CSW='))); //szerokość części roboczej MaxV:=s2rE(DUE(ExtractKeyWord(lines,'MaxVoltage='))); + s:=ExtractKeyWord(lines,'OverVoltProt='); //przekaźnik nadnapięciowy + if s='Yes' then + OVP:=1 + else + OVP:=0; s:=ExtractKeyWord(lines,'MinV='); //napięcie rozłączające WS if s='' then MinV:=0.5*MaxV //gdyby parametr nie podany @@ -6968,6 +7012,10 @@ begin else if s='GPR+Mg' then BrakeDelays:=bdelay_G+bdelay_P+bdelay_R+bdelay_M else if s='PR+Mg' then BrakeDelays:=bdelay_P+bdelay_R+bdelay_M; + s:=DUE(ExtractKeyWord(lines,'BrakeOpModes=')); + if s='PN' then BrakeOpModes:=bom_PS+bom_PN + else if s='PNEPMED' then BrakeOpModes:=bom_PS+bom_PN+bom_EP+bom_MED; + { else if s='DPR+Mg' then begin Brakedelays:=bdelay_R; BrakeMethod:=3; end else if s='DGPR+Mg' then begin Brakedelays:=bdelay_G+bdelay_R; BrakeMethod:=3; end else if s='DGPR' then begin Brakedelays:=bdelay_G+bdelay_R; BrakeMethod:=1; end @@ -6979,6 +7027,7 @@ begin if s='FV4a' then BrakeHandle:=FV4a else if s='test' then BrakeHandle:=testH else if s='D2' then BrakeHandle:=D2 + else if s='MHZ_EN57' then BrakeHandle:=MHZ_EN57 else if s='M394' then BrakeHandle:=M394 else if s='Knorr' then BrakeHandle:=Knorr else if s='Westinghouse' then BrakeHandle:=West @@ -7059,6 +7108,8 @@ begin FastSerialCircuit:=1 else FastSerialCircuit:=0; + s:=ExtractKeyWord(lines,'SBD='); + StopBrakeDecc:=s2r(DUE(s)); if BrakeCtrlPosNo>0 then for i:=0 to BrakeCtrlPosNo+1 do diff --git a/McZapkie/hamulce.hpp b/McZapkie/hamulce.hpp index 80fc35dd..2ac310c9 100644 --- a/McZapkie/hamulce.hpp +++ b/McZapkie/hamulce.hpp @@ -1,850 +1,881 @@ -// Borland C++ Builder -// Copyright (c) 1995, 1999 by Borland International -// All rights reserved - -// (DO NOT EDIT: machine generated header) 'hamulce.pas' rev: 5.00 - -#ifndef hamulceHPP -#define hamulceHPP - -#pragma delphiheader begin -#pragma option push -w- -#pragma option push -Vx -#include // Pascal unit -#include // Pascal unit -#include // Pascal unit -#include // Pascal unit -#include // Pascal unit - -//-- user supplied ----------------------------------------------------------- - -namespace Hamulce -{ -//-- type declarations ------------------------------------------------------- -class DELPHICLASS TReservoir; -class PASCALIMPLEMENTATION TReservoir : public System::TObject -{ - typedef System::TObject inherited; - -protected: - double Cap; - double Vol; - double dVol; - -public: - __fastcall TReservoir(void); - void __fastcall CreateCap(double Capacity); - void __fastcall CreatePress(double Press); - virtual double __fastcall pa(void); - virtual double __fastcall P(void); - void __fastcall Flow(double dv); - void __fastcall Act(void); -public: - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TReservoir(void) { } - #pragma option pop - -}; - - -typedef TReservoir* *PReservoir; - -class DELPHICLASS TBrakeCyl; -class PASCALIMPLEMENTATION TBrakeCyl : public TReservoir -{ - typedef TReservoir inherited; - -public: - virtual double __fastcall pa(void); - virtual double __fastcall P(void); -public: - #pragma option push -w-inl - /* TReservoir.Create */ inline __fastcall TBrakeCyl(void) : TReservoir() { } - #pragma option pop - -public: - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TBrakeCyl(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TBrake; -class PASCALIMPLEMENTATION TBrake : public System::TObject -{ - typedef System::TObject inherited; - -protected: - TReservoir* BrakeCyl; - TReservoir* BrakeRes; - TReservoir* ValveRes; - Byte BCN; - double BCM; - double BCA; - Byte BrakeDelays; - Byte BrakeDelayFlag; - Friction::TFricMat* FM; - double MaxBP; - Byte BA; - Byte NBpA; - double SizeBR; - double SizeBC; - bool DCV; - double ASBP; - Byte BrakeStatus; - Byte SoundFlag; - -public: - __fastcall TBrake(double i_mbp, double i_bcr, double i_bcd, double i_brc, Byte i_bcn, Byte i_BD, Byte - i_mat, Byte i_ba, Byte i_nbpa); - virtual double __fastcall GetFC(double Vel, double N); - virtual double __fastcall GetPF(double PP, double dt, double Vel); - double __fastcall GetBCF(void); - virtual double __fastcall GetHPFlow(double HP, double dt); - virtual double __fastcall GetBCP(void); - double __fastcall GetBRP(void); - double __fastcall GetVRP(void); - virtual double __fastcall GetCRP(void); - virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); - bool __fastcall SetBDF(Byte nBDF); - void __fastcall Releaser(Byte state); - virtual void __fastcall SetEPS(double nEPS); - void __fastcall ASB(Byte state); - Byte __fastcall GetStatus(void); - void __fastcall SetASBP(double press); - virtual void __fastcall ForceEmptiness(void); - Byte __fastcall GetSoundFlag(void); -public: - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TBrake(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TWest; -class PASCALIMPLEMENTATION TWest : public TBrake -{ - typedef TBrake inherited; - -private: - double LBP; - double dVP; - double EPS; - double TareM; - double LoadM; - double TareBP; - double LoadC; - -public: - void __fastcall SetLBP(double P); - virtual double __fastcall GetPF(double PP, double dt, double Vel); - virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); - virtual double __fastcall GetHPFlow(double HP, double dt); - void __fastcall PLC(double mass); - virtual void __fastcall SetEPS(double nEPS); - void __fastcall SetLP(double TM, double LM, double TBP); -public: - #pragma option push -w-inl - /* TBrake.Create */ inline __fastcall TWest(double i_mbp, double i_bcr, double i_bcd, double i_brc, - Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) { } - #pragma option pop - -public: - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TWest(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TESt; -class PASCALIMPLEMENTATION TESt : public TBrake -{ - typedef TBrake inherited; - -private: - TReservoir* CntrlRes; - double BVM; - -public: - virtual double __fastcall GetPF(double PP, double dt, double Vel); - void __fastcall EStParams(double i_crc); - virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); - virtual double __fastcall GetCRP(void); - void __fastcall CheckState(double BCP, double &dV1); - void __fastcall CheckReleaser(double dt); - double __fastcall CVs(double bp); - double __fastcall BVs(double BCP); -public: - #pragma option push -w-inl - /* TBrake.Create */ inline __fastcall TESt(double i_mbp, double i_bcr, double i_bcd, double i_brc, - Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) { } - #pragma option pop - -public: - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TESt(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TESt3; -class PASCALIMPLEMENTATION TESt3 : public TESt -{ - typedef TESt inherited; - -private: - double CylFlowSpeed[2][2]; - -public: - virtual double __fastcall GetPF(double PP, double dt, double Vel); -public: - #pragma option push -w-inl - /* TBrake.Create */ inline __fastcall TESt3(double i_mbp, double i_bcr, double i_bcd, double i_brc, - Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TESt(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) { } - #pragma option pop - -public: - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TESt3(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TESt3AL2; -class PASCALIMPLEMENTATION TESt3AL2 : public TESt3 -{ - typedef TESt3 inherited; - -private: - double TareM; - double LoadM; - double TareBP; - double LoadC; - -public: - TReservoir* ImplsRes; - virtual double __fastcall GetPF(double PP, double dt, double Vel); - void __fastcall PLC(double mass); - void __fastcall SetLP(double TM, double LM, double TBP); - virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); -public: - #pragma option push -w-inl - /* TBrake.Create */ inline __fastcall TESt3AL2(double i_mbp, double i_bcr, double i_bcd, double i_brc - , Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TESt3(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) { } - #pragma option pop - -public: - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TESt3AL2(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TESt4R; -class PASCALIMPLEMENTATION TESt4R : public TESt -{ - typedef TESt inherited; - -private: - bool RapidStatus; - double RapidTemp; - -public: - TReservoir* ImplsRes; - virtual double __fastcall GetPF(double PP, double dt, double Vel); - virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); -public: - #pragma option push -w-inl - /* TBrake.Create */ inline __fastcall TESt4R(double i_mbp, double i_bcr, double i_bcd, double i_brc - , Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TESt(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) { } - #pragma option pop - -public: - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TESt4R(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TLSt; -class PASCALIMPLEMENTATION TLSt : public TESt4R -{ - typedef TESt4R inherited; - -private: - double CylFlowSpeed[2][2]; - double LBP; - double RM; - double EDFlag; - -public: - void __fastcall SetLBP(double P); - void __fastcall SetRM(double RMR); - virtual double __fastcall GetPF(double PP, double dt, double Vel); - virtual double __fastcall GetHPFlow(double HP, double dt); - virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); - virtual double __fastcall GetEDBCP(void); - void __fastcall SetED(double EDstate); -public: - #pragma option push -w-inl - /* TBrake.Create */ inline __fastcall TLSt(double i_mbp, double i_bcr, double i_bcd, double i_brc, - Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TESt4R(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) { } - #pragma option pop - -public: - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TLSt(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TEStED; -class PASCALIMPLEMENTATION TEStED : public TLSt -{ - typedef TLSt inherited; - -private: - double Nozzles[11]; - bool Zamykajacy; - bool Przys_blok; - TReservoir* Miedzypoj; - double TareM; - double LoadM; - double TareBP; - double LoadC; - -public: - virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); - virtual double __fastcall GetPF(double PP, double dt, double Vel); - virtual double __fastcall GetEDBCP(void); - void __fastcall PLC(double mass); - void __fastcall SetLP(double TM, double LM, double TBP); -public: - #pragma option push -w-inl - /* TBrake.Create */ inline __fastcall TEStED(double i_mbp, double i_bcr, double i_bcd, double i_brc - , Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TLSt(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) { } - #pragma option pop - -public: - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TEStED(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TEStEP2; -class PASCALIMPLEMENTATION TEStEP2 : public TLSt -{ - typedef TLSt inherited; - -private: - double TareM; - double LoadM; - double TareBP; - double LoadC; - double EPS; - -public: - virtual double __fastcall GetPF(double PP, double dt, double Vel); - virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); - void __fastcall PLC(double mass); - virtual void __fastcall SetEPS(double nEPS); - void __fastcall SetLP(double TM, double LM, double TBP); -public: - #pragma option push -w-inl - /* TBrake.Create */ inline __fastcall TEStEP2(double i_mbp, double i_bcr, double i_bcd, double i_brc - , Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TLSt(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) { } - #pragma option pop - -public: - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TEStEP2(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TCV1; -class PASCALIMPLEMENTATION TCV1 : public TBrake -{ - typedef TBrake inherited; - -private: - TReservoir* CntrlRes; - double BVM; - -public: - virtual double __fastcall GetPF(double PP, double dt, double Vel); - virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); - virtual double __fastcall GetCRP(void); - void __fastcall CheckState(double BCP, double &dV1); - double __fastcall CVs(double bp); - double __fastcall BVs(double BCP); -public: - #pragma option push -w-inl - /* TBrake.Create */ inline __fastcall TCV1(double i_mbp, double i_bcr, double i_bcd, double i_brc, - Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) { } - #pragma option pop - -public: - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TCV1(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TCV1R; -class PASCALIMPLEMENTATION TCV1R : public TCV1 -{ - typedef TCV1 inherited; - -private: - TReservoir* ImplsRes; - bool RapidStatus; -public: - #pragma option push -w-inl - /* TBrake.Create */ inline __fastcall TCV1R(double i_mbp, double i_bcr, double i_bcd, double i_brc, - Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TCV1(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) { } - #pragma option pop - -public: - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TCV1R(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TCV1L_TR; -class PASCALIMPLEMENTATION TCV1L_TR : public TCV1 -{ - typedef TCV1 inherited; - -private: - TReservoir* ImplsRes; - double LBP; - -public: - virtual double __fastcall GetPF(double PP, double dt, double Vel); - virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); - void __fastcall SetLBP(double P); - virtual double __fastcall GetHPFlow(double HP, double dt); -public: - #pragma option push -w-inl - /* TBrake.Create */ inline __fastcall TCV1L_TR(double i_mbp, double i_bcr, double i_bcd, double i_brc - , Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TCV1(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) { } - #pragma option pop - -public: - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TCV1L_TR(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TKE; -class PASCALIMPLEMENTATION TKE : public TBrake -{ - typedef TBrake inherited; - -private: - bool RapidStatus; - TReservoir* ImplsRes; - TReservoir* CntrlRes; - TReservoir* Brak2Res; - double BVM; - double TareM; - double LoadM; - double TareBP; - double LoadC; - double RM; - double LBP; - -public: - void __fastcall SetRM(double RMR); - virtual double __fastcall GetPF(double PP, double dt, double Vel); - virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); - virtual double __fastcall GetHPFlow(double HP, double dt); - virtual double __fastcall GetCRP(void); - void __fastcall CheckState(double BCP, double &dV1); - void __fastcall CheckReleaser(double dt); - double __fastcall CVs(double bp); - double __fastcall BVs(double BCP); - void __fastcall PLC(double mass); - void __fastcall SetLP(double TM, double LM, double TBP); - void __fastcall SetLBP(double P); -public: - #pragma option push -w-inl - /* TBrake.Create */ inline __fastcall TKE(double i_mbp, double i_bcr, double i_bcd, double i_brc, Byte - i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn, - i_BD, i_mat, i_ba, i_nbpa) { } - #pragma option pop - -public: - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TKE(void) { } - #pragma option pop - -}; - - -class DELPHICLASS THandle; -class PASCALIMPLEMENTATION THandle : public System::TObject -{ - typedef System::TObject inherited; - -public: - bool Time; - bool TimeEP; - double Sounds[5]; - virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); - virtual void __fastcall Init(double press); - virtual double __fastcall GetCP(void); - virtual void __fastcall SetReductor(double nAdj); - virtual double __fastcall GetSound(Byte i); - virtual double __fastcall GetPos(Byte i); -public: - #pragma option push -w-inl - /* TObject.Create */ inline __fastcall THandle(void) : System::TObject() { } - #pragma option pop - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~THandle(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TFV4a; -class PASCALIMPLEMENTATION TFV4a : public THandle -{ - typedef THandle inherited; - -private: - double CP; - double TP; - double RP; - -public: - virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); - virtual void __fastcall Init(double press); -public: - #pragma option push -w-inl - /* TObject.Create */ inline __fastcall TFV4a(void) : THandle() { } - #pragma option pop - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TFV4a(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TFV4aM; -class PASCALIMPLEMENTATION TFV4aM : public THandle -{ - typedef THandle inherited; - -private: - double CP; - double TP; - double RP; - double XP; - double RedAdj; - bool Fala; - -public: - virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); - virtual void __fastcall Init(double press); - virtual void __fastcall SetReductor(double nAdj); - virtual double __fastcall GetSound(Byte i); - virtual double __fastcall GetPos(Byte i); -public: - #pragma option push -w-inl - /* TObject.Create */ inline __fastcall TFV4aM(void) : THandle() { } - #pragma option pop - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TFV4aM(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TM394; -class PASCALIMPLEMENTATION TM394 : public THandle -{ - typedef THandle inherited; - -private: - double CP; - double RedAdj; - -public: - virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); - virtual void __fastcall Init(double press); - virtual void __fastcall SetReductor(double nAdj); - virtual double __fastcall GetCP(void); - virtual double __fastcall GetPos(Byte i); -public: - #pragma option push -w-inl - /* TObject.Create */ inline __fastcall TM394(void) : THandle() { } - #pragma option pop - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TM394(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TH14K1; -class PASCALIMPLEMENTATION TH14K1 : public THandle -{ - typedef THandle inherited; - -private: - double CP; - double RedAdj; - -public: - virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); - virtual void __fastcall Init(double press); - virtual void __fastcall SetReductor(double nAdj); - virtual double __fastcall GetCP(void); - virtual double __fastcall GetPos(Byte i); -public: - #pragma option push -w-inl - /* TObject.Create */ inline __fastcall TH14K1(void) : THandle() { } - #pragma option pop - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TH14K1(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TSt113; -class PASCALIMPLEMENTATION TSt113 : public TH14K1 -{ - typedef TH14K1 inherited; - -private: - double EPS; - -public: - virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); - virtual double __fastcall GetCP(void); - virtual double __fastcall GetPos(Byte i); - virtual void __fastcall Init(double press); -public: - #pragma option push -w-inl - /* TObject.Create */ inline __fastcall TSt113(void) : TH14K1() { } - #pragma option pop - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TSt113(void) { } - #pragma option pop - -}; - - -class DELPHICLASS Ttest; -class PASCALIMPLEMENTATION Ttest : public THandle -{ - typedef THandle inherited; - -private: - double CP; - -public: - virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); - virtual void __fastcall Init(double press); -public: - #pragma option push -w-inl - /* TObject.Create */ inline __fastcall Ttest(void) : THandle() { } - #pragma option pop - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~Ttest(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TFD1; -class PASCALIMPLEMENTATION TFD1 : public THandle -{ - typedef THandle inherited; - -private: - double MaxBP; - double BP; - -public: - double Speed; - virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); - virtual void __fastcall Init(double press); - virtual double __fastcall GetCP(void); - void __fastcall SetSpeed(double nSpeed); -public: - #pragma option push -w-inl - /* TObject.Create */ inline __fastcall TFD1(void) : THandle() { } - #pragma option pop - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TFD1(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TH1405; -class PASCALIMPLEMENTATION TH1405 : public THandle -{ - typedef THandle inherited; - -private: - double MaxBP; - double BP; - -public: - virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); - virtual void __fastcall Init(double press); - virtual double __fastcall GetCP(void); -public: - #pragma option push -w-inl - /* TObject.Create */ inline __fastcall TH1405(void) : THandle() { } - #pragma option pop - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TH1405(void) { } - #pragma option pop - -}; - - -class DELPHICLASS TFVel6; -class PASCALIMPLEMENTATION TFVel6 : public THandle -{ - typedef THandle inherited; - -private: - double EPS; - -public: - virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); - virtual double __fastcall GetCP(void); - virtual double __fastcall GetPos(Byte i); - virtual double __fastcall GetSound(Byte i); - virtual void __fastcall Init(double press); -public: - #pragma option push -w-inl - /* TObject.Create */ inline __fastcall TFVel6(void) : THandle() { } - #pragma option pop - #pragma option push -w-inl - /* TObject.Destroy */ inline __fastcall virtual ~TFVel6(void) { } - #pragma option pop - -}; - - -//-- var, const, procedure --------------------------------------------------- -static const Shortint LocalBrakePosNo = 0xa; -static const Shortint MainBrakeMaxPos = 0xa; -static const Shortint bdelay_G = 0x1; -static const Shortint bdelay_P = 0x2; -static const Shortint bdelay_R = 0x4; -static const Shortint bdelay_M = 0x8; -static const Byte bdelay_GR = 0x80; -static const Shortint b_off = 0x0; -static const Shortint b_hld = 0x1; -static const Shortint b_on = 0x2; -static const Shortint b_rfl = 0x4; -static const Shortint b_rls = 0x8; -static const Shortint b_ep = 0x10; -static const Shortint b_asb = 0x20; -static const Byte b_dmg = 0x80; -static const Shortint df_on = 0x1; -static const Shortint df_off = 0x2; -static const Shortint df_br = 0x4; -static const Shortint df_vv = 0x8; -static const Shortint df_bc = 0x10; -static const Shortint df_cv = 0x20; -static const Shortint df_PP = 0x40; -static const Byte df_RR = 0x80; -static const Shortint s_fv4a_b = 0x0; -static const Shortint s_fv4a_u = 0x1; -static const Shortint s_fv4a_e = 0x2; -static const Shortint s_fv4a_x = 0x3; -static const Shortint s_fv4a_t = 0x4; -static const Shortint bp_P10 = 0x0; -static const Shortint bp_P10Bg = 0x2; -static const Shortint bp_P10Bgu = 0x1; -static const Shortint bp_LLBg = 0x4; -static const Shortint bp_LLBgu = 0x3; -static const Shortint bp_LBg = 0x6; -static const Shortint bp_LBgu = 0x5; -static const Shortint bp_KBg = 0x8; -static const Shortint bp_KBgu = 0x7; -static const Shortint bp_D1 = 0x9; -static const Shortint bp_D2 = 0xa; -static const Shortint bp_FR513 = 0xb; -static const Shortint bp_Cosid = 0xc; -static const Shortint bp_PKPBg = 0xd; -static const Shortint bp_PKPBgu = 0xe; -static const Byte bp_MHS = 0x80; -static const Shortint bp_P10yBg = 0xf; -static const Shortint bp_P10yBgu = 0x10; -static const Shortint bp_FR510 = 0x11; -static const Shortint sf_Acc = 0x1; -static const Shortint sf_BR = 0x2; -static const Shortint sf_CylB = 0x4; -static const Shortint sf_CylU = 0x8; -static const Shortint sf_rel = 0x10; -static const Shortint sf_ep = 0x20; -static const Shortint bh_MIN = 0x0; -static const Shortint bh_MAX = 0x1; -static const Shortint bh_FS = 0x2; -static const Shortint bh_RP = 0x3; -static const Shortint bh_NP = 0x4; -static const Shortint bh_MB = 0x5; -static const Shortint bh_FB = 0x6; -static const Shortint bh_EB = 0x7; -static const Shortint bh_EPR = 0x8; -static const Shortint bh_EPN = 0x9; -static const Shortint bh_EPB = 0xa; -#define SpgD (7.917000E-01) -#define SpO (5.067000E-01) -extern PACKAGE double BPT[9][2]; -extern PACKAGE double BPT_394[7][2]; -static const Shortint i_bcpno = 0x6; -extern PACKAGE double __fastcall PF(double P1, double P2, double S, double DP); -extern PACKAGE double __fastcall PF1(double P1, double P2, double S); -extern PACKAGE double __fastcall PFVa(double PH, double PL, double S, double LIM, double DP); -extern PACKAGE double __fastcall PFVd(double PH, double PL, double S, double LIM, double DP); - -} /* namespace Hamulce */ -#if !defined(NO_IMPLICIT_NAMESPACE_USE) -using namespace Hamulce; -#endif -#pragma option pop // -w- -#pragma option pop // -Vx - -#pragma delphiheader end. -//-- end unit ---------------------------------------------------------------- -#endif // hamulce +// Borland C++ Builder +// Copyright (c) 1995, 1999 by Borland International +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'hamulce.pas' rev: 5.00 + +#ifndef hamulceHPP +#define hamulceHPP + +#pragma delphiheader begin +#pragma option push -w- +#pragma option push -Vx +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Hamulce +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TReservoir; +class PASCALIMPLEMENTATION TReservoir : public System::TObject +{ + typedef System::TObject inherited; + +protected: + double Cap; + double Vol; + double dVol; + +public: + __fastcall TReservoir(void); + void __fastcall CreateCap(double Capacity); + void __fastcall CreatePress(double Press); + virtual double __fastcall pa(void); + virtual double __fastcall P(void); + void __fastcall Flow(double dv); + void __fastcall Act(void); +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TReservoir(void) { } + #pragma option pop + +}; + + +typedef TReservoir* *PReservoir; + +class DELPHICLASS TBrakeCyl; +class PASCALIMPLEMENTATION TBrakeCyl : public TReservoir +{ + typedef TReservoir inherited; + +public: + virtual double __fastcall pa(void); + virtual double __fastcall P(void); +public: + #pragma option push -w-inl + /* TReservoir.Create */ inline __fastcall TBrakeCyl(void) : TReservoir() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TBrakeCyl(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TBrake; +class PASCALIMPLEMENTATION TBrake : public System::TObject +{ + typedef System::TObject inherited; + +protected: + TReservoir* BrakeCyl; + TReservoir* BrakeRes; + TReservoir* ValveRes; + Byte BCN; + double BCM; + double BCA; + Byte BrakeDelays; + Byte BrakeDelayFlag; + Friction::TFricMat* FM; + double MaxBP; + Byte BA; + Byte NBpA; + double SizeBR; + double SizeBC; + bool DCV; + double ASBP; + Byte BrakeStatus; + Byte SoundFlag; + +public: + __fastcall TBrake(double i_mbp, double i_bcr, double i_bcd, double i_brc, Byte i_bcn, Byte i_BD, Byte + i_mat, Byte i_ba, Byte i_nbpa); + virtual double __fastcall GetFC(double Vel, double N); + virtual double __fastcall GetPF(double PP, double dt, double Vel); + double __fastcall GetBCF(void); + virtual double __fastcall GetHPFlow(double HP, double dt); + virtual double __fastcall GetBCP(void); + double __fastcall GetBRP(void); + double __fastcall GetVRP(void); + virtual double __fastcall GetCRP(void); + virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); + bool __fastcall SetBDF(Byte nBDF); + void __fastcall Releaser(Byte state); + virtual void __fastcall SetEPS(double nEPS); + void __fastcall ASB(Byte state); + Byte __fastcall GetStatus(void); + void __fastcall SetASBP(double press); + virtual void __fastcall ForceEmptiness(void); + Byte __fastcall GetSoundFlag(void); +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TBrake(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TWest; +class PASCALIMPLEMENTATION TWest : public TBrake +{ + typedef TBrake inherited; + +private: + double LBP; + double dVP; + double EPS; + double TareM; + double LoadM; + double TareBP; + double LoadC; + +public: + void __fastcall SetLBP(double P); + virtual double __fastcall GetPF(double PP, double dt, double Vel); + virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); + virtual double __fastcall GetHPFlow(double HP, double dt); + void __fastcall PLC(double mass); + virtual void __fastcall SetEPS(double nEPS); + void __fastcall SetLP(double TM, double LM, double TBP); +public: + #pragma option push -w-inl + /* TBrake.Create */ inline __fastcall TWest(double i_mbp, double i_bcr, double i_bcd, double i_brc, + Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TWest(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TESt; +class PASCALIMPLEMENTATION TESt : public TBrake +{ + typedef TBrake inherited; + +private: + TReservoir* CntrlRes; + double BVM; + +public: + virtual double __fastcall GetPF(double PP, double dt, double Vel); + void __fastcall EStParams(double i_crc); + virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); + virtual double __fastcall GetCRP(void); + void __fastcall CheckState(double BCP, double &dV1); + void __fastcall CheckReleaser(double dt); + double __fastcall CVs(double bp); + double __fastcall BVs(double BCP); +public: + #pragma option push -w-inl + /* TBrake.Create */ inline __fastcall TESt(double i_mbp, double i_bcr, double i_bcd, double i_brc, + Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TESt(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TESt3; +class PASCALIMPLEMENTATION TESt3 : public TESt +{ + typedef TESt inherited; + +private: + double CylFlowSpeed[2][2]; + +public: + virtual double __fastcall GetPF(double PP, double dt, double Vel); +public: + #pragma option push -w-inl + /* TBrake.Create */ inline __fastcall TESt3(double i_mbp, double i_bcr, double i_bcd, double i_brc, + Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TESt(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TESt3(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TESt3AL2; +class PASCALIMPLEMENTATION TESt3AL2 : public TESt3 +{ + typedef TESt3 inherited; + +private: + double TareM; + double LoadM; + double TareBP; + double LoadC; + +public: + TReservoir* ImplsRes; + virtual double __fastcall GetPF(double PP, double dt, double Vel); + void __fastcall PLC(double mass); + void __fastcall SetLP(double TM, double LM, double TBP); + virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); +public: + #pragma option push -w-inl + /* TBrake.Create */ inline __fastcall TESt3AL2(double i_mbp, double i_bcr, double i_bcd, double i_brc + , Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TESt3(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TESt3AL2(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TESt4R; +class PASCALIMPLEMENTATION TESt4R : public TESt +{ + typedef TESt inherited; + +private: + bool RapidStatus; + double RapidTemp; + +public: + TReservoir* ImplsRes; + virtual double __fastcall GetPF(double PP, double dt, double Vel); + virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); +public: + #pragma option push -w-inl + /* TBrake.Create */ inline __fastcall TESt4R(double i_mbp, double i_bcr, double i_bcd, double i_brc + , Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TESt(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TESt4R(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TLSt; +class PASCALIMPLEMENTATION TLSt : public TESt4R +{ + typedef TESt4R inherited; + +private: + double CylFlowSpeed[2][2]; + double LBP; + double RM; + double EDFlag; + +public: + void __fastcall SetLBP(double P); + void __fastcall SetRM(double RMR); + virtual double __fastcall GetPF(double PP, double dt, double Vel); + virtual double __fastcall GetHPFlow(double HP, double dt); + virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); + virtual double __fastcall GetEDBCP(void); + void __fastcall SetED(double EDstate); +public: + #pragma option push -w-inl + /* TBrake.Create */ inline __fastcall TLSt(double i_mbp, double i_bcr, double i_bcd, double i_brc, + Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TESt4R(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TLSt(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TEStED; +class PASCALIMPLEMENTATION TEStED : public TLSt +{ + typedef TLSt inherited; + +private: + double Nozzles[11]; + bool Zamykajacy; + bool Przys_blok; + TReservoir* Miedzypoj; + double TareM; + double LoadM; + double TareBP; + double LoadC; + +public: + virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); + virtual double __fastcall GetPF(double PP, double dt, double Vel); + virtual double __fastcall GetEDBCP(void); + void __fastcall PLC(double mass); + void __fastcall SetLP(double TM, double LM, double TBP); +public: + #pragma option push -w-inl + /* TBrake.Create */ inline __fastcall TEStED(double i_mbp, double i_bcr, double i_bcd, double i_brc + , Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TLSt(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TEStED(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TEStEP2; +class PASCALIMPLEMENTATION TEStEP2 : public TLSt +{ + typedef TLSt inherited; + +private: + double TareM; + double LoadM; + double TareBP; + double LoadC; + double EPS; + +public: + virtual double __fastcall GetPF(double PP, double dt, double Vel); + virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); + void __fastcall PLC(double mass); + virtual void __fastcall SetEPS(double nEPS); + void __fastcall SetLP(double TM, double LM, double TBP); +public: + #pragma option push -w-inl + /* TBrake.Create */ inline __fastcall TEStEP2(double i_mbp, double i_bcr, double i_bcd, double i_brc + , Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TLSt(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TEStEP2(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TCV1; +class PASCALIMPLEMENTATION TCV1 : public TBrake +{ + typedef TBrake inherited; + +private: + TReservoir* CntrlRes; + double BVM; + +public: + virtual double __fastcall GetPF(double PP, double dt, double Vel); + virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); + virtual double __fastcall GetCRP(void); + void __fastcall CheckState(double BCP, double &dV1); + double __fastcall CVs(double bp); + double __fastcall BVs(double BCP); +public: + #pragma option push -w-inl + /* TBrake.Create */ inline __fastcall TCV1(double i_mbp, double i_bcr, double i_bcd, double i_brc, + Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TCV1(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TCV1R; +class PASCALIMPLEMENTATION TCV1R : public TCV1 +{ + typedef TCV1 inherited; + +private: + TReservoir* ImplsRes; + bool RapidStatus; +public: + #pragma option push -w-inl + /* TBrake.Create */ inline __fastcall TCV1R(double i_mbp, double i_bcr, double i_bcd, double i_brc, + Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TCV1(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TCV1R(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TCV1L_TR; +class PASCALIMPLEMENTATION TCV1L_TR : public TCV1 +{ + typedef TCV1 inherited; + +private: + TReservoir* ImplsRes; + double LBP; + +public: + virtual double __fastcall GetPF(double PP, double dt, double Vel); + virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); + void __fastcall SetLBP(double P); + virtual double __fastcall GetHPFlow(double HP, double dt); +public: + #pragma option push -w-inl + /* TBrake.Create */ inline __fastcall TCV1L_TR(double i_mbp, double i_bcr, double i_bcd, double i_brc + , Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TCV1(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TCV1L_TR(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TKE; +class PASCALIMPLEMENTATION TKE : public TBrake +{ + typedef TBrake inherited; + +private: + bool RapidStatus; + TReservoir* ImplsRes; + TReservoir* CntrlRes; + TReservoir* Brak2Res; + double BVM; + double TareM; + double LoadM; + double TareBP; + double LoadC; + double RM; + double LBP; + +public: + void __fastcall SetRM(double RMR); + virtual double __fastcall GetPF(double PP, double dt, double Vel); + virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, Byte BDF); + virtual double __fastcall GetHPFlow(double HP, double dt); + virtual double __fastcall GetCRP(void); + void __fastcall CheckState(double BCP, double &dV1); + void __fastcall CheckReleaser(double dt); + double __fastcall CVs(double bp); + double __fastcall BVs(double BCP); + void __fastcall PLC(double mass); + void __fastcall SetLP(double TM, double LM, double TBP); + void __fastcall SetLBP(double P); +public: + #pragma option push -w-inl + /* TBrake.Create */ inline __fastcall TKE(double i_mbp, double i_bcr, double i_bcd, double i_brc, Byte + i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn, + i_BD, i_mat, i_ba, i_nbpa) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TKE(void) { } + #pragma option pop + +}; + + +class DELPHICLASS THandle; +class PASCALIMPLEMENTATION THandle : public System::TObject +{ + typedef System::TObject inherited; + +public: + bool Time; + bool TimeEP; + double Sounds[5]; + virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); + virtual void __fastcall Init(double press); + virtual double __fastcall GetCP(void); + virtual void __fastcall SetReductor(double nAdj); + virtual double __fastcall GetSound(Byte i); + virtual double __fastcall GetPos(Byte i); +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall THandle(void) : System::TObject() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~THandle(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TFV4a; +class PASCALIMPLEMENTATION TFV4a : public THandle +{ + typedef THandle inherited; + +private: + double CP; + double TP; + double RP; + +public: + virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); + virtual void __fastcall Init(double press); +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TFV4a(void) : THandle() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TFV4a(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TFV4aM; +class PASCALIMPLEMENTATION TFV4aM : public THandle +{ + typedef THandle inherited; + +private: + double CP; + double TP; + double RP; + double XP; + double RedAdj; + bool Fala; + +public: + virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); + virtual void __fastcall Init(double press); + virtual void __fastcall SetReductor(double nAdj); + virtual double __fastcall GetSound(Byte i); + virtual double __fastcall GetPos(Byte i); +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TFV4aM(void) : THandle() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TFV4aM(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TMHZ_EN57; +class PASCALIMPLEMENTATION TMHZ_EN57 : public THandle +{ + typedef THandle inherited; + +private: + double CP; + double TP; + double RP; + double RedAdj; + bool Fala; + +public: + virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); + virtual void __fastcall Init(double press); + virtual void __fastcall SetReductor(double nAdj); + virtual double __fastcall GetSound(Byte i); + virtual double __fastcall GetPos(Byte i); + virtual double __fastcall GetCP(void); + double __fastcall GetEP(double pos); +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TMHZ_EN57(void) : THandle() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TMHZ_EN57(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TM394; +class PASCALIMPLEMENTATION TM394 : public THandle +{ + typedef THandle inherited; + +private: + double CP; + double RedAdj; + +public: + virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); + virtual void __fastcall Init(double press); + virtual void __fastcall SetReductor(double nAdj); + virtual double __fastcall GetCP(void); + virtual double __fastcall GetPos(Byte i); +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TM394(void) : THandle() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TM394(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TH14K1; +class PASCALIMPLEMENTATION TH14K1 : public THandle +{ + typedef THandle inherited; + +private: + double CP; + double RedAdj; + +public: + virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); + virtual void __fastcall Init(double press); + virtual void __fastcall SetReductor(double nAdj); + virtual double __fastcall GetCP(void); + virtual double __fastcall GetPos(Byte i); +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TH14K1(void) : THandle() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TH14K1(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TSt113; +class PASCALIMPLEMENTATION TSt113 : public TH14K1 +{ + typedef TH14K1 inherited; + +private: + double EPS; + +public: + virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); + virtual double __fastcall GetCP(void); + virtual double __fastcall GetPos(Byte i); + virtual void __fastcall Init(double press); +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TSt113(void) : TH14K1() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TSt113(void) { } + #pragma option pop + +}; + + +class DELPHICLASS Ttest; +class PASCALIMPLEMENTATION Ttest : public THandle +{ + typedef THandle inherited; + +private: + double CP; + +public: + virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); + virtual void __fastcall Init(double press); +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall Ttest(void) : THandle() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~Ttest(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TFD1; +class PASCALIMPLEMENTATION TFD1 : public THandle +{ + typedef THandle inherited; + +private: + double MaxBP; + double BP; + +public: + double Speed; + virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); + virtual void __fastcall Init(double press); + virtual double __fastcall GetCP(void); + void __fastcall SetSpeed(double nSpeed); +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TFD1(void) : THandle() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TFD1(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TH1405; +class PASCALIMPLEMENTATION TH1405 : public THandle +{ + typedef THandle inherited; + +private: + double MaxBP; + double BP; + +public: + virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); + virtual void __fastcall Init(double press); + virtual double __fastcall GetCP(void); +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TH1405(void) : THandle() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TH1405(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TFVel6; +class PASCALIMPLEMENTATION TFVel6 : public THandle +{ + typedef THandle inherited; + +private: + double EPS; + +public: + virtual double __fastcall GetPF(double i_bcp, double pp, double hp, double dt, double ep); + virtual double __fastcall GetCP(void); + virtual double __fastcall GetPos(Byte i); + virtual double __fastcall GetSound(Byte i); + virtual void __fastcall Init(double press); +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TFVel6(void) : THandle() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TFVel6(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- +static const Shortint LocalBrakePosNo = 0xa; +static const Shortint MainBrakeMaxPos = 0xa; +static const Shortint bdelay_G = 0x1; +static const Shortint bdelay_P = 0x2; +static const Shortint bdelay_R = 0x4; +static const Shortint bdelay_M = 0x8; +static const Byte bdelay_GR = 0x80; +static const Shortint b_off = 0x0; +static const Shortint b_hld = 0x1; +static const Shortint b_on = 0x2; +static const Shortint b_rfl = 0x4; +static const Shortint b_rls = 0x8; +static const Shortint b_ep = 0x10; +static const Shortint b_asb = 0x20; +static const Byte b_dmg = 0x80; +static const Shortint df_on = 0x1; +static const Shortint df_off = 0x2; +static const Shortint df_br = 0x4; +static const Shortint df_vv = 0x8; +static const Shortint df_bc = 0x10; +static const Shortint df_cv = 0x20; +static const Shortint df_PP = 0x40; +static const Byte df_RR = 0x80; +static const Shortint s_fv4a_b = 0x0; +static const Shortint s_fv4a_u = 0x1; +static const Shortint s_fv4a_e = 0x2; +static const Shortint s_fv4a_x = 0x3; +static const Shortint s_fv4a_t = 0x4; +static const Shortint bp_P10 = 0x0; +static const Shortint bp_P10Bg = 0x2; +static const Shortint bp_P10Bgu = 0x1; +static const Shortint bp_LLBg = 0x4; +static const Shortint bp_LLBgu = 0x3; +static const Shortint bp_LBg = 0x6; +static const Shortint bp_LBgu = 0x5; +static const Shortint bp_KBg = 0x8; +static const Shortint bp_KBgu = 0x7; +static const Shortint bp_D1 = 0x9; +static const Shortint bp_D2 = 0xa; +static const Shortint bp_FR513 = 0xb; +static const Shortint bp_Cosid = 0xc; +static const Shortint bp_PKPBg = 0xd; +static const Shortint bp_PKPBgu = 0xe; +static const Byte bp_MHS = 0x80; +static const Shortint bp_P10yBg = 0xf; +static const Shortint bp_P10yBgu = 0x10; +static const Shortint bp_FR510 = 0x11; +static const Shortint sf_Acc = 0x1; +static const Shortint sf_BR = 0x2; +static const Shortint sf_CylB = 0x4; +static const Shortint sf_CylU = 0x8; +static const Shortint sf_rel = 0x10; +static const Shortint sf_ep = 0x20; +static const Shortint bh_MIN = 0x0; +static const Shortint bh_MAX = 0x1; +static const Shortint bh_FS = 0x2; +static const Shortint bh_RP = 0x3; +static const Shortint bh_NP = 0x4; +static const Shortint bh_MB = 0x5; +static const Shortint bh_FB = 0x6; +static const Shortint bh_EB = 0x7; +static const Shortint bh_EPR = 0x8; +static const Shortint bh_EPN = 0x9; +static const Shortint bh_EPB = 0xa; +#define SpgD (7.917000E-01) +#define SpO (5.067000E-01) +extern PACKAGE double BPT[9][2]; +extern PACKAGE double BPT_394[7][2]; +static const Shortint i_bcpno = 0x6; +extern PACKAGE double __fastcall PF(double P1, double P2, double S, double DP); +extern PACKAGE double __fastcall PF1(double P1, double P2, double S); +extern PACKAGE double __fastcall PFVa(double PH, double PL, double S, double LIM, double DP); +extern PACKAGE double __fastcall PFVd(double PH, double PL, double S, double LIM, double DP); + +} /* namespace Hamulce */ +#if !defined(NO_IMPLICIT_NAMESPACE_USE) +using namespace Hamulce; +#endif +#pragma option pop // -w- +#pragma option pop // -Vx + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // hamulce diff --git a/McZapkie/hamulce.pas b/McZapkie/hamulce.pas index 66e45418..efd36cbc 100644 --- a/McZapkie/hamulce.pas +++ b/McZapkie/hamulce.pas @@ -1,3048 +1,3200 @@ -unit hamulce; {fizyka hamulcow dla symulatora} - -(* -This Source Code Form is subject to the -terms of the Mozilla Public License, v. -2.0. If a copy of the MPL was not -distributed with this file, You can -obtain one at -http://mozilla.org/MPL/2.0/. -*) -(* - MaSzyna EU07 - SPKS - Brakes. - Copyright (C) 2007-2014 Maciej Cierniak -*) - - -(* -(C) youBy -Co brakuje: -moze jeszcze jakis SW -*) -(* -Zrobione: -ESt3, ESt3AL2, ESt4R, LSt, FV4a, FD1, EP2, prosty westinghouse -duzo wersji żeliwa -KE -Tarcze od 152A -Magnetyki (implementacja w mover.pas) -Matrosow 394 -H14K1 (zasadniczy), H1405 (pomocniczy), St113 (ep) -Knorr/West EP - żeby był -*) - -interface - -uses mctools,sysutils,friction; - -CONST - - LocalBrakePosNo=10; {ilosc nastaw hamulca recznego lub pomocniczego} - MainBrakeMaxPos=10; {max. ilosc nastaw hamulca zasadniczego} - - {nastawy hamulca} - bdelay_G=1; //G - bdelay_P=2; //P - bdelay_R=4; //R - bdelay_M=8; //Mg - bdelay_GR=128; //G-R - - - {stan hamulca} - b_off = 0; //luzowanie - b_hld = 1; //trzymanie - b_on = 2; //napelnianie - b_rfl = 4; //uzupelnianie - b_rls = 8; //odluzniacz - b_ep = 16; //elektropneumatyczny - b_asb = 32; //elektropneumatyczny - b_dmg =128; //wylaczony z dzialania - - {uszkodzenia hamulca} - df_on = 1; //napelnianie - df_off = 2; //luzowanie - df_br = 4; //wyplyw z ZP - df_vv = 8; //wyplyw z komory wstepnej - df_bc = 16; //wyplyw z silownika - df_cv = 32; //wyplyw z ZS - df_PP = 64; //zawsze niski stopien - df_RR =128; //zawsze wysoki stopien - - {indeksy dzwiekow FV4a} - s_fv4a_b = 0; //hamowanie - s_fv4a_u = 1; //luzowanie - s_fv4a_e = 2; //hamowanie nagle - s_fv4a_x = 3; //wyplyw sterujacego fala - s_fv4a_t = 4; //wyplyw z czasowego - - {pary cierne} - bp_P10 = 0; - bp_P10Bg = 2; //żeliwo fosforowe P10 - bp_P10Bgu = 1; - bp_LLBg = 4; //komp. b.n.t. - bp_LLBgu = 3; - bp_LBg = 6; //komp. n.t. - bp_LBgu = 5; - bp_KBg = 8; //komp. w.t. - bp_KBgu = 7; - bp_D1 = 9; //tarcze - bp_D2 = 10; - bp_FR513 = 11; //Frenoplast FR513 - bp_Cosid = 12; //jakistam kompozyt :D - bp_PKPBg = 13; //żeliwo PKP - bp_PKPBgu = 14; - bp_MHS = 128; //magnetyczny hamulec szynowy - bp_P10yBg = 15; //żeliwo fosforowe P10 - bp_P10yBgu= 16; - bp_FR510 = 17; //Frenoplast FR510 - - sf_Acc = 1; //przyspieszacz - sf_BR = 2; //przekladnia - sf_CylB = 4; //cylinder - napelnianie - sf_CylU = 8; //cylinder - oproznianie - sf_rel = 16; //odluzniacz - sf_ep = 32; //zawory ep - - bh_MIN= 0; //minimalna pozycja - bh_MAX= 1; //maksymalna pozycja - bh_FS = 2; //napelnianie uderzeniowe //jesli nie ma, to jazda - bh_RP = 3; //jazda - bh_NP = 4; //odciecie - podwojna trakcja - bh_MB = 5; //odciecie - utrzymanie stopnia hamowania/pierwszy 1 stopien hamowania - bh_FB = 6; //pelne - bh_EB = 7; //nagle - bh_EPR= 8; //ep - luzowanie //pelny luz dla ep kątowego - bh_EPN= 9; //ep - utrzymanie //jesli rowne luzowaniu, wtedy sterowanie przyciskiem - bh_EPB=10; //ep - hamowanie //pelne hamowanie dla ep kątowego - - - SpgD=0.7917; - SpO=0.5067; //przekroj przewodu 1" w l/m - //wyj: jednostka dosyc dziwna, ale wszystkie obliczenia - //i pojemnosci sa podane w litrach (rozsadne wielkosci) - //zas dlugosc pojazdow jest podana w metrach - //a predkosc przeplywu w m/s //3.5 - //7//1.5 -// BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (14, 5.4), (9, 5.0), (6, 4.6), (9, 4.5), (9, 4.0), (9, 3.5), (9, 2.8), (34, 2.8)); -// BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (7, 5.0), (2.0, 5.0), (4.5, 4.6), (4.5, 4.2), (4.5, 3.8), (4.5, 3.4), (4.5, 2.8), (8, 2.8)); - BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (7, 5.0), (2.0, 5.0), (4.5, 4.6), (4.5, 4.2), (4.5, 3.8), (4.5, 3.4), (4.5, 2.8), (8, 2.8)); - BPT_394: array[-1..5] of array [0..1] of real= ((13, 10.0), (5, 5.0), (0, -1), (5, -1), (5, 0.0), (5, 0.0), (18, 0.0)); -// BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (12, 5.4), (9, 5.0), (9, 4.6), (9, 4.2), (9, 3.8), (9, 3.4), (9, 2.8), (34, 2.8)); -// BPT: array[-2..6] of array [0..1] of real= ((0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0)); - i_bcpno= 6; - -TYPE - //klasa obejmujaca pojedyncze zbiorniki - TReservoir= class - protected - Cap: real; - Vol: real; - dVol: real; - public - constructor Create; - procedure CreateCap(Capacity: real); - procedure CreatePress(Press: real); - function pa: real; virtual; - function P: real; virtual; - procedure Flow(dv: real); - procedure Act; - end; - - PReservoir=^TReservoir; - - TBrakeCyl= class(TReservoir) - public - function pa: real; override; - function P: real; override; - end; - - //klasa obejmujaca uklad hamulca zespolonego pojazdu - TBrake= class - protected - BrakeCyl: TReservoir; //silownik - BrakeRes: TReservoir; //ZP - ValveRes: TReservoir; //komora wstepna - BCN: byte; //ilosc silownikow - BCM: real; //przekladnia hamulcowa - BCA: real; //laczny przekroj silownikow - BrakeDelays: byte; //dostepne opoznienia - BrakeDelayFlag: byte; //aktualna nastawa - FM: TFricMat; //material cierny - MaxBP: real; //najwyzsze cisnienie - BA: byte; //osie hamowane - NBpA: byte; //klocki na os - SizeBR: real; //rozmiar^2 ZP (w stosunku do 14") - SizeBC: real; //rozmiar^2 CH (w stosunku do 14") - DCV: boolean; //podwojny zawor zwrotny - ASBP: real; //cisnienie hamulca pp - - BrakeStatus: byte; //flaga stanu - SoundFlag: byte; - public - constructor Create(i_mbp, i_bcr, i_bcd, i_brc: real; - i_bcn, i_BD, i_mat, i_ba, i_nbpa: byte); - //maksymalne cisnienie, promien, skok roboczy, pojemnosc ZP; - //ilosc cylindrow, opoznienia hamulca, material klockow, osie hamowane, klocki na os; - - function GetFC(Vel, N: real): real; virtual; //wspolczynnik tarcia - hamulec wie lepiej - function GetPF(PP, dt, Vel: real): real; virtual; //przeplyw miedzy komora wstepna i PG - function GetBCF: real; //sila tlokowa z tloka - function GetHPFlow(HP, dt: real): real; virtual; //przeplyw - 8 bar - function GetBCP: real; virtual; //cisnienie cylindrow hamulcowych - function GetBRP: real; //cisnienie zbiornika pomocniczego - function GetVRP: real; //cisnienie komory wstepnej rozdzielacza - function GetCRP: real; virtual; //cisnienie zbiornika sterujacego - procedure Init(PP, HPP, LPP, BP: real; BDF: byte); virtual; //inicjalizacja hamulca - function SetBDF(nBDF: byte): boolean; //nastawiacz GPRM - procedure Releaser(state: byte); //odluzniacz - procedure SetEPS(nEPS:real); virtual;//hamulec EP - procedure ASB(state: byte); //hamulec przeciwposlizgowy - function GetStatus(): byte; //flaga statusu, moze sie przydac do odglosow - procedure SetASBP(press: real); //ustalenie cisnienia pp - procedure ForceEmptiness(); virtual; - function GetSoundFlag: byte; -// procedure - end; - - TWest= class(TBrake) - private - LBP: real; //cisnienie hamulca pomocniczego - dVP: real; //pobor powietrza wysokiego cisnienia - EPS: real; //stan elektropneumatyka - TareM, LoadM: real; //masa proznego i pelnego - TareBP: real; //cisnienie dla proznego - LoadC: real; //wspolczynnik przystawki wazacej - public - procedure SetLBP(P: real); //cisnienie z hamulca pomocniczego - function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG - procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; - function GetHPFlow(HP, dt: real): real; override; - procedure PLC(mass: real); //wspolczynnik cisnienia przystawki wazacej - procedure SetEPS(nEPS: real); override; //stan hamulca EP - procedure SetLP(TM, LM, TBP: real); //parametry przystawki wazacej - end; - - TESt= class(TBrake) - private - CntrlRes: TReservoir; //zbiornik sterujący - BVM: real; //przelozenie PG-CH - public - function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG - procedure EStParams(i_crc: real); //parametry charakterystyczne dla ESt - procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; - function GetCRP: real; override; - procedure CheckState(BCP: real; var dV1: real); //glowny przyrzad rozrzadczy - procedure CheckReleaser(dt: real); //odluzniacz - function CVs(bp: real): real; //napelniacz sterujacego - function BVs(BCP: real): real; //napelniacz pomocniczego - end; - - TESt3= class(TESt) - private - CylFlowSpeed: array[0..1] of array [0..1] of real; - public - function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG - end; - - TESt3AL2= class(TESt3) - private - TareM, LoadM: real; //masa proznego i pelnego - TareBP: real; //cisnienie dla proznego - LoadC: real; - public - ImplsRes: TReservoir; //komora impulsowa - function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG - procedure PLC(mass: real); //wspolczynnik cisnienia przystawki wazacej - procedure SetLP(TM, LM, TBP: real); //parametry przystawki wazacej - procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; - end; - - TESt4R= class(TESt) - private - RapidStatus: boolean; - RapidTemp: real; //akrualne, zmienne przelozenie - public - ImplsRes: TReservoir; //komora impulsowa - function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG - procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; - end; - - TLSt= class(TESt4R) - private - CylFlowSpeed: array[0..1] of array [0..1] of real; - LBP: real; //cisnienie hamulca pomocniczego - RM: real; //przelozenie rapida - EDFlag: real; //luzowanie hamulca z powodu zalaczonego ED - public - procedure SetLBP(P: real); //cisnienie z hamulca pomocniczego - procedure SetRM(RMR: real); //ustalenie przelozenia rapida - function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG - function GetHPFlow(HP, dt: real): real; override; //przeplyw - 8 bar - procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; - function GetEDBCP: real; virtual; //cisnienie tylko z hamulca zasadniczego, uzywane do hamulca ED w EP09 - procedure SetED(EDstate: real); //stan hamulca ED do luzowania - end; - - TEStED= class(TLSt) //zawor z EP09 - Est4 z oddzielnym przekladnikiem, kontrola rapidu i takie tam - private - Nozzles: array[0..10] of real; //dysze - Zamykajacy: boolean; //pamiec zaworka zamykajacego - Przys_blok: boolean; //blokada przyspieszacza - Miedzypoj: TReservoir; //pojemnosc posrednia (urojona) do napelniania ZP i ZS - TareM, LoadM: real; //masa proznego i pelnego - TareBP: real; //cisnienie dla proznego - LoadC: real; - public - procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; - function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG - function GetEDBCP: real; override; //cisnienie tylko z hamulca zasadniczego, uzywane do hamulca ED w EP09 - procedure PLC(mass: real); //wspolczynnik cisnienia przystawki wazacej - procedure SetLP(TM, LM, TBP: real); //parametry przystawki wazacej - end; - - TEStEP2= class(TLSt) - private - TareM, LoadM: real; //masa proznego i pelnego - TareBP: real; //cisnienie dla proznego - LoadC: real; - EPS: real; - public - function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG - procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; //inicjalizacja - procedure PLC(mass: real); //wspolczynnik cisnienia przystawki wazacej - procedure SetEPS(nEPS: real); override; //stan hamulca EP - procedure SetLP(TM, LM, TBP: real); //parametry przystawki wazacej - end; - - TCV1= class(TBrake) - private - CntrlRes: TReservoir; //zbiornik sterujący - BVM: real; //przelozenie PG-CH - public - function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG - procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; - function GetCRP: real; override; - procedure CheckState(BCP: real; var dV1: real); - function CVs(bp: real): real; - function BVs(BCP: real): real; - public - end; - - TCV1R= class(TCV1) - private - ImplsRes: TReservoir; //komora impulsowa - RapidStatus: boolean; - public -// function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG -// procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; - end; - - TCV1L_TR= class(TCV1) - private - ImplsRes: TReservoir; //komora impulsowa - LBP: real; //cisnienie hamulca pomocniczego - public - function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG - procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; - procedure SetLBP(P: real); //cisnienie z hamulca pomocniczego - function GetHPFlow(HP, dt: real): real; override; //przeplyw - 8 bar - end; - - TKE= class(TBrake) //Knorr Einheitsbauart — jeden do wszystkiego - private - RapidStatus: boolean; - ImplsRes: TReservoir; //komora impulsowa - CntrlRes: TReservoir; //zbiornik sterujący - Brak2Res: TReservoir; //zbiornik pomocniczy 2 - BVM: real; //przelozenie PG-CH - TareM, LoadM: real; //masa proznego i pelnego - TareBP: real; //cisnienie dla proznego - LoadC: real; //wspolczynnik zaladowania - RM: real; //przelozenie rapida - LBP: real; //cisnienie hamulca pomocniczego - public - procedure SetRM(RMR: real); //ustalenie przelozenia rapida - function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG - procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; - function GetHPFlow(HP, dt: real): real; override; //przeplyw - 8 bar - function GetCRP: real; override; - procedure CheckState(BCP: real; var dV1: real); - procedure CheckReleaser(dt: real); //odluzniacz - function CVs(bp: real): real; //napelniacz sterujacego - function BVs(BCP: real): real; //napelniacz pomocniczego - procedure PLC(mass: real); //wspolczynnik cisnienia przystawki wazacej - procedure SetLP(TM, LM, TBP: real); //parametry przystawki wazacej - procedure SetLBP(P: real); //cisnienie z hamulca pomocniczego - end; - - - - - //klasa obejmujaca krany - THandle= class - private -// BCP: integer; - public - Time: boolean; - TimeEP: boolean; - Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow - function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; virtual; - procedure Init(press: real); virtual; - function GetCP(): real; virtual; - procedure SetReductor(nAdj: real); virtual; - function GetSound(i: byte): real; virtual; - function GetPos(i: byte): real; virtual; - end; - - TFV4a= class(THandle) - private - CP, TP, RP: real; //zbiornik sterujący, czasowy, redukcyjny - public - function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; - procedure Init(press: real); override; - end; - - TFV4aM= class(THandle) - private - CP, TP, RP: real; //zbiornik sterujący, czasowy, redukcyjny - XP: real; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali - RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem) -// Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow - Fala: boolean; - public - function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; - procedure Init(press: real); override; - procedure SetReductor(nAdj: real); override; - function GetSound(i: byte): real; override; - function GetPos(i: byte): real; override; - end; - -{ FBS2= class(THandle) - private - CP, TP, RP: real; //zbiornik sterujący, czasowy, redukcyjny - XP: real; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali - RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem) -// Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow - Fala: boolean; - public - function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; - procedure Init(press: real); override; - procedure SetReductor(nAdj: real); override; - function GetSound(i: byte): real; override; - function GetPos(i: byte): real; override; - end; } - -{ TD2= class(THandle) - private - CP, TP, RP: real; //zbiornik sterujący, czasowy, redukcyjny - XP: real; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali - RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem) -// Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow - Fala: boolean; - public - function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; - procedure Init(press: real); override; - procedure SetReductor(nAdj: real); override; - function GetSound(i: byte): real; override; - function GetPos(i: byte): real; override; - end;} - - TM394= class(THandle) - private - CP: real; //zbiornik sterujący, czasowy, redukcyjny - RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem) - public - function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; - procedure Init(press: real); override; - procedure SetReductor(nAdj: real); override; - function GetCP: real; override; - function GetPos(i: byte): real; override; - end; - - TH14K1= class(THandle) - private - CP: real; //zbiornik sterujący, czasowy, redukcyjny - RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem) - public - function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; - procedure Init(press: real); override; - procedure SetReductor(nAdj: real); override; - function GetCP: real; override; - function GetPos(i: byte): real; override; - end; - - TSt113= class(TH14K1) - private - EPS: real; - public - function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; - function GetCP: real; override; - function GetPos(i: byte): real; override; - procedure Init(press: real); override; - end; - - Ttest= class(THandle) - private - CP: real; - public - function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; - procedure Init(press: real); override; - end; - - TFD1= class(THandle) - private - MaxBP: real; //najwyzsze cisnienie - BP: real; //aktualne cisnienie - public - Speed: real; //szybkosc dzialania - function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; - procedure Init(press: real); override; - function GetCP(): real; override; - procedure SetSpeed(nSpeed: real); -// procedure Init(press: real; MaxBP: real); overload; - end; - - TH1405= class(THandle) - private - MaxBP: real; //najwyzsze cisnienie - BP: real; //aktualne cisnienie - public - function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; - procedure Init(press: real); override; - function GetCP(): real; override; -// procedure Init(press: real; MaxBP: real); overload; - end; - - - TFVel6= class(THandle) - private - EPS: real; - public - function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; - function GetCP(): real; override; - function GetPos(i: byte): real; override; - function GetSound(i: byte): real; override; - procedure Init(press: real); override; - end; - -function PF(P1,P2,S:real;DP:real = 0.25):real; -function PF1(P1,P2,S:real):real; - -function PFVa(PH,PL,S,LIM:real;DP:real = 0.1):real; //zawor napelniajacy z PH do PL, PL do LIM -function PFVd(PH,PL,S,LIM:real;DP:real = 0.1):real; //zawor wypuszczajacy z PH do PL, PH do LIM - -implementation - -uses _mover; -//---FUNKCJE OGOLNE--- - -const DPL=0.25; - -function PR(p1,p2:real):real; -var ph,pl: real; -begin - ph:=Max0R(p1,p2)+0.1; - pl:=p1+p2-ph+0.2; - PR:=(p2-p1)/(1.13*ph-pl); -end; - -function PF_old(P1,P2,S:real):real; -var ph,pl: real; -begin - PH:=Max0R(P1,P2)+1; - PL:=P1+P2-PH+2; - if PH-PL<0.0001 then PF_old:=0 else - if (PH-PL)<0.05 then - PF_old:=20*(PH-PL)*(PH+1)*222*S*(P2-P1)/(1.13*ph-pl) - else - PF_old:=(PH+1)*222*S*(P2-P1)/(1.13*ph-pl); -end; - -function PF(P1,P2,S:real;DP:real = 0.25):real; -var ph,pl,sg,fm: real; -begin - PH:=Max0R(P1,P2)+1; //wyzsze cisnienie absolutne - PL:=P1+P2-PH+2; //nizsze cisnienie absolutne - sg:=PL/PH; //bezwymiarowy stosunek cisnien - fm:=PH*197*S*sign(P2-P1); //najwyzszy mozliwy przeplyw, wraz z kierunkiem - if (SG>0.5) then //jesli ponizej stosunku krytycznego - if (PH-PL)0.5) then //jesli ponizej stosunku krytycznego - if (SGPL then - begin - LIM:=LIM+1; - PH:=PH+1; //wyzsze cisnienie absolutne - PL:=PL+1; //nizsze cisnienie absolutne - sg:=PL/PH; //bezwymiarowy stosunek cisnien - fm:=PH*197*S; //najwyzszy mozliwy przeplyw, wraz z kierunkiem - if (LIM-PL)0.5) then //jesli ponizej stosunku krytycznego - if (PH-PL)0.5) then //jesli ponizej stosunku krytycznego - if (PH-PL)0.88 then P:=0.5+(VtoC-0.88)*1.043-0.064*(VtoC-0.88)*(VtoC-0.88) - else P:=0.15+0.35/0.82*(VtoC-0.06); -end; *) - -//(* STARA WERSJA -function TBrakeCyl.P:real; -var VtoC: real; //stosunek cisnienia do objetosci -const - VS = 0.005; - pS = 0.05; - VD = 1.40; - cD = 1; - pD = VD-cD; -begin - VtoC:=Vol/Cap; -// P:=VtoC; - if VtoCVD then P:=VtoC-cD //caly silownik - else P:=pS+(VtoC-VS)/(VD-VS)*(pD-pS); //wysuwanie tloka -end; //*) - - -//---HAMULEC--- -(* -constructor TBrake.Create(i_mbp, i_bcr, i_bcd, i_brc: real; i_bcn, i_BD, i_mat, i_ba, i_nbpa: byte); -begin - inherited Create; - MaxBP:=i_mbp; - BCN:=i_bcn; - BCA:=i_bcn*i_bcr*i_bcr*pi; - BA:=i_ba; - NBpA:=i_nbpa; - BrakeDelays:=i_BD; - -//tworzenie zbiornikow - BrakeCyl.CreateCap(i_bcd*BCA*1000); - BrakeRes.CreateCap(i_brc); - ValveRes.CreateCap(0.2); - -// FM.Free; -//materialy cierne - case i_mat of - bp_P10Bg: FM:=TP10Bg.Create; - bp_P10Bgu: FM:=TP10Bgu.Create; - else //domyslnie - FM:=TP10.Create; - end; - - -end ; *) - -constructor TBrake.Create(i_mbp, i_bcr, i_bcd, i_brc: real; i_bcn, i_BD, i_mat, i_ba, i_nbpa: byte); -begin - inherited Create; - MaxBP:=i_mbp; - BCN:=i_bcn; - BCA:=i_bcn*i_bcr*i_bcr*pi; - BA:=i_ba; - NBpA:=i_nbpa; - BrakeDelays:=i_BD; - //210.88 -// SizeBR:=i_bcn*i_bcr*i_bcr*i_bcd*40.17*MaxBP/(5-MaxBP); //objetosc ZP w stosunku do cylindra 14" i cisnienia 4.2 atm - SizeBR:=i_brc*0.0128; - SizeBC:=i_bcn*i_bcr*i_bcr*i_bcd*210.88*MaxBP/4.2; //objetosc CH w stosunku do cylindra 14" i cisnienia 4.2 atm - -// BrakeCyl:=TReservoir.Create; - BrakeCyl:=TBrakeCyl.Create; - BrakeRes:=TReservoir.Create; - ValveRes:=TReservoir.Create; - -//tworzenie zbiornikow - BrakeCyl.CreateCap(i_bcd*BCA*1000); - BrakeRes.CreateCap(i_brc); - ValveRes.CreateCap(0.25); - -// FM.Free; -//materialy cierne - i_mat:=i_mat and (255-bp_MHS); - case i_mat of - bp_P10Bg: FM:=TP10Bg.Create; - bp_P10Bgu: FM:=TP10Bgu.Create; - bp_FR513: FM:=TFR513.Create; - bp_FR510: FM:=TFR510.Create; - bp_Cosid: FM:=TCosid.Create; - bp_P10yBg: FM:=TP10yBg.Create; - bp_P10yBgu: FM:=TP10yBgu.Create; - bp_D1: FM:=TDisk1.Create; - bp_D2: FM:=TDisk2.Create; - else //domyslnie - FM:=TP10.Create; - end; -end; - -//inicjalizacja hamulca (stan poczatkowy) -procedure TBrake.Init(PP, HPP, LPP, BP: real; BDF: byte); -begin - -end; - -//pobranie wspolczynnika tarcia materialu -function TBrake.GetFC(Vel, N: real): real; -begin - GetFC:=FM.GetFC(N, Vel); -end; - -//cisnienie cylindra hamulcowego -function TBrake.GetBCP: real; -begin - GetBCP:=BrakeCyl.P; -end; - -//cisnienie zbiornika pomocniczego -function TBrake.GetBRP: real; -begin - GetBRP:=BrakeRes.P; -end; - -//cisnienie komory wstepnej -function TBrake.GetVRP: real; -begin - GetVRP:=ValveRes.P; -end; - -//cisnienie zbiornika sterujacego -function TBrake.GetCRP: real; -begin - GetCRP:=0; -end; - -//przeplyw z przewodu glowneg -function TBrake.GetPF(PP, dt, Vel: real): real; -begin - ValveRes.Act; - BrakeCyl.Act; - BrakeRes.Act; - GetPF:=0; -end; - -//przeplyw z przewodu zasilajacego -function TBrake.GetHPFlow(HP, dt: real): real; -begin - GetHPFlow:=0; -end; - -function TBrake.GetBCF: real; -begin - GetBCF:=BCA*100*BrakeCyl.P; -end; - -function TBrake.SetBDF(nBDF: byte): boolean; -begin - if ((nBDF and BrakeDelays)=nBDF)and(nBDF<>BrakeDelayFlag) then - begin - BrakeDelayFlag:=nBDF; - SetBDF:=true; - end - else - SetBDF:=false; -end; - -procedure TBrake.Releaser(state: byte); -begin - BrakeStatus:=(BrakeStatus and 247) or state*b_rls; -end; - -procedure TBrake.SetEPS(nEPS: real); -begin - -end; - -procedure TBrake.ASB(state: byte); -begin //255-b_asb(32) - BrakeStatus:=(BrakeStatus and 223) or state*b_asb; -end; - -function TBrake.GetStatus(): byte; -begin - GetStatus:=BrakeStatus; -end; - -function TBrake.GetSoundFlag: byte; -begin - GetSoundFlag:=SoundFlag; - SoundFlag:=0; -end; - -procedure TBrake.SetASBP(press: real); -begin - ASBP:=press; -end; - -procedure TBrake.ForceEmptiness(); -begin - ValveRes.CreatePress(0); - BrakeRes.CreatePress(0); - ValveRes.Act(); - BrakeRes.Act(); -end; - - -//---WESTINGHOUSE--- - -procedure TWest.Init(PP, HPP, LPP, BP: real; BDF: byte); -begin - ValveRes.CreatePress(PP); - BrakeCyl.CreatePress(BP); - BrakeRes.CreatePress(PP/2+HPP/2); -// BrakeStatus:=3*Byte(BP>0.1); -end; - -function TWest.GetPF(PP, dt, Vel: real): real; -var dv, dv1:real; - VVP, BVP, CVP, BCP: real; - temp: real; -begin - - BVP:=BrakeRes.P; - VVP:=ValveRes.P; - CVP:=BrakeCyl.P; - BCP:=BrakeCyl.P; - - if (BrakeStatus and 1)=1 then - if(VVP+0.03BVP+0.1) then - BrakeStatus:=(BrakeStatus and 252) - else if(VVP>BVP) then - BrakeStatus:=(BrakeStatus and 253) - else - else - if(VVP+0.25LBP+0.01) and (DCV) then - dV:=PF(0,CVP,0.1*sizeBC)*dt - else dV:=0; - BrakeCyl.Flow(-dV); - -//hamulec EP - temp:=BVP*Byte(EPS>0); - dV:=PF(temp,LBP,0.0015)*dt*EPS*EPS*Byte(LBP*EPS silowniki - if((BrakeStatus and b_on)=b_on)and((TareBP<0.1)or(BCPLBP)then - begin - DCV:=false; - dV:=PF(BVP,CVP,0.017*sizeBC)*dt; - end - else dV:=0 - else dV:=0; - BrakeRes.Flow(dV); - BrakeCyl.Flow(-dV); - if(DCV)then - dVP:=PF(LBP,BCP,0.01*sizeBC)*dt - else dVP:=0; - BrakeCyl.Flow(-dVP); - if(dVP>0)then dVP:=0; -//przeplyw ZP <-> rozdzielacz - if((BrakeStatus and b_hld)=b_off)then - dV:=PF(BVP,VVP,0.0011*sizeBR)*dt - else dV:=0; - BrakeRes.Flow(dV); - dV1:=dV*0.95; - ValveRes.Flow(-0.05*dV); -//przeplyw PG <-> rozdzielacz - dV:=PF(PP,VVP,0.01*sizeBR)*dt; - ValveRes.Flow(-dV); - - ValveRes.Act; - BrakeCyl.Act; - BrakeRes.Act; - GetPF:=dV-dV1; -end; - -function TWest.GetHPFlow(HP, dt: real): real; -begin - GetHPFlow:=dVP; -end; - -procedure TWest.SetLBP(P: real); -begin - LBP:=P; - if P>BrakeCyl.P then -// begin - DCV:=true; -// end -// else -// LBP:=P; -end; - -procedure TWest.SetEPS(nEPS: real); -var - BCP: real; -begin - BCP:=BrakeCyl.P; - if nEPS>0 then - DCV:=true - else if nEPS=0 then - begin - if(EPS<>0)then - begin - if(LBP>0.4)then - LBP:=BrakeCyl.P; - if(LBP<0.15)then - LBP:=0; - end; - end; - EPS:=nEPS; -end; - -procedure TWest.PLC(mass: real); -begin - LoadC:=1+Byte(Mass0.25)then - if(VVP+0.003+BCP/BVMCVP) then - BrakeStatus:=(BrakeStatus and 252) //luzowanie - else if(VVP+BCP/BVM>CVP) then - BrakeStatus:=(BrakeStatus and 253) //zatrzymanie napelaniania - else - else - if(VVP+0.100.25)and(BCP>0.25)then //zatrzymanie luzowanie - BrakeStatus:=(BrakeStatus or 1); - - if (BrakeStatus and 1)=0 then - SoundFlag:=SoundFlag or sf_CylU; -end; - -function TESt.CVs(bp: real): real; -var VVP, BVP, CVP: real; -begin - BVP:=BrakeRes.P; - CVP:=CntrlRes.P; - VVP:=ValveRes.P; - -//przeplyw ZS <-> PG - if(VVP0.4)then - CVs:=0 - else - if(VVP>CVP+0.4)then - if(BVP>CVP+0.2)then - CVs:=0.23 - else - CVs:=0.05 - else - if(BVP>CVP-0.1)then - CVs:=1 - else - CVs:=0.3; -end; - -function TESt.BVs(BCP: real): real; -var VVP, BVP, CVP: real; -begin - BVP:=BrakeRes.P; - CVP:=CntrlRes.P; - VVP:=ValveRes.P; - -//przeplyw ZP <-> rozdzielacz - if(BVPCVP+0.4)then - BVs:=0.1 - else - BVs:=0.3 - else - BVs:=0; -end; - - - - - -function TESt.GetPF(PP, dt, Vel: real): real; -var dv, dv1, temp:real; - VVP, BVP, BCP, CVP: real; -begin - BVP:=BrakeRes.P; - VVP:=ValveRes.P; - BCP:=BrakeCyl.P; - CVP:=CntrlRes.P-0.0; - - dV:=0; dV1:=0; - -//sprawdzanie stanu - CheckState(BCP, dV1); - CheckReleaser(dt); - - CVP:=CntrlRes.P; - VVP:=ValveRes.P; -//przeplyw ZS <-> PG - temp:=CVs(BCP); - dV:=PF(CVP,VVP,0.0015*temp)*dt; - CntrlRes.Flow(+dV); - ValveRes.Flow(-0.04*dV); - dV1:=dV1-0.96*dV; - - -//luzowanie - if(BrakeStatus and b_hld)=b_off then - dV:=PF(0,BCP,0.0058*sizeBC)*dt - else dV:=0; - BrakeCyl.Flow(-dV); - -//przeplyw ZP <-> silowniki - if(BrakeStatus and b_on)=b_on then - dV:=PF(BVP,BCP,0.016*sizeBC)*dt - else dV:=0; - BrakeRes.Flow(dV); - BrakeCyl.Flow(-dV); - -//przeplyw ZP <-> rozdzielacz - temp:=BVs(BCP); -// if(BrakeStatus and b_hld)=b_off then - if(VVP-0.05>BVP)then - dV:=PF(BVP,VVP,0.02*sizeBR*temp/1.87)*dt - else dV:=0; - BrakeRes.Flow(dV); - dV1:=dV1+dV*0.96; - ValveRes.Flow(-0.04*dV); -//przeplyw PG <-> rozdzielacz - dV:=PF(PP,VVP,0.01)*dt; - ValveRes.Flow(-dV); - - ValveRes.Act; - BrakeCyl.Act; - BrakeRes.Act; - CntrlRes.Act; - GetPF:=dV-dV1; -end; - -procedure TESt.Init(PP, HPP, LPP, BP: real; BDF: byte); -begin - ValveRes.CreatePress(PP); - BrakeCyl.CreatePress(BP); - BrakeRes.CreatePress(PP); - CntrlRes:=TReservoir.Create; - CntrlRes.CreateCap(15); - CntrlRes.CreatePress(HPP); - BrakeStatus:=0; - - BVM:=1/(HPP-LPP)*MaxBP; - - BrakeDelayFlag:=BDF; -end; - - -procedure TESt.EStParams(i_crc: real); -begin - -end; - - -function TESt.GetCRP: real; -begin - GetCRP:=CntrlRes.P; -end; - -//---EP2--- - -procedure TEStEP2.Init(PP, HPP, LPP, BP: real; BDF: byte); -begin - inherited; - ImplsRes.CreateCap(1); - ImplsRes.CreatePress(BP); - - BrakeRes.CreatePress(PP); - - BrakeDelayFlag:=bdelay_P; - BrakeDelays:=bdelay_P; -end; - - -function TEStEP2.GetPF(PP, dt, Vel: real): real; -var dv, dv1, temp:real; - VVP, BVP, BCP, CVP: real; -begin - BVP:=BrakeRes.P; - VVP:=ValveRes.P; - BCP:=ImplsRes.P; - CVP:=CntrlRes.P; //110115 - konsultacje warszawa1 - - dV:=0; dV1:=0; - -//odluzniacz - CheckReleaser(dt); - -//sprawdzanie stanu - if ((BrakeStatus and 1)=1)and(BCP>0.25) then - if(VVP+0.003+BCP/BVMCVP-0.12) then - BrakeStatus:=(BrakeStatus and 252) //luzowanie - else if(VVP+BCP/BVM>CVP-0.12) then - BrakeStatus:=(BrakeStatus and 253) //zatrzymanie napelaniania - else - else - if(VVP+0.100.25) then //zatrzymanie luzowanie - BrakeStatus:=(BrakeStatus or 1); - -//przeplyw ZS <-> PG - if(BVP0)or(BCP>0.25)then - temp:=0 - else - if(VVP>CVP+0.4)then - temp:=0.1 - else - temp:=0.5; - - dV:=PF(CVP,VVP,0.0015*temp/1.8)*dt; - CntrlRes.Flow(+dV); - ValveRes.Flow(-0.04*dV); - dV1:=dV1-0.96*dV; - -//hamulec EP - temp:=BVP*Byte(EPS>0); - dV:=PF(temp,LBP,0.00053+0.00060*Byte(EPS<0))*dt*EPS*EPS*Byte(LBP*EPS KI - if ((BrakeStatus and b_on)=b_on) and (BCP rozdzielacz - dV:=PF(PP,VVP,0.01*sizeBR)*dt; - ValveRes.Flow(-dV); - - GetPF:=dV-dV1; - - temp:=Max0R(BCP,LBP); - - if(ImplsRes.P>LBP+0.01)then - LBP:=0; - -//luzowanie CH - if(BrakeCyl.P>temp+0.005)or(Max0R(ImplsRes.P,8*LBP)<0.05) then - dV:=PF(0,BrakeCyl.P,0.25*sizeBC*(0.01+(BrakeCyl.P-temp)))*dt - else dV:=0; - BrakeCyl.Flow(-dV); -//przeplyw ZP <-> CH - if(BrakeCyl.P0.10)and(Max0R(BCP,LBP)0) and (LBP+0.01 PG - temp:=CVs(BCP); - dV:=PF(CVP,VVP,0.0015*temp)*dt; - CntrlRes.Flow(+dV); - ValveRes.Flow(-0.04*dV); - dV1:=dV1-0.96*dV; - - -//luzowanie - if(BrakeStatus and b_hld)=b_off then - dV:=PF(0,BCP,0.0042*(1.37-Byte(BrakeDelayFlag=bdelay_G))*sizeBC)*dt - else dV:=0; - BrakeCyl.Flow(-dV); -//przeplyw ZP <-> silowniki - if(BrakeStatus and b_on)=b_on then - dV:=PF(BVP,BCP,0.017*(1+Byte((BCP<0.58)and(BrakeDelayFlag=bdelay_G)))*(1.13-Byte((BCP>0.6)and(BrakeDelayFlag=bdelay_G)))*sizeBC)*dt - else dV:=0; - BrakeRes.Flow(dV); - BrakeCyl.Flow(-dV); -//przeplyw ZP <-> rozdzielacz - temp:=BVs(BCP); - if(VVP-0.05>BVP)then - dV:=PF(BVP,VVP,0.02*sizeBR*temp/1.87)*dt - else dV:=0; - BrakeRes.Flow(dV); - dV1:=dV1+dV*0.96; - ValveRes.Flow(-0.04*dV); -//przeplyw PG <-> rozdzielacz - dV:=PF(PP,VVP,0.01)*dt; - ValveRes.Flow(-dV); - - ValveRes.Act; - BrakeCyl.Act; - BrakeRes.Act; - CntrlRes.Act; - GetPF:=dV-dV1; -end; - -//---EST4-RAPID--- - -function TESt4R.GetPF(PP, dt, Vel: real): real; -var dv, dv1, temp:real; - VVP, BVP, BCP, CVP: real; -begin - BVP:=BrakeRes.P; - VVP:=ValveRes.P; - BCP:=ImplsRes.P; - CVP:=CntrlRes.P-0.0; - - dV:=0; dV1:=0; - -//sprawdzanie stanu - CheckState(BCP, dV1); - CheckReleaser(dt); - - CVP:=CntrlRes.P; - VVP:=ValveRes.P; -//przeplyw ZS <-> PG - temp:=CVs(BCP); - dV:=PF(CVP,VVP,0.0015*temp/1.8)*dt; - CntrlRes.Flow(+dV); - ValveRes.Flow(-0.04*dV); - dV1:=dV1-0.96*dV; - - -//luzowanie KI - if(BrakeStatus and b_hld)=b_off then - dV:=PF(0,BCP,0.00037*1.14*15/19)*dt - else dV:=0; - ImplsRes.Flow(-dV); -//przeplyw ZP <-> KI - if(BrakeStatus and b_on)=b_on then - dV:=PF(BVP,BCP,0.0014)*dt - else dV:=0; -// BrakeRes.Flow(dV); - ImplsRes.Flow(-dV); -//przeplyw ZP <-> rozdzielacz - temp:=BVs(BCP); - if(BVP rozdzielacz - dV:=PF(PP,VVP,0.01*sizeBR)*dt; - ValveRes.Flow(-dV); - - GetPF:=dV-dV1; - - - - RapidStatus:=(BrakeDelayFlag=bdelay_R)and(((Vel>55)and(RapidStatus))or(Vel>70)); - - RapidTemp:=RapidTemp+(0.9*Byte(RapidStatus)-RapidTemp)*dt/2; - temp:=1.9-RapidTemp; - if((BrakeStatus and b_asb)=b_asb)then - temp:=1000; -//luzowanie CH - if(BrakeCyl.P*temp>ImplsRes.P+0.005)or(ImplsRes.P<0.25) then - if((BrakeStatus and b_asb)=b_asb)then - dV:=PFVd(BrakeCyl.P,0,0.115*sizeBC*4,ImplsRes.P/temp)*dt - else - dV:=PFVd(BrakeCyl.P,0,0.115*sizeBC,ImplsRes.P/temp)*dt -// dV:=PF(0,BrakeCyl.P,0.115*sizeBC/2)*dt -// dV:=PFVd(BrakeCyl.P,0,0.015*sizeBC/2,ImplsRes.P/temp)*dt - else dV:=0; - BrakeCyl.Flow(-dV); -//przeplyw ZP <-> CH - if(BrakeCyl.P*temp0.3) then -// dV:=PFVa(BVP,BrakeCyl.P,0.020*sizeBC,ImplsRes.P/temp)*dt - dV:=PFVa(BVP,BrakeCyl.P,0.60*sizeBC,ImplsRes.P/temp)*dt - else dV:=0; - BrakeRes.Flow(-dV); - BrakeCyl.Flow(+dV); - - ImplsRes.Act; - ValveRes.Act; - BrakeCyl.Act; - BrakeRes.Act; - CntrlRes.Act; -end; - -procedure TESt4R.Init(PP, HPP, LPP, BP: real; BDF: byte); -begin - inherited; - ImplsRes:=TReservoir.Create; - ImplsRes.CreateCap(1); - ImplsRes.CreatePress(BP); - - BrakeDelayFlag:=bdelay_R; -end; - - -//---EST3/AL2--- - -function TESt3AL2.GetPF(PP, dt, Vel: real): real; -var dv, dv1, temp:real; - VVP, BVP, BCP, CVP: real; -begin - BVP:=BrakeRes.P; - VVP:=ValveRes.P; - BCP:=ImplsRes.P; - CVP:=CntrlRes.P-0.0; - - dV:=0; dV1:=0; - -//sprawdzanie stanu - CheckState(BCP, dV1); - CheckReleaser(dt); - - VVP:=ValveRes.P; -//przeplyw ZS <-> PG - temp:=CVs(BCP); - dV:=PF(CVP,VVP,0.0015*temp)*dt; - CntrlRes.Flow(+dV); - ValveRes.Flow(-0.04*dV); - dV1:=dV1-0.96*dV; - -//luzowanie KI - if(BrakeStatus and b_hld)=b_off then - dV:=PF(0,BCP,0.00017*(1.37-Byte(BrakeDelayFlag=bdelay_G)))*dt - else dV:=0; - ImplsRes.Flow(-dV); -//przeplyw ZP <-> KI - if ((BrakeStatus and b_on)=b_on) and (BCP0.6)and(BrakeDelayFlag=bdelay_G))))*dt - else dV:=0; - BrakeRes.Flow(dV); - ImplsRes.Flow(-dV); -//przeplyw ZP <-> rozdzielacz - temp:=BVs(BCP); - if(VVP-0.05>BVP)then - dV:=PF(BVP,VVP,0.02*sizeBR*temp/1.87)*dt - else dV:=0; - BrakeRes.Flow(dV); - dV1:=dV1+dV*0.96; - ValveRes.Flow(-0.04*dV); -//przeplyw PG <-> rozdzielacz - dV:=PF(PP,VVP,0.01)*dt; - ValveRes.Flow(-dV); - GetPF:=dV-dV1; - -//luzowanie CH - if(BrakeCyl.P>ImplsRes.P*LoadC+0.005)or(ImplsRes.P<0.15) then - dV:=PF(0,BrakeCyl.P,0.015*sizeBC)*dt - else dV:=0; - BrakeCyl.Flow(-dV); - -//przeplyw ZP <-> CH - if(BrakeCyl.P0.15) then - dV:=PF(BVP,BrakeCyl.P,0.020*sizeBC)*dt - else dV:=0; - BrakeRes.Flow(dV); - BrakeCyl.Flow(-dV); - - ImplsRes.Act; - ValveRes.Act; - BrakeCyl.Act; - BrakeRes.Act; - CntrlRes.Act; -end; - -procedure TESt3AL2.PLC(mass: real); -begin - LoadC:=1+Byte(Mass PG - if((CVP-BCP)*BVM>0.5)then - temp:=0 - else - if(VVP>CVP+0.4)then - temp:=0.5 - else - temp:=0.5; - - dV:=PF1(CVP,VVP,0.0015*temp/1.8/2)*dt; - CntrlRes.Flow(+dV); - ValveRes.Flow(-0.04*dV); - dV1:=dV1-0.96*dV; - - -//luzowanie KI {G} -// if VVP>BCP then -// dV:=PF(VVP,BCP,0.00004)*dt -// else if (CVP-BCP)<1.5 then -// dV:=PF(VVP,BCP,0.00020*(1.33-Byte((CVP-BCP)*BVM>0.65)))*dt -// else dV:=0; 0.00025 P - {P} - if VVP>BCP then - dV:=PF(VVP,BCP,0.00043*(1.5-Byte(((CVP-BCP)*BVM>1)and(BrakeDelayFlag=bdelay_G))),0.1)*dt - else if (CVP-BCP)<1.5 then - dV:=PF(VVP,BCP,0.001472*(1.36-Byte(((CVP-BCP)*BVM>1)and(BrakeDelayFlag=bdelay_G))),0.1)*dt - else dV:=0; - - ImplsRes.Flow(-dV); - ValveRes.Flow(+dV); -//przeplyw PG <-> rozdzielacz - dV:=PF(PP,VVP,0.01,0.1)*dt; - ValveRes.Flow(-dV); - - GetPF:=dV-dV1; - -// if Vel>55 then temp:=0.72 else -// temp:=1;{R} -//cisnienie PP - RapidTemp:=RapidTemp+(RM*Byte((Vel>55)and(BrakeDelayFlag=bdelay_R))-RapidTemp)*dt/2; - temp:=1-RapidTemp; - if EDFlag>0.2 then temp:=10000; - -//powtarzacz — podwojny zawor zwrotny - temp:=Max0R(((CVP-BCP)*BVM+ASBP*Byte((BrakeStatus and b_asb)=b_asb))/temp,LBP); -//luzowanie CH - if(BrakeCyl.P>temp+0.005)or(temp<0.28) then -// dV:=PF(0,BrakeCyl.P,0.0015*3*sizeBC)*dt -// dV:=PF(0,BrakeCyl.P,0.005*3*sizeBC)*dt - dV:=PFVd(BrakeCyl.P,0,0.005*7*sizeBC,temp)*dt - else dV:=0; - BrakeCyl.Flow(-dV); -//przeplyw ZP <-> CH - if(BrakeCyl.P0.29) then -// dV:=PF(BVP,BrakeCyl.P,0.002*3*sizeBC*2)*dt - dV:=-PFVa(BVP,BrakeCyl.P,0.002*7*sizeBC*2,temp)*dt - else dV:=0; - BrakeRes.Flow(dV); - BrakeCyl.Flow(-dV); - - ImplsRes.Act; - ValveRes.Act; - BrakeCyl.Act; - BrakeRes.Act; - CntrlRes.Act; -// LBP:=ValveRes.P; -// ValveRes.CreatePress(ImplsRes.P); -end; - -procedure TLSt.Init(PP, HPP, LPP, BP: real; BDF: byte); -begin - inherited; - ValveRes.CreateCap(1); - ImplsRes.CreateCap(8); - ImplsRes.CreatePress(PP); - BrakeRes.CreatePress(8); - ValveRes.CreatePress(PP); - - EDFlag:=0; - - BrakeDelayFlag:=BDF; -end; - -procedure TLSt.SetLBP(P: real); -begin - LBP:=P; -end; - -function TLSt.GetEDBCP: real; -var CVP, BCP: real; -begin - CVP:=CntrlRes.P; - BCP:=ImplsRes.P; - GetEDBCP:=(CVP-BCP)*BVM; -end; - -procedure TLSt.SetED(EDstate: real); -begin - EDFlag:=EDstate; -end; - -procedure TLSt.SetRM(RMR: real); -begin - RM:=1-RMR; -end; - -function TLSt.GetHPFlow(HP, dt: real): real; -var dV: real; -begin - dV:=Min0R(PF(HP,BrakeRes.P,0.01*dt),0); - BrakeRes.Flow(-dV); - GetHPFlow:=dV; -end; - -//---EStED--- - -function TEStED.GetPF(PP, dt, Vel: real): real; -var dv, dv1, temp:real; - VVP, BVP, BCP, CVP, MPP, nastG: real; - i: byte; -begin - BVP:=BrakeRes.P; - VVP:=ValveRes.P; - BCP:=ImplsRes.P; - CVP:=CntrlRes.P-0.0; - MPP:=Miedzypoj.P; - dV1:=0; - - nastG:=(BrakeDelayFlag and bdelay_G); - -//sprawdzanie stanu - if(BCP<0.25)and(VVP+0.08>CVP)then Przys_blok:=false; - -//sprawdzanie stanu - if(VVP+0.002+BCP/BVMCVP-0.05) then - BrakeStatus:=(BrakeStatus and 252) //luzowanie - else if(VVP+BCP/BVM>CVP-0.05) then - BrakeStatus:=(BrakeStatus and 253) //zatrzymanie napelaniania - else if(VVP+(BCP-0.1)/BVM0.25)then //zatrzymanie luzowania - BrakeStatus:=(BrakeStatus or 1); - - if(VVP+0.100.5)then - Zamykajacy:=true - else if(VVP-0.6CVP-0.08)then - temp:=Nozzles[5] - else - temp:=Nozzles[6]; - dV:=dV+PF(MPP,CVP,temp); - - if(MPP-0.05>BVP)then - dV:=dV+PF(MPP-0.05,BVP,Nozzles[10]*nastG+(1-nastG)*Nozzles[9]); - if MPP>VVP then dV:=dV+PF(MPP,VVP,0.02); - Miedzypoj.Flow(dV*dt*0.15); - - - RapidTemp:=RapidTemp+(RM*Byte((Vel>55)and(BrakeDelayFlag=bdelay_R))-RapidTemp)*dt/2; - temp:=Max0R(1-RapidTemp,0.001); -// if EDFlag then temp:=1000; -// temp:=temp/(1-); - -//powtarzacz — podwojny zawor zwrotny - temp:=Max0R(LoadC*BCP/temp*Min0R(Max0R(1-EDFlag,0),1),LBP); - - if(BrakeCyl.P>temp)then - dV:=-PFVd(BrakeCyl.P,0,0.02*sizeBC,temp)*dt - else - if(BrakeCyl.P0 then - BrakeRes.Flow(-dV); - - -//przeplyw ZS <-> PG - if(MPPCVP-0.08)then - temp:=Nozzles[5] - else - temp:=Nozzles[6]; - dV:=PF(CVP,MPP,temp)*dt; - CntrlRes.Flow(+dV); - ValveRes.Flow(-0.02*dV); - dV1:=dV1+0.98*dV; - -//przeplyw ZP <-> MPJ - if(MPP-0.05>BVP)then - dV:=PF(BVP,MPP-0.05,Nozzles[10]*nastG+(1-nastG)*Nozzles[9])*dt - else dV:=0; - BrakeRes.Flow(dV); - dV1:=dV1+dV*0.98; - ValveRes.Flow(-0.02*dV); -//przeplyw PG <-> rozdzielacz - dV:=PF(PP,VVP,0.005)*dt; //0.01 - ValveRes.Flow(-dV); - - - ValveRes.Act; - BrakeCyl.Act; - BrakeRes.Act; - CntrlRes.Act; - Miedzypoj.Act; - ImplsRes.Act; - GetPF:=dV-dV1; -end; - -procedure TEStED.Init(PP, HPP, LPP, BP: real; BDF: byte); -var i:integer; -begin - inherited; - - ValveRes.CreatePress(1*PP); - BrakeCyl.CreatePress(1*BP); - -// CntrlRes:=TReservoir.Create; -// CntrlRes.CreateCap(15); -// CntrlRes.CreatePress(1*HPP); - - BrakeStatus:=Byte(BP>1)*1; - Miedzypoj:=TReservoir.Create; - Miedzypoj.CreateCap(5); - Miedzypoj.CreatePress(PP); - - ImplsRes.CreateCap(1); - ImplsRes.CreatePress(BP); - - BVM:=1/(HPP-0.05-LPP)*MaxBP; - - BrakeDelayFlag:=BDF; - Zamykajacy:=false; - EDFlag:=0; - - Nozzles[0]:=1.250/1.7; - Nozzles[1]:=0.907; - Nozzles[2]:=0.510/1.7; - Nozzles[3]:=0.524/1.17; - Nozzles[4]:=7.4; - Nozzles[7]:=5.3; - Nozzles[8]:=2.5; - Nozzles[9]:=7.28; - Nozzles[10]:=2.96; - Nozzles[5]:=1.1; - Nozzles[6]:=0.9; - - for i:=0 to 10 do - begin - Nozzles[i]:=Nozzles[i]*Nozzles[i]*3.14159/4000; - end; - -end; - -function TEStED.GetEDBCP: real; -begin - GetEDBCP:=ImplsRes.P*LoadC; -end; - -procedure TEStED.PLC(mass: real); -begin - LoadC:=1+Byte(MassCVP) then - BrakeStatus:=(BrakeStatus and 252) //luzowanie - else if(VVP+BCP/BVM>CVP) then - BrakeStatus:=(BrakeStatus and 253) //zatrzymanie napelaniania - else - else - if(VVP+0.100.25) then //zatrzymanie luzowanie - BrakeStatus:=(BrakeStatus or 1); -end; - -function TCV1.CVs(bp: real): real; -begin -//przeplyw ZS <-> PG - if(bp>0.05)then - CVs:=0 - else - CVs:=0.23 -end; - -function TCV1.BVs(BCP: real): real; -var VVP, BVP, CVP: real; -begin - BVP:=BrakeRes.P; - CVP:=CntrlRes.P; - VVP:=ValveRes.P; - -//przeplyw ZP <-> rozdzielacz - if(BVP0.05)then - BVs:=0 - else - BVs:=0.2*(1.5-Byte(BVP>VVP)); -end; - -function TCV1.GetPF(PP, dt, Vel: real): real; -var dv, dv1, temp:real; - VVP, BVP, BCP, CVP: real; -begin - BVP:=BrakeRes.P; - VVP:=Min0R(ValveRes.P,BVP+0.05); - BCP:=BrakeCyl.P; - CVP:=CntrlRes.P-0.0; - - dV:=0; dV1:=0; - -//sprawdzanie stanu - CheckState(BCP, dV1); - - VVP:=ValveRes.P; -//przeplyw ZS <-> PG - temp:=CVs(BCP); - dV:=PF(CVP,VVP,0.0015*temp)*dt; - CntrlRes.Flow(+dV); - ValveRes.Flow(-0.04*dV); - dV1:=dV1-0.96*dV; - - -//luzowanie - if(BrakeStatus and b_hld)=b_off then - dV:=PF(0,BCP,0.0042*(1.37-Byte(BrakeDelayFlag=bdelay_G))*sizeBC)*dt - else dV:=0; - BrakeCyl.Flow(-dV); - -//przeplyw ZP <-> silowniki - if(BrakeStatus and b_on)=b_on then - dV:=PF(BVP,BCP,0.017*(1+Byte((BCP<0.58)and(BrakeDelayFlag=bdelay_G)))*(1.13-Byte((BCP>0.6)and(BrakeDelayFlag=bdelay_G)))*sizeBC)*dt - else dV:=0; - BrakeRes.Flow(dV); - BrakeCyl.Flow(-dV); - -//przeplyw ZP <-> rozdzielacz - temp:=BVs(BCP); - if(VVP+0.05>BVP)then - dV:=PF(BVP,VVP,0.02*sizeBR*temp/1.87)*dt - else dV:=0; - BrakeRes.Flow(dV); - dV1:=dV1+dV*0.96; - ValveRes.Flow(-0.04*dV); -//przeplyw PG <-> rozdzielacz - dV:=PF(PP,VVP,0.01)*dt; - ValveRes.Flow(-dV); - - ValveRes.Act; - BrakeCyl.Act; - BrakeRes.Act; - CntrlRes.Act; - GetPF:=dV-dV1; -end; - -procedure TCV1.Init(PP, HPP, LPP, BP: real; BDF: byte); -begin - ValveRes.CreatePress(PP); - BrakeCyl.CreatePress(BP); - BrakeRes.CreatePress(PP); - CntrlRes:=TReservoir.Create; - CntrlRes.CreateCap(15); - CntrlRes.CreatePress(HPP); - BrakeStatus:=0; - - BVM:=1/(HPP-LPP)*MaxBP; - - BrakeDelayFlag:=BDF; -end; - -function TCV1.GetCRP: real; -begin - GetCRP:=CntrlRes.P; -end; - - -//---CV1-L-TR--- - -procedure TCV1L_TR.SetLBP(P: real); -begin - LBP:=P; -end; - -function TCV1L_TR.GetHPFlow(HP, dt: real): real; -var dV: real; -begin - dV:=PF(HP,BrakeRes.P,0.01)*dt; - dV:=Min0R(0,dV); - BrakeRes.Flow(-dV); - GetHPFlow:=dV; -end; - -procedure TCV1L_TR.Init(PP, HPP, LPP, BP: real; BDF: byte); -begin - inherited; - ImplsRes:=TReservoir.Create; - ImplsRes.CreateCap(2.5); - ImplsRes.CreatePress(BP); -end; - -function TCV1L_TR.GetPF(PP, dt, Vel: real): real; -var dv, dv1, temp:real; - VVP, BVP, BCP, CVP: real; -begin - BVP:=BrakeRes.P; - VVP:=Min0R(ValveRes.P,BVP+0.05); - BCP:=ImplsRes.P; - CVP:=CntrlRes.P-0.0; - - dV:=0; dV1:=0; - -//sprawdzanie stanu - CheckState(BCP, dV1); - - VVP:=ValveRes.P; -//przeplyw ZS <-> PG - temp:=CVs(BCP); - dV:=PF(CVP,VVP,0.0015*temp)*dt; - CntrlRes.Flow(+dV); - ValveRes.Flow(-0.04*dV); - dV1:=dV1-0.96*dV; - - -//luzowanie KI - if(BrakeStatus and b_hld)=b_off then - dV:=PF(0,BCP,0.000425*(1.37-Byte(BrakeDelayFlag=bdelay_G)))*dt - else dV:=0; - ImplsRes.Flow(-dV); -//przeplyw ZP <-> KI - if ((BrakeStatus and b_on)=b_on) and (BCP0.6)and(BrakeDelayFlag=bdelay_G))))*dt - else dV:=0; - BrakeRes.Flow(dV); - ImplsRes.Flow(-dV); - -//przeplyw ZP <-> rozdzielacz - temp:=BVs(BCP); - if(VVP+0.05>BVP)then - dV:=PF(BVP,VVP,0.02*sizeBR*temp/1.87)*dt - else dV:=0; - BrakeRes.Flow(dV); - dV1:=dV1+dV*0.96; - ValveRes.Flow(-0.04*dV); -//przeplyw PG <-> rozdzielacz - dV:=PF(PP,VVP,0.01)*dt; - GetPF:=dV-dV1; - - temp:=Max0R(BCP,LBP); - -//luzowanie CH - if(BrakeCyl.P>temp+0.005)or(Max0R(ImplsRes.P,8*LBP)<0.25) then - dV:=PF(0,BrakeCyl.P,0.015*sizeBC)*dt - else dV:=0; - BrakeCyl.Flow(-dV); - -//przeplyw ZP <-> CH - if(BrakeCyl.P0.3)and(Max0R(BCP,LBP)CVP) then - BrakeStatus:=(BrakeStatus and 252) //luzowanie - else if(VVP+BCP/BVM>CVP) then - BrakeStatus:=(BrakeStatus and 253) //zatrzymanie napelaniania - else - else - if(VVP+0.100.25) then //zatrzymanie luzowanie - BrakeStatus:=(BrakeStatus or 1); -end; - -function TKE.CVs(bp: real): real; -var VVP, BVP, CVP: real; -begin - BVP:=BrakeRes.P; - CVP:=CntrlRes.P; - VVP:=ValveRes.P; - -//przeplyw ZS <-> PG - if(bp>0.2)then - CVs:=0 - else - if(VVP>CVP+0.4)then - CVs:=0.05 - else - CVs:=0.23 -end; - -function TKE.BVs(BCP: real): real; -var VVP, BVP, CVP: real; -begin - BVP:=BrakeRes.P; - CVP:=CntrlRes.P; - VVP:=ValveRes.P; - -//przeplyw ZP <-> rozdzielacz - if (BVP>VVP) then - BVs:=0 - else - if(BVP PG - temp:=CVs(IMP); - dV:=PF(CVP,VVP,0.0015*temp)*dt; - CntrlRes.Flow(+dV); - ValveRes.Flow(-0.04*dV); - dV1:=dV1-0.96*dV; - -//luzowanie - if(BrakeStatus and b_hld)=b_off then - begin - if ((BrakeDelayFlag and bdelay_G)=0) then - temp:=0.283+0.139 - else - temp:=0.139; - dV:=PF(0,IMP,0.001*temp)*dt - end - else dV:=0; - ImplsRes.Flow(-dV); - -//przeplyw ZP <-> silowniki - if((BrakeStatus and b_on)=b_on)and(IMP50)and(RapidStatus))or(Vel>70)) - else //jesli tarczowki, to zostan - RapidStatus:=((BrakeDelayFlag and bdelay_R)=bdelay_R); - -// temp:=1.9-0.9*Byte(RapidStatus); - - if(RM*RM>0.1)then //jesli jest rapid - if(RM>0)then //jesli dodatni (naddatek); - temp:=1-RM*Byte(RapidStatus) - else - temp:=1-RM*(1-Byte(RapidStatus)) - else - temp:=1; - temp:=temp/LoadC; -//luzowanie CH -// temp:=Max0R(BCP,LBP); - IMP:=Max0R(IMP/temp,Max0R(LBP,ASBP*Byte((BrakeStatus and b_asb)=b_asb))); - -//luzowanie CH - if(BCP>IMP+0.005)or(Max0R(ImplsRes.P,8*LBP)<0.25) then - dV:=PFVd(BCP,0,0.05,IMP)*dt - else dV:=0; - BrakeCyl.Flow(-dV); - if(BCP0.3) then - dV:=PFVa(BVP,BCP,0.05,IMP)*dt - else dV:=0; - BrakeRes.Flow(-dV); - BrakeCyl.Flow(+dV); - -//przeplyw ZP <-> rozdzielacz - temp:=BVs(IMP); -// if(BrakeStatus and b_hld)=b_off then - if(IMP<0.25)or(VVP+0.05>BVP)then - dV:=PF(BVP,VVP,0.02*sizeBR*temp/1.87)*dt - else dV:=0; - BrakeRes.Flow(dV); - dV1:=dV1+dV*0.96; - ValveRes.Flow(-0.04*dV); -//przeplyw PG <-> rozdzielacz - dV:=PF(PP,VVP,0.01)*dt; - ValveRes.Flow(-dV); - - ValveRes.Act; - BrakeCyl.Act; - BrakeRes.Act; - CntrlRes.Act; - ImplsRes.Act; - GetPF:=dV-dV1; -end; - -procedure TKE.Init(PP, HPP, LPP, BP: real; BDF: byte); -begin - ValveRes.CreatePress(PP); - BrakeCyl.CreatePress(BP); - BrakeRes.CreatePress(PP); - - CntrlRes:=TReservoir.Create; //komora sterujaca - CntrlRes.CreateCap(5); - CntrlRes.CreatePress(HPP); - - ImplsRes:=TReservoir.Create; //komora zastepcza silownika - ImplsRes.CreateCap(1); - ImplsRes.CreatePress(BP); - - BrakeStatus:=0; - - BVM:=1/(HPP-LPP)*MaxBP; - - BrakeDelayFlag:=BDF; -end; - -function TKE.GetCRP: real; -begin - GetCRP:=CntrlRes.P; -end; - -function TKE.GetHPFlow(HP, dt: real): real; -var dV: real; -begin - dV:=PF(HP,BrakeRes.P,0.01)*dt; - dV:=Min0R(0,dV); - BrakeRes.Flow(-dV); - GetHPFlow:=dV; -end; - -procedure TKE.PLC(mass: real); -begin - LoadC:=1+Byte(Massrp+0.05)then - dpMainValve:=PF(Min0R(cp+0.1,HP),pp,1.1*(ActFlowSpeed)/(LBDelay))*dt; - if(cp0.1)then - begin - cp:=5+(tp-0.1)*0.08; - tp:=tp-dt/12/2; - end; - if(cp>rp+0.1)and(cp<=5)then - dpMainValve:=PF(Min0R(cp+0.25,HP),pp,2*(ActFlowSpeed)/(LBDelay))*dt - else - if cp>5 then - dpMainValve:=PF(Min0R(cp,HP),pp,2*(ActFlowSpeed)/(LBDelay))*dt - else - dpMainValve:=PF(dpPipe,pp,(ActFlowSpeed)/(LBDelay))*dt - end; - - if(Round(i_bcp)=i_bcpNo)then - begin - dpMainValve:=PF(0,pp,(ActFlowSpeed)/(LBDelay))*dt; - end; - - GetPF:=dpMainValve; -end; - -procedure TFV4a.Init(press: real); -begin - CP:= press; - TP:= 0; - RP:= press; - Time:= false; - TimeEP:=false; -end; - - -//---FV4a/M--- nowonapisany kran bez poprawki IC - -function TFV4aM.GetPF(i_bcp:real; pp, hp, dt, ep: real): real; -function LPP_RP(pos: real): real; //cisnienie z zaokraglonej pozycji; -var i_pos: integer; -begin - i_pos:=Round(pos-0.5); //zaokraglone w dol - LPP_RP:=BPT[i_pos][1]+(BPT[i_pos+1][1]-BPT[i_pos][1])*(pos-i_pos); //interpolacja liniowa -end; -function EQ(pos: real; i_pos: real): boolean; -begin - EQ:=(pos<=i_pos+0.5)and(pos>i_pos-0.5); -end; -const - LBDelay = 100; - xpM = 0.3; //mnoznik membrany komory pod -var - LimPP, dpPipe, dpMainValve, ActFlowSpeed, dp: real; - pom: real; - i: byte; -begin - ep:=pp/2*1.5+ep/2*0.5; //SPKS!! -// ep:=pp; -// ep:=cp/3+pp/3+ep/3; -// ep:=cp; - - for i:=0 to 4 do - Sounds[i]:=0; - dp:=0; - - i_bcp:=Max0R(Min0R(i_bcp,5.999),-1.999); //na wszelki wypadek, zeby nie wyszlo poza zakres - - if(tp>0)then - begin //jesli czasowy jest niepusty -// dp:=0.07; //od cisnienia 5 do 0 w 60 sekund ((5-0)*dt/75) - dp:=0.045; //2.5 w 55 sekund (5,35->5,15 w PG) - tp:=tp-dp*dt; - Sounds[s_fv4a_t]:=dp; - end - else //.08 - begin - tp:=0; - end; - - if(xp>0)then //jesli komora pod niepusta jest niepusty - begin - dp:=2.5; - Sounds[s_fv4a_x]:=dp*xp; - xp:=xp-dt*dp*2; //od cisnienia 5 do 0 w 10 sekund ((5-0)*dt/10) - end - else //.75 - xp:=0; //jak pusty, to pusty - - Limpp:=Min0R(LPP_RP(i_bcp)+tp*0.08+RedAdj,HP); //pozycja + czasowy lub zasilanie - ActFlowSpeed:=BPT[Round(i_bcp)][0]; - - if(EQ(i_bcp,-1))then pom:=Min0R(HP,5.4+RedAdj) else pom:=Min0R(cp,HP); - - if(pom>rp+0.25)then Fala:=true; - if(Fala)then - if(pom>rp+0.3)then -// if(ep>rp+0.11)then - xp:=xp-20*PR(pom,xp)*dt -// else -// xp:=xp-16*(ep-(ep+0.01))/(0.1)*PR(ep,xp)*dt - else Fala:=false; - - if(Limpp>cp)then //podwyzszanie szybkie - cp:=cp+5*60*Min0R(abs(Limpp-cp),0.05)*PR(cp,Limpp)*dt //zbiornik sterujacy - else - cp:=cp+13*Min0R(abs(Limpp-cp),0.05)*PR(cp,Limpp)*dt; //zbiornik sterujacy - - Limpp:=pom; //cp - dpPipe:=Min0R(HP,Limpp+xp*xpM); - - if dpPipe>pp then - dpMainValve:=-PFVa(HP,pp,ActFlowSpeed/(LBDelay),dpPipe,0.4) - else - dpMainValve:=PFVd(pp,0,ActFlowSpeed/(LBDelay),dpPipe,0.4); - - if EQ(i_bcp,-1) then - begin - if(tp<5)then tp:=tp+dt; //5/10 - if(tp<1)then tp:=tp-0.5*dt; //5/10 -// dpMainValve:=dpMainValve*2;//+1*PF(dpPipe,pp,(ActFlowSpeed)/(LBDelay))//coby nie przeszkadzal przy ladowaniu z zaworu obok - end; - - if EQ(i_bcp,0) then - begin - if(tp>2)then - dpMainValve:=dpMainValve*1.5;//+0.5*PF(dpPipe,pp,(ActFlowSpeed)/(LBDelay))//coby nie przeszkadzal przy ladowaniu z zaworu obok - end; - - - - - - ep:=dpPipe; - if(EQ(i_bcp,0)or(rp>ep))then - rp:=rp+PF(rp,ep,0.0007)*dt //powolne wzrastanie, ale szybsze na jezdzie - else - rp:=rp+PF(rp,ep,0.000093/2*2)*dt; //powolne wzrastanie i to bardzo //jednak trzeba wydluzyc, bo obecnie zle dziala - if (rp0 then - Sounds[s_fv4a_b]:=dpMainValve - else - Sounds[s_fv4a_u]:=-dpMainValve; - end; - - GetPF:=dpMainValve*dt; -end; - -procedure TFV4aM.Init(press: real); -begin - CP:= press; - TP:= 0; - RP:= press; - XP:= 0; - Time:=false; - TimeEP:=false; -end; - -procedure TFV4aM.SetReductor(nAdj: real); -begin - RedAdj:= nAdj; -end; - -function TFV4aM.GetSound(i: byte): real; -begin - if i>4 then - GetSound:=0 - else - GetSound:=Sounds[i]; -end; - -function TFV4aM.GetPos(i: byte): real; -const - table: array[0..10] of real = (-2,6,-1,0,-2,1,4,6,0,0,0); -begin - GetPos:=table[i]; -end; - -//---M394--- Matrosow - -function TM394.GetPF(i_bcp:real; pp, hp, dt, ep: real): real; -const - LBDelay = 65; -var - LimPP, dpPipe, dpMainValve, ActFlowSpeed: real; - bcp: integer; -begin - bcp:=Round(i_bcp); - if bcp<-1 then bcp:=1; - - Limpp:=Min0R(BPT_394[bcp][1],HP); - ActFlowSpeed:=BPT_394[bcp][0]; - if (bcp=1)or(bcp=i_bcpNo) then - Limpp:=pp; - if (bcp=0) then - Limpp:=Limpp+RedAdj; - if (bcp<>2) then - if cp3)+Byte(bcp>4))*Min0R(abs(Limpp-cp),0.05)*PR(cp,Limpp)*dt; //zbiornik sterujacy - - Limpp:=cp; - dpPipe:=Min0R(HP,Limpp); - -// if(dpPipe>pp)then //napelnianie -// dpMainValve:=PF(dpPipe,pp,ActFlowSpeed/(LBDelay))*dt -// else //spuszczanie - dpMainValve:=PF(dpPipe,pp,ActFlowSpeed/(LBDelay))*dt; - - if bcp=-1 then -// begin - dpMainValve:=PF(HP,pp,(ActFlowSpeed)/(LBDelay))*dt; -// end; - - if bcp=i_bcpNo then -// begin - dpMainValve:=PF(0,pp,(ActFlowSpeed)/(LBDelay))*dt; -// end; - - GetPF:=dpMainValve; -end; - -procedure TM394.Init(press: real); -begin - CP:= press; - RedAdj:= 0; - Time:=true; - TimeEP:=false; -end; - -procedure TM394.SetReductor(nAdj: real); -begin - RedAdj:= nAdj; -end; - -function TM394.GetCP: real; -begin - GetCP:= CP; -end; - -function TM394.GetPos(i: byte): real; -const - table: array[0..10] of real = (-1,5,-1,0,1,2,4,5,0,0,0); -begin - GetPos:=table[i]; -end; - -//---H14K1-- Knorr - -function TH14K1.GetPF(i_bcp:real; pp, hp, dt, ep: real): real; -const - LBDelay = 100; //szybkosc + zasilanie sterujacego - BPT_K: array[-1..4] of array [0..1] of real= ((10, 0), (4, 1), (0, 1), (4, 0), (4, -1), (15, -1)); - NomPress = 5.0; -var - LimPP, dpPipe, dpMainValve, ActFlowSpeed: real; - bcp: integer; -begin - bcp:=Round(i_bcp); - if i_bcp<-1 then bcp:=1; - Limpp:=BPT_K[bcp][1]; - if Limpp<0 then - Limpp:=0.5*pp - else if Limpp>0 then - Limpp:=pp - else - Limpp:=cp; - ActFlowSpeed:=BPT_K[bcp][0]; - - cp:=cp+6*Min0R(abs(Limpp-cp),0.05)*PR(cp,Limpp)*dt; //zbiornik sterujacy - - dpMainValve:=0; - - if bcp=-1 then - dpMainValve:=PF(HP,pp,(ActFlowSpeed)/(LBDelay))*dt; - if(bcp=0)then - dpMainValve:=-PFVa(HP,pp,(ActFlowSpeed)/(LBDelay),NomPress+RedAdj)*dt; - if (bcp>1)and(pp>cp) then - dpMainValve:=PFVd(pp,0,(ActFlowSpeed)/(LBDelay),cp)*dt; - if bcp=i_bcpNo then - dpMainValve:=PF(0,pp,(ActFlowSpeed)/(LBDelay))*dt; - - GetPF:=dpMainValve; -end; - -procedure TH14K1.Init(press: real); -begin - CP:= press; - RedAdj:= 0; - Time:=true; - TimeEP:=true; -end; - -procedure TH14K1.SetReductor(nAdj: real); -begin - RedAdj:= nAdj; -end; - -function TH14K1.GetCP: real; -begin - GetCP:= CP; -end; - -function TH14K1.GetPos(i: byte): real; -const - table: array[0..10] of real = (-1,4,-1,0,1,2,3,4,0,0,0); -begin - GetPos:=table[i]; -end; - -//---St113-- Knorr EP - -function TSt113.GetPF(i_bcp:real; pp, hp, dt, ep: real): real; -const - LBDelay = 100; //szybkosc + zasilanie sterujacego - BPT_K: array[-1..4] of array [0..1] of real= ((10, 0), (4, 1), (0, 1), (4, 0), (4, -1), (15, -1)); - BEP_K: array[-1..5] of real= (0, -1, 1, 0, 0, 0, 0); - NomPress = 5.0; -var - LimPP, dpPipe, dpMainValve, ActFlowSpeed: real; - bcp: integer; -begin - bcp:=Round(i_bcp); - - EPS:=BEP_K[bcp]; - - if bcp>0 then bcp:=bcp-1; - - if bcp<-1 then bcp:=1; - Limpp:=BPT_K[bcp][1]; - if Limpp<0 then - Limpp:=0.5*pp - else if Limpp>0 then - Limpp:=pp - else - Limpp:=cp; - ActFlowSpeed:=BPT_K[bcp][0]; - - cp:=cp+6*Min0R(abs(Limpp-cp),0.05)*PR(cp,Limpp)*dt; //zbiornik sterujacy - - dpMainValve:=0; - - if bcp=-1 then - dpMainValve:=PF(HP,pp,(ActFlowSpeed)/(LBDelay))*dt; - if(bcp=0)then - dpMainValve:=-PFVa(HP,pp,(ActFlowSpeed)/(LBDelay),NomPress+RedAdj)*dt; - if (bcp>1)and(pp>cp) then - dpMainValve:=PFVd(pp,0,(ActFlowSpeed)/(LBDelay),cp)*dt; - if bcp=i_bcpNo then - dpMainValve:=PF(0,pp,(ActFlowSpeed)/(LBDelay))*dt; - - GetPF:=dpMainValve; -end; - -function TSt113.GetCP: real; -begin - GetCP:=EPS; -end; - -function TSt113.GetPos(i: byte): real; -const - table: array[0..10] of real = (-1,5,-1,0,2,3,4,5,0,0,1); -begin - GetPos:=table[i]; -end; - -procedure TSt113.Init(press: real); -begin - Time:=true; - TimeEP:=true; -end; - -//--- test --- - -function Ttest.GetPF(i_bcp:real; pp, hp, dt, ep: real): real; -const - LBDelay = 100; -var - LimPP, dpPipe, dpMainValve, ActFlowSpeed: real; -begin - - Limpp:=BPT[Round(i_bcp)][1]; - ActFlowSpeed:=BPT[Round(i_bcp)][0]; - - if(i_bcp=i_bcpNo)then limpp:=0.0; - - if(i_bcp=-1)then limpp:=7; - - cp:=cp+20*Min0R(abs(Limpp-cp),0.05)*PR(cp,Limpp)*dt/1; - - Limpp:=cp; - dpPipe:=Min0R(HP,Limpp); - - dpMainValve:=PF(dpPipe,pp,ActFlowSpeed/(LBDelay))*dt; - - if(Round(i_bcp)=i_bcpNo)then - begin - dpMainValve:=PF(0,pp,(ActFlowSpeed)/(LBDelay))*dt; - end; - - GetPF:=dpMainValve; -end; - -procedure Ttest.Init(press: real); -begin - CP:= press; -end; - - -//---FD1--- - -function TFD1.GetPF(i_bcp:real; pp, hp, dt, ep: real): real; -var dp, temp: real; -begin -// MaxBP:=4; -// temp:=Min0R(i_bcp*MaxBP,Min0R(5.0,HP)); - temp:=Min0R(i_bcp*MaxBP,HP); //0011 - dp:=10*Min0R(abs(temp-BP),0.1)*PF(temp,BP,0.0006*(2+Byte(temp>BP)))*dt*Speed; - BP:=BP-dp; - GetPF:=-dp; -end; - -procedure TFD1.Init(press: real); -begin - BP:=0; - MaxBP:=press; - Time:=false; - TimeEP:=false; - Speed:=1; -end; - -function TFD1.GetCP: real; -begin - GetCP:=BP; -end; - -procedure TFD1.SetSpeed(nSpeed: real); -begin - Speed:=nSpeed; -end; - - -//---KNORR--- - -function TH1405.GetPF(i_bcp:real; pp, hp, dt, ep: real): real; -var dp, temp, A: real; -begin - pp:=Min0R(pp,MaxBP); - if i_bcp>0.5 then - begin - temp:=Min0R(MaxBP,HP); - A:=2*(i_bcp-0.5)*0.0011; - BP:=Max0R(BP,pp); - end - else - begin - temp:=0; - A:=0.2*(0.5-i_bcp)*0.0033; - BP:=Min0R(BP,pp); - end; - dp:=PF(temp,BP,A)*dt; - BP:=BP-dp; - GetPF:=-dp; -end; - -procedure TH1405.Init(press: real); -begin - BP:=0; - MaxBP:=press; - Time:=true; - TimeEP:=false; -end; - -function TH1405.GetCP: real; -begin - GetCP:=BP; -end; - - -//---FVel6--- - -function TFVel6.GetPF(i_bcp:real; pp, hp, dt, ep: real): real; -const - LBDelay = 100; -var - LimPP, dpPipe, dpMainValve, ActFlowSpeed: real; -begin - Limpp:=Min0R(5*Byte(i_bcp<3.5),hp); - if (i_bcp>=3.5) and ((i_bcp<4.3)or(i_bcp>5.5)) then - ActFlowSpeed:=0 - else if (i_bcp>4.3) and (i_bcp<4.8) then - ActFlowSpeed:=4*(i_bcp-4.3) //konsultacje wawa1 - bylo 8 - else if (i_bcp<4) then - ActFlowSpeed:=2 - else - ActFlowSpeed:=4; - dpMainValve:=PF(Limpp,pp,ActFlowSpeed/(LBDelay))*dt; - - - Sounds[s_fv4a_e]:=0; - Sounds[s_fv4a_u]:=0; - Sounds[s_fv4a_b]:=0; - if(i_bcp<3.5)then Sounds[s_fv4a_u]:=-dpMainValve else - if(i_bcp<4.8)then Sounds[s_fv4a_b]:=dpMainValve else - if(i_bcp<5.5)then Sounds[s_fv4a_e]:=dpMainValve; - - GetPF:=dpMainValve; - if(i_bcp<-0.5)then - EPS:=-1 - else if(i_bcp>0.5)and(i_bcp<4.7)then - EPS:=1 - else - EPS:=0; -// EPS:=i_bcp*Byte(i_bcp<2) -end; - -function TFVel6.GetCP: real; -begin - GetCP:=EPS; -end; - -function TFVel6.GetPos(i: byte): real; -const - table: array[0..10] of real = (-1,6,-1,0,6,4,4.7,5,-1,0,1); -begin - GetPos:=table[i]; -end; - -function TFVel6.GetSound(i: byte): real; -begin - if i>2 then - GetSound:=0 - else - GetSound:=Sounds[i]; -end; - -procedure TFVel6.Init(press: real); -begin - Time:=true; - TimeEP:=true; -end; - -end. - - +unit hamulce; {fizyka hamulcow dla symulatora} + +(* +This Source Code Form is subject to the +terms of the Mozilla Public License, v. +2.0. If a copy of the MPL was not +distributed with this file, You can +obtain one at +http://mozilla.org/MPL/2.0/. +*) +(* + MaSzyna EU07 - SPKS + Brakes. + Copyright (C) 2007-2014 Maciej Cierniak +*) + + +(* +(C) youBy +Co brakuje: +moze jeszcze jakis SW +*) +(* +Zrobione: +ESt3, ESt3AL2, ESt4R, LSt, FV4a, FD1, EP2, prosty westinghouse +duzo wersji żeliwa +KE +Tarcze od 152A +Magnetyki (implementacja w mover.pas) +Matrosow 394 +H14K1 (zasadniczy), H1405 (pomocniczy), St113 (ep) +Knorr/West EP - żeby był +*) + +interface + +uses mctools,sysutils,friction; + +CONST + + LocalBrakePosNo=10; {ilosc nastaw hamulca recznego lub pomocniczego} + MainBrakeMaxPos=10; {max. ilosc nastaw hamulca zasadniczego} + + {nastawy hamulca} + bdelay_G=1; //G + bdelay_P=2; //P + bdelay_R=4; //R + bdelay_M=8; //Mg + bdelay_GR=128; //G-R + + + {stan hamulca} + b_off = 0; //luzowanie + b_hld = 1; //trzymanie + b_on = 2; //napelnianie + b_rfl = 4; //uzupelnianie + b_rls = 8; //odluzniacz + b_ep = 16; //elektropneumatyczny + b_asb = 32; //elektropneumatyczny + b_dmg =128; //wylaczony z dzialania + + {uszkodzenia hamulca} + df_on = 1; //napelnianie + df_off = 2; //luzowanie + df_br = 4; //wyplyw z ZP + df_vv = 8; //wyplyw z komory wstepnej + df_bc = 16; //wyplyw z silownika + df_cv = 32; //wyplyw z ZS + df_PP = 64; //zawsze niski stopien + df_RR =128; //zawsze wysoki stopien + + {indeksy dzwiekow FV4a} + s_fv4a_b = 0; //hamowanie + s_fv4a_u = 1; //luzowanie + s_fv4a_e = 2; //hamowanie nagle + s_fv4a_x = 3; //wyplyw sterujacego fala + s_fv4a_t = 4; //wyplyw z czasowego + + {pary cierne} + bp_P10 = 0; + bp_P10Bg = 2; //żeliwo fosforowe P10 + bp_P10Bgu = 1; + bp_LLBg = 4; //komp. b.n.t. + bp_LLBgu = 3; + bp_LBg = 6; //komp. n.t. + bp_LBgu = 5; + bp_KBg = 8; //komp. w.t. + bp_KBgu = 7; + bp_D1 = 9; //tarcze + bp_D2 = 10; + bp_FR513 = 11; //Frenoplast FR513 + bp_Cosid = 12; //jakistam kompozyt :D + bp_PKPBg = 13; //żeliwo PKP + bp_PKPBgu = 14; + bp_MHS = 128; //magnetyczny hamulec szynowy + bp_P10yBg = 15; //żeliwo fosforowe P10 + bp_P10yBgu= 16; + bp_FR510 = 17; //Frenoplast FR510 + + sf_Acc = 1; //przyspieszacz + sf_BR = 2; //przekladnia + sf_CylB = 4; //cylinder - napelnianie + sf_CylU = 8; //cylinder - oproznianie + sf_rel = 16; //odluzniacz + sf_ep = 32; //zawory ep + + bh_MIN= 0; //minimalna pozycja + bh_MAX= 1; //maksymalna pozycja + bh_FS = 2; //napelnianie uderzeniowe //jesli nie ma, to jazda + bh_RP = 3; //jazda + bh_NP = 4; //odciecie - podwojna trakcja + bh_MB = 5; //odciecie - utrzymanie stopnia hamowania/pierwszy 1 stopien hamowania + bh_FB = 6; //pelne + bh_EB = 7; //nagle + bh_EPR= 8; //ep - luzowanie //pelny luz dla ep kątowego + bh_EPN= 9; //ep - utrzymanie //jesli rowne luzowaniu, wtedy sterowanie przyciskiem + bh_EPB=10; //ep - hamowanie //pelne hamowanie dla ep kątowego + + + SpgD=0.7917; + SpO=0.5067; //przekroj przewodu 1" w l/m + //wyj: jednostka dosyc dziwna, ale wszystkie obliczenia + //i pojemnosci sa podane w litrach (rozsadne wielkosci) + //zas dlugosc pojazdow jest podana w metrach + //a predkosc przeplywu w m/s //3.5 + //7//1.5 +// BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (14, 5.4), (9, 5.0), (6, 4.6), (9, 4.5), (9, 4.0), (9, 3.5), (9, 2.8), (34, 2.8)); +// BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (7, 5.0), (2.0, 5.0), (4.5, 4.6), (4.5, 4.2), (4.5, 3.8), (4.5, 3.4), (4.5, 2.8), (8, 2.8)); + BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (7, 5.0), (2.0, 5.0), (4.5, 4.6), (4.5, 4.2), (4.5, 3.8), (4.5, 3.4), (4.5, 2.8), (8, 2.8)); + BPT_394: array[-1..5] of array [0..1] of real= ((13, 10.0), (5, 5.0), (0, -1), (5, -1), (5, 0.0), (5, 0.0), (18, 0.0)); +// BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (12, 5.4), (9, 5.0), (9, 4.6), (9, 4.2), (9, 3.8), (9, 3.4), (9, 2.8), (34, 2.8)); +// BPT: array[-2..6] of array [0..1] of real= ((0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0)); + i_bcpno= 6; + +TYPE + //klasa obejmujaca pojedyncze zbiorniki + TReservoir= class + protected + Cap: real; + Vol: real; + dVol: real; + public + constructor Create; + procedure CreateCap(Capacity: real); + procedure CreatePress(Press: real); + function pa: real; virtual; + function P: real; virtual; + procedure Flow(dv: real); + procedure Act; + end; + + PReservoir=^TReservoir; + + TBrakeCyl= class(TReservoir) + public + function pa: real; override; + function P: real; override; + end; + + //klasa obejmujaca uklad hamulca zespolonego pojazdu + TBrake= class + protected + BrakeCyl: TReservoir; //silownik + BrakeRes: TReservoir; //ZP + ValveRes: TReservoir; //komora wstepna + BCN: byte; //ilosc silownikow + BCM: real; //przekladnia hamulcowa + BCA: real; //laczny przekroj silownikow + BrakeDelays: byte; //dostepne opoznienia + BrakeDelayFlag: byte; //aktualna nastawa + FM: TFricMat; //material cierny + MaxBP: real; //najwyzsze cisnienie + BA: byte; //osie hamowane + NBpA: byte; //klocki na os + SizeBR: real; //rozmiar^2 ZP (w stosunku do 14") + SizeBC: real; //rozmiar^2 CH (w stosunku do 14") + DCV: boolean; //podwojny zawor zwrotny + ASBP: real; //cisnienie hamulca pp + + BrakeStatus: byte; //flaga stanu + SoundFlag: byte; + public + constructor Create(i_mbp, i_bcr, i_bcd, i_brc: real; + i_bcn, i_BD, i_mat, i_ba, i_nbpa: byte); + //maksymalne cisnienie, promien, skok roboczy, pojemnosc ZP; + //ilosc cylindrow, opoznienia hamulca, material klockow, osie hamowane, klocki na os; + + function GetFC(Vel, N: real): real; virtual; //wspolczynnik tarcia - hamulec wie lepiej + function GetPF(PP, dt, Vel: real): real; virtual; //przeplyw miedzy komora wstepna i PG + function GetBCF: real; //sila tlokowa z tloka + function GetHPFlow(HP, dt: real): real; virtual; //przeplyw - 8 bar + function GetBCP: real; virtual; //cisnienie cylindrow hamulcowych + function GetBRP: real; //cisnienie zbiornika pomocniczego + function GetVRP: real; //cisnienie komory wstepnej rozdzielacza + function GetCRP: real; virtual; //cisnienie zbiornika sterujacego + procedure Init(PP, HPP, LPP, BP: real; BDF: byte); virtual; //inicjalizacja hamulca + function SetBDF(nBDF: byte): boolean; //nastawiacz GPRM + procedure Releaser(state: byte); //odluzniacz + procedure SetEPS(nEPS:real); virtual;//hamulec EP + procedure ASB(state: byte); //hamulec przeciwposlizgowy + function GetStatus(): byte; //flaga statusu, moze sie przydac do odglosow + procedure SetASBP(press: real); //ustalenie cisnienia pp + procedure ForceEmptiness(); virtual; + function GetSoundFlag: byte; +// procedure + end; + + TWest= class(TBrake) + private + LBP: real; //cisnienie hamulca pomocniczego + dVP: real; //pobor powietrza wysokiego cisnienia + EPS: real; //stan elektropneumatyka + TareM, LoadM: real; //masa proznego i pelnego + TareBP: real; //cisnienie dla proznego + LoadC: real; //wspolczynnik przystawki wazacej + public + procedure SetLBP(P: real); //cisnienie z hamulca pomocniczego + function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG + procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; + function GetHPFlow(HP, dt: real): real; override; + procedure PLC(mass: real); //wspolczynnik cisnienia przystawki wazacej + procedure SetEPS(nEPS: real); override; //stan hamulca EP + procedure SetLP(TM, LM, TBP: real); //parametry przystawki wazacej + end; + + TESt= class(TBrake) + private + CntrlRes: TReservoir; //zbiornik sterujący + BVM: real; //przelozenie PG-CH + public + function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG + procedure EStParams(i_crc: real); //parametry charakterystyczne dla ESt + procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; + function GetCRP: real; override; + procedure CheckState(BCP: real; var dV1: real); //glowny przyrzad rozrzadczy + procedure CheckReleaser(dt: real); //odluzniacz + function CVs(bp: real): real; //napelniacz sterujacego + function BVs(BCP: real): real; //napelniacz pomocniczego + end; + + TESt3= class(TESt) + private + CylFlowSpeed: array[0..1] of array [0..1] of real; + public + function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG + end; + + TESt3AL2= class(TESt3) + private + TareM, LoadM: real; //masa proznego i pelnego + TareBP: real; //cisnienie dla proznego + LoadC: real; + public + ImplsRes: TReservoir; //komora impulsowa + function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG + procedure PLC(mass: real); //wspolczynnik cisnienia przystawki wazacej + procedure SetLP(TM, LM, TBP: real); //parametry przystawki wazacej + procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; + end; + + TESt4R= class(TESt) + private + RapidStatus: boolean; + RapidTemp: real; //akrualne, zmienne przelozenie + public + ImplsRes: TReservoir; //komora impulsowa + function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG + procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; + end; + + TLSt= class(TESt4R) + private + CylFlowSpeed: array[0..1] of array [0..1] of real; + LBP: real; //cisnienie hamulca pomocniczego + RM: real; //przelozenie rapida + EDFlag: real; //luzowanie hamulca z powodu zalaczonego ED + public + procedure SetLBP(P: real); //cisnienie z hamulca pomocniczego + procedure SetRM(RMR: real); //ustalenie przelozenia rapida + function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG + function GetHPFlow(HP, dt: real): real; override; //przeplyw - 8 bar + procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; + function GetEDBCP: real; virtual; //cisnienie tylko z hamulca zasadniczego, uzywane do hamulca ED w EP09 + procedure SetED(EDstate: real); //stan hamulca ED do luzowania + end; + + TEStED= class(TLSt) //zawor z EP09 - Est4 z oddzielnym przekladnikiem, kontrola rapidu i takie tam + private + Nozzles: array[0..10] of real; //dysze + Zamykajacy: boolean; //pamiec zaworka zamykajacego + Przys_blok: boolean; //blokada przyspieszacza + Miedzypoj: TReservoir; //pojemnosc posrednia (urojona) do napelniania ZP i ZS + TareM, LoadM: real; //masa proznego i pelnego + TareBP: real; //cisnienie dla proznego + LoadC: real; + public + procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; + function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG + function GetEDBCP: real; override; //cisnienie tylko z hamulca zasadniczego, uzywane do hamulca ED + procedure PLC(mass: real); //wspolczynnik cisnienia przystawki wazacej + procedure SetLP(TM, LM, TBP: real); //parametry przystawki wazacej + end; + + TEStEP2= class(TLSt) + private + TareM, LoadM: real; //masa proznego i pelnego + TareBP: real; //cisnienie dla proznego + LoadC: real; + EPS: real; + public + function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG + procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; //inicjalizacja + procedure PLC(mass: real); //wspolczynnik cisnienia przystawki wazacej + procedure SetEPS(nEPS: real); override; //stan hamulca EP + procedure SetLP(TM, LM, TBP: real); //parametry przystawki wazacej + end; + + TCV1= class(TBrake) + private + CntrlRes: TReservoir; //zbiornik sterujący + BVM: real; //przelozenie PG-CH + public + function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG + procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; + function GetCRP: real; override; + procedure CheckState(BCP: real; var dV1: real); + function CVs(bp: real): real; + function BVs(BCP: real): real; + public + end; + + TCV1R= class(TCV1) + private + ImplsRes: TReservoir; //komora impulsowa + RapidStatus: boolean; + public +// function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG +// procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; + end; + + TCV1L_TR= class(TCV1) + private + ImplsRes: TReservoir; //komora impulsowa + LBP: real; //cisnienie hamulca pomocniczego + public + function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG + procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; + procedure SetLBP(P: real); //cisnienie z hamulca pomocniczego + function GetHPFlow(HP, dt: real): real; override; //przeplyw - 8 bar + end; + + TKE= class(TBrake) //Knorr Einheitsbauart — jeden do wszystkiego + private + RapidStatus: boolean; + ImplsRes: TReservoir; //komora impulsowa + CntrlRes: TReservoir; //zbiornik sterujący + Brak2Res: TReservoir; //zbiornik pomocniczy 2 + BVM: real; //przelozenie PG-CH + TareM, LoadM: real; //masa proznego i pelnego + TareBP: real; //cisnienie dla proznego + LoadC: real; //wspolczynnik zaladowania + RM: real; //przelozenie rapida + LBP: real; //cisnienie hamulca pomocniczego + public + procedure SetRM(RMR: real); //ustalenie przelozenia rapida + function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG + procedure Init(PP, HPP, LPP, BP: real; BDF: byte); override; + function GetHPFlow(HP, dt: real): real; override; //przeplyw - 8 bar + function GetCRP: real; override; + procedure CheckState(BCP: real; var dV1: real); + procedure CheckReleaser(dt: real); //odluzniacz + function CVs(bp: real): real; //napelniacz sterujacego + function BVs(BCP: real): real; //napelniacz pomocniczego + procedure PLC(mass: real); //wspolczynnik cisnienia przystawki wazacej + procedure SetLP(TM, LM, TBP: real); //parametry przystawki wazacej + procedure SetLBP(P: real); //cisnienie z hamulca pomocniczego + end; + + + + + //klasa obejmujaca krany + THandle= class + private +// BCP: integer; + public + Time: boolean; + TimeEP: boolean; + Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow + function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; virtual; + procedure Init(press: real); virtual; + function GetCP(): real; virtual; + procedure SetReductor(nAdj: real); virtual; + function GetSound(i: byte): real; virtual; + function GetPos(i: byte): real; virtual; + end; + + TFV4a= class(THandle) + private + CP, TP, RP: real; //zbiornik sterujący, czasowy, redukcyjny + public + function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; + procedure Init(press: real); override; + end; + + TFV4aM= class(THandle) + private + CP, TP, RP: real; //zbiornik sterujący, czasowy, redukcyjny + XP: real; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali + RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem) +// Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow + Fala: boolean; + public + function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; + procedure Init(press: real); override; + procedure SetReductor(nAdj: real); override; + function GetSound(i: byte): real; override; + function GetPos(i: byte): real; override; + end; + + TMHZ_EN57= class(THandle) + private + CP, TP, RP: real; //zbiornik sterujący, czasowy, redukcyjny + RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem) + Fala: boolean; + public + function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; + procedure Init(press: real); override; + procedure SetReductor(nAdj: real); override; + function GetSound(i: byte): real; override; + function GetPos(i: byte): real; override; + function GetCP: real; override; + function GetEP(pos: real): real; + end; + + +{ FBS2= class(THandle) + private + CP, TP, RP: real; //zbiornik sterujący, czasowy, redukcyjny + XP: real; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali + RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem) +// Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow + Fala: boolean; + public + function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; + procedure Init(press: real); override; + procedure SetReductor(nAdj: real); override; + function GetSound(i: byte): real; override; + function GetPos(i: byte): real; override; + end; } + +{ TD2= class(THandle) + private + CP, TP, RP: real; //zbiornik sterujący, czasowy, redukcyjny + XP: real; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali + RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem) +// Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow + Fala: boolean; + public + function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; + procedure Init(press: real); override; + procedure SetReductor(nAdj: real); override; + function GetSound(i: byte): real; override; + function GetPos(i: byte): real; override; + end;} + + TM394= class(THandle) + private + CP: real; //zbiornik sterujący, czasowy, redukcyjny + RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem) + public + function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; + procedure Init(press: real); override; + procedure SetReductor(nAdj: real); override; + function GetCP: real; override; + function GetPos(i: byte): real; override; + end; + + TH14K1= class(THandle) + private + CP: real; //zbiornik sterujący, czasowy, redukcyjny + RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem) + public + function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; + procedure Init(press: real); override; + procedure SetReductor(nAdj: real); override; + function GetCP: real; override; + function GetPos(i: byte): real; override; + end; + + TSt113= class(TH14K1) + private + EPS: real; + public + function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; + function GetCP: real; override; + function GetPos(i: byte): real; override; + procedure Init(press: real); override; + end; + + Ttest= class(THandle) + private + CP: real; + public + function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; + procedure Init(press: real); override; + end; + + TFD1= class(THandle) + private + MaxBP: real; //najwyzsze cisnienie + BP: real; //aktualne cisnienie + public + Speed: real; //szybkosc dzialania + function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; + procedure Init(press: real); override; + function GetCP(): real; override; + procedure SetSpeed(nSpeed: real); +// procedure Init(press: real; MaxBP: real); overload; + end; + + TH1405= class(THandle) + private + MaxBP: real; //najwyzsze cisnienie + BP: real; //aktualne cisnienie + public + function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; + procedure Init(press: real); override; + function GetCP(): real; override; +// procedure Init(press: real; MaxBP: real); overload; + end; + + + TFVel6= class(THandle) + private + EPS: real; + public + function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override; + function GetCP(): real; override; + function GetPos(i: byte): real; override; + function GetSound(i: byte): real; override; + procedure Init(press: real); override; + end; + +function PF(P1,P2,S:real;DP:real = 0.25):real; +function PF1(P1,P2,S:real):real; + +function PFVa(PH,PL,S,LIM:real;DP:real = 0.1):real; //zawor napelniajacy z PH do PL, PL do LIM +function PFVd(PH,PL,S,LIM:real;DP:real = 0.1):real; //zawor wypuszczajacy z PH do PL, PH do LIM + +implementation + +uses _mover; +//---FUNKCJE OGOLNE--- + +const DPL=0.25; + +function PR(p1,p2:real):real; +var ph,pl: real; +begin + ph:=Max0R(p1,p2)+0.1; + pl:=p1+p2-ph+0.2; + PR:=(p2-p1)/(1.13*ph-pl); +end; + +function PF_old(P1,P2,S:real):real; +var ph,pl: real; +begin + PH:=Max0R(P1,P2)+1; + PL:=P1+P2-PH+2; + if PH-PL<0.0001 then PF_old:=0 else + if (PH-PL)<0.05 then + PF_old:=20*(PH-PL)*(PH+1)*222*S*(P2-P1)/(1.13*ph-pl) + else + PF_old:=(PH+1)*222*S*(P2-P1)/(1.13*ph-pl); +end; + +function PF(P1,P2,S:real;DP:real = 0.25):real; +var ph,pl,sg,fm: real; +begin + PH:=Max0R(P1,P2)+1; //wyzsze cisnienie absolutne + PL:=P1+P2-PH+2; //nizsze cisnienie absolutne + sg:=PL/PH; //bezwymiarowy stosunek cisnien + fm:=PH*197*S*sign(P2-P1); //najwyzszy mozliwy przeplyw, wraz z kierunkiem + if (SG>0.5) then //jesli ponizej stosunku krytycznego + if (PH-PL)0.5) then //jesli ponizej stosunku krytycznego + if (SGPL then + begin + LIM:=LIM+1; + PH:=PH+1; //wyzsze cisnienie absolutne + PL:=PL+1; //nizsze cisnienie absolutne + sg:=PL/PH; //bezwymiarowy stosunek cisnien + fm:=PH*197*S; //najwyzszy mozliwy przeplyw, wraz z kierunkiem + if (LIM-PL)0.5) then //jesli ponizej stosunku krytycznego + if (PH-PL)0.5) then //jesli ponizej stosunku krytycznego + if (PH-PL)0.88 then P:=0.5+(VtoC-0.88)*1.043-0.064*(VtoC-0.88)*(VtoC-0.88) + else P:=0.15+0.35/0.82*(VtoC-0.06); +end; *) + +//(* STARA WERSJA +function TBrakeCyl.P:real; +var VtoC: real; //stosunek cisnienia do objetosci +const + VS = 0.005; + pS = 0.05; + VD = 1.10; + cD = 1; + pD = VD-cD; +begin + VtoC:=Vol/Cap; +// P:=VtoC; + if VtoCVD then P:=VtoC-cD //caly silownik + else P:=pS+(VtoC-VS)/(VD-VS)*(pD-pS); //wysuwanie tloka +end; //*) + + +//---HAMULEC--- +(* +constructor TBrake.Create(i_mbp, i_bcr, i_bcd, i_brc: real; i_bcn, i_BD, i_mat, i_ba, i_nbpa: byte); +begin + inherited Create; + MaxBP:=i_mbp; + BCN:=i_bcn; + BCA:=i_bcn*i_bcr*i_bcr*pi; + BA:=i_ba; + NBpA:=i_nbpa; + BrakeDelays:=i_BD; + +//tworzenie zbiornikow + BrakeCyl.CreateCap(i_bcd*BCA*1000); + BrakeRes.CreateCap(i_brc); + ValveRes.CreateCap(0.2); + +// FM.Free; +//materialy cierne + case i_mat of + bp_P10Bg: FM:=TP10Bg.Create; + bp_P10Bgu: FM:=TP10Bgu.Create; + else //domyslnie + FM:=TP10.Create; + end; + + +end ; *) + +constructor TBrake.Create(i_mbp, i_bcr, i_bcd, i_brc: real; i_bcn, i_BD, i_mat, i_ba, i_nbpa: byte); +begin + inherited Create; + MaxBP:=i_mbp; + BCN:=i_bcn; + BCA:=i_bcn*i_bcr*i_bcr*pi; + BA:=i_ba; + NBpA:=i_nbpa; + BrakeDelays:=i_BD; + //210.88 +// SizeBR:=i_bcn*i_bcr*i_bcr*i_bcd*40.17*MaxBP/(5-MaxBP); //objetosc ZP w stosunku do cylindra 14" i cisnienia 4.2 atm + SizeBR:=i_brc*0.0128; + SizeBC:=i_bcn*i_bcr*i_bcr*i_bcd*210.88*MaxBP/4.2; //objetosc CH w stosunku do cylindra 14" i cisnienia 4.2 atm + +// BrakeCyl:=TReservoir.Create; + BrakeCyl:=TBrakeCyl.Create; + BrakeRes:=TReservoir.Create; + ValveRes:=TReservoir.Create; + +//tworzenie zbiornikow + BrakeCyl.CreateCap(i_bcd*BCA*1000); + BrakeRes.CreateCap(i_brc); + ValveRes.CreateCap(0.25); + +// FM.Free; +//materialy cierne + i_mat:=i_mat and (255-bp_MHS); + case i_mat of + bp_P10Bg: FM:=TP10Bg.Create; + bp_P10Bgu: FM:=TP10Bgu.Create; + bp_FR513: FM:=TFR513.Create; + bp_FR510: FM:=TFR510.Create; + bp_Cosid: FM:=TCosid.Create; + bp_P10yBg: FM:=TP10yBg.Create; + bp_P10yBgu: FM:=TP10yBgu.Create; + bp_D1: FM:=TDisk1.Create; + bp_D2: FM:=TDisk2.Create; + else //domyslnie + FM:=TP10.Create; + end; +end; + +//inicjalizacja hamulca (stan poczatkowy) +procedure TBrake.Init(PP, HPP, LPP, BP: real; BDF: byte); +begin + +end; + +//pobranie wspolczynnika tarcia materialu +function TBrake.GetFC(Vel, N: real): real; +begin + GetFC:=FM.GetFC(N, Vel); +end; + +//cisnienie cylindra hamulcowego +function TBrake.GetBCP: real; +begin + GetBCP:=BrakeCyl.P; +end; + +//cisnienie zbiornika pomocniczego +function TBrake.GetBRP: real; +begin + GetBRP:=BrakeRes.P; +end; + +//cisnienie komory wstepnej +function TBrake.GetVRP: real; +begin + GetVRP:=ValveRes.P; +end; + +//cisnienie zbiornika sterujacego +function TBrake.GetCRP: real; +begin + GetCRP:=0; +end; + +//przeplyw z przewodu glowneg +function TBrake.GetPF(PP, dt, Vel: real): real; +begin + ValveRes.Act; + BrakeCyl.Act; + BrakeRes.Act; + GetPF:=0; +end; + +//przeplyw z przewodu zasilajacego +function TBrake.GetHPFlow(HP, dt: real): real; +begin + GetHPFlow:=0; +end; + +function TBrake.GetBCF: real; +begin + GetBCF:=BCA*100*BrakeCyl.P; +end; + +function TBrake.SetBDF(nBDF: byte): boolean; +begin + if ((nBDF and BrakeDelays)=nBDF)and(nBDF<>BrakeDelayFlag) then + begin + BrakeDelayFlag:=nBDF; + SetBDF:=true; + end + else + SetBDF:=false; +end; + +procedure TBrake.Releaser(state: byte); +begin + BrakeStatus:=(BrakeStatus and 247) or state*b_rls; +end; + +procedure TBrake.SetEPS(nEPS: real); +begin + +end; + +procedure TBrake.ASB(state: byte); +begin //255-b_asb(32) + BrakeStatus:=(BrakeStatus and 223) or state*b_asb; +end; + +function TBrake.GetStatus(): byte; +begin + GetStatus:=BrakeStatus; +end; + +function TBrake.GetSoundFlag: byte; +begin + GetSoundFlag:=SoundFlag; + SoundFlag:=0; +end; + +procedure TBrake.SetASBP(press: real); +begin + ASBP:=press; +end; + +procedure TBrake.ForceEmptiness(); +begin + ValveRes.CreatePress(0); + BrakeRes.CreatePress(0); + ValveRes.Act(); + BrakeRes.Act(); +end; + + +//---WESTINGHOUSE--- + +procedure TWest.Init(PP, HPP, LPP, BP: real; BDF: byte); +begin + ValveRes.CreatePress(PP); + BrakeCyl.CreatePress(BP); + BrakeRes.CreatePress(PP/2+HPP/2); +// BrakeStatus:=3*Byte(BP>0.1); +end; + +function TWest.GetPF(PP, dt, Vel: real): real; +var dv, dv1:real; + VVP, BVP, CVP, BCP: real; + temp: real; +begin + + BVP:=BrakeRes.P; + VVP:=ValveRes.P; + CVP:=BrakeCyl.P; + BCP:=BrakeCyl.P; + + if (BrakeStatus and 1)=1 then + if(VVP+0.03BVP+0.1) then + BrakeStatus:=(BrakeStatus and 252) + else if(VVP>BVP) then + BrakeStatus:=(BrakeStatus and 253) + else + else + if(VVP+0.25LBP+0.01) and (DCV) then + dV:=PF(0,CVP,0.1*sizeBC)*dt + else dV:=0; + BrakeCyl.Flow(-dV); + +//hamulec EP + temp:=BVP*Byte(EPS>0); + dV:=PF(temp,LBP,0.0015)*dt*EPS*EPS*Byte(LBP*EPS silowniki + if((BrakeStatus and b_on)=b_on)and((TareBP<0.1)or(BCPLBP)then + begin + DCV:=false; + dV:=PF(BVP,CVP,0.017*sizeBC)*dt; + end + else dV:=0 + else dV:=0; + BrakeRes.Flow(dV); + BrakeCyl.Flow(-dV); + if(DCV)then + dVP:=PF(LBP,BCP,0.01*sizeBC)*dt + else dVP:=0; + BrakeCyl.Flow(-dVP); + if(dVP>0)then dVP:=0; +//przeplyw ZP <-> rozdzielacz + if((BrakeStatus and b_hld)=b_off)then + dV:=PF(BVP,VVP,0.0011*sizeBR)*dt + else dV:=0; + BrakeRes.Flow(dV); + dV1:=dV*0.95; + ValveRes.Flow(-0.05*dV); +//przeplyw PG <-> rozdzielacz + dV:=PF(PP,VVP,0.01*sizeBR)*dt; + ValveRes.Flow(-dV); + + ValveRes.Act; + BrakeCyl.Act; + BrakeRes.Act; + GetPF:=dV-dV1; +end; + +function TWest.GetHPFlow(HP, dt: real): real; +begin + GetHPFlow:=dVP; +end; + +procedure TWest.SetLBP(P: real); +begin + LBP:=P; + if P>BrakeCyl.P then +// begin + DCV:=true; +// end +// else +// LBP:=P; +end; + +procedure TWest.SetEPS(nEPS: real); +var + BCP: real; +begin + BCP:=BrakeCyl.P; + if nEPS>0 then + DCV:=true + else if nEPS=0 then + begin + if(EPS<>0)then + begin + if(LBP>0.4)then + LBP:=BrakeCyl.P; + if(LBP<0.15)then + LBP:=0; + end; + end; + EPS:=nEPS; +end; + +procedure TWest.PLC(mass: real); +begin + LoadC:=1+Byte(Mass0.25)then + if(VVP+0.003+BCP/BVMCVP) then + BrakeStatus:=(BrakeStatus and 252) //luzowanie + else if(VVP+BCP/BVM>CVP) then + BrakeStatus:=(BrakeStatus and 253) //zatrzymanie napelaniania + else + else + if(VVP+0.100.25)and(BCP>0.25)then //zatrzymanie luzowanie + BrakeStatus:=(BrakeStatus or 1); + + if (BrakeStatus and 1)=0 then + SoundFlag:=SoundFlag or sf_CylU; +end; + +function TESt.CVs(bp: real): real; +var VVP, BVP, CVP: real; +begin + BVP:=BrakeRes.P; + CVP:=CntrlRes.P; + VVP:=ValveRes.P; + +//przeplyw ZS <-> PG + if(VVP0.4)then + CVs:=0 + else + if(VVP>CVP+0.4)then + if(BVP>CVP+0.2)then + CVs:=0.23 + else + CVs:=0.05 + else + if(BVP>CVP-0.1)then + CVs:=1 + else + CVs:=0.3; +end; + +function TESt.BVs(BCP: real): real; +var VVP, BVP, CVP: real; +begin + BVP:=BrakeRes.P; + CVP:=CntrlRes.P; + VVP:=ValveRes.P; + +//przeplyw ZP <-> rozdzielacz + if(BVPCVP+0.4)then + BVs:=0.1 + else + BVs:=0.3 + else + BVs:=0; +end; + + + + + +function TESt.GetPF(PP, dt, Vel: real): real; +var dv, dv1, temp:real; + VVP, BVP, BCP, CVP: real; +begin + BVP:=BrakeRes.P; + VVP:=ValveRes.P; + BCP:=BrakeCyl.P; + CVP:=CntrlRes.P-0.0; + + dV:=0; dV1:=0; + +//sprawdzanie stanu + CheckState(BCP, dV1); + CheckReleaser(dt); + + CVP:=CntrlRes.P; + VVP:=ValveRes.P; +//przeplyw ZS <-> PG + temp:=CVs(BCP); + dV:=PF(CVP,VVP,0.0015*temp)*dt; + CntrlRes.Flow(+dV); + ValveRes.Flow(-0.04*dV); + dV1:=dV1-0.96*dV; + + +//luzowanie + if(BrakeStatus and b_hld)=b_off then + dV:=PF(0,BCP,0.0058*sizeBC)*dt + else dV:=0; + BrakeCyl.Flow(-dV); + +//przeplyw ZP <-> silowniki + if(BrakeStatus and b_on)=b_on then + dV:=PF(BVP,BCP,0.016*sizeBC)*dt + else dV:=0; + BrakeRes.Flow(dV); + BrakeCyl.Flow(-dV); + +//przeplyw ZP <-> rozdzielacz + temp:=BVs(BCP); +// if(BrakeStatus and b_hld)=b_off then + if(VVP-0.05>BVP)then + dV:=PF(BVP,VVP,0.02*sizeBR*temp/1.87)*dt + else dV:=0; + BrakeRes.Flow(dV); + dV1:=dV1+dV*0.96; + ValveRes.Flow(-0.04*dV); +//przeplyw PG <-> rozdzielacz + dV:=PF(PP,VVP,0.01)*dt; + ValveRes.Flow(-dV); + + ValveRes.Act; + BrakeCyl.Act; + BrakeRes.Act; + CntrlRes.Act; + GetPF:=dV-dV1; +end; + +procedure TESt.Init(PP, HPP, LPP, BP: real; BDF: byte); +begin + ValveRes.CreatePress(PP); + BrakeCyl.CreatePress(BP); + BrakeRes.CreatePress(PP); + CntrlRes:=TReservoir.Create; + CntrlRes.CreateCap(15); + CntrlRes.CreatePress(HPP); + BrakeStatus:=0; + + BVM:=1/(HPP-LPP)*MaxBP; + + BrakeDelayFlag:=BDF; +end; + + +procedure TESt.EStParams(i_crc: real); +begin + +end; + + +function TESt.GetCRP: real; +begin + GetCRP:=CntrlRes.P; +end; + +//---EP2--- + +procedure TEStEP2.Init(PP, HPP, LPP, BP: real; BDF: byte); +begin + inherited; + ImplsRes.CreateCap(1); + ImplsRes.CreatePress(BP); + + BrakeRes.CreatePress(PP); + + BrakeDelayFlag:=bdelay_P; + BrakeDelays:=bdelay_P; +end; + + +function TEStEP2.GetPF(PP, dt, Vel: real): real; +var dv, dv1, temp:real; + VVP, BVP, BCP, CVP: real; +begin + BVP:=BrakeRes.P; + VVP:=ValveRes.P; + BCP:=ImplsRes.P; + CVP:=CntrlRes.P; //110115 - konsultacje warszawa1 + + dV:=0; dV1:=0; + +//odluzniacz + CheckReleaser(dt); + +//sprawdzanie stanu + if ((BrakeStatus and 1)=1)and(BCP>0.25) then + if(VVP+0.003+BCP/BVMCVP-0.12) then + BrakeStatus:=(BrakeStatus and 252) //luzowanie + else if(VVP+BCP/BVM>CVP-0.12) then + BrakeStatus:=(BrakeStatus and 253) //zatrzymanie napelaniania + else + else + if(VVP+0.100.25) then //zatrzymanie luzowanie + BrakeStatus:=(BrakeStatus or 1); + +//przeplyw ZS <-> PG + if(BVP0)or(BCP>0.25)then + temp:=0 + else + if(VVP>CVP+0.4)then + temp:=0.1 + else + temp:=0.5; + + dV:=PF(CVP,VVP,0.0015*temp/1.8)*dt; + CntrlRes.Flow(+dV); + ValveRes.Flow(-0.04*dV); + dV1:=dV1-0.96*dV; + +//hamulec EP + temp:=BVP*Byte(EPS>0); + dV:=PF(temp,LBP,0.00053+0.00060*Byte(EPS<0))*dt*EPS*EPS*Byte(LBP*EPS KI + if ((BrakeStatus and b_on)=b_on) and (BCP rozdzielacz + dV:=PF(PP,VVP,0.01*sizeBR)*dt; + ValveRes.Flow(-dV); + + GetPF:=dV-dV1; + + temp:=Max0R(BCP,LBP); + + if(ImplsRes.P>LBP+0.01)then + LBP:=0; + +//luzowanie CH + if(BrakeCyl.P>temp+0.005)or(Max0R(ImplsRes.P,8*LBP)<0.05) then + dV:=PF(0,BrakeCyl.P,0.25*sizeBC*(0.01+(BrakeCyl.P-temp)))*dt + else dV:=0; + BrakeCyl.Flow(-dV); +//przeplyw ZP <-> CH + if(BrakeCyl.P0.10)and(Max0R(BCP,LBP)0) and (LBP+0.01 PG + temp:=CVs(BCP); + dV:=PF(CVP,VVP,0.0015*temp)*dt; + CntrlRes.Flow(+dV); + ValveRes.Flow(-0.04*dV); + dV1:=dV1-0.96*dV; + + +//luzowanie + if(BrakeStatus and b_hld)=b_off then + dV:=PF(0,BCP,0.0042*(1.37-Byte(BrakeDelayFlag=bdelay_G))*sizeBC)*dt + else dV:=0; + BrakeCyl.Flow(-dV); +//przeplyw ZP <-> silowniki + if(BrakeStatus and b_on)=b_on then + dV:=PF(BVP,BCP,0.017*(1+Byte((BCP<0.58)and(BrakeDelayFlag=bdelay_G)))*(1.13-Byte((BCP>0.6)and(BrakeDelayFlag=bdelay_G)))*sizeBC)*dt + else dV:=0; + BrakeRes.Flow(dV); + BrakeCyl.Flow(-dV); +//przeplyw ZP <-> rozdzielacz + temp:=BVs(BCP); + if(VVP-0.05>BVP)then + dV:=PF(BVP,VVP,0.02*sizeBR*temp/1.87)*dt + else dV:=0; + BrakeRes.Flow(dV); + dV1:=dV1+dV*0.96; + ValveRes.Flow(-0.04*dV); +//przeplyw PG <-> rozdzielacz + dV:=PF(PP,VVP,0.01)*dt; + ValveRes.Flow(-dV); + + ValveRes.Act; + BrakeCyl.Act; + BrakeRes.Act; + CntrlRes.Act; + GetPF:=dV-dV1; +end; + +//---EST4-RAPID--- + +function TESt4R.GetPF(PP, dt, Vel: real): real; +var dv, dv1, temp:real; + VVP, BVP, BCP, CVP: real; +begin + BVP:=BrakeRes.P; + VVP:=ValveRes.P; + BCP:=ImplsRes.P; + CVP:=CntrlRes.P-0.0; + + dV:=0; dV1:=0; + +//sprawdzanie stanu + CheckState(BCP, dV1); + CheckReleaser(dt); + + CVP:=CntrlRes.P; + VVP:=ValveRes.P; +//przeplyw ZS <-> PG + temp:=CVs(BCP); + dV:=PF(CVP,VVP,0.0015*temp/1.8)*dt; + CntrlRes.Flow(+dV); + ValveRes.Flow(-0.04*dV); + dV1:=dV1-0.96*dV; + + +//luzowanie KI + if(BrakeStatus and b_hld)=b_off then + dV:=PF(0,BCP,0.00037*1.14*15/19)*dt + else dV:=0; + ImplsRes.Flow(-dV); +//przeplyw ZP <-> KI + if(BrakeStatus and b_on)=b_on then + dV:=PF(BVP,BCP,0.0014)*dt + else dV:=0; +// BrakeRes.Flow(dV); + ImplsRes.Flow(-dV); +//przeplyw ZP <-> rozdzielacz + temp:=BVs(BCP); + if(BVP rozdzielacz + dV:=PF(PP,VVP,0.01*sizeBR)*dt; + ValveRes.Flow(-dV); + + GetPF:=dV-dV1; + + + + RapidStatus:=(BrakeDelayFlag=bdelay_R)and(((Vel>55)and(RapidStatus))or(Vel>70)); + + RapidTemp:=RapidTemp+(0.9*Byte(RapidStatus)-RapidTemp)*dt/2; + temp:=1.9-RapidTemp; + if((BrakeStatus and b_asb)=b_asb)then + temp:=1000; +//luzowanie CH + if(BrakeCyl.P*temp>ImplsRes.P+0.005)or(ImplsRes.P<0.25) then + if((BrakeStatus and b_asb)=b_asb)then + dV:=PFVd(BrakeCyl.P,0,0.115*sizeBC*4,ImplsRes.P/temp)*dt + else + dV:=PFVd(BrakeCyl.P,0,0.115*sizeBC,ImplsRes.P/temp)*dt +// dV:=PF(0,BrakeCyl.P,0.115*sizeBC/2)*dt +// dV:=PFVd(BrakeCyl.P,0,0.015*sizeBC/2,ImplsRes.P/temp)*dt + else dV:=0; + BrakeCyl.Flow(-dV); +//przeplyw ZP <-> CH + if(BrakeCyl.P*temp0.3) then +// dV:=PFVa(BVP,BrakeCyl.P,0.020*sizeBC,ImplsRes.P/temp)*dt + dV:=PFVa(BVP,BrakeCyl.P,0.60*sizeBC,ImplsRes.P/temp)*dt + else dV:=0; + BrakeRes.Flow(-dV); + BrakeCyl.Flow(+dV); + + ImplsRes.Act; + ValveRes.Act; + BrakeCyl.Act; + BrakeRes.Act; + CntrlRes.Act; +end; + +procedure TESt4R.Init(PP, HPP, LPP, BP: real; BDF: byte); +begin + inherited; + ImplsRes:=TReservoir.Create; + ImplsRes.CreateCap(1); + ImplsRes.CreatePress(BP); + + BrakeDelayFlag:=bdelay_R; +end; + + +//---EST3/AL2--- + +function TESt3AL2.GetPF(PP, dt, Vel: real): real; +var dv, dv1, temp:real; + VVP, BVP, BCP, CVP: real; +begin + BVP:=BrakeRes.P; + VVP:=ValveRes.P; + BCP:=ImplsRes.P; + CVP:=CntrlRes.P-0.0; + + dV:=0; dV1:=0; + +//sprawdzanie stanu + CheckState(BCP, dV1); + CheckReleaser(dt); + + VVP:=ValveRes.P; +//przeplyw ZS <-> PG + temp:=CVs(BCP); + dV:=PF(CVP,VVP,0.0015*temp)*dt; + CntrlRes.Flow(+dV); + ValveRes.Flow(-0.04*dV); + dV1:=dV1-0.96*dV; + +//luzowanie KI + if(BrakeStatus and b_hld)=b_off then + dV:=PF(0,BCP,0.00017*(1.37-Byte(BrakeDelayFlag=bdelay_G)))*dt + else dV:=0; + ImplsRes.Flow(-dV); +//przeplyw ZP <-> KI + if ((BrakeStatus and b_on)=b_on) and (BCP0.6)and(BrakeDelayFlag=bdelay_G))))*dt + else dV:=0; + BrakeRes.Flow(dV); + ImplsRes.Flow(-dV); +//przeplyw ZP <-> rozdzielacz + temp:=BVs(BCP); + if(VVP-0.05>BVP)then + dV:=PF(BVP,VVP,0.02*sizeBR*temp/1.87)*dt + else dV:=0; + BrakeRes.Flow(dV); + dV1:=dV1+dV*0.96; + ValveRes.Flow(-0.04*dV); +//przeplyw PG <-> rozdzielacz + dV:=PF(PP,VVP,0.01)*dt; + ValveRes.Flow(-dV); + GetPF:=dV-dV1; + +//luzowanie CH + if(BrakeCyl.P>ImplsRes.P*LoadC+0.005)or(ImplsRes.P<0.15) then + dV:=PF(0,BrakeCyl.P,0.015*sizeBC)*dt + else dV:=0; + BrakeCyl.Flow(-dV); + +//przeplyw ZP <-> CH + if(BrakeCyl.P0.15) then + dV:=PF(BVP,BrakeCyl.P,0.020*sizeBC)*dt + else dV:=0; + BrakeRes.Flow(dV); + BrakeCyl.Flow(-dV); + + ImplsRes.Act; + ValveRes.Act; + BrakeCyl.Act; + BrakeRes.Act; + CntrlRes.Act; +end; + +procedure TESt3AL2.PLC(mass: real); +begin + LoadC:=1+Byte(Mass PG + if((CVP-BCP)*BVM>0.5)then + temp:=0 + else + if(VVP>CVP+0.4)then + temp:=0.5 + else + temp:=0.5; + + dV:=PF1(CVP,VVP,0.0015*temp/1.8/2)*dt; + CntrlRes.Flow(+dV); + ValveRes.Flow(-0.04*dV); + dV1:=dV1-0.96*dV; + + +//luzowanie KI {G} +// if VVP>BCP then +// dV:=PF(VVP,BCP,0.00004)*dt +// else if (CVP-BCP)<1.5 then +// dV:=PF(VVP,BCP,0.00020*(1.33-Byte((CVP-BCP)*BVM>0.65)))*dt +// else dV:=0; 0.00025 P + {P} + if VVP>BCP then + dV:=PF(VVP,BCP,0.00043*(1.5-Byte(((CVP-BCP)*BVM>1)and(BrakeDelayFlag=bdelay_G))),0.1)*dt + else if (CVP-BCP)<1.5 then + dV:=PF(VVP,BCP,0.001472*(1.36-Byte(((CVP-BCP)*BVM>1)and(BrakeDelayFlag=bdelay_G))),0.1)*dt + else dV:=0; + + ImplsRes.Flow(-dV); + ValveRes.Flow(+dV); +//przeplyw PG <-> rozdzielacz + dV:=PF(PP,VVP,0.01,0.1)*dt; + ValveRes.Flow(-dV); + + GetPF:=dV-dV1; + +// if Vel>55 then temp:=0.72 else +// temp:=1;{R} +//cisnienie PP + RapidTemp:=RapidTemp+(RM*Byte((Vel>55)and(BrakeDelayFlag=bdelay_R))-RapidTemp)*dt/2; + temp:=1-RapidTemp; + if EDFlag>0.2 then temp:=10000; + +//powtarzacz — podwojny zawor zwrotny + temp:=Max0R(((CVP-BCP)*BVM+ASBP*Byte((BrakeStatus and b_asb)=b_asb))/temp,LBP); +//luzowanie CH + if(BrakeCyl.P>temp+0.005)or(temp<0.28) then +// dV:=PF(0,BrakeCyl.P,0.0015*3*sizeBC)*dt +// dV:=PF(0,BrakeCyl.P,0.005*3*sizeBC)*dt + dV:=PFVd(BrakeCyl.P,0,0.005*7*sizeBC,temp)*dt + else dV:=0; + BrakeCyl.Flow(-dV); +//przeplyw ZP <-> CH + if(BrakeCyl.P0.29) then +// dV:=PF(BVP,BrakeCyl.P,0.002*3*sizeBC*2)*dt + dV:=-PFVa(BVP,BrakeCyl.P,0.002*7*sizeBC*2,temp)*dt + else dV:=0; + BrakeRes.Flow(dV); + BrakeCyl.Flow(-dV); + + ImplsRes.Act; + ValveRes.Act; + BrakeCyl.Act; + BrakeRes.Act; + CntrlRes.Act; +// LBP:=ValveRes.P; +// ValveRes.CreatePress(ImplsRes.P); +end; + +procedure TLSt.Init(PP, HPP, LPP, BP: real; BDF: byte); +begin + inherited; + ValveRes.CreateCap(1); + ImplsRes.CreateCap(8); + ImplsRes.CreatePress(PP); + BrakeRes.CreatePress(8); + ValveRes.CreatePress(PP); + + EDFlag:=0; + + BrakeDelayFlag:=BDF; +end; + +procedure TLSt.SetLBP(P: real); +begin + LBP:=P; +end; + +function TLSt.GetEDBCP: real; +var CVP, BCP: real; +begin + CVP:=CntrlRes.P; + BCP:=ImplsRes.P; + GetEDBCP:=(CVP-BCP)*BVM; +end; + +procedure TLSt.SetED(EDstate: real); +begin + EDFlag:=EDstate; +end; + +procedure TLSt.SetRM(RMR: real); +begin + RM:=1-RMR; +end; + +function TLSt.GetHPFlow(HP, dt: real): real; +var dV: real; +begin + dV:=Min0R(PF(HP,BrakeRes.P,0.01*dt),0); + BrakeRes.Flow(-dV); + GetHPFlow:=dV; +end; + +//---EStED--- + +function TEStED.GetPF(PP, dt, Vel: real): real; +var dv, dv1, temp:real; + VVP, BVP, BCP, CVP, MPP, nastG: real; + i: byte; +begin + BVP:=BrakeRes.P; + VVP:=ValveRes.P; + BCP:=ImplsRes.P; + CVP:=CntrlRes.P-0.0; + MPP:=Miedzypoj.P; + dV1:=0; + + nastG:=(BrakeDelayFlag and bdelay_G); + +//sprawdzanie stanu + if(BCP<0.25)and(VVP+0.08>CVP)then Przys_blok:=false; + +//sprawdzanie stanu + if(VVP+0.002+BCP/BVMCVP-0.05) then + BrakeStatus:=(BrakeStatus and 252) //luzowanie + else if(VVP+BCP/BVM>CVP-0.05) then + BrakeStatus:=(BrakeStatus and 253) //zatrzymanie napelaniania + else if(VVP+(BCP-0.1)/BVM0.25)then //zatrzymanie luzowania + BrakeStatus:=(BrakeStatus or 1); + + if(VVP+0.100.5)then + Zamykajacy:=true + else if(VVP-0.6CVP-0.08)then + temp:=Nozzles[5] + else + temp:=Nozzles[6]; + dV:=dV+PF(MPP,CVP,temp); + + if(MPP-0.05>BVP)then + dV:=dV+PF(MPP-0.05,BVP,Nozzles[10]*nastG+(1-nastG)*Nozzles[9]); + if MPP>VVP then dV:=dV+PF(MPP,VVP,0.02); + Miedzypoj.Flow(dV*dt*0.15); + + + RapidTemp:=RapidTemp+(RM*Byte((Vel>55)and(BrakeDelayFlag=bdelay_R))-RapidTemp)*dt/2; + temp:=Max0R(1-RapidTemp,0.001); +// if EDFlag then temp:=1000; +// temp:=temp/(1-); + +//powtarzacz — podwojny zawor zwrotny + temp:=Max0R(LoadC*BCP/temp*Min0R(Max0R(1-EDFlag,0),1),LBP); + + if(BrakeCyl.P>temp)then + dV:=-PFVd(BrakeCyl.P,0,0.02*sizeBC,temp)*dt + else + if(BrakeCyl.P0 then + BrakeRes.Flow(-dV); + + +//przeplyw ZS <-> PG + if(MPPCVP-0.08)then + temp:=Nozzles[5] + else + temp:=Nozzles[6]; + dV:=PF(CVP,MPP,temp)*dt; + CntrlRes.Flow(+dV); + ValveRes.Flow(-0.02*dV); + dV1:=dV1+0.98*dV; + +//przeplyw ZP <-> MPJ + if(MPP-0.05>BVP)then + dV:=PF(BVP,MPP-0.05,Nozzles[10]*nastG+(1-nastG)*Nozzles[9])*dt + else dV:=0; + BrakeRes.Flow(dV); + dV1:=dV1+dV*0.98; + ValveRes.Flow(-0.02*dV); +//przeplyw PG <-> rozdzielacz + dV:=PF(PP,VVP,0.005)*dt; //0.01 + ValveRes.Flow(-dV); + + + ValveRes.Act; + BrakeCyl.Act; + BrakeRes.Act; + CntrlRes.Act; + Miedzypoj.Act; + ImplsRes.Act; + GetPF:=dV-dV1; +end; + +procedure TEStED.Init(PP, HPP, LPP, BP: real; BDF: byte); +var i:integer; +begin + inherited; + + ValveRes.CreatePress(1*PP); + BrakeCyl.CreatePress(1*BP); + +// CntrlRes:=TReservoir.Create; +// CntrlRes.CreateCap(15); +// CntrlRes.CreatePress(1*HPP); + + BrakeStatus:=Byte(BP>1)*1; + Miedzypoj:=TReservoir.Create; + Miedzypoj.CreateCap(5); + Miedzypoj.CreatePress(PP); + + ImplsRes.CreateCap(1); + ImplsRes.CreatePress(BP); + + BVM:=1/(HPP-0.05-LPP)*MaxBP; + + BrakeDelayFlag:=BDF; + Zamykajacy:=false; + EDFlag:=0; + + Nozzles[0]:=1.250/1.7; + Nozzles[1]:=0.907; + Nozzles[2]:=0.510/1.7; + Nozzles[3]:=0.524/1.17; + Nozzles[4]:=7.4; + Nozzles[7]:=5.3; + Nozzles[8]:=2.5; + Nozzles[9]:=7.28; + Nozzles[10]:=2.96; + Nozzles[5]:=1.1; + Nozzles[6]:=0.9; + + for i:=0 to 10 do + begin + Nozzles[i]:=Nozzles[i]*Nozzles[i]*3.14159/4000; + end; + +end; + +function TEStED.GetEDBCP: real; +begin + GetEDBCP:=ImplsRes.P*LoadC; +end; + +procedure TEStED.PLC(mass: real); +begin + LoadC:=1+Byte(MassCVP) then + BrakeStatus:=(BrakeStatus and 252) //luzowanie + else if(VVP+BCP/BVM>CVP) then + BrakeStatus:=(BrakeStatus and 253) //zatrzymanie napelaniania + else + else + if(VVP+0.100.25) then //zatrzymanie luzowanie + BrakeStatus:=(BrakeStatus or 1); +end; + +function TCV1.CVs(bp: real): real; +begin +//przeplyw ZS <-> PG + if(bp>0.05)then + CVs:=0 + else + CVs:=0.23 +end; + +function TCV1.BVs(BCP: real): real; +var VVP, BVP, CVP: real; +begin + BVP:=BrakeRes.P; + CVP:=CntrlRes.P; + VVP:=ValveRes.P; + +//przeplyw ZP <-> rozdzielacz + if(BVP0.05)then + BVs:=0 + else + BVs:=0.2*(1.5-Byte(BVP>VVP)); +end; + +function TCV1.GetPF(PP, dt, Vel: real): real; +var dv, dv1, temp:real; + VVP, BVP, BCP, CVP: real; +begin + BVP:=BrakeRes.P; + VVP:=Min0R(ValveRes.P,BVP+0.05); + BCP:=BrakeCyl.P; + CVP:=CntrlRes.P-0.0; + + dV:=0; dV1:=0; + +//sprawdzanie stanu + CheckState(BCP, dV1); + + VVP:=ValveRes.P; +//przeplyw ZS <-> PG + temp:=CVs(BCP); + dV:=PF(CVP,VVP,0.0015*temp)*dt; + CntrlRes.Flow(+dV); + ValveRes.Flow(-0.04*dV); + dV1:=dV1-0.96*dV; + + +//luzowanie + if(BrakeStatus and b_hld)=b_off then + dV:=PF(0,BCP,0.0042*(1.37-Byte(BrakeDelayFlag=bdelay_G))*sizeBC)*dt + else dV:=0; + BrakeCyl.Flow(-dV); + +//przeplyw ZP <-> silowniki + if(BrakeStatus and b_on)=b_on then + dV:=PF(BVP,BCP,0.017*(1+Byte((BCP<0.58)and(BrakeDelayFlag=bdelay_G)))*(1.13-Byte((BCP>0.6)and(BrakeDelayFlag=bdelay_G)))*sizeBC)*dt + else dV:=0; + BrakeRes.Flow(dV); + BrakeCyl.Flow(-dV); + +//przeplyw ZP <-> rozdzielacz + temp:=BVs(BCP); + if(VVP+0.05>BVP)then + dV:=PF(BVP,VVP,0.02*sizeBR*temp/1.87)*dt + else dV:=0; + BrakeRes.Flow(dV); + dV1:=dV1+dV*0.96; + ValveRes.Flow(-0.04*dV); +//przeplyw PG <-> rozdzielacz + dV:=PF(PP,VVP,0.01)*dt; + ValveRes.Flow(-dV); + + ValveRes.Act; + BrakeCyl.Act; + BrakeRes.Act; + CntrlRes.Act; + GetPF:=dV-dV1; +end; + +procedure TCV1.Init(PP, HPP, LPP, BP: real; BDF: byte); +begin + ValveRes.CreatePress(PP); + BrakeCyl.CreatePress(BP); + BrakeRes.CreatePress(PP); + CntrlRes:=TReservoir.Create; + CntrlRes.CreateCap(15); + CntrlRes.CreatePress(HPP); + BrakeStatus:=0; + + BVM:=1/(HPP-LPP)*MaxBP; + + BrakeDelayFlag:=BDF; +end; + +function TCV1.GetCRP: real; +begin + GetCRP:=CntrlRes.P; +end; + + +//---CV1-L-TR--- + +procedure TCV1L_TR.SetLBP(P: real); +begin + LBP:=P; +end; + +function TCV1L_TR.GetHPFlow(HP, dt: real): real; +var dV: real; +begin + dV:=PF(HP,BrakeRes.P,0.01)*dt; + dV:=Min0R(0,dV); + BrakeRes.Flow(-dV); + GetHPFlow:=dV; +end; + +procedure TCV1L_TR.Init(PP, HPP, LPP, BP: real; BDF: byte); +begin + inherited; + ImplsRes:=TReservoir.Create; + ImplsRes.CreateCap(2.5); + ImplsRes.CreatePress(BP); +end; + +function TCV1L_TR.GetPF(PP, dt, Vel: real): real; +var dv, dv1, temp:real; + VVP, BVP, BCP, CVP: real; +begin + BVP:=BrakeRes.P; + VVP:=Min0R(ValveRes.P,BVP+0.05); + BCP:=ImplsRes.P; + CVP:=CntrlRes.P-0.0; + + dV:=0; dV1:=0; + +//sprawdzanie stanu + CheckState(BCP, dV1); + + VVP:=ValveRes.P; +//przeplyw ZS <-> PG + temp:=CVs(BCP); + dV:=PF(CVP,VVP,0.0015*temp)*dt; + CntrlRes.Flow(+dV); + ValveRes.Flow(-0.04*dV); + dV1:=dV1-0.96*dV; + + +//luzowanie KI + if(BrakeStatus and b_hld)=b_off then + dV:=PF(0,BCP,0.000425*(1.37-Byte(BrakeDelayFlag=bdelay_G)))*dt + else dV:=0; + ImplsRes.Flow(-dV); +//przeplyw ZP <-> KI + if ((BrakeStatus and b_on)=b_on) and (BCP0.6)and(BrakeDelayFlag=bdelay_G))))*dt + else dV:=0; + BrakeRes.Flow(dV); + ImplsRes.Flow(-dV); + +//przeplyw ZP <-> rozdzielacz + temp:=BVs(BCP); + if(VVP+0.05>BVP)then + dV:=PF(BVP,VVP,0.02*sizeBR*temp/1.87)*dt + else dV:=0; + BrakeRes.Flow(dV); + dV1:=dV1+dV*0.96; + ValveRes.Flow(-0.04*dV); +//przeplyw PG <-> rozdzielacz + dV:=PF(PP,VVP,0.01)*dt; + GetPF:=dV-dV1; + + temp:=Max0R(BCP,LBP); + +//luzowanie CH + if(BrakeCyl.P>temp+0.005)or(Max0R(ImplsRes.P,8*LBP)<0.25) then + dV:=PF(0,BrakeCyl.P,0.015*sizeBC)*dt + else dV:=0; + BrakeCyl.Flow(-dV); + +//przeplyw ZP <-> CH + if(BrakeCyl.P0.3)and(Max0R(BCP,LBP)CVP) then + BrakeStatus:=(BrakeStatus and 252) //luzowanie + else if(VVP+BCP/BVM>CVP) then + BrakeStatus:=(BrakeStatus and 253) //zatrzymanie napelaniania + else + else + if(VVP+0.100.25) then //zatrzymanie luzowanie + BrakeStatus:=(BrakeStatus or 1); +end; + +function TKE.CVs(bp: real): real; +var VVP, BVP, CVP: real; +begin + BVP:=BrakeRes.P; + CVP:=CntrlRes.P; + VVP:=ValveRes.P; + +//przeplyw ZS <-> PG + if(bp>0.2)then + CVs:=0 + else + if(VVP>CVP+0.4)then + CVs:=0.05 + else + CVs:=0.23 +end; + +function TKE.BVs(BCP: real): real; +var VVP, BVP, CVP: real; +begin + BVP:=BrakeRes.P; + CVP:=CntrlRes.P; + VVP:=ValveRes.P; + +//przeplyw ZP <-> rozdzielacz + if (BVP>VVP) then + BVs:=0 + else + if(BVP PG + temp:=CVs(IMP); + dV:=PF(CVP,VVP,0.0015*temp)*dt; + CntrlRes.Flow(+dV); + ValveRes.Flow(-0.04*dV); + dV1:=dV1-0.96*dV; + +//luzowanie + if(BrakeStatus and b_hld)=b_off then + begin + if ((BrakeDelayFlag and bdelay_G)=0) then + temp:=0.283+0.139 + else + temp:=0.139; + dV:=PF(0,IMP,0.001*temp)*dt + end + else dV:=0; + ImplsRes.Flow(-dV); + +//przeplyw ZP <-> silowniki + if((BrakeStatus and b_on)=b_on)and(IMP50)and(RapidStatus))or(Vel>70)) + else //jesli tarczowki, to zostan + RapidStatus:=((BrakeDelayFlag and bdelay_R)=bdelay_R); + +// temp:=1.9-0.9*Byte(RapidStatus); + + if(RM*RM>0.1)then //jesli jest rapid + if(RM>0)then //jesli dodatni (naddatek); + temp:=1-RM*Byte(RapidStatus) + else + temp:=1-RM*(1-Byte(RapidStatus)) + else + temp:=1; + temp:=temp/LoadC; +//luzowanie CH +// temp:=Max0R(BCP,LBP); + IMP:=Max0R(IMP/temp,Max0R(LBP,ASBP*Byte((BrakeStatus and b_asb)=b_asb))); + +//luzowanie CH + if(BCP>IMP+0.005)or(Max0R(ImplsRes.P,8*LBP)<0.25) then + dV:=PFVd(BCP,0,0.05,IMP)*dt + else dV:=0; + BrakeCyl.Flow(-dV); + if(BCP0.3) then + dV:=PFVa(BVP,BCP,0.05,IMP)*dt + else dV:=0; + BrakeRes.Flow(-dV); + BrakeCyl.Flow(+dV); + +//przeplyw ZP <-> rozdzielacz + temp:=BVs(IMP); +// if(BrakeStatus and b_hld)=b_off then + if(IMP<0.25)or(VVP+0.05>BVP)then + dV:=PF(BVP,VVP,0.02*sizeBR*temp/1.87)*dt + else dV:=0; + BrakeRes.Flow(dV); + dV1:=dV1+dV*0.96; + ValveRes.Flow(-0.04*dV); +//przeplyw PG <-> rozdzielacz + dV:=PF(PP,VVP,0.01)*dt; + ValveRes.Flow(-dV); + + ValveRes.Act; + BrakeCyl.Act; + BrakeRes.Act; + CntrlRes.Act; + ImplsRes.Act; + GetPF:=dV-dV1; +end; + +procedure TKE.Init(PP, HPP, LPP, BP: real; BDF: byte); +begin + ValveRes.CreatePress(PP); + BrakeCyl.CreatePress(BP); + BrakeRes.CreatePress(PP); + + CntrlRes:=TReservoir.Create; //komora sterujaca + CntrlRes.CreateCap(5); + CntrlRes.CreatePress(HPP); + + ImplsRes:=TReservoir.Create; //komora zastepcza silownika + ImplsRes.CreateCap(1); + ImplsRes.CreatePress(BP); + + BrakeStatus:=0; + + BVM:=1/(HPP-LPP)*MaxBP; + + BrakeDelayFlag:=BDF; +end; + +function TKE.GetCRP: real; +begin + GetCRP:=CntrlRes.P; +end; + +function TKE.GetHPFlow(HP, dt: real): real; +var dV: real; +begin + dV:=PF(HP,BrakeRes.P,0.01)*dt; + dV:=Min0R(0,dV); + BrakeRes.Flow(-dV); + GetHPFlow:=dV; +end; + +procedure TKE.PLC(mass: real); +begin + LoadC:=1+Byte(Massrp+0.05)then + dpMainValve:=PF(Min0R(cp+0.1,HP),pp,1.1*(ActFlowSpeed)/(LBDelay))*dt; + if(cp0.1)then + begin + cp:=5+(tp-0.1)*0.08; + tp:=tp-dt/12/2; + end; + if(cp>rp+0.1)and(cp<=5)then + dpMainValve:=PF(Min0R(cp+0.25,HP),pp,2*(ActFlowSpeed)/(LBDelay))*dt + else + if cp>5 then + dpMainValve:=PF(Min0R(cp,HP),pp,2*(ActFlowSpeed)/(LBDelay))*dt + else + dpMainValve:=PF(dpPipe,pp,(ActFlowSpeed)/(LBDelay))*dt + end; + + if(Round(i_bcp)=i_bcpNo)then + begin + dpMainValve:=PF(0,pp,(ActFlowSpeed)/(LBDelay))*dt; + end; + + GetPF:=dpMainValve; +end; + +procedure TFV4a.Init(press: real); +begin + CP:= press; + TP:= 0; + RP:= press; + Time:= false; + TimeEP:=false; +end; + + +//---FV4a/M--- nowonapisany kran bez poprawki IC + +function TFV4aM.GetPF(i_bcp:real; pp, hp, dt, ep: real): real; +function LPP_RP(pos: real): real; //cisnienie z zaokraglonej pozycji; +var i_pos: integer; +begin + i_pos:=Round(pos-0.5); //zaokraglone w dol + LPP_RP:=BPT[i_pos][1]+(BPT[i_pos+1][1]-BPT[i_pos][1])*(pos-i_pos); //interpolacja liniowa +end; +function EQ(pos: real; i_pos: real): boolean; +begin + EQ:=(pos<=i_pos+0.5)and(pos>i_pos-0.5); +end; +const + LBDelay = 100; + xpM = 0.3; //mnoznik membrany komory pod +var + LimPP, dpPipe, dpMainValve, ActFlowSpeed, dp: real; + pom: real; + i: byte; +begin + ep:=pp/2*1.5+ep/2*0.5; //SPKS!! +// ep:=pp; +// ep:=cp/3+pp/3+ep/3; +// ep:=cp; + + for i:=0 to 4 do + Sounds[i]:=0; + dp:=0; + + i_bcp:=Max0R(Min0R(i_bcp,5.999),-1.999); //na wszelki wypadek, zeby nie wyszlo poza zakres + + if(tp>0)then + begin //jesli czasowy jest niepusty +// dp:=0.07; //od cisnienia 5 do 0 w 60 sekund ((5-0)*dt/75) + dp:=0.045; //2.5 w 55 sekund (5,35->5,15 w PG) + tp:=tp-dp*dt; + Sounds[s_fv4a_t]:=dp; + end + else //.08 + begin + tp:=0; + end; + + if(xp>0)then //jesli komora pod niepusta jest niepusty + begin + dp:=2.5; + Sounds[s_fv4a_x]:=dp*xp; + xp:=xp-dt*dp*2; //od cisnienia 5 do 0 w 10 sekund ((5-0)*dt/10) + end + else //.75 + xp:=0; //jak pusty, to pusty + + Limpp:=Min0R(LPP_RP(i_bcp)+tp*0.08+RedAdj,HP); //pozycja + czasowy lub zasilanie + ActFlowSpeed:=BPT[Round(i_bcp)][0]; + + if(EQ(i_bcp,-1))then pom:=Min0R(HP,5.4+RedAdj) else pom:=Min0R(cp,HP); + + if(pom>rp+0.25)then Fala:=true; + if(Fala)then + if(pom>rp+0.3)then +// if(ep>rp+0.11)then + xp:=xp-20*PR(pom,xp)*dt +// else +// xp:=xp-16*(ep-(ep+0.01))/(0.1)*PR(ep,xp)*dt + else Fala:=false; + + if(Limpp>cp)then //podwyzszanie szybkie + cp:=cp+5*60*Min0R(abs(Limpp-cp),0.05)*PR(cp,Limpp)*dt //zbiornik sterujacy + else + cp:=cp+13*Min0R(abs(Limpp-cp),0.05)*PR(cp,Limpp)*dt; //zbiornik sterujacy + + Limpp:=pom; //cp + dpPipe:=Min0R(HP,Limpp+xp*xpM); + + if dpPipe>pp then + dpMainValve:=-PFVa(HP,pp,ActFlowSpeed/(LBDelay),dpPipe,0.4) + else + dpMainValve:=PFVd(pp,0,ActFlowSpeed/(LBDelay),dpPipe,0.4); + + if EQ(i_bcp,-1) then + begin + if(tp<5)then tp:=tp+dt; //5/10 + if(tp<1)then tp:=tp-0.5*dt; //5/10 +// dpMainValve:=dpMainValve*2;//+1*PF(dpPipe,pp,(ActFlowSpeed)/(LBDelay))//coby nie przeszkadzal przy ladowaniu z zaworu obok + end; + + if EQ(i_bcp,0) then + begin + if(tp>2)then + dpMainValve:=dpMainValve*1.5;//+0.5*PF(dpPipe,pp,(ActFlowSpeed)/(LBDelay))//coby nie przeszkadzal przy ladowaniu z zaworu obok + end; + + + + + + ep:=dpPipe; + if(EQ(i_bcp,0)or(rp>ep))then + rp:=rp+PF(rp,ep,0.0007)*dt //powolne wzrastanie, ale szybsze na jezdzie + else + rp:=rp+PF(rp,ep,0.000093/2*2)*dt; //powolne wzrastanie i to bardzo //jednak trzeba wydluzyc, bo obecnie zle dziala + if (rp0 then + Sounds[s_fv4a_b]:=dpMainValve + else + Sounds[s_fv4a_u]:=-dpMainValve; + end; + + GetPF:=dpMainValve*dt; +end; + +procedure TFV4aM.Init(press: real); +begin + CP:= press; + TP:= 0; + RP:= press; + XP:= 0; + Time:=false; + TimeEP:=false; +end; + +procedure TFV4aM.SetReductor(nAdj: real); +begin + RedAdj:= nAdj; +end; + +function TFV4aM.GetSound(i: byte): real; +begin + if i>4 then + GetSound:=0 + else + GetSound:=Sounds[i]; +end; + +function TFV4aM.GetPos(i: byte): real; +const + table: array[0..10] of real = (-2,6,-1,0,-2,1,4,6,0,0,0); +begin + GetPos:=table[i]; +end; + +//---FV4a/M--- nowonapisany kran bez poprawki IC + +function TMHZ_EN57.GetPF(i_bcp:real; pp, hp, dt, ep: real): real; +function LPP_RP(pos: real): real; //cisnienie z zaokraglonej pozycji; +begin + if pos>8.5 then + LPP_RP:=5.0-0.15*pos-0.35 + else if pos>0.5 then + LPP_RP:=5.0-0.15*pos-0.1 + else + LPP_RP:=5.0 +end; +function EQ(pos: real; i_pos: real): boolean; +begin + EQ:=(pos<=i_pos+0.5)and(pos>i_pos-0.5); +end; +const + LBDelay = 100; +var + LimPP, dpPipe, dpMainValve, ActFlowSpeed, dp: real; + pom: real; + i: byte; +begin + + for i:=0 to 4 do + Sounds[i]:=0; + dp:=0; + + i_bcp:=Max0R(Min0R(i_bcp,9.999),-0.999); //na wszelki wypadek, zeby nie wyszlo poza zakres + + if(tp>0)then + begin + dp:=0.045; + if EQ(i_bcp,0) then + tp:=tp-dp*dt; + Sounds[s_fv4a_t]:=dp; + end + else + begin + tp:=0; + end; + + Limpp:=Min0R(LPP_RP(i_bcp)+tp*0.08+RedAdj,HP); //pozycja + czasowy lub zasilanie + ActFlowSpeed:=4; + + if(EQ(i_bcp,-1))then pom:=Min0R(HP,5.4+RedAdj) else pom:=Min0R(cp,HP); + + if(Limpp>cp)then //podwyzszanie szybkie + cp:=cp+60*Min0R(abs(Limpp-cp),0.05)*PR(cp,Limpp)*dt //zbiornik sterujacy + else + cp:=cp+13*Min0R(abs(Limpp-cp),0.05)*PR(cp,Limpp)*dt; //zbiornik sterujacy + + Limpp:=pom; //cp + if EQ(i_bcp,-1) then + dpPipe:=HP + else + dpPipe:=Min0R(HP,Limpp); + + if dpPipe>pp then + dpMainValve:=-PFVa(HP,pp,ActFlowSpeed/(LBDelay),dpPipe,0.4) + else + dpMainValve:=PFVd(pp,0,ActFlowSpeed/(LBDelay),dpPipe,0.4); + + if EQ(i_bcp,-1) then + begin + if(tp<5)then tp:=tp+dt; //5/10 + if(tp<1)then tp:=tp-0.5*dt; //5/10 + end; + + if(EQ(i_bcp,10))or(EQ(i_bcp,-2))then + begin + dp:=PF(0,pp,2*(ActFlowSpeed)/(LBDelay)); + dpMainValve:=dp; + Sounds[s_fv4a_e]:=dp; + Sounds[s_fv4a_u]:=0; + Sounds[s_fv4a_b]:=0; + Sounds[s_fv4a_x]:=0; + end + else + begin + if dpMainValve>0 then + Sounds[s_fv4a_b]:=dpMainValve + else + Sounds[s_fv4a_u]:=-dpMainValve; + end; + + if (i_bcp<1.5) then + RP:=Max0R(0,0.125*i_bcp) + else + RP:=Min0R(1,0.125*i_bcp-0.125); + + GetPF:=dpMainValve*dt; +end; + +procedure TMHZ_EN57.Init(press: real); +begin + CP:= press; + TP:= 0; + RP:= 0; + Time:=false; + TimeEP:=false; +end; + +procedure TMHZ_EN57.SetReductor(nAdj: real); +begin + RedAdj:= nAdj; +end; + +function TMHZ_EN57.GetSound(i: byte): real; +begin + if i>4 then + GetSound:=0 + else + GetSound:=Sounds[i]; +end; + +function TMHZ_EN57.GetPos(i: byte): real; +const + table: array[0..10] of real = (-2,10,-1,0,0,2,9,10,0,0,0); +begin + GetPos:=table[i]; +end; + +function TMHZ_EN57.GetCP: real; +begin + GetCP:=RP; +end; + +function TMHZ_EN57.GetEP(pos: real): real; +begin + if pos<9.5 then + GetEP:=Min0R(Max0R(0,0.125*pos),1) + else + GetEP:=0; +end; + +//---M394--- Matrosow + +function TM394.GetPF(i_bcp:real; pp, hp, dt, ep: real): real; +const + LBDelay = 65; +var + LimPP, dpPipe, dpMainValve, ActFlowSpeed: real; + bcp: integer; +begin + bcp:=Round(i_bcp); + if bcp<-1 then bcp:=1; + + Limpp:=Min0R(BPT_394[bcp][1],HP); + ActFlowSpeed:=BPT_394[bcp][0]; + if (bcp=1)or(bcp=i_bcpNo) then + Limpp:=pp; + if (bcp=0) then + Limpp:=Limpp+RedAdj; + if (bcp<>2) then + if cp3)+Byte(bcp>4))*Min0R(abs(Limpp-cp),0.05)*PR(cp,Limpp)*dt; //zbiornik sterujacy + + Limpp:=cp; + dpPipe:=Min0R(HP,Limpp); + +// if(dpPipe>pp)then //napelnianie +// dpMainValve:=PF(dpPipe,pp,ActFlowSpeed/(LBDelay))*dt +// else //spuszczanie + dpMainValve:=PF(dpPipe,pp,ActFlowSpeed/(LBDelay))*dt; + + if bcp=-1 then +// begin + dpMainValve:=PF(HP,pp,(ActFlowSpeed)/(LBDelay))*dt; +// end; + + if bcp=i_bcpNo then +// begin + dpMainValve:=PF(0,pp,(ActFlowSpeed)/(LBDelay))*dt; +// end; + + GetPF:=dpMainValve; +end; + +procedure TM394.Init(press: real); +begin + CP:= press; + RedAdj:= 0; + Time:=true; + TimeEP:=false; +end; + +procedure TM394.SetReductor(nAdj: real); +begin + RedAdj:= nAdj; +end; + +function TM394.GetCP: real; +begin + GetCP:= CP; +end; + +function TM394.GetPos(i: byte): real; +const + table: array[0..10] of real = (-1,5,-1,0,1,2,4,5,0,0,0); +begin + GetPos:=table[i]; +end; + +//---H14K1-- Knorr + +function TH14K1.GetPF(i_bcp:real; pp, hp, dt, ep: real): real; +const + LBDelay = 100; //szybkosc + zasilanie sterujacego + BPT_K: array[-1..4] of array [0..1] of real= ((10, 0), (4, 1), (0, 1), (4, 0), (4, -1), (15, -1)); + NomPress = 5.0; +var + LimPP, dpPipe, dpMainValve, ActFlowSpeed: real; + bcp: integer; +begin + bcp:=Round(i_bcp); + if i_bcp<-1 then bcp:=1; + Limpp:=BPT_K[bcp][1]; + if Limpp<0 then + Limpp:=0.5*pp + else if Limpp>0 then + Limpp:=pp + else + Limpp:=cp; + ActFlowSpeed:=BPT_K[bcp][0]; + + cp:=cp+6*Min0R(abs(Limpp-cp),0.05)*PR(cp,Limpp)*dt; //zbiornik sterujacy + + dpMainValve:=0; + + if bcp=-1 then + dpMainValve:=PF(HP,pp,(ActFlowSpeed)/(LBDelay))*dt; + if(bcp=0)then + dpMainValve:=-PFVa(HP,pp,(ActFlowSpeed)/(LBDelay),NomPress+RedAdj)*dt; + if (bcp>1)and(pp>cp) then + dpMainValve:=PFVd(pp,0,(ActFlowSpeed)/(LBDelay),cp)*dt; + if bcp=i_bcpNo then + dpMainValve:=PF(0,pp,(ActFlowSpeed)/(LBDelay))*dt; + + GetPF:=dpMainValve; +end; + +procedure TH14K1.Init(press: real); +begin + CP:= press; + RedAdj:= 0; + Time:=true; + TimeEP:=true; +end; + +procedure TH14K1.SetReductor(nAdj: real); +begin + RedAdj:= nAdj; +end; + +function TH14K1.GetCP: real; +begin + GetCP:= CP; +end; + +function TH14K1.GetPos(i: byte): real; +const + table: array[0..10] of real = (-1,4,-1,0,1,2,3,4,0,0,0); +begin + GetPos:=table[i]; +end; + +//---St113-- Knorr EP + +function TSt113.GetPF(i_bcp:real; pp, hp, dt, ep: real): real; +const + LBDelay = 100; //szybkosc + zasilanie sterujacego + BPT_K: array[-1..4] of array [0..1] of real= ((10, 0), (4, 1), (0, 1), (4, 0), (4, -1), (15, -1)); + BEP_K: array[-1..5] of real= (0, -1, 1, 0, 0, 0, 0); + NomPress = 5.0; +var + LimPP, dpPipe, dpMainValve, ActFlowSpeed: real; + bcp: integer; +begin + bcp:=Round(i_bcp); + + EPS:=BEP_K[bcp]; + + if bcp>0 then bcp:=bcp-1; + + if bcp<-1 then bcp:=1; + Limpp:=BPT_K[bcp][1]; + if Limpp<0 then + Limpp:=0.5*pp + else if Limpp>0 then + Limpp:=pp + else + Limpp:=cp; + ActFlowSpeed:=BPT_K[bcp][0]; + + cp:=cp+6*Min0R(abs(Limpp-cp),0.05)*PR(cp,Limpp)*dt; //zbiornik sterujacy + + dpMainValve:=0; + + if bcp=-1 then + dpMainValve:=PF(HP,pp,(ActFlowSpeed)/(LBDelay))*dt; + if(bcp=0)then + dpMainValve:=-PFVa(HP,pp,(ActFlowSpeed)/(LBDelay),NomPress+RedAdj)*dt; + if (bcp>1)and(pp>cp) then + dpMainValve:=PFVd(pp,0,(ActFlowSpeed)/(LBDelay),cp)*dt; + if bcp=i_bcpNo then + dpMainValve:=PF(0,pp,(ActFlowSpeed)/(LBDelay))*dt; + + GetPF:=dpMainValve; +end; + +function TSt113.GetCP: real; +begin + GetCP:=EPS; +end; + +function TSt113.GetPos(i: byte): real; +const + table: array[0..10] of real = (-1,5,-1,0,2,3,4,5,0,0,1); +begin + GetPos:=table[i]; +end; + +procedure TSt113.Init(press: real); +begin + Time:=true; + TimeEP:=true; +end; + +//--- test --- + +function Ttest.GetPF(i_bcp:real; pp, hp, dt, ep: real): real; +const + LBDelay = 100; +var + LimPP, dpPipe, dpMainValve, ActFlowSpeed: real; +begin + + Limpp:=BPT[Round(i_bcp)][1]; + ActFlowSpeed:=BPT[Round(i_bcp)][0]; + + if(i_bcp=i_bcpNo)then limpp:=0.0; + + if(i_bcp=-1)then limpp:=7; + + cp:=cp+20*Min0R(abs(Limpp-cp),0.05)*PR(cp,Limpp)*dt/1; + + Limpp:=cp; + dpPipe:=Min0R(HP,Limpp); + + dpMainValve:=PF(dpPipe,pp,ActFlowSpeed/(LBDelay))*dt; + + if(Round(i_bcp)=i_bcpNo)then + begin + dpMainValve:=PF(0,pp,(ActFlowSpeed)/(LBDelay))*dt; + end; + + GetPF:=dpMainValve; +end; + +procedure Ttest.Init(press: real); +begin + CP:= press; +end; + + +//---FD1--- + +function TFD1.GetPF(i_bcp:real; pp, hp, dt, ep: real): real; +var dp, temp: real; +begin +// MaxBP:=4; +// temp:=Min0R(i_bcp*MaxBP,Min0R(5.0,HP)); + temp:=Min0R(i_bcp*MaxBP,HP); //0011 + dp:=10*Min0R(abs(temp-BP),0.1)*PF(temp,BP,0.0006*(2+Byte(temp>BP)))*dt*Speed; + BP:=BP-dp; + GetPF:=-dp; +end; + +procedure TFD1.Init(press: real); +begin + BP:=0; + MaxBP:=press; + Time:=false; + TimeEP:=false; + Speed:=1; +end; + +function TFD1.GetCP: real; +begin + GetCP:=BP; +end; + +procedure TFD1.SetSpeed(nSpeed: real); +begin + Speed:=nSpeed; +end; + + +//---KNORR--- + +function TH1405.GetPF(i_bcp:real; pp, hp, dt, ep: real): real; +var dp, temp, A: real; +begin + pp:=Min0R(pp,MaxBP); + if i_bcp>0.5 then + begin + temp:=Min0R(MaxBP,HP); + A:=2*(i_bcp-0.5)*0.0011; + BP:=Max0R(BP,pp); + end + else + begin + temp:=0; + A:=0.2*(0.5-i_bcp)*0.0033; + BP:=Min0R(BP,pp); + end; + dp:=PF(temp,BP,A)*dt; + BP:=BP-dp; + GetPF:=-dp; +end; + +procedure TH1405.Init(press: real); +begin + BP:=0; + MaxBP:=press; + Time:=true; + TimeEP:=false; +end; + +function TH1405.GetCP: real; +begin + GetCP:=BP; +end; + + +//---FVel6--- + +function TFVel6.GetPF(i_bcp:real; pp, hp, dt, ep: real): real; +const + LBDelay = 100; +var + LimPP, dpPipe, dpMainValve, ActFlowSpeed: real; +begin + Limpp:=Min0R(5*Byte(i_bcp<3.5),hp); + if (i_bcp>=3.5) and ((i_bcp<4.3)or(i_bcp>5.5)) then + ActFlowSpeed:=0 + else if (i_bcp>4.3) and (i_bcp<4.8) then + ActFlowSpeed:=4*(i_bcp-4.3) //konsultacje wawa1 - bylo 8 + else if (i_bcp<4) then + ActFlowSpeed:=2 + else + ActFlowSpeed:=4; + dpMainValve:=PF(Limpp,pp,ActFlowSpeed/(LBDelay))*dt; + + + Sounds[s_fv4a_e]:=0; + Sounds[s_fv4a_u]:=0; + Sounds[s_fv4a_b]:=0; + if(i_bcp<3.5)then Sounds[s_fv4a_u]:=-dpMainValve else + if(i_bcp<4.8)then Sounds[s_fv4a_b]:=dpMainValve else + if(i_bcp<5.5)then Sounds[s_fv4a_e]:=dpMainValve; + + GetPF:=dpMainValve; + if(i_bcp<-0.5)then + EPS:=-1 + else if(i_bcp>0.5)and(i_bcp<4.7)then + EPS:=1 + else + EPS:=0; +// EPS:=i_bcp*Byte(i_bcp<2) +end; + +function TFVel6.GetCP: real; +begin + GetCP:=EPS; +end; + +function TFVel6.GetPos(i: byte): real; +const + table: array[0..10] of real = (-1,6,-1,0,6,4,4.7,5,-1,0,1); +begin + GetPos:=table[i]; +end; + +function TFVel6.GetSound(i: byte): real; +begin + if i>2 then + GetSound:=0 + else + GetSound:=Sounds[i]; +end; + +procedure TFVel6.Init(press: real); +begin + Time:=true; + TimeEP:=true; +end; + +end. + +