diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index 3acc5a8f..f387c35a 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -1881,6 +1881,7 @@ bool TMoverParameters::DecMainCtrl(int CtrlSpeed) // ************************************************************************************************* // Q: 20160710 +// zwiększenie bocznika // ************************************************************************************************* bool TMoverParameters::IncScndCtrl(int CtrlSpeed) { @@ -1926,11 +1927,18 @@ bool TMoverParameters::IncScndCtrl(int CtrlSpeed) if (LastRelayTime > CtrlDelay) LastRelayTime = 0; + if ((OK) && (EngineType == ElectricInductionMotor)) + if ((Vmax < 250)) + ScndCtrlActualPos = Round(Vel + 0.5); + else + ScndCtrlActualPos = Round(Vel * 1.0 / 2 + 0.5); + return OK; } // ************************************************************************************************* // Q: 20160710 +// zmniejszenie bocznika // ************************************************************************************************* bool TMoverParameters::DecScndCtrl(int CtrlSpeed) { @@ -1973,6 +1981,9 @@ bool TMoverParameters::DecScndCtrl(int CtrlSpeed) if (LastRelayTime > CtrlDownDelay) LastRelayTime = 0; + if ((OK) && (EngineType == ElectricInductionMotor)) + ScndCtrlActualPos = 0; + return OK; } @@ -2042,6 +2053,7 @@ bool TMoverParameters::AddPulseForce(int Multipler) // ************************************************************************************************* // Q: 20160713 +// sypanie piasku // ************************************************************************************************* bool TMoverParameters::SandDoseOn(void) { @@ -2063,7 +2075,7 @@ bool TMoverParameters::SandDoseOn(void) } void TMoverParameters::SSReset(void) -{ +{ // funkcja pomocnicza dla SecuritySystemReset - w Delphi Reset() SecuritySystem.SystemTimer = 0; if (TestFlag(SecuritySystem.Status, s_aware)) @@ -2090,6 +2102,7 @@ void TMoverParameters::SSReset(void) // ***************************************************************************** // Q: 20160710 +// zbicie czuwaka / SHP // ***************************************************************************** // hunter-091012: rozbicie alarmow, dodanie testu czuwaka bool TMoverParameters::SecuritySystemReset(void) // zbijanie czuwaka/SHP @@ -2117,13 +2130,15 @@ bool TMoverParameters::SecuritySystemReset(void) // zbijanie czuwaka/SHP // ************************************************************************************************* // Q: 20160711 +// sprawdzanie stanu CA/SHP // ************************************************************************************************* void TMoverParameters::SecuritySystemCheck(double dt) { // Ra: z CA/SHP w EZT jest ten problem, że w rozrządczym nie ma kierunku, a w silnikowym nie ma // obsady // poza tym jest zdefiniowany we wszystkich 3 członach EN57 - // SecuritySystem SS; + if ((!Radio)) + EmergencyBrakeSwitch(false); if ((SecuritySystem.SystemType > 0) && (SecuritySystem.Status > 0) && (Battery)) // Ra: EZT ma teraz czuwak w rozrządczym @@ -2133,13 +2148,13 @@ void TMoverParameters::SecuritySystemCheck(double dt) SecuritySystem .AwareMinSpeed) // domyślnie predkość większa od 10% Vmax, albo podanej jawnie w FIZ { - SecuritySystem.SystemTimer = SecuritySystem.SystemTimer + dt; + SecuritySystem.SystemTimer += dt; if (TestFlag(SecuritySystem.SystemType, 1) && TestFlag(SecuritySystem.Status, s_aware)) // jeśli świeci albo miga - SecuritySystem.SystemSoundCATimer = SecuritySystem.SystemSoundCATimer + dt; + SecuritySystem.SystemSoundCATimer += dt; if (TestFlag(SecuritySystem.SystemType, 1) && TestFlag(SecuritySystem.Status, s_CAalarm)) // jeśli buczy - SecuritySystem.SystemBrakeCATimer = SecuritySystem.SystemBrakeCATimer + dt; + SecuritySystem.SystemBrakeCATimer += dt; if (TestFlag(SecuritySystem.SystemType, 1)) if ((SecuritySystem.SystemTimer > SecuritySystem.AwareDelay) && (SecuritySystem.AwareDelay >= 0)) //-1 blokuje @@ -2156,10 +2171,10 @@ void TMoverParameters::SecuritySystemCheck(double dt) // SHP if (TestFlag(SecuritySystem.SystemType, 2) && TestFlag(SecuritySystem.Status, s_active)) // jeśli świeci albo miga - SecuritySystem.SystemSoundSHPTimer = SecuritySystem.SystemSoundSHPTimer + dt; + SecuritySystem.SystemSoundSHPTimer += dt; if (TestFlag(SecuritySystem.SystemType, 2) && TestFlag(SecuritySystem.Status, s_SHPalarm)) // jeśli buczy - SecuritySystem.SystemBrakeSHPTimer = SecuritySystem.SystemBrakeSHPTimer + dt; + SecuritySystem.SystemBrakeSHPTimer += dt; if (TestFlag(SecuritySystem.SystemType, 2) && TestFlag(SecuritySystem.Status, s_active)) if ((Vel > SecuritySystem.VelocityAllowed) && (SecuritySystem.VelocityAllowed >= 0)) SetFlag(SecuritySystem.Status, s_SHPebrake); @@ -2178,7 +2193,7 @@ void TMoverParameters::SecuritySystemCheck(double dt) // TEST CA if (TestFlag(SecuritySystem.Status, s_CAtest)) // jeśli świeci albo miga - SecuritySystem.SystemBrakeCATestTimer = SecuritySystem.SystemBrakeCATestTimer + dt; + SecuritySystem.SystemBrakeCATestTimer += dt; if (TestFlag(SecuritySystem.SystemType, 1)) if (TestFlag(SecuritySystem.Status, s_CAtest)) // juz wlaczony sygnal swietlny if ((SecuritySystem.SystemBrakeCATestTimer > SecuritySystem.EmergencyBrakeDelay) && @@ -2192,12 +2207,14 @@ void TMoverParameters::SecuritySystemCheck(double dt) } else if (!Battery) { // wyłączenie baterii deaktywuje sprzęt + EmergencyBrakeSwitch(false); // SecuritySystem.Status = 0; //deaktywacja czuwaka } } // ************************************************************************************************* // Q: 20160710 +// włączenie / wyłączenie baterii // ************************************************************************************************* bool TMoverParameters::BatterySwitch(bool State) { @@ -2214,7 +2231,7 @@ bool TMoverParameters::BatterySwitch(bool State) BS = true; if ((Battery) && (ActiveCab != 0)) /*|| (TrainType==dt_EZT)*/ - SecuritySystem.Status = (SecuritySystem.Status || s_waiting); // aktywacja czuwaka + SecuritySystem.Status = (SecuritySystem.Status | s_waiting); // aktywacja czuwaka else SecuritySystem.Status = 0; // wyłączenie czuwaka @@ -2223,6 +2240,7 @@ bool TMoverParameters::BatterySwitch(bool State) // ************************************************************************************************* // Q: 20160710 +// włączenie / wyłączenie hamulca elektro-pneumatycznego // ************************************************************************************************* bool TMoverParameters::EpFuseSwitch(bool State) { @@ -2239,6 +2257,7 @@ bool TMoverParameters::EpFuseSwitch(bool State) // ************************************************************************************************* // Q: 20160710 +// kierunek do tyłu // ************************************************************************************************* bool TMoverParameters::DirectionBackward(void) { @@ -2269,6 +2288,7 @@ bool TMoverParameters::DirectionBackward(void) // ************************************************************************************************* // Q: 20160710 +// załączenie przycisku przeciwpoślizgowego // ************************************************************************************************* bool TMoverParameters::AntiSlippingButton(void) { @@ -2280,17 +2300,19 @@ bool TMoverParameters::AntiSlippingButton(void) // ************************************************************************************************* // Q: 20160713 +// włączenie / wyłączenie obwodu głownego // ************************************************************************************************* bool TMoverParameters::MainSwitch(bool State) { - bool MS = false; + bool MS; MS = false; // Ra: przeniesione z końca if ((Mains != State) && (MainCtrlPosNo > 0)) { if ((State == false) || - ((ScndCtrlPos == 0) && (ConvOvldFlag == false) && (LastSwitchingTime > CtrlDelay) && - !TestFlag(DamageFlag, dtrain_out))) + ((ScndCtrlPos == 0) && ((ConvOvldFlag == false) || (TrainType == dt_EZT)) && + (LastSwitchingTime > CtrlDelay) && !TestFlag(DamageFlag, dtrain_out) && + !TestFlag(EngDmgFlag, 1))) { if (Mains) // jeśli był załączony SendCtrlToNext("MainSwitch", int(State), @@ -2305,7 +2327,9 @@ bool TMoverParameters::MainSwitch(bool State) { dizel_enginestart = State; } - // if (State=false) then //jeśli wyłączony + if (((TrainType == dt_EZT) && (!State))) + ConvOvldFlag = true; + // if (State=false) then //jeśli wyłączony // begin // SetFlag(SoundFlag,sound_relay); //hunter-091012: przeniesione do Train.cpp, zeby sie // nie zapetlal @@ -2323,6 +2347,7 @@ bool TMoverParameters::MainSwitch(bool State) // ************************************************************************************************* // Q: 20160713 +// włączenie / wyłączenie przetwornicy // ************************************************************************************************* bool TMoverParameters::ConverterSwitch(bool State) { @@ -2344,6 +2369,7 @@ bool TMoverParameters::ConverterSwitch(bool State) // ************************************************************************************************* // Q: 20160713 +// włączenie / wyłączenie sprężarki // ************************************************************************************************* bool TMoverParameters::CompressorSwitch(bool State) { @@ -2366,6 +2392,7 @@ bool TMoverParameters::CompressorSwitch(bool State) // ************************************************************************************************* // Q: 20160711 +// zwiększenie nastawy hamulca // ************************************************************************************************* bool TMoverParameters::IncBrakeLevelOld(void) { @@ -2401,20 +2428,21 @@ bool TMoverParameters::IncBrakeLevelOld(void) (BrakePressureTable[BrakeCtrlPos - 1].PipePressureVal > 0)) LimPipePress = PipePress; - if (BrakeSystem == ElectroPneumatic) - if (BrakeSubsystem != ss_K) - { - if ((BrakeCtrlPos * BrakeCtrlPos) == 1) - { - // SendCtrlToNext('Brake',BrakeCtrlPos,CabNo); - // SetFlag(BrakeStatus,b_epused); - } - else - { - // SendCtrlToNext('Brake',0,CabNo); - // SetFlag(BrakeStatus,-b_epused); - } - } + //ten kawałek jest bez sensu gdyż nic nie robił. Zakomntowałem. GF 20161124 + //if (BrakeSystem == ElectroPneumatic) + // if (BrakeSubsystem != ss_K) + // { + // if ((BrakeCtrlPos * BrakeCtrlPos) == 1) + // { + // // SendCtrlToNext('Brake',BrakeCtrlPos,CabNo); + // // SetFlag(BrakeStatus,b_epused); + // } + // else + // { + // // SendCtrlToNext('Brake',0,CabNo); + // // SetFlag(BrakeStatus,-b_epused); + // } + // } } else { @@ -2431,6 +2459,7 @@ bool TMoverParameters::IncBrakeLevelOld(void) // ***************************************************************************** // Q: 20160711 +// zmniejszenie nastawy hamulca // ***************************************************************************** bool TMoverParameters::DecBrakeLevelOld(void) { @@ -2442,11 +2471,11 @@ bool TMoverParameters::DecBrakeLevelOld(void) { BrakeCtrlPos--; // BrakeCtrlPosR:=BrakeCtrlPos; - if (EmergencyBrakeFlag) - { - EmergencyBrakeFlag = false; //!!! - SendCtrlToNext("Emergency_brake", 0, CabNo); - } + //if (EmergencyBrakeFlag) + //{ + // EmergencyBrakeFlag = false; //!!! + // SendCtrlToNext("Emergency_brake", 0, CabNo); + //} // youBy: wywalilem to, jak jest EP, to sa przenoszone sygnaly nt. co ma robic, a nie // poszczegolne pozycje; @@ -2473,20 +2502,21 @@ bool TMoverParameters::DecBrakeLevelOld(void) // (BrakePressureTable[BrakeCtrlPos+1].PipePressureVal > 0)) // LimPipePress:=PipePress; - if (BrakeSystem == ElectroPneumatic) - if (BrakeSubsystem != ss_K) - { - if ((BrakeCtrlPos * BrakeCtrlPos) == 1) - { - // SendCtrlToNext("Brake", BrakeCtrlPos, CabNo); - // SetFlag(BrakeStatus, b_epused); - } - else - { - // SendCtrlToNext("Brake", 0, CabNo); - // SetFlag(BrakeStatus, -b_epused); - } - } + // to nic nie robi. Zakomentowałem. GF 20161124 + //if (BrakeSystem == ElectroPneumatic) + // if (BrakeSubsystem != ss_K) + // { + // if ((BrakeCtrlPos * BrakeCtrlPos) == 1) + // { + // // SendCtrlToNext("Brake", BrakeCtrlPos, CabNo); + // // SetFlag(BrakeStatus, b_epused); + // } + // else + // { + // // SendCtrlToNext("Brake", 0, CabNo); + // // SetFlag(BrakeStatus, -b_epused); + // } + // } // for b:=0 to 1 do {poprawic to!} // with Couplers[b] do // if CouplingFlag and ctrain_controll=ctrain_controll then @@ -2504,6 +2534,7 @@ bool TMoverParameters::DecBrakeLevelOld(void) // ************************************************************************************************* // Q: 20160711 +// zwiększenie nastawy hamulca pomocnicznego // ************************************************************************************************* bool TMoverParameters::IncLocalBrakeLevel(int CtrlSpeed) { @@ -2526,6 +2557,7 @@ bool TMoverParameters::IncLocalBrakeLevel(int CtrlSpeed) // ************************************************************************************************* // Q: 20160711 +// zmniejszenie nastawy hamulca pomocniczego // ************************************************************************************************* bool TMoverParameters::DecLocalBrakeLevel(int CtrlSpeed) { @@ -2548,6 +2580,7 @@ bool TMoverParameters::DecLocalBrakeLevel(int CtrlSpeed) // ************************************************************************************************* // Q: 20160711 +// ustawienie pozycji kranu pomocniczego na masymalną wartość // ************************************************************************************************* bool TMoverParameters::IncLocalBrakeLevelFAST(void) { @@ -2565,6 +2598,7 @@ bool TMoverParameters::IncLocalBrakeLevelFAST(void) // ************************************************************************************************* // Q: 20160711 +// ustawienie pozycji hamulca pomocniczego na minimalną // ************************************************************************************************* bool TMoverParameters::DecLocalBrakeLevelFAST(void) { @@ -2582,6 +2616,7 @@ bool TMoverParameters::DecLocalBrakeLevelFAST(void) // ************************************************************************************************* // Q: 20160711 +// zwiększenie nastawy hamulca ręcznego // ************************************************************************************************* bool TMoverParameters::IncManualBrakeLevel(int CtrlSpeed) { @@ -2603,6 +2638,7 @@ bool TMoverParameters::IncManualBrakeLevel(int CtrlSpeed) // ************************************************************************************************* // Q: 20160711 +// zmniejszenie nastawy hamulca ręcznego // ************************************************************************************************* bool TMoverParameters::DecManualBrakeLevel(int CtrlSpeed) { @@ -2651,6 +2687,7 @@ bool TMoverParameters::DynamicBrakeSwitch(bool Switch) // ************************************************************************************************* // Q: 20160711 +// włączenie / wyłączenie hamowania awaryjnego // ************************************************************************************************* bool TMoverParameters::EmergencyBrakeSwitch(bool Switch) { @@ -2682,6 +2719,7 @@ bool TMoverParameters::EmergencyBrakeSwitch(bool Switch) // ************************************************************************************************* // Q: 20160710 +// hamowanie przeciwpoślizgowe // ************************************************************************************************* bool TMoverParameters::AntiSlippingBrake(void) { @@ -2697,10 +2735,11 @@ bool TMoverParameters::AntiSlippingBrake(void) // ************************************************************************************************* // Q: 20160711 +// włączenie / wyłączenie odluźniacza // ************************************************************************************************* bool TMoverParameters::BrakeReleaser(int state) { - bool OK; + bool OK = true; //false tylko jeśli nie uda się wysłać, GF 20161124 Hamulec->Releaser(state); if (CabNo != 0) // rekurencyjne wysłanie do następnego OK = SendCtrlToNext("BrakeReleaser", state, CabNo); @@ -2709,6 +2748,7 @@ bool TMoverParameters::BrakeReleaser(int state) // ************************************************************************************************* // Q: 20160711 +// włączenie / wyłączenie hamulca elektro-pneumatycznego // ************************************************************************************************* bool TMoverParameters::SwitchEPBrake(int state) { @@ -2718,10 +2758,10 @@ bool TMoverParameters::SwitchEPBrake(int state) OK = false; if ((BrakeHandle == St113) && (ActiveCab != 0)) { - // if(state > 0) - // temp = (Handle as TSt113).GetCP // TODO: przetlumaczyc - // else - temp = 0; + if (state > 0) + temp = Handle->GetCP(); // TODO: przetlumaczyc + else + temp = 0; Hamulec->SetEPS(temp); SendCtrlToNext("Brake", temp, CabNo); } @@ -2732,6 +2772,7 @@ bool TMoverParameters::SwitchEPBrake(int state) // ************************************************************************************************* // Q: 20160711 +// zwiększenie ciśnienia hamowania // ************************************************************************************************* bool TMoverParameters::IncBrakePress(double &brake, double PressLimit, double dp) { @@ -2763,6 +2804,7 @@ bool TMoverParameters::IncBrakePress(double &brake, double PressLimit, double dp // ************************************************************************************************* // Q: 20160711 +// zmniejszenie ciśnienia hamowania // ************************************************************************************************* bool TMoverParameters::DecBrakePress(double &brake, double PressLimit, double dp) { @@ -2789,12 +2831,23 @@ bool TMoverParameters::DecBrakePress(double &brake, double PressLimit, double dp // ************************************************************************************************* // Q: 20160711 +// przełączenie nastawy hamulca O/P/T // ************************************************************************************************* bool TMoverParameters::BrakeDelaySwitch(int BDS) { bool rBDS; // if (BrakeCtrlPosNo > 0) - if (Hamulec->SetBDF(BDS)) + if (BrakeHandle == MHZ_EN57) + { + if ((BDS != BrakeOpModeFlag) && ((BDS & BrakeOpModes) > 0)) + { + BrakeOpModeFlag = BDS; + rBDS = true; + } + else + rBDS = false; + } + else if (Hamulec->SetBDF(BDS)) { BrakeDelayFlag = BDS; rBDS = true; @@ -2810,6 +2863,7 @@ bool TMoverParameters::BrakeDelaySwitch(int BDS) // ************************************************************************************************* // Q: 20160712 +// zwiększenie przełożenia hamulca // ************************************************************************************************* bool TMoverParameters::IncBrakeMult(void) { @@ -2833,6 +2887,7 @@ bool TMoverParameters::IncBrakeMult(void) // ************************************************************************************************* // Q: 20160712 +// zmniejszenie przełożenia hamulca // ************************************************************************************************* bool TMoverParameters::DecBrakeMult(void) { @@ -2855,11 +2910,12 @@ bool TMoverParameters::DecBrakeMult(void) // ************************************************************************************************* // Q: 20160712 +// zaktualizowanie ciśnienia w hamulcach // ************************************************************************************************* void TMoverParameters::UpdateBrakePressure(double dt) { - const LBDelay = 5.0; // stala czasowa hamulca - double Rate, Speed, dp, sm; + //const double LBDelay = 5.0; // stala czasowa hamulca + //double Rate, Speed, dp, sm; dpLocalValve = 0; dpBrake = 0; @@ -2998,11 +3054,12 @@ void TMoverParameters::CompressorCheck(double dt) // ************************************************************************************************* // Q: 20160712 +// aktualizacja ciśnienia w przewodzie głównym // ************************************************************************************************* void TMoverParameters::UpdatePipePressure(double dt) { - const LBDelay = 100; - const kL = 0.5; + const double LBDelay = 100; + const double kL = 0.5; double dV; TMoverParameters *c; // T_MoverParameters double temp; @@ -3013,21 +3070,32 @@ void TMoverParameters::UpdatePipePressure(double dt) dpMainValve = 0; - if ((BrakeCtrlPosNo > 1) && (ActiveCab != 0)) + if ((BrakeCtrlPosNo > 1) /*&& (ActiveCab != 0)*/) // with BrakePressureTable[BrakeCtrlPos] do { - dpLocalValve = LocHandle->GetPF(LocalBrakePos / LocalBrakePosNo, Hamulec->GetBCP(), - ScndPipePress, dt, 0); + if ((EngineType != ElectricInductionMotor)) + dpLocalValve = + LocHandle->GetPF(Max0R(LocalBrakePos * 1.0 / LocalBrakePosNo, LocalBrakePosA), + Hamulec->GetBCP, ScndPipePress, dt, 0); + else + dpLocalValve = + LocHandle->GetPF(LocalBrakePosA, Hamulec->GetBCP(), ScndPipePress, dt, 0); if ((BrakeHandle == FV4a) && - ((PipePress < 2.75) && ((Hamulec->GetStatus() && b_rls) == 0)) && + ((PipePress < 2.75) && ((Hamulec->GetStatus() & b_rls) == 0)) && (BrakeSubsystem == ss_LSt) && (TrainType != dt_EZT)) temp = PipePress + 0.00001; else temp = ScndPipePress; Handle->SetReductor(BrakeCtrlPos2); - dpMainValve = Handle->GetPF(BrakeCtrlPosR, PipePress, temp, dt, EqvtPipePress); - if (dpMainValve < 0) // && (PipePressureVal > 0.01) //50 + if ((BrakeOpModeFlag != bom_PS)) + if ((BrakeOpModeFlag < bom_EP) || (Handle->GetPos(bh_EB) - 0.5 < BrakeCtrlPosR) || + (BrakeHandle != MHZ_EN57)) + dpMainValve = Handle->GetPF(BrakeCtrlPosR, PipePress, temp, dt, EqvtPipePress); + else + dpMainValve = Handle->GetPF(0, PipePress, temp, dt, EqvtPipePress); + + if (dpMainValve < 0) // && (PipePressureVal > 0.01) //50 if (Compressor > ScndPipePress) { CompressedVolume = CompressedVolume + dpMainValve / 1500; @@ -3040,10 +3108,9 @@ void TMoverParameters::UpdatePipePressure(double dt) // if(EmergencyBrakeFlag)and(BrakeCtrlPosNo=0)then //ulepszony hamulec bezp. if ((EmergencyBrakeFlag) || (TestFlag(SecuritySystem.Status, s_SHPebrake)) || (TestFlag(SecuritySystem.Status, s_CAebrake)) || - (s_CAtestebrake == true)) // ulepszony hamulec bezp. - dpMainValve = dpMainValve / 1 + - PF(0, PipePress, 0.15, 0.25) * - dt; // Q: dodalem 4 paraMETR 0.25 bo wywalalo ze za malo parametrow + (s_CAtestebrake == true) || + (TestFlag(EngDmgFlag, 32)) /* or (not Battery)*/) // ulepszony hamulec bezp. + dpMainValve = dpMainValve + PF(0, PipePress, 0.15) * dt; // 0.2*Spg Pipe->Flow(-dpMainValve); Pipe->Flow(-(PipePress)*0.001 * dt); @@ -3066,14 +3133,14 @@ void TMoverParameters::UpdatePipePressure(double dt) LocBrakePress = LocHandle->GetCP(); //(Hamulec as TWest).SetLBP(LocBrakePress); - static_cast(Hamulec)->SetLBP(LocBrakePress); + Hamulec->SetLBP(LocBrakePress); } if (MBPM < 2) //(Hamulec as TWest).PLC(MaxBrakePress[LoadFlag]) - static_cast(Hamulec)->PLC(MaxBrakePress[LoadFlag]); + Hamulec->PLC(MaxBrakePress[LoadFlag]); else //(Hamulec as TWest).PLC(TotalMass); - static_cast(Hamulec)->PLC(TotalMass); + Hamulec->PLC(TotalMass); break; } @@ -3081,36 +3148,45 @@ void TMoverParameters::UpdatePipePressure(double dt) case EStED: { LocBrakePress = LocHandle->GetCP(); - for (int b = 0; b < 1; b++) - if (((TrainType && (dt_ET41 || dt_ET42)) > 0) && + for (int b = 0; b < 2; b++) + if (((TrainType & (dt_ET41 | dt_ET42)) != 0) && (Couplers[b].Connected != NULL)) // nie podoba mi się to rozwiązanie, chyba trzeba // dodać jakiś wpis do fizyki na to - if (((Couplers[b].Connected->TrainType && (dt_ET41 || dt_ET42)) > 0) && + if (((Couplers[b].Connected->TrainType & (dt_ET41 | dt_ET42)) != 0) && ((Couplers[b].CouplingFlag & 36) == 36)) LocBrakePress = Max0R(Couplers[b].Connected->LocHandle->GetCP(), LocBrakePress); - if ((DynamicBrakeFlag) && (EngineType == ElectricInductionMotor)) - { - if (Vel > 10) - LocBrakePress = 0; - else if (Vel > 5) - LocBrakePress = (10 - Vel) / 5 * LocBrakePress; - } + //if ((DynamicBrakeFlag) && (EngineType == ElectricInductionMotor)) + //{ + // //if (Vel > 10) + // // LocBrakePress = 0; + // //else if (Vel > 5) + // // LocBrakePress = (10 - Vel) / 5 * LocBrakePress; + //} //(Hamulec as TLSt).SetLBP(LocBrakePress); - static_cast(Hamulec)->SetLBP(LocBrakePress); - break; + Hamulec->SetLBP(LocBrakePress); + if ((BrakeValve == EStED)) + if (MBPM < 2) + Hamulec->PLC(MaxBrakePress[LoadFlag]); + else + Hamulec->PLC(TotalMass); + break; } case CV1_L_TR: { LocBrakePress = LocHandle->GetCP(); //(Hamulec as TCV1L_TR).SetLBP(LocBrakePress); - static_cast(Hamulec)->SetLBP(LocBrakePress); + Hamulec->SetLBP(LocBrakePress); break; } - // EP2: (Hamulec as TEStEP2).PLC(TotalMass); + case EP2: + { + Hamulec->PLC(TotalMass); + break; + } case ESt3AL2: case NESt3: case ESt4: @@ -3118,26 +3194,26 @@ void TMoverParameters::UpdatePipePressure(double dt) { if (MBPM < 2) //(Hamulec as TNESt3).PLC(MaxBrakePress[LoadFlag]) - static_cast(Hamulec)->PLC(MaxBrakePress[LoadFlag]); + Hamulec->PLC(MaxBrakePress[LoadFlag]); else //(Hamulec as TNESt3).PLC(TotalMass); - static_cast(Hamulec)->PLC(TotalMass); + Hamulec->PLC(TotalMass); LocBrakePress = LocHandle->GetCP(); //(Hamulec as TNESt3).SetLBP(LocBrakePress); - static_cast(Hamulec)->SetLBP(LocBrakePress); + Hamulec->SetLBP(LocBrakePress); break; } case KE: { LocBrakePress = LocHandle->GetCP(); //(Hamulec as TKE).SetLBP(LocBrakePress); - static_cast(Hamulec)->SetLBP(LocBrakePress); + Hamulec->SetLBP(LocBrakePress); if (MBPM < 2) //(Hamulec as TKE).PLC(MaxBrakePress[LoadFlag]) - static_cast(Hamulec)->PLC(MaxBrakePress[LoadFlag]); + Hamulec->PLC(MaxBrakePress[LoadFlag]); else //(Hamulec as TKE).PLC(TotalMass); - static_cast(Hamulec)->PLC(TotalMass); + Hamulec->PLC(TotalMass); break; } } // switch @@ -3147,7 +3223,7 @@ void TMoverParameters::UpdatePipePressure(double dt) if ((Battery) && (ActiveDir != 0) && (EpFuse)) // tu powinien byc jeszcze bezpiecznik EP i baterie - // temp = (Handle as TFVel6).GetCP - temp = static_cast(Handle)->GetCP(); + temp = Handle->GetCP(); else temp = 0; Hamulec->SetEPS(temp); @@ -3251,6 +3327,7 @@ void TMoverParameters::UpdateScndPipePressure(double dt) // ************************************************************************************************* // Q: 20160715 +// oblicza i zwraca przepływ powietrza pomiędzy pojazdami // ************************************************************************************************* double TMoverParameters::GetDVc(double dt) { @@ -3265,7 +3342,7 @@ double TMoverParameters::GetDVc(double dt) if (TestFlag(Couplers[0].CouplingFlag, ctrain_pneumatic)) { //*0.85 c = Couplers[0].Connected; // skrot //0.08 //e/D * L/D = e/D^2 * L - dv1 = 0.5 * dt * PF(PipePress, c->PipePress, (Spg) / (1 + 0.015 / Spg * Dim.L), 0.25); + dv1 = 0.5 * dt * PF(PipePress, c->PipePress, (Spg) / (1 + 0.015 / Spg * Dim.L)); if (dv1 * dv1 > 0.00000000000001) c->Physic_ReActivation(); c->Pipe->Flow(-dv1); @@ -3275,21 +3352,21 @@ double TMoverParameters::GetDVc(double dt) if (TestFlag(Couplers[1].CouplingFlag, ctrain_pneumatic)) { c = Couplers[1].Connected; // skrot - dv2 = 0.5 * dt * PF(PipePress, c->PipePress, (Spg) / (1 + 0.015 / Spg * Dim.L), 0.25); + dv2 = 0.5 * dt * PF(PipePress, c->PipePress, (Spg) / (1 + 0.015 / Spg * Dim.L)); if (dv2 * dv2 > 0.00000000000001) c->Physic_ReActivation(); c->Pipe->Flow(-dv2); } - if ((Couplers[1].Connected != NULL) && (Couplers[0].Connected != NULL)) - if ((TestFlag(Couplers[0].CouplingFlag, ctrain_pneumatic)) && - (TestFlag(Couplers[1].CouplingFlag, ctrain_pneumatic))) - { - dV = 0.05 * dt * PF(Couplers[0].Connected->PipePress, Couplers[1].Connected->PipePress, - (Spg * 0.85) / (1 + 0.03 * Dim.L), 0.25) * - 0; - Couplers[0].Connected->Pipe->Flow(+dV); - Couplers[1].Connected->Pipe->Flow(-dV); - } + //if ((Couplers[1].Connected != NULL) && (Couplers[0].Connected != NULL)) + // if ((TestFlag(Couplers[0].CouplingFlag, ctrain_pneumatic)) && + // (TestFlag(Couplers[1].CouplingFlag, ctrain_pneumatic))) + // { + // dV = 0.05 * dt * PF(Couplers[0].Connected->PipePress, Couplers[1].Connected->PipePress, + // (Spg * 0.85) / (1 + 0.03 * Dim.L)) * + // 0; // ktoś mi powie jaki jest sens tego bloku jeśli przepływ mnożony przez zero? + // Couplers[0].Connected->Pipe->Flow(+dV); + // Couplers[1].Connected->Pipe->Flow(-dV); + // } // suma return dv2 + dv1; } diff --git a/McZapkie/hamulce.h b/McZapkie/hamulce.h index d7833f74..1396b01f 100644 --- a/McZapkie/hamulce.h +++ b/McZapkie/hamulce.h @@ -208,11 +208,11 @@ Knorr/West EP - //maksymalne cisnienie, promien, skok roboczy, pojemnosc ZP; //ilosc cylindrow, opoznienia hamulca, material klockow, osie hamowane, klocki na os; - virtual double GetFC(double Vel, double N); //wspolczynnik tarcia - hamulec wie lepiej + double GetFC(double Vel, double N); //wspolczynnik tarcia - hamulec wie lepiej virtual double GetPF(double PP, double dt, double Vel); //przeplyw miedzy komora wstepna i PG double GetBCF(); //sila tlokowa z tloka virtual double GetHPFlow(double HP, double dt); //przeplyw - 8 bar - virtual double GetBCP(); //cisnienie cylindrow hamulcowych + double GetBCP(); //cisnienie cylindrow hamulcowych double GetBRP(); //cisnienie zbiornika pomocniczego double GetVRP(); //cisnienie komory wstepnej rozdzielacza virtual double GetCRP(); //cisnienie zbiornika sterujacego @@ -221,6 +221,8 @@ Knorr/West EP - virtual void SetEPS(double nEPS); //hamulec EP virtual void SetRM(double RMR) {}; //ustalenie przelozenia rapida virtual void SetLP(double TM, double LM, double TBP) {}; //parametry przystawki wazacej + virtual void SetLBP(double P) {}; //cisnienie z hamulca pomocniczego + virtual void PLC(double mass) {}; //wspolczynnik cisnienia przystawki wazacej void ASB(int state); //hamulec przeciwposlizgowy int GetStatus(); //flaga statusu, moze sie przydac do odglosow void SetASBP(double Press); //ustalenie cisnienia pp @@ -585,8 +587,8 @@ Knorr/West EP - virtual double GetCP(); virtual void SetReductor(double nAdj); virtual double GetSound(int i); - static double GetPos(int i); - double GetEP(double pos); + virtual double GetPos(int i); + virtual double GetEP(double pos); };