diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index 4d74017d..d7b360db 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -99,7 +99,7 @@ double TMoverParameters::current(double n, double U) double R, MotorCurrent; double Rz, Delta, Isf; - int Mn; + double Mn; // przujmuje int, ale dla poprawnosci obliczeń double Bn; int SP; double U1; // napiecie z korekta @@ -136,7 +136,7 @@ double TMoverParameters::current(double n, double U) (ResistorsFlag || ((DynamicBrakeFlag == true) && (DynamicBrakeType == dbrake_automatic))); if ((TrainType == dt_ET22) && (DelayCtrlFlag) && (MainCtrlActualPos > 1)) - Bn = 1 - 1 / RList[MainCtrlActualPos].Bn; + Bn = 1.0 - 1.0 / RList[MainCtrlActualPos].Bn; else Bn = 1; // to jest wykonywane dla EU07 @@ -169,7 +169,7 @@ double TMoverParameters::current(double n, double U) { MotorCurrent = -Max0R(MotorParam[0].fi * (Vadd / (Vadd + MotorParam[0].Isat) - MotorParam[0].fi0), 0) * - n * 2 / ep09resED; // TODO: zrobic bardziej uniwersalne nie tylko dla EP09 + n * 2.0 / ep09resED; // TODO: zrobic bardziej uniwersalne nie tylko dla EP09 } else if ((RList[MainCtrlActualPos].Bn == 0) || (!StLinFlag)) MotorCurrent = 0; // wylaczone @@ -216,7 +216,7 @@ double TMoverParameters::current(double n, double U) Isf = Sign(U1) * MotorParam[SP].Isat; // writepaslog("Isf ", FloatToStr(Isf)); Delta = sqr(Isf * Rz + Mn * MotorParam[SP].fi * n - U1) + - 4 * U1 * Isf * Rz; // 105 * 1.67 + Mn * 140.9 * 20.532 - U1 + 4.0 * U1 * Isf * Rz; // 105 * 1.67 + Mn * 140.9 * 20.532 - U1 // DeltaQ = Isf * Rz + Mn * MotorParam[SP].fi * n - U1 + 4 * U1 * Isf * Rz; // writepaslog("Delta ", FloatToStr(Delta)); // writepaslog("DeltaQ ", FloatToStr(DeltaQ)); @@ -261,7 +261,7 @@ double TMoverParameters::current(double n, double U) if (MainSwitch(false)) EventFlag = true; /*zbyt duze obroty - wywalanie wskutek ognia okreznego*/ if (TestFlag(DamageFlag, dtrain_engine)) - if (FuzzyLogic(MotorCurrent, ImaxLo / 10.0, p_elengproblem)) + if (FuzzyLogic(MotorCurrent, (double)ImaxLo / 10.0, p_elengproblem)) if (MainSwitch(false)) EventFlag = true; /*uszkodzony silnik (uplywy)*/ if ((FuzzyLogic(abs(Im), Imax * 2, p_elengproblem) || @@ -1034,13 +1034,13 @@ void TMoverParameters::UpdatePantVolume(double dt) .MaxPress; // ograniczenie ciśnienia do MaxPress (tylko w pantografach!) if (PantPress > ScndPipePress) PantPress = ScndPipePress; // oraz do ScndPipePress - PantVolume = (PantPress + 1) * 0.1; // objętość, na wypadek odcięcia kurkiem + PantVolume = (PantPress + 1.0) * 0.1; // objętość, na wypadek odcięcia kurkiem } else { // zbiornik główny odcięty, można pompować pantografy if (PantCompFlag && Battery) // włączona bateria i mała sprężarka PantVolume += dt * (TrainType == dt_EZT ? 0.003 : 0.005) * - (2 * 0.45 - ((0.1 / PantVolume / 10) - 0.1)) / + (2.0 * 0.45 - ((0.1 / PantVolume / 10) - 0.1)) / 0.45; // napełnianie zbiornika pantografów // Ra 2013-12: Niebugocław mówi, że w EZT nabija 1.5 raz wolniej niż jak było 0.005 PantPress = (10.0 * PantVolume) - 1.0; // tu by się przydała objętość zbiornika @@ -1207,7 +1207,7 @@ double TMoverParameters::LocalBrakeRatio(void) else { if (LocalBrakePosNo > 0) - LBR = LocalBrakePos / LocalBrakePosNo; + LBR = (double)LocalBrakePos / LocalBrakePosNo; else LBR = 0; } @@ -1225,7 +1225,7 @@ double TMoverParameters::ManualBrakeRatio(void) double MBR; if (ManualBrakePosNo > 0) - MBR = ManualBrakePos / ManualBrakePosNo; + MBR = (double)ManualBrakePos / ManualBrakePosNo; else MBR = 0; return MBR; @@ -1269,7 +1269,7 @@ double TMoverParameters::PipeRatio(void) if (DeltaPipePress > 0) if (false) // SPKS!! no to jak nie wchodzimy to po co branch? { - if ((3 * PipePress) > (HighPipePress + LowPipePress + LowPipePress)) + if ((3.0 * PipePress) > (HighPipePress + LowPipePress + LowPipePress)) pr = (HighPipePress - Min0R(HighPipePress, PipePress)) / (DeltaPipePress * 4.0 / 3.0); else @@ -1333,7 +1333,7 @@ void TMoverParameters::CollisionDetect(int CouplerN, double dt) AccS = AccS + (V - Vprev) / dt; // korekta przyspieszenia o siły wynikające ze zderzeń? Couplers[CouplerN].Connected->AccS += (Couplers[CouplerN].Connected->V - VprevC) / dt; if ((Couplers[CouplerN].Dist > 0) && (!VirtualCoupling)) - if (FuzzyLogic(abs(CCF), 5 * (Couplers[CouplerN].FmaxC + 1), p_coupldmg)) + if (FuzzyLogic(abs(CCF), 5.0 * (Couplers[CouplerN].FmaxC + 1.0), p_coupldmg)) { //! zerwanie sprzegu if (SetFlag(DamageFlag, dtrain_coupling)) EventFlag = true; @@ -1469,20 +1469,20 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap AccN = g * Shape.dHrail / TrackW; // szarpanie - if (FuzzyLogic((10 + Track.DamageFlag) * Mass * Vel / Vmax, 500000, + if (FuzzyLogic((10.0 + Track.DamageFlag) * Mass * Vel / Vmax, 500000.0, p_accn)) // Ra: czemu tu masa bez ładunku? - AccV = sqrt((1 + Track.DamageFlag) * Random(floor(50 * Mass / 1000000.0)) * Vel / - (Vmax * (10 + (Track.QualityFlag & 31)))); + AccV = sqrt((1.0 + Track.DamageFlag) * Random(floor(50.0 * Mass / 1000000.0)) * Vel / + (Vmax * (10.0 + (Track.QualityFlag & 31)))); else AccV = AccV / 2.0; if (AccV > 1.0) - AccN += (7 - Random(5)) * (100.0 + Track.DamageFlag / 2.0) * AccV / 2000.0; + AccN += (7.0 - Random(5)) * (100.0 + Track.DamageFlag / 2.0) * AccV / 2000.0; // wykolejanie na luku oraz z braku szyn if (TestFlag(CategoryFlag, 1)) { - if (FuzzyLogic((AccN / g) * (1 + 0.1 * (Track.DamageFlag && dtrack_freerail)), + if (FuzzyLogic((AccN / g) * (1.0 + 0.1 * (Track.DamageFlag && dtrack_freerail)), TrackW / Dim.H, 1) || TestFlag(Track.DamageFlag, dtrack_norail)) if (SetFlag(DamageFlag, dtrain_out)) @@ -1514,7 +1514,7 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap DerailReason = 4; // Ra: powód wykolejenia: nieodpowiednia trajektoria } - V += (3 * AccS - AccSprev) * dt / 2.0; // przyrost predkosci + V += (3.0 * AccS - AccSprev) * dt / 2.0; // przyrost predkosci if (TestFlag(DamageFlag, dtrain_out)) if (Vel < 1) @@ -1531,7 +1531,7 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap // { dL:=(V+AccS*dt/2)*dt; //przyrost dlugosci czyli // przesuniecie - dL = (3 * V - Vprev) * dt / 2.0; // metoda Adamsa-Bashfortha} + dL = (3.0 * V - Vprev) * dt / 2.0; // metoda Adamsa-Bashfortha} // ale jesli jest kolizja (zas. zach. pedu) to...} for (b = 0; b < 2; b++) if (Couplers[b].CheckCollision) @@ -1543,7 +1543,7 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap UpdatePantVolume(dt); // Ra 2014-07: obsługa zbiornika rozrządu oraz pantografów if (EngineType == WheelsDriven) - d = CabNo * dL; // na chwile dla testu + d = (double)CabNo * dL; // na chwile dla testu else d = dL; DistCounter += fabs(dL) / 1000.0; @@ -1644,16 +1644,16 @@ double TMoverParameters::FastComputeMovement(double dt, const TTrackShape &Shape // else AccN:=g*Shape.dHrail/TrackW; // szarpanie} - if (FuzzyLogic((10 + Track.DamageFlag) * Mass * Vel / Vmax, 500000, p_accn)) + if (FuzzyLogic((10.0 + Track.DamageFlag) * Mass * Vel / Vmax, 500000.0, p_accn)) { - AccV = sqrt((1 + Track.DamageFlag) * Random(floor(50 * Mass / 1000000.0)) * Vel / - (Vmax * (10 + (Track.QualityFlag & 31)))); // Trunc na floor, czy dobrze? + AccV = sqrt((1.0 + Track.DamageFlag) * Random(floor(50.0 * Mass / 1000000.0)) * Vel / + (Vmax * (10.0 + (Track.QualityFlag & 31)))); // Trunc na floor, czy dobrze? } else AccV = AccV / 2.0; if (AccV > 1.0) - AccN += (7 - Random(5)) * (100.0 + Track.DamageFlag / 2.0) * AccV / 2000.0; + AccN += (7.0 - Random(5)) * (100.0 + Track.DamageFlag / 2.0) * AccV / 2000.0; // {wykolejanie na luku oraz z braku szyn} // if TestFlag(CategoryFlag,1) then @@ -1698,7 +1698,7 @@ double TMoverParameters::FastComputeMovement(double dt, const TTrackShape &Shape V = 0; AccS = 0; } - dL = (3 * V - Vprev) * dt / 2.0; // metoda Adamsa-Bashfortha + dL = (3.0 * V - Vprev) * dt / 2.0; // metoda Adamsa-Bashfortha // ale jesli jest kolizja (zas. zach. pedu) to... for (b = 0; b < 2; b++) if (Couplers[b].CheckCollision) @@ -1709,7 +1709,7 @@ double TMoverParameters::FastComputeMovement(double dt, const TTrackShape &Shape if (Power > 1.0) // w rozrządczym nie (jest błąd w FIZ!) UpdatePantVolume(dt); // Ra 2014-07: obsługa zbiornika rozrządu oraz pantografów if (EngineType == WheelsDriven) - d = CabNo * dL; // na chwile dla testu + d = (double)CabNo * dL; // na chwile dla testu else d = dL; DistCounter += fabs(dL) / 1000.0; @@ -2505,10 +2505,7 @@ bool TMoverParameters::DirectionBackward(void) // ************************************************************************************************* bool TMoverParameters::AntiSlippingButton(void) { - bool OK = false; - - OK = SandDoseOn(); - return (AntiSlippingBrake() || OK); + return (AntiSlippingBrake() || SandDoseOn()); } // ************************************************************************************************* @@ -3155,12 +3152,12 @@ void TMoverParameters::CompressorCheck(double dt) if (Compressor < MaxCompressor) if ((EngineType == DieselElectric) && (CompressorPower > 0)) CompressedVolume += dt * CompressorSpeed * - (2 * MaxCompressor - Compressor) / MaxCompressor * + (2.0 * MaxCompressor - Compressor) / MaxCompressor * (DElist[MainCtrlPos].RPM / DElist[MainCtrlPosNo].RPM); else { CompressedVolume += - dt * CompressorSpeed * (2 * MaxCompressor - Compressor) / MaxCompressor; + dt * CompressorSpeed * (2.0 * MaxCompressor - Compressor) / MaxCompressor; TotalCurrent += 0.0015 * Voltage; // tymczasowo tylko obciążenie sprężarki, tak z 5A na sprężarkę } @@ -3235,13 +3232,13 @@ void TMoverParameters::CompressorCheck(double dt) // Connected.CompressorFlag:=CompressorFlag; if (CompressorFlag) if ((EngineType == DieselElectric) && (CompressorPower > 0)) - CompressedVolume += dt * CompressorSpeed * (2 * MaxCompressor - Compressor) / + CompressedVolume += dt * CompressorSpeed * (2.0 * MaxCompressor - Compressor) / MaxCompressor * (DElist[MainCtrlPos].RPM / DElist[MainCtrlPosNo].RPM); else { CompressedVolume += - dt * CompressorSpeed * (2 * MaxCompressor - Compressor) / MaxCompressor; + dt * CompressorSpeed * (2.0 * MaxCompressor - Compressor) / MaxCompressor; if ((CompressorPower == 5) && (Couplers[1].Connected != NULL)) Couplers[1].Connected->TotalCurrent += 0.0015 * Couplers[1].Connected->Voltage; // tymczasowo tylko obciążenie @@ -3297,7 +3294,7 @@ void TMoverParameters::UpdatePipePressure(double dt) Handle->SetReductor(BrakeCtrlPos2); if ((BrakeOpModeFlag != bom_PS)) - if ((BrakeOpModeFlag < bom_EP) || (Handle->GetPos(bh_EB) - 0.5 < BrakeCtrlPosR) || + if ((BrakeOpModeFlag < bom_EP) || ((Handle->GetPos(bh_EB) - 0.5) < BrakeCtrlPosR) || (BrakeHandle != MHZ_EN57)) dpMainValve = Handle->GetPF(BrakeCtrlPosR, PipePress, temp, dt, EqvtPipePress); else @@ -3306,8 +3303,8 @@ void TMoverParameters::UpdatePipePressure(double dt) if (dpMainValve < 0) // && (PipePressureVal > 0.01) //50 if (Compressor > ScndPipePress) { - CompressedVolume = CompressedVolume + dpMainValve / 1500; - Pipe2->Flow(dpMainValve / 3); + CompressedVolume = CompressedVolume + dpMainValve / 1500.0; + Pipe2->Flow(dpMainValve / 3.0); } else Pipe2->Flow(dpMainValve); @@ -3517,7 +3514,7 @@ void TMoverParameters::UpdateScndPipePressure(double dt) if (((Compressor > ScndPipePress) && (CompressorSpeed > 0.0001)) || (TrainType == dt_EZT)) { dV = PF(Compressor, ScndPipePress, Spz) * dt; - CompressedVolume += dV / 1000; + CompressedVolume += dV / 1000.0; Pipe2->Flow(-dV); } @@ -3550,7 +3547,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)); + dv1 = 0.5 * dt * PF(PipePress, c->PipePress, (Spg) / (1.0 + 0.015 / Spg * Dim.L)); if (dv1 * dv1 > 0.00000000000001) c->Physic_ReActivation(); c->Pipe->Flow(-dv1); @@ -3560,7 +3557,7 @@ 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)); + dv2 = 0.5 * dt * PF(PipePress, c->PipePress, (Spg) / (1.0 + 0.015 / Spg * Dim.L)); if (dv2 * dv2 > 0.00000000000001) c->Physic_ReActivation(); c->Pipe->Flow(-dv2); @@ -3591,7 +3588,7 @@ void TMoverParameters::ComputeConstans(void) TotalCurrent = 0; // Ra 2014-04: tu zerowanie, aby EZT mogło pobierać prąd innemu członowi TotalMass = ComputeMass(); TotalMassxg = TotalMass * g; // TotalMass*g - BearingF = 2 * (DamageFlag && dtrain_bearing); + BearingF = 2.0 * (DamageFlag && dtrain_bearing); HideModifier = 0; // int(Couplers[0].CouplingFlag>0)+int(Couplers[1].CouplingFlag>0); @@ -3775,10 +3772,9 @@ void TMoverParameters::ComputeTotalForce(double dt, double dt1, bool FullVer) // ************************************************************************************************* double TMoverParameters::BrakeForce(const TTrackParam &Track) { - double K, Fb, NBrakeAxles, sm; + double K, Fb, NBrakeAxles, sm = 0; // const OerlikonForceFactor=1.5; - K = 0; if (NPoweredAxles > 0) NBrakeAxles = NPoweredAxles; else @@ -3814,8 +3810,8 @@ double TMoverParameters::BrakeForce(const TTrackParam &Track) else { u = (BrakePress * P2FTrans) * BrakeCylMult[0] - BrakeSlckAdj; - if (u * (2 - BrakeRigEff) < Ntotal) // histereza na nacisku klockow - Ntotal = u * (2 - BrakeRigEff); + if (u * (2.0 - BrakeRigEff) < Ntotal) // histereza na nacisku klockow + Ntotal = u * (2.0 - BrakeRigEff); } if (NBrakeAxles * NBpA > 0) @@ -3827,11 +3823,11 @@ double TMoverParameters::BrakeForce(const TTrackParam &Track) if ((BrakeSystem == Pneumatic) || (BrakeSystem == ElectroPneumatic)) { u = Hamulec->GetFC(Vel, K); - UnitBrakeForce = u * K * 1000; // sila na jeden klocek w N + UnitBrakeForce = u * K * 1000.0; // sila na jeden klocek w N } else - UnitBrakeForce = K * 1000; - if ((NBpA * UnitBrakeForce > TotalMassxg * Adhesive(RunningTrack.friction) / NAxles) && + UnitBrakeForce = K * 1000.0; + if (((double)NBpA * UnitBrakeForce > TotalMassxg * Adhesive(RunningTrack.friction) / NAxles) && (abs(V) > 0.001)) // poslizg { @@ -3883,15 +3879,15 @@ double TMoverParameters::Adhesive(double staticfriction) adhesive = (Max0R(staticfriction * (100.0 + Vel) / ((50.0 + Vel) * 11.0), 0.048)) * (11.0 - 2.0 * Random(0.0, 1.0)); else - adhesive = (staticfriction * (100.0 + Vel) / ((50.0 + Vel) * 10)) * + adhesive = (staticfriction * (100.0 + Vel) / ((50.0 + Vel) * 10.0)) * (11.0 - 2.0 * Random(0.0, 1.0)); } else { if (SandDose) - adhesive = (0.048) * (11 - 2 * Random(0.0, 1.0)); + adhesive = (0.048) * (11.0 - 2.0 * Random(0.0, 1.0)); else - adhesive = (staticfriction * 0.02) * (11 - 2 * Random(0.0, 1.0)); + adhesive = (staticfriction * 0.02) * (11.0 - 2.0 * Random(0.0, 1.0)); } // WriteLog(FloatToStr(adhesive)); // tutaj jest na poziomie 0.2 - 0.3 return adhesive; @@ -3928,13 +3924,12 @@ double DirF(int CouplerN) double TMoverParameters::CouplerForce(int CouplerN, double dt) { // wyliczenie siły na sprzęgu - double tempdist, newdist, distDelta, CF, dV, absdV, Fmax, BetaAvg; - int CNext; + double tempdist, newdist, distDelta, CF, dV, absdV, Fmax, BetaAvg = 0; + int CNext = 0; const double MaxDist = 405.0; // ustawione + 5 m, bo skanujemy do 400 m const double MinDist = 0.5; // ustawione +.5 m, zeby nie rozlaczac przy malych odleglosciach const int MaxCount = 1500; - bool rCF; - CF = 0; + bool rCF = false; // distDelta:=0; //Ra: value never used CNext = Couplers[CouplerN].ConnectedNr; // if (Couplers[CouplerN].CForce == 0) //nie bylo uzgadniane wiec policz @@ -3994,7 +3989,7 @@ double TMoverParameters::CouplerForce(int CouplerN, double dt) Couplers[CouplerN].Connected->Couplers[CNext].FmaxB) * CouplerTune / 2.0; } - dV = V - DirPatch(CouplerN, CNext) * Couplers[CouplerN].Connected->V; + dV = V - (double)DirPatch(CouplerN, CNext) * Couplers[CouplerN].Connected->V; absdV = abs(dV); if ((newdist < -0.001) && (Couplers[CouplerN].Dist >= -0.001) && (absdV > 0.010)) // 090503: dzwieki pracy zderzakow @@ -4061,7 +4056,7 @@ double TMoverParameters::CouplerForce(int CouplerN, double dt) 0)) // sprzeganie wagonow z samoczynnymi sprzegami} // CouplingFlag:=ctrain_coupler+ctrain_pneumatic+ctrain_controll+ctrain_passenger+ctrain_scndpneumatic; Couplers[CouplerN].CouplingFlag = - ctrain_coupler + ctrain_pneumatic + ctrain_controll; // EN57 + ctrain_coupler | ctrain_pneumatic | ctrain_controll; // EN57 } } } @@ -4113,7 +4108,7 @@ double TMoverParameters::TractionForce(double dt) dtrans = AnPos * Transmision.Ratio * MotorParam[ScndCtrlActualPos].mIsat; else dtrans = Transmision.Ratio * MotorParam[ScndCtrlActualPos].mIsat; - dmoment = dizel_Momentum(dizel_fill, ActiveDir * dtrans * nrot, dt); // oblicza tez + dmoment = dizel_Momentum(dizel_fill, dtrans * nrot * ActiveDir, dt); // oblicza tez // enrot } @@ -4133,7 +4128,7 @@ double TMoverParameters::TractionForce(double dt) if (ActiveDir != 0) RventRot += (RVentnmax - RventRot) * RVentSpeed * dt; else - RventRot *= (1 - RVentSpeed * dt); + RventRot *= (1.0 - RVentSpeed * dt); break; } case 2: @@ -4146,7 +4141,7 @@ double TMoverParameters::TractionForce(double dt) RventRot += (RVentnmax * Im / ImaxLo - RventRot) * RVentSpeed * dt; else { - RventRot = RventRot * (1 - RVentSpeed * dt); + RventRot = RventRot * (1.0 - RVentSpeed * dt); if (RventRot < 0.1) RventRot = 0; } @@ -4173,7 +4168,7 @@ double TMoverParameters::TractionForce(double dt) } else Ft = 0; - EnginePower = 1000 * Power * PosRatio; + EnginePower = 1000.0 * Power * PosRatio; break; } // Dumb @@ -4189,7 +4184,7 @@ double TMoverParameters::TractionForce(double dt) if (PulseForceCount > 0) PulseForceCount--; } - EnginePower = Ft * (1 + Vel); + EnginePower = Ft * (1.0 + Vel); break; } // WheelsDriven @@ -4212,13 +4207,13 @@ double TMoverParameters::TractionForce(double dt) { if (((Vadd + abs(Im)) > 760) || (Hamulec->GetEDBCP() < 0.25)) { - Vadd -= 500 * dt; + Vadd -= 500.0 * dt; if (Vadd < 1) Vadd = 0; } else if ((DynamicBrakeFlag) && ((Vadd + abs(Im)) < 740)) { - Vadd += 70 * dt; + Vadd += 70.0 * dt; Vadd = Min0R(Max0R(Vadd, 60), 400); } if (Vadd > 0) @@ -4279,21 +4274,21 @@ double TMoverParameters::TractionForce(double dt) // jazda manewrowa if (ShuntMode) { - Voltage = (SST[MainCtrlPos].Umax * AnPos) + (SST[MainCtrlPos].Umin * (1 - AnPos)); - tmp = (SST[MainCtrlPos].Pmax * AnPos) + (SST[MainCtrlPos].Pmin * (1 - AnPos)); + Voltage = (SST[MainCtrlPos].Umax * AnPos) + (SST[MainCtrlPos].Umin * (1.0 - AnPos)); + tmp = (SST[MainCtrlPos].Pmax * AnPos) + (SST[MainCtrlPos].Pmin * (1.0 - AnPos)); Ft = tmp * 1000.0 / (abs(tmpV) + 1.6); PosRatio = 1; } else // jazda ciapongowa { - tmp = Min0R(DElist[MainCtrlPos].GenPower, Power - HeatingPower * int(Heating)); + tmp = Min0R(DElist[MainCtrlPos].GenPower, Power - HeatingPower * double(Heating)); PosRatio = DElist[MainCtrlPos].GenPower / DElist[MainCtrlPosNo].GenPower; // stosunek mocy teraz do mocy max if ((MainCtrlPos > 0) && (ConverterFlag)) if (tmpV < - (Vhyp * (Power - HeatingPower * int(Heating)) / + (Vhyp * (Power - HeatingPower * double(Heating)) / DElist[MainCtrlPosNo].GenPower)) // czy na czesci prostej, czy na hiperboli Ft = (Ftmax - ((Ftmax - 1000.0 * DElist[MainCtrlPosNo].GenPower / (Vhyp + Vadd)) * @@ -4356,7 +4351,7 @@ double TMoverParameters::TractionForce(double dt) sqr(DElist[MainCtrlPos].Umax * Im / DElist[MainCtrlPos].Imax))) * (MainCtrlPos - 1) + - (1 - Im / DElist[MainCtrlPos].Imax) * DElist[MainCtrlPos].Umax * + (1.0 - Im / DElist[MainCtrlPos].Imax) * DElist[MainCtrlPos].Umax * (MainCtrlPosNo - MainCtrlPos); Voltage = Voltage / (MainCtrlPosNo - 1); Voltage = Min0R(Voltage, (1000.0 * tmp / abs(Im))); @@ -4506,7 +4501,7 @@ double TMoverParameters::TractionForce(double dt) } else PosRatio = 0; - PosRatio = Round(20 * PosRatio) / 20; + PosRatio = (double)Round(20 * PosRatio) / 20; if (PosRatio < 19.5 / 20) PosRatio *= 0.9; // if PosRatio<0 then @@ -4593,7 +4588,7 @@ double TMoverParameters::TractionForce(double dt) 1) * eimc[eimc_f_cfu] / eimc[eimc_s_cfu]) * (eimc[eimc_s_dfmax] * eimc[eimc_s_dfic] * eimc[eimc_s_cim]) * - Transmision.Ratio * NPoweredAxles * 2 / WheelDiameter; + Transmision.Ratio * NPoweredAxles * 2.0 / WheelDiameter; if ((dizel_fill < 0)) { eimv[eimv_Fful] = Min0R(eimc[eimc_p_Ph] * 3.6 / Vel, @@ -4641,12 +4636,12 @@ double TMoverParameters::TractionForce(double dt) Im = eimv[eimv_If]; if ((eimv[eimv_Ipoj] >= 0)) - Vadd *= (1 - 2 * dt); + Vadd *= (1.0 - 2.0 * dt); else if ((Voltage < EnginePowerSource.CollectorParameters.MaxV)) - Vadd *= (1 - dt); + Vadd *= (1.0 - dt); else Vadd = Max0R( - Vadd * (1 - 0.2 * dt), + Vadd * (1.0 - 0.2 * dt), 0.007 * (Voltage - (EnginePowerSource.CollectorParameters.MaxV - 100))); Itot = eimv[eimv_Ipoj] * (0.01 + Min0R(0.99, 0.99 - Vadd)); @@ -4705,7 +4700,7 @@ double TMoverParameters::TractionForce(double dt) // ************************************************************************************************* double TMoverParameters::ComputeRotatingWheel(double WForce, double dt, double n) { - double newn, eps; + double newn, eps = 0; if ((n == 0) && (WForce * Sign(V) < 0)) newn = 0; else @@ -4781,7 +4776,7 @@ double TMoverParameters::v2n(void) { // przelicza predkosc liniowa na obrotowa const double dmgn = 0.5; - double n, deltan; + double n, deltan = 0; n = V / (PI * WheelDiameter); // predkosc obrotowa wynikajaca z liniowej [obr/s] deltan = n - nrot; //"pochodna" prędkości obrotowej @@ -4956,9 +4951,9 @@ bool TMoverParameters::AutoRelaySwitch(bool State) bool TMoverParameters::AutoRelayCheck(void) { - bool OK; // b:int; - bool ARFASI, ARFASI2; // sprawdzenie wszystkich warunkow (AutoRelayFlag, AutoSwitch, Imdt_ET40)or ((TrainType=dt_ET40) and (EnginePowerSource.CollectorsNo>1)))*/) @@ -5294,7 +5289,7 @@ bool TMoverParameters::dizel_EngageChange(double dt) { const double engagedownspeed = 0.9; const double engageupspeed = 0.5; - double engagespeed; // OK:boolean; + double engagespeed = 0; // OK:boolean; bool DEC; DEC = false; @@ -5459,7 +5454,7 @@ double TMoverParameters::dizel_fillcheck(int mcp) if (enrot > dizel_nmax_cutoff) realfill = realfill * (9.8 - 9.0 * abs(enrot) / dizel_nmax_cutoff); if (enrot < dizel_nmin) - realfill = realfill * (1 + (dizel_nmin - abs(enrot)) / dizel_nmin); + realfill = realfill * (1.0 + (dizel_nmin - abs(enrot)) / dizel_nmin); } } if (realfill < 0) @@ -5475,7 +5470,7 @@ double TMoverParameters::dizel_fillcheck(int mcp) // ************************************************************************************************* double TMoverParameters::dizel_Momentum(double dizel_fill, double n, double dt) { // liczy moment sily wytwarzany przez silnik spalinowy} - double Moment, enMoment, eps, newn, friction; + double Moment, enMoment, eps, newn, friction = 0; // friction =dizel_engagefriction*(11-2*random)/10; friction = dizel_engagefriction; @@ -5491,13 +5486,13 @@ double TMoverParameters::dizel_Momentum(double dizel_fill, double n, double dt) Moment = -dizel_Mstand; if (enrot < dizel_nmin / 10.0) if (eAngle < PI / 2.0) - Moment = Moment - dizel_Mstand; // wstrzymywanie przy malych obrotach + Moment -= dizel_Mstand; // wstrzymywanie przy malych obrotach //!! abs if (abs(abs(n) - enrot) < 0.1) { if ((Moment) > (dizel_engageMaxForce * dizel_engage * dizel_engageDia * friction * 2)) // zerwanie przyczepnosci sprzegla - enrot = enrot + dt * Moment / dizel_AIM; + enrot += dt * Moment / dizel_AIM; else { dizel_engagedeltaomega = 0; @@ -5538,8 +5533,8 @@ double TMoverParameters::dizel_Momentum(double dizel_fill, double n, double dt) bool TMoverParameters::LoadingDone(double LSpeed, std::string LoadInit) { // test zakończenia załadunku/rozładunku - long LoadChange; - bool LD; + long LoadChange = 0; + bool LD = false; // ClearPendingExceptions; // zabezpieczenie dla Trunc() // LoadingDone:=false; //nie zakończone @@ -5575,7 +5570,7 @@ bool TMoverParameters::LoadingDone(double LSpeed, std::string LoadInit) LoadType = LoadInit; // nazwa Load += LoadChange; // zwiększenie ładunku CommandIn.Value1 = CommandIn.Value1 - LoadChange; - if ((Load >= MaxLoad * (1 + OverLoadFactor)) || (CommandIn.Value1 < 0)) + if ((Load >= MaxLoad * (1.0 + OverLoadFactor)) || (CommandIn.Value1 < 0)) LoadStatus = 4; // skończony załadunek } } @@ -5605,7 +5600,7 @@ bool TMoverParameters::DoorBlockedFlag(void) // ************************************************************************************************* bool TMoverParameters::DoorLeft(bool State) { - bool DL; + bool DL = false; if ((DoorLeftOpened != State) && (DoorBlockedFlag() == false) && (Battery == true)) { DL = true; @@ -5637,7 +5632,7 @@ bool TMoverParameters::DoorLeft(bool State) // ************************************************************************************************* bool TMoverParameters::DoorRight(bool State) { - bool DR; + bool DR = false; if ((DoorRightOpened != State) && (DoorBlockedFlag() == false) && (Battery == true)) { DR = true; @@ -5670,7 +5665,7 @@ bool TMoverParameters::DoorRight(bool State) // ************************************************************************************************* bool TMoverParameters::ChangeOffsetH(double DeltaOffset) { - bool COH; + bool COH = false; if (TestFlag(CategoryFlag, 2) && TestFlag(RunningTrack.CategoryFlag, 2)) { OffsetTrackH = OffsetTrackH + DeltaOffset; @@ -6806,7 +6801,6 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) BrakeValveSize = eSize; TrackBrakeForce = eTBF * 1000; MaxBrakePress[3] = eMaxBP; - WriteLog("eMaxBP " + to_string(MaxBrakePress[3])); if (MaxBrakePress[3] > 0) { BrakeCylNo = eBCN; @@ -6831,7 +6825,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) BrakeCylMult[0] = eBCM; BrakeCylMult[1] = eBCMlo; BrakeCylMult[2] = eBCMhi; - P2FTrans = 100 * PI * sqr(BrakeCylRadius); // w kN/bar Q: zamieniam SQR() na + P2FTrans = 100.0 * PI * sqr(BrakeCylRadius); // w kN/bar Q: zamieniam SQR() na // sqr() if ((BrakeCylMult[1] > 0) || (MaxBrakePress[1] > 0)) LoadFlag = 1; @@ -6876,7 +6870,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) CntrlPipePress = eHiPP; else CntrlPipePress = - 5 + 0.001 * (Random(10) - Random(10)); // Ra 2014-07: trochę niedokładności + 5.0 + 0.001 * (Random(10) - Random(10)); // Ra 2014-07: trochę niedokładności HighPipePress = CntrlPipePress; if (eHiPP != 0) @@ -6949,22 +6943,22 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) } else if (Couplers[0].CouplerType == Bare) { - Couplers[0].SpringKC = 50 * Mass + Ftmax / 0.05; + Couplers[0].SpringKC = 50.0 * Mass + Ftmax / 0.05; Couplers[0].DmaxC = 0.05; - Couplers[0].FmaxC = 100 * Mass + 2 * Ftmax; - Couplers[0].SpringKB = 60 * Mass + Ftmax / 0.05; + Couplers[0].FmaxC = 100.0 * Mass + 2 * Ftmax; + Couplers[0].SpringKB = 60.0 * Mass + Ftmax / 0.05; Couplers[0].DmaxB = 0.05; - Couplers[0].FmaxB = 50 * Mass + 2 * Ftmax; + Couplers[0].FmaxB = 50.0 * Mass + 2.0 * Ftmax; Couplers[0].beta = 0.3; } else if (Couplers[0].CouplerType == Articulated) { - Couplers[0].SpringKC = 60 * Mass + 1000; + Couplers[0].SpringKC = 60.0 * Mass + 1000; Couplers[0].DmaxC = 0.05; - Couplers[0].FmaxC = 20000000 + 2 * Ftmax; - Couplers[0].SpringKB = 70 * Mass + 1000; + Couplers[0].FmaxC = 20000000.0 + 2.0 * Ftmax; + Couplers[0].SpringKB = 70.0 * Mass + 1000; Couplers[0].DmaxB = 0.05; - Couplers[0].FmaxB = 4000000 + 2 * Ftmax; + Couplers[0].FmaxB = 4000000.0 + 2.0 * Ftmax; Couplers[0].beta = 0.55; } Couplers[1].SpringKC = Couplers[0].SpringKC; @@ -6998,11 +6992,11 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) // BrakeDelay[4] = gBDelay4; if (gBrakeDelays == "GPR") - BrakeDelays = bdelay_G + bdelay_P + bdelay_R; + BrakeDelays = bdelay_G | bdelay_P | bdelay_R; else if (gBrakeDelays == "PR") - BrakeDelays = bdelay_P + bdelay_R; + BrakeDelays = bdelay_P | bdelay_R; else if (gBrakeDelays == "GP") - BrakeDelays = bdelay_G + bdelay_P; + BrakeDelays = bdelay_G | bdelay_P; else if (gBrakeDelays == "R") { BrakeDelays = bdelay_R; @@ -7019,9 +7013,9 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) BrakeDelayFlag = bdelay_G; } else if (gBrakeDelays == "GPR+Mg") - BrakeDelays = bdelay_G + bdelay_P + bdelay_R + bdelay_M; + BrakeDelays = bdelay_G | bdelay_P | bdelay_R | bdelay_M; else if (gBrakeDelays == "PR+Mg") - BrakeDelays = bdelay_P + bdelay_R + bdelay_M; + BrakeDelays = bdelay_P | bdelay_R | bdelay_M; if (gBrakeHandle == "FV4a") BrakeHandle = FV4a; @@ -7223,7 +7217,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) // IntToStr(Transmision.NToothM )); // if (kTrans != "") if (Transmision.NToothM > 0) - Transmision.Ratio = Transmision.NToothW / Transmision.NToothM; + Transmision.Ratio = double(Transmision.NToothW) / Transmision.NToothM; else Transmision.Ratio = 1; @@ -7317,7 +7311,7 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir) // WriteLog("aa = " + AxleArangement + " " + std::string( Pos("o", AxleArangement)) ); if ((Pos("o", AxleArangement) > 0) && (EngineType == ElectricSeriesMotor)) - OK = (RList[1].Bn * RList[1].Mn == + OK = ((RList[1].Bn * RList[1].Mn) == NPoweredAxles); // test poprawnosci ilosci osi indywidualnie napedzanych // WriteLogSS("aa ok", BoolToYN(OK)); @@ -7326,7 +7320,7 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir) OK = false; //! if ((BrakeVVolume == 0) && (MaxBrakePress[3] > 0) && (BrakeSystem != Individual)) - BrakeVVolume = MaxBrakePress[3] / (5 - MaxBrakePress[3]) * + BrakeVVolume = MaxBrakePress[3] / (5.0 - MaxBrakePress[3]) * (BrakeCylRadius * BrakeCylRadius * BrakeCylDist * BrakeCylNo * PI) * 1000; if (BrakeVVolume == 0) BrakeVVolume = 0.01; @@ -7713,7 +7707,7 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV if ((Vmax < 250)) ScndCtrlActualPos = Round(Vel + 0.5); else - ScndCtrlActualPos = Round(Vel * 1.0 / 2 + 0.5); + ScndCtrlActualPos = Round(Vel / 2 + 0.5); else if ((floor(CValue1) == 0)) ScndCtrlActualPos = 0; if (ScndCtrlPosNo >= floor(CValue1)) @@ -8008,7 +8002,7 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV { OK = false; // będzie powtarzane aż się załaduje if ((Vel == 0) && (MaxLoad > 0) && - (Load < MaxLoad * (1 + OverLoadFactor))) // czy można ładowac? + (Load < MaxLoad * (1.0 + OverLoadFactor))) // czy można ładowac? if (Distance(Loc, CommandIn.Location, Dim, Dim) < 10) // ten peron/rampa { testload = ToLower(DUE(Command)); diff --git a/McZapkie/hamulce.cpp b/McZapkie/hamulce.cpp index 5c5f430c..403e3a60 100644 --- a/McZapkie/hamulce.cpp +++ b/McZapkie/hamulce.cpp @@ -821,7 +821,7 @@ double TEStEP2::GetPF(double PP, double dt, double Vel) ; else if ((VVP + 0.10 < CVP - 0.12) && (BCP < 0.25)) // poczatek hamowania { - //if ((BrakeStatus & 1) == 0) + // if ((BrakeStatus & 1) == 0) //{ // // ValveRes.CreatePress(0.5*VVP); //110115 - konsultacje warszawa1 // // SoundFlag:=SoundFlag or sf_Acc; @@ -1406,7 +1406,7 @@ double TEStED::GetPF(double PP, double dt, double Vel) if ((!Przys_blok)) { ValveRes->CreatePress(0.75 * VVP); - SoundFlag |= sf_Acc; + SoundFlag |= sf_Acc; ValveRes->Act(); Przys_blok = true; } @@ -1593,7 +1593,7 @@ void TCV1::CheckState(double BCP, double &dV1) // odluzniacz if (((BrakeStatus & b_rls) == b_rls) && (CVP - VVP < 0)) - BrakeStatus &= 247; + BrakeStatus &= 247; // sprawdzanie stanu if ((BrakeStatus & b_hld) == b_hld) diff --git a/McZapkie/mctools.cpp b/McZapkie/mctools.cpp index bba7b142..53a97b8a 100644 --- a/McZapkie/mctools.cpp +++ b/McZapkie/mctools.cpp @@ -73,15 +73,6 @@ double Min0R(double x1, double x2) return x2; } -int Sign(double x) -{ - if (x > 0) - return 1; - else if (x < 0) - return -1; - return 0; -} - bool TestFlag(int Flag, int Value) { if ((Flag & Value) == Value) diff --git a/McZapkie/mctools.h b/McZapkie/mctools.h index cc39ce3a..6f1332f0 100644 --- a/McZapkie/mctools.h +++ b/McZapkie/mctools.h @@ -59,7 +59,16 @@ int Min0(int x1, int x2); double Max0R(double x1, double x2); double Min0R(double x1, double x2); -int Sign(double x); +inline int Sign(int x) +{ + return x >= 0 ? 1 : -1; +} + +inline double Sign(double x) +{ + return x >= 0 ? 1.0 : -1.0; +} + inline long Round(float f) { return (long)(f + 0.5);