diff --git a/EU07.bpr b/EU07.bpr index 5362df40..7ef4f5fb 100644 --- a/EU07.bpr +++ b/EU07.bpr @@ -4,16 +4,16 @@ - @@ -24,7 +24,7 @@ - + diff --git a/EU07.cpp b/EU07.cpp index 1fa62a8a..92861da1 100644 --- a/EU07.cpp +++ b/EU07.cpp @@ -82,7 +82,7 @@ USEUNIT("Console.cpp"); USEUNIT("Mover.cpp"); USEUNIT("McZapkie\_mover.pas"); USEUNIT("McZapkie\hamulce.pas"); -USEUNIT("McZapkie\Oerlikon_ESt.pas"); +USEUNIT("McZapkie\Oerlikon_ESt.cpp"); USEUNIT("Console\PoKeys55.cpp"); USEUNIT("Forth.cpp"); USEUNIT("Console\LPT.cpp"); diff --git a/McZapkie/Mover.hpp b/McZapkie/Mover.hpp index 98c609a6..c74901e7 100644 --- a/McZapkie/Mover.hpp +++ b/McZapkie/Mover.hpp @@ -11,7 +11,7 @@ #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 diff --git a/McZapkie/Oerlikon_ESt.cpp b/McZapkie/Oerlikon_ESt.cpp index 95c7171c..edfa2c7e 100644 --- a/McZapkie/Oerlikon_ESt.cpp +++ b/McZapkie/Oerlikon_ESt.cpp @@ -13,613 +13,663 @@ Copyright (C) 2007-2014 Maciej Cierniak */ #include "Oerlikon_ESt.h" +#include double d2A(double d) -{ double result; - d2A =( d*d )*0.7854*1.0/1000; -return result; +{ + return (d * d) * 0.7854 * 1.0 / 1000; } // ------ RURA ------ -double TRura::P() -{ double result; - P =Next.P; -return result; +double __fastcall TRura::P(void) +{ + return Next->P(); } void TRura::Update(double dt) { - Next.Flow( dVol ); - dVol =0; + Next->Flow(dVol); + dVol = 0; } // ------ PRZECIWPOSLIG ------ void TPrzeciwposlizg::SetPoslizg(bool flag) { - Poslizg =flag; + Poslizg = flag; } void TPrzeciwposlizg::Update(double dt) { - if( ( Poslizg ) ) - { - BrakeRes.Flow( dVol ); - Next.Flow( PF( Next.P, 0, d2A( 10 ) )*dt ); - } - else - Next.Flow( dVol ); - dVol =0; + if ((Poslizg)) + { + BrakeRes->Flow(dVol); + Next->Flow(PF(Next->P(), 0, d2A(10)) * dt); + } + else + Next->Flow(dVol); + dVol = 0; } - // ------ PRZEKLADNIK ------ void TPrzekladnik::Update(double dt) -{ double BCP; double BVP; double dV; +{ + double BCP; + double BVP; + double dV; + BCP = Next->P(); + BVP = BrakeRes->P(); - BCP =Next.P; - BVP =BrakeRes.P; - - if( ( BCP>P ) ) - dV =-PFVd( BCP, 0, d2A( 10 ), P )*dt;else - if( ( BCP

0 ) - BrakeRes.Flow( -dV ); + if ((BCP > P)) + dV = -PFVd(BCP, 0, d2A(10), P) * dt; + else if ((BCP < P)) + dV = PFVa(BVP, BCP, d2A(10), P) * dt; + else + dV = 0; + Next->Flow(dV); + if (dV > 0) + BrakeRes->Flow(-dV); } // ------ PRZEKLADNIK RAPID ------ -void TRapid::SetRapidParams(double mult, double size) +void TRapid::SetRapidParams(double mult, double size) { - RapidMult =mult; - RapidStatus =false; - if( ( size>0.1 ) ) //dopasowywanie srednicy przekladnika - { - DN =d2A( size*0.4 ); - DL =d2A( size*0.4 ); - } - else - { - DN =d2A( 5 ); - DL =d2A( 5 ); - } + RapidMult = mult; + RapidStatus = false; + if ((size > 0.1)) // dopasowywanie srednicy przekladnika + { + DN = d2A(size * 0.4); + DL = d2A(size * 0.4); + } + else + { + DN = d2A(5); + DL = d2A(5); + } } void TRapid::SetRapidStatus(bool rs) { - RapidStatus =rs; + RapidStatus = rs; } void TRapid::Update(double dt) -{ double BCP; double BVP; double dV; double ActMult; +{ + double BCP; + double BVP; + double dV; + double ActMult; - BVP =BrakeRes.P; - BCP =Next.P; + BVP = BrakeRes->P(); + BCP = Next->P(); - if( ( RapidStatus ) ) - { - ActMult =RapidMult; - } - else - { - ActMult =1; - } + if ((RapidStatus)) + { + ActMult = RapidMult; + } + else + { + ActMult = 1; + } - if( ( BCP*RapidMult>P*ActMult ) ) - dV =-PFVd( BCP, 0, DL, P*ActMult*1.0/RapidMult )*dt;else - if( ( BCP*RapidMult0 ) - BrakeRes.Flow( -dV ); + if ((BCP * RapidMult > P * ActMult)) + dV = -PFVd(BCP, 0, DL, P * ActMult * 1.0 / RapidMult) * dt; + else if ((BCP * RapidMult < P * ActMult)) + dV = PFVa(BVP, BCP, DN, P * ActMult * 1.0 / RapidMult) * dt; + else + dV = 0; + Next->Flow(dV); + if (dV > 0) + BrakeRes->Flow(-dV); } // ------ PRZEKŁADNIK CIĄGŁY ------ void TPrzekCiagly::SetMult(double m) { - mult =m; + mult = m; } void TPrzekCiagly::Update(double dt) -{ double BCP; double BVP; double dV; +{ + double BCP; + double BVP; + double dV; - BVP =BrakeRes.P; - BCP =Next.P; + BVP = BrakeRes->P(); + BCP = Next->P(); - if( ( BCP>P*mult ) ) - dV =-PFVd( BCP, 0, d2A( 8 ), P*mult )*dt;else - if( ( BCP0 ) - BrakeRes.Flow( -dV ); + if ((BCP > P * mult)) + dV = -PFVd(BCP, 0, d2A(8), P * mult) * dt; + else if ((BCP < P * mult)) + dV = PFVa(BVP, BCP, d2A(8), P * mult) * dt; + else + dV = 0; + Next->Flow(dV); + if (dV > 0) + BrakeRes->Flow(-dV); } // ------ PRZEKŁADNIK CIĄGŁY ------ void TPrzek_PZZ::SetLBP(double P) { - LBP =P; + LBP = P; } void TPrzek_PZZ::Update(double dt) -{ double BCP; double BVP; double dV; double Pgr; +{ + double BCP; + double BVP; + double dV; + double Pgr; - BVP =BrakeRes.P; - BCP =Next.P; + BVP = BrakeRes->P(); + BCP = Next->P(); - Pgr =Max0R( LBP, P ); + Pgr = Max0R(LBP, P); - if( ( BCP>Pgr ) ) - dV =-PFVd( BCP, 0, d2A( 8 ), Pgr )*dt;else - if( ( BCP0 ) - BrakeRes.Flow( -dV ); + if ((BCP > Pgr)) + dV = -PFVd(BCP, 0, d2A(8), Pgr) * dt; + else if ((BCP < Pgr)) + dV = PFVa(BVP, BCP, d2A(8), Pgr) * dt; + else + dV = 0; + Next->Flow(dV); + if (dV > 0) + BrakeRes->Flow(-dV); } // ------ PRZECIWPOSLIG ------ void TPrzekED::SetP(double P) { - MaxP =P; + MaxP = P; } void TPrzekED::Update(double dt) { - if( Next.P>MaxP ) - { - BrakeRes.Flow( dVol ); - Next.Flow( PFVd( Next.P, 0, d2A( 10 )*dt, MaxP ) ); - } - else - Next.Flow( dVol ); - dVol =0; + if (Next->P > MaxP) + { + BrakeRes->Flow(dVol); + Next->Flow(PFVd(Next->P, 0, d2A(10) * dt, MaxP)); + } + else + Next->Flow(dVol); + dVol = 0; } - // ------ OERLIKON EST NA BOGATO ------ -double TNESt3::GetPF(double PP, double dt, double Vel) //przeplyw miedzy komora wstepna i PG -{ double result; double dV; double dV1; double temp; - double VVP; double BVP; double BCP; double CVP; double MPP; double nastG; +double TNESt3::GetPF(double PP, double dt, double Vel) // przeplyw miedzy komora wstepna i PG +{ + double dV; + double dV1; + double temp; + double VVP; + double BVP; + double BCP; + double CVP; + double MPP; + double nastG; unsigned char i; - BVP =BrakeRes.P; - VVP =ValveRes.P; -// BCP:=BrakeCyl.P; - BCP =Przekladniki[ 1 ].P; - CVP =CntrlRes.P-0.0; - MPP =Miedzypoj.P; - dV1 =0; + BVP = BrakeRes->P(); + VVP = ValveRes->P(); + // BCP:=BrakeCyl.P; + BCP = Przekladniki[1]->P(); + CVP = CntrlRes.P - 0.0; + MPP = Miedzypoj->P(); + dV1 = 0; - nastG =( BrakeDelayFlag && bdelay_G ); + nastG = (BrakeDelayFlag & bdelay_G); -//sprawdzanie stanu - CheckState( BCP , dV1 ); - CheckReleaser( dt ); + // sprawdzanie stanu + CheckState(BCP, dV1); + CheckReleaser(dt); -//luzowanie - if( ( BrakeStatus && b_hld )==b_off ) - dV =PF( 0, BCP, Nozzles[ dTO ]*nastG+( 1-nastG )*Nozzles[ dOO ] )*dt*( 0.1+4.9*Min0R( 0.2, BCP-( ( CVP-0.05-VVP )*BVM+0.1 ) ) );else dV =0; -// BrakeCyl.Flow(-dV); - Przekladniki[ 1 ].Flow( -dV ); - if( ( ( BrakeStatus && b_on )==b_on )&&( Przekladniki[ 1 ].P*HBG30070 ) || ( ( RapidStatus ) && ( abs( Vel )>50 ) ) || ( RapidStaly ) ) ); - ( Przekladniki[ i ] as TRapid ).SetRapidStatus( RapidStatus ); - } + // luzowanie + if ((BrakeStatus & b_hld) == b_off) + dV = PF(0, BCP, Nozzles[dTO] * nastG + (1 - nastG) * Nozzles[dOO]) * dt * + (0.1 + 4.9 * Min0R(0.2, BCP - ((CVP - 0.05 - VVP) * BVM + 0.1))); else - if( ( Przekladniki[ i ] is TPrzeciwposlizg ) ) - ( Przekladniki[ i ] as TPrzeciwposlizg ).SetPoslizg( ( BrakeStatus && b_asb )==b_asb );else - if( ( Przekladniki[ i ] is TPrzekED ) ) - if( ( Vel<-15 ) ) - ( Przekladniki[ i ] as TPrzekED ).SetP( 0 );else ( Przekladniki[ i ] as TPrzekED ).SetP( MaxBP*3 );else - if( ( Przekladniki[ i ] is TPrzekCiagly ) ) - ( Przekladniki[ i ] as TPrzekCiagly ).SetMult( LoadC );else - if( ( Przekladniki[ i ] is TPrzek_PZZ ) ) - ( Przekladniki[ i ] as TPrzek_PZZ ).SetLBP( LBP ); - }} + dV = 0; + // BrakeCyl.Flow(-dV); + Przekladniki[1]->Flow(-dV); + if (((BrakeStatus & b_on) == b_on) && (Przekladniki[1]->P * HBG300 < MaxBP)) + dV = PF(BVP, BCP, Nozzles[dTN] * (nastG + 2 * unsigned char(BCP < Podskok)) + + Nozzles[dON] * (1 - nastG)) * + dt * (0.1 + 4.9 * Min0R(0.2, (CVP - 0.05 - VVP) * BVM - BCP)); + else + dV = 0; + // BrakeCyl.Flow(-dV); + Przekladniki[1]->Flow(-dV); + BrakeRes->Flow(dV); - -//przeplyw testowy miedzypojemnosci - dV =PF( MPP, VVP, BVs( BCP ) )+PF( MPP, CVP, CVs( BCP ) ); - if( ( MPP-0.05>BVP ) ) - dV =dV+PF( MPP-0.05, BVP, Nozzles[ dPT ]*nastG+( 1-nastG )*Nozzles[ dPO ] ); - if( MPP>VVP ) dV =dV+PF( MPP, VVP, d2A( 5 ) ); - Miedzypoj.Flow( dV*dt*0.15 ); - - -//przeplyw ZS <-> PG - temp =CVs( BCP ); - 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 ) ) - dV =PF( BVP, MPP-0.05, Nozzles[ dPT ]*nastG+( 1-nastG )*Nozzles[ dPO ] )*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; - Przekladniki[ 1 ].Act; - Przekladniki[ 2 ].Act; - Przekladniki[ 3 ].Act; - GetPF =dV-dV1; -return result; -} - - -void TNESt3::EStParams(double i_crc) //parametry charakterystyczne dla ESt -{ - -} - - -void TNESt3::Init(double PP, double HPP, double LPP, double BP, unsigned char BDF) -{ - ValveRes.CreatePress( 1*PP ); - BrakeCyl.CreatePress( 1*BP ); - BrakeRes.CreatePress( 1*PP ); - CntrlRes =TReservoir.Create; - CntrlRes.CreateCap( 15 ); - CntrlRes.CreatePress( 1*HPP ); - BrakeStatus =unsigned char( BP>1 )*1; - Miedzypoj =TReservoir.Create; - Miedzypoj.CreateCap( 5 ); - Miedzypoj.CreatePress( PP ); - - BVM =1*1.0/( HPP-0.05-LPP )*MaxBP; - - BrakeDelayFlag =BDF; - - Zamykajacy =false; - - if( !( ( FM is TDisk1 ) || ( FM is TDisk2 ) ) ) //jesli zeliwo to schodz - RapidStaly =false;else - RapidStaly =true; - -} - - -double TNESt3::GetCRP() -{ double result; - GetCRP =CntrlRes.P; -// GetCRP:=Przekladniki[1].P; -// GetCRP:=Miedzypoj.P; -return result; -} - - -void TNESt3::CheckState(double BCP, double & dV1) //glowny przyrzad rozrzadczy -{ double VVP; double BVP; double CVP; double MPP; - - BVP =BrakeRes.P; //-> tu ma byc komora rozprezna - VVP =ValveRes.P; - CVP =CntrlRes.P; - MPP =Miedzypoj.P; - - if( ( BCP<0.25 )&&( VVP+0.08>CVP ) ) Przys_blok =false; - -//sprawdzanie stanu -// if ((BrakeStatus and 1)=1)and(BCP>0.25)then - if( ( VVP+0.01+BCP*1.0/BVMCVP-0.05 ) ) - BrakeStatus =( BrakeStatus && 252 ) //luzowanie;else if( ( VVP+BCP*1.0/BVM>CVP-0.05 ) ) - BrakeStatus =( BrakeStatus && 253 ) //zatrzymanie napelaniania;else if( ( VVP+( BCP-0.1 )*1.0/BVM0.25 ) ) //zatrzymanie luzowania - BrakeStatus =( BrakeStatus || 1 ); - - if( ( BrakeStatus && 1 )==0 ) - SoundFlag =SoundFlag || sf_CylU; - - if( ( VVP+0.10Update(dt); + if (typeid(Przekladniki[i]) == typeid(TRapid)) + { + RapidStatus = + (((BrakeDelayFlag & bdelay_R) == bdelay_R) && + ((abs(Vel) > 70) || ((RapidStatus) && (abs(Vel) > 50)) || (RapidStaly))); + Przekladniki[i]->SetRapidStatus(RapidStatus); + } + else if (typeid(Przekladniki[i]) == typeid(TPrzeciwposlizg)) + Przekladniki[i]->SetPoslizg((BrakeStatus & b_asb) == b_asb); + else if (typeid(Przekladniki[i]) == typeid(TPrzekED)) + if ((Vel < -15)) + Przekladniki[i]->SetP(0); + else + Przekladniki[i]->SetP(MaxBP * 3); + else if (typeid(Przekladniki[i]) == typeid(TPrzekCiagly)) + Przekladniki[i]->SetMult(LoadC); + else if (typeid(Przekladniki[i]) == typeid(TPrzek_PZZ)) + Przekladniki[i]->SetLBP(LBP); + } } + // przeplyw testowy miedzypojemnosci + dV = PF(MPP, VVP, BVs(BCP)) + PF(MPP, CVP, CVs(BCP)); + if ((MPP - 0.05 > BVP)) + dV = dV + PF(MPP - 0.05, BVP, Nozzles[dPT] * nastG + (1 - nastG) * Nozzles[dPO]); + if (MPP > VVP) + dV = dV + PF(MPP, VVP, d2A(5)); + Miedzypoj->Flow(dV * dt * 0.15); - if( ( BCP>0.5 ) ) - Zamykajacy =true;else if( ( VVP-0.6 PG + temp = CVs(BCP); + 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)) + dV = PF(BVP, MPP - 0.05, Nozzles[dPT] * nastG + (1 - nastG) * Nozzles[dPO]) * 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(); + Przekladniki[1]->Act(); + Przekladniki[2]->Act(); + Przekladniki[3]->Act(); + return dV - dV1; } - -void TNESt3::CheckReleaser(double dt) //odluzniacz +void TNESt3::EStParams(double i_crc) // parametry charakterystyczne dla ESt { - double VVP; double CVP; - - VVP =ValveRes.P; - CVP =CntrlRes.P; - -//odluzniacz automatyczny - if( ( BrakeStatus && b_rls==b_rls ) ) - { - CntrlRes.Flow( +PF( CVP, 0, 0.02 )*dt ); - if( ( CVPCreatePress(1 * PP); + BrakeCyl->CreatePress(1 * BP); + BrakeRes->CreatePress(1 * PP); + CntrlRes = new TReservoir(); + CntrlRes->CreateCap(15); + CntrlRes->CreatePress(1 * HPP); + BrakeStatus = unsigned char(BP > 1) * 1; + Miedzypoj = new TReservoir(); + Miedzypoj->CreateCap(5); + Miedzypoj->CreatePress(PP); -double TNESt3::CVs(double BP) //napelniacz sterujacego -{ double result; double CVP; double MPP; + BVM = 1 * 1.0 / (HPP - 0.05 - LPP) * MaxBP; - CVP =CntrlRes.P; - MPP =Miedzypoj.P; + BrakeDelayFlag = BDF; -//przeplyw ZS <-> PG - if( ( MPPCVP-0.08 ) ) - CVs =Nozzles[ dSd ];else - CVs =Nozzles[ dSm ]; -return result; + Zamykajacy = false; + + if (!(typeid(FM) == typeid(TDisk1) || typeid(FM) == typeid(TDisk2))) // jesli zeliwo to schodz + RapidStaly = false; + else + RapidStaly = true; } +double TNESt3::GetCRP() +{ + return CntrlRes->P(); + // return Przekladniki[1].P; + // return Miedzypoj.P; +} -double TNESt3::BVs(double BCP) //napelniacz pomocniczego -{ double result; double CVP; double MPP; +void TNESt3::CheckState(double BCP, double &dV1) // glowny przyrzad rozrzadczy +{ + double VVP; + double BVP; + double CVP; + double MPP; - CVP =CntrlRes.P; - MPP =Miedzypoj.P; + BVP = BrakeRes->P(); //-> tu ma byc komora rozprezna + VVP = ValveRes->P(); + CVP = CntrlRes->P(); + MPP = Miedzypoj->P(); -//przeplyw ZP <-> rozdzielacz - if( ( MPP CVP)) + Przys_blok = false; + + // sprawdzanie stanu + // if ((BrakeStatus and 1)=1)and(BCP>0.25)then + if ((VVP + 0.01 + BCP * 1.0 / BVM < CVP - 0.05) && (Przys_blok)) + BrakeStatus = + (BrakeStatus | + 3) // hamowanie stopniowe;else if( ( VVP-0.01+( BCP-0.1 )*1.0/BVM>CVP-0.05 ) ) + BrakeStatus = (BrakeStatus & 252) // luzowanie;else if( ( VVP+BCP*1.0/BVM>CVP-0.05 ) ) + BrakeStatus = + (BrakeStatus & 253) // zatrzymanie napelaniania;else if( ( VVP+( BCP-0.1 + // )*1.0/BVM0.25 ) ) //zatrzymanie luzowania + BrakeStatus = (BrakeStatus | 1); + + if ((BrakeStatus & 1) == 0) + SoundFlag = SoundFlag | sf_CylU; + + if ((VVP + 0.10 < CVP) && (BCP < 0.25)) // poczatek hamowania + if ((!Przys_blok)) + { + ValveRes->CreatePress(0.1 * VVP); + SoundFlag = SoundFlag | sf_Acc; + ValveRes->Act(); + Przys_blok = true; + } + + if ((BCP > 0.5)) + Zamykajacy = true; + else if ((VVP - 0.6 < MPP)) + Zamykajacy = false; +} + +void TNESt3::CheckReleaser(double dt) // odluzniacz +{ + double VVP; + double CVP; + + VVP = ValveRes->P(); + CVP = CntrlRes->P(); + + // odluzniacz automatyczny + if ((BrakeStatus & b_rls == b_rls)) + { + CntrlRes->Flow(+PF(CVP, 0, 0.02) * dt); + if ((CVP < VVP + 0.3) || (!autom)) + BrakeStatus = BrakeStatus & 247; + } +} + +double TNESt3::CVs(double BP) // napelniacz sterujacego +{ + double CVP; + double MPP; + + CVP = CntrlRes->P(); + MPP = Miedzypoj->P(); + + // przeplyw ZS <-> PG + if ((MPP < CVP - 0.17)) + return 0; + else if ((MPP > CVP - 0.08)) + return Nozzles[dSd]; + else + return Nozzles[dSm]; +} + +double TNESt3::BVs(double BCP) // napelniacz pomocniczego +{ + double CVP; + double MPP; + + CVP = CntrlRes->P(); + MPP = Miedzypoj->P(); + + // przeplyw ZP <-> rozdzielacz + if ((MPP < CVP - 0.3)) + return Nozzles[dP]; + else if ((BCP < 0.5)) + if ((Zamykajacy)) + return Nozzles[dPm]; // 1.25 + else + return Nozzles[dPd]; + else + return 0; } void TNESt3::PLC(double mass) { - LoadC =1+unsigned char( massCreatePress(0); + BrakeRes.CreatePress(0); + Miedzypoj.CreatePress(0); + CntrlRes.CreatePress(0); - BrakeStatus =0; + BrakeStatus = 0; - ValveRes.Act( ); - BrakeRes.Act( ); - Miedzypoj.Act( ); - CntrlRes.Act( ); + ValveRes.Act(); + BrakeRes.Act(); + Miedzypoj.Act(); + CntrlRes.Act(); } - void TNESt3::SetLP(double TM, double LM, double TBP) { - TareM =TM; - LoadM =LM; - TareBP =TBP; + TareM = TM; + LoadM = LM; + TareBP = TBP; } - void TNESt3::SetLBP(double P) { - LBP =P; + LBP = P; } - - -void TNESt3::SetSize(int size, std::string params) //ustawianie dysz (rozmiaru ZR) +void TNESt3::SetSize(int size, std::string params) // ustawianie dysz (rozmiaru ZR) { - static double/*?*/ const dNO1l = 1.250; - static double/*?*/ const dNT1l = 0.510; - static double/*?*/ const dOO1l = 0.907; - static double/*?*/ const dOT1l = 0.524; + static double /*?*/ const dNO1l = 1.250; + static double /*?*/ const dNT1l = 0.510; + static double /*?*/ const dOO1l = 0.907; + static double /*?*/ const dOT1l = 0.524; - int i; + int i; + if (params.find("ESt3") != std::string::npos) + { + Podskok = 0.7; + Przekladniki[1] = new TRura(); + Przekladniki[3] = new TRura(); + } + else + { + Podskok = -1; + Przekladniki[1] = new TRapid(); + if (params.find("-s216") != std::string::npos) + Przekladniki[1]->SetRapidParams(2, 16); + else + Przekladniki[1]->SetRapidParams(2, 0); + Przekladniki[3] = new TPrzeciwposlizg(); + if (params.find("-ED") != std::string::npos) + { + delete Przekladniki[3]; //tutaj ma być destruktor + Przekladniki[1]->SetRapidParams(2, 18); + Przekladniki[3] = new TPrzekED(); + } + } - if( Pos( "ESt3", params )>0 ) - { - Podskok =0.7; - Przekladniki[ 1 ] =TRura.Create; - Przekladniki[ 3 ] =TRura.Create; - } - else - { - Podskok =-1; - Przekladniki[ 1 ] =TRapid.Create; - if( Pos( "-s216", params )>0 ) - ( Przekladniki[ 1 ] as TRapid ).SetRapidParams( 2, 16 );else - ( Przekladniki[ 1 ] as TRapid ).SetRapidParams( 2, 0 ); - Przekladniki[ 3 ] =TPrzeciwposlizg.Create; - if( Pos( "-ED", params )>0 ) - { - Przekladniki[ 3 ].Free( ); - ( Przekladniki[ 1 ] as TRapid ).SetRapidParams( 2, 18 ); - Przekladniki[ 3 ] =TPrzekED.Create; - } - } + if (params.find("AL2") != std::string::npos) + Przekladniki[2] = new TPrzekCiagly(); + else if (params.find("PZZ") != std::string::npos) + Przekladniki[2] = new TPrzek_PZZ(); + else + Przekladniki[2] = new TRura(); - if( Pos( "AL2", params )>0 ) - Przekladniki[ 2 ] =TPrzekCiagly.Create;else - if( Pos( "PZZ", params )>0 ) - Przekladniki[ 2 ] =TPrzek_PZZ.Create;else - Przekladniki[ 2 ] =TRura.Create; + if ((params.find("3d") + params.find("4d") != std::string::npos)) + autom = false; + else + autom = true; + if ((params.find("HBG300") != std::string::npos)) + HBG300 = 1; + else + HBG300 = 0; - if( ( Pos( "3d", params )+Pos( "4d", params )>0 ) ) autom =false;else autom =true; - if( ( Pos( "HBG300", params )>0 ) ) HBG300 =1;else HBG300 =0; - - switch( size ) { - case 16: - { //dON,dOO,dTN,dTO,dP,dS - Nozzles[ dON ] =5.0;//5.0; - Nozzles[ dOO ] =3.4;//3.4; - Nozzles[ dTN ] =2.0; - Nozzles[ dTO ] =1.75; - Nozzles[ dP ] =3.8; - Nozzles[ dPd ] =2.70; - Nozzles[ dPm ] =1.25; - Nozzles[ dPO ] =Nozzles[ dON ]; - Nozzles[ dPT ] =Nozzles[ dTN ]; - } - case 14: - { //dON,dOO,dTN,dTO,dP,dS - Nozzles[ dON ] =4.3; - Nozzles[ dOO ] =2.85; - Nozzles[ dTN ] =1.83; - Nozzles[ dTO ] =1.57; - Nozzles[ dP ] =3.4; - Nozzles[ dPd ] =2.20; - Nozzles[ dPm ] =1.10; - Nozzles[ dPO ] =Nozzles[ dON ]; - Nozzles[ dPT ] =Nozzles[ dTN ]; - } - case 12: - { //dON,dOO,dTN,dTO,dP,dS - Nozzles[ dON ] =3.7; - Nozzles[ dOO ] =2.50; - Nozzles[ dTN ] =1.65; - Nozzles[ dTO ] =1.39; - Nozzles[ dP ] =2.65; - Nozzles[ dPd ] =1.80; - Nozzles[ dPm ] =0.85; - Nozzles[ dPO ] =Nozzles[ dON ]; - Nozzles[ dPT ] =Nozzles[ dTN ]; - } - case 10: - { //dON,dOO,dTN,dTO,dP,dS - Nozzles[ dON ] =3.1; - Nozzles[ dOO ] =2.0; - Nozzles[ dTN ] =1.35; - Nozzles[ dTO ] =1.13; - Nozzles[ dP ] =1.6; - Nozzles[ dPd ] =1.55; - Nozzles[ dPm ] =0.7; - Nozzles[ dPO ] =Nozzles[ dON ]; - Nozzles[ dPT ] =Nozzles[ dTN ]; - } - case 200: - { //dON,dOO,dTN,dTO,dP,dS - Nozzles[ dON ] =dNO1l; - Nozzles[ dOO ] =dOO1l*1.0/1.15; - Nozzles[ dTN ] =dNT1l; - Nozzles[ dTO ] =dOT1l; - Nozzles[ dP ] =7.4; - Nozzles[ dPd ] =5.3; - Nozzles[ dPm ] =2.5; - Nozzles[ dPO ] =7.28; - Nozzles[ dPT ] =2.96; - } - case 375: - { //dON,dOO,dTN,dTO,dP,dS - Nozzles[ dON ] =dNO1l; - Nozzles[ dOO ] =dOO1l*1.0/1.15; - Nozzles[ dTN ] =dNT1l; - Nozzles[ dTO ] =dOT1l; - Nozzles[ dP ] =13.0; - Nozzles[ dPd ] =9.6; - Nozzles[ dPm ] =4.4; - Nozzles[ dPO ] =9.92; - Nozzles[ dPT ] =3.99; - } - case 150: - { //dON,dOO,dTN,dTO,dP,dS - Nozzles[ dON ] =dNO1l; - Nozzles[ dOO ] =dOO1l; - Nozzles[ dTN ] =dNT1l; - Nozzles[ dTO ] =dOT1l; - Nozzles[ dP ] =5.8; - Nozzles[ dPd ] =4.1; - Nozzles[ dPm ] =1.9; - Nozzles[ dPO ] =6.33; - Nozzles[ dPT ] =2.58; - } - case 100: - { //dON,dOO,dTN,dTO,dP,dS - Nozzles[ dON ] =dNO1l; - Nozzles[ dOO ] =dOO1l; - Nozzles[ dTN ] =dNT1l; - Nozzles[ dTO ] =dOT1l; - Nozzles[ dP ] =4.2; - Nozzles[ dPd ] =2.9; - Nozzles[ dPm ] =1.4; - Nozzles[ dPO ] =5.19; - Nozzles[ dPT ] =2.14; - } + switch (size) + { + case 16: + { // dON,dOO,dTN,dTO,dP,dS + Nozzles[dON] = 5.0; // 5.0; + Nozzles[dOO] = 3.4; // 3.4; + Nozzles[dTN] = 2.0; + Nozzles[dTO] = 1.75; + Nozzles[dP] = 3.8; + Nozzles[dPd] = 2.70; + Nozzles[dPm] = 1.25; + Nozzles[dPO] = Nozzles[dON]; + Nozzles[dPT] = Nozzles[dTN]; + } + case 14: + { // dON,dOO,dTN,dTO,dP,dS + Nozzles[dON] = 4.3; + Nozzles[dOO] = 2.85; + Nozzles[dTN] = 1.83; + Nozzles[dTO] = 1.57; + Nozzles[dP] = 3.4; + Nozzles[dPd] = 2.20; + Nozzles[dPm] = 1.10; + Nozzles[dPO] = Nozzles[dON]; + Nozzles[dPT] = Nozzles[dTN]; + } + case 12: + { // dON,dOO,dTN,dTO,dP,dS + Nozzles[dON] = 3.7; + Nozzles[dOO] = 2.50; + Nozzles[dTN] = 1.65; + Nozzles[dTO] = 1.39; + Nozzles[dP] = 2.65; + Nozzles[dPd] = 1.80; + Nozzles[dPm] = 0.85; + Nozzles[dPO] = Nozzles[dON]; + Nozzles[dPT] = Nozzles[dTN]; + } + case 10: + { // dON,dOO,dTN,dTO,dP,dS + Nozzles[dON] = 3.1; + Nozzles[dOO] = 2.0; + Nozzles[dTN] = 1.35; + Nozzles[dTO] = 1.13; + Nozzles[dP] = 1.6; + Nozzles[dPd] = 1.55; + Nozzles[dPm] = 0.7; + Nozzles[dPO] = Nozzles[dON]; + Nozzles[dPT] = Nozzles[dTN]; + } + case 200: + { // dON,dOO,dTN,dTO,dP,dS + Nozzles[dON] = dNO1l; + Nozzles[dOO] = dOO1l * 1.0 / 1.15; + Nozzles[dTN] = dNT1l; + Nozzles[dTO] = dOT1l; + Nozzles[dP] = 7.4; + Nozzles[dPd] = 5.3; + Nozzles[dPm] = 2.5; + Nozzles[dPO] = 7.28; + Nozzles[dPT] = 2.96; + } + case 375: + { // dON,dOO,dTN,dTO,dP,dS + Nozzles[dON] = dNO1l; + Nozzles[dOO] = dOO1l * 1.0 / 1.15; + Nozzles[dTN] = dNT1l; + Nozzles[dTO] = dOT1l; + Nozzles[dP] = 13.0; + Nozzles[dPd] = 9.6; + Nozzles[dPm] = 4.4; + Nozzles[dPO] = 9.92; + Nozzles[dPT] = 3.99; + } + case 150: + { // dON,dOO,dTN,dTO,dP,dS + Nozzles[dON] = dNO1l; + Nozzles[dOO] = dOO1l; + Nozzles[dTN] = dNT1l; + Nozzles[dTO] = dOT1l; + Nozzles[dP] = 5.8; + Nozzles[dPd] = 4.1; + Nozzles[dPm] = 1.9; + Nozzles[dPO] = 6.33; + Nozzles[dPT] = 2.58; + } + case 100: + { // dON,dOO,dTN,dTO,dP,dS + Nozzles[dON] = dNO1l; + Nozzles[dOO] = dOO1l; + Nozzles[dTN] = dNT1l; + Nozzles[dTO] = dOT1l; + Nozzles[dP] = 4.2; + Nozzles[dPd] = 2.9; + Nozzles[dPm] = 1.4; + Nozzles[dPO] = 5.19; + Nozzles[dPT] = 2.14; + } default: - { - Nozzles[ dON ] =0; - Nozzles[ dOO ] =0; - Nozzles[ dTN ] =0; - Nozzles[ dTO ] =0; - Nozzles[ dP ] =0; - Nozzles[ dPd ] =0; - Nozzles[ dPm ] =0; - } - } + { + Nozzles[dON] = 0; + Nozzles[dOO] = 0; + Nozzles[dTN] = 0; + Nozzles[dTO] = 0; + Nozzles[dP] = 0; + Nozzles[dPd] = 0; + Nozzles[dPm] = 0; + } + } - Nozzles[ dSd ] =1.1; - Nozzles[ dSm ] =0.9; + Nozzles[dSd] = 1.1; + Nozzles[dSm] = 0.9; - //przeliczanie z mm^2 na l/m - { long i_end = dMAX+1 ; for( i = 0 ; i < i_end ; ++i ) - { - Nozzles[ i ] =d2A( Nozzles[ i ] ); //(/1000^2*pi/4*1000) - }} + // przeliczanie z mm^2 na l/m + { + for (i = 0; i < dMAX; ++i) + { + Nozzles[i] = d2A(Nozzles[i]); //(/1000^2*pi/4*1000) + } + } - { long i_end = 4 ; for( i = 1 ; i < i_end ; ++i ) - { - Przekladniki[ i ].BrakeRes =&BrakeRes; - Przekladniki[ i ].CreateCap( i ); - Przekladniki[ i ].CreatePress( BrakeCyl.P ); - if( i<3 ) - Przekladniki[ i ].Next =&Przekladniki[ i+1 ];else - Przekladniki[ i ].Next =&BrakeCyl; - }} + { + for (i = 1; i < 4; ++i) + { + Przekladniki[i]->BrakeRes = &BrakeRes; + Przekladniki[i]->CreateCap(i); + Przekladniki[i]->CreatePress(BrakeCyl->P()); + if (i < 3) + Przekladniki[i]->Next = &Przekladniki[i + 1]; + else + Przekladniki[i]->Next = &BrakeCyl; + } + } } - - -//END +// END diff --git a/McZapkie/Oerlikon_ESt.h b/McZapkie/Oerlikon_ESt.h index 8c5cf109..6c226048 100644 --- a/McZapkie/Oerlikon_ESt.h +++ b/McZapkie/Oerlikon_ESt.h @@ -1,7 +1,7 @@ #pragma once #ifndef INCLUDED_OERLIKON_EST_H #define INCLUDED_OERLIKON_EST_H - /*fizyka hamulcow Oerlikon ESt dla symulatora*/ +/*fizyka hamulcow Oerlikon ESt dla symulatora*/ /* This Source Code Form is subject to the @@ -16,13 +16,16 @@ http://mozilla.org/MPL/2.0/. Brakes. Oerlikon ESt. Copyright (C) 2007-2014 Maciej Cierniak */ - -#include // Pascal unit -#include // Pascal unit -#include // Pascal unit -#include // Pascal unit -#include // Pascal unit -#include // Pascal unit + +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include + +using namespace Hamulce; /* (C) youBy @@ -48,189 +51,162 @@ Co brakuje: - PZZ dla dodatkowego */ +static int /*?*/ const dMAX = 11; // dysze +static int /*?*/ const dON = 0; // osobowy napelnianie (+ZP) +static int /*?*/ const dOO = 1; // osobowy oproznianie +static int /*?*/ const dTN = 2; // towarowy napelnianie (+ZP) +static int /*?*/ const dTO = 3; // towarowy oproznianie +static int /*?*/ const dP = 4; // zbiornik pomocniczy +static int /*?*/ const dSd = 5; // zbiornik sterujacy +static int /*?*/ const dSm = 6; // zbiornik sterujacy +static int /*?*/ const dPd = 7; // duzy przelot zamykajcego +static int /*?*/ const dPm = 8; // maly przelot zamykajacego +static int /*?*/ const dPO = 9; // zasilanie pomocniczego O +static int /*?*/ const dPT = 10; // zasilanie pomocniczego T - static double/*?*/ const dMAX = 10; //dysze - static double/*?*/ const dON = 0; //osobowy napelnianie (+ZP) - static double/*?*/ const dOO = 1; //osobowy oproznianie - static double/*?*/ const dTN = 2; //towarowy napelnianie (+ZP) - static double/*?*/ const dTO = 3; //towarowy oproznianie - static double/*?*/ const dP = 4; //zbiornik pomocniczy - static double/*?*/ const dSd = 5; //zbiornik sterujacy - static double/*?*/ const dSm = 6; //zbiornik sterujacy - static double/*?*/ const dPd = 7; //duzy przelot zamykajcego - static double/*?*/ const dPm = 8; //maly przelot zamykajacego - static double/*?*/ const dPO = 9; //zasilanie pomocniczego O - static double/*?*/ const dPT = 10; //zasilanie pomocniczego T +// przekladniki +static int /*?*/ const p_none = 0; +static int /*?*/ const p_rapid = 1; +static int/*?*/ const p_pp = 2; +static int /*?*/ const p_al2 = 3; +static int /*?*/ const p_ppz = 4; +static int /*?*/ const P_ed = 5; -//przekladniki - static double/*?*/ const p_none = 0; - static double/*?*/ const p_rapid = 1; - static double/*?*/ const p_pp = 2; - static double/*?*/ const p_al2 = 3; - static double/*?*/ const p_ppz = 4; - static double/*?*/ const P_ed = 5; +class TPrzekladnik : public TReservoir // przekladnik (powtarzacz) - - - - -struct/*class*/ TPrzekladnik: public TReservoir //przekladnik (powtarzacz) - { -private: - -public: - PReservoir BrakeRes; - PReservoir Next; - virtual void Update(double dt); - + private: + public: + TReservoir *BrakeRes; + TReservoir *Next; + virtual void Update(double dt); + void SetPoslizg(bool flag) {}; + void SetP(double P) {}; + void SetMult(double m) {}; + void SetLBP(double P) {}; + void SetRapidParams(double mult, double size) {}; + void SetRapidStatus(bool rs) {}; }; +class TRura : public TPrzekladnik // nieprzekladnik, rura laczaca - -struct/*class*/ TRura: public TPrzekladnik //nieprzekladnik, rura laczaca - { -private: - -public: - double P()/*override*/; - void Update(double dt)/*override*/; - + private: + public: + virtual __fastcall double P(void) /*override*/; + virtual void Update(double dt) /*override*/; }; +class TPrzeciwposlizg : public TRura // przy napelnianiu - rura, przy poslizgu - upust - -struct/*class*/ TPrzeciwposlizg: public TRura //przy napelnianiu - rura, przy poslizgu - upust - { -private: - bool Poslizg; - -public: - void SetPoslizg(bool flag); - void Update(double dt)/*override*/; - + private: + bool Poslizg; + + public: + void SetPoslizg(bool flag); + void Update(double dt) /*override*/; }; +class TRapid : public TPrzekladnik // przekladnik dwustopniowy - -struct/*class*/ TRapid: public TPrzekladnik //przekladnik dwustopniowy - { -private: - bool RapidStatus; //status rapidu - double RapidMult; //przelozenie (w dol) -// Komora2: real; - double DN; double DL; //srednice dysz napelniania i luzowania - -public: - void SetRapidParams(double mult, double size); - void SetRapidStatus(bool rs); - void Update(double dt)/*override*/; - + private: + bool RapidStatus; // status rapidu + double RapidMult; // przelozenie (w dol) + // Komora2: real; + double DN; + double DL; // srednice dysz napelniania i luzowania + + public: + void SetRapidParams(double mult, double size); + void SetRapidStatus(bool rs); + void Update(double dt) /*override*/; }; +class TPrzekCiagly : public TPrzekladnik // AL2 - -struct/*class*/ TPrzekCiagly: public TPrzekladnik //AL2 - { -private: - double mult; - -public: - void SetMult(double m); - void Update(double dt)/*override*/; - + private: + double mult; + + public: + void SetMult(double m); + void Update(double dt) /*override*/; }; +class TPrzek_PZZ : public TPrzekladnik // podwojny zawor zwrotny - -struct/*class*/ TPrzek_PZZ: public TPrzekladnik //podwojny zawor zwrotny - { -private: - double LBP; - -public: - void SetLBP(double P); - void Update(double dt)/*override*/; - + private: + double LBP; + + public: + void SetLBP(double P); + void Update(double dt) /*override*/; }; +class TPrzekZalamany : public TPrzekladnik // Knicksventil - -struct/*class*/ TPrzekZalamany: public TPrzekladnik //Knicksventil - { -private: - -public: - + private: + public: }; +class TPrzekED : public TRura // przy napelnianiu - rura, przy hamowaniu - upust - -struct/*class*/ TPrzekED: public TRura //przy napelnianiu - rura, przy hamowaniu - upust - { -private: - double MaxP; - -public: - void SetP(double P); - void Update(double dt)/*override*/; - + private: + double MaxP; + + public: + void SetP(double P); + void Update(double dt) /*override*/; }; +class TNESt3 : public TBrake - -struct/*class*/ TNESt3: public TBrake - { -private: - double Nozzles[dMAX+1]; //dysze - TReservoir CntrlRes; //zbiornik sterujący - double BVM; //przelozenie PG-CH -// ValveFlag: byte; //polozenie roznych zaworkow - bool Zamykajacy; //pamiec zaworka zamykajacego -// Przys_wlot: boolean; //wlot do komory przyspieszacza - bool Przys_blok; //blokada przyspieszacza - TReservoir Miedzypoj; //pojemnosc posrednia (urojona) do napelniania ZP i ZS - TPrzekladnik Przekladniki[ /*?*//*1..3*/ (3)-(1)+1 ]; - bool RapidStatus; - bool RapidStaly; - double LoadC; - double TareM; double LoadM; //masa proznego i pelnego - double TareBP; //cisnienie dla proznego - double HBG300; //zawor ograniczajacy cisnienie - double Podskok; //podskok preznosci poczatkowej -// HPBR: real; //zasilanie ZP z wysokiego cisnienia - bool autom; //odluzniacz samoczynny - double LBP; //cisnienie hamulca pomocniczego - -public: - double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG - void EStParams(double i_crc); //parametry charakterystyczne dla ESt - void Init(double PP, double HPP, double LPP, double BP, unsigned char BDF)/*override*/; - double GetCRP()/*override*/; - void CheckState(double BCP, double & dV1); //glowny przyrzad rozrzadczy - void CheckReleaser(double dt); //odluzniacz - double CVs(double BP); //napelniacz sterujacego - double BVs(double BCP); //napelniacz pomocniczego - void SetSize(int size, std::string params); //ustawianie dysz (rozmiaru ZR), przekladniki - void PLC(double mass); //wspolczynnik cisnienia przystawki wazacej - void SetLP(double TM, double LM, double TBP); //parametry przystawki wazacej - void ForceEmptiness()/*override*/; //wymuszenie bycia pustym - void SetLBP(double P); //cisnienie z hamulca pomocniczego - + private: + double Nozzles[dMAX]; // dysze + TReservoir *CntrlRes; // zbiornik sterujący + double BVM; // przelozenie PG-CH + // ValveFlag: byte; //polozenie roznych zaworkow + bool Zamykajacy; // pamiec zaworka zamykajacego + // Przys_wlot: boolean; //wlot do komory przyspieszacza + bool Przys_blok; // blokada przyspieszacza + TReservoir *Miedzypoj; // pojemnosc posrednia (urojona) do napelniania ZP i ZS + TPrzekladnik *Przekladniki[4]; + bool RapidStatus; + bool RapidStaly; + double LoadC; + double TareM; + double LoadM; // masa proznego i pelnego + double TareBP; // cisnienie dla proznego + double HBG300; // zawor ograniczajacy cisnienie + double Podskok; // podskok preznosci poczatkowej + // HPBR: real; //zasilanie ZP z wysokiego cisnienia + bool autom; // odluzniacz samoczynny + double LBP; // cisnienie hamulca pomocniczego + + public: + virtual double __fastcall GetPF(double PP, double dt, + double Vel) /*override*/; // przeplyw miedzy komora wstepna i PG + void EStParams(double i_crc); // parametry charakterystyczne dla ESt + virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, unsigned char BDF) /*override*/; + virtual double __fastcall GetCRP() /*override*/; + void CheckState(double BCP, double &dV1); // glowny przyrzad rozrzadczy + void CheckReleaser(double dt); // odluzniacz + double CVs(double BP); // napelniacz sterujacego + double BVs(double BCP); // napelniacz pomocniczego + void SetSize(int size, std::string params); // ustawianie dysz (rozmiaru ZR), przekladniki + void PLC(double mass); // wspolczynnik cisnienia przystawki wazacej + void SetLP(double TM, double LM, double TBP); // parametry przystawki wazacej + virtual void __fastcall ForceEmptiness() /*override*/; // wymuszenie bycia pustym + void SetLBP(double P); // cisnienie z hamulca pomocniczego }; +extern double d2A(double d); -double d2A(double d); - - - -#endif//INCLUDED_OERLIKON_EST_H -//END +#endif // INCLUDED_OERLIKON_EST_H +// END diff --git a/McZapkie/_Mover.hpp b/McZapkie/_Mover.hpp index 09463a1e..d93ee368 100644 --- a/McZapkie/_Mover.hpp +++ b/McZapkie/_Mover.hpp @@ -10,7 +10,7 @@ #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