From 6ab550831dc4fd8508362ff075f476ec46c6bd4c Mon Sep 17 00:00:00 2001 From: tmj-fstate Date: Wed, 18 Jan 2017 07:56:51 +0100 Subject: [PATCH 1/9] basic patches for most of discovered memory leaks, fixes for brake system components --- AdvSound.h | 1 - Driver.cpp | 9 +- DynObj.cpp | 27 +- EU07.cpp | 7 +- Event.cpp | 48 ++- Ground.cpp | 11 +- McZapkie/MOVER.h | 9 +- McZapkie/Mover.cpp | 353 +++++++++--------- McZapkie/Oerlikon_ESt.cpp | 25 +- McZapkie/Oerlikon_ESt.h | 136 ++++--- McZapkie/hamulce.cpp | 79 ++-- McZapkie/hamulce.h | 756 +++++++++++++++++--------------------- McZapkie/mctools.cpp | 59 +-- McZapkie/mctools.h | 4 +- Names.cpp | 5 + Names.h | 1 + PyInt.cpp | 53 ++- PyInt.h | 22 +- RealSound.cpp | 4 +- RealSound.h | 6 +- Sound.cpp | 1 + Sound.h | 7 - Track.cpp | 49 +-- Track.h | 8 +- Train.cpp | 7 +- TrkFoll.cpp | 2 +- TrkFoll.h | 4 +- mtable.cpp | 15 +- mtable.h | 31 +- parser.cpp | 2 +- parser.h | 4 +- stdafx.h | 7 + wavread.h | 1 - 33 files changed, 824 insertions(+), 929 deletions(-) diff --git a/AdvSound.h b/AdvSound.h index d0a2b03a..c734f6b0 100644 --- a/AdvSound.h +++ b/AdvSound.h @@ -10,7 +10,6 @@ http://mozilla.org/MPL/2.0/. #ifndef AdvSoundH #define AdvSoundH -#include "Sound.h" #include "RealSound.h" #include "parser.h" diff --git a/Driver.cpp b/Driver.cpp index da3bf869..ae67889d 100644 --- a/Driver.cpp +++ b/Driver.cpp @@ -298,7 +298,7 @@ std::string TSpeedPos::TableText() { // pozycja tabelki pr�dko�ci if (iFlags & spEnabled) { // o ile pozycja istotna - return "Flags=#" + to_hex_str(iFlags, 8) + ", Dist=" + to_string(fDist, 1, 7) + + return "Flags=" + to_hex_str(iFlags, 6) + ", Dist=" + to_string(fDist, 1, 7) + ", Vel=" + std::to_string(fVelNext) + ", Name=" + GetName(); //if (iFlags & spTrack) // je�li tor // return "Flags=#" + IntToHex(iFlags, 8) + ", Dist=" + FloatToStrF(fDist, ffFixed, 7, 1) + @@ -495,12 +495,9 @@ void TController::TableTraceRoute(double fDistance, TDynamicObject *pVehicle) pTrack = sSpeedTable[iLast].trTrack; // ostatnio sprawdzony tor if (!pTrack) return; // koniec toru, to nie ma co sprawdza� (nie ma prawa tak by�) - fLastDir = sSpeedTable[iLast].iFlags & spReverse ? - -1.0 : - 1.0; // flaga ustawiona, gdy Point2 toru jest bli�ej + fLastDir = (sSpeedTable[iLast].iFlags & spReverse) ? -1.0 : 1.0; // flaga ustawiona, gdy Point2 toru jest bli�ej fCurrentDistance = sSpeedTable[iLast].fDist; // aktualna odleg�o�� do jego Point1 - fTrackLength = - sSpeedTable[iLast].iFlags & (spElapsed | spEnd) ? 0.0 : pTrack->Length(); // nie dolicza� d�ugo�ci gdy: + fTrackLength = (sSpeedTable[iLast].iFlags & (spElapsed | spEnd)) ? 0.0 : pTrack->Length(); // nie dolicza� d�ugo�ci gdy: // 32-mini�ty pocz�tek, // 64-jazda do ko�ca toru } diff --git a/DynObj.cpp b/DynObj.cpp index f23b3504..812c656a 100644 --- a/DynObj.cpp +++ b/DynObj.cpp @@ -1886,11 +1886,11 @@ TDynamicObject::Init(std::string Name, // nazwa pojazdu, np. "EU07-424" { } } // koniec hamulce - else if (ActPar.substr(0, 1) == "") // tu mozna wpisac inny prefiks i inne rzeczy +/* else if (ActPar.substr(0, 1) == "") // tu mozna wpisac inny prefiks i inne rzeczy { // jakies inne prefiksy } - +*/ } // koniec while kropka if (MoverParameters->CategoryFlag & 2) // jeœli samochód @@ -5748,22 +5748,13 @@ int TDynamicObject::RouteWish(TTrack *tr) std::string TDynamicObject::TextureTest(std::string const &name) { // Ra 2015-01: sprawdzenie dostêpnoœci tekstury o podanej nazwie - std::string x = name + ".dds"; // na razie prymitywnie - if (FileExists(x.c_str())) - return x; - else - { - x = name + ".tga"; // w zasadzie to nale¿a³oby uwzglêdniæ deklarowan¹ kolejnoœæ - if (FileExists(x.c_str())) - return x; - else - { - x = name + ".bmp"; - if (FileExists(x.c_str())) - return x; - } - } - return ""; // nie znaleziona + std::vector extensions = { ".dds", ".tga", ".bmp" }; + for( auto const &extension : extensions ) { + if( true == FileExists( name + extension ) ) { + return name + extension; + } + } + return ""; // nie znaleziona }; void TDynamicObject::DestinationSet(std::string to, std::string numer) diff --git a/EU07.cpp b/EU07.cpp index dd229f29..3fe11868 100644 --- a/EU07.cpp +++ b/EU07.cpp @@ -26,8 +26,9 @@ Stele, firleju, szociu, hunter, ZiomalCl, OLI_EU and others #include "opengl/ARB_Multisample.h" #include "Globals.h" -#include "Console.h" #include "Logs.h" +#include "Console.h" +#include "PyInt.h" #include "World.h" #include "Mover.h" @@ -582,7 +583,7 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance Global::LoadIniFile("eu07.ini"); // teraz dopiero mo¿na przejrzeæ plik z ustawieniami Global::InitKeys("keys.ini"); // wczytanie mapowania klawiszy - jest na sta³e - // hunter-271211: ukrywanie konsoli + // hunter-271211: ukrywanie konsoli if (Global::iWriteLogEnabled & 2) { AllocConsole(); @@ -701,6 +702,8 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance SystemParametersInfo(SPI_SETKEYBOARDSPEED, iOldSpeed, NULL, 0); SystemParametersInfo(SPI_SETKEYBOARDDELAY, iOldDelay, NULL, 0); delete pConsole; // deaktywania sterownika + TPythonInterpreter::killInstance(); + // shutdown KillGLWindow(); // kill the window return (msg.wParam); // exit the program diff --git a/Event.cpp b/Event.cpp index 7be970cc..1056f613 100644 --- a/Event.cpp +++ b/Event.cpp @@ -72,6 +72,9 @@ TEvent::~TEvent() delete[] Params[8].asPointer; // zwolniæ obszar case tp_GetValues: // nic break; + case tp_PutValues: // params[0].astext stores the token + SafeDeleteArray( Params[ 0 ].asText ); + break; } evJoined = NULL; // nie usuwaæ podczepionych tutaj }; @@ -87,6 +90,7 @@ void TEvent::Conditions(cParser *parser, string s) std::string token, str; if (!asNodeName.empty()) { // podczepienie ³añcucha, jeœli nie jest pusty + // NOTE: source of a memory leak -- the array never gets deleted. fix the destructor Params[9].asText = new char[asNodeName.length() + 1]; // usuwane i zamieniane na // wskaŸnik strcpy(Params[9].asText, asNodeName.c_str()); @@ -457,34 +461,43 @@ void TEvent::Load(cParser *parser, vector3 *org) { // obrót wzglêdem osi parser->getTokens(); *parser >> token; - Params[9].asText = new char[255]; // nazwa submodelu - strcpy(Params[9].asText, token.c_str()); + Params[9].asText = new char[token.size() + 1]; // nazwa submodelu + std::strcpy(Params[9].asText, token.c_str()); Params[0].asInt = 1; parser->getTokens(4); - *parser >> Params[1].asdouble >> Params[2].asdouble >> Params[3].asdouble >> - Params[4].asdouble; + *parser + >> Params[1].asdouble + >> Params[2].asdouble + >> Params[3].asdouble + >> Params[4].asdouble; } else if (token.compare("translate") == 0) { // przesuw o wektor parser->getTokens(); *parser >> token; - Params[9].asText = new char[255]; // nazwa submodelu - strcpy(Params[9].asText, token.c_str()); + Params[9].asText = new char[token.size() + 1]; // nazwa submodelu + std::strcpy(Params[9].asText, token.c_str()); Params[0].asInt = 2; parser->getTokens(4); - *parser >> Params[1].asdouble >> Params[2].asdouble >> Params[3].asdouble >> - Params[4].asdouble; + *parser + >> Params[1].asdouble + >> Params[2].asdouble + >> Params[3].asdouble + >> Params[4].asdouble; } else if (token.compare("digital") == 0) { // licznik cyfrowy parser->getTokens(); *parser >> token; - Params[9].asText = new char[255]; // nazwa submodelu - strcpy(Params[9].asText, token.c_str()); + Params[9].asText = new char[token.size() + 1]; // nazwa submodelu + std::strcpy(Params[9].asText, token.c_str()); Params[0].asInt = 8; parser->getTokens(4); // jaki ma byæ sens tych parametrów? - *parser >> Params[1].asdouble >> Params[2].asdouble >> Params[3].asdouble >> - Params[4].asdouble; + *parser + >> Params[1].asdouble + >> Params[2].asdouble + >> Params[3].asdouble + >> Params[4].asdouble; } else if (token.substr(token.length() - 4, 4) == ".vmd") // na razie tu, mo¿e bêdzie inaczej { // animacja z pliku VMD @@ -499,12 +512,15 @@ void TEvent::Load(cParser *parser, vector3 *org) } parser->getTokens(); *parser >> token; - Params[9].asText = new char[255]; // nazwa submodelu - strcpy(Params[9].asText, token.c_str()); + Params[9].asText = new char[token.size() + 1]; // nazwa submodelu + std::strcpy(Params[9].asText, token.c_str()); Params[0].asInt = 4; // rodzaj animacji parser->getTokens(4); - *parser >> Params[1].asdouble >> Params[2].asdouble >> Params[3].asdouble >> - Params[4].asdouble; + *parser + >> Params[1].asdouble + >> Params[2].asdouble + >> Params[3].asdouble + >> Params[4].asdouble; } parser->getTokens(); *parser >> token; diff --git a/Ground.cpp b/Ground.cpp index 66a9bfd7..effd8683 100644 --- a/Ground.cpp +++ b/Ground.cpp @@ -117,6 +117,9 @@ TGroundNode::~TGroundNode() delete Model; Model = NULL; break; + case TP_SOUND: + SafeDelete(tsStaticSound); + break; case TP_TERRAIN: { // pierwsze nNode zawiera model E3D, reszta to trójk¹ty for (int i = 1; i < iCount; ++i) @@ -697,6 +700,7 @@ TSubRect::~TSubRect() if (Global::bManageNodes) // Ra: tu siê coœ sypie ResourceManager::Unregister(this); // wyrejestrowanie ze sprz¹tacza // TODO: usun¹æ obiekty z listy (nRootMesh), bo s¹ one tworzone dla sektora + delete[] tTracks; } void TSubRect::NodeAdd(TGroundNode *Node) @@ -1767,8 +1771,7 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) *parser >> token; str = token; //str = AnsiString(token.c_str()); - tmp->tsStaticSound = new TTextSound(strdup(str.c_str()), sqrt(tmp->fSquareRadius), tmp->pCenter.x, - tmp->pCenter.y, tmp->pCenter.z, false, rmin); + tmp->tsStaticSound = new TTextSound(str, sqrt(tmp->fSquareRadius), tmp->pCenter.x, tmp->pCenter.y, tmp->pCenter.z, false, rmin); if (rmin < 0.0) rmin = 0.0; // przywrócenie poprawnej wartoœci, jeœli s³u¿y³a do wy³¹czenia efektu Dopplera @@ -2320,9 +2323,7 @@ void TGround::FirstInit() WriteLog("InitLaunchers OK"); WriteLog("InitGlobalTime"); // ABu 160205: juz nie TODO :) - GlobalTime = new TMTableTime( - hh, mm, srh, srm, ssh, - ssm); // McZapkie-300302: inicjacja czasu rozkladowego - TODO: czytac z trasy! + GlobalTime = std::make_shared( hh, mm, srh, srm, ssh, ssm ); // McZapkie-300302: inicjacja czasu rozkladowego - TODO: czytac z trasy! WriteLog("InitGlobalTime OK"); // jeszcze ustawienie pogody, gdyby nie by³o w scenerii wpisów glClearColor(Global::AtmoColor[0], Global::AtmoColor[1], Global::AtmoColor[2], diff --git a/McZapkie/MOVER.h b/McZapkie/MOVER.h index ceaf46f6..299cd1d6 100644 --- a/McZapkie/MOVER.h +++ b/McZapkie/MOVER.h @@ -642,10 +642,11 @@ public: TBrakeHandle BrakeLocHandle; double MBPM; /*masa najwiekszego cisnienia*/ - TBrake *Hamulec; - TDriverHandle *Handle; - TDriverHandle *LocHandle; - TReservoir *Pipe; TReservoir *Pipe2; + std::shared_ptr Hamulec; + std::shared_ptr Handle; + std::shared_ptr LocHandle; + std::shared_ptr Pipe; + std::shared_ptr Pipe2; TLocalBrake LocalBrake; /*rodzaj hamulca indywidualnego*/ TBrakePressureTable BrakePressureTable; /*wyszczegolnienie cisnien w rurze*/ diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index 75d58631..cb139d21 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -1796,154 +1796,157 @@ int TMoverParameters::ShowCurrent(int AmpN) bool TMoverParameters::IncMainCtrl(int CtrlSpeed) { - bool OK = false; - if ((MainCtrlPosNo > 0) && (CabNo != 0)) + // basic fail conditions: + if( ( CabNo == 0 ) + || ( MainCtrlPosNo <= 0 ) ) { + // nie ma sterowania + return false; + } + if( ( TrainType == dt_ET22 ) && ( ScndCtrlPos != 0 ) ) { + // w ET22 nie da siê krêciæ nastawnikiem przy w³¹czonym boczniku + return false; + } + if( ( TrainType == dt_EZT ) && ( ActiveDir == 0 ) ) { + // w EZT nie da siê za³¹czyæ pozycji bez ustawienia kierunku + return false; + } + + bool OK = false; + if (MainCtrlPos < MainCtrlPosNo) { - if (MainCtrlPos < MainCtrlPosNo) - { - if ((TrainType != dt_ET22) || - ((TrainType == dt_ET22) && - (ScndCtrlPos == - 0))) // w ET22 nie da siê krêciæ nastawnikiem przy w³¹czonym boczniku - switch (EngineType) - { - case None: - case Dumb: - case DieselElectric: - case ElectricInductionMotor: - { - if (((CtrlSpeed == 1) && (TrainType != dt_EZT)) || - ((CtrlSpeed == 1) && (TrainType == dt_EZT) && (ActiveDir != 0))) - { // w EZT nie da siê za³¹czyæ pozycji bez ustawienia kierunku - MainCtrlPos++; - OK = true; - } - else if (((CtrlSpeed > 1) && (TrainType != dt_EZT)) || - ((CtrlSpeed > 1) && (TrainType == dt_EZT) && (ActiveDir != 0))) - OK = (IncMainCtrl(1) && IncMainCtrl(CtrlSpeed - 1)); - break; - } + switch( EngineType ) { + case None: + case Dumb: + case DieselElectric: + case ElectricInductionMotor: + { + if( CtrlSpeed > 1 ) { + OK = ( IncMainCtrl( 1 ) + && IncMainCtrl( CtrlSpeed - 1 ) ); // a fail will propagate up the recursion chain. should this be || instead? + } + else { + ++MainCtrlPos; + OK = true; + } + break; + } - case ElectricSeriesMotor: - { - if ((CtrlSpeed == 1) && (ActiveDir != 0)) - { - MainCtrlPos++; - OK = true; - if (Imax == ImaxHi) - if (RList[MainCtrlPos].Bn > 1) - { - if (TrainType == dt_ET42) - { - MainCtrlPos--; - OK = false; - } - if (MaxCurrentSwitch(false)) - SetFlag( - SoundFlag, - sound_relay); // wylaczanie wysokiego rozruchu // Q TODO: - // if (EngineType=ElectricSeriesMotor) and (MainCtrlPos=1) - // then - // MainCtrlActualPos:=1; - // - } - if ((CtrlSpeed == 1) && (ActiveDir == -1) && (RList[MainCtrlPos].Bn > 1) && - (TrainType != dt_PseudoDiesel)) - { // blokada wejœcia na równoleg³¹ podczas jazdy do ty³u - MainCtrlPos--; - OK = false; - } - // - // if (TrainType == "et40") - // if (Abs(Im) > IminHi) - // { - // MainCtrlPos--; //Blokada nastawnika po przekroczeniu minimalnego pradu - // OK = false; - // } - //} - if (DynamicBrakeFlag) - if (TrainType == dt_ET42) - if (MainCtrlPos > 20) - { - MainCtrlPos--; - OK = false; - } - } - else if ((CtrlSpeed > 1) && (ActiveDir != 0) && (TrainType != dt_ET40)) - { // szybkie przejœcie na bezoporow¹ + case ElectricSeriesMotor: + { + if( ActiveDir == 0 ) { return false; } - while ((RList[MainCtrlPos].R > 0) && IncMainCtrl(1)) - ; // tutaj ma byæ pêtla na "pusto" - // OK:=true ; {takie chamskie, potem poprawie} <-Ra: kto mia³ to - // poprawiæ i po co? - if (ActiveDir == -1) - while ((RList[MainCtrlPos].Bn > 1) && IncMainCtrl(1)) - MainCtrlPos--; - OK = false; - // if (TrainType=dt_ET40) then - // while Abs (Im)>IminHi do - // dec(MainCtrlPos); - // OK:=false ; - // - if (DynamicBrakeFlag) - if (TrainType == dt_ET42) - while (MainCtrlPos > 20) - MainCtrlPos--; - OK = false; - } - // return OK; + if( CtrlSpeed > 1 ) { + // szybkie przejœcie na bezoporow¹ + if( TrainType == dt_ET40 ) { + break; // this means ET40 won't react at all to fast acceleration command. should it issue just IncMainCtrl(1) instead? + } + while( ( RList[ MainCtrlPos ].R > 0.0 ) + && IncMainCtrl( 1 ) ) { + // all work is done in the loop header + ; + } + // OK:=true ; {takie chamskie, potem poprawie} <-Ra: kto mia³ to + // poprawiæ i po co? + if( ActiveDir == -1 ) { + while( ( RList[ MainCtrlPos ].Bn > 1 ) + && IncMainCtrl( 1 ) ) { + --MainCtrlPos; + } + } + OK = false; // shouldn't this be part of the loop above? + // if (TrainType=dt_ET40) then + // while Abs (Im)>IminHi do + // dec(MainCtrlPos); + // OK:=false ; + } + else { // CtrlSpeed == 1 + ++MainCtrlPos; + OK = true; + if( Imax == ImaxHi ) { + if( RList[ MainCtrlPos ].Bn > 1 ) { + if( true == MaxCurrentSwitch( false )) { + // wylaczanie wysokiego rozruchu + SetFlag( SoundFlag, sound_relay ); + } // Q TODO: + // if (EngineType=ElectricSeriesMotor) and (MainCtrlPos=1) + // then + // MainCtrlActualPos:=1; + // + if( TrainType == dt_ET42 ) { + --MainCtrlPos; + OK = false; + } + } + } + if( ActiveDir == -1 ) { + if( ( TrainType != dt_PseudoDiesel ) + && ( RList[ MainCtrlPos ].Bn > 1 ) ) { + // blokada wejœcia na równoleg³¹ podczas jazdy do ty³u + --MainCtrlPos; + OK = false; + } + } + // + // if (TrainType == "et40") + // if (Abs(Im) > IminHi) + // { + // MainCtrlPos--; //Blokada nastawnika po przekroczeniu minimalnego pradu + // OK = false; + // } + //} + } - break; - } + if( ( TrainType == dt_ET42 ) && ( true == DynamicBrakeFlag ) ) { + if( MainCtrlPos > 20 ) { + MainCtrlPos = 20; + OK = false; + } + } + // return OK; + break; + } - case DieselEngine: - { - if (CtrlSpeed == 1) - { - MainCtrlPos++; - OK = true; - if (MainCtrlPos > 0) - CompressorAllow = true; - else - CompressorAllow = false; - } - else if (CtrlSpeed > 1) - { - while (MainCtrlPos < MainCtrlPosNo) - IncMainCtrl(1); - OK = true; - } - break; - } + case DieselEngine: + { + if( CtrlSpeed > 1 ) { + while( MainCtrlPos < MainCtrlPosNo ) { + IncMainCtrl( 1 ); + } + } + else { + ++MainCtrlPos; + if( MainCtrlPos > 0 ) { CompressorAllow = true; } + else { CompressorAllow = false; } + } + OK = true; + break; + } - case WheelsDriven: - { - OK = AddPulseForce(CtrlSpeed); - break; - } - - } // switch EngineType of - } - else // MainCtrlPos>=MainCtrlPosNo - if (CoupledCtrl) // wspólny wa³ nastawnika jazdy i bocznikowania - { - if (ScndCtrlPos < ScndCtrlPosNo) // 3<3 -> false - { - ScndCtrlPos++; - OK = true; - } - else - OK = false; - } - if (OK) - { - SendCtrlToNext("MainCtrl", MainCtrlPos, CabNo); //??? - SendCtrlToNext("ScndCtrl", ScndCtrlPos, CabNo); - } + case WheelsDriven: + { + OK = AddPulseForce( CtrlSpeed ); + break; + } + } // switch EngineType of + } + else {// MainCtrlPos>=MainCtrlPosNo + if( true == CoupledCtrl ) { + // wspólny wa³ nastawnika jazdy i bocznikowania + if( ScndCtrlPos < ScndCtrlPosNo ) { // 3<3 -> false + ++ScndCtrlPos; + OK = true; + } + else { + OK = false; + } + } + } + + if( true == OK ) + { + SendCtrlToNext("MainCtrl", MainCtrlPos, CabNo); //??? + SendCtrlToNext("ScndCtrl", ScndCtrlPos, CabNo); } - else // nie ma sterowania - OK = false; - // if OK then LastRelayTime:=0; // hunter-101012: poprawka // poprzedni warunek byl niezbyt dobry, bo przez to przy trzymaniu + @@ -5871,16 +5874,16 @@ std::string getkeyval(int rettype, std::string key) int klen = key.length(); int kpos = Pos(key, xline) - 1; temp.erase(0, kpos + klen); - if (temp.find(" ") != std::string::npos) - to = temp.find(" "); + if (temp.find(' ') != std::string::npos) + to = temp.find(' '); else to = 255; kval = temp.substr(0, to); if (kval != "") kval = TrimSpace(kval); // wyciagnieta wartosc - sectionname = ExchangeCharInString(sectionname, (char)":", (char)""); - sectionname = ExchangeCharInString(sectionname, (char)".", (char)""); + sectionname = ExchangeCharInString(sectionname, ':', NULL); + sectionname = ExchangeCharInString(sectionname, '.', NULL); //--WriteLog(sectionname + "." + keyname + " val= [" + kval + "]"); // if (rettype == 1) vS = kval; @@ -6343,7 +6346,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) // appdir = ExtractFilePath(ParamStr(0)); - std::ifstream in(file.c_str()); + std::ifstream in(file); if (!in.is_open()) { WriteLog("E8 - FIZ FILE NOT EXIST."); @@ -7400,8 +7403,7 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir) case K: { WriteLog("XBT W, K"); - Hamulec = new TWest(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, - BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA); + Hamulec = std::make_shared(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA); if (MBPM < 2) // jesli przystawka wazaca Hamulec->SetLP(0, MaxBrakePress[3], 0); else @@ -7411,8 +7413,7 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir) case KE: { WriteLog("XBT WKE"); - Hamulec = new TKE(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo, - BrakeDelays, BrakeMethod, NAxles, NBpA); + Hamulec = std::make_shared(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA); Hamulec->SetRM(RapidMult); if (MBPM < 2) // jesli przystawka wazaca Hamulec->SetLP(0, MaxBrakePress[3], 0); @@ -7426,9 +7427,8 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir) case ESt4: { WriteLog("XBT NESt3, ESt3, ESt3AL2, ESt4"); - Hamulec = new TNESt3(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, - BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA); - (static_cast(Hamulec))->SetSize(BrakeValveSize, BrakeValveParams); + Hamulec = std::make_shared(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA); + static_cast(Hamulec.get())->SetSize(BrakeValveSize, BrakeValveParams); if (MBPM < 2) // jesli przystawka wazaca Hamulec->SetLP(0, MaxBrakePress[3], 0); else @@ -7439,24 +7439,21 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir) case LSt: { WriteLog("XBT LSt"); - Hamulec = new TLSt(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo, - BrakeDelays, BrakeMethod, NAxles, NBpA); + Hamulec = std::make_shared(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA); Hamulec->SetRM(RapidMult); break; } case EStED: { WriteLog("XBT EStED"); - Hamulec = new TEStED(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, - BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA); + Hamulec = std::make_shared(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA); Hamulec->SetRM(RapidMult); break; } case EP2: { WriteLog("XBT EP2"); - Hamulec = new TEStEP2(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, - BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA); + Hamulec = std::make_shared(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA); Hamulec->SetLP(Mass, MBPM, MaxBrakePress[1]); break; } @@ -7464,21 +7461,18 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir) case CV1: { WriteLog("XBT CV1"); - Hamulec = new TCV1(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo, - BrakeDelays, BrakeMethod, NAxles, NBpA); + Hamulec = std::make_shared(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA); break; } case CV1_L_TR: { WriteLog("XBT CV1_L_T"); - Hamulec = new TCV1L_TR(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, - BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA); + Hamulec = std::make_shared(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA); break; } default: - Hamulec = new TBrake(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, - BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA); + Hamulec = std::make_shared(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA); } Hamulec->SetASBP(MaxBrakePress[4]); @@ -7486,50 +7480,49 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir) switch (BrakeHandle) { case FV4a: - Handle = new TFV4aM(); + Handle = std::make_shared(); break; case FVel6: - Handle = new TFVel6(); + Handle = std::make_shared(); break; case testH: - Handle = new Ttest(); + Handle = std::make_shared(); break; case M394: - Handle = new TM394(); + Handle = std::make_shared(); break; case Knorr: - Handle = new TH14K1(); + Handle = std::make_shared(); break; case St113: - Handle = new TSt113(); + Handle = std::make_shared(); break; default: - Handle = new TDriverHandle(); + Handle = std::make_shared(); } switch (BrakeLocHandle) { case FD1: { - LocHandle = new TFD1(); + LocHandle = std::make_shared(); LocHandle->Init(MaxBrakePress[0]); break; } case Knorr: { - LocHandle = new TH1405(); + LocHandle = std::make_shared(); LocHandle->Init(MaxBrakePress[0]); break; } default: - LocHandle = new TDriverHandle(); + LocHandle = std::make_shared(); } - Pipe = new TReservoir(); - Pipe2 = new TReservoir(); // zabezpieczenie, bo sie PG wywala... :( - Pipe->CreateCap((Max0R(Dim.L, 14) + 0.5) * Spg * 1); // dlugosc x przekroj x odejscia i takie - // tam - Pipe2->CreateCap((Max0R(Dim.L, 14) + 0.5) * Spg * 1); + Pipe = std::make_shared(); + Pipe->CreateCap( ( Max0R( Dim.L, 14 ) + 0.5 ) * Spg * 1 ); // dlugosc x przekroj x odejscia i takie tam + Pipe2 = std::make_shared(); // zabezpieczenie, bo sie PG wywala... :( + Pipe2->CreateCap( (Max0R(Dim.L, 14) + 0.5) * Spg * 1 ); if (LightsPosNo > 0) LightsPos = LightsDefPos; diff --git a/McZapkie/Oerlikon_ESt.cpp b/McZapkie/Oerlikon_ESt.cpp index 467aebda..fa547bc1 100644 --- a/McZapkie/Oerlikon_ESt.cpp +++ b/McZapkie/Oerlikon_ESt.cpp @@ -327,21 +327,17 @@ void TNESt3::Init(double PP, double HPP, double LPP, double BP, int BDF) ValveRes->CreatePress(PP); BrakeCyl->CreatePress(BP); BrakeRes->CreatePress(PP); - CntrlRes = new TReservoir(); + CntrlRes = std::make_shared(); CntrlRes->CreateCap(15); CntrlRes->CreatePress(HPP); BrakeStatus = static_cast(BP > 1.0); - Miedzypoj = new TReservoir(); + Miedzypoj = std::make_shared(); Miedzypoj->CreateCap(5); Miedzypoj->CreatePress(PP); BVM = 1.0 / (HPP - 0.05 - LPP) * MaxBP; BrakeDelayFlag = BDF; - RapidStatus = false; - LoadC, LoadM, TareBP, TareM, Podskok, LBP = 0.0; - - Zamykajacy, Przys_blok = false; if (!(typeid(*FM) == typeid(TDisk1) || typeid(*FM) == typeid(TDisk2))) // jesli zeliwo to schodz RapidStaly = false; @@ -500,32 +496,31 @@ void TNESt3::SetSize(int size, std::string params) // ustawianie dysz (rozmiaru if (params.find("ESt3") != std::string::npos) { Podskok = 0.7; - Przekladniki[1] = new TRura(); - Przekladniki[3] = new TRura(); + Przekladniki[1] = std::make_shared(); + Przekladniki[3] = std::make_shared(); } else { Podskok = -1; - Przekladniki[1] = new TRapid(); + Przekladniki[1] = std::make_shared(); if (params.find("-s216") != std::string::npos) Przekladniki[1]->SetRapidParams(2, 16); else Przekladniki[1]->SetRapidParams(2, 0); - Przekladniki[3] = new TPrzeciwposlizg(); + Przekladniki[3] = std::make_shared(); if (params.find("-ED") != std::string::npos) { - delete Przekladniki[3]; // tutaj ma byæ destruktor Przekladniki[1]->SetRapidParams(2, 18); - Przekladniki[3] = new TPrzekED(); + Przekladniki[3] = std::make_shared(); } } if (params.find("AL2") != std::string::npos) - Przekladniki[2] = new TPrzekCiagly(); + Przekladniki[2] = std::make_shared(); else if (params.find("PZZ") != std::string::npos) - Przekladniki[2] = new TPrzek_PZZ(); + Przekladniki[2] = std::make_shared(); else - Przekladniki[2] = new TRura(); + Przekladniki[2] = std::make_shared(); if ((params.find("3d") + params.find("4d")) != std::string::npos) autom = false; diff --git a/McZapkie/Oerlikon_ESt.h b/McZapkie/Oerlikon_ESt.h index 90bc6d18..b34cc045 100644 --- a/McZapkie/Oerlikon_ESt.h +++ b/McZapkie/Oerlikon_ESt.h @@ -17,10 +17,10 @@ http://mozilla.org/MPL/2.0/. Copyright (C) 2007-2014 Maciej Cierniak */ +#include #include "hamulce.h" // Pascal unit #include "friction.h" // Pascal unit #include "mctools.h" // Pascal unit -#include /* (C) youBy @@ -72,8 +72,8 @@ class TPrzekladnik : public TReservoir // przekladnik (powtarzacz) { private: public: - TReservoir *BrakeRes; - TReservoir *Next; + std::shared_ptr BrakeRes; + std::shared_ptr Next; TPrzekladnik() : TReservoir() {}; virtual void Update(double dt); @@ -110,55 +110,51 @@ class TPrzeciwposlizg : public TRura // przy napelnianiu - rura, przy poslizgu - } }; -class TRapid : public TPrzekladnik // przekladnik dwustopniowy +// przekladnik dwustopniowy +class TRapid : public TPrzekladnik { -{ - private: - bool RapidStatus; // status rapidu - double RapidMult; // przelozenie (w dol) +private: + bool RapidStatus = false; // status rapidu + double RapidMult = 0.0; // przelozenie (w dol) // Komora2: real; - double DN; - double DL; // srednice dysz napelniania i luzowania + double DN = 0.0; + double DL = 0.0; // srednice dysz napelniania i luzowania - public: +public: void SetRapidParams(double mult, double size); void SetRapidStatus(bool rs); void Update(double dt) /*override*/; - inline TRapid() : TPrzekladnik() - { - RapidStatus = false; - RapidMult, DN, DL = 0.0; - } + inline TRapid() : + TPrzekladnik() + {} }; -class TPrzekCiagly : public TPrzekladnik // AL2 +// AL2 +class TPrzekCiagly : public TPrzekladnik { -{ - private: - double mult; +private: + double mult = 0.0; public: void SetMult(double m); void Update(double dt) /*override*/; - inline TPrzekCiagly() : TPrzekladnik() - { - mult = 0.0; - } + inline TPrzekCiagly() : + TPrzekladnik() + {} }; -class TPrzek_PZZ : public TPrzekladnik // podwojny zawor zwrotny +// podwojny zawor zwrotny +class TPrzek_PZZ : public TPrzekladnik { -{ - private: - double LBP; +private: + double LBP = 0.0; - public: +public: void SetLBP(double P); void Update(double dt) /*override*/; - inline TPrzek_PZZ() : TPrzekladnik() - { - LBP = 0.0; - } + inline TPrzek_PZZ() : + TPrzekladnik() + {} }; class TPrzekZalamany : public TPrzekladnik // Knicksventil @@ -166,59 +162,55 @@ class TPrzekZalamany : public TPrzekladnik // Knicksventil { private: public: - TPrzekZalamany() : TPrzekladnik() {}; + TPrzekZalamany() : + TPrzekladnik() + {} }; -class TPrzekED : public TRura // przy napelnianiu - rura, przy hamowaniu - upust +// przy napelnianiu - rura, przy hamowaniu - upust +class TPrzekED : public TRura { -{ - private: - double MaxP; +private: + double MaxP = 0.0; - public: +public: void SetP(double P); void Update(double dt) /*override*/; - inline TPrzekED() : TRura() - { - MaxP = 0.0; - } + inline TPrzekED() : + TRura() + {} }; -class TNESt3 : public TBrake +class TNESt3 : public TBrake { -{ - private: - double Nozzles[dMAX]; // dysze - TReservoir *CntrlRes; // zbiornik steruj¹cy - double BVM; // przelozenie PG-CH +private: + std::shared_ptr CntrlRes; // zbiornik steruj¹cy + std::shared_ptr Miedzypoj; // pojemnosc posrednia (urojona) do napelniania ZP i ZS + std::shared_ptr Przekladniki[ 4 ]; + double Nozzles[ dMAX ]; // dysze + double BVM = 0.0; // przelozenie PG-CH // ValveFlag: byte; //polozenie roznych zaworkow - bool Zamykajacy; // pamiec zaworka zamykajacego + bool Zamykajacy = false; // 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 + bool Przys_blok = false; // blokada przyspieszacza + bool RapidStatus = false; + bool RapidStaly = false; + double LoadC = 0.0; + double TareM = 0.0; // masa proznego + double LoadM = 0.0; // masa pelnego + double TareBP = 0.0; // cisnienie dla proznego + double HBG300 = 0.0; // zawor ograniczajacy cisnienie + double Podskok = 0.0; // podskok preznosci poczatkowej // HPBR: real; //zasilanie ZP z wysokiego cisnienia - bool autom; // odluzniacz samoczynny - double LBP; // cisnienie hamulca pomocniczego + bool autom = false; // odluzniacz samoczynny + double LBP = 0.0; // cisnienie hamulca pomocniczego - - public: - inline TNESt3(double i_mbp, double i_bcr, double i_bcd, double i_brc, - int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) - { - } +public: + inline TNESt3(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : + TBrake( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa) + {} void Init(double PP, double HPP, double LPP, double BP, int BDF) /*override*/; - virtual double GetPF(double PP, double dt, - double Vel) /*override*/; // przeplyw miedzy komora wstepna i PG + virtual double GetPF(double PP, double dt, double Vel) /*override*/; // przeplyw miedzy komora wstepna i PG void EStParams(double i_crc); // parametry charakterystyczne dla ESt virtual double GetCRP() /*override*/; void CheckState(double BCP, double &dV1); // glowny przyrzad rozrzadczy diff --git a/McZapkie/hamulce.cpp b/McZapkie/hamulce.cpp index 1cba8862..146d1c00 100644 --- a/McZapkie/hamulce.cpp +++ b/McZapkie/hamulce.cpp @@ -20,15 +20,15 @@ Copyright (C) 2007-2014 Maciej Cierniak //---FUNKCJE OGOLNE--- static double const DPL = 0.25; -double TFV4aM::pos_table[11] = {-2, 6, -1, 0, -2, 1, 4, 6, 0, 0, 0}; -double TMHZ_EN57::pos_table[11] = {-2, 10, -1, 0, 0, 2, 9, 10, 0, 0, 0}; -double TM394::pos_table[11] = {-1, 5, -1, 0, 1, 2, 4, 5, 0, 0, 0}; -double TH14K1::BPT_K[6][2] = {{10, 0}, {4, 1}, {0, 1}, {4, 0}, {4, -1}, {15, -1}}; -double TH14K1::pos_table[11] = {-1, 4, -1, 0, 1, 2, 3, 4, 0, 0, 0}; -double TSt113::BPT_K[6][2] = {{10, 0}, {4, 1}, {0, 1}, {4, 0}, {4, -1}, {15, -1}}; -double TSt113::BEP_K[7] = {0, -1, 1, 0, 0, 0, 0}; -double TSt113::pos_table[11] = {-1, 5, -1, 0, 2, 3, 4, 5, 0, 0, 1}; -double TFVel6::pos_table[11] = {-1, 6, -1, 0, 6, 4, 4.7, 5, -1, 0, 1}; +double const TFV4aM::pos_table[11] = {-2, 6, -1, 0, -2, 1, 4, 6, 0, 0, 0}; +double const TMHZ_EN57::pos_table[11] = {-2, 10, -1, 0, 0, 2, 9, 10, 0, 0, 0}; +double const TM394::pos_table[11] = {-1, 5, -1, 0, 1, 2, 4, 5, 0, 0, 0}; +double const TH14K1::BPT_K[6][2] = {{10, 0}, {4, 1}, {0, 1}, {4, 0}, {4, -1}, {15, -1}}; +double const TH14K1::pos_table[11] = {-1, 4, -1, 0, 1, 2, 3, 4, 0, 0, 0}; +double const TSt113::BPT_K[6][2] = {{10, 0}, {4, 1}, {0, 1}, {4, 0}, {4, -1}, {15, -1}}; +double const TSt113::BEP_K[7] = {0, -1, 1, 0, 0, 0, 0}; +double const TSt113::pos_table[11] = {-1, 5, -1, 0, 2, 3, 4, 5, 0, 0, 1}; +double const TFVel6::pos_table[11] = {-1, 6, -1, 0, 6, 4, 4.7, 5, -1, 0, 1}; double PR(double P1, double P2) { @@ -147,14 +147,6 @@ void TReservoir::Flow(double dv) dVol = dVol + dv; } -TReservoir::TReservoir() -{ - // inherited:: Create; - Cap = 1; - Vol = 0; - dVol = 0; -} - void TReservoir::Act() { Vol = Vol + dVol; @@ -264,9 +256,9 @@ TBrake::TBrake(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn 4.2; // objetosc CH w stosunku do cylindra 14" i cisnienia 4.2 atm // BrakeCyl:=TReservoir.Create; - BrakeCyl = new TBrakeCyl(); - BrakeRes = new TReservoir(); - ValveRes = new TReservoir(); + BrakeCyl = std::make_shared(); + BrakeRes = std::make_shared(); + ValveRes = std::make_shared(); // tworzenie zbiornikow BrakeCyl->CreateCap(i_bcd * BCA * 1000); @@ -279,34 +271,34 @@ TBrake::TBrake(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn switch (i_mat) { case bp_P10Bg: - FM = new TP10Bg(); + FM = std::make_shared(); break; case bp_P10Bgu: - FM = new TP10Bgu(); + FM = std::make_shared(); break; case bp_FR513: - FM = new TFR513(); + FM = std::make_shared(); break; case bp_FR510: - FM = new TFR510(); + FM = std::make_shared(); break; case bp_Cosid: - FM = new TCosid(); + FM = std::make_shared(); break; case bp_P10yBg: - FM = new TP10yBg(); + FM = std::make_shared(); break; case bp_P10yBgu: - FM = new TP10yBgu(); + FM = std::make_shared(); break; case bp_D1: - FM = new TDisk1(); + FM = std::make_shared(); break; case bp_D2: - FM = new TDisk2(); + FM = std::make_shared(); break; default: // domyslnie - FM = new TP10(); + FM = std::make_shared(); } } @@ -2203,10 +2195,7 @@ double TFV4a::GetPF(double i_bcp, double PP, double HP, double dt, double ep) void TFV4a::Init(double Press) { CP = Press; - TP = 0; RP = Press; - Time = false; - TimeEP = false; } //---FV4a/M--- nowonapisany kran bez poprawki IC @@ -2342,13 +2331,7 @@ double TFV4aM::GetPF(double i_bcp, double PP, double HP, double dt, double ep) void TFV4aM::Init(double Press) { CP = Press; - TP = 0.0; RP = Press; - XP = 0.0; - Time = false; - TimeEP = false; - RedAdj = 0.0; - Fala = false; } void TFV4aM::SetReductor(double nAdj) @@ -2483,12 +2466,6 @@ double TMHZ_EN57::GetPF(double i_bcp, double PP, double HP, double dt, double ep void TMHZ_EN57::Init(double Press) { CP = Press; - TP = 0.0; - RP = 0.0; - Time = false; - TimeEP = false; - RedAdj = 0.0; - Fala = false; } void TMHZ_EN57::SetReductor(double nAdj) @@ -2591,9 +2568,7 @@ double TM394::GetPF(double i_bcp, double PP, double HP, double dt, double ep) void TM394::Init(double Press) { CP = Press; - RedAdj = 0; Time = true; - TimeEP = false; } void TM394::SetReductor(double nAdj) @@ -2657,7 +2632,6 @@ double TH14K1::GetPF(double i_bcp, double PP, double HP, double dt, double ep) void TH14K1::Init(double Press) { CP = Press; - RedAdj = 0; Time = true; TimeEP = true; } @@ -2738,7 +2712,6 @@ void TSt113::Init(double Press) { Time = true; TimeEP = true; - EPS = 0.0; } //--- test --- @@ -2799,11 +2772,8 @@ double TFD1::GetPF(double i_bcp, double PP, double HP, double dt, double ep) void TFD1::Init(double Press) { - BP = 0; MaxBP = Press; - Time = false; - TimeEP = false; - Speed = 1; + Speed = 1.0; } double TFD1::GetCP() @@ -2844,10 +2814,8 @@ double TH1405::GetPF(double i_bcp, double PP, double HP, double dt, double ep) void TH1405::Init(double Press) { - BP = 0; MaxBP = Press; Time = true; - TimeEP = false; } double TH1405::GetCP() @@ -2919,7 +2887,6 @@ void TFVel6::Init(double Press) { Time = true; TimeEP = true; - EPS = 0.0; } // END diff --git a/McZapkie/hamulce.h b/McZapkie/hamulce.h index 2914c975..03ad3685 100644 --- a/McZapkie/hamulce.h +++ b/McZapkie/hamulce.h @@ -1,7 +1,4 @@ -#pragma once -#ifndef INCLUDED_HAMULCE_H -#define INCLUDED_HAMULCE_H - /*fizyka hamulcow dla symulatora*/ +/*fizyka hamulcow dla symulatora*/ /* This Source Code Form is subject to the @@ -35,121 +32,117 @@ H14K1 (zasadniczy), H1405 (pomocniczy), St113 (ep) Knorr/West EP - ¿eby by³ */ +#pragma once + #include "friction.h" // Pascal unit #include "mctools.h" // Pascal unit -//#include + +static int const LocalBrakePosNo = 10; /*ilosc nastaw hamulca recznego lub pomocniczego*/ +static int const MainBrakeMaxPos = 10; /*max. ilosc nastaw hamulca zasadniczego*/ + +/*nastawy hamulca*/ +static int const bdelay_G = 1; //G +static int const bdelay_P = 2; //P +static int const bdelay_R = 4; //R +static int const bdelay_M = 8; //Mg +static int const bdelay_GR = 128; //G-R +/*stan hamulca*/ +static int const b_off = 0; //luzowanie +static int const b_hld = 1; //trzymanie +static int const b_on = 2; //napelnianie +static int const b_rfl = 4; //uzupelnianie +static int const b_rls = 8; //odluzniacz +static int const b_ep = 16; //elektropneumatyczny +static int const b_asb = 32; //elektropneumatyczny +static int const b_dmg = 128; //wylaczony z dzialania - static int const LocalBrakePosNo = 10; /*ilosc nastaw hamulca recznego lub pomocniczego*/ - static int const MainBrakeMaxPos = 10; /*max. ilosc nastaw hamulca zasadniczego*/ +/*uszkodzenia hamulca*/ +static int const df_on = 1; //napelnianie +static int const df_off = 2; //luzowanie +static int const df_br = 4; //wyplyw z ZP +static int const df_vv = 8; //wyplyw z komory wstepnej +static int const df_bc = 16; //wyplyw z silownika +static int const df_cv = 32; //wyplyw z ZS +static int const df_PP = 64; //zawsze niski stopien +static int const df_RR = 128; //zawsze wysoki stopien - /*nastawy hamulca*/ - static int const bdelay_G = 1; //G - static int const bdelay_P = 2; //P - static int const bdelay_R = 4; //R - static int const bdelay_M = 8; //Mg - static int const bdelay_GR = 128; //G-R +/*indeksy dzwiekow FV4a*/ +static int const s_fv4a_b = 0; //hamowanie +static int const s_fv4a_u = 1; //luzowanie +static int const s_fv4a_e = 2; //hamowanie nagle +static int const s_fv4a_x = 3; //wyplyw sterujacego fala +static int const s_fv4a_t = 4; //wyplyw z czasowego + +/*pary cierne*/ +static int const bp_P10 = 0; +static int const bp_P10Bg = 2; //¿eliwo fosforowe P10 +static int const bp_P10Bgu = 1; +static int const bp_LLBg = 4; //komp. b.n.t. +static int const bp_LLBgu = 3; +static int const bp_LBg = 6; //komp. n.t. +static int const bp_LBgu = 5; +static int const bp_KBg = 8; //komp. w.t. +static int const bp_KBgu = 7; +static int const bp_D1 = 9; //tarcze +static int const bp_D2 = 10; +static int const bp_FR513 = 11; //Frenoplast FR513 +static int const bp_Cosid = 12; //jakistam kompozyt :D +static int const bp_PKPBg = 13; //¿eliwo PKP +static int const bp_PKPBgu = 14; +static int const bp_MHS = 128; //magnetyczny hamulec szynowy +static int const bp_P10yBg = 15; //¿eliwo fosforowe P10 +static int const bp_P10yBgu = 16; +static int const bp_FR510 = 17; //Frenoplast FR510 + +static int const sf_Acc = 1; //przyspieszacz +static int const sf_BR = 2; //przekladnia +static int const sf_CylB = 4; //cylinder - napelnianie +static int const sf_CylU = 8; //cylinder - oproznianie +static int const sf_rel = 16; //odluzniacz +static int const sf_ep = 32; //zawory ep + +static int const bh_MIN = 0; //minimalna pozycja +static int const bh_MAX = 1; //maksymalna pozycja +static int const bh_FS = 2; //napelnianie uderzeniowe //jesli nie ma, to jazda +static int const bh_RP = 3; //jazda +static int const bh_NP = 4; //odciecie - podwojna trakcja +static int const bh_MB = 5; //odciecie - utrzymanie stopnia hamowania/pierwszy 1 stopien hamowania +static int const bh_FB = 6; //pelne +static int const bh_EB = 7; //nagle +static int const bh_EPR = 8; //ep - luzowanie //pelny luz dla ep k¹towego +static int const bh_EPN = 9; //ep - utrzymanie //jesli rowne luzowaniu, wtedy sterowanie przyciskiem +static int const bh_EPB = 10; //ep - hamowanie //pelne hamowanie dla ep k¹towego - /*stan hamulca*/ - static int const b_off = 0; //luzowanie - static int const b_hld = 1; //trzymanie - static int const b_on = 2; //napelnianie - static int const b_rfl = 4; //uzupelnianie - static int const b_rls = 8; //odluzniacz - static int const b_ep = 16; //elektropneumatyczny - static int const b_asb = 32; //elektropneumatyczny - static int const b_dmg = 128; //wylaczony z dzialania +static double const SpgD = 0.7917; +static double const SpO = 0.5067; //przekroj przewodu 1" w l/m + //wyj: jednostka dosyc dziwna, ale wszystkie obliczenia + //i pojemnosci sa podane w litrach (rozsadne wielkosci) + //zas dlugosc pojazdow jest podana w metrach + //a predkosc przeplywu w m/s //3.5 + //7//1.5 +// BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (14, 5.4), (9, 5.0), (6, 4.6), (9, 4.5), (9, 4.0), (9, 3.5), (9, 2.8), (34, 2.8)); +// BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (7, 5.0), (2.0, 5.0), (4.5, 4.6), (4.5, 4.2), (4.5, 3.8), (4.5, 3.4), (4.5, 2.8), (8, 2.8)); +static double const BPT[9][2] = { {0 , 5.0} , {7 , 5.0} , {2.0 , 5.0} , {4.5 , 4.6} , {4.5 , 4.2} , {4.5 , 3.8} , {4.5 , 3.4} , {4.5 , 2.8} , {8 , 2.8} }; +static double const BPT_394[7][2] = { {13 , 10.0} , {5 , 5.0} , {0 , -1} , {5 , -1} , {5 , 0.0} , {5 , 0.0} , {18 , 0.0} }; +//double *BPT = zero_based_BPT[2]; //tablica pozycji hamulca dla zakresu -2..6 +//double *BPT_394 = zero_based_BPT_394[1]; //tablica pozycji hamulca dla zakresu -1..5 +// BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (12, 5.4), (9, 5.0), (9, 4.6), (9, 4.2), (9, 3.8), (9, 3.4), (9, 2.8), (34, 2.8)); +// BPT: array[-2..6] of array [0..1] of real= ((0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0)); +static int const i_bcpno = 6; +// static double const pi = 3.141592653589793; //definicja w mctools - /*uszkodzenia hamulca*/ - static int const df_on = 1; //napelnianie - static int const df_off = 2; //luzowanie - static int const df_br = 4; //wyplyw z ZP - static int const df_vv = 8; //wyplyw z komory wstepnej - static int const df_bc = 16; //wyplyw z silownika - static int const df_cv = 32; //wyplyw z ZS - static int const df_PP = 64; //zawsze niski stopien - static int const df_RR = 128; //zawsze wysoki stopien +//klasa obejmujaca pojedyncze zbiorniki +class TReservoir { - /*indeksy dzwiekow FV4a*/ - static int const s_fv4a_b = 0; //hamowanie - static int const s_fv4a_u = 1; //luzowanie - static int const s_fv4a_e = 2; //hamowanie nagle - static int const s_fv4a_x = 3; //wyplyw sterujacego fala - static int const s_fv4a_t = 4; //wyplyw z czasowego - - /*pary cierne*/ - static int const bp_P10 = 0; - static int const bp_P10Bg = 2; //¿eliwo fosforowe P10 - static int const bp_P10Bgu = 1; - static int const bp_LLBg = 4; //komp. b.n.t. - static int const bp_LLBgu = 3; - static int const bp_LBg = 6; //komp. n.t. - static int const bp_LBgu = 5; - static int const bp_KBg = 8; //komp. w.t. - static int const bp_KBgu = 7; - static int const bp_D1 = 9; //tarcze - static int const bp_D2 = 10; - static int const bp_FR513 = 11; //Frenoplast FR513 - static int const bp_Cosid = 12; //jakistam kompozyt :D - static int const bp_PKPBg = 13; //¿eliwo PKP - static int const bp_PKPBgu = 14; - static int const bp_MHS = 128; //magnetyczny hamulec szynowy - static int const bp_P10yBg = 15; //¿eliwo fosforowe P10 - static int const bp_P10yBgu = 16; - static int const bp_FR510 = 17; //Frenoplast FR510 - - static int const sf_Acc = 1; //przyspieszacz - static int const sf_BR = 2; //przekladnia - static int const sf_CylB = 4; //cylinder - napelnianie - static int const sf_CylU = 8; //cylinder - oproznianie - static int const sf_rel = 16; //odluzniacz - static int const sf_ep = 32; //zawory ep - - static int const bh_MIN = 0; //minimalna pozycja - static int const bh_MAX = 1; //maksymalna pozycja - static int const bh_FS = 2; //napelnianie uderzeniowe //jesli nie ma, to jazda - static int const bh_RP = 3; //jazda - static int const bh_NP = 4; //odciecie - podwojna trakcja - static int const bh_MB = 5; //odciecie - utrzymanie stopnia hamowania/pierwszy 1 stopien hamowania - static int const bh_FB = 6; //pelne - static int const bh_EB = 7; //nagle - static int const bh_EPR = 8; //ep - luzowanie //pelny luz dla ep k¹towego - static int const bh_EPN = 9; //ep - utrzymanie //jesli rowne luzowaniu, wtedy sterowanie przyciskiem - static int const bh_EPB = 10; //ep - hamowanie //pelne hamowanie dla ep k¹towego - - - static double const SpgD = 0.7917; - static double const SpO = 0.5067; //przekroj przewodu 1" w l/m - //wyj: jednostka dosyc dziwna, ale wszystkie obliczenia - //i pojemnosci sa podane w litrach (rozsadne wielkosci) - //zas dlugosc pojazdow jest podana w metrach - //a predkosc przeplywu w m/s //3.5 - //7//1.5 - // BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (14, 5.4), (9, 5.0), (6, 4.6), (9, 4.5), (9, 4.0), (9, 3.5), (9, 2.8), (34, 2.8)); - // BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (7, 5.0), (2.0, 5.0), (4.5, 4.6), (4.5, 4.2), (4.5, 3.8), (4.5, 3.4), (4.5, 2.8), (8, 2.8)); - static double BPT[9][2] = { {0 , 5.0} , {7 , 5.0} , {2.0 , 5.0} , {4.5 , 4.6} , {4.5 , 4.2} , {4.5 , 3.8} , {4.5 , 3.4} , {4.5 , 2.8} , {8 , 2.8} }; - static double BPT_394[7][2] = { {13 , 10.0} , {5 , 5.0} , {0 , -1} , {5 , -1} , {5 , 0.0} , {5 , 0.0} , {18 , 0.0} }; - //double *BPT = zero_based_BPT[2]; //tablica pozycji hamulca dla zakresu -2..6 - //double *BPT_394 = zero_based_BPT_394[1]; //tablica pozycji hamulca dla zakresu -1..5 - // BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (12, 5.4), (9, 5.0), (9, 4.6), (9, 4.2), (9, 3.8), (9, 3.4), (9, 2.8), (34, 2.8)); - // BPT: array[-2..6] of array [0..1] of real= ((0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0)); - static int const i_bcpno = 6; - // static double const pi = 3.141592653589793; //definicja w mctools - - //klasa obejmujaca pojedyncze zbiorniki - - - class TReservoir - { protected: - double Cap; - double Vol; - double dVol; + double Cap = 1.0; + double Vol = 0.0; + double dVol = 0.0; public: - TReservoir(); void CreateCap(double Capacity); void CreatePress(double Press); virtual double pa(); @@ -157,54 +150,47 @@ Knorr/West EP - void Flow(double dv); void Act(); - }; - + TReservoir() = default; +}; typedef TReservoir *PReservoir; - class TBrakeCyl : public TReservoir +class TBrakeCyl : public TReservoir { - { public: virtual double pa()/*override*/; virtual double P()/*override*/; TBrakeCyl() : TReservoir() {}; - }; +}; +//klasa obejmujaca uklad hamulca zespolonego pojazdu +class TBrake { - //klasa obejmujaca uklad hamulca zespolonego pojazdu - - - class TBrake - { protected: - TReservoir *BrakeCyl; //silownik - TReservoir *BrakeRes; //ZP - TReservoir *ValveRes; //komora wstepna - int BCN; //ilosc silownikow - double BCM; //przekladnia hamulcowa - double BCA; //laczny przekroj silownikow - int BrakeDelays; //dostepne opoznienia - int BrakeDelayFlag; //aktualna nastawa - TFricMat *FM; //material cierny - double MaxBP; //najwyzsze cisnienie - int BA; //osie hamowane - int NBpA; //klocki na os - double SizeBR; //rozmiar^2 ZP (w stosunku do 14") - double SizeBC; //rozmiar^2 CH (w stosunku do 14") - bool DCV; //podwojny zawor zwrotny - double ASBP; //cisnienie hamulca pp - - int BrakeStatus; //flaga stanu - int SoundFlag; + std::shared_ptr BrakeCyl; //silownik + std::shared_ptr BrakeRes; //ZP + std::shared_ptr ValveRes; //komora wstepna + int BCN = 0; //ilosc silownikow + double BCM = 0.0; //przekladnia hamulcowa + double BCA = 0.0; //laczny przekroj silownikow + int BrakeDelays = 0; //dostepne opoznienia + int BrakeDelayFlag = 0; //aktualna nastawa + std::shared_ptr FM; //material cierny + double MaxBP = 0.0; //najwyzsze cisnienie + int BA = 0; //osie hamowane + int NBpA = 0; //klocki na os + double SizeBR = 0.0; //rozmiar^2 ZP (w stosunku do 14") + double SizeBC = 0.0; //rozmiar^2 CH (w stosunku do 14") + bool DCV = false; //podwojny zawor zwrotny + double ASBP = 0.0; //cisnienie hamulca pp + int BrakeStatus = 0; //flaga stanu + int SoundFlag = 0; public: - TBrake(double i_mbp, double i_bcr, double i_bcd, double i_brc, - int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa); - //maksymalne cisnienie, promien, skok roboczy, pojemnosc ZP; - //ilosc cylindrow, opoznienia hamulca, material klockow, osie hamowane, klocki na os; + TBrake(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa); + //maksymalne cisnienie, promien, skok roboczy, pojemnosc ZP, ilosc cylindrow, opoznienia hamulca, material klockow, osie hamowane, klocki na os; virtual void Init(double PP, double HPP, double LPP, double BP, int BDF); //inicjalizacja hamulca double GetFC(double Vel, double N); //wspolczynnik tarcia - hamulec wie lepiej @@ -229,23 +215,18 @@ Knorr/West EP - virtual void ForceEmptiness(); int GetSoundFlag(); virtual void SetED(double EDstate) {}; //stan hamulca ED do luzowania +}; - // procedure +class TWest : public TBrake { - }; - - - - class TWest : public TBrake - - { private: - double LBP; //cisnienie hamulca pomocniczego - double dVP; //pobor powietrza wysokiego cisnienia - double EPS; //stan elektropneumatyka - double TareM; double LoadM; //masa proznego i pelnego - double TareBP; //cisnienie dla proznego - double LoadC; //wspolczynnik przystawki wazacej + double LBP = 0.0; //cisnienie hamulca pomocniczego + double dVP = 0.0; //pobor powietrza wysokiego cisnienia + double EPS = 0.0; //stan elektropneumatyka + double TareM = 0.0; //masa proznego + double LoadM = 0.0; //i pelnego + double TareBP = 0.0; //cisnienie dla proznego + double LoadC = 0.0; //wspolczynnik przystawki wazacej public: void Init(double PP, double HPP, double LPP, double BP, int BDF)/*override*/; @@ -256,24 +237,18 @@ Knorr/West EP - void SetEPS(double nEPS)/*override*/; //stan hamulca EP void SetLP(double TM, double LM, double TBP); //parametry przystawki wazacej - inline TWest(double i_mbp, double i_bcr, double i_bcd, double i_brc, - int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) - { - LBP, dVP, EPS, TareM, TareBP, LoadM, LoadC = 0.0; - } - }; + inline TWest(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : + TBrake( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa) + {} +}; +class TESt : public TBrake { - - class TESt : public TBrake - - { private: protected: - TReservoir *CntrlRes; //zbiornik steruj¹cy - double BVM; //przelozenie PG-CH + std::shared_ptr CntrlRes; //zbiornik steruj¹cy + double BVM = 0.0; //przelozenie PG-CH public: void Init(double PP, double HPP, double LPP, double BP, int BDF)/*override*/; @@ -285,93 +260,77 @@ Knorr/West EP - double CVs(double BP); //napelniacz sterujacego double BVs(double BCP); //napelniacz pomocniczego - inline TESt(double i_mbp, double i_bcr, double i_bcd, double i_brc, - int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) + inline TESt(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : + TBrake( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa) { - CntrlRes = new TReservoir(); + CntrlRes = std::make_shared(); } - }; +}; +class TESt3 : public TESt { - - class TESt3 : public TESt - - { private: //double CylFlowSpeed[2][2]; //zmienna nie uzywana public: double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG - inline TESt3(double i_mbp, double i_bcr, double i_bcd, double i_brc, - int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : TESt(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) { } - }; + inline TESt3(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : + TESt( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa) + {} +}; +class TESt3AL2 : public TESt3 { - - class TESt3AL2 : public TESt3 - - { private: - double TareM; double LoadM; //masa proznego i pelnego - double TareBP; //cisnienie dla proznego - double LoadC; - + std::shared_ptr ImplsRes; //komora impulsowa + double TareM = 0.0; //masa proznego + double LoadM = 0.0; //i pelnego + double TareBP = 0.0; //cisnienie dla proznego + double LoadC = 0.0; public: - TReservoir *ImplsRes; //komora impulsowa void Init(double PP, double HPP, double LPP, double BP, int BDF)/*override*/; double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG void PLC(double mass); //wspolczynnik cisnienia przystawki wazacej void SetLP(double TM, double LM, double TBP); //parametry przystawki wazacej - inline TESt3AL2(double i_mbp, double i_bcr, double i_bcd, double i_brc - , int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : TESt3(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) + inline TESt3AL2(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : + TESt3( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa) { - TareM, TareBP, LoadM, LoadC = 0.0; + ImplsRes = std::make_shared(); } - }; +}; +class TESt4R : public TESt { - - class TESt4R : public TESt - - { private: - bool RapidStatus; + bool RapidStatus = false; protected: - TReservoir *ImplsRes; //komora impulsowa - double RapidTemp; //aktualne, zmienne przelozenie + std::shared_ptr ImplsRes; //komora impulsowa + double RapidTemp = 0.0; //aktualne, zmienne przelozenie public: void Init(double PP, double HPP, double LPP, double BP, int BDF)/*override*/; double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG - inline TESt4R(double i_mbp, double i_bcr, double i_bcd, double i_brc - , int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : TESt(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) + inline TESt4R(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : + TESt( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa) { - RapidTemp = 0.0; - ImplsRes = new TReservoir(); + ImplsRes = std::make_shared(); } - }; +}; +class TLSt : public TESt4R { - - class TLSt : public TESt4R - - { private: // double CylFlowSpeed[2][2]; // zmienna nie u¿ywana protected: - double LBP; //cisnienie hamulca pomocniczego - double RM; //przelozenie rapida - double EDFlag; //luzowanie hamulca z powodu zalaczonego ED + double LBP = 0.0; //cisnienie hamulca pomocniczego + double RM = 0.0; //przelozenie rapida + double EDFlag = 0.0; //luzowanie hamulca z powodu zalaczonego ED public: void Init(double PP, double HPP, double LPP, double BP, int BDF)/*override*/; @@ -382,26 +341,22 @@ Knorr/West EP - virtual double GetEDBCP(); //cisnienie tylko z hamulca zasadniczego, uzywane do hamulca ED w EP09 virtual void SetED(double EDstate); //stan hamulca ED do luzowania - inline TLSt(double i_mbp, double i_bcr, double i_bcd, double i_brc, - int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : TESt4R(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) - { - } - }; + inline TLSt(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : + TESt4R( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa) + {} +}; +class TEStED : public TLSt { //zawor z EP09 - Est4 z oddzielnym przekladnikiem, kontrola rapidu i takie tam - - class TEStED : public TLSt //zawor z EP09 - Est4 z oddzielnym przekladnikiem, kontrola rapidu i takie tam - - { private: - double Nozzles[11]; //dysze - bool Zamykajacy; //pamiec zaworka zamykajacego - bool Przys_blok; //blokada przyspieszacza - TReservoir *Miedzypoj; //pojemnosc posrednia (urojona) do napelniania ZP i ZS - double TareM; double LoadM; //masa proznego i pelnego - double TareBP; //cisnienie dla proznego - double LoadC; + std::shared_ptr Miedzypoj; //pojemnosc posrednia (urojona) do napelniania ZP i ZS + double Nozzles[ 11 ]; //dysze + bool Zamykajacy = false; //pamiec zaworka zamykajacego + bool Przys_blok = false; //blokada przyspieszacza + double TareM = 0.0; //masa proznego + double LoadM = 0.0; //i pelnego + double TareBP = 0.0; //cisnienie dla proznego + double LoadC = 0.0; public: @@ -411,26 +366,21 @@ Knorr/West EP - void PLC(double mass); //wspolczynnik cisnienia przystawki wazacej void SetLP(double TM, double LM, double TBP); //parametry przystawki wazacej - inline TEStED(double i_mbp, double i_bcr, double i_bcd, double i_brc - , int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : TLSt(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) + inline TEStED(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : + TLSt( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa) { - Przys_blok = false; - TareM, TareBP, LoadM, LoadC = 0.0; - Miedzypoj = new TReservoir(); + Miedzypoj = std::make_shared(); } - }; +}; +class TEStEP2 : public TLSt { - - class TEStEP2 : public TLSt - - { private: - double TareM; double LoadM; //masa proznego i pelnego - double TareBP; //cisnienie dla proznego - double LoadC; - double EPS; + double TareM = 0.0; //masa proznego + double LoadM = 0.0; //masa pelnego + double TareBP = 0.0; //cisnienie dla proznego + double LoadC = 0.0; + double EPS = 0.0; public: @@ -440,25 +390,18 @@ Knorr/West EP - void SetEPS(double nEPS)/*override*/; //stan hamulca EP void SetLP(double TM, double LM, double TBP); //parametry przystawki wazacej - inline TEStEP2(double i_mbp, double i_bcr, double i_bcd, double i_brc - , int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : TLSt(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) - { - TareM, TareBP, LoadM, LoadC, EPS = 0.0; - } - }; + inline TEStEP2(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : + TLSt( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa) + {} +}; +class TCV1 : public TBrake { - - class TCV1 : public TBrake - - { private: - double BVM; //przelozenie PG-CH - + double BVM = 0.0; //przelozenie PG-CH protected: - TReservoir *CntrlRes; //zbiornik steruj¹cy + std::shared_ptr CntrlRes; //zbiornik steruj¹cy public: void Init(double PP, double HPP, double LPP, double BP, int BDF)/*override*/; @@ -468,15 +411,12 @@ Knorr/West EP - double CVs(double BP); double BVs(double BCP); - inline TCV1(double i_mbp, double i_bcr, double i_bcd, double i_brc, - int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) + inline TCV1(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : + TBrake( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa) { - CntrlRes = new TReservoir(); + CntrlRes = std::make_shared(); } - }; - - +}; //class TCV1R : public TCV1 @@ -495,15 +435,11 @@ Knorr/West EP - // , i_BD, i_mat, i_ba, i_nbpa, PP, HPP, LPP, BP, BDF) { } //}; +class TCV1L_TR : public TCV1 { - - class TCV1L_TR : public TCV1 - - { private: - TReservoir *ImplsRes; //komora impulsowa - double LBP; //cisnienie hamulca pomocniczego - + std::shared_ptr ImplsRes; //komora impulsowa + double LBP = 0.0; //cisnienie hamulca pomocniczego public: void Init(double PP, double HPP, double LPP, double BP, int BDF)/*override*/; @@ -511,32 +447,27 @@ Knorr/West EP - void SetLBP(double P); //cisnienie z hamulca pomocniczego double GetHPFlow(double HP, double dt)/*override*/; //przeplyw - 8 bar - inline TCV1L_TR(double i_mbp, double i_bcr, double i_bcd, double i_brc - , int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : TCV1(i_mbp, i_bcr, i_bcd, i_brc, i_bcn - , i_BD, i_mat, i_ba, i_nbpa) + inline TCV1L_TR(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : + TCV1( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa) { - LBP = 0.0; - ImplsRes = new TReservoir(); + ImplsRes = std::make_shared(); } - }; +}; +class TKE : public TBrake { //Knorr Einheitsbauart — jeden do wszystkiego - - class TKE : public TBrake //Knorr Einheitsbauart — jeden do wszystkiego - - { private: - bool RapidStatus; - TReservoir *ImplsRes; //komora impulsowa - TReservoir *CntrlRes; //zbiornik steruj¹cy - TReservoir *Brak2Res; //zbiornik pomocniczy 2 - double BVM; //przelozenie PG-CH - double TareM; double LoadM; //masa proznego i pelnego - double TareBP; //cisnienie dla proznego - double LoadC; //wspolczynnik zaladowania - double RM; //przelozenie rapida - double LBP; //cisnienie hamulca pomocniczego - + std::shared_ptr ImplsRes; //komora impulsowa + std::shared_ptr CntrlRes; //zbiornik steruj¹cy + std::shared_ptr Brak2Res; //zbiornik pomocniczy 2 + bool RapidStatus = false; + double BVM = 0.0; //przelozenie PG-CH + double TareM = 0.0; //masa proznego + double LoadM = 0.0; //masa pelnego + double TareBP = 0.0; //cisnienie dla proznego + double LoadC = 0.0; //wspolczynnik zaladowania + double RM = 0.0; //przelozenie rapida + double LBP = 0.0; //cisnienie hamulca pomocniczego public: void Init(double PP, double HPP, double LPP, double BP, int BDF)/*override*/; @@ -552,34 +483,26 @@ Knorr/West EP - void SetLP(double TM, double LM, double TBP); //parametry przystawki wazacej void SetLBP(double P); //cisnienie z hamulca pomocniczego - inline TKE(double i_mbp, double i_bcr, double i_bcd, double i_brc, int - i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn, - i_BD, i_mat, i_ba, i_nbpa) + inline TKE(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : + TBrake( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa) { - RapidStatus = false; - TareM, TareBP, LoadM, LoadC, RM, LBP = 0.0; - ImplsRes = new TReservoir(); - CntrlRes = new TReservoir(); - Brak2Res = new TReservoir(); + ImplsRes = std::make_shared(); + CntrlRes = std::make_shared(); + Brak2Res = std::make_shared(); } - }; +}; +//klasa obejmujaca krany +class TDriverHandle { - - - - //klasa obejmujaca krany - - - class TDriverHandle - { private: // BCP: integer; public: - bool Time; - bool TimeEP; - double Sounds[5]; //wielkosci przeplywow dla dzwiekow + bool Time = false; + bool TimeEP = false; + double Sounds[ 5 ]; //wielkosci przeplywow dla dzwiekow + virtual double GetPF(double i_bcp, double PP, double HP, double dt, double ep); virtual void Init(double Press); virtual double GetCP(); @@ -587,41 +510,39 @@ Knorr/West EP - virtual double GetSound(int i); virtual double GetPos(int i); virtual double GetEP(double pos); +}; - }; +class TFV4a : public TDriverHandle { - - - class TFV4a : public TDriverHandle - - { private: - double CP; double TP; double RP; //zbiornik steruj¹cy, czasowy, redukcyjny + double CP = 0.0; //zbiornik steruj¹cy + double TP = 0.0; //zbiornik czasowy + double RP = 0.0; //zbiornik redukcyjny public: double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/; void Init(double Press)/*override*/; - inline TFV4a(void) : TDriverHandle() { } + inline TFV4a() : + TDriverHandle() + {} +}; - }; +class TFV4aM : public TDriverHandle { - - - class TFV4aM : public TDriverHandle - - { private: - double CP; double TP; double RP; //zbiornik steruj¹cy, czasowy, redukcyjny - double XP; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali - double RedAdj; //dostosowanie reduktora cisnienia (krecenie kapturkiem) + double CP = 0.0; //zbiornik steruj¹cy + double TP = 0.0; //zbiornik czasowy + double RP = 0.0; //zbiornik redukcyjny + double XP = 0.0; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali + double RedAdj = 0.0; //dostosowanie reduktora cisnienia (krecenie kapturkiem) // Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow - bool Fala; - //double pos_table[]; - // double *pos_table; // = { -2, 6, -1, 0, -2, 1, 4, 6, 0, 0, 0 }; - static double pos_table[11]; + bool Fala = false; + static double const pos_table[11]; // = { -2, 6, -1, 0, -2, 1, 4, 6, 0, 0, 0 }; + double LPP_RP(double pos); bool EQ(double pos, double i_pos); + public: double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/; void Init(double Press)/*override*/; @@ -629,20 +550,21 @@ Knorr/West EP - double GetSound(int i)/*override*/; double GetPos(int i)/*override*/; - inline TFV4aM(void) : TDriverHandle() { } - }; + inline TFV4aM() : + TDriverHandle() + {} +}; +class TMHZ_EN57 : public TDriverHandle { - - class TMHZ_EN57 : public TDriverHandle - - { private: - double CP; double TP; double RP; //zbiornik steruj¹cy, czasowy, redukcyjny - double RedAdj; //dostosowanie reduktora cisnienia (krecenie kapturkiem) - bool Fala; - // const double pos_table[11] = { -2, 10, -1, 0, 0, 2, 9, 10, 0, 0, 0 }; - static double pos_table[11]; //= { 0, 12, 1, 2, 2, 4, 11, 12, 2, 2, 2 }; + double CP = 0.0; //zbiornik steruj¹cy + double TP = 0.0; //zbiornik czasowy + double RP = 0.0; //zbiornik redukcyjny + double RedAdj = 0.0; //dostosowanie reduktora cisnienia (krecenie kapturkiem) + bool Fala = false; + static double const pos_table[11]; //= { -2, 10, -1, 0, 0, 2, 9, 10, 0, 0, 0 }; + double LPP_RP(double pos); bool EQ(double pos, double i_pos); @@ -655,10 +577,10 @@ Knorr/West EP - double GetCP()/*override*/; double GetEP(double pos); - inline TMHZ_EN57(void) : TDriverHandle() { } - }; - - + inline TMHZ_EN57(void) : + TDriverHandle() + {} +}; /* FBS2= class(TTDriverHandle) private @@ -690,15 +612,12 @@ Knorr/West EP - function GetPos(i: int): real; override; end;*/ +class TM394 : public TDriverHandle { - class TM394 : public TDriverHandle - - { private: - double CP; //zbiornik steruj¹cy, czasowy, redukcyjny - double RedAdj; //dostosowanie reduktora cisnienia (krecenie kapturkiem) -// double const pos_table[11] = { -1, 5, -1, 0, 1, 2, 4, 5, 0, 0, 0 }; - static double pos_table[11]; // = { 0, 6, 0, 1, 2, 3, 5, 6, 1, 1, 1 }; + double CP = 0.0; //zbiornik steruj¹cy, czasowy, redukcyjny + double RedAdj = 0.0; //dostosowanie reduktora cisnienia (krecenie kapturkiem) + static double const pos_table[11]; // = { -1, 5, -1, 0, 1, 2, 4, 5, 0, 0, 0 }; public: double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/; @@ -707,21 +626,20 @@ Knorr/West EP - double GetCP()/*override*/; double GetPos(int i)/*override*/; - inline TM394(void) : TDriverHandle() { } - }; + inline TM394(void) : + TDriverHandle() + {} +}; +class TH14K1 : public TDriverHandle { - - class TH14K1 : public TDriverHandle - - { private: - double static BPT_K[/*?*/ /*-1..4*/ (4) - (-1) + 1][2]; -// double const table[11] = { -1, 4, -1, 0, 1, 2, 3, 4, 0, 0, 0 }; - double static pos_table[11]; // = { 0, 5, 0, 1, 2, 3, 4, 5, 1, 1, 1 }; + static double const BPT_K[/*?*/ /*-1..4*/ (4) - (-1) + 1][2]; + static double const pos_table[11]; // = {-1, 4, -1, 0, 1, 2, 3, 4, 0, 0, 0}; + protected: - double CP; //zbiornik steruj¹cy, czasowy, redukcyjny - double RedAdj; //dostosowanie reduktora cisnienia (krecenie kapturkiem) + double CP = 0.0; //zbiornik steruj¹cy, czasowy, redukcyjny + double RedAdj = 0.0; //dostosowanie reduktora cisnienia (krecenie kapturkiem) public: double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/; @@ -730,20 +648,18 @@ Knorr/West EP - double GetCP()/*override*/; double GetPos(int i)/*override*/; - inline TH14K1(void) : TDriverHandle() { } - }; + inline TH14K1(void) : + TDriverHandle() + {} +}; +class TSt113 : public TH14K1 { - - class TSt113 : public TH14K1 - - { private: - double EPS; - double static BPT_K[/*?*/ /*-1..4*/ (4) - (-1) + 1][2]; - double static BEP_K[/*?*/ /*-1..5*/ (5) - (-1) + 1]; -// double const pos_table[11] = { -1, 5, -1, 0, 2, 3, 4, 5, 0, 0, 1 }; - double static pos_table[11]; // = { 0, 6, 0, 1, 3, 4, 5, 6, 1, 1, 2 }; + double EPS = 0.0; + static double const BPT_K[/*?*/ /*-1..4*/ (4) - (-1) + 1][2]; + static double const BEP_K[/*?*/ /*-1..5*/ (5) - (-1) + 1]; + static double const pos_table[11]; // = {-1, 5, -1, 0, 2, 3, 4, 5, 0, 0, 1}; public: double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/; @@ -751,52 +667,50 @@ Knorr/West EP - double GetPos(int i)/*override*/; void Init(double Press)/*override*/; - inline TSt113(void) : TH14K1() { } - }; + inline TSt113(void) : + TH14K1() + {} +}; +class Ttest : public TDriverHandle { - - class Ttest : public TDriverHandle - - { private: - double CP; + double CP = 0.0; public: double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/; void Init(double Press)/*override*/; - inline Ttest(void) : TDriverHandle() { } - }; + inline Ttest(void) : + TDriverHandle() + {} +}; +class TFD1 : public TDriverHandle { - - class TFD1 : public TDriverHandle - - { private: - double MaxBP; //najwyzsze cisnienie - double BP; //aktualne cisnienie + double MaxBP = 0.0; //najwyzsze cisnienie + double BP = 0.0; //aktualne cisnienie public: - double Speed; //szybkosc dzialania + double Speed = 0.0; //szybkosc dzialania + double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/; void Init(double Press)/*override*/; double GetCP()/*override*/; void SetSpeed(double nSpeed); // procedure Init(press: real; MaxBP: real); overload; - inline TFD1(void) : TDriverHandle() { } - }; + inline TFD1(void) : + TDriverHandle() + {} +}; +class TH1405 : public TDriverHandle { - - class TH1405 : public TDriverHandle - - { private: - double MaxBP; //najwyzsze cisnienie - double BP; //aktualne cisnienie + double MaxBP = 0.0; //najwyzsze cisnienie + double BP = 0.0; //aktualne cisnienie public: double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/; @@ -804,19 +718,16 @@ Knorr/West EP - double GetCP()/*override*/; // procedure Init(press: real; MaxBP: real); overload; - inline TH1405(void) : TDriverHandle() { } - }; + inline TH1405(void) : + TDriverHandle() + {} +}; +class TFVel6 : public TDriverHandle { - - - class TFVel6 : public TDriverHandle - - { private: - double EPS; -// double const table[11] = { -1, 6, -1, 0, 6, 4, 4.7, 5, -1, 0, 1 }; - double static pos_table[11]; // = { -1, 6, -1, 0, 6, 4, 4.7, 5, -1, 0, 1 }; + double EPS = 0.0; + static double const pos_table[ 11 ]; // = {-1, 6, -1, 0, 6, 4, 4.7, 5, -1, 0, 1}; public: double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/; @@ -825,17 +736,14 @@ Knorr/West EP - double GetSound(int i)/*override*/; void Init(double Press)/*override*/; - inline TFVel6(void) : TDriverHandle() { } - }; + inline TFVel6(void) : + TDriverHandle() + {} +}; - extern double PF(double P1, double P2, double S, double DP = 0.25); - extern double PF1(double P1, double P2, double S); +extern double PF(double P1, double P2, double S, double DP = 0.25); +extern double PF1(double P1, double P2, double S); - extern double PFVa(double PH, double PL, double S, double LIM, double DP = 0.1); //zawor napelniajacy z PH do PL, PL do LIM - extern double PFVd(double PH, double PL, double S, double LIM, double DP = 0.1); //zawor wypuszczajacy z PH do PL, PH do LIM - -#if !defined(NO_IMPLICIT_NAMESPACE_USE) -#endif -#endif//INCLUDED_HAMULCE_H -//END +extern double PFVa(double PH, double PL, double S, double LIM, double DP = 0.1); //zawor napelniajacy z PH do PL, PL do LIM +extern double PFVd(double PH, double PL, double S, double LIM, double DP = 0.1); //zawor wypuszczajacy z PH do PL, PH do LIM diff --git a/McZapkie/mctools.cpp b/McZapkie/mctools.cpp index 5e0dfec6..793d87fd 100644 --- a/McZapkie/mctools.cpp +++ b/McZapkie/mctools.cpp @@ -294,20 +294,32 @@ std::string Tab2Sp(std::string const &s) /*Tab to Space sign*/ return s2; } -std::string ExchangeCharInString(std::string s, const char &aim, const char &target) +std::string ExchangeCharInString( std::string const &Source, char const &From, char const &To ) { - char *tmp = new char[s.length()]; - for (int b = 0; b < s.length(); ++b) - { - if (s[b] == aim) - if (target == (char)"") - b++; - else - tmp[b] = target; - else - tmp[b] = s[b]; + std::string replacement; replacement.reserve( Source.size() ); + std::for_each(Source.cbegin(), Source.cend(), [&](char const idx) { + if( idx != From ) { replacement += idx; } + else { + if( To != NULL ) { replacement += To; } } + } ); + + return replacement; +/* + int const length = Source.size(); + std::string replacement; replacement.reserve( length ); + for( int idx = 0; idx < length; ++idx ) { + if( Source[ idx ] != From ) { + replacement += Source[ idx ]; + } + else { + if( To != NULL ) { + replacement += To; + } + } } - return std::string(tmp); + + return replacement; +*/ } std::vector &Split(const std::string &s, char delim, std::vector &elems) @@ -387,25 +399,18 @@ std::string to_string(int _Val, int precision, int width) return o.str(); }; -std::string to_string(double _Val, int precision, int width) +std::string to_string(double const Value, int const Precision, int const Width) { - std::ostringstream o; - o.width(width); - o << std::fixed << std::setprecision(precision); - o << _Val; - return o.str(); + std::ostringstream converter; + converter << std::setw( Width ) << std::fixed << std::setprecision(Precision) << Value; + return converter.str(); }; -std::string to_hex_str(double _Val, int precision, int width) +std::string to_hex_str( int const Value, int const Width ) { - std::ostringstream o; - if (width) - o.width(width); - o << std::fixed << std::hex; - if (precision) - o << std::setprecision(precision); - o << _Val; - return o.str(); + std::ostringstream converter; + converter << "0x" << std::uppercase << std::setfill( '0' ) << std::setw( Width ) << std::hex << Value; + return converter.str(); }; int stol_def(const std::string &str, const int &DefaultValue) diff --git a/McZapkie/mctools.h b/McZapkie/mctools.h index 7e7835b7..fd745fb5 100644 --- a/McZapkie/mctools.h +++ b/McZapkie/mctools.h @@ -122,7 +122,7 @@ std::string DUE(std::string s); /*Delete Until Equal sign*/ std::string DWE(std::string s); /*Delete While Equal sign*/ std::string Ld2Sp(std::string const &s); /*Low dash to Space sign*/ std::string Tab2Sp(std::string const &s); /*Tab to Space sign*/ -std::string ExchangeCharInString(std::string s, const char &aim, const char &target); // zamienia jeden znak na drugi +std::string ExchangeCharInString(std::string const &s, const char &aim, const char &target); // zamienia jeden znak na drugi std::vector &Split(const std::string &s, char delim, std::vector &elems); std::vector Split(const std::string &s, char delim); std::vector Split(const std::string &s); @@ -134,7 +134,7 @@ std::string to_string(int _Val, int precision, int width); std::string to_string(double _Val); std::string to_string(double _Val, int precision); std::string to_string(double _Val, int precision, int width); -std::string to_hex_str(double _Val, int precision = 0, int width = 0); +std::string to_hex_str( int const _Val, int const width = 4 ); inline std::string to_string(bool _Val) { return _Val == true ? "true" : "false"; diff --git a/Names.cpp b/Names.cpp index 9aa7ff03..7c8654f7 100644 --- a/Names.cpp +++ b/Names.cpp @@ -108,6 +108,11 @@ TNames::TNames() ZeroMemory(rTypes, 20 * sizeof(ItemRecord *)); }; +TNames::~TNames() { + + delete[] cBuffer; +} + int TNames::Add(int t, const char *n) { // dodanie obiektu typu (t) o nazwie (n) int len = strlen(n) + 1; // ze znacznikiem koñca diff --git a/Names.h b/Names.h index de38a637..1c879076 100644 --- a/Names.h +++ b/Names.h @@ -49,6 +49,7 @@ class TNames int iLast; // ostatnio u¿yty rekord public: TNames(); + ~TNames(); int Add(int t, const char *n); // dodanie obiektu typu (t) int Add(int t, const char *n, void *d); // dodanie obiektu z wskaŸnikiem int Add(int t, const char *n, int d); // dodanie obiektu z numerem diff --git a/PyInt.cpp b/PyInt.cpp index 75b5c82c..9411d246 100644 --- a/PyInt.cpp +++ b/PyInt.cpp @@ -45,13 +45,19 @@ TPythonInterpreter *TPythonInterpreter::getInstance() return _instance; } -bool TPythonInterpreter::loadClassFile(const char *lookupPath, const char *className) +void +TPythonInterpreter::killInstance() { + + delete _instance; +} + +bool TPythonInterpreter::loadClassFile( std::string const &lookupPath, std::string const &className ) { - std::set::const_iterator it = _classes.find(className); + std::set::const_iterator it = _classes.find(className); if (it == _classes.end()) { FILE *sourceFile = _getFile(lookupPath, className); - if (sourceFile != NULL) + if (sourceFile != nullptr) { fseek(sourceFile, 0, SEEK_END); long fsize = ftell(sourceFile); @@ -72,10 +78,13 @@ bool TPythonInterpreter::loadClassFile(const char *lookupPath, const char *class handleError(); return false; } + _classes.insert( className ); +/* char *classNameToRemember = (char *)calloc(strlen(className) + 1, sizeof(char)); strcpy(classNameToRemember, className); _classes.insert(classNameToRemember); - free(buffer); +*/ + free(buffer); return true; } return false; @@ -83,13 +92,28 @@ bool TPythonInterpreter::loadClassFile(const char *lookupPath, const char *class return true; } -PyObject *TPythonInterpreter::newClass(const char *className) +PyObject *TPythonInterpreter::newClass( std::string const &className ) { return newClass(className, NULL); } -FILE *TPythonInterpreter::_getFile(const char *lookupPath, const char *className) +FILE *TPythonInterpreter::_getFile( std::string const &lookupPath, std::string const &className ) { + if( false == lookupPath.empty() ) { + std::string const sourcefilepath = lookupPath + className + ".py"; + FILE *file = fopen( sourcefilepath.c_str(), "r" ); +#ifdef _PY_INT_MORE_LOG + WriteLog( sourceFilePath ); +#endif // _PY_INT_MORE_LOG + if( nullptr != file ) { return file; } + } + std::string sourcefilepath = "python\\local\\" + className + ".py"; + FILE *file = fopen( sourcefilepath.c_str(), "r" ); +#ifdef _PY_INT_MORE_LOG + WriteLog( sourceFilePath ); +#endif // _PY_INT_MORE_LOG + return file; // either the file, or a nullptr on fail +/* char *sourceFilePath; if (lookupPath != NULL) { @@ -124,6 +148,7 @@ FILE *TPythonInterpreter::_getFile(const char *lookupPath, const char *className return file; } return NULL; +*/ } void TPythonInterpreter::handleError() @@ -177,14 +202,14 @@ void TPythonInterpreter::handleError() } } } -PyObject *TPythonInterpreter::newClass(const char *className, PyObject *argsTuple) +PyObject *TPythonInterpreter::newClass(std::string const &className, PyObject *argsTuple) { if (_main == NULL) { WriteLog("main turned into null"); return NULL; } - PyObject *classNameObj = PyObject_GetAttrString(_main, className); + PyObject *classNameObj = PyObject_GetAttrString(_main, className.c_str()); if (classNameObj == NULL) { #ifdef _PY_INT_MORE_LOG @@ -477,18 +502,12 @@ void TPythonScreens::update() void TPythonScreens::setLookupPath(std::string const &path) { - if (_lookupPath != NULL) - { - free(_lookupPath); - } - _lookupPath = (char *)calloc(path.length() + 1, sizeof(char)); - strcpy(_lookupPath, path.c_str()); + _lookupPath = path; } TPythonScreens::TPythonScreens() { - _lookupPath = NULL; - TPythonInterpreter::getInstance()->loadClassFile(NULL, "abstractscreenrenderer"); + TPythonInterpreter::getInstance()->loadClassFile("", "abstractscreenrenderer"); _terminationFlag = false; _renderReadyFlag = false; _cleanupReadyFlag = false; @@ -501,6 +520,7 @@ TPythonScreens::~TPythonScreens() WriteLog("Called python sceeens destructor"); #endif // _PY_INT_MORE_LOG reset(NULL); +/* if (_lookupPath != NULL) { #ifdef _PY_INT_MORE_LOG @@ -508,6 +528,7 @@ TPythonScreens::~TPythonScreens() #endif // _PY_INT_MORE_LOG free(_lookupPath); } +*/ } void TPythonScreens::run() diff --git a/PyInt.h b/PyInt.h index db9f372a..eb44a58a 100644 --- a/PyInt.h +++ b/PyInt.h @@ -30,22 +30,26 @@ class TPythonInterpreter { protected: TPythonInterpreter(); - ~TPythonInterpreter() - { - } + ~TPythonInterpreter() {} static TPythonInterpreter *_instance; int _screenRendererPriority; - std::set _classes; - PyObject *_main; +// std::set _classes; + std::set _classes; + PyObject *_main; PyObject *_stdErr; - FILE *_getFile(const char *lookupPath, const char *className); +// FILE *_getFile(const char *lookupPath, const char *className); + FILE *_getFile( std::string const &lookupPath, std::string const &className ); public: static TPythonInterpreter *getInstance(); - bool loadClassFile(const char *lookupPath, const char *className); + static void killInstance(); +/* bool loadClassFile(const char *lookupPath, const char *className); PyObject *newClass(const char *className); PyObject *newClass(const char *className, PyObject *argsTuple); - int getScreenRendererPriotity() +*/ bool loadClassFile( std::string const &lookupPath, std::string const &className ); + PyObject *newClass( std::string const &className ); + PyObject *newClass( std::string const &className, PyObject *argsTuple ); + int getScreenRendererPriotity() { return _screenRendererPriority; }; @@ -79,7 +83,7 @@ class TPythonScreens void *_thread; unsigned int _threadId; std::vector _screens; - char *_lookupPath; + std::string _lookupPath; void *_train; void _cleanup(); void _freeTrainState(); diff --git a/RealSound.cpp b/RealSound.cpp index d43bcd2c..f3f1d0f3 100644 --- a/RealSound.cpp +++ b/RealSound.cpp @@ -37,7 +37,7 @@ TRealSound::TRealSound() bLoopPlay = false; // dŸwiêk wy³¹czony } -TRealSound::TRealSound(const char *SoundName, double SoundAttenuation, double X, double Y, double Z, bool Dynamic, +TRealSound::TRealSound(std::string const &SoundName, double SoundAttenuation, double X, double Y, double Z, bool Dynamic, bool freqmod, double rmin) { Init(SoundName, SoundAttenuation, X, Y, Z, Dynamic, freqmod, rmin); @@ -250,7 +250,7 @@ void TRealSound::ResetPosition() pSound->SetCurrentPosition(0); } -TTextSound::TTextSound(const char *SoundName, double SoundAttenuation, double X, double Y, double Z, +TTextSound::TTextSound(std::string const &SoundName, double SoundAttenuation, double X, double Y, double Z, bool Dynamic, bool freqmod, double rmin) : TRealSound(SoundName, SoundAttenuation, X, Y, Z, Dynamic, freqmod, rmin) { diff --git a/RealSound.h b/RealSound.h index c62aee22..15d8b2b5 100644 --- a/RealSound.h +++ b/RealSound.h @@ -18,7 +18,7 @@ class TRealSound { protected: PSound pSound; - char *Nazwa; // dla celow odwszawiania +// char *Nazwa; // dla celow odwszawiania NOTE: currently not used anywhere double fDistance, fPreviousDistance; // dla liczenia Dopplera float fFrequency; // czêstotliwoœæ samplowania pliku int iDoppler; // Ra 2014-07: mo¿liwoœæ wy³¹czenia efektu Dopplera np. dla œpiewu ptaków @@ -31,7 +31,7 @@ class TRealSound double FA; // offset czestotliwosci bool bLoopPlay; // czy zapêtlony dŸwiêk jest odtwarzany TRealSound(); - TRealSound(const char *SoundName, double SoundAttenuation, double X, double Y, double Z, bool Dynamic, + TRealSound( std::string const &SoundName, double SoundAttenuation, double X, double Y, double Z, bool Dynamic, bool freqmod = false, double rmin = 0.0); ~TRealSound(); void Free(); @@ -54,7 +54,7 @@ class TTextSound : public TRealSound std::string asText; float fTime; // czas trwania public: - TTextSound(const char *SoundName, double SoundAttenuation, double X, double Y, double Z, + TTextSound(std::string const &SoundName, double SoundAttenuation, double X, double Y, double Z, bool Dynamic, bool freqmod = false, double rmin = 0.0); void Init(std::string const &SoundName, double SoundAttenuation, double X, double Y, double Z, bool Dynamic, bool freqmod = false, double rmin = 0.0); diff --git a/Sound.cpp b/Sound.cpp index 223a2a5d..2eb81eb1 100644 --- a/Sound.cpp +++ b/Sound.cpp @@ -14,6 +14,7 @@ http://mozilla.org/MPL/2.0/. #include "Logs.h" #include "Usefull.h" #include "mczapkie/mctools.h" +#include "WavRead.h" //#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } } #define SAFE_RELEASE(p) \ { \ diff --git a/Sound.h b/Sound.h index 3ba4d5fd..f243ac21 100644 --- a/Sound.h +++ b/Sound.h @@ -11,14 +11,7 @@ http://mozilla.org/MPL/2.0/. #define SoundH #include -#undef EOF -#include -//#include -//#include -#include #include -//#include "resource.h" -#include "WavRead.h" typedef LPDIRECTSOUNDBUFFER PSound; diff --git a/Track.cpp b/Track.cpp index 6c33572d..467afe19 100644 --- a/Track.cpp +++ b/Track.cpp @@ -59,30 +59,26 @@ TSwitchExtension::TSwitchExtension(TTrack *owner, int what) pOwner = NULL; pNextAnim = NULL; bMovement = false; // nie potrzeba przeliczaæ fOffset1 - Segments[0] = new TSegment(owner); // z punktu 1 do 2 - Segments[1] = new TSegment( - owner); // z punktu 3 do 4 (1=3 dla zwrotnic; odwrócony dla skrzy¿owañ, ewentualnie 1=4) + Segments[0] = std::make_shared(owner); // z punktu 1 do 2 + Segments[1] = std::make_shared(owner); // z punktu 3 do 4 (1=3 dla zwrotnic; odwrócony dla skrzy¿owañ, ewentualnie 1=4) Segments[2] = (what >= 3) ? - new TSegment(owner) : - NULL; // z punktu 2 do 4 skrzy¿owanie od góry: wersja "-1": - Segments[3] = - (what >= 4) ? new TSegment(owner) : NULL; // z punktu 4 do 1 1 1=4 0 0=3 - Segments[4] = - (what >= 5) ? new TSegment(owner) : NULL; // z punktu 1 do 3 4 x 3 3 3 x 2 2 - Segments[5] = (what >= 6) ? new TSegment(owner) : - NULL; // z punktu 3 do 2 2 2 1 1 - evPlus = evMinus = NULL; + std::make_shared(owner) : + nullptr; // z punktu 2 do 4 skrzy¿owanie od góry: wersja "-1": + Segments[3] = (what >= 4) ? + std::make_shared(owner) : + nullptr; // z punktu 4 do 1 1 1=4 0 0=3 + Segments[4] = (what >= 5) ? + std::make_shared(owner) : + nullptr; // z punktu 1 do 3 4 x 3 3 3 x 2 2 + Segments[5] = (what >= 6) ? + std::make_shared(owner) : + nullptr; // z punktu 3 do 2 2 2 1 1 + evPlus = evMinus = NULL; fVelocity = -1.0; // maksymalne ograniczenie prêdkoœci (ustawianej eventem) vTrans = vector3(0, 0, 0); // docelowa translacja przesuwnicy } TSwitchExtension::~TSwitchExtension() { // nie ma nic do usuwania - // delete Segments[0]; - // delete Segments[1]; - delete Segments[2]; - delete Segments[3]; - delete Segments[4]; - delete Segments[5]; } TIsolated::TIsolated() @@ -211,7 +207,11 @@ TTrack::TTrack(TGroundNode *g) TTrack::~TTrack() { // likwidacja odcinka - if (eType == tt_Normal) + if( eType == tt_Cross ) { + delete SwitchExtension->vPoints; // skrzy¿owanie mo¿e mieæ punkty + } + +/* if (eType == tt_Normal) delete Segment; // dla zwrotnic nie usuwaæ tego (kopiowany) else { // usuwanie dodatkowych danych dla niezwyk³ych odcinków @@ -219,6 +219,7 @@ TTrack::~TTrack() delete SwitchExtension->vPoints; // skrzy¿owanie mo¿e mieæ punkty SafeDelete(SwitchExtension); } +*/ } void TTrack::Init() @@ -226,21 +227,21 @@ void TTrack::Init() switch (eType) { case tt_Switch: - SwitchExtension = new TSwitchExtension(this, 2); // na wprost i na bok + SwitchExtension = std::make_shared( this, 2 ); // na wprost i na bok break; case tt_Cross: // tylko dla skrzy¿owania dróg - SwitchExtension = new TSwitchExtension(this, 6); // 6 po³¹czeñ + SwitchExtension = std::make_shared( this, 6 ); // 6 po³¹czeñ SwitchExtension->vPoints = NULL; // brak tablicy punktów SwitchExtension->iPoints = 0; SwitchExtension->bPoints = false; // tablica punktów nie wype³niona SwitchExtension->iRoads = 4; // domyœlnie 4 break; case tt_Normal: - Segment = new TSegment(this); + Segment = std::make_shared( this ); break; case tt_Table: // oba potrzebne - SwitchExtension = new TSwitchExtension(this, 1); // kopia oryginalnego toru - Segment = new TSegment(this); + SwitchExtension = std::make_shared( this, 1 ); // kopia oryginalnego toru + Segment = make_shared(this); break; } } diff --git a/Track.h b/Track.h index 401425cf..4bc8e84a 100644 --- a/Track.h +++ b/Track.h @@ -48,7 +48,7 @@ class TSwitchExtension public: TSwitchExtension(TTrack *owner, int what); ~TSwitchExtension(); - TSegment *Segments[6]; // dwa tory od punktu 1, pozosta³e dwa od 2? Ra 140101: 6 po³¹czeñ dla + std::shared_ptr Segments[6]; // dwa tory od punktu 1, pozosta³e dwa od 2? Ra 140101: 6 po³¹czeñ dla // skrzy¿owañ // TTrack *trNear[4]; //tory do³¹czone do punktów 1, 2, 3 i 4 // dotychczasowe [2]+[2] wskaŸniki zamieniæ na nowe [4] @@ -126,8 +126,8 @@ class TIsolated class TTrack : public Resource { // trajektoria ruchu - opakowanie private: - TSwitchExtension *SwitchExtension; // dodatkowe dane do toru, który jest zwrotnic¹ - TSegment *Segment; + std::shared_ptr SwitchExtension; // dodatkowe dane do toru, który jest zwrotnic¹ + std::shared_ptr Segment; TTrack *trNext; // odcinek od strony punktu 2 - to powinno byæ w segmencie TTrack *trPrev; // odcinek od strony punktu 1 // McZapkie-070402: dodalem zmienne opisujace rozmiary tekstur @@ -204,7 +204,7 @@ class TTrack : public Resource { return Segment->GetLength(); }; - inline TSegment * CurrentSegment() + inline std::shared_ptr CurrentSegment() { return Segment; }; diff --git a/Train.cpp b/Train.cpp index b93d1a38..c33cc709 100644 --- a/Train.cpp +++ b/Train.cpp @@ -316,7 +316,6 @@ PyObject *TTrain::GetTrainState() PyDict_SetItemString( dict, ( std::string( "eimp_u" ) + std::to_string( i + 1 ) + "_comp_a" ).c_str(), PyGetBool( bComp[ i ][ 0 ] ) ); PyDict_SetItemString( dict, ( std::string( "eimp_u" ) + std::to_string( i + 1 ) + "_comp_w" ).c_str(), PyGetBool( bComp[ i ][ 1 ] ) ); PyDict_SetItemString( dict, ( std::string( "eimp_c" ) + std::to_string( i + 1 ) + "_heat" ).c_str(), PyGetBool( bHeat[ i ] ) ); - } for (int i = 0; i<20; i++) { @@ -325,13 +324,13 @@ PyObject *TTrain::GetTrainState() PyGetFloatS(fPress[i][j])); } bool bEP, bPN; - bEP = (mvControlled->LocHandle->GetCP()>0.2) || (fEIMParams[0][2]>0.01); + bEP = ( mvControlled->LocHandle->GetCP() > 0.2 ) || ( fEIMParams[0][2] > 0.01 ); PyDict_SetItemString(dict, "dir_brake", PyGetBool(bEP)); if (typeid(mvControlled->Hamulec) == typeid(TLSt) || typeid(mvControlled->Hamulec) == typeid(TEStED)) { - TBrake* temp_ham = mvControlled->Hamulec; + // auto temp_ham = mvControlled->Hamulec; // TLSt* temp_ham2 = temp_ham; - bPN = (static_cast(temp_ham)->GetEDBCP()>0.2); + bPN = ( static_cast(mvControlled->Hamulec.get())->GetEDBCP() > 0.2 ); } else bPN = false; diff --git a/TrkFoll.cpp b/TrkFoll.cpp index 682577e9..8d8d15f5 100644 --- a/TrkFoll.cpp +++ b/TrkFoll.cpp @@ -102,7 +102,7 @@ TTrack * TTrackFollower::SetCurrentTrack(TTrack *pTrack, int end) pCurrentTrack->AxleCounter(-1, Owner); // opuszczenie tamtego toru } pCurrentTrack = pTrack; - pCurrentSegment = (pCurrentTrack ? pCurrentTrack->CurrentSegment() : NULL); + pCurrentSegment = ( pCurrentTrack != nullptr ? pCurrentTrack->CurrentSegment() : nullptr ); if (!pCurrentTrack) Error(Owner->MoverParameters->Name + " at NULL track"); return pCurrentTrack; diff --git a/TrkFoll.h b/TrkFoll.h index 190d1bb6..7be667c4 100644 --- a/TrkFoll.h +++ b/TrkFoll.h @@ -17,8 +17,8 @@ class TTrackFollower { // oœ poruszaj¹ca siê po torze private: TTrack *pCurrentTrack; // na którym torze siê znajduje - TSegment *pCurrentSegment; // zwrotnice mog¹ mieæ dwa segmenty - double fCurrentDistance; // przesuniêcie wzglêdem Point1 w stronê Point2 + std::shared_ptr pCurrentSegment; // zwrotnice mog¹ mieæ dwa segmenty + double fCurrentDistance; // przesuniêcie wzglêdem Point1 w stronê Point2 double fDirection; // ustawienie wzglêdem toru: -1.0 albo 1.0, mno¿one przez dystans bool ComputatePosition(); // przeliczenie pozycji na torze TDynamicObject *Owner; // pojazd posiadaj¹cy diff --git a/mtable.cpp b/mtable.cpp index 7250c2ff..3dea0639 100644 --- a/mtable.cpp +++ b/mtable.cpp @@ -15,7 +15,7 @@ http://mozilla.org/MPL/2.0/. #include "mtable.h" // using namespace Mtable; -TMTableTime *Mtable::GlobalTime; +std::shared_ptr Mtable::GlobalTime; double CompareTime(double t1h, double t1m, double t2h, double t2m) /*roznica czasu w minutach*/ // zwraca ró¿nicê czasu @@ -529,19 +529,6 @@ void TMTableTime::UpdateMTableTime(double deltaT) GameTime = GameTime + deltaT; } -TMTableTime::TMTableTime(int InitH, int InitM, int InitSRH, int InitSRM, int InitSSH, int InitSSM) -{ - GameTime = 0.0; - dd = 0; - hh = InitH; - mm = InitM; - srh = InitSRH; - srm = InitSRM; - ssh = InitSSH; - ssm = InitSSM; - mr = 0.0; -} - bool TTrainParameters::DirectionChange() // sprawdzenie, czy po zatrzymaniu wykonaæ kolejne komendy { diff --git a/mtable.h b/mtable.h index 013ddd0b..ca4bfd49 100644 --- a/mtable.h +++ b/mtable.h @@ -86,20 +86,29 @@ class TMTableTime { public: - double GameTime; - int dd; - int hh; - int mm; - int srh; - int srm; /*wschod slonca*/ - int ssh; - int ssm; /*zachod slonca*/ - double mr; + double GameTime = 0.0; + int dd = 0; + int hh = 0; + int mm = 0; + int srh = 0; + int srm = 0; /*wschod slonca*/ + int ssh = 0; + int ssm = 0; /*zachod slonca*/ + double mr = 0.0; void UpdateMTableTime(double deltaT); - TMTableTime(int InitH, int InitM, int InitSRH, int InitSRM, int InitSSH, int InitSSM); + TMTableTime(int InitH, int InitM, int InitSRH, int InitSRM, int InitSSH, int InitSSM) : + hh( InitH ), + mm( InitM ), + srh( InitSRH ), + srm( InitSRM ), + ssh( InitSSH ), + ssm( InitSSM ) + {} + + TMTableTime() = default; }; -extern TMTableTime *GlobalTime; +extern std::shared_ptr GlobalTime; } #if !defined(NO_IMPLICIT_NAMESPACE_USE) diff --git a/parser.cpp b/parser.cpp index af5a0264..e2b95798 100644 --- a/parser.cpp +++ b/parser.cpp @@ -191,7 +191,7 @@ bool cParser::trimComments(std::string &String) return false; } -std::string cParser::readComment(const std::string Break) +std::string cParser::readComment(std::string const &Break) { // pobieranie znaków a¿ do znalezienia znacznika koñca std::string token = ""; while (mStream->peek() != EOF) diff --git a/parser.h b/parser.h index 5cd57c30..8abe5da1 100644 --- a/parser.h +++ b/parser.h @@ -57,7 +57,7 @@ class cParser : public std::stringstream for (int i = 0; i < count; i++) readToken(); }; - inline bool expectToken(std::string value) + inline bool expectToken(std::string const &value) { return readToken() == value; }; @@ -77,7 +77,7 @@ class cParser : public std::stringstream protected: // methods: std::string readToken(bool ToLower = true, const char *Break = "\n\t ;"); - std::string readComment(const std::string Break = "\n\t ;"); + std::string readComment(std::string const &Break = "\n\t ;"); std::string trtest; bool trimComments(std::string &String); // members: diff --git a/stdafx.h b/stdafx.h index 83a2ebaa..99798686 100644 --- a/stdafx.h +++ b/stdafx.h @@ -10,6 +10,12 @@ #define _CRTDBG_MAP_ALLOC #include #include +#ifdef _DEBUG +#ifndef DBG_NEW +#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ ) +#define new DBG_NEW +#endif +#endif // _DEBUG #endif // operating system #include "targetver.h" @@ -19,6 +25,7 @@ #undef NOMINMAX // stl #include +#include #define _USE_MATH_DEFINES #include #include diff --git a/wavread.h b/wavread.h index c2f3aa93..68ce040e 100644 --- a/wavread.h +++ b/wavread.h @@ -18,7 +18,6 @@ http://mozilla.org/MPL/2.0/. #ifndef WAVE_READ_H #define WAVE_READ_H -#include #include HRESULT WaveOpenFile(CHAR *strFileName, HMMIO *phmmioIn, WAVEFORMATEX **ppwfxInfo, From 8fe465afefe96f22083f574a1d49b8b5224a22b9 Mon Sep 17 00:00:00 2001 From: tmj-fstate Date: Thu, 19 Jan 2017 17:49:49 +0100 Subject: [PATCH 2/9] re-enabled door controls (hard-coded and limited to EZT for the time being); added more convenient version of getkyval(); fixed disappearing vehicle wheels. --- DynObj.cpp | 40 ++++++++++++++-------------- Event.cpp | 2 +- Ground.cpp | 19 +++++++------- McZapkie/MOVER.h | 22 ++++++++++++++++ McZapkie/Mover.cpp | 16 ++++++++++-- McZapkie/Oerlikon_ESt.cpp | 8 +++--- Track.cpp | 2 +- Train.cpp | 55 +++++++++++++++++++-------------------- 8 files changed, 100 insertions(+), 64 deletions(-) diff --git a/DynObj.cpp b/DynObj.cpp index 812c656a..4d840b01 100644 --- a/DynObj.cpp +++ b/DynObj.cpp @@ -3110,11 +3110,11 @@ bool TDynamicObject::Update(double dt, double dt1) if (MoverParameters->Vel != 0) { // McZapkie-050402: krecenie kolami: - dWheelAngle[0] += 114.59155902616464175359630962821 * MoverParameters->V * dt1 / - MoverParameters->WheelDiameterL; // przednie toczne + assert( MoverParameters->WheelDiameterL != 0.0 ); + assert( MoverParameters->WheelDiameterT != 0.0 ); + dWheelAngle[ 0 ] += 114.59155902616464175359630962821 * MoverParameters->V * dt1 / MoverParameters->WheelDiameterL; // przednie toczne dWheelAngle[1] += MoverParameters->nrot * dt1 * 360.0; // napêdne - dWheelAngle[2] += 114.59155902616464175359630962821 * MoverParameters->V * dt1 / - MoverParameters->WheelDiameterT; // tylne toczne + dWheelAngle[2] += 114.59155902616464175359630962821 * MoverParameters->V * dt1 / MoverParameters->WheelDiameterT; // tylne toczne if (dWheelAngle[0] > 360.0) dWheelAngle[0] -= 360.0; // a w drug¹ stronê jak siê krêc¹? if (dWheelAngle[1] > 360.0) @@ -4224,6 +4224,16 @@ void TDynamicObject::RenderAlpha() void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, std::string ReplacableSkin) { + // temporary hack to enable door animation in EZT + // TODO: add relevant entries to suitable definition file (.mmd ?) + // ensure the parameters are loaded before the main body mesh + // so the code binds proper method of door animation + if( MoverParameters->TrainType & dt_EZT ) { + MoverParameters->DoorOpenCtrl = 1; + MoverParameters->DoorCloseCtrl = 1; + MoverParameters->DoorOpenMethod = 1; + } + double dSDist; // asBaseDir=BaseDir; Global::asCurrentDynamicPath = BaseDir; @@ -4580,31 +4590,23 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, m = 0; // numer osi; kolejny znak; ile osi danego typu; która œrednica if ((MoverParameters->WheelDiameterL != MoverParameters->WheelDiameter) || (MoverParameters->WheelDiameterT != MoverParameters->WheelDiameter)) - { // obs³uga ró¿nych œrednic, o - // ile wystêpuj¹ + { // obs³uga ró¿nych œrednic, o ile wystêpuj¹ while ((i < iAnimType[ANIM_WHEELS]) && (j <= MoverParameters->AxleArangement.length())) - { // wersja ze wskaŸnikami jest - // bardziej elastyczna na nietypowe - // uk³ady + { // wersja ze wskaŸnikami jest bardziej elastyczna na nietypowe uk³ady if ((k >= 'A') && (k <= 'J')) // 10 chyba maksimum? { - pAnimations[i++].dWheelAngle = - dWheelAngle + 1; // obrót osi napêdzaj¹cych - --k; // nastêpna bêdzie albo taka sama, albo bierzemy kolejny - // znak + pAnimations[i++].dWheelAngle = dWheelAngle + 1; // obrót osi napêdzaj¹cych + --k; // nastêpna bêdzie albo taka sama, albo bierzemy kolejny znak m = 2; // nastêpuj¹ce toczne bêd¹ mia³y inn¹ œrednicê } else if ((k >= '1') && (k <= '9')) { - pAnimations[i++].dWheelAngle = dWheelAngle + m; // obrót osi - // tocznych - --k; // nastêpna bêdzie albo taka sama, albo bierzemy kolejny - // znak + pAnimations[i++].dWheelAngle = dWheelAngle + m; // obrót osi tocznych + --k; // nastêpna bêdzie albo taka sama, albo bierzemy kolejny znak } else - k = MoverParameters->AxleArangement[j++]; // pobranie kolejnego - // znaku + k = MoverParameters->AxleArangement[j++]; // pobranie kolejnego znaku } } } diff --git a/Event.cpp b/Event.cpp index 1056f613..545480d6 100644 --- a/Event.cpp +++ b/Event.cpp @@ -90,7 +90,7 @@ void TEvent::Conditions(cParser *parser, string s) std::string token, str; if (!asNodeName.empty()) { // podczepienie ³añcucha, jeœli nie jest pusty - // NOTE: source of a memory leak -- the array never gets deleted. fix the destructor + // BUG: source of a memory leak -- the array never gets deleted. fix the destructor Params[9].asText = new char[asNodeName.length() + 1]; // usuwane i zamieniane na // wskaŸnik strcpy(Params[9].asText, asNodeName.c_str()); diff --git a/Ground.cpp b/Ground.cpp index effd8683..be63b145 100644 --- a/Ground.cpp +++ b/Ground.cpp @@ -739,7 +739,7 @@ void TSubRect::NodeAdd(TGroundNode *Node) { if (t && (Node->TextureID != t)) { // jeœli s¹ dwie ró¿ne tekstury, dodajemy drugi obiekt dla danego toru - TGroundNode *n = new TGroundNode(); + TGroundNode *n = new TGroundNode(); // BUG: source of a memory leak here n->iType = TP_DUMMYTRACK; // obiekt renderuj¹cy siatki dla tekstury n->TextureID = t; n->pTrack = Node->pTrack; // wskazuje na ten sam tor @@ -962,7 +962,7 @@ void TSubRect::Sort() if (t < n1->TextureID) // jeœli (n1) ma inn¹ teksturê ni¿ poprzednie { // mo¿na zrobiæ obiekt renderuj¹cy t = n1->TextureID; - n2 = new TGroundNode(); + n2 = new TGroundNode(); // BUG: source of a memory leak here n2->nNext2 = nRootMesh; nRootMesh = n2; // podczepienie na pocz¹tku listy nRootMesh->iType = TP_MESH; // obiekt renderuj¹cy siatki dla tekstury @@ -3135,14 +3135,13 @@ bool TGround::InitEvents() strcpy(buff, Current->Params[i].asText); SafeDeleteArray(Current->Params[i].asText); Current->Params[i].asEvent = FindEvent(buff); - if (!Current->Params[i].asEvent) // Ra: tylko w logu informacja o braku - if (string(Current->Params[i].asText).substr(0, 5) != "none_") - { - WriteLog("Event \"" + string(buff) + - "\" does not exist"); - ErrorLog("Missed event: " + string(buff) + " in multiple " + - Current->asName); - } + if( !Current->Params[ i ].asEvent ) { // Ra: tylko w logu informacja o braku + if( ( Current->Params[ i ].asText == NULL ) + || ( std::string( Current->Params[ i ].asText ).substr( 0, 5 ) != "none_" ) ) { + WriteLog( "Event \"" + string( buff ) + "\" does not exist" ); + ErrorLog( "Missed event: " + string( buff ) + " in multiple " + Current->asName ); + } + } } } break; diff --git a/McZapkie/MOVER.h b/McZapkie/MOVER.h index 299cd1d6..dc6e1674 100644 --- a/McZapkie/MOVER.h +++ b/McZapkie/MOVER.h @@ -1125,3 +1125,25 @@ public: }; extern double Distance(TLocation Loc1, TLocation Loc2, TDimension Dim1, TDimension Dim2); + +template +bool getkeyval( _Type &Variable, std::string const &Key, std::string const &Input ) { + + auto lookup = Input.find( Key + "=" ); + if( lookup == std::string::npos ) { + return false; } + std::string value = Input.substr( Input.find_first_not_of( ' ', lookup + Key.size() + 1 ) ); + lookup = value.find( ' ' ); + if( lookup != std::string::npos ) { + // trim everything past the value + value.erase( lookup ); + } + if( true == value.empty() ) { + return false; + } + // set the specified variable to retrieved value + std::stringstream converter; + converter << value; + converter >> Variable; + return true; // all done +} \ No newline at end of file diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index cb139d21..39f673b8 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -6392,6 +6392,17 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) startBPT = false; secParam = true; SetFlag(OKFlag, param_ok); + getkeyval( aCategory, "Category", xline ); + getkeyval( aType, "Type", xline ); aType = ToUpper( aType ); + getkeyval( aMass, "M", xline ); + getkeyval( aMred, "Mred", xline ); + getkeyval( aVmax, "Vmax", xline ); + getkeyval( aPWR, "PWR", xline ); + getkeyval( aSandCap, "SandCap", xline ); + getkeyval( aHeatingP, "HeatingP", xline ); + getkeyval( aLightP, "LightP", xline ); + // TODO: switch other sections to the new getkeyval() code +/* aCategory = getkeyval(1, "Category"); aType = ToUpper(getkeyval(1, "Type")); aMass = atof(getkeyval(3, "M").c_str()); @@ -6401,6 +6412,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) aSandCap = atoi(getkeyval(2, "SandCap").c_str()); aHeatingP = atof(getkeyval(3, "HeatingP").c_str()); aLightP = atof(getkeyval(3, "LightP").c_str()); +*/ continue; } @@ -6774,11 +6786,11 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) ADist = dAd; BDist = dBd; - if (WheelDiameterL == -1) // gdyby nie by³o parametru... + if (WheelDiameterL == 0.0) // gdyby nie by³o parametru... WheelDiameterL = WheelDiameter; //... lepsze to ni¿ zero else WheelDiameterL = dDl; - if (WheelDiameterT == -1) // gdyby nie by³o parametru... + if (WheelDiameterT == 0.0) // gdyby nie by³o parametru... WheelDiameterT = WheelDiameter; //... lepsze to ni¿ zero else WheelDiameterT = dDt; diff --git a/McZapkie/Oerlikon_ESt.cpp b/McZapkie/Oerlikon_ESt.cpp index fa547bc1..d8568c1a 100644 --- a/McZapkie/Oerlikon_ESt.cpp +++ b/McZapkie/Oerlikon_ESt.cpp @@ -522,9 +522,11 @@ void TNESt3::SetSize(int size, std::string params) // ustawianie dysz (rozmiaru else Przekladniki[2] = std::make_shared(); - if ((params.find("3d") + params.find("4d")) != std::string::npos) - autom = false; - else + if( ( params.find( "3d" ) != std::string::npos ) + || ( params.find( "4d" ) != std::string::npos ) ) { + autom = false; + } + else autom = true; if ((params.find("HBG300") != std::string::npos)) HBG300 = 1; diff --git a/Track.cpp b/Track.cpp index 467afe19..e3d21113 100644 --- a/Track.cpp +++ b/Track.cpp @@ -117,7 +117,7 @@ TIsolated * TIsolated::Find(const string &n) return p; p = p->pNext; } - pRoot = new TIsolated(n, pRoot); + pRoot = new TIsolated(n, pRoot); // BUG: source of a memory leak return pRoot; }; diff --git a/Train.cpp b/Train.cpp index c33cc709..613dc094 100644 --- a/Train.cpp +++ b/Train.cpp @@ -227,9 +227,9 @@ bool TTrain::Init(TDynamicObject *NewDynamicObject, bool e3d) fMechPitch = 0.1; fMainRelayTimer = 0; // Hunter, do k...y nêdzy, ustawiaj wartoœci pocz¹tkowe zmiennych! - if (!LoadMMediaFile(DynamicObject->asBaseDir + DynamicObject->MoverParameters->TypeName + - ".mmd")) - return false; + if( false == LoadMMediaFile( DynamicObject->asBaseDir + DynamicObject->MoverParameters->TypeName + ".mmd" ) ) { + return false; + } // McZapkie: w razie wykolejenia // dsbDerailment=TSoundsManager::GetFromName("derail.wav"); @@ -698,8 +698,7 @@ void TTrain::OnKeyDown(int cKey) else if (cKey == Global::Keys[k_OpenLeft]) // NBMX 17-09-2003: otwieranie drzwi { if (mvOccupied->DoorOpenCtrl == 1) - if (mvOccupied->CabNo < 0 ? mvOccupied->DoorRight(true) : - mvOccupied->DoorLeft(true)) + if (mvOccupied->CabNo < 0 ? mvOccupied->DoorRight(true) : mvOccupied->DoorLeft(true)) { dsbSwitch->SetVolume(DSBVOLUME_MAX); dsbSwitch->Play(0, 0, 0); @@ -712,9 +711,8 @@ void TTrain::OnKeyDown(int cKey) } else if (cKey == Global::Keys[k_OpenRight]) // NBMX 17-09-2003: otwieranie drzwi { - if (mvOccupied->DoorCloseCtrl == 1) - if (mvOccupied->CabNo < 0 ? mvOccupied->DoorLeft(true) : - mvOccupied->DoorRight(true)) + if (mvOccupied->DoorOpenCtrl == 1) + if (mvOccupied->CabNo < 0 ? mvOccupied->DoorLeft(true) : mvOccupied->DoorRight(true)) { dsbSwitch->SetVolume(DSBVOLUME_MAX); dsbSwitch->Play(0, 0, 0); @@ -1927,29 +1925,29 @@ if } else if (cKey == Global::Keys[k_CloseLeft]) // NBMX 17-09-2003: zamykanie drzwi { - if (mvOccupied->CabNo < 0 ? mvOccupied->DoorRight(false) : mvOccupied->DoorLeft(false)) - { - dsbSwitch->SetVolume(DSBVOLUME_MAX); - dsbSwitch->Play(0, 0, 0); - if (dsbDoorClose) - { - dsbDoorClose->SetCurrentPosition(0); - dsbDoorClose->Play(0, 0, 0); - } - } + if( mvOccupied->DoorCloseCtrl == 1 ) { + if( mvOccupied->CabNo < 0 ? mvOccupied->DoorRight( false ) : mvOccupied->DoorLeft( false ) ) { + dsbSwitch->SetVolume( DSBVOLUME_MAX ); + dsbSwitch->Play( 0, 0, 0 ); + if( dsbDoorClose ) { + dsbDoorClose->SetCurrentPosition( 0 ); + dsbDoorClose->Play( 0, 0, 0 ); + } + } + } } else if (cKey == Global::Keys[k_CloseRight]) // NBMX 17-09-2003: zamykanie drzwi { - if (mvOccupied->CabNo < 0 ? mvOccupied->DoorLeft(false) : mvOccupied->DoorRight(false)) - { - dsbSwitch->SetVolume(DSBVOLUME_MAX); - dsbSwitch->Play(0, 0, 0); - if (dsbDoorClose) - { - dsbDoorClose->SetCurrentPosition(0); - dsbDoorClose->Play(0, 0, 0); - } - } + if( mvOccupied->DoorCloseCtrl == 1 ) { + if( mvOccupied->CabNo < 0 ? mvOccupied->DoorLeft( false ) : mvOccupied->DoorRight( false ) ) { + dsbSwitch->SetVolume( DSBVOLUME_MAX ); + dsbSwitch->Play( 0, 0, 0 ); + if( dsbDoorClose ) { + dsbDoorClose->SetCurrentPosition( 0 ); + dsbDoorClose->Play( 0, 0, 0 ); + } + } + } } //----------- @@ -5019,6 +5017,7 @@ bool TTrain::LoadMMediaFile(std::string const &asFileName) dsbCouplerDetach = TSoundsManager::GetFromName("couplerdetach.wav", true); dsbCouplerStretch = TSoundsManager::GetFromName("en57_couplerstretch.wav", true); dsbCouplerAttach = TSoundsManager::GetFromName("couplerattach.wav", true); + std::string token; do { token = ""; From e8af37d241318935f8cb01f5f10be802804a8579 Mon Sep 17 00:00:00 2001 From: tmj-fstate Date: Thu, 19 Jan 2017 20:14:29 +0100 Subject: [PATCH 3/9] maintenance compilation fixes --- Train.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Train.cpp b/Train.cpp index 6f9865b9..a9d04029 100644 --- a/Train.cpp +++ b/Train.cpp @@ -357,9 +357,8 @@ PyObject *TTrain::GetTrainState() if (typeid(mvControlled->Hamulec) == typeid(TLSt) || typeid(mvControlled->Hamulec) == typeid(TEStED)) { - TBrake *temp_ham = mvControlled->Hamulec; // TLSt* temp_ham2 = temp_ham; - bPN = (static_cast(temp_ham)->GetEDBCP() > 0.2); + bPN = ( static_cast( mvControlled->Hamulec.get() )->GetEDBCP() > 0.2 ); } else bPN = false; From 8b8200f32ed16032d2e276d5d8334cd1214262c8 Mon Sep 17 00:00:00 2001 From: tmj-fstate Date: Thu, 19 Jan 2017 20:16:00 +0100 Subject: [PATCH 4/9] Revert "maintenance compilation fixes" This reverts commit e8af37d241318935f8cb01f5f10be802804a8579. --- Train.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Train.cpp b/Train.cpp index a9d04029..6f9865b9 100644 --- a/Train.cpp +++ b/Train.cpp @@ -357,8 +357,9 @@ PyObject *TTrain::GetTrainState() if (typeid(mvControlled->Hamulec) == typeid(TLSt) || typeid(mvControlled->Hamulec) == typeid(TEStED)) { + TBrake *temp_ham = mvControlled->Hamulec; // TLSt* temp_ham2 = temp_ham; - bPN = ( static_cast( mvControlled->Hamulec.get() )->GetEDBCP() > 0.2 ); + bPN = (static_cast(temp_ham)->GetEDBCP() > 0.2); } else bPN = false; From 8f2f3b9889a0a94c36f91c4b6f77e63ca2da2836 Mon Sep 17 00:00:00 2001 From: tmj-fstate Date: Thu, 19 Jan 2017 20:17:42 +0100 Subject: [PATCH 5/9] Revert "Revert "maintenance compilation fixes"" This reverts commit 8b8200f32ed16032d2e276d5d8334cd1214262c8. --- Train.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Train.cpp b/Train.cpp index 6f9865b9..a9d04029 100644 --- a/Train.cpp +++ b/Train.cpp @@ -357,9 +357,8 @@ PyObject *TTrain::GetTrainState() if (typeid(mvControlled->Hamulec) == typeid(TLSt) || typeid(mvControlled->Hamulec) == typeid(TEStED)) { - TBrake *temp_ham = mvControlled->Hamulec; // TLSt* temp_ham2 = temp_ham; - bPN = (static_cast(temp_ham)->GetEDBCP() > 0.2); + bPN = ( static_cast( mvControlled->Hamulec.get() )->GetEDBCP() > 0.2 ); } else bPN = false; From 538d130617ae28b790ee5096dde051b1f71138c0 Mon Sep 17 00:00:00 2001 From: tmj-fstate Date: Sun, 22 Jan 2017 00:08:53 +0100 Subject: [PATCH 6/9] more complete parsing of .fiz data files --- DynObj.cpp | 35 +- EU07.cpp | 12 +- Ground.cpp | 10 +- McZapkie/MOVER.h | 98 ++- McZapkie/Mover.cpp | 1565 +++++++++++++++++++++++++----------------- McZapkie/hamulce.cpp | 3 +- parser.cpp | 4 + 7 files changed, 1045 insertions(+), 682 deletions(-) diff --git a/DynObj.cpp b/DynObj.cpp index 4d840b01..a4240b5c 100644 --- a/DynObj.cpp +++ b/DynObj.cpp @@ -2525,14 +2525,21 @@ bool TDynamicObject::Update(double dt, double dt1) { // wyliczenie promienia z obrotów // osi - modyfikacjê zg³osi³ youBy ts.R = Axle0.vAngles.z - Axle1.vAngles.z; // ró¿nica mo¿e dawaæ sta³¹ ±M_2PI - if (ts.R > M_PI) - ts.R -= M_2PI else if (ts.R < -M_PI) ts.R += M_2PI; // normalizacja - // ts.R=fabs(0.5*MoverParameters->BDist/sin(ts.R*0.5)); - ts.R = -0.5 * MoverParameters->BDist / sin(ts.R * 0.5); - if ((ts.R > 15000.0) || (ts.R < -15000.0)) - ts.R = 0.0; // szkoda czasu na zbyt du¿e promienie, 4km to promieñ nie - // wymagaj¹cy - // przechy³ki + if( ( ts.R > 15000.0 ) || ( ts.R < -15000.0 ) ) { + // szkoda czasu na zbyt du¿e promienie, 4km to promieñ nie wymagaj¹cy przechy³ki + ts.R = 0.0; + } + else { + // normalizacja + if( ts.R > M_PI ) { ts.R -= M_2PI; } + else if( ts.R < -M_PI ) { ts.R += M_2PI; } + + if( ts.R != 0.0 ) { + // sin(0) results in division by zero + // ts.R=fabs(0.5*MoverParameters->BDist/sin(ts.R*0.5)); + ts.R = -0.5 * MoverParameters->BDist / sin( ts.R * 0.5 ); + } + } } else ts.R = 0.0; @@ -3769,7 +3776,7 @@ void TDynamicObject::RenderSounds() vol = rsSilnik.AM * MoverParameters->dizel_fill + rsSilnik.AA; else vol = - rsSilnik.AM * fabs(MoverParameters->enrot / MoverParameters->nmax) + + rsSilnik.AM * fabs(MoverParameters->enrot / MoverParameters->dizel_nmax) + rsSilnik.AA * 0.9; } else @@ -4224,16 +4231,6 @@ void TDynamicObject::RenderAlpha() void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, std::string ReplacableSkin) { - // temporary hack to enable door animation in EZT - // TODO: add relevant entries to suitable definition file (.mmd ?) - // ensure the parameters are loaded before the main body mesh - // so the code binds proper method of door animation - if( MoverParameters->TrainType & dt_EZT ) { - MoverParameters->DoorOpenCtrl = 1; - MoverParameters->DoorCloseCtrl = 1; - MoverParameters->DoorOpenMethod = 1; - } - double dSDist; // asBaseDir=BaseDir; Global::asCurrentDynamicPath = BaseDir; diff --git a/EU07.cpp b/EU07.cpp index ccd753cc..4d83a9ea 100644 --- a/EU07.cpp +++ b/EU07.cpp @@ -59,8 +59,8 @@ LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // Declaration For WndProc int InitGL(GLvoid) // All Setup For OpenGL Goes Here { - _clear87(); - _control87(MCW_EM, MCW_EM); +// _clear87(); +// _control87(MCW_EM, MCW_EM); glewInit(); // hunter-271211: przeniesione // AllocConsole(); @@ -572,8 +572,14 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance LPSTR lpCmdLine, // command line parameters int nCmdShow) // window show state { -#ifdef _MSC_VER +#ifdef _MSC_VER & _DEBUG + // memory leaks _CrtSetDbgFlag( _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG ) | _CRTDBG_LEAK_CHECK_DF ); + // floating point operation errors + auto state = _clearfp(); + state = _control87( 0, 0 ); + // this will turn on FPE for #IND and zerodiv + state = _control87( state & ~( _EM_ZERODIVIDE | _EM_INVALID ), _MCW_EM ); #endif MSG msg; // windows message structure diff --git a/Ground.cpp b/Ground.cpp index be63b145..229c7209 100644 --- a/Ground.cpp +++ b/Ground.cpp @@ -77,7 +77,7 @@ TGroundNode::TGroundNode() asName = ""; // Color= TMaterialColor(1); // fAngle=0; //obrót dla modelu - // fLineThickness=1.0; //mm dla linii + fLineThickness=1.0; //mm dla linii for (int i = 0; i < 3; i++) { Ambient[i] = Global::whiteLight[i] * 255; @@ -1307,6 +1307,9 @@ void TGround::MoveGroundNode(vector3 pPosition) */ } +TGroundVertex TempVerts[ 10000 ]; // tu wczytywane s¹ trójk¹ty +BYTE TempConnectionType[ 200 ]; // Ra: sprzêgi w sk³adzie; ujemne, gdy odwrotnie + TGround::TGround() { // RootNode=NULL; @@ -1324,6 +1327,8 @@ TGround::TGround() nRootOfType[i] = NULL; // zerowanie tablic wyszukiwania bDynamicRemove = false; // na razie nic do usuniêcia sTracks = new TNames(); // nazwy torów - na razie tak + ::SecureZeroMemory( TempVerts, sizeof( TempVerts ) ); + ::SecureZeroMemory( TempConnectionType, sizeof( TempConnectionType ) ); } TGround::~TGround() @@ -1414,9 +1419,6 @@ int iTrainSetWehicleNumber = 0; TGroundNode *nTrainSetNode = NULL; // poprzedni pojazd do ³¹czenia TGroundNode *nTrainSetDriver = NULL; // pojazd, któremu zostanie wys³any rozk³ad -TGroundVertex TempVerts[10000]; // tu wczytywane s¹ trójk¹ty -BYTE TempConnectionType[200]; // Ra: sprzêgi w sk³adzie; ujemne, gdy odwrotnie - void TGround::RaTriangleDivider(TGroundNode *node) { // tworzy dodatkowe trójk¹ty i zmiejsza podany // to jest wywo³ywane przy wczytywaniu trójk¹tów diff --git a/McZapkie/MOVER.h b/McZapkie/MOVER.h index dc6e1674..034e0753 100644 --- a/McZapkie/MOVER.h +++ b/McZapkie/MOVER.h @@ -496,10 +496,10 @@ struct TScheme typedef TScheme TSchemeTable[ResArraySize + 1]; /*tablica rezystorow rozr.*/ struct TDEScheme { - double RPM; /*obroty diesla*/ - double GenPower; /*moc maksymalna*/ - double Umax; /*napiecie maksymalne*/ - double Imax; /*prad maksymalny*/ + double RPM = 0.0; /*obroty diesla*/ + double GenPower = 0.0; /*moc maksymalna*/ + double Umax = 0.0; /*napiecie maksymalne*/ + double Imax = 0.0; /*prad maksymalny*/ }; typedef TDEScheme TDESchemeTable[33]; /*tablica rezystorow rozr.*/ struct TShuntScheme @@ -569,23 +569,28 @@ struct TTransmision enum TCouplerType { NoCoupler, Articulated, Bare, Chain, Screw, Automatic }; +//class TMoverParameters; // wyforwardowanie klasy coby typ byl widoczny w ponizszej strukturze -class TMoverParameters; // wyforwardowanie klasy coby typ byl widoczny w ponizszej strukturze struct TCoupling { /*parametry*/ - double SpringKB; double SpringKC; double beta; /*stala sprezystosci zderzaka/sprzegu, %tlumiennosci */ - double DmaxB; double FmaxB; double DmaxC; double FmaxC; /*tolerancja scisku/rozciagania, sila rozerwania*/ - TCouplerType CouplerType; /*typ sprzegu*/ - /*zmienne*/ - int CouplingFlag; /*0 - wirtualnie, 1 - sprzegi, 2 - pneumatycznie, 4 - sterowanie, 8 - kabel mocy*/ - int AllowedFlag; //Ra: znaczenie jak wy¿ej, maska dostêpnych - bool Render; /*ABu: czy rysowac jak zaczepiony sprzeg*/ - double CoupleDist; /*ABu: optymalizacja - liczenie odleglosci raz na klatkê, bez iteracji*/ - TMoverParameters* Connected; /*co jest podlaczone*/ - int ConnectedNr; //Ra: od której strony pod³¹czony do (Connected): 0=przód, 1=ty³ - double CForce; /*sila z jaka dzialal*/ - double Dist; /*strzalka ugiecia zderzaków*/ - bool CheckCollision; /*czy sprawdzac sile czy pedy*/ + double SpringKB = 1.0; /*stala sprezystosci zderzaka/sprzegu, %tlumiennosci */ + double SpringKC = 1.0; + double beta = 0.0; + double DmaxB = 0.1; /*tolerancja scisku/rozciagania, sila rozerwania*/ + double FmaxB = 1000.0; + double DmaxC = 0.1; + double FmaxC = 1000.0; + TCouplerType CouplerType = NoCoupler; /*typ sprzegu*/ + /*zmienne*/ + int CouplingFlag = 0; /*0 - wirtualnie, 1 - sprzegi, 2 - pneumatycznie, 4 - sterowanie, 8 - kabel mocy*/ + int AllowedFlag = 3; //Ra: znaczenie jak wy¿ej, maska dostêpnych // domyœlnie hak i hamulec, inne trzeba w³¹czyæ jawnie w FIZ + bool Render = false; /*ABu: czy rysowac jak zaczepiony sprzeg*/ + double CoupleDist = 0.0; /*ABu: optymalizacja - liczenie odleglosci raz na klatkê, bez iteracji*/ + class TMoverParameters *Connected = nullptr; /*co jest podlaczone*/ + int ConnectedNr = 0; //Ra: od której strony pod³¹czony do (Connected): 0=przód, 1=ty³ + double CForce = 0.0; /*sila z jaka dzialal*/ + double Dist = 0.0; /*strzalka ugiecia zderzaków*/ + bool CheckCollision = false; /*czy sprawdzac sile czy pedy*/ }; class TMoverParameters @@ -1111,11 +1116,19 @@ public: /*funkcje ladujace pliki opisujace pojazd*/ bool LoadFIZ(std::string chkpath); //Q 20160717 bool LoadChkFile(std::string chkpath); - bool readMPT(int ln, std::string line); //Q 20160717 - bool readRLIST(int ln, std::string line); //Q 20160718 - bool readBPT(int ln, std::string line); //Q 20160721 - void BrakeValveDecode(std::string s); //Q 20160719 - void BrakeSubsystemDecode(); //Q 20160719 + bool LoadFIZ_Doors( std::string const &line ); + bool readMPT0( std::string const &line ); + bool readMPT( std::string const &line ); //Q 20160717 + bool readMPTElectricSeries( std::string const &line ); + bool readMPTDieselElectric( std::string const &line ); + bool readMPTDieselEngine( std::string const &line ); + bool readRList(int const ln, std::string const &line); //Q 20160718 + bool readBPT(/*int const ln,*/ std::string const &line); //Q 20160721 + bool readDList( std::string const &line ); + bool readFFList( std::string const &line ); + bool readWWList( std::string const &line ); + void BrakeValveDecode( std::string s ); //Q 20160719 + void BrakeSubsystemDecode(); //Q 20160719 void PowerParamDecode(std::string lines, std::string prefix, TPowerParameters &PowerParamDecode); //Q 20160719 TPowerSource PowerSourceDecode(std::string s); //Q 20160719 TPowerType PowerDecode(std::string s); //Q 20160719 @@ -1127,23 +1140,32 @@ public: extern double Distance(TLocation Loc1, TLocation Loc2, TDimension Dim1, TDimension Dim2); template -bool getkeyval( _Type &Variable, std::string const &Key, std::string const &Input ) { +bool getkeyval( _Type &Variable, std::string const &Key, std::string const &Input, std::string const &Default ) { + std::string value; auto lookup = Input.find( Key + "=" ); - if( lookup == std::string::npos ) { - return false; } - std::string value = Input.substr( Input.find_first_not_of( ' ', lookup + Key.size() + 1 ) ); - lookup = value.find( ' ' ); if( lookup != std::string::npos ) { - // trim everything past the value - value.erase( lookup ); + value = Input.substr( Input.find_first_not_of( ' ', lookup + Key.size() + 1 ) ); + lookup = value.find( ' ' ); + if( lookup != std::string::npos ) { + // trim everything past the value + value.erase( lookup ); + } + } + if( false == value.empty() ) { + // set the specified variable to retrieved value + std::stringstream converter; + converter << value; + converter >> Variable; + return true; // located the variable + } + else { + // set the variable to provided default value + if( false == Default.empty() ) { + std::stringstream converter; + converter << Default; + converter >> Variable; + } + return false; // supplied the default } - if( true == value.empty() ) { - return false; - } - // set the specified variable to retrieved value - std::stringstream converter; - converter << value; - converter >> Variable; - return true; // all done } \ No newline at end of file diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index a4482e99..53e05a9f 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -1,4 +1,4 @@ -/* +/* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not @@ -12,13 +12,14 @@ http://mozilla.org/MPL/2.0/. #include "../globals.h" #include "../logs.h" #include "Oerlikon_ESt.h" +#include "../parser.h" //--------------------------------------------------------------------------- -// Ra: tu nale¿y przenosiæ funcje z mover.pas, które nie s¹ z niego wywo³ywane. -// Jeœli jakieœ zmienne nie s¹ u¿ywane w mover.pas, te¿ mo¿na je przenosiæ. -// Przeniesienie wszystkiego na raz zrobi³o by zbyt wielki chaos do ogarniêcia. +// Ra: tu nale¿y przenosiæ funcje z mover.pas, które nie s¹ z niego wywo³ywane. +// JeÅ“li jakieÅ“ zmienne nie s¹ u¿ywane w mover.pas, te¿ mo¿na je przenosiæ. +// Przeniesienie wszystkiego na raz zrobi³o by zbyt wielki chaos do ogarniêcia. -const double dEpsilon = 0.01; // 1cm (zale¿y od typu sprzêgu...) +const double dEpsilon = 0.01; // 1cm (zale¿y od typu sprzêgu...) const double CouplerTune = 0.1; // skalowanie tlumiennosci inline long Trunc(float f) @@ -38,16 +39,16 @@ inline double sqr(double val) // SQR() zle liczylo w current() ... double ComputeCollision(double &v1, double &v2, double m1, double m2, double beta, bool vc) { // oblicza zmiane predkosci i przyrost pedu wskutek kolizji - if (v1 < v2 && vc) + if( ( v1 < v2 ) && ( vc == true ) ) return 0; else { double sum = m1 + m2; - double w1 = ((m1 - m2) * v1 + 2 * m2 * v2) / sum; - double w2 = ((m2 - m1) * v2 + 2 * m1 * v1) / sum; - v1 = w1 * sqrt(1 - beta); // niejawna zmiana predkosci wskutek zderzenia - v2 = w2 * sqrt(1 - beta); - return m1 * (w2 - w1) * (1 - beta); + double w1 = ( m2 * v2 * 2.0 + v1 * ( m1 - m2 ) ) / sum; + double w2 = ( m1 * v1 * 2.0 + v2 * ( m2 - m1 ) ) / sum; + v1 = w1 * std::sqrt(1.0 - beta); // niejawna zmiana predkosci wskutek zderzenia + v2 = w2 * std::sqrt(1.0 - beta); + return m1 * (w2 - w1) * (1 - beta); } } @@ -71,7 +72,7 @@ int DirF(int CouplerN) // ************************************************************************************************* // Q: 20160716 -// Obliczanie natê¿enie pr¹du w silnikach +// Obliczanie natê¿enie pr¹du w silnikach // ************************************************************************************************* double TMoverParameters::current(double n, double U) { @@ -83,7 +84,7 @@ double TMoverParameters::current(double n, double U) double R, MotorCurrent; double Rz, Delta, Isf; - double Mn; // przujmuje int, ale dla poprawnosci obliczeñ + double Mn; // przujmuje int, ale dla poprawnosci obliczeñ double Bn; int SP; double U1; // napiecie z korekta @@ -260,7 +261,7 @@ double TMoverParameters::current(double n, double U) } // ************************************************************************************************* -// g³ówny konstruktor +// g³ówny konstruktor // ************************************************************************************************* TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit, std::string NameInit, int LoadInitial, @@ -274,17 +275,17 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit, WriteLog("init default physic values for " + NameInit + ", [" + TypeNameInit + "], [" + LoadTypeInitial + "]"); Dim = TDimension(); - DimHalf.x = 0.5 * Dim.W; // po³owa szerokoœci, OX jest w bok? - DimHalf.y = 0.5 * Dim.L; // po³owa d³ugoœci, OY jest do przodu? - DimHalf.z = 0.5 * Dim.H; // po³owa wysokoœci, OZ jest w górê? + DimHalf.x = 0.5 * Dim.W; // po³owa szerokoÅ“ci, OX jest w bok? + DimHalf.y = 0.5 * Dim.L; // po³owa d³ugoÅ“ci, OY jest do przodu? + DimHalf.z = 0.5 * Dim.H; // po³owa wysokoÅ“ci, OZ jest w górê? Cx = 0.0; - Floor = 0.960; // standardowa wysokoœæ pod³ogi + Floor = 0.960; // standardowa wysokoϾ pod³ogi - // BrakeLevelSet(-2); //Pascal ustawia na 0, przestawimy na odciêcie (CHK jest jeszcze nie + // BrakeLevelSet(-2); //Pascal ustawia na 0, przestawimy na odciêcie (CHK jest jeszcze nie // wczytane!) - bPantKurek3 = true; // domyœlnie zbiornik pantografu po³¹czony jest ze zbiornikiem g³ównym - iProblem = 0; // pojazd w pe³ni gotowy do ruchu - iLights[0] = iLights[1] = 0; //œwiat³a zgaszone + bPantKurek3 = true; // domyÅ“lnie zbiornik pantografu po³¹czony jest ze zbiornikiem g³ównym + iProblem = 0; // pojazd w pe³ni gotowy do ruchu + iLights[0] = iLights[1] = 0; //Å“wiat³a zgaszone // inicjalizacja stalych dMoveLen = 0.0; @@ -341,7 +342,7 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit, DynamicBrakeType = 0; ASBType = 0; AutoRelayType = 0; - for (b = 0; b < 2; b++) // Ra: kto tu zrobi³ "for b:=1 to 2 do" ??? + for (b = 0; b < 2; b++) // Ra: kto tu zrobi³ "for b:=1 to 2 do" ??? { Couplers[b].CouplerType = NoCoupler; Couplers[b].SpringKB = 1.0; @@ -495,15 +496,15 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit, Ftmax = 0.0; ScndS = false; // inicjalizacja zmiennych} - // Loc:=LocInitial; //Ra: to i tak trzeba potem przesun¹æ, po ustaleniu pozycji na torze - // (potrzebna d³ugoœæ) + // Loc:=LocInitial; //Ra: to i tak trzeba potem przesun¹æ, po ustaleniu pozycji na torze + // (potrzebna d³ugoϾ) // Rot:=RotInitial; for (b = 0; b < 2; b++) { - Couplers[b].AllowedFlag = 3; // domyœlnie hak i hamulec, inne trzeba w³¹czyæ jawnie w FIZ + Couplers[b].AllowedFlag = 3; // domyÅ“lnie hak i hamulec, inne trzeba w³¹czyæ jawnie w FIZ Couplers[b].CouplingFlag = 0; Couplers[b].Connected = NULL; - Couplers[b].ConnectedNr = 0; // Ra: to nie ma znaczenia jak nie pod³¹czony + Couplers[b].ConnectedNr = 0; // Ra: to nie ma znaczenia jak nie pod³¹czony Couplers[b].Render = false; Couplers[b].CForce = 0.0; Couplers[b].Dist = 0.0; @@ -573,7 +574,7 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit, UnBrake = false; // Winger 160204 PantVolume = - 0.48; // aby podniesione pantografy opad³y w krótkim czasie przy wy³¹czonej sprê¿arce + 0.48; // aby podniesione pantografy opad³y w krótkim czasie przy wy³¹czonej sprê¿arce PantFrontUp = false; PantRearUp = false; PantFrontStart = 0; @@ -695,7 +696,7 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit, SecuritySystem.SystemBrakeSHPTimer = 0.0; // hunter-091012 SecuritySystem.VelocityAllowed = -1.0; SecuritySystem.NextVelocityAllowed = -1.0; - SecuritySystem.RadioStop = false; // domyœlnie nie ma + SecuritySystem.RadioStop = false; // domyÅ“lnie nie ma SecuritySystem.AwareMinSpeed = 0.1 * Vmax; s_CAtestebrake = false; // ABu 240105: @@ -721,7 +722,7 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit, // } Name = NameInit; - DerailReason = 0; // Ra: powód wykolejenia + DerailReason = 0; // Ra: powód wykolejenia TotalCurrent = 0.0; ShuntModeAllow = false; ShuntMode = false; @@ -734,90 +735,90 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit, double TMoverParameters::Distance(const TLocation &Loc1, const TLocation &Loc2, const TDimension &Dim1, const TDimension &Dim2) -{ // zwraca odleg³oœæ pomiêdzy pojazdami (Loc1) i (Loc2) z uwzglêdnieneim ich d³ugoœci (kule!) +{ // zwraca odleg³oϾ pomiêdzy pojazdami (Loc1) i (Loc2) z uwzglêdnieneim ich d³ugoÅ“ci (kule!) return hypot(Loc2.X - Loc1.X, Loc1.Y - Loc2.Y) - 0.5 * (Dim2.L + Dim1.L); }; /* double TMoverParameters::Distance(const vector3 &s1, const vector3 &s2, const vector3 &d1, const vector3 &d2){ - // obliczenie odleg³oœci prostopad³oœcianów o œrodkach (s1) i (s2) i wymiarach (d1) i (d2) - // return 0.0; //bêdzie zg³aszaæ warning - funkcja do usuniêcia, chyba ¿e siê przyda... + // obliczenie odleg³oÅ“ci prostopad³oÅ“cianów o Å“rodkach (s1) i (s2) i wymiarach (d1) i (d2) + // return 0.0; //bêdzie zg³aszaæ warning - funkcja do usuniêcia, chyba ¿e siê przyda... }; */ double TMoverParameters::CouplerDist(int Coupler) -{ // obliczenie odleg³oœci pomiêdzy sprzêgami (kula!) +{ // obliczenie odleg³oÅ“ci pomiêdzy sprzêgami (kula!) return Couplers[Coupler].CoupleDist = Distance(Loc, Couplers[Coupler].Connected->Loc, Dim, - Couplers[Coupler].Connected->Dim); // odleg³oœæ pomiêdzy sprzêgami (kula!) + Couplers[Coupler].Connected->Dim); // odleg³oϾ pomiêdzy sprzêgami (kula!) }; bool TMoverParameters::Attach(int ConnectNo, int ConnectToNr, TMoverParameters *ConnectTo, int CouplingType, bool Forced) -{ //³¹czenie do swojego sprzêgu (ConnectNo) pojazdu (ConnectTo) stron¹ (ConnectToNr) - // Ra: zwykle wykonywane dwukrotnie, dla ka¿dego pojazdu oddzielnie - // Ra: trzeba by odró¿niæ wymóg dociœniêcia od uszkodzenia sprzêgu przy podczepianiu AI do - // sk³adu - if (ConnectTo) // jeœli nie pusty +{ //³¹czenie do swojego sprzêgu (ConnectNo) pojazdu (ConnectTo) stron¹ (ConnectToNr) + // Ra: zwykle wykonywane dwukrotnie, dla ka¿dego pojazdu oddzielnie + // Ra: trzeba by odró¿niæ wymóg dociÅ“niêcia od uszkodzenia sprzêgu przy podczepianiu AI do + // sk³adu + if (ConnectTo) // jeÅ“li nie pusty { if (ConnectToNr != 2) - Couplers[ConnectNo].ConnectedNr = ConnectToNr; // 2=nic nie pod³¹czone + Couplers[ConnectNo].ConnectedNr = ConnectToNr; // 2=nic nie pod³¹czone TCouplerType ct = ConnectTo->Couplers[Couplers[ConnectNo].ConnectedNr] - .CouplerType; // typ sprzêgu pod³¹czanego pojazdu + .CouplerType; // typ sprzêgu pod³¹czanego pojazdu Couplers[ConnectNo].Connected = - ConnectTo; // tak podpi¹æ (do siebie) zawsze mo¿na, najwy¿ej bêdzie wirtualny - CouplerDist(ConnectNo); // przeliczenie odleg³oœci pomiêdzy sprzêgami + ConnectTo; // tak podpi¹æ (do siebie) zawsze mo¿na, najwy¿ej bêdzie wirtualny + CouplerDist(ConnectNo); // przeliczenie odleg³oÅ“ci pomiêdzy sprzêgami if (CouplingType == ctrain_virtual) - return false; // wirtualny wiêcej nic nie robi + return false; // wirtualny wiêcej nic nie robi if (Forced ? true : ((Couplers[ConnectNo].CoupleDist <= dEpsilon) && (Couplers[ConnectNo].CouplerType != NoCoupler) && (Couplers[ConnectNo].CouplerType == ct))) - { // stykaja sie zderzaki i kompatybilne typy sprzegow, chyba ¿e ³¹czenie na starcie + { // stykaja sie zderzaki i kompatybilne typy sprzegow, chyba ¿e ³¹czenie na starcie if (Couplers[ConnectNo].CouplingFlag == - ctrain_virtual) // jeœli wczeœniej nie by³o po³¹czone - { // ustalenie z której strony rysowaæ sprzêg - Couplers[ConnectNo].Render = true; // tego rysowaæ + ctrain_virtual) // jeÅ“li wczeÅ“niej nie by³o po³¹czone + { // ustalenie z której strony rysowaæ sprzêg + Couplers[ConnectNo].Render = true; // tego rysowaæ ConnectTo->Couplers[Couplers[ConnectNo].ConnectedNr].Render = false; // a tego nie }; - Couplers[ConnectNo].CouplingFlag = CouplingType; // ustawienie typu sprzêgu - // if (CouplingType!=ctrain_virtual) //Ra: wirtualnego nie ³¹czymy zwrotnie! - //{//jeœli ³¹czenie sprzêgiem niewirtualnym, ustawiamy po³¹czenie zwrotne + Couplers[ConnectNo].CouplingFlag = CouplingType; // ustawienie typu sprzêgu + // if (CouplingType!=ctrain_virtual) //Ra: wirtualnego nie ³¹czymy zwrotnie! + //{//jeÅ“li ³¹czenie sprzêgiem niewirtualnym, ustawiamy po³¹czenie zwrotne ConnectTo->Couplers[Couplers[ConnectNo].ConnectedNr].CouplingFlag = CouplingType; ConnectTo->Couplers[Couplers[ConnectNo].ConnectedNr].Connected = this; ConnectTo->Couplers[Couplers[ConnectNo].ConnectedNr].CoupleDist = Couplers[ConnectNo].CoupleDist; return true; //} - // pod³¹czenie nie uda³o siê - jest wirtualne + // pod³¹czenie nie uda³o siê - jest wirtualne } } - return false; // brak pod³¹czanego pojazdu, zbyt du¿a odleg³oœæ, niezgodny typ sprzêgu, brak - // sprzêgu, brak haka + return false; // brak pod³¹czanego pojazdu, zbyt du¿a odleg³oϾ, niezgodny typ sprzêgu, brak + // sprzêgu, brak haka }; -// to jest ju¿ niepotrzebne bo nie ma Delphi +// to jest ju¿ niepotrzebne bo nie ma Delphi //bool TMoverParameters::Attach(int ConnectNo, int ConnectToNr, TMoverParameters *ConnectTo, // int CouplingType, bool Forced) -//{ //³¹czenie do (ConnectNo) pojazdu (ConnectTo) stron¹ (ConnectToNr) +//{ //³¹czenie do (ConnectNo) pojazdu (ConnectTo) stron¹ (ConnectToNr) // return Attach(ConnectNo, ConnectToNr, (TMoverParameters *)ConnectTo, CouplingType, Forced); //}; int TMoverParameters::DettachStatus(int ConnectNo) -{ // Ra: sprawdzenie, czy odleg³oœæ jest dobra do roz³¹czania - // powinny byæ 3 informacje: =0 sprzêg ju¿ roz³¹czony, <0 da siê roz³¹czyæ. >0 nie da siê - // roz³¹czyæ +{ // Ra: sprawdzenie, czy odleg³oϾ jest dobra do roz³¹czania + // powinny byæ 3 informacje: =0 sprzêg ju¿ roz³¹czony, <0 da siê roz³¹czyæ. >0 nie da siê + // roz³¹czyæ if (!Couplers[ConnectNo].Connected) - return 0; // nie ma nic, to roz³¹czanie jest OK + return 0; // nie ma nic, to roz³¹czanie jest OK if ((Couplers[ConnectNo].CouplingFlag & ctrain_coupler) == 0) - return -Couplers[ConnectNo].CouplingFlag; // hak nie po³¹czony - roz³¹czanie jest OK + return -Couplers[ConnectNo].CouplingFlag; // hak nie po³¹czony - roz³¹czanie jest OK if (TestFlag(DamageFlag, dtrain_coupling)) - return -Couplers[ConnectNo].CouplingFlag; // hak urwany - roz³¹czanie jest OK + return -Couplers[ConnectNo].CouplingFlag; // hak urwany - roz³¹czanie jest OK // ABu021104: zakomentowane 'and (CouplerType<>Articulated)' w warunku, nie wiem co to bylo, ale // za to teraz dziala odczepianie... :) } - // if (CouplerType==Articulated) return false; //sprzêg nie do rozpiêcia - mo¿e byæ tylko urwany + // if (CouplerType==Articulated) return false; //sprzêg nie do rozpiêcia - mo¿e byæ tylko urwany // Couplers[ConnectNo].CoupleDist=Distance(Loc,Couplers[ConnectNo].Connected->Loc,Dim,Couplers[ConnectNo].Connected->Dim); CouplerDist(ConnectNo); if (Couplers[ConnectNo].CouplerType == Screw ? Couplers[ConnectNo].CoupleDist < 0.0 : true) - return -Couplers[ConnectNo].CouplingFlag; // mo¿na roz³¹czaæ, jeœli dociœniêty + return -Couplers[ConnectNo].CouplingFlag; // mo¿na roz³¹czaæ, jeÅ“li dociÅ“niêty return (Couplers[ConnectNo].CoupleDist > 0.2) ? -Couplers[ConnectNo].CouplingFlag : Couplers[ConnectNo].CouplingFlag; }; @@ -827,40 +828,40 @@ bool TMoverParameters::Dettach(int ConnectNo) if (!Couplers[ConnectNo].Connected) return true; // nie ma nic, to odczepiono // with Couplers[ConnectNo] do - int i = DettachStatus(ConnectNo); // stan sprzêgu + int i = DettachStatus(ConnectNo); // stan sprzêgu if (i < 0) { // gdy scisniete zderzaki, chyba ze zerwany sprzeg (wirtualnego nie odpinamy z drugiej strony) // Couplers[ConnectNo].Connected=NULL; //lepiej zostawic bo przeciez trzeba kontrolowac // zderzenia odczepionych Couplers[ConnectNo].Connected->Couplers[Couplers[ConnectNo].ConnectedNr].CouplingFlag = - 0; // pozostaje sprzêg wirtualny - Couplers[ConnectNo].CouplingFlag = 0; // pozostaje sprzêg wirtualny + 0; // pozostaje sprzêg wirtualny + Couplers[ConnectNo].CouplingFlag = 0; // pozostaje sprzêg wirtualny return true; } else if (i > 0) - { // od³¹czamy wê¿e i resztê, pozostaje sprzêg fizyczny, który wymaga dociœniêcia (z wirtualnym + { // od³¹czamy wê¿e i resztê, pozostaje sprzêg fizyczny, który wymaga dociÅ“niêcia (z wirtualnym // nic) Couplers[ConnectNo].CouplingFlag &= ctrain_coupler; Couplers[ConnectNo].Connected->Couplers[Couplers[ConnectNo].ConnectedNr].CouplingFlag = Couplers[ConnectNo].CouplingFlag; } - return false; // jeszcze nie roz³¹czony + return false; // jeszcze nie roz³¹czony }; void TMoverParameters::SetCoupleDist() -{ // przeliczenie odleg³oœci sprzêgów +{ // przeliczenie odleg³oÅ“ci sprzêgów if (Couplers[0].Connected) { CouplerDist(0); if (CategoryFlag & 2) - { // Ra: dla samochodów zderzanie kul to za ma³o + { // Ra: dla samochodów zderzanie kul to za ma³o } } if (Couplers[1].Connected) { CouplerDist(1); if (CategoryFlag & 2) - { // Ra: dla samochodów zderzanie kul to za ma³o + { // Ra: dla samochodów zderzanie kul to za ma³o } } }; @@ -872,8 +873,8 @@ bool TMoverParameters::DirectionForward() ++ActiveDir; DirAbsolute = ActiveDir * CabNo; if (DirAbsolute) - if (Battery) // jeœli bateria jest ju¿ za³¹czona - BatterySwitch(true); // to w ten oto durny sposób aktywuje siê CA/SHP + if (Battery) // jeÅ“li bateria jest ju¿ za³¹czona + BatterySwitch(true); // to w ten oto durny sposób aktywuje siê CA/SHP SendCtrlToNext("Direction", ActiveDir, CabNo); return true; } @@ -882,42 +883,42 @@ bool TMoverParameters::DirectionForward() return false; }; -// Nastawianie hamulców +// Nastawianie hamulców void TMoverParameters::BrakeLevelSet(double b) -{ // ustawienie pozycji hamulca na wartoœæ (b) w zakresie od -2 do BrakeCtrlPosNo - // jedyny dopuszczalny sposób przestawienia hamulca zasadniczego +{ // ustawienie pozycji hamulca na wartoϾ (b) w zakresie od -2 do BrakeCtrlPosNo + // jedyny dopuszczalny sposób przestawienia hamulca zasadniczego if (fBrakeCtrlPos == b) - return; // nie przeliczaæ, jak nie ma zmiany + return; // nie przeliczaæ, jak nie ma zmiany fBrakeCtrlPos = b; BrakeCtrlPosR = b; if (fBrakeCtrlPos < Handle->GetPos(bh_MIN)) - fBrakeCtrlPos = Handle->GetPos(bh_MIN); // odciêcie + fBrakeCtrlPos = Handle->GetPos(bh_MIN); // odciêcie else if (fBrakeCtrlPos > Handle->GetPos(bh_MAX)) fBrakeCtrlPos = Handle->GetPos(bh_MAX); - int x = floor(fBrakeCtrlPos); // jeœli odwo³ujemy siê do BrakeCtrlPos w poœrednich, to musi byæ - // obciête a nie zaokr¹gone - while ((x > BrakeCtrlPos) && (BrakeCtrlPos < BrakeCtrlPosNo)) // jeœli zwiêkszy³o siê o 1 + int x = floor(fBrakeCtrlPos); // jeÅ“li odwo³ujemy siê do BrakeCtrlPos w poÅ“rednich, to musi byæ + // obciête a nie zaokr¹gone + while ((x > BrakeCtrlPos) && (BrakeCtrlPos < BrakeCtrlPosNo)) // jeÅ“li zwiêkszy³o siê o 1 if (!IncBrakeLevelOld()) // T_MoverParameters:: - break; // wyjœcie awaryjne - while ((x < BrakeCtrlPos) && (BrakeCtrlPos >= -1)) // jeœli zmniejszy³o siê o 1 + break; // wyjÅ“cie awaryjne + while ((x < BrakeCtrlPos) && (BrakeCtrlPos >= -1)) // jeÅ“li zmniejszy³o siê o 1 if (!DecBrakeLevelOld()) // T_MoverParameters:: break; BrakePressureActual = BrakePressureTable[BrakeCtrlPos]; // skopiowanie pozycji /* //youBy: obawiam sie, ze tutaj to nie dziala :P - //Ra 2014-03: by³o tak zrobione, ¿e dzia³a³o - po ka¿dej zmianie pozycji by³a wywo³ywana ta + //Ra 2014-03: by³o tak zrobione, ¿e dzia³a³o - po ka¿dej zmianie pozycji by³a wywo³ywana ta funkcja - // if (BrakeSystem==Pneumatic?BrakeSubsystem==Oerlikon:false) //tylko Oerlikon akceptuje u³amki + // if (BrakeSystem==Pneumatic?BrakeSubsystem==Oerlikon:false) //tylko Oerlikon akceptuje u³amki if(false) if (fBrakeCtrlPos>0.0) - {//wartoœci poœrednie wyliczamy tylko dla hamowania - double u=fBrakeCtrlPos-double(x); //u³amek ponad wartoœæ ca³kowit¹ + {//wartoÅ“ci poÅ“rednie wyliczamy tylko dla hamowania + double u=fBrakeCtrlPos-double(x); //u³amek ponad wartoϾ ca³kowit¹ if (u>0.0) - {//wyliczamy wartoœci wa¿one + {//wyliczamy wartoÅ“ci wa¿one BrakePressureActual.PipePressureVal+=-u*BrakePressureActual.PipePressureVal+u*BrakePressureTable[BrakeCtrlPos+1+2].PipePressureVal; //BrakePressureActual.BrakePressureVal+=-u*BrakePressureActual.BrakePressureVal+u*BrakePressureTable[BrakeCtrlPos+1].BrakePressureVal; - //to chyba nie bêdzie tak dzia³aæ, zw³aszcza w EN57 + //to chyba nie bêdzie tak dzia³aæ, zw³aszcza w EN57 BrakePressureActual.FlowSpeedVal+=-u*BrakePressureActual.FlowSpeedVal+u*BrakePressureTable[BrakeCtrlPos+1+2].FlowSpeedVal; } } @@ -925,22 +926,22 @@ void TMoverParameters::BrakeLevelSet(double b) }; bool TMoverParameters::BrakeLevelAdd(double b) -{ // dodanie wartoœci (b) do pozycji hamulca (w tym ujemnej) - // zwraca false, gdy po dodaniu by³o by poza zakresem +{ // dodanie wartoÅ“ci (b) do pozycji hamulca (w tym ujemnej) + // zwraca false, gdy po dodaniu by³o by poza zakresem BrakeLevelSet(fBrakeCtrlPos + b); return b > 0.0 ? (fBrakeCtrlPos < BrakeCtrlPosNo) : - (BrakeCtrlPos > -1.0); // true, jeœli mo¿na kontynuowaæ + (BrakeCtrlPos > -1.0); // true, jeÅ“li mo¿na kontynuowaæ }; bool TMoverParameters::IncBrakeLevel() -{ // nowa wersja na u¿ytek AI, false gdy osi¹gniêto pozycjê BrakeCtrlPosNo +{ // nowa wersja na u¿ytek AI, false gdy osi¹gniêto pozycjê BrakeCtrlPosNo return BrakeLevelAdd(1.0); }; bool TMoverParameters::DecBrakeLevel() { return BrakeLevelAdd(-1.0); -}; // nowa wersja na u¿ytek AI, false gdy osi¹gniêto pozycjê -1 +}; // nowa wersja na u¿ytek AI, false gdy osi¹gniêto pozycjê -1 bool TMoverParameters::ChangeCab(int direction) { // zmiana kabiny i resetowanie ustawien @@ -950,7 +951,7 @@ bool TMoverParameters::ChangeCab(int direction) ActiveCab = ActiveCab + direction; if ((BrakeSystem == Pneumatic) && (BrakeCtrlPosNo > 0)) { - // if (BrakeHandle==FV4a) //!!!POBIERAÆ WARTOŒÆ Z KLASY ZAWORU!!! + // if (BrakeHandle==FV4a) //!!!POBIERAÆ WARTOή Z KLASY ZAWORU!!! // BrakeLevelSet(-2); //BrakeCtrlPos=-2; // else if ((BrakeHandle==FVel6)||(BrakeHandle==St113)) // BrakeLevelSet(2); @@ -970,7 +971,7 @@ bool TMoverParameters::ChangeCab(int direction) // BrakeStatus:=b_off; //z Megapacka MainCtrlPos = 0; ScndCtrlPos = 0; - // Ra: to poni¿ej jest bez sensu - mo¿na przejœæ nie wy³¹czaj¹c + // Ra: to poni¿ej jest bez sensu - mo¿na przejϾ nie wy³¹czaj¹c // if ((EngineType!=DieselEngine)&&(EngineType!=DieselElectric)) //{ // Mains=false; @@ -986,7 +987,7 @@ bool TMoverParameters::ChangeCab(int direction) bool TMoverParameters::CurrentSwitch(int direction) { // rozruch wysoki (true) albo niski (false) - // Ra: przenios³em z Train.cpp, nie wiem czy ma to sens + // Ra: przenios³em z Train.cpp, nie wiem czy ma to sens if (MaxCurrentSwitch(direction)) { if (TrainType != dt_EZT) @@ -1000,68 +1001,68 @@ bool TMoverParameters::CurrentSwitch(int direction) }; void TMoverParameters::UpdatePantVolume(double dt) -{ // KURS90 - sprê¿arka pantografów; Ra 2014-07: teraz jest to zbiornik rozrz¹du, chocia¿ to jeszcze +{ // KURS90 - sprê¿arka pantografów; Ra 2014-07: teraz jest to zbiornik rozrz¹du, chocia¿ to jeszcze // nie tak - if (EnginePowerSource.SourceType == CurrentCollector) // tylko jeœli pantografuj¹cy + if (EnginePowerSource.SourceType == CurrentCollector) // tylko jeÅ“li pantografuj¹cy { - // Ra 2014-07: zasadniczo, to istnieje zbiornik rozrz¹du i zbiornik pantografów - na razie + // Ra 2014-07: zasadniczo, to istnieje zbiornik rozrz¹du i zbiornik pantografów - na razie // mamy razem - // Ra 2014-07: kurek trójdrogowy ³¹czy spr.pom. z pantografami i wy³¹cznikiem ciœnieniowym + // Ra 2014-07: kurek trójdrogowy ³¹czy spr.pom. z pantografami i wy³¹cznikiem ciÅ“nieniowym // WS - // Ra 2014-07: zbiornika rozrz¹du nie pompuje siê tu, tylko pantografy; potem mo¿na zamkn¹æ - // WS i odpaliæ resztê + // Ra 2014-07: zbiornika rozrz¹du nie pompuje siê tu, tylko pantografy; potem mo¿na zamkn¹æ + // WS i odpaliæ resztê if ((TrainType == dt_EZT) ? (PantPress < ScndPipePress) : - bPantKurek3) // kurek zamyka po³¹czenie z ZG - { // zbiornik pantografu po³¹czony ze zbiornikiem g³ównym - ma³¹ sprê¿ark¹ siê tego nie + bPantKurek3) // kurek zamyka po³¹czenie z ZG + { // zbiornik pantografu po³¹czony ze zbiornikiem g³ównym - ma³¹ sprê¿ark¹ siê tego nie // napompuje - // Ra 2013-12: Niebugoc³aw mówi, ¿e w EZT nie ma potrzeby odcinaæ kurkiem + // Ra 2013-12: Niebugoc³aw mówi, ¿e w EZT nie ma potrzeby odcinaæ kurkiem PantPress = EnginePowerSource.CollectorParameters - .MaxPress; // ograniczenie ciœnienia do MaxPress (tylko w pantografach!) + .MaxPress; // ograniczenie ciÅ“nienia do MaxPress (tylko w pantografach!) if (PantPress > ScndPipePress) PantPress = ScndPipePress; // oraz do ScndPipePress - PantVolume = (PantPress + 1.0) * 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 + { // 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 * 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 + 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 } if (!PantCompFlag && (PantVolume > 0.1)) - PantVolume -= dt * 0.0003; // nieszczelnoœci: 0.0003=0.3l/s - if (Mains) // nie wchodziæ w funkcjê bez potrzeby - if (EngineType == ElectricSeriesMotor) // nie dotyczy... czego w³aœciwie? + PantVolume -= dt * 0.0003; // nieszczelnoÅ“ci: 0.0003=0.3l/s + if (Mains) // nie wchodziæ w funkcjê bez potrzeby + if (EngineType == ElectricSeriesMotor) // nie dotyczy... czego w³aÅ“ciwie? if (PantPress < EnginePowerSource.CollectorParameters.MinPress) if ((TrainType & (dt_EZT | dt_ET40 | dt_ET41 | dt_ET42)) ? (GetTrainsetVoltage() < EnginePowerSource.CollectorParameters.MinV) : - true) // to jest trochê proteza; zasilanie cz³onu mo¿e byæ przez sprzêg + true) // to jest trochê proteza; zasilanie cz³onu mo¿e byæ przez sprzêg // WN if (MainSwitch(false)) - EventFlag = true; // wywalenie szybkiego z powodu niskiego ciœnienia - if (TrainType != dt_EZT) // w EN57 pompuje siê tylko w silnikowym - // pierwotnie w CHK pantografy mia³y równie¿ rozrz¹dcze EZT + EventFlag = true; // wywalenie szybkiego z powodu niskiego ciÅ“nienia + if (TrainType != dt_EZT) // w EN57 pompuje siê tylko w silnikowym + // pierwotnie w CHK pantografy mia³y równie¿ rozrz¹dcze EZT for (int b = 0; b <= 1; ++b) if (TestFlag(Couplers[b].CouplingFlag, ctrain_controll)) if (Couplers[b].Connected->PantVolume < - PantVolume) // bo inaczej trzeba w obydwu cz³onach przestawiaæ + PantVolume) // bo inaczej trzeba w obydwu cz³onach przestawiaæ Couplers[b].Connected->PantVolume = - PantVolume; // przekazanie ciœnienia do s¹siedniego cz³onu - // czy np. w ET40, ET41, ET42 pantografy cz³onów maj¹ po³¹czenie pneumatyczne? - // Ra 2014-07: raczej nie - najpierw siê za³¹cza jeden cz³on, a potem mo¿na podnieœæ w + PantVolume; // przekazanie ciÅ“nienia do s¹siedniego cz³onu + // czy np. w ET40, ET41, ET42 pantografy cz³onów maj¹ po³¹czenie pneumatyczne? + // Ra 2014-07: raczej nie - najpierw siê za³¹cza jeden cz³on, a potem mo¿na podnieϾ w // drugim } else - { // a tu coœ dla SM42 i SM31, aby pokazywaæ na manometrze + { // a tu coÅ“ dla SM42 i SM31, aby pokazywaæ na manometrze PantPress = CntrlPipePress; } }; void TMoverParameters::UpdateBatteryVoltage(double dt) -{ // przeliczenie obci¹¿enia baterii - double sn1, sn2, sn3, sn4, sn5; // Ra: zrobiæ z tego amperomierz NN +{ // przeliczenie obci¹¿enia baterii + double sn1, sn2, sn3, sn4, sn5; // Ra: zrobiæ z tego amperomierz NN if ((BatteryVoltage > 0) && (EngineType != DieselEngine) && (EngineType != WheelsDriven) && (NominalBatteryVoltage > 0)) { @@ -1079,12 +1080,12 @@ void TMoverParameters::UpdateBatteryVoltage(double dt) sn3 = (dt * 0.05); else sn3 = 0; - if (iLights[0] & 63) // 64=blachy, nie ci¹gn¹ pr¹du //rozpisaæ na poszczególne - // ¿arówki... + if (iLights[0] & 63) // 64=blachy, nie ci¹gn¹ pr¹du //rozpisaæ na poszczególne + // ¿arówki... sn4 = dt * 0.003; else sn4 = 0; - if (iLights[1] & 63) // 64=blachy, nie ci¹gn¹ pr¹du + if (iLights[1] & 63) // 64=blachy, nie ci¹gn¹ pr¹du sn5 = dt * 0.001; else sn5 = 0; @@ -1103,11 +1104,11 @@ void TMoverParameters::UpdateBatteryVoltage(double dt) sn3 = (dt * 0.001); else sn3 = 0; - if (iLights[0] & 63) // 64=blachy, nie ci¹gn¹ pr¹du + if (iLights[0] & 63) // 64=blachy, nie ci¹gn¹ pr¹du sn4 = (dt * 0.0030); else sn4 = 0; - if (iLights[1] & 63) // 64=blachy, nie ci¹gn¹ pr¹du + if (iLights[1] & 63) // 64=blachy, nie ci¹gn¹ pr¹du sn5 = (dt * 0.0010); else sn5 = 0; @@ -1121,14 +1122,14 @@ void TMoverParameters::UpdateBatteryVoltage(double dt) sn2 = dt * 0.000001; sn3 = dt * 0.000001; sn4 = dt * 0.000001; - sn5 = dt * 0.000001; // bardzo powolny spadek przy wy³¹czonych bateriach + sn5 = dt * 0.000001; // bardzo powolny spadek przy wy³¹czonych bateriach }; BatteryVoltage -= (sn1 + sn2 + sn3 + sn4 + sn5); if (NominalBatteryVoltage / BatteryVoltage > 1.57) if (MainSwitch(false) && (EngineType != DieselEngine) && (EngineType != WheelsDriven)) EventFlag = true; // wywalanie szybkiego z powodu zbyt niskiego napiecia if (BatteryVoltage > NominalBatteryVoltage) - BatteryVoltage = NominalBatteryVoltage; // wstrzymanie ³adowania pow. 110V + BatteryVoltage = NominalBatteryVoltage; // wstrzymanie ³adowania pow. 110V if (BatteryVoltage < 0.01) BatteryVoltage = 0.01; } @@ -1139,13 +1140,13 @@ void TMoverParameters::UpdateBatteryVoltage(double dt) }; /* Ukrotnienie EN57: -1 //uk³ad szeregowy -2 //uk³ad równoleg³y +1 //uk³ad szeregowy +2 //uk³ad równoleg³y 3 //bocznik 1 4 //bocznik 2 5 //bocznik 3 6 //do przodu -7 //do ty³u +7 //do ty³u 8 //1 przyspieszenie 9 //minus obw. 2 przyspieszenia 10 //jazda na oporach @@ -1153,26 +1154,26 @@ void TMoverParameters::UpdateBatteryVoltage(double dt) 12A //podnoszenie pantografu przedniego 12B //podnoszenie pantografu tylnego 13A //opuszczanie pantografu przedniego -13B //opuszczanie wszystkich pantografów -14 //za³¹czenie WS -15 //rozrz¹d (WS, PSR, wa³ ku³akowy) +13B //opuszczanie wszystkich pantografów +14 //za³¹czenie WS +15 //rozrz¹d (WS, PSR, wa³ ku³akowy) 16 //odblok PN -18 //sygnalizacja przetwornicy g³ównej +18 //sygnalizacja przetwornicy g³ównej 19 //luzowanie EP 20 //hamowanie EP 21 //rezerwa** (1900+: zamykanie drzwi prawych) -22 //za³. przetwornicy g³ównej -23 //wy³. przetwornicy g³ównej -24 //za³. przetw. oœwietlenia -25 //wy³. przetwornicy oœwietlenia +22 //za³. przetwornicy g³ównej +23 //wy³. przetwornicy g³ównej +24 //za³. przetw. oÅ“wietlenia +25 //wy³. przetwornicy oÅ“wietlenia 26 //sygnalizacja WS -28 //sprê¿arka +28 //sprê¿arka 29 //ogrzewanie 30 //rezerwa* (1900+: zamykanie drzwi lewych) 31 //otwieranie drzwi prawych -32H //zadzia³anie PN siln. trakcyjnych -33 //sygna³ odjazdu -34 //rezerwa (sygnalizacja poœlizgu) +32H //zadzia³anie PN siln. trakcyjnych +33 //sygna³ odjazdu +34 //rezerwa (sygnalizacja poÅ“lizgu) 35 //otwieranie drzwi lewych ZN //masa */ @@ -1203,7 +1204,7 @@ double TMoverParameters::LocalBrakeRatio(void) // ***************************************************************************** // Q: 20160714 -// Oblicza iloraz aktualnej pozycji do maksymalnej hamulca rêcznego +// Oblicza iloraz aktualnej pozycji do maksymalnej hamulca rêcznego // ***************************************************************************** double TMoverParameters::ManualBrakeRatio(void) { @@ -1218,7 +1219,7 @@ double TMoverParameters::ManualBrakeRatio(void) // ***************************************************************************** // Q: 20160713 -// Zwraca objêtoœæ +// Zwraca objêtoϾ // ***************************************************************************** double TMoverParameters::BrakeVP(void) { @@ -1230,7 +1231,7 @@ double TMoverParameters::BrakeVP(void) // ***************************************************************************** // Q: 20160713 -// Zwraca iloraz ró¿nicy miêdzy przewodem kontrolnym i g³ównym oraz DeltaPipePress +// Zwraca iloraz ró¿nicy miêdzy przewodem kontrolnym i g³ównym oraz DeltaPipePress // ***************************************************************************** double TMoverParameters::RealPipeRatio(void) { @@ -1245,7 +1246,7 @@ double TMoverParameters::RealPipeRatio(void) // ***************************************************************************** // Q: 20160713 -// Zwraca iloraz ciœnienia w przewodzie do DeltaPipePress +// Zwraca iloraz ciÅ“nienia w przewodzie do DeltaPipePress // ***************************************************************************** double TMoverParameters::PipeRatio(void) { @@ -1315,7 +1316,7 @@ void TMoverParameters::CollisionDetect(int CouplerN, double dt) (dt); break; // czemu tu jest +0.01?? } - AccS = AccS + (V - Vprev) / dt; // korekta przyspieszenia o si³y wynikaj¹ce ze zderzeñ? + 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.0 * (Couplers[CouplerN].FmaxC + 1.0), p_coupldmg)) @@ -1381,7 +1382,7 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap { HVCouplers[b][0] = Couplers[b].Connected->HVCouplers[1 - Couplers[b].ConnectedNr][0] + - Itot * HVCouplers[b][1] / hvc; // obci¹¿enie rozkladane stosownie do napiec + Itot * HVCouplers[b][1] / hvc; // obci¹¿enie rozkladane stosownie do napiec } else // pierwszy pojazd { @@ -1416,7 +1417,7 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap // RunningTraction.TractionVoltage = // ElectricTraction.TractionVoltage /*- // abs(ElectricTraction.TractionResistivity * Itot * - // 0)*/; // zasadniczo ED oporowe nie zmienia napiêcia w sieci + // 0)*/; // zasadniczo ED oporowe nie zmienia napiêcia w sieci } if (CategoryFlag == 4) @@ -1441,7 +1442,7 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap // dt:=ActualTime-LastUpdatedTime; //przyrost czasu // przyspieszenie styczne AccS = (FTotal / TotalMass + AccSprev) / - 2.0; // prawo Newtona ale z wygladzaniem (œrednia z poprzednim) + 2.0; // prawo Newtona ale z wygladzaniem (Å“rednia z poprzednim) if (TestFlag(DamageFlag, dtrain_out)) AccS = -Sign(V) * g * 1; // random(0.0, 0.1) @@ -1454,7 +1455,7 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap // szarpanie if (FuzzyLogic((10.0 + Track.DamageFlag) * Mass * Vel / Vmax, 500000.0, - p_accn)) // Ra: czemu tu masa bez ³adunku? + p_accn)) // Ra: czemu tu masa bez ³adunku? AccV = sqrt((1.0 + Track.DamageFlag) * Random(floor(50.0 * Mass / 1000000.0)) * Vel / (Vmax * (10.0 + (Track.QualityFlag & 31)))); else @@ -1475,9 +1476,9 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap Mains = false; RunningShape.R = 0; if (TestFlag(Track.DamageFlag, dtrack_norail)) - DerailReason = 1; // Ra: powód wykolejenia: brak szyn + DerailReason = 1; // Ra: powód wykolejenia: brak szyn else - DerailReason = 2; // Ra: powód wykolejenia: przewrócony na ³uku + DerailReason = 2; // Ra: powód wykolejenia: przewrócony na ³uku } // wykolejanie na poszerzeniu toru if (FuzzyLogic(abs(Track.Width - TrackW), TrackW / 10.0, 1)) @@ -1486,7 +1487,7 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap EventFlag = true; Mains = false; RunningShape.R = 0; - DerailReason = 3; // Ra: powód wykolejenia: za szeroki tor + DerailReason = 3; // Ra: powód wykolejenia: za szeroki tor } } // wykolejanie wkutek niezgodnosci kategorii toru i pojazdu @@ -1495,11 +1496,9 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap { EventFlag = true; Mains = false; - DerailReason = 4; // Ra: powód wykolejenia: nieodpowiednia trajektoria + DerailReason = 4; // Ra: powód wykolejenia: nieodpowiednia trajektoria } - V += (3.0 * AccS - AccSprev) * dt / 2.0; // przyrost predkosci - if (TestFlag(DamageFlag, dtrain_out)) if (Vel < 1) { @@ -1510,7 +1509,7 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap if ((V * Vprev <= 0) && (abs(FStand) > abs(FTrain))) // tlumienie predkosci przy hamowaniu { // zahamowany V = 0; - // AccS:=0; //Ra 2014-03: ale si³a grawitacji dzia³a, wiêc nie mo¿e byæ zerowe + // AccS:=0; //Ra 2014-03: ale si³a grawitacji dzia³a, wiêc nie mo¿e byæ zerowe } // { dL:=(V+AccS*dt/2)*dt; //przyrost dlugosci czyli @@ -1523,8 +1522,8 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap } // liczone dL, predkosc i przyspieszenie - if (Power > 1.0) // w rozrz¹dczym nie (jest b³¹d w FIZ!) - Ra 2014-07: teraz we wszystkich - UpdatePantVolume(dt); // Ra 2014-07: obs³uga zbiornika rozrz¹du oraz pantografów + if (Power > 1.0) // w rozrz¹dczym nie (jest b³¹d w FIZ!) - Ra 2014-07: teraz we wszystkich + UpdatePantVolume(dt); // Ra 2014-07: obs³uga zbiornika rozrz¹du oraz pantografów if (EngineType == WheelsDriven) d = (double)CabNo * dL; // na chwile dla testu @@ -1535,9 +1534,9 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap // koniec procedury, tu nastepuja dodatkowe procedury pomocnicze - // sprawdzanie i ewentualnie wykonywanie->kasowanie poleceñ - if (LoadStatus > 0) // czas doliczamy tylko jeœli trwa (roz)³adowanie - LastLoadChangeTime += dt; // czas (roz)³adunku + // sprawdzanie i ewentualnie wykonywanie->kasowanie poleceñ + if (LoadStatus > 0) // czas doliczamy tylko jeÅ“li trwa (roz)³adowanie + LastLoadChangeTime += dt; // czas (roz)³adunku RunInternalCommand(); @@ -1559,18 +1558,18 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap CompressorFlag = false; }; ConverterCheck(); - if (CompressorSpeed > 0.0) // sprê¿arka musi mieæ jak¹œ niezerow¹ wydajnoœæ - CompressorCheck(dt); //¿eby rozwa¿aæ jej za³¹czenie i pracê + if (CompressorSpeed > 0.0) // sprê¿arka musi mieæ jak¹œ niezerow¹ wydajnoϾ + CompressorCheck(dt); //¿eby rozwa¿aæ jej za³¹czenie i pracê UpdateBrakePressure(dt); UpdatePipePressure(dt); UpdateBatteryVoltage(dt); UpdateScndPipePressure(dt); // druga rurka, youBy - // hamulec antypoœlizgowy - wy³¹czanie + // hamulec antypoÅ“lizgowy - wy³¹czanie if ((BrakeSlippingTimer > 0.8) && (ASBType != 128)) // ASBSpeed=0.8 Hamulec->ASB(0); // SetFlag(BrakeStatus,-b_antislip); BrakeSlippingTimer += dt; - // sypanie piasku - wy³¹czone i piasek siê nie koñczy - b³êdy AI + // sypanie piasku - wy³¹czone i piasek siê nie koñczy - b³êdy AI // if AIControllFlag then // if SandDose then // if Sand>0 then @@ -1598,7 +1597,6 @@ double TMoverParameters::FastComputeMovement(double dt, const TTrackShape &Shape TTrackParam &Track, const TLocation &NewLoc, TRotation &NewRot) { - double Vprev, AccSprev, d; int b; // T_MoverParameters::FastComputeMovement(dt, Shape, Track, NewLoc, NewRot); @@ -1616,7 +1614,7 @@ double TMoverParameters::FastComputeMovement(double dt, const TTrackShape &Shape // dt =ActualTime-LastUpdatedTime; //przyrost czasu // przyspieszenie styczne AccS = (FTotal / TotalMass + AccSprev) / - 2.0; // prawo Newtona ale z wygladzaniem (œrednia z poprzednim) + 2.0; // prawo Newtona ale z wygladzaniem (Å“rednia z poprzednim) if (TestFlag(DamageFlag, dtrain_out)) AccS = -Sign(V) * g * 1; // * random(0.0, 0.1) @@ -1672,7 +1670,7 @@ double TMoverParameters::FastComputeMovement(double dt, const TTrackShape &Shape if (Vel < 1) { V = 0; - AccS = 0; // Ra 2014-03: ale si³a grawitacji dzia³a, wiêc nie mo¿e byæ zerowe + AccS = 0; // Ra 2014-03: ale si³a grawitacji dzia³a, wiêc nie mo¿e byæ zerowe } if ((V * Vprev <= 0) && (abs(FStand) > abs(FTrain))) // tlumienie predkosci przy hamowaniu @@ -1687,8 +1685,8 @@ double TMoverParameters::FastComputeMovement(double dt, const TTrackShape &Shape CollisionDetect(b, dt); // zmienia niejawnie AccS, V !!! } // liczone dL, predkosc i przyspieszenie // QQQ - 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 (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 = (double)CabNo * dL; // na chwile dla testu else @@ -1698,9 +1696,9 @@ double TMoverParameters::FastComputeMovement(double dt, const TTrackShape &Shape // koniec procedury, tu nastepuja dodatkowe procedury pomocnicze - // sprawdzanie i ewentualnie wykonywanie->kasowanie poleceñ - if (LoadStatus > 0) // czas doliczamy tylko jeœli trwa (roz)³adowanie - LastLoadChangeTime += dt; // czas (roz)³adunku + // sprawdzanie i ewentualnie wykonywanie->kasowanie poleceñ + if (LoadStatus > 0) // czas doliczamy tylko jeÅ“li trwa (roz)³adowanie + LastLoadChangeTime += dt; // czas (roz)³adunku RunInternalCommand(); @@ -1716,13 +1714,13 @@ double TMoverParameters::FastComputeMovement(double dt, const TTrackShape &Shape CompressorFlag = false; }; ConverterCheck(); - if (CompressorSpeed > 0.0) // sprê¿arka musi mieæ jak¹œ niezerow¹ wydajnoœæ - CompressorCheck(dt); //¿eby rozwa¿aæ jej za³¹czenie i pracê + if (CompressorSpeed > 0.0) // sprê¿arka musi mieæ jak¹œ niezerow¹ wydajnoϾ + CompressorCheck(dt); //¿eby rozwa¿aæ jej za³¹czenie i pracê UpdateBrakePressure(dt); UpdatePipePressure(dt); UpdateScndPipePressure(dt); // druga rurka, youBy UpdateBatteryVoltage(dt); - // hamulec antyposlizgowy - wy³¹czanie + // hamulec antyposlizgowy - wy³¹czanie if ((BrakeSlippingTimer > 0.8) && (ASBType != 128)) // ASBSpeed=0.8 Hamulec->ASB(0); BrakeSlippingTimer += dt; @@ -1730,7 +1728,7 @@ double TMoverParameters::FastComputeMovement(double dt, const TTrackShape &Shape }; double TMoverParameters::ShowEngineRotation(int VehN) -{ // Zwraca wartoœæ prêdkoœci obrotowej silnika wybranego pojazdu. Do 3 pojazdów (3×SN61). +{ // Zwraca wartoϾ prêdkoÅ“ci obrotowej silnika wybranego pojazdu. Do 3 pojazdów (3×SN61). int b; switch (VehN) { // numer obrotomierza @@ -1742,7 +1740,7 @@ double TMoverParameters::ShowEngineRotation(int VehN) if (Couplers[b].Connected->Power > 0.01) return fabs(Couplers[b].Connected->enrot); break; - case 3: // to nie uwzglêdnia ewentualnego odwrócenia pojazdu w œrodku + case 3: // to nie uwzglêdnia ewentualnego odwrócenia pojazdu w Å“rodku for (b = 0; b <= 1; ++b) if (TestFlag(Couplers[b].CouplingFlag, ctrain_controll)) if (Couplers[b].Connected->Power > 0.01) @@ -1763,7 +1761,7 @@ void TMoverParameters::ConverterCheck() }; int TMoverParameters::ShowCurrent(int AmpN) -{ // Odczyt poboru pr¹du na podanym amperomierzu +{ // Odczyt poboru pr¹du na podanym amperomierzu switch (EngineType) { case ElectricInductionMotor: @@ -1791,7 +1789,7 @@ int TMoverParameters::ShowCurrent(int AmpN) // ************************************************************************************************* // Q: 20160710 -// zwiêkszenie nastawinika +// zwiêkszenie nastawinika // ************************************************************************************************* bool TMoverParameters::IncMainCtrl(int CtrlSpeed) @@ -1803,11 +1801,11 @@ bool TMoverParameters::IncMainCtrl(int CtrlSpeed) return false; } if( ( TrainType == dt_ET22 ) && ( ScndCtrlPos != 0 ) ) { - // w ET22 nie da siê krêciæ nastawnikiem przy w³¹czonym boczniku + // w ET22 nie da siê krêciæ nastawnikiem przy w³¹czonym boczniku return false; } if( ( TrainType == dt_EZT ) && ( ActiveDir == 0 ) ) { - // w EZT nie da siê za³¹czyæ pozycji bez ustawienia kierunku + // w EZT nie da siê za³¹czyæ pozycji bez ustawienia kierunku return false; } @@ -1836,7 +1834,7 @@ bool TMoverParameters::IncMainCtrl(int CtrlSpeed) if( ActiveDir == 0 ) { return false; } if( CtrlSpeed > 1 ) { - // szybkie przejœcie na bezoporow¹ + // szybkie przejÅ“cie na bezoporow¹ if( TrainType == dt_ET40 ) { break; // this means ET40 won't react at all to fast acceleration command. should it issue just IncMainCtrl(1) instead? } @@ -1845,8 +1843,8 @@ bool TMoverParameters::IncMainCtrl(int CtrlSpeed) // all work is done in the loop header ; } - // OK:=true ; {takie chamskie, potem poprawie} <-Ra: kto mia³ to - // poprawiæ i po co? + // OK:=true ; {takie chamskie, potem poprawie} <-Ra: kto mia³ to + // poprawiæ i po co? if( ActiveDir == -1 ) { while( ( RList[ MainCtrlPos ].Bn > 1 ) && IncMainCtrl( 1 ) ) { @@ -1881,7 +1879,7 @@ bool TMoverParameters::IncMainCtrl(int CtrlSpeed) if( ActiveDir == -1 ) { if( ( TrainType != dt_PseudoDiesel ) && ( RList[ MainCtrlPos ].Bn > 1 ) ) { - // blokada wejœcia na równoleg³¹ podczas jazdy do ty³u + // blokada wejÅ“cia na równoleg³¹ podczas jazdy do ty³u --MainCtrlPos; OK = false; } @@ -1931,7 +1929,7 @@ bool TMoverParameters::IncMainCtrl(int CtrlSpeed) } else {// MainCtrlPos>=MainCtrlPosNo if( true == CoupledCtrl ) { - // wspólny wa³ nastawnika jazdy i bocznikowania + // wspólny wa³ nastawnika jazdy i bocznikowania if( ScndCtrlPos < ScndCtrlPosNo ) { // 3<3 -> false ++ScndCtrlPos; OK = true; @@ -2077,7 +2075,7 @@ bool TMoverParameters::DecMainCtrl(int CtrlSpeed) // ************************************************************************************************* // Q: 20160710 -// zwiêkszenie bocznika +// zwiêkszenie bocznika // ************************************************************************************************* bool TMoverParameters::IncScndCtrl(int CtrlSpeed) { @@ -2143,7 +2141,7 @@ bool TMoverParameters::DecScndCtrl(int CtrlSpeed) if ((MainCtrlPos == 0) && (CabNo != 0) && (TrainType == dt_ET42) && (ScndCtrlPos == 0) && !(DynamicBrakeFlag) && (CtrlSpeed == 1)) { - // Ra: AI wywo³uje z CtrlSpeed=2 albo gdy ScndCtrlPos>0 + // Ra: AI wywo³uje z CtrlSpeed=2 albo gdy ScndCtrlPos>0 OK = DynamicBrakeSwitch(true); } else if ((ScndCtrlPosNo > 0) && (CabNo != 0)) @@ -2185,16 +2183,16 @@ bool TMoverParameters::DecScndCtrl(int CtrlSpeed) // ************************************************************************************************* // Q: 20160710 -// za³¹czenie rozrz¹du +// za³¹czenie rozrz¹du // ************************************************************************************************* bool TMoverParameters::CabActivisation(void) { bool OK = false; - OK = (CabNo == 0); // numer kabiny, z której jest sterowanie + OK = (CabNo == 0); // numer kabiny, z której jest sterowanie if (OK) { - CabNo = ActiveCab; // sterowanie jest z kabiny z obsad¹ + CabNo = ActiveCab; // sterowanie jest z kabiny z obsad¹ DirAbsolute = ActiveDir * CabNo; SendCtrlToNext("CabActivisation", 1, CabNo); } @@ -2203,7 +2201,7 @@ bool TMoverParameters::CabActivisation(void) // ************************************************************************************************* // Q: 20160710 -// wy³¹czenie rozrz¹du +// wy³¹czenie rozrz¹du // ************************************************************************************************* bool TMoverParameters::CabDeactivisation(void) { @@ -2214,7 +2212,7 @@ bool TMoverParameters::CabDeactivisation(void) { CabNo = 0; DirAbsolute = ActiveDir * CabNo; - DepartureSignal = false; // nie buczeæ z nieaktywnej kabiny + DepartureSignal = false; // nie buczeæ z nieaktywnej kabiny SendCtrlToNext("CabActivisation", 0, ActiveCab); // CabNo==0! } return OK; @@ -2222,7 +2220,7 @@ bool TMoverParameters::CabDeactivisation(void) // ************************************************************************************************* // Q: 20160710 -// Si³a napêdzaj¹ca drezynê po naciœniêciu wajhy +// Si³a napêdzaj¹ca drezynê po naciÅ“niêciu wajhy // ************************************************************************************************* bool TMoverParameters::AddPulseForce(int Multipler) { @@ -2311,7 +2309,7 @@ bool TMoverParameters::SecuritySystemReset(void) // zbijanie czuwaka/SHP { SSR = true; if ((TrainType == dt_EZT) || - (ActiveDir != 0)) // Ra 2014-03: w EZT nie trzeba ustawiaæ kierunku + (ActiveDir != 0)) // Ra 2014-03: w EZT nie trzeba ustawiaæ kierunku if (!TestFlag(SecuritySystem.Status, s_CAebrake) || !TestFlag(SecuritySystem.Status, s_SHPebrake)) SSReset(); @@ -2331,26 +2329,26 @@ bool TMoverParameters::SecuritySystemReset(void) // zbijanie czuwaka/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 + // 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 + // poza tym jest zdefiniowany we wszystkich 3 cz³onach EN57 if ((!Radio)) EmergencyBrakeSwitch(false); if ((SecuritySystem.SystemType > 0) && (SecuritySystem.Status > 0) && - (Battery)) // Ra: EZT ma teraz czuwak w rozrz¹dczym + (Battery)) // Ra: EZT ma teraz czuwak w rozrz¹dczym { // CA if (Vel >= SecuritySystem - .AwareMinSpeed) // domyœlnie predkoœæ wiêksza od 10% Vmax, albo podanej jawnie w FIZ + .AwareMinSpeed) // domyÅ“lnie predkoϾ wiêksza od 10% Vmax, albo podanej jawnie w FIZ { SecuritySystem.SystemTimer += dt; if (TestFlag(SecuritySystem.SystemType, 1) && - TestFlag(SecuritySystem.Status, s_aware)) // jeœli œwieci albo miga + TestFlag(SecuritySystem.Status, s_aware)) // jeÅ“li Å“wieci albo miga SecuritySystem.SystemSoundCATimer += dt; if (TestFlag(SecuritySystem.SystemType, 1) && - TestFlag(SecuritySystem.Status, s_CAalarm)) // jeœli buczy + TestFlag(SecuritySystem.Status, s_CAalarm)) // jeÅ“li buczy SecuritySystem.SystemBrakeCATimer += dt; if (TestFlag(SecuritySystem.SystemType, 1)) if ((SecuritySystem.SystemTimer > SecuritySystem.AwareDelay) && @@ -2367,10 +2365,10 @@ void TMoverParameters::SecuritySystemCheck(double dt) // SHP if (TestFlag(SecuritySystem.SystemType, 2) && - TestFlag(SecuritySystem.Status, s_active)) // jeœli œwieci albo miga + TestFlag(SecuritySystem.Status, s_active)) // jeÅ“li Å“wieci albo miga SecuritySystem.SystemSoundSHPTimer += dt; if (TestFlag(SecuritySystem.SystemType, 2) && - TestFlag(SecuritySystem.Status, s_SHPalarm)) // jeœli buczy + TestFlag(SecuritySystem.Status, s_SHPalarm)) // jeÅ“li buczy SecuritySystem.SystemBrakeSHPTimer += dt; if (TestFlag(SecuritySystem.SystemType, 2) && TestFlag(SecuritySystem.Status, s_active)) if ((Vel > SecuritySystem.VelocityAllowed) && (SecuritySystem.VelocityAllowed >= 0)) @@ -2389,7 +2387,7 @@ void TMoverParameters::SecuritySystemCheck(double dt) } // else SystemTimer:=0; // TEST CA - if (TestFlag(SecuritySystem.Status, s_CAtest)) // jeœli œwieci albo miga + if (TestFlag(SecuritySystem.Status, s_CAtest)) // jeÅ“li Å“wieci albo miga SecuritySystem.SystemBrakeCATestTimer += dt; if (TestFlag(SecuritySystem.SystemType, 1)) if (TestFlag(SecuritySystem.Status, s_CAtest)) // juz wlaczony sygnal swietlny @@ -2403,7 +2401,7 @@ void TMoverParameters::SecuritySystemCheck(double dt) // EmergencyBrakeFlag:=true; //YB-HN } else if (!Battery) - { // wy³¹czenie baterii deaktywuje sprzêt + { // wy³¹czenie baterii deaktywuje sprzêt EmergencyBrakeSwitch(false); // SecuritySystem.Status = 0; //deaktywacja czuwaka } @@ -2411,12 +2409,12 @@ void TMoverParameters::SecuritySystemCheck(double dt) // ************************************************************************************************* // Q: 20160710 -// w³¹czenie / wy³¹czenie baterii +// w³¹czenie / wy³¹czenie baterii // ************************************************************************************************* bool TMoverParameters::BatterySwitch(bool State) { bool BS = false; - // Ra: ukrotnienie za³¹czania baterii jest jak¹œ fikcj¹... + // Ra: ukrotnienie za³¹czania baterii jest jak¹œ fikcj¹... if (Battery != State) { Battery = State; @@ -2430,14 +2428,14 @@ bool TMoverParameters::BatterySwitch(bool State) if ((Battery) && (ActiveCab != 0)) /*|| (TrainType==dt_EZT)*/ SecuritySystem.Status = (SecuritySystem.Status | s_waiting); // aktywacja czuwaka else - SecuritySystem.Status = 0; // wy³¹czenie czuwaka + SecuritySystem.Status = 0; // wy³¹czenie czuwaka return BS; } // ************************************************************************************************* // Q: 20160710 -// w³¹czenie / wy³¹czenie hamulca elektro-pneumatycznego +// w³¹czenie / wy³¹czenie hamulca elektro-pneumatycznego // ************************************************************************************************* bool TMoverParameters::EpFuseSwitch(bool State) { @@ -2454,7 +2452,7 @@ bool TMoverParameters::EpFuseSwitch(bool State) // ************************************************************************************************* // Q: 20160710 -// kierunek do ty³u +// kierunek do ty³u // ************************************************************************************************* bool TMoverParameters::DirectionBackward(void) { @@ -2473,8 +2471,8 @@ bool TMoverParameters::DirectionBackward(void) ActiveDir--; DirAbsolute = ActiveDir * CabNo; if (DirAbsolute != 0) - if (Battery) // jeœli bateria jest ju¿ za³¹czona - BatterySwitch(true); // to w ten oto durny sposób aktywuje siê CA/SHP + if (Battery) // jeÅ“li bateria jest ju¿ za³¹czona + BatterySwitch(true); // to w ten oto durny sposób aktywuje siê CA/SHP DB = true; SendCtrlToNext("Direction", ActiveDir, CabNo); } @@ -2485,7 +2483,7 @@ bool TMoverParameters::DirectionBackward(void) // ************************************************************************************************* // Q: 20160710 -// za³¹czenie przycisku przeciwpoœlizgowego +// za³¹czenie przycisku przeciwpoÅ“lizgowego // ************************************************************************************************* bool TMoverParameters::AntiSlippingButton(void) { @@ -2494,13 +2492,13 @@ bool TMoverParameters::AntiSlippingButton(void) // ************************************************************************************************* // Q: 20160713 -// w³¹czenie / wy³¹czenie obwodu g³ownego +// w³¹czenie / wy³¹czenie obwodu g³ownego // ************************************************************************************************* bool TMoverParameters::MainSwitch(bool State) { bool MS; - MS = false; // Ra: przeniesione z koñca + MS = false; // Ra: przeniesione z koñca if ((Mains != State) && (MainCtrlPosNo > 0)) { if ((State == false) || @@ -2508,14 +2506,14 @@ bool TMoverParameters::MainSwitch(bool State) (LastSwitchingTime > CtrlDelay) && !TestFlag(DamageFlag, dtrain_out) && !TestFlag(EngDmgFlag, 1))) { - if (Mains) // jeœli by³ za³¹czony + if (Mains) // jeÅ“li by³ za³¹czony SendCtrlToNext("MainSwitch", int(State), - CabNo); // wys³anie wy³¹czenia do pozosta³ych? + CabNo); // wys³anie wy³¹czenia do pozosta³ych? Mains = State; - if (Mains) // jeœli zosta³ za³¹czony + if (Mains) // jeÅ“li zosta³ za³¹czony SendCtrlToNext("MainSwitch", int(State), CabNo); // wyslanie po wlaczeniu albo przed wylaczeniem - MS = true; // wartoœæ zwrotna + MS = true; // wartoϾ zwrotna LastSwitchingTime = 0; if ((EngineType == DieselEngine) && Mains) { @@ -2523,12 +2521,12 @@ bool TMoverParameters::MainSwitch(bool State) } if (((TrainType == dt_EZT) && (!State))) ConvOvldFlag = true; - // if (State=false) then //jeœli wy³¹czony + // if (State=false) then //jeÅ“li wy³¹czony // begin // SetFlag(SoundFlag,sound_relay); //hunter-091012: przeniesione do Train.cpp, zeby sie // nie zapetlal // if (SecuritySystem.Status<>12) then - // SecuritySystem.Status:=0; //deaktywacja czuwaka; Ra: a nie bateri¹? + // SecuritySystem.Status:=0; //deaktywacja czuwaka; Ra: a nie bateri¹? // end // else // if (SecuritySystem.Status<>12) then @@ -2541,7 +2539,7 @@ bool TMoverParameters::MainSwitch(bool State) // ************************************************************************************************* // Q: 20160713 -// w³¹czenie / wy³¹czenie przetwornicy +// w³¹czenie / wy³¹czenie przetwornicy // ************************************************************************************************* bool TMoverParameters::ConverterSwitch(bool State) { @@ -2563,7 +2561,7 @@ bool TMoverParameters::ConverterSwitch(bool State) // ************************************************************************************************* // Q: 20160713 -// w³¹czenie / wy³¹czenie sprê¿arki +// w³¹czenie / wy³¹czenie sprê¿arki // ************************************************************************************************* bool TMoverParameters::CompressorSwitch(bool State) { @@ -2586,7 +2584,7 @@ bool TMoverParameters::CompressorSwitch(bool State) // ************************************************************************************************* // Q: 20160711 -// zwiêkszenie nastawy hamulca +// zwiêkszenie nastawy hamulca // ************************************************************************************************* bool TMoverParameters::IncBrakeLevelOld(void) { @@ -2622,7 +2620,7 @@ bool TMoverParameters::IncBrakeLevelOld(void) (BrakePressureTable[BrakeCtrlPos - 1].PipePressureVal > 0)) LimPipePress = PipePress; - //ten kawa³ek jest bez sensu gdy¿ nic nie robi³. Zakomntowa³em. GF 20161124 + //ten kawa³ek jest bez sensu gdy¿ nic nie robi³. Zakomntowa³em. GF 20161124 //if (BrakeSystem == ElectroPneumatic) // if (BrakeSubsystem != ss_K) // { @@ -2696,7 +2694,7 @@ bool TMoverParameters::DecBrakeLevelOld(void) // (BrakePressureTable[BrakeCtrlPos+1].PipePressureVal > 0)) // LimPipePress:=PipePress; - // to nic nie robi. Zakomentowa³em. GF 20161124 + // to nic nie robi. Zakomentowa³em. GF 20161124 //if (BrakeSystem == ElectroPneumatic) // if (BrakeSubsystem != ss_K) // { @@ -2728,7 +2726,7 @@ bool TMoverParameters::DecBrakeLevelOld(void) // ************************************************************************************************* // Q: 20160711 -// zwiêkszenie nastawy hamulca pomocnicznego +// zwiêkszenie nastawy hamulca pomocnicznego // ************************************************************************************************* bool TMoverParameters::IncLocalBrakeLevel(int CtrlSpeed) { @@ -2774,7 +2772,7 @@ bool TMoverParameters::DecLocalBrakeLevel(int CtrlSpeed) // ************************************************************************************************* // Q: 20160711 -// ustawienie pozycji kranu pomocniczego na masymaln¹ wartoœæ +// ustawienie pozycji kranu pomocniczego na masymaln¹ wartoϾ // ************************************************************************************************* bool TMoverParameters::IncLocalBrakeLevelFAST(void) { @@ -2792,7 +2790,7 @@ bool TMoverParameters::IncLocalBrakeLevelFAST(void) // ************************************************************************************************* // Q: 20160711 -// ustawienie pozycji hamulca pomocniczego na minimaln¹ +// ustawienie pozycji hamulca pomocniczego na minimaln¹ // ************************************************************************************************* bool TMoverParameters::DecLocalBrakeLevelFAST(void) { @@ -2810,7 +2808,7 @@ bool TMoverParameters::DecLocalBrakeLevelFAST(void) // ************************************************************************************************* // Q: 20160711 -// zwiêkszenie nastawy hamulca rêcznego +// zwiêkszenie nastawy hamulca rêcznego // ************************************************************************************************* bool TMoverParameters::IncManualBrakeLevel(int CtrlSpeed) { @@ -2832,7 +2830,7 @@ bool TMoverParameters::IncManualBrakeLevel(int CtrlSpeed) // ************************************************************************************************* // Q: 20160711 -// zmniejszenie nastawy hamulca rêcznego +// zmniejszenie nastawy hamulca rêcznego // ************************************************************************************************* bool TMoverParameters::DecManualBrakeLevel(int CtrlSpeed) { @@ -2881,7 +2879,7 @@ bool TMoverParameters::DynamicBrakeSwitch(bool Switch) // ************************************************************************************************* // Q: 20160711 -// w³¹czenie / wy³¹czenie hamowania awaryjnego +// w³¹czenie / wy³¹czenie hamowania awaryjnego // ************************************************************************************************* bool TMoverParameters::EmergencyBrakeSwitch(bool Switch) { @@ -2913,11 +2911,11 @@ bool TMoverParameters::EmergencyBrakeSwitch(bool Switch) // ************************************************************************************************* // Q: 20160710 -// hamowanie przeciwpoœlizgowe +// hamowanie przeciwpoÅ“lizgowe // ************************************************************************************************* bool TMoverParameters::AntiSlippingBrake(void) { - bool ASB = false; // Ra: przeniesione z koñca + bool ASB = false; // Ra: przeniesione z koñca if (ASBType == 1) { ASB = true; // SPKS!! @@ -2929,20 +2927,20 @@ bool TMoverParameters::AntiSlippingBrake(void) // ************************************************************************************************* // Q: 20160711 -// w³¹czenie / wy³¹czenie odluŸniacza +// w³¹czenie / wy³¹czenie odluŸniacza // ************************************************************************************************* bool TMoverParameters::BrakeReleaser(int state) { - bool OK = true; //false tylko jeœli nie uda siê wys³aæ, GF 20161124 + 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 + if (CabNo != 0) // rekurencyjne wys³anie do nastêpnego OK = SendCtrlToNext("BrakeReleaser", state, CabNo); return OK; } // ************************************************************************************************* // Q: 20160711 -// w³¹czenie / wy³¹czenie hamulca elektro-pneumatycznego +// w³¹czenie / wy³¹czenie hamulca elektro-pneumatycznego // ************************************************************************************************* bool TMoverParameters::SwitchEPBrake(int state) { @@ -2966,7 +2964,7 @@ bool TMoverParameters::SwitchEPBrake(int state) // ************************************************************************************************* // Q: 20160711 -// zwiêkszenie ciœnienia hamowania +// zwiêkszenie ciÅ“nienia hamowania // ************************************************************************************************* bool TMoverParameters::IncBrakePress(double &brake, double PressLimit, double dp) { @@ -2975,7 +2973,7 @@ bool TMoverParameters::IncBrakePress(double &brake, double PressLimit, double dp // ((BrakePress>2.0) or (PipePress<3.7{(LowPipePress+0.5)})) then if ((DynamicBrakeType != dbrake_switch) && (DynamicBrakeType != dbrake_none) && (BrakePress > 2.0) && - (TrainType != dt_EZT)) // yB radzi nie sprawdzaæ ciœnienia w przewodzie + (TrainType != dt_EZT)) // yB radzi nie sprawdzaæ ciÅ“nienia w przewodzie // hunter-301211: dla EN57 silnikow nie odlaczamy { DynamicBrakeFlag = true; // uruchamianie hamulca ED albo odlaczanie silnikow @@ -2998,7 +2996,7 @@ bool TMoverParameters::IncBrakePress(double &brake, double PressLimit, double dp // ************************************************************************************************* // Q: 20160711 -// zmniejszenie ciœnienia hamowania +// zmniejszenie ciÅ“nienia hamowania // ************************************************************************************************* bool TMoverParameters::DecBrakePress(double &brake, double PressLimit, double dp) { @@ -3017,7 +3015,7 @@ bool TMoverParameters::DecBrakePress(double &brake, double PressLimit, double dp // if ((DynamicBrakeType != dbrake_switch) && ((BrakePress < 0.1) && (PipePress > 0.45 // /*(LowPipePress+0.06)*/ ))) if ((DynamicBrakeType != dbrake_switch) && - (BrakePress < 0.1)) // yB radzi nie sprawdzaæ ciœnienia w przewodzie + (BrakePress < 0.1)) // yB radzi nie sprawdzaæ ciÅ“nienia w przewodzie DynamicBrakeFlag = false; // wylaczanie hamulca ED i/albo zalaczanie silnikow return DBP; @@ -3025,7 +3023,7 @@ bool TMoverParameters::DecBrakePress(double &brake, double PressLimit, double dp // ************************************************************************************************* // Q: 20160711 -// prze³¹czenie nastawy hamulca O/P/T +// prze³¹czenie nastawy hamulca O/P/T // ************************************************************************************************* bool TMoverParameters::BrakeDelaySwitch(int BDS) { @@ -3046,7 +3044,7 @@ bool TMoverParameters::BrakeDelaySwitch(int BDS) BrakeDelayFlag = BDS; rBDS = true; BrakeStatus = (BrakeStatus & 191); - // kopowanie nastawy hamulca do kolejnego czlonu - do przemyœlenia + // kopowanie nastawy hamulca do kolejnego czlonu - do przemyÅ“lenia if (CabNo != 0) SendCtrlToNext("BrakeDelay", BrakeDelayFlag, CabNo); } @@ -3057,7 +3055,7 @@ bool TMoverParameters::BrakeDelaySwitch(int BDS) // ************************************************************************************************* // Q: 20160712 -// zwiêkszenie prze³o¿enia hamulca +// zwiêkszenie prze³o¿enia hamulca // ************************************************************************************************* bool TMoverParameters::IncBrakeMult(void) { @@ -3081,7 +3079,7 @@ bool TMoverParameters::IncBrakeMult(void) // ************************************************************************************************* // Q: 20160712 -// zmniejszenie prze³o¿enia hamulca +// zmniejszenie prze³o¿enia hamulca // ************************************************************************************************* bool TMoverParameters::DecBrakeMult(void) { @@ -3104,7 +3102,7 @@ bool TMoverParameters::DecBrakeMult(void) // ************************************************************************************************* // Q: 20160712 -// zaktualizowanie ciœnienia w hamulcach +// zaktualizowanie ciÅ“nienia w hamulcach // ************************************************************************************************* void TMoverParameters::UpdateBrakePressure(double dt) { @@ -3121,11 +3119,11 @@ void TMoverParameters::UpdateBrakePressure(double dt) // ************************************************************************************************* // Q: 20160712 -// Obliczanie pracy sprê¿arki +// Obliczanie pracy sprê¿arki // ************************************************************************************************* void TMoverParameters::CompressorCheck(double dt) { - // if (CompressorSpeed>0.0) then //ten warunek zosta³ sprawdzony przy wywo³aniu funkcji + // if (CompressorSpeed>0.0) then //ten warunek zosta³ sprawdzony przy wywo³aniu funkcji if (VeselVolume > 0) { if (MaxCompressor - MinCompressor < 0.0001) @@ -3143,7 +3141,7 @@ void TMoverParameters::CompressorCheck(double dt) CompressedVolume += dt * CompressorSpeed * (2.0 * MaxCompressor - Compressor) / MaxCompressor; TotalCurrent += 0.0015 - * Voltage; // tymczasowo tylko obci¹¿enie sprê¿arki, tak z 5A na sprê¿arkê + * Voltage; // tymczasowo tylko obci¹¿enie sprê¿arki, tak z 5A na sprê¿arkê } else { @@ -3155,60 +3153,60 @@ void TMoverParameters::CompressorCheck(double dt) } else { - if (CompressorFlag) // jeœli sprê¿arka za³¹czona - { // sprawdziæ mo¿liwe warunki wy³¹czenia sprê¿arki - if (CompressorPower == 5) // jeœli zasilanie z s¹siedniego cz³onu - { // zasilanie sprê¿arki w cz³onie ra z cz³onu silnikowego (sprzêg 1) + if (CompressorFlag) // jeÅ“li sprê¿arka za³¹czona + { // sprawdziæ mo¿liwe warunki wy³¹czenia sprê¿arki + if (CompressorPower == 5) // jeÅ“li zasilanie z s¹siedniego cz³onu + { // zasilanie sprê¿arki w cz³onie ra z cz³onu silnikowego (sprzêg 1) if (Couplers[1].Connected != NULL) CompressorFlag = (Couplers[1].Connected->CompressorAllow && Couplers[1].Connected->ConverterFlag && Couplers[1].Connected->Mains); else - CompressorFlag = false; // bez tamtego cz³onu nie zadzia³a + CompressorFlag = false; // bez tamtego cz³onu nie zadzia³a } - else if (CompressorPower == 4) // jeœli zasilanie z poprzedniego cz³onu - { // zasilanie sprê¿arki w cz³onie ra z cz³onu silnikowego (sprzêg 1) + else if (CompressorPower == 4) // jeÅ“li zasilanie z poprzedniego cz³onu + { // zasilanie sprê¿arki w cz³onie ra z cz³onu silnikowego (sprzêg 1) if (Couplers[0].Connected != NULL) CompressorFlag = (Couplers[0].Connected->CompressorAllow && Couplers[0].Connected->ConverterFlag && Couplers[0].Connected->Mains); else - CompressorFlag = false; // bez tamtego cz³onu nie zadzia³a + CompressorFlag = false; // bez tamtego cz³onu nie zadzia³a } else CompressorFlag = (CompressorAllow) && ((ConverterFlag) || (CompressorPower == 0)) && (Mains); if (Compressor > - MaxCompressor) // wy³¹cznik ciœnieniowy jest niezale¿ny od sposobu zasilania + MaxCompressor) // wy³¹cznik ciÅ“nieniowy jest niezale¿ny od sposobu zasilania CompressorFlag = false; } - else // jeœli nie za³¹czona + else // jeÅ“li nie za³¹czona if ((Compressor < MinCompressor) && - (LastSwitchingTime > CtrlDelay)) // jeœli nie za³¹czona, a ciœnienie za ma³e - { // za³¹czenie przy ma³ym ciœnieniu - if (CompressorPower == 5) // jeœli zasilanie z nastêpnego cz³onu - { // zasilanie sprê¿arki w cz³onie ra z cz³onu silnikowego (sprzêg 1) + (LastSwitchingTime > CtrlDelay)) // jeÅ“li nie za³¹czona, a ciÅ“nienie za ma³e + { // za³¹czenie przy ma³ym ciÅ“nieniu + if (CompressorPower == 5) // jeÅ“li zasilanie z nastêpnego cz³onu + { // zasilanie sprê¿arki w cz³onie ra z cz³onu silnikowego (sprzêg 1) if (Couplers[1].Connected != NULL) CompressorFlag = (Couplers[1].Connected->CompressorAllow && Couplers[1].Connected->ConverterFlag && Couplers[1].Connected->Mains); else - CompressorFlag = false; // bez tamtego cz³onu nie zadzia³a + CompressorFlag = false; // bez tamtego cz³onu nie zadzia³a } - else if (CompressorPower == 4) // jeœli zasilanie z poprzedniego cz³onu - { // zasilanie sprê¿arki w cz³onie ra z cz³onu silnikowego (sprzêg 1) + else if (CompressorPower == 4) // jeÅ“li zasilanie z poprzedniego cz³onu + { // zasilanie sprê¿arki w cz³onie ra z cz³onu silnikowego (sprzêg 1) if (Couplers[0].Connected != NULL) CompressorFlag = (Couplers[0].Connected->CompressorAllow && Couplers[0].Connected->ConverterFlag && Couplers[0].Connected->Mains); else - CompressorFlag = false; // bez tamtego cz³onu nie zadzia³a + CompressorFlag = false; // bez tamtego cz³onu nie zadzia³a } else CompressorFlag = (CompressorAllow) && ((ConverterFlag) || (CompressorPower == 0)) && (Mains); - if (CompressorFlag) // jeœli zosta³a za³¹czona - LastSwitchingTime = 0; // to trzeba ograniczyæ ponowne w³¹czenie + if (CompressorFlag) // jeÅ“li zosta³a za³¹czona + LastSwitchingTime = 0; // to trzeba ograniczyæ ponowne w³¹czenie } // for b:=0 to 1 do //z Megapacka // with Couplers[b] do @@ -3225,17 +3223,17 @@ void TMoverParameters::CompressorCheck(double dt) 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 - // sprê¿arki, tak z 5A na - // sprê¿arkê + 0.0015 * Couplers[1].Connected->Voltage; // tymczasowo tylko obci¹¿enie + // sprê¿arki, tak z 5A na + // sprê¿arkê else if ((CompressorPower == 4) && (Couplers[0].Connected != NULL)) Couplers[0].Connected->TotalCurrent += - 0.0015 * Couplers[0].Connected->Voltage; // tymczasowo tylko obci¹¿enie - // sprê¿arki, tak z 5A na - // sprê¿arkê + 0.0015 * Couplers[0].Connected->Voltage; // tymczasowo tylko obci¹¿enie + // sprê¿arki, tak z 5A na + // sprê¿arkê else TotalCurrent += 0.0015 * - Voltage; // tymczasowo tylko obci¹¿enie sprê¿arki, tak z 5A na sprê¿arkê + Voltage; // tymczasowo tylko obci¹¿enie sprê¿arki, tak z 5A na sprê¿arkê } } } @@ -3243,7 +3241,7 @@ void TMoverParameters::CompressorCheck(double dt) // ************************************************************************************************* // Q: 20160712 -// aktualizacja ciœnienia w przewodzie g³ównym +// aktualizacja ciÅ“nienia w przewodzie g³ównym // ************************************************************************************************* void TMoverParameters::UpdatePipePressure(double dt) { @@ -3309,7 +3307,7 @@ void TMoverParameters::UpdatePipePressure(double dt) // Pipe.Flow(PF(PipePress, 0, d2A(12)) * dt); dpMainValve = dpMainValve / (Dim.L * Spg * 20); - CntrlPipePress = Hamulec->GetVRP(); // ciœnienie komory wstêpnej rozdzielacza + CntrlPipePress = Hamulec->GetVRP(); // ciÅ“nienie komory wstêpnej rozdzielacza // if (Hamulec is typeid(TWest)) return 0; @@ -3339,8 +3337,8 @@ void TMoverParameters::UpdatePipePressure(double dt) LocBrakePress = LocHandle->GetCP(); 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 + (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) && ((Couplers[b].CouplingFlag & 36) == 36)) LocBrakePress = Max0R(Couplers[b].Connected->LocHandle->GetCP(), LocBrakePress); @@ -3417,15 +3415,15 @@ void TMoverParameters::UpdatePipePressure(double dt) temp = 0; Hamulec->SetEPS(temp); SendCtrlToNext("Brake", temp, - CabNo); // Ra 2014-11: na tym siê wysypuje, ale nie wiem, w jakich warunkach + CabNo); // Ra 2014-11: na tym siê wysypuje, ale nie wiem, w jakich warunkach } Pipe->Act(); PipePress = Pipe->P(); - if ((BrakeStatus & 128) == 128) // jesli hamulec wy³¹czony + if ((BrakeStatus & 128) == 128) // jesli hamulec wy³¹czony temp = 0; // odetnij else - temp = 1; // po³¹cz + temp = 1; // po³¹cz Pipe->Flow(temp * Hamulec->GetPF(temp * PipePress, dt, Vel) + GetDVc(dt)); if (ASBType == 128) @@ -3452,7 +3450,7 @@ void TMoverParameters::UpdatePipePressure(double dt) // ************************************************************************************************* // Q: 20160713 -// Aktualizacja ciœnienia w przewodzie zasilaj¹cym +// Aktualizacja ciÅ“nienia w przewodzie zasilaj¹cym // ************************************************************************************************* void TMoverParameters::UpdateScndPipePressure(double dt) { @@ -3516,7 +3514,7 @@ void TMoverParameters::UpdateScndPipePressure(double dt) // ************************************************************************************************* // Q: 20160715 -// oblicza i zwraca przep³yw powietrza pomiêdzy pojazdami +// oblicza i zwraca przep³yw powietrza pomiêdzy pojazdami // ************************************************************************************************* double TMoverParameters::GetDVc(double dt) { @@ -3552,7 +3550,7 @@ double TMoverParameters::GetDVc(double dt) // { // 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? + // 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); // } @@ -3562,14 +3560,14 @@ double TMoverParameters::GetDVc(double dt) // ************************************************************************************************* // Q: 20160713 -// Obliczenie sta³ych potrzebnych do dalszych obliczeñ +// Obliczenie sta³ych potrzebnych do dalszych obliczeñ // ************************************************************************************************* void TMoverParameters::ComputeConstans(void) { double BearingF, RollF, HideModifier; - double Curvature; // Ra 2014-07: odwrotnoœæ promienia + double Curvature; // Ra 2014-07: odwrotnoϾ promienia - TotalCurrent = 0; // Ra 2014-04: tu zerowanie, aby EZT mog³o pobieraæ pr¹d innemu cz³onowi + 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.0 * (DamageFlag && dtrain_bearing); @@ -3594,10 +3592,10 @@ void TMoverParameters::ComputeConstans(void) Ff = TotalMassxg * (BearingF + RollF * V * V / 10.0) / 1000.0; // dorobic liczenie temperatury lozyska! FrictConst1 = ((TotalMassxg * RollF) / 10000.0) + (Cx * Dim.W * Dim.H); - Curvature = abs(RunningShape.R); // zero oznacza nieskoñczony promieñ + Curvature = abs(RunningShape.R); // zero oznacza nieskoñczony promieñ if (Curvature > 0.0) Curvature = 1.0 / Curvature; - // opór sk³adu na ³uku (youBy): +(500*TrackW/R)*TotalMassxg*0.001 do FrictConst2s/d + // opór sk³adu na ³uku (youBy): +(500*TrackW/R)*TotalMassxg*0.001 do FrictConst2s/d FrictConst2s = (TotalMassxg * ((500.0 * TrackW * Curvature) + 2.5 - HideModifier + 2 * BearingF / dtrain_bearing)) * 0.001; @@ -3608,14 +3606,14 @@ void TMoverParameters::ComputeConstans(void) // ************************************************************************************************* // Q: 20160713 -// Oblicza masê ³adunku +// Oblicza masê ³adunku // ************************************************************************************************* double TMoverParameters::ComputeMass(void) { double M; - LoadType = ToLower(LoadType); // po co zak³adaæ jak mo¿na mieæ na pewno + LoadType = ToLower(LoadType); // po co zak³adaæ jak mo¿na mieæ na pewno if (Load > 0) - { // zak³adamy, ¿e ³adunek jest pisany ma³ymi literami + { // zak³adamy, ¿e ³adunek jest pisany ma³ymi literami if (ToLower(LoadQuantity) == "tonns") M = Load * 1000; else if (LoadType == "passengers") @@ -3623,7 +3621,7 @@ double TMoverParameters::ComputeMass(void) else if (LoadType == "luggage") M = Load * 100; else if (LoadType == "cars") - M = Load * 1200; // 800 kilo to mia³ maluch + M = Load * 1200; // 800 kilo to mia³ maluch else if (LoadType == "containers") M = Load * 8000; else if (LoadType == "transformers") @@ -3633,13 +3631,13 @@ double TMoverParameters::ComputeMass(void) } else M = 0; - // Ra: na razie tak, ale nie wszêdzie masy wiruj¹ce siê wliczaj¹ + // Ra: na razie tak, ale nie wszêdzie masy wiruj¹ce siê wliczaj¹ return Mass + M + Mred; } // ************************************************************************************************* // Q: 20160713 -// Obliczanie wypadkowej si³y z wszystkich dzia³aj¹cych si³ +// Obliczanie wypadkowej si³y z wszystkich dzia³aj¹cych si³ // ************************************************************************************************* void TMoverParameters::ComputeTotalForce(double dt, double dt1, bool FullVer) { @@ -3654,14 +3652,14 @@ void TMoverParameters::ComputeTotalForce(double dt, double dt1, bool FullVer) // to powinno byc zerowane na zewnatrz // juz zoptymalizowane: - FStand = FrictionForce(RunningShape.R, RunningTrack.DamageFlag); // si³a oporów ruchu - Vel = abs(V) * 3.6; // prêdkoœæ w km/h - nrot = v2n(); // przeliczenie prêdkoœci liniowej na obrotow¹ + FStand = FrictionForce(RunningShape.R, RunningTrack.DamageFlag); // si³a oporów ruchu + Vel = abs(V) * 3.6; // prêdkoϾ w km/h + nrot = v2n(); // przeliczenie prêdkoÅ“ci liniowej na obrotow¹ if (TestFlag(BrakeMethod, bp_MHS) && (PipePress < 3.0) && (Vel > 45) && TestFlag(BrakeDelayFlag, bdelay_M)) // ustawione na sztywno na 3 bar FStand += TrackBrakeForce; // doliczenie hamowania hamulcem szynowym - // w charakterystykach jest wartoœæ si³y hamowania zamiast nacisku + // w charakterystykach jest wartoϾ si³y hamowania zamiast nacisku // if(FullVer=true) then // ABu: to dla optymalizacji, bo chyba te rzeczy wystarczy sprawdzac 1 raz na // klatke? @@ -3670,7 +3668,7 @@ void TMoverParameters::ComputeTotalForce(double dt, double dt1, bool FullVer) LastRelayTime += dt1; if (Mains && /*(abs(CabNo) < 2) &&*/ (EngineType == ElectricSeriesMotor)) // potem ulepszyc! pantogtrafy! - { // Ra 2014-03: uwzglêdnienie kierunku jazdy w napiêciu na silnikach, a powinien byæ + { // Ra 2014-03: uwzglêdnienie kierunku jazdy w napiêciu na silnikach, a powinien byæ // zdefiniowany nawrotnik if (CabNo == 0) Voltage = RunningTraction.TractionVoltage * ActiveDir; @@ -3710,7 +3708,7 @@ void TMoverParameters::ComputeTotalForce(double dt, double dt1, bool FullVer) for (b = 0; b < 2; b++) if (Couplers[b].Connected != NULL) /*and (Couplers[b].CouplerType<>Bare) and (Couplers[b].CouplerType<>Articulated)*/ - { // doliczenie si³ z innych pojazdów + { // doliczenie si³ z innych pojazdów Couplers[b].CForce = CouplerForce(b, dt); FTrain += Couplers[b].CForce; } @@ -3719,7 +3717,7 @@ void TMoverParameters::ComputeTotalForce(double dt, double dt1, bool FullVer) // FStand:=Fb+FrictionForce(RunningShape.R,RunningTrack.DamageFlag); FStand += Fb; FTrain += - TotalMassxg * RunningShape.dHtrack; // doliczenie sk³adowej stycznej grawitacji + TotalMassxg * RunningShape.dHtrack; // doliczenie sk³adowej stycznej grawitacji //!niejawne przypisanie zmiennej! FTotal = FTrain - Sign(V) * FStand; } @@ -3752,7 +3750,7 @@ void TMoverParameters::ComputeTotalForce(double dt, double dt1, bool FullVer) // ************************************************************************************************* // Q: 20160713 -// oblicza si³ê na styku ko³a i szyny +// oblicza si³ê na styku ko³a i szyny // ************************************************************************************************* double TMoverParameters::BrakeForce(const TTrackParam &Track) { @@ -3823,8 +3821,8 @@ double TMoverParameters::BrakeForce(const TTrackParam &Track) //{ SlippingWheels:=false;} // if (LocalBrake=ManualBrake)or(MBrake=true)) and (BrakePress<0.3) then // Fb:=UnitBrakeForce*NBpA {ham. reczny dziala na jedna os} - // else //yB: to nie do konca ma sens, poniewa¿ rêczny w wagonie dzia³a na jeden cylinder - // hamulcowy/wózek, dlatego potrzebne s¹ oddzielnie liczone osie + // else //yB: to nie do konca ma sens, poniewa¿ rêczny w wagonie dzia³a na jeden cylinder + // hamulcowy/wózek, dlatego potrzebne s¹ oddzielnie liczone osie Fb = UnitBrakeForce * NBrakeAxles * Max0R(1, NBpA); // u:=((BrakePress*P2FTrans)-BrakeCylSpring*BrakeCylMult[BCMFlag]/BrakeCylNo-0.83*BrakeSlckAdj/(BrakeCylNo))*BrakeCylNo; @@ -3834,7 +3832,7 @@ double TMoverParameters::BrakeForce(const TTrackParam &Track) // ************************************************************************************************* // Q: 20160713 -// Obliczanie si³y tarcia +// Obliczanie si³y tarcia // ************************************************************************************************* double TMoverParameters::FrictionForce(double R, int TDamage) { @@ -3849,7 +3847,7 @@ double TMoverParameters::FrictionForce(double R, int TDamage) // ************************************************************************************************* // Q: 20160713 -// Oblicza przyczepnoœæ +// Oblicza przyczepnoϾ // ************************************************************************************************* double TMoverParameters::Adhesive(double staticfriction) { @@ -3903,11 +3901,11 @@ double DirF(int CouplerN) // ************************************************************************************************* // Q: 20160713 -// Obliczanie si³ dzialaj¹cych na sprzêgach +// Obliczanie si³ dzialaj¹cych na sprzêgach // ************************************************************************************************* double TMoverParameters::CouplerForce(int CouplerN, double dt) { - // wyliczenie si³y na sprzêgu + // wyliczenie si³y na sprzêgu double tempdist = 0, newdist = 0, distDelta = 0, CF = 0, dV = 0, absdV = 0, Fmax = 0; double BetaAvg = 0; int CNext = 0; @@ -3920,7 +3918,7 @@ double TMoverParameters::CouplerForce(int CouplerN, double dt) // if (Couplers[CouplerN].CForce == 0) //nie bylo uzgadniane wiec policz Couplers[CouplerN].CheckCollision = false; - newdist = Couplers[CouplerN].CoupleDist; // odleg³oœæ od sprzêgu s¹siada + newdist = Couplers[CouplerN].CoupleDist; // odleg³oϾ od sprzêgu s¹siada // newdist:=Distance(Loc,Connected^.Loc,Dim,Connected^.Dim); if (CouplerN == 0) { @@ -3950,7 +3948,7 @@ double TMoverParameters::CouplerForce(int CouplerN, double dt) if ((newdist > MaxDist) || ((ScanCounter > MaxCount) && (newdist > MinDist))) //***if (tempdist>MaxDist) or ((ScanCounter>MaxCount)and(tempdist>MinDist)) then { // zerwij kontrolnie wirtualny sprzeg - // Connected.Couplers[CNext].Connected:=nil; //Ra: ten pod³¹czony niekoniecznie jest + // Connected.Couplers[CNext].Connected:=nil; //Ra: ten pod³¹czony niekoniecznie jest // wirtualny Couplers[CouplerN].Connected = NULL; ScanCounter = Random(500); // Q: TODO: cy dobrze przetlumaczone? @@ -4089,7 +4087,7 @@ double TMoverParameters::TractionForce(double dt) enrot = Transmision.Ratio * nrot; else // dla DieselEngine { - if (ShuntMode) // dodatkowa przek³adnia np. dla 2Ls150 + if (ShuntMode) // dodatkowa przek³adnia np. dla 2Ls150 dtrans = AnPos * Transmision.Ratio * MotorParam[ScndCtrlActualPos].mIsat; else dtrans = Transmision.Ratio * MotorParam[ScndCtrlActualPos].mIsat; @@ -4205,10 +4203,10 @@ double TMoverParameters::TractionForce(double dt) Mm = MomentumF(Im, Vadd, 0); } - if ((TrainType == dt_ET22) && (DelayCtrlFlag)) // szarpanie przy zmianie uk³adu w byku + if ((TrainType == dt_ET22) && (DelayCtrlFlag)) // szarpanie przy zmianie uk³adu w byku Mm = Mm * RList[MainCtrlActualPos].Bn / (RList[MainCtrlActualPos].Bn + - 1); // zrobione w momencie, ¿eby nie dawac elektryki w przeliczaniu si³ + 1); // zrobione w momencie, ¿eby nie dawac elektryki w przeliczaniu si³ if (abs(Im) > Imax) Vhyp += dt; //*(abs(Im) / Imax - 0.9) * 10; // zwieksz czas oddzialywania na PN @@ -4217,12 +4215,12 @@ double TMoverParameters::TractionForce(double dt) if (Vhyp > CtrlDelay / 2) // jesli czas oddzialywania przekroczony FuseOff(); // wywalanie bezpiecznika z powodu przetezenia silnikow - if ((Mains)) // nie wchodziæ w funkcjê bez potrzeby + if ((Mains)) // nie wchodziæ w funkcjê bez potrzeby if ((abs(Voltage) < EnginePowerSource.CollectorParameters.MinV) || (abs(Voltage) * EnginePowerSource.CollectorParameters.OVP > EnginePowerSource.CollectorParameters.MaxV)) if (MainSwitch(false)) - EventFlag = true; // wywalanie szybkiego z powodu niew³aœciwego napiêcia + EventFlag = true; // wywalanie szybkiego z powodu niew³aÅ“ciwego napiêcia if (((DynamicBrakeType == dbrake_automatic) || (DynamicBrakeType == dbrake_switch)) && (DynamicBrakeFlag)) @@ -4243,7 +4241,7 @@ double TMoverParameters::TractionForce(double dt) EnginePower = dmoment * enrot; if (MainCtrlPos > 1) dmoment -= - dizel_Mstand * (0.2 * enrot / nmax); // dodatkowe opory z powodu sprezarki} + dizel_Mstand * (0.2 * enrot / dizel_nmax); // dodatkowe opory z powodu sprezarki} Mm = dizel_engage * dmoment; Mw = Mm * dtrans; // dmoment i dtrans policzone przy okazji enginerotation Fw = Mw * 2.0 / WheelDiameter; @@ -4267,13 +4265,16 @@ double TMoverParameters::TractionForce(double dt) else // jazda ciapongowa { - tmp = Min0R(DElist[MainCtrlPos].GenPower, Power - HeatingPower * double(Heating)); + auto power = Power; + if( true == Heating ) { power -= HeatingPower; } + if( power < 0.0 ) { power = 0.0; } + tmp = std::min( DElist[ MainCtrlPos ].GenPower, power );// 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 * double(Heating)) / + (Vhyp * power / DElist[MainCtrlPosNo].GenPower)) // czy na czesci prostej, czy na hiperboli Ft = (Ftmax - ((Ftmax - 1000.0 * DElist[MainCtrlPosNo].GenPower / (Vhyp + Vadd)) * @@ -4455,7 +4456,7 @@ double TMoverParameters::TractionForce(double dt) case ElectricInductionMotor: { - if ((Mains)) // nie wchodziæ w funkcjê bez potrzeby + if ((Mains)) // nie wchodziæ w funkcjê bez potrzeby if ((abs(Voltage) < EnginePowerSource.CollectorParameters.MinV) || (abs(Voltage) > EnginePowerSource.CollectorParameters.MaxV + 200)) { @@ -4522,7 +4523,7 @@ double TMoverParameters::TractionForce(double dt) // if SlippingWheels then begin PosRatio:=0; tmp:=10; SandDoseOn; // end;//przeciwposlizg - // if(Flat)then //PRZECIWPOŒLIZG + // if(Flat)then //PRZECIWPOÅ’LIZG dmoment = eimv[eimv_Fful]; // else // dmoment:=eimc[eimc_p_F0]*0.99; @@ -4550,7 +4551,7 @@ double TMoverParameters::TractionForce(double dt) dizel_fill += Max0R(Min0R(PosRatio - dizel_fill, 0.1), -0.1) * 2 * (tmp /*2{+4*byte(PosRatio 0) && (CabNo == 0) && (EngineType == ElectricSeriesMotor)) { if (SetFlag(DamageFlag, -dtrain_engine)) @@ -4834,7 +4835,7 @@ bool TMoverParameters::CutOffEngine(void) // ************************************************************************************************* // Q: 20160713 -// Prze³¹czenie wysoki / niski pr¹d rozruchu +// Prze³¹czenie wysoki / niski pr¹d rozruchu // ************************************************************************************************* bool TMoverParameters::MaxCurrentSwitch(bool State) { @@ -4865,7 +4866,7 @@ bool TMoverParameters::MaxCurrentSwitch(bool State) // ************************************************************************************************* // Q: 20160713 -// Prze³¹czenie wysoki / niski pr¹d rozruchu automatycznego +// Prze³¹czenie wysoki / niski pr¹d rozruchu automatycznego // ************************************************************************************************* bool TMoverParameters::MinCurrentSwitch(bool State) { @@ -4892,7 +4893,7 @@ bool TMoverParameters::MinCurrentSwitch(bool State) // ************************************************************************************************* // Q: 20160713 -// Sprawdzenie wskaŸnika jazdy na oporach +// Sprawdzenie wskaŸnika jazdy na oporach // ************************************************************************************************* bool TMoverParameters::ResistorsFlagCheck(void) { @@ -4912,7 +4913,7 @@ bool TMoverParameters::ResistorsFlagCheck(void) // ************************************************************************************************* // Q: 20160713 -// W³¹czenie / wy³¹czenie automatycznego rozruchu +// W³¹czenie / wy³¹czenie automatycznego rozruchu // ************************************************************************************************* bool TMoverParameters::AutoRelaySwitch(bool State) { @@ -4931,7 +4932,7 @@ bool TMoverParameters::AutoRelaySwitch(bool State) // ************************************************************************************************* // Q: 20160724 -// Sprawdzenie warunków pracy automatycznego rozruchu +// Sprawdzenie warunków pracy automatycznego rozruchu // ************************************************************************************************* bool TMoverParameters::AutoRelayCheck(void) @@ -4941,7 +4942,7 @@ bool TMoverParameters::AutoRelayCheck(void) bool ARFASI2 = false; // sprawdzenie wszystkich warunkow (AutoRelayFlag, AutoSwitch, Im 2.1) && (TrainType != dt_EZT)) || @@ -4962,12 +4963,12 @@ bool TMoverParameters::AutoRelayCheck(void) ARFASI = (!AutoRelayFlag) || ((RList[MainCtrlActualPos].AutoSwitch) && (abs(Im) < Imin)) || ((!RList[MainCtrlActualPos].AutoSwitch) && (RList[MainCtrlActualPos].Relay < MainCtrlPos)); // wszystkie warunki w jednym - // brak PSR na tej pozycji dzia³a PSR i pr¹d poni¿ej progu - // na tej pozycji nie dzia³a PSR i pozycja walu ponizej - // chodzi w tym wszystkim o to, ¿eby mo¿na by³o zatrzymaæ rozruch na - // jakiejœ pozycji wpisuj¹c Autoswitch=0 i wymuszaæ - // przejœcie dalej przez danie nastawnika na dalsz¹ pozycjê - tak to do - // tej pory dzia³a³o i na tym siê opiera fizyka ET22-2k + // brak PSR na tej pozycji dzia³a PSR i pr¹d poni¿ej progu + // na tej pozycji nie dzia³a PSR i pozycja walu ponizej + // chodzi w tym wszystkim o to, ¿eby mo¿na by³o zatrzymaæ rozruch na + // jakiejÅ“ pozycji wpisuj¹c Autoswitch=0 i wymuszaæ + // przejÅ“cie dalej przez danie nastawnika na dalsz¹ pozycjê - tak to do + // tej pory dzia³a³o i na tym siê opiera fizyka ET22-2k { if (StLinFlag) { @@ -5001,7 +5002,7 @@ bool TMoverParameters::AutoRelayCheck(void) if (RList[MainCtrlActualPos + 1].Bn > 1) { return false; // nie poprawiamy przy konwersji - // return ARC;// bbylo exit; //Ra: to powoduje, ¿e EN57 nie wy³¹cza siê przy + // return ARC;// bbylo exit; //Ra: to powoduje, ¿e EN57 nie wy³¹cza siê przy // IminLo } // main bez samoczynnego rozruchu @@ -5040,7 +5041,7 @@ bool TMoverParameters::AutoRelayCheck(void) } else ; - else // nie ET22 z wa³em grupowym + else // nie ET22 z wa³em grupowym { MainCtrlActualPos++; OK = true; @@ -5074,7 +5075,7 @@ bool TMoverParameters::AutoRelayCheck(void) } else if (LastRelayTime > CtrlDownDelay) { - if (TrainType != dt_EZT) // tutaj powinien byæ tryb sterowania wa³em + if (TrainType != dt_EZT) // tutaj powinien byæ tryb sterowania wa³em { MainCtrlActualPos--; OK = true; @@ -5198,7 +5199,7 @@ bool TMoverParameters::PantFront(bool State) PF = false; PantFrontStart = 1; SendCtrlToNext("PantFront", 0, CabNo); - //{Ra: nie ma potrzeby opuszczaæ obydwu na raz, jak mozemy ka¿dy osobno + //{Ra: nie ma potrzeby opuszczaæ obydwu na raz, jak mozemy ka¿dy osobno // if (TrainType == dt_EZT) && (ActiveCab == 1) // { // PantRearUp = false; @@ -5253,7 +5254,7 @@ bool TMoverParameters::PantRear(bool State) // ************************************************************************************************* // Q: 20160715 -// Zmienia parametr do którego d¹¿y sprzêg³o +// Zmienia parametr do którego d¹¿y sprzêg³o // ************************************************************************************************* bool TMoverParameters::dizel_EngageSwitch(double state) { @@ -5269,7 +5270,7 @@ bool TMoverParameters::dizel_EngageSwitch(double state) // ************************************************************************************************* // Q: 20160715 -// Zmienia parametr do którego d¹¿y sprzêg³o +// Zmienia parametr do którego d¹¿y sprzêg³o // ************************************************************************************************* bool TMoverParameters::dizel_EngageChange(double dt) { @@ -5292,7 +5293,7 @@ bool TMoverParameters::dizel_EngageChange(double dt) DEC = true; dizel_engage = dizel_engagestate; } - // else OK:=false; //ju¿ jest false + // else OK:=false; //ju¿ jest false } else { @@ -5305,7 +5306,7 @@ bool TMoverParameters::dizel_EngageChange(double dt) // ************************************************************************************************* // Q: 20160715 -// Automatyczna zmiana biegów gdy prêdkoœæ przekroczy wide³ki +// Automatyczna zmiana biegów gdy prêdkoϾ przekroczy wide³ki // ************************************************************************************************* bool TMoverParameters::dizel_AutoGearCheck(void) { @@ -5452,7 +5453,7 @@ double TMoverParameters::dizel_fillcheck(int mcp) // ************************************************************************************************* // Q: 20160715 -// Oblicza moment si³y wytwarzany przez silnik spalinowy +// Oblicza moment si³y wytwarzany przez silnik spalinowy // ************************************************************************************************* double TMoverParameters::dizel_Momentum(double dizel_fill, double n, double dt) { // liczy moment sily wytwarzany przez silnik spalinowy} @@ -5514,61 +5515,61 @@ double TMoverParameters::dizel_Momentum(double dizel_fill, double n, double dt) // ************************************************************************************************* // Q: 20160713 -// Test zakoñczenia za³adunku / roz³adunku +// Test zakoñczenia za³adunku / roz³adunku // ************************************************************************************************* bool TMoverParameters::LoadingDone(double LSpeed, std::string LoadInit) { - // test zakoñczenia za³adunku/roz³adunku + // test zakoñczenia za³adunku/roz³adunku long LoadChange = 0; bool LD = false; // ClearPendingExceptions; // zabezpieczenie dla Trunc() - // LoadingDone:=false; //nie zakoñczone - if (!LoadInit.empty()) // nazwa ³adunku niepusta + // LoadingDone:=false; //nie zakoñczone + if (!LoadInit.empty()) // nazwa ³adunku niepusta { if (Load > MaxLoad) - LoadChange = abs(long(LSpeed * LastLoadChangeTime / 2.0)); // prze³adowanie? + LoadChange = abs(long(LSpeed * LastLoadChangeTime / 2.0)); // prze³adowanie? else LoadChange = abs(long(LSpeed * LastLoadChangeTime)); - if (LSpeed < 0) // gdy roz³adunek + if (LSpeed < 0) // gdy roz³adunek { - LoadStatus = 2; // trwa roz³adunek (w³¹czenie naliczania czasu) - if (LoadChange != 0) // jeœli coœ prze³adowano + LoadStatus = 2; // trwa roz³adunek (w³¹czenie naliczania czasu) + if (LoadChange != 0) // jeÅ“li coÅ“ prze³adowano { - LastLoadChangeTime = 0; // naliczony czas zosta³ zu¿yty - Load -= LoadChange; // zmniejszenie iloœci ³adunku + LastLoadChangeTime = 0; // naliczony czas zosta³ zu¿yty + Load -= LoadChange; // zmniejszenie iloÅ“ci ³adunku CommandIn.Value1 = - CommandIn.Value1 - LoadChange; // zmniejszenie iloœci do roz³adowania + CommandIn.Value1 - LoadChange; // zmniejszenie iloÅ“ci do roz³adowania if (Load < 0) - Load = 0; //³adunek nie mo¿e byæ ujemny - if ((Load == 0) || (CommandIn.Value1 < 0)) // pusto lub roz³adowano ¿¹dan¹ iloœæ - LoadStatus = 4; // skoñczony roz³adunek + Load = 0; //³adunek nie mo¿e byæ ujemny + if ((Load == 0) || (CommandIn.Value1 < 0)) // pusto lub roz³adowano ¿¹dan¹ iloϾ + LoadStatus = 4; // skoñczony roz³adunek if (Load == 0) - LoadType.clear(); // jak nic nie ma, to nie ma te¿ nazwy + LoadType.clear(); // jak nic nie ma, to nie ma te¿ nazwy } } - else if (LSpeed > 0) // gdy za³adunek + else if (LSpeed > 0) // gdy za³adunek { - LoadStatus = 1; // trwa za³adunek (w³¹czenie naliczania czasu) - if (LoadChange != 0) // jeœli coœ prze³adowano + LoadStatus = 1; // trwa za³adunek (w³¹czenie naliczania czasu) + if (LoadChange != 0) // jeÅ“li coÅ“ prze³adowano { - LastLoadChangeTime = 0; // naliczony czas zosta³ zu¿yty + LastLoadChangeTime = 0; // naliczony czas zosta³ zu¿yty LoadType = LoadInit; // nazwa - Load += LoadChange; // zwiêkszenie ³adunku + Load += LoadChange; // zwiêkszenie ³adunku CommandIn.Value1 = CommandIn.Value1 - LoadChange; if ((Load >= MaxLoad * (1.0 + OverLoadFactor)) || (CommandIn.Value1 < 0)) - LoadStatus = 4; // skoñczony za³adunek + LoadStatus = 4; // skoñczony za³adunek } } else - LoadStatus = 4; // zerowa prêdkoœæ zmiany, to koniec + LoadStatus = 4; // zerowa prêdkoϾ zmiany, to koniec } return (LoadStatus >= 4); } // ************************************************************************************************* // Q: 20160713 -// Zwraca informacje o dzia³aj¹cej blokadzie drzwi +// Zwraca informacje o dzia³aj¹cej blokadzie drzwi // ************************************************************************************************* bool TMoverParameters::DoorBlockedFlag(void) { @@ -5647,7 +5648,7 @@ bool TMoverParameters::DoorRight(bool State) // ************************************************************************************************* // Q: 20160713 -// Przesuwa pojazd o podan¹ wartoœæ w bok wzglêdem toru (dla samochodów) +// Przesuwa pojazd o podan¹ wartoϾ w bok wzglêdem toru (dla samochodów) // ************************************************************************************************* bool TMoverParameters::ChangeOffsetH(double DeltaOffset) { @@ -5657,7 +5658,7 @@ bool TMoverParameters::ChangeOffsetH(double DeltaOffset) OffsetTrackH = OffsetTrackH + DeltaOffset; // if (abs(OffsetTrackH) > (RunningTrack.Width / 1.95 - TrackW / 2.0)) if (abs(OffsetTrackH) > - (0.5 * (RunningTrack.Width - Dim.W) - 0.05)) // Ra: mo¿e pó³ pojazdu od brzegu? + (0.5 * (RunningTrack.Width - Dim.W) - 0.05)) // Ra: mo¿e pó³ pojazdu od brzegu? COH = false; // kola na granicy drogi else COH = true; @@ -5670,7 +5671,7 @@ bool TMoverParameters::ChangeOffsetH(double DeltaOffset) // ************************************************************************************************* // Q: 20160713 -// Testuje zmienn¹ (narazie tylko 0) i na podstawie uszkodzenia zwraca informacjê tekstow¹ +// Testuje zmienn¹ (narazie tylko 0) i na podstawie uszkodzenia zwraca informacjê tekstow¹ // ************************************************************************************************* std::string TMoverParameters::EngineDescription(int what) { @@ -5714,9 +5715,11 @@ std::string TMoverParameters::EngineDescription(int what) if (outstr == "") outstr = "OK!"; } - }; + break; + } default: outstr = "Invalid qualifier"; + break; } return outstr; } @@ -5755,9 +5758,10 @@ std::string vS; int vI; double vD; bool startBPT; -bool startMPT; +bool startMPT, startMPT0; bool startRLIST; -int MPTLINE, RLISTLINE, BPTLINE; +bool startDLIST, startFFLIST, startWWLIST; +int MPTLINE, RLISTLINE, BPTLINE, DLISTLINE, FFLISTLINE, WWLISTLINE; std::vector x; std::string aCategory, aType; @@ -5796,8 +5800,10 @@ double jMaxVoltage, jMaxCurrent, jIntR, jMinH, jMaxH, jCSW, jMinV, jMaxV, jMinPr int jCollectorsNo; std::string kEngineType, kTrans; -double kWindingRes, knmax, kVolt; +double kVolt, kWindingRes, kNMin, kNMax, kNMaxCutoff, kAIM, kshuntmode; // int kVolt; +// motorparamtable +double kMinVelFullEngage, kEngageDia, kEngageMaxForce, kEngageFriction; double lCircuitRes; int lImaxLo, lImaxHi, lIminLo, lIminHi; @@ -5933,80 +5939,146 @@ int s2NNW(std::string s) // Q: 20160717 // ************************************************************************************************* // parsowanie Motor Param Table -bool TMoverParameters::readMPT(int ln, std::string line) -{ - // bl, mfi, mIsat, mfi0, fi, Isat, fi0 - bool as; - int bl; - startMPT = true; +bool TMoverParameters::readMPT0( std::string const &line ) { - if (ln > 0) // 0 to nazwa sekcji - MotorParamTable0: - { - //--WriteLog("MPT: " + xline); - x = Split(line); - - int s = x.size(); - if ( (s < 7) - || (s > 8) ) - { - WriteLog( "Read MPT: wrong number of arguments (" + std::to_string( s ) + ") in line " + std::to_string( ln - 1 ) ); - MPTLINE++; - return false; - } - - for(int i = 0; i < s; i++) - x[i] = TrimSpace(x[i]); - - bl = atoi(x[0].c_str()); // numer pozycji - - MotorParam[bl].mfi = atof(x[1].c_str()); - MotorParam[bl].mIsat = atof(x[2].c_str()); - MotorParam[bl].mfi0 = atof(x[3].c_str()); - MotorParam[bl].fi = atof(x[4].c_str()); - MotorParam[bl].Isat = atof(x[5].c_str()); - MotorParam[bl].fi0 = atof(x[6].c_str()); - MotorParam[bl].AutoSwitch = s == 8 ? atoi(x[7].c_str()): false; - - //--WriteLog(":::: " + p0 + "," + p1 + "," + p2 + "," + p3 + "," + p4 + "," + p5 + "," + - //p6); + cParser parser( line ); + if( false == parser.getTokens( 7, false ) ) { + WriteLog( "Read MPT0: arguments missing in line " + std::to_string( MPTLINE ) ); + return false; + } + int idx = 0; // numer pozycji + parser >> idx; + parser + >> MotorParam[ idx ].mfi + >> MotorParam[ idx ].mIsat + >> MotorParam[ idx ].mfi0 + >> MotorParam[ idx ].fi + >> MotorParam[ idx ].Isat + >> MotorParam[ idx ].fi0; + if( true == parser.getTokens( 1, false ) ) { + int autoswitch; + parser >> autoswitch; + MotorParam[ idx ].AutoSwitch = ( autoswitch == 1 ); + } + else { + MotorParam[ idx ].AutoSwitch = false; } - MPTLINE++; return true; } +bool TMoverParameters::readMPT( std::string const &line ) { + ++MPTLINE; + + switch( EngineDecode( kEngineType ) ) { + + case ElectricSeriesMotor: { return readMPTElectricSeries( line ); } + case DieselElectric: { return readMPTDieselElectric( line ); } + case DieselEngine: { return readMPTDieselEngine( line ); } + default: { return false; } + } +} + +bool TMoverParameters::readMPTElectricSeries(std::string const &line) { + + cParser parser( line ); + if( false == parser.getTokens( 5, false ) ) { + WriteLog( "Read MPT: arguments missing in line " + std::to_string( MPTLINE ) ); + return false; + } + int idx = 0; // numer pozycji + parser >> idx; + parser + >> MotorParam[ idx ].mfi + >> MotorParam[ idx ].mIsat + >> MotorParam[ idx ].fi + >> MotorParam[ idx ].Isat; + if( true == parser.getTokens( 1, false ) ) { + int autoswitch; + parser >> autoswitch; + MotorParam[ idx ].AutoSwitch = (autoswitch == 1); } + else{ + MotorParam[ idx ].AutoSwitch = false; + } + return true; +} + +bool TMoverParameters::readMPTDieselElectric( std::string const &line ) { + + cParser parser( line ); + if( false == parser.getTokens( 7, false ) ) { + WriteLog( "Read MPT: arguments missing in line " + std::to_string( MPTLINE ) ); + return false; + } + int idx = 0; // numer pozycji + parser >> idx; + parser + >> MotorParam[ idx ].mfi + >> MotorParam[ idx ].mIsat + >> MotorParam[ idx ].fi + >> MotorParam[ idx ].Isat + >> MPTRelay[ idx ].Iup + >> MPTRelay[ idx ].Idown; + + return true; +} + +bool TMoverParameters::readMPTDieselEngine( std::string const &line ) { + + cParser parser( line ); + if( false == parser.getTokens( 4, false ) ) { + WriteLog( "Read MPT: arguments missing in line " + std::to_string( MPTLINE ) ); + return false; + } + int idx = 0; // numer pozycji + parser >> idx; + parser + >> MotorParam[ idx ].mIsat + >> MotorParam[ idx ].fi + >> MotorParam[ idx ].mfi; + if( true == parser.getTokens( 1, false ) ) { + int autoswitch; + parser >> autoswitch; + MotorParam[ idx ].AutoSwitch = ( autoswitch == 1 ); + } + else { + MotorParam[ idx ].AutoSwitch = false; + } + return true; +} + + // ************************************************************************************************* // Q: 20160718 // ************************************************************************************************* // parsowanie RList -bool TMoverParameters::readRLIST(int ln, std::string line) +bool TMoverParameters::readRList(int const ln, std::string const &line) { - char *xxx = nullptr; startRLIST = true; if (ln > 0) // 0 to nazwa sekcji - RList: { // WriteLog("RLIST: " + xline); +/* line = Tab2Sp(line); // zamieniamy taby na spacje (ile tabow tyle spacji bedzie) xxx = TrimAndReduceSpaces(line.c_str()); // konwertujemy na *char i // ograniczamy spacje pomiedzy // parametrami do jednej - - x = Split(xxx); // split je wskaznik na char jak i std::string +*/ + x = Split(line); // split je wskaznik na char jak i std::string int s = x.size(); if ( ( s < 5 ) || ( s > 6 )) { WriteLog("Read RLIST: wrong number of arguments (" + std::to_string(s) + ") in line " + std::to_string(ln - 1)); - delete[] xxx; RLISTLINE++; return false; } - +/* for (int i = 0; i < s; i++) x[i] = TrimSpace(x[i]); - +*/ int k = ln - 1; RlistSize = (mSize); @@ -6018,10 +6090,9 @@ bool TMoverParameters::readRLIST(int ln, std::string line) RList[k].Bn = atoi(x[2].c_str()); // int RList[k].Mn = atoi(x[3].c_str()); // int RList[k].AutoSwitch = (bool)atoi(x[4].c_str()); // p4.ToInt(); - RList[k].ScndAct = s == 6 ? atoi(x[5].c_str()) : 0; //jeœli ma boczniki w nastawniku + RList[k].ScndAct = s == 6 ? atoi(x[5].c_str()) : 0; //jeÅ“li ma boczniki w nastawniku //--WriteLog("RLIST: " + p0 + "," + p1 + "," + p2 + "," + p3 + "," + p4); } - delete[] xxx; RLISTLINE++; return true; } @@ -6030,51 +6101,119 @@ bool TMoverParameters::readRLIST(int ln, std::string line) // Q: 20160721 // ************************************************************************************************* // parsowanie Brake Param Table -bool TMoverParameters::readBPT(int ln, std::string line) +bool TMoverParameters::readBPT(/*int const ln,*/ std::string const &line) { - char *xxx = nullptr; - startBPT = true; - int k; - - if (ln > 0) // 0 to nazwa sekcji - Cntrl. - po niej jest tablica hamulcow + cParser parser( line ); + if( false == parser.getTokens( 5, false ) ) { - // WriteLog("BPT: " + xline); - line = Tab2Sp(line); - xxx = TrimAndReduceSpaces(line.c_str()); - x = Split(xxx); - - int s = x.size(); - if (s != 5) - { - WriteLog( "Read BPT: wrong number of arguments (" + std::to_string( s ) + ") in line " + std::to_string( ln - 1 ) ); - delete[] xxx; - return false; - } - - for (int i = 0; i < s; i++) - x[i] = TrimSpace(x[i]); - - k = atoi(x[0].c_str()); - BrakePressureTable[k].PipePressureVal = atof(x[1].c_str()); - BrakePressureTable[k].BrakePressureVal = atof(x[2].c_str()); - BrakePressureTable[k].FlowSpeedVal = atof(x[3].c_str()); - if (x[4] == "Pneumatic") - BrakePressureTable[k].BrakeType = Pneumatic; - else if (x[4] == "ElectroPneumatic") - BrakePressureTable[k].BrakeType = ElectroPneumatic; - else - BrakePressureTable[k].BrakeType = Individual; - - // WriteLog("BPTx: " + p0 + "," + p1 + "," + p2 + "," + p3 + "," + p4); - //WriteLog("BPTk: " + to_string(k) + "," + to_string(BrakePressureTable[k].PipePressureVal) + - // "," + to_string(BrakePressureTable[k].BrakePressureVal) + "," + - // to_string(BrakePressureTable[k].FlowSpeedVal) + "," + p4); - - if (k == gBCPN) - startBPT = false; + WriteLog( "Read BPT: arguments missing in line " + std::to_string( BPTLINE + 1 ) ); + return false; } - delete[] xxx; - BPTLINE++; + ++BPTLINE; + std::string braketype; int idx = 0; + parser >> idx; + parser + >> BrakePressureTable[ idx ].PipePressureVal + >> BrakePressureTable[ idx ].BrakePressureVal + >> BrakePressureTable[ idx ].FlowSpeedVal + >> braketype; + if( braketype == "Pneumatic" ) { BrakePressureTable[ idx ].BrakeType = Pneumatic; } + else if( braketype == "ElectroPneumatic" ) { BrakePressureTable[ idx ].BrakeType = ElectroPneumatic; } + else { BrakePressureTable[ idx ].BrakeType = Individual; } +/* + int k = atoi( x[ 0 ].c_str() ); + BrakePressureTable[k].PipePressureVal = atof(x[1].c_str()); + BrakePressureTable[k].BrakePressureVal = atof(x[2].c_str()); + BrakePressureTable[k].FlowSpeedVal = atof(x[3].c_str()); + if (x[4] == "Pneumatic") + BrakePressureTable[k].BrakeType = Pneumatic; + else if (x[4] == "ElectroPneumatic") + BrakePressureTable[k].BrakeType = ElectroPneumatic; + else + BrakePressureTable[k].BrakeType = Individual; +*/ + // WriteLog("BPTx: " + p0 + "," + p1 + "," + p2 + "," + p3 + "," + p4); + //WriteLog("BPTk: " + to_string(k) + "," + to_string(BrakePressureTable[k].PipePressureVal) + + // "," + to_string(BrakePressureTable[k].BrakePressureVal) + "," + + // to_string(BrakePressureTable[k].FlowSpeedVal) + "," + p4); + + return true; +} + +bool TMoverParameters::readDList( std::string const &line ) { + + cParser parser( line ); + parser.getTokens( 4, false ); +/* warning disabled until i know what to expect ._. + if( false == parser.getTokens( 4, false ) ) { + WriteLog( "Read DList: arguments missing in line " + std::to_string( DLISTLINE + 1 ) ); + return false; + } +*/ + ++DLISTLINE; + int idx = 0; + parser >> idx; + if( idx >= sizeof( DElist ) ) { + WriteLog( "Read DList: number of entries exceeded capacity of the data table" ); + return false; + } + parser + >> RList[ idx ].Relay + >> RList[ idx ].R + >> RList[ idx ].Mn; + + return true; +} + +bool TMoverParameters::readFFList( std::string const &line ) { + + cParser parser( line ); + if( false == parser.getTokens( 2, false ) ) { + WriteLog( "Read FList: arguments missing in line " + std::to_string( FFLISTLINE + 1 ) ); + return false; + } + int idx = FFLISTLINE++; + if( idx >= sizeof( DElist ) ) { + WriteLog( "Read FList: number of entries exceeded capacity of the data table" ); + return false; + } + parser + >> DElist[ idx ].RPM + >> DElist[ idx ].GenPower; + + return true; +} + +// parsowanie WWList +bool TMoverParameters::readWWList( std::string const &line ) { + + cParser parser( line ); + if( false == parser.getTokens( 4, false ) ) { + WriteLog( "Read WWList: arguments missing in line " + std::to_string( WWLISTLINE + 1 ) ); + return false; + } + int idx = WWLISTLINE++; + if( idx >= sizeof( DElist ) ) { + WriteLog( "Read WWList: number of entries exceeded capacity of the data table" ); + return false; + } + parser + >> DElist[ idx ].RPM + >> DElist[ idx ].GenPower + >> DElist[ idx ].Umax + >> DElist[ idx ].Imax; + + if( true == parser.getTokens( 3, false ) ) { + // optional parameters for shunt mode + parser + >> SST[ idx ].Umin + >> SST[ idx ].Umax + >> SST[ idx ].Pmax; + + SST[ idx ].Pmin = std::sqrt( std::pow( SST[ idx ].Umin, 2 ) / 47.6 ); + SST[ idx ].Pmax = std::min( SST[ idx ].Pmax, std::pow( SST[ idx ].Umax, 2 ) / 47.6 ); + } + return true; } @@ -6260,28 +6399,28 @@ void TMoverParameters::PowerParamDecode(std::string lines, std::string prefix, PowerParamDecode.CollectorParameters.CollectorsNo = (jCollectorsNo); PowerParamDecode.CollectorParameters.MinH = (jMinH); PowerParamDecode.CollectorParameters.MaxH = (jMaxH); - PowerParamDecode.CollectorParameters.CSW = (jCSW); // szerokoœæ czêœci roboczej + PowerParamDecode.CollectorParameters.CSW = (jCSW); // szerokoϾ czêœci roboczej PowerParamDecode.CollectorParameters.MaxV = (jMaxVoltage); - // s:=jMinV; //napiêcie roz³¹czaj¹ce WS + // s:=jMinV; //napiêcie roz³¹czaj¹ce WS if (jMinV == 0) PowerParamDecode.CollectorParameters.MinV = 0.5 * PowerParamDecode.CollectorParameters.MaxV; // gdyby parametr nie podany else PowerParamDecode.CollectorParameters.MinV = (jMinV); - //-s:=ExtractKeyWord(lines,'InsetV='); //napiêcie wymagane do za³¹czenia WS + //-s:=ExtractKeyWord(lines,'InsetV='); //napiêcie wymagane do za³¹czenia WS //-if s='' then //- InsetV:=0.6*MaxV //gdyby parametr nie podany //-else //- InsetV:=s2rE(DUE(s)); - // s:=ExtractKeyWord(lines,'MinPress='); //ciœnienie roz³¹czaj¹ce WS + // s:=ExtractKeyWord(lines,'MinPress='); //ciÅ“nienie roz³¹czaj¹ce WS if (jMinPress == 0) - PowerParamDecode.CollectorParameters.MinPress = 2.0; // domyœlnie 2 bary do za³¹czenia + PowerParamDecode.CollectorParameters.MinPress = 2.0; // domyÅ“lnie 2 bary do za³¹czenia // WS else PowerParamDecode.CollectorParameters.MinPress = (jMinPress); - // s:=ExtractKeyWord(lines,'MaxPress='); //maksymalne ciœnienie za reduktorem + // s:=ExtractKeyWord(lines,'MaxPress='); //maksymalne ciÅ“nienie za reduktorem if (jMaxPress == 0) PowerParamDecode.CollectorParameters.MaxPress = 5.0 + 0.001 * (Random(50) - Random(50)); else @@ -6333,9 +6472,19 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) OKFlag = 0; LineCount = 0; ConversionError = 666; + startBPT = false; BPTLINE = 0; + startMPT = false; + startMPT0 = false; MPTLINE = 0; + startRLIST = false; RLISTLINE = 0; + startDLIST = false; + startFFLIST = false; + startWWLIST = false; + WWLISTLINE = 0; + DLISTLINE = 0; + FFLISTLINE = 0; Mass = 0; file = chkpath + TypeName + ".fiz"; @@ -6353,7 +6502,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) return false; } - bool secBPT = false, secMotorParamTable0 = false, secPower = false, secEngine = false, + bool secBPT = false, secMotorParamTable = false, secPower = false, secEngine = false, secParam = false, secLoad = false, secDimensions = false, secWheels = false, secBrake = false, secBuffCoupl = false, secCntrl = false, secSecurity = false, secLight = false, secCircuit = false, secRList = false, @@ -6376,9 +6525,11 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) startBPT = false; continue; } + // checking if table parsing should be switched off goes first... if( issection( "END-MPT" ) ) { startBPT = false; startMPT = false; + startMPT0 = false; continue; } if( issection( "END-RL" ) ) { @@ -6386,21 +6537,36 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) startRLIST = false; continue; } - + if( issection( "END-DL" ) ) { + startBPT = false; + startDLIST = false; + continue; + } + if( issection( "endff" ) ) { + startBPT = false; + startFFLIST = false; + continue; + } + if( issection( "END-WWL" ) ) { + startBPT = false; + startWWLIST = false; + continue; + } + // ...then all recognized sections... if (issection("Param.")) { startBPT = false; secParam = true; SetFlag(OKFlag, param_ok); - getkeyval( aCategory, "Category", xline ); - getkeyval( aType, "Type", xline ); aType = ToUpper( aType ); - getkeyval( aMass, "M", xline ); - getkeyval( aMred, "Mred", xline ); - getkeyval( aVmax, "Vmax", xline ); - getkeyval( aPWR, "PWR", xline ); - getkeyval( aSandCap, "SandCap", xline ); - getkeyval( aHeatingP, "HeatingP", xline ); - getkeyval( aLightP, "LightP", xline ); + getkeyval( aCategory, "Category", xline, "none" ); + getkeyval( aType, "Type", xline, "none" ); aType = ToUpper( aType ); + getkeyval( aMass, "M", xline, "0" ); + getkeyval( aMred, "Mred", xline, "0" ); + getkeyval( aVmax, "Vmax", xline, "0" ); + getkeyval( aPWR, "PWR", xline, "0" ); + getkeyval( aSandCap, "SandCap", xline, "0" ); + getkeyval( aHeatingP, "HeatingP", xline, "0" ); + getkeyval( aLightP, "LightP", xline, "0" ); // TODO: switch other sections to the new getkeyval() code /* aCategory = getkeyval(1, "Category"); @@ -6429,6 +6595,12 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) continue; } + if( issection( "Doors:" ) ) { + + LoadFIZ_Doors( xline ); + continue; + } + if (issection("Dimensions:")) { startBPT = false; @@ -6562,8 +6734,48 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) kTrans = (getkeyval(1, "Trans")); kVolt = atof(getkeyval(3, "Volt").c_str()); kWindingRes = atof(getkeyval(3, "WindingRes").c_str()); - knmax = atof(getkeyval(3, "nmax").c_str()); - continue; + kNMax = atof(getkeyval(3, "nmax").c_str()); + // new (diesel) engine parameters follow + // TODO: check if the entries are correct. + // TODO, TBD: possibly read the values into module variables first, instead of injecting them directly into the engine? + getkeyval( kshuntmode, "ShuntMode", xline, "0.0" ); + int flat; + getkeyval( flat, "Flat", xline, "0" ); Flat = ( flat == 1 ); + // diesel-electric + getkeyval( Ftmax, "Ftmax", xline, "" ); + getkeyval( Vhyp, "Vhyp", xline, "" ); + getkeyval( Vadd, "Vadd", xline, "" ); + getkeyval( PowerCorRatio, "Cr", xline, "" ); + getkeyval( AutoRelayType, "RelayType", xline, "" ); + // diesel + getkeyval( dizel_nmin, "nmin", xline, "" ); + getkeyval( dizel_nmax, "nmax", xline, "" ); + getkeyval( dizel_nmax_cutoff, "nmax_cutoff", xline, "0.0" ); + getkeyval( dizel_AIM, "AIM", xline, "1.0" ); + // electric induction + getkeyval( eimc[ eimc_s_dfic ], "dfic", xline, "" ); + getkeyval( eimc[ eimc_s_dfmax ], "dfmax", xline, "" ); + getkeyval( eimc[ eimc_s_p ], "p", xline, "" ); + getkeyval( eimc[ eimc_s_cfu ], "cfu", xline, "" ); + getkeyval( eimc[ eimc_s_cim ], "cim", xline, "" ); + getkeyval( eimc[ eimc_s_icif ], "icif", xline, "" ); + getkeyval( eimc[ eimc_f_Uzmax ], "Uzmax", xline, "" ); + getkeyval( eimc[ eimc_f_Uzh ], "Uzh", xline, "" ); + getkeyval( eimc[ eimc_f_DU ], "DU", xline, "" ); + getkeyval( eimc[ eimc_f_I0 ], "I0", xline, "" ); + getkeyval( eimc[ eimc_f_cfu ], "fcfu", xline, "" ); + getkeyval( eimc[ eimc_p_F0 ], "F0", xline, "" ); + getkeyval( eimc[ eimc_p_a1 ], "a1", xline, "" ); + getkeyval( eimc[ eimc_p_Pmax ], "Pmax", xline, "" ); + getkeyval( eimc[ eimc_p_Fh ], "Fh", xline, "" ); + getkeyval( eimc[ eimc_p_Ph ], "Ph", xline, "" ); + getkeyval( eimc[ eimc_p_Vh0 ], "Vh0", xline, "" ); + getkeyval( eimc[ eimc_p_Vh1 ], "Vh1", xline, "" ); + getkeyval( eimc[ eimc_p_Imax ], "Imax", xline, "" ); + getkeyval( eimc[ eimc_p_abed ], "abed", xline, "" ); + getkeyval( eimc[ eimc_p_eped ], "edep", xline, "" ); + + continue; } if (issection("Circuit:")) @@ -6592,7 +6804,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) if( issection( "RList:" ) || startRLIST ) { startBPT = false; secRList = true; - readRLIST( RLISTLINE, xline ); + readRList( RLISTLINE, xline ); continue; } @@ -6600,6 +6812,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) { startBPT = false; secDList = true; + startDLIST = true; DLISTLINE = 0; nMmax = atof(getkeyval(3, "Mmax").c_str()); nnMmax = atof(getkeyval(3, "nMmax").c_str()); nMnmax = atof(getkeyval(3, "Mnmax").c_str()); @@ -6607,22 +6820,32 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) nnominalfill = atof(getkeyval(3, "nominalfill").c_str()); nMstand = atof(getkeyval(3, "Mstand").c_str()); nSize = atoi(getkeyval(2, "Size").c_str()); + + if( kEngineType == "DieselEngine" ) { + // TODO: does the diesel really need duplicate of common variables :x + // TODO, TBD: pass the values through module variables instead of injecting them directly? + getkeyval( dizel_Mmax, "Mmax", xline, "" ); + getkeyval( dizel_nMmax, "nMmax", xline, "" ); + getkeyval( dizel_Mnmax, "Mnmax", xline, "" ); + getkeyval( dizel_nmax, "nmax", xline, "" ); + getkeyval( dizel_nominalfill, "nominalfill", xline, "" ); + getkeyval( dizel_Mstand, "Mstand", xline, "" ); + } continue; } - if (issection("WWList:")) - { - startBPT = false; - secWWList = true; - getkeyval(2, "Size"); - continue; + if( issection( "ffList:" ) ) { + startBPT = false; + secffList = true; + startFFLIST = true; FFLISTLINE = 0; + continue; } - if (issection("ffList:")) + if( issection( "WWList:" ) ) { startBPT = false; - secffList = true; - getkeyval(2, "Size"); + secWWList = true; + startWWLIST = true; WWLISTLINE = 0; continue; } @@ -6630,21 +6853,36 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) { startBPT = false; secTurboPos = true; - getkeyval(2, "TurboPos"); + getkeyval( TurboTest, "TurboPos", xline, "" ); continue; } - if (issection("MotorParamTable0:") || startMPT) + if (issection("MotorParamTable0:") ) { startBPT = false; - secMotorParamTable0 = true; - readMPT(MPTLINE, xline); + startMPT0 = true; MPTLINE = 0; + secMotorParamTable = true; continue; } + if( issection( "MotorParamTable:" ) ) { + // diesel engine variant + startBPT = false; + startMPT = true; MPTLINE = 0; + secMotorParamTable = true; + // variables + if( kEngineType == "DieselEngine" ) { + getkeyval( dizel_minVelfullengage, "minVelfullengage", xline, "" ); + getkeyval( dizel_engageDia, "engageDia", xline, "" ); + getkeyval( dizel_engageMaxForce, "engageMaxForce", xline, "" ); + getkeyval( dizel_engagefriction, "engagefriction", xline, "" ); + } + continue; + } + if( issection( "Cntrl." ) ) { - startBPT = false; - secCntrl = true; + startBPT = true; BPTLINE = 0; + secCntrl = true; gBrakeSystem = ( getkeyval( 1, "BrakeSystem" ) ); gBCPN = atoi( getkeyval( 2, "BCPN" ).c_str() ); gBDelay1 = atoi( getkeyval( 2, "BDelay1" ).c_str() ); @@ -6669,16 +6907,35 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) gBrakeHandle = ( getkeyval( 1, "BrakeHandle" ) ); gLocBrakeHandle = ( getkeyval( 1, "LocBrakeHandle" ) ); gMaxBPMass = atof( getkeyval( 3, "MaxBPMass" ).c_str() ); - // don't break yet, init (optional) data table + continue; } - - if( issection( "Cntrl." ) || startBPT ) { - secBPT = true; - if( gBCPN > 0 ) - readBPT( BPTLINE, xline ); // np wagony nie maja BPT - continue; - } - } // is hash + // ...and finally, table parsers. + // NOTE: once table parsing is enabled it lasts until switched off, when another section is recognized + if( true == startBPT ) { + readBPT( xline ); + continue; + } + if( true == startMPT ) { + readMPT( xline ); + continue; + } + if( true == startMPT0 ) { + readMPT0( xline ); + continue; + } + if( true == startDLIST ) { + readDList( xline ); + continue; + } + if( true == startFFLIST ) { + readFFList( xline ); + continue; + } + if( true == startWWLIST ) { + readWWList( xline ); + continue; + } + } // is hash } // while line in.close(); // Sprawdzenie poprawnosci wczytanych parametrow @@ -6730,7 +6987,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) IminHi = 2; Imin = 1; } - else // wirtualne wartoœci dla rozrz¹dczego + else // wirtualne wartoÅ“ci dla rozrz¹dczego if (aType == "ET41") TrainType = dt_ET41; else if (aType == "ET42") @@ -6765,9 +7022,9 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) if (cFloor == -1) { if (Dim.H <= 2.0) - Floor = Dim.H; // gdyby nie by³o parametru, lepsze to ni¿ zero + Floor = Dim.H; // gdyby nie by³o parametru, lepsze to ni¿ zero else - Floor = 0.0; // zgodnoœæ wsteczna + Floor = 0.0; // zgodnoϾ wsteczna } else Floor = cFloor; @@ -6786,12 +7043,12 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) ADist = dAd; BDist = dBd; - if (WheelDiameterL == 0.0) // gdyby nie by³o parametru... - WheelDiameterL = WheelDiameter; //... lepsze to ni¿ zero + if (WheelDiameterL == 0.0) // gdyby nie by³o parametru... + WheelDiameterL = WheelDiameter; //... lepsze to ni¿ zero else WheelDiameterL = dDl; - if (WheelDiameterT == 0.0) // gdyby nie by³o parametru... - WheelDiameterT = WheelDiameter; //... lepsze to ni¿ zero + if (WheelDiameterT == 0.0) // gdyby nie by³o parametru... + WheelDiameterT = WheelDiameter; //... lepsze to ni¿ zero else WheelDiameterT = dDt; @@ -6903,7 +7160,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) CntrlPipePress = eHiPP; else CntrlPipePress = - 5.0 + 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) @@ -6927,10 +7184,10 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) CompressorPower = 3; else if (eCompressorPower == "Coupler1") CompressorPower = 4; - else // w³¹czana w silnikowym EZT z przodu + else // w³¹czana w silnikowym EZT z przodu if (eCompressorPower == "Coupler2") CompressorPower = 5; - else // w³¹czana w silnikowym EZT z ty³u + else // w³¹czana w silnikowym EZT z ty³u if (eCompressorPower == "Main") CompressorPower = 0; @@ -7170,7 +7427,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) if (hAwareMinSpeed > 0) SecuritySystem.AwareMinSpeed = hAwareMinSpeed; else - SecuritySystem.AwareMinSpeed = 0.1 * Vmax; // domyœlnie 10% Vmax + SecuritySystem.AwareMinSpeed = 0.1 * Vmax; // domyÅ“lnie 10% Vmax if (hSoundSignalDelay > 0) SecuritySystem.SoundSignalDelay = hSoundSignalDelay; if (hEmergencyBrakeDelay > 0) @@ -7196,7 +7453,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) if ((EnginePowerSource.SourceType == Generator) && (EnginePowerSource.GeneratorEngine == WheelsDriven)) ConversionError = -666; // perpetuum mobile?} - if (Power == 0) // jeœli nie ma mocy, np. rozrz¹dcze EZT + if (Power == 0) // jeÅ“li nie ma mocy, np. rozrz¹dcze EZT EnginePowerSource.SourceType = NotDefined; // to silnik nie ma zasilania } else @@ -7222,26 +7479,19 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) { EngineType = EngineDecode(kEngineType); - switch (EngineType) - { + if( false == kTrans.empty() ) { + // transmission type. moved here because more than one engine type has this entry + x = Split( kTrans, ':' ); // 18:79 - case ElectricSeriesMotor: - { - NominalVoltage = kVolt; - - x = Split(kTrans, ':'); // 18:79 - - if (x.size() != 2) - { - WriteLog("Wrong transmition definition: " + kTrans); - break; + if( x.size() != 2 ) { + ErrorLog( "Wrong transmition definition: " + kTrans ); } - p0 = TrimSpace(x[0]); - p1 = TrimSpace(x[1]); + p0 = TrimSpace( x[ 0 ] ); + p1 = TrimSpace( x[ 1 ] ); - Transmision.NToothW = atoi(p1.c_str()); - Transmision.NToothM = atoi(p0.c_str()); + Transmision.NToothW = atoi( p1.c_str() ); + Transmision.NToothM = atoi( p0.c_str() ); // ToothW to drugi parametr czyli 79 // ToothM to pierwszy czyli 18 @@ -7249,24 +7499,64 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) // WriteLog("trans " + IntToStr(Transmision.NToothW ) + "/" + // IntToStr(Transmision.NToothM )); // if (kTrans != "") - if (Transmision.NToothM > 0) - Transmision.Ratio = double(Transmision.NToothW) / Transmision.NToothM; + if( Transmision.NToothM > 0 ) + Transmision.Ratio = double( Transmision.NToothW ) / Transmision.NToothM; else Transmision.Ratio = 1; - - WindingRes = kWindingRes; - if (WindingRes == 0) - WindingRes = 0.01; - // WriteLog("WindingRes " + FloatToStr(WindingRes)); - - nmax = knmax / 60.0; - // WriteLog("nmax " + FloatToStr(nmax )); } - break; + // engine type specific parameters + switch (EngineType) + { + + case ElectricSeriesMotor: + { + NominalVoltage = kVolt; + + if( kWindingRes != 0.0 ) { WindingRes = kWindingRes; } + else { WindingRes = 0.01; } + // WriteLog("WindingRes " + FloatToStr(WindingRes)); + + nmax = kNMax / 60.0; + // WriteLog("nmax " + FloatToStr(nmax )); + + if( kshuntmode == 1.0 ) { + // shuntmode + ShuntModeAllow = true; + ShuntMode = false; + AnPos = 0.0; + ImaxHi = 2; + ImaxLo = 1; + } + break; + } + + case DieselEngine: { + + dizel_nmin /= 60.0; + dizel_nmax /= 60.0; + dizel_nmax_cutoff /= 60; + // NOTE: dizel_nmax seems to be duplicate of nmax. + // keep an eye on nmax being used in equations associated with DieselEngine + // as temporary work-around for potential errors the 'regular' nmax is also given the matching value here + nmax = dizel_nmax; + + if( kshuntmode > 0.0 ) { + // shuntmode + ShuntModeAllow = true; + ShuntMode = false; + AnPos = kshuntmode; //dodatkowe przeÅ‚ożenie + if( AnPos < 1.0 ) { + //"rozruch wysoki" ma dawać wiÄ™kszÄ… siłę; im wiÄ™ksza liczba, tym wolniej jedzie + AnPos = 1.0 / AnPos; + } + } + + break; + } + } // switch } - kTrans = ""; } // Circuit @@ -7327,6 +7617,47 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) return OK; } // LoadFIZ() +bool TMoverParameters::LoadFIZ_Doors( std::string const &line ) { + + DoorOpenCtrl = 0; + std::string openctrl; getkeyval( openctrl, "OpenCtrl", line, "" ); + if( openctrl == "DriverCtrl" ) { DoorOpenCtrl = 1; } + + DoorCloseCtrl = 0; + std::string closectrl; getkeyval( closectrl, "CloseCtrl", line, "" ); + if( closectrl == "DriverCtrl" ) { DoorCloseCtrl = 1; } + else if( closectrl == "AutomaticCtrl" ) { DoorCloseCtrl = 2; } + + if( DoorCloseCtrl == 2 ) { getkeyval( DoorStayOpen, "DoorStayOpen", line, "" ); } + + getkeyval( DoorOpenSpeed, "OpenSpeed", line, "" ); + getkeyval( DoorCloseSpeed, "CloseSpeed", line, "" ); + getkeyval( DoorMaxShiftL, "DoorMaxShiftL", line, "" ); + getkeyval( DoorMaxShiftR, "DoorMaxShiftR", line, "" ); + + DoorOpenMethod = 2; //obrót, default + std::string openmethod; getkeyval( openmethod, "DoorOpenMethod", line, "" ); + if( openmethod == "Shift" ) { DoorOpenMethod = 1; } //przesuw + else if( openmethod == "Fold" ) { DoorOpenMethod = 3; } //3 submodele siÄ™ obracajÄ… + else if( openmethod == "Plug" ) { DoorOpenMethod = 4; } //odskokowo-przesuwne + + std::string closurewarning; getkeyval( closurewarning, "DoorClosureWarning", line, "" ); + DoorClosureWarning = ( closurewarning == "Yes" ); + + std::string doorblocked; getkeyval( doorblocked, "DoorBlocked", line, "" ); + DoorBlocked = ( doorblocked == "Yes" ); + + getkeyval( DoorMaxPlugShift, "DoorMaxShiftPlug", line, "" ); + getkeyval( PlatformSpeed, "PlatformSpeed", line, "" ); + getkeyval( PlatformMaxShift, "PlatformMaxSpeed", line, "" ); + + PlatformOpenMethod = 2; // obrót, default + std::string platformopenmethod; getkeyval( platformopenmethod, "PlatformOpenMethod", line, "" ); + if( platformopenmethod == "Shift" ) { PlatformOpenMethod = 1; } // przesuw + + return true; +} + // ************************************************************************************************* // Q: 20160717 // ************************************************************************************************* @@ -7362,7 +7693,7 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir) if ((TestFlag(BrakeDelays, bdelay_G)) && ((!TestFlag(BrakeDelays, bdelay_R)) || - (Power > 1))) // ustalanie srednicy przewodu glownego (lokomotywa lub napêdowy + (Power > 1))) // ustalanie srednicy przewodu glownego (lokomotywa lub napêdowy Spg = 0.792; else Spg = 0.507; @@ -7557,8 +7888,8 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir) PantFront(true); PantRear(true); MainSwitch(true); - ActiveDir = 0; // Dir; //nastawnik kierunkowy - musi byæ ustawiane osobno! - DirAbsolute = ActiveDir * CabNo; // kierunek jazdy wzglêdem sprzêgów + ActiveDir = 0; // Dir; //nastawnik kierunkowy - musi byæ ustawiane osobno! + DirAbsolute = ActiveDir * CabNo; // kierunek jazdy wzglêdem sprzêgów LimPipePress = CntrlPipePress; } else @@ -7606,12 +7937,12 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir) // ************************************************************************************************* // Q: 20160714 -// Wstawia komendê z parametrem, od sprzêgu i w lokalizacji do pojazdu +// Wstawia komendê z parametrem, od sprzêgu i w lokalizacji do pojazdu // ************************************************************************************************* void TMoverParameters::PutCommand(std::string NewCommand, double NewValue1, double NewValue2, const TLocation &NewLocation) { - CommandLast = NewCommand; // zapamiêtanie komendy + CommandLast = NewCommand; // zapamiêtanie komendy CommandIn.Command = NewCommand; CommandIn.Value1 = NewValue1; @@ -7622,7 +7953,7 @@ void TMoverParameters::PutCommand(std::string NewCommand, double NewValue1, doub // ************************************************************************************************* // Q: 20160714 -// Pobiera komendê z parametru funkcji oraz wartoœæ zmiennej jako return +// Pobiera komendê z parametru funkcji oraz wartoϾ zmiennej jako return // ************************************************************************************************* double TMoverParameters::GetExternalCommand(std::string &Command) { @@ -7633,7 +7964,7 @@ double TMoverParameters::GetExternalCommand(std::string &Command) // ************************************************************************************************* // Q: 20160714 // GF: 20161117 -// rozsy³anie komend do ca³ego sk³adu +// rozsy³anie komend do ca³ego sk³adu // ************************************************************************************************* bool TMoverParameters::SendCtrlBroadcast(std::string CtrlCommand, double ctrlvalue) { @@ -7667,7 +7998,7 @@ bool TMoverParameters::SetInternalCommand(std::string NewCommand, double NewValu CommandIn.Value1 = NewValue1; CommandIn.Value2 = NewValue2; SIC = true; - LastLoadChangeTime = 0; // zerowanie czasu (roz)³adowania + LastLoadChangeTime = 0; // zerowanie czasu (roz)³adowania } return SIC; @@ -7675,25 +8006,25 @@ bool TMoverParameters::SetInternalCommand(std::string NewCommand, double NewValu // ************************************************************************************************* // Q: 20160714 -// wysy³anie komendy w kierunku dir (1=przód, -1=ty³) do kolejnego pojazdu (jednego) +// wysy³anie komendy w kierunku dir (1=przód, -1=ty³) do kolejnego pojazdu (jednego) // ************************************************************************************************* bool TMoverParameters::SendCtrlToNext(std::string CtrlCommand, double ctrlvalue, double dir) { bool OK; - int d; // numer sprzêgu w kierunku którego wysy³amy + int d; // numer sprzêgu w kierunku którego wysy³amy - // Ra: by³ problem z propagacj¹, jeœli w sk³adzie jest pojazd wstawiony odwrotnie - // Ra: problem jest równie¿, jeœli AI bêdzie na koñcu sk³adu + // Ra: by³ problem z propagacj¹, jeÅ“li w sk³adzie jest pojazd wstawiony odwrotnie + // Ra: problem jest równie¿, jeÅ“li AI bêdzie na koñcu sk³adu OK = (dir != 0); // and Mains; - d = (1 + Sign(dir)) / 2; // dir=-1=>d=0, dir=1=>d=1 - wysy³anie tylko w ty³ - if (OK) // musi byæ wybrana niezerowa kabina + d = (1 + Sign(dir)) / 2; // dir=-1=>d=0, dir=1=>d=1 - wysy³anie tylko w ty³ + if (OK) // musi byæ wybrana niezerowa kabina if (TestFlag(Couplers[d].CouplingFlag, ctrain_controll)) - if (Couplers[d].ConnectedNr != d) // jeœli ten nastpêny jest zgodny z aktualnym + if (Couplers[d].ConnectedNr != d) // jeÅ“li ten nastpêny jest zgodny z aktualnym { if (Couplers[d].Connected->SetInternalCommand(CtrlCommand, ctrlvalue, dir)) OK = (Couplers[d].Connected->RunInternalCommand() && OK); // tu jest rekurencja } - else // jeœli nastêpny jest ustawiony przeciwnie, zmieniamy kierunek + else // jeÅ“li nastêpny jest ustawiony przeciwnie, zmieniamy kierunek if (Couplers[d].Connected->SetInternalCommand(CtrlCommand, ctrlvalue, -dir)) OK = (Couplers[d].Connected->RunInternalCommand() && OK); // tu jest rekurencja return OK; @@ -7702,14 +8033,14 @@ bool TMoverParameters::SendCtrlToNext(std::string CtrlCommand, double ctrlvalue, // ************************************************************************************************* // Q: 20160723 // ************************************************************************************************* -// wys³anie komendy otrzymanej z kierunku CValue2 (wzglêdem sprzêgów: 1=przod,-1=ty³) -// Ra: Jest tu problem z rekurencj¹. Trzeba by oddzieliæ wykonywanie komend od mechanizmu -// ich propagacji w sk³adzie. Osobnym problemem mo¿e byæ propagacja tylko w jedn¹ stronê. -// Jeœli jakiœ cz³on jest wstawiony odwrotnie, to równie¿ odwrotnie musi wykonywaæ -// komendy zwi¹zane z kierunkami (PantFront, PantRear, DoorLeft, DoorRight). -// Komenda musi byæ zdefiniowana tutaj, a jeœli siê wywo³uje funkcjê, to ona nie mo¿e -// sama przesy³aæ do kolejnych pojazdów. Nale¿y te¿ siê zastanowiæ, czy dla uzyskania -// jakiejœ zmiany (np. IncMainCtrl) lepiej wywo³aæ funkcjê, czy od razu wys³aæ komendê. +// wys³anie komendy otrzymanej z kierunku CValue2 (wzglêdem sprzêgów: 1=przod,-1=ty³) +// Ra: Jest tu problem z rekurencj¹. Trzeba by oddzieliæ wykonywanie komend od mechanizmu +// ich propagacji w sk³adzie. Osobnym problemem mo¿e byæ propagacja tylko w jedn¹ stronê. +// JeÅ“li jakiÅ“ cz³on jest wstawiony odwrotnie, to równie¿ odwrotnie musi wykonywaæ +// komendy zwi¹zane z kierunkami (PantFront, PantRear, DoorLeft, DoorRight). +// Komenda musi byæ zdefiniowana tutaj, a jeÅ“li siê wywo³uje funkcjê, to ona nie mo¿e +// sama przesy³aæ do kolejnych pojazdów. Nale¿y te¿ siê zastanowiæ, czy dla uzyskania +// jakiejÅ“ zmiany (np. IncMainCtrl) lepiej wywo³aæ funkcjê, czy od razu wys³aæ komendê. bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CValue2) { bool OK; @@ -7747,14 +8078,14 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV else if (Command == "Brake") // youBy - jak sie EP hamuje, to trza sygnal wyslac... { Hamulec->SetEPS(CValue1); - // fBrakeCtrlPos:=BrakeCtrlPos; //to powinnno byæ w jednym miejscu, aktualnie w C++!!! + // fBrakeCtrlPos:=BrakeCtrlPos; //to powinnno byæ w jednym miejscu, aktualnie w C++!!! BrakePressureActual = BrakePressureTable[BrakeCtrlPos]; OK = SendCtrlToNext(Command, CValue1, CValue2); } // youby - odluzniacz hamulcow, przyda sie else if (Command == "BrakeReleaser") { - OK = BrakeReleaser(Round(CValue1)); // samo siê przesy³a dalej - // OK:=SendCtrlToNext(command,CValue1,CValue2); //to robi³o kaskadê 2^n + OK = BrakeReleaser(Round(CValue1)); // samo siê przesy³a dalej + // OK:=SendCtrlToNext(command,CValue1,CValue2); //to robi³o kaskadê 2^n } else if (Command == "MainSwitch") { @@ -7778,7 +8109,7 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV { // OK:=Power>0.01; switch (static_cast(CValue1 * CValue2)) - { // CValue2 ma zmieniany znak przy niezgodnoœci sprzêgów + { // CValue2 ma zmieniany znak przy niezgodnoÅ“ci sprzêgów case 1: CabNo = 1; case -1: @@ -7826,7 +8157,7 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV if ((Battery) && (ActiveCab != 0) /*or (TrainType=dt_EZT)*/) SecuritySystem.Status = SecuritySystem.Status || s_waiting; // aktywacja czuwaka else - SecuritySystem.Status = 0; // wy³¹czenie czuwaka + SecuritySystem.Status = 0; // wy³¹czenie czuwaka OK = SendCtrlToNext(Command, CValue1, CValue2); } // else if command='EpFuseSwitch' then {NBMX} @@ -7844,7 +8175,7 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV OK = SendCtrlToNext(Command, CValue1, CValue2); } else if (Command == "DoorOpen") /*NBMX*/ - { // Ra: uwzglêdniæ trzeba jeszcze zgodnoœæ sprzêgów + { // Ra: uwzglêdniæ trzeba jeszcze zgodnoϾ sprzêgów if ((CValue2 > 0)) { // normalne ustawienie pojazdu if ((CValue1 == 1) || (CValue1 == 3)) @@ -7862,7 +8193,7 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV OK = SendCtrlToNext(Command, CValue1, CValue2); } else if (Command == "DoorClose") /*NBMX*/ - { // Ra: uwzglêdniæ trzeba jeszcze zgodnoœæ sprzêgów + { // Ra: uwzglêdniæ trzeba jeszcze zgodnoϾ sprzêgów if ((CValue2 > 0)) { // normalne ustawienie pojazdu if ((CValue1 == 1) || (CValue1 == 3)) @@ -7880,8 +8211,8 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV OK = SendCtrlToNext(Command, CValue1, CValue2); } else if (Command == "PantFront") /*Winger 160204*/ - { // Ra: uwzglêdniæ trzeba jeszcze zgodnoœæ sprzêgów - // Czemu EZT ma byæ traktowane inaczej? Ukrotnienie ma, a cz³on mo¿e byæ odwrócony + { // Ra: uwzglêdniæ trzeba jeszcze zgodnoϾ sprzêgów + // Czemu EZT ma byæ traktowane inaczej? Ukrotnienie ma, a cz³on mo¿e byæ odwrócony if ((TrainType == dt_EZT)) { //'ezt' if ((CValue1 == 1)) @@ -7896,7 +8227,7 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV } } else - { // nie 'ezt' - odwrotne ustawienie pantografów: ^-.-^ zamiast ^-.^- + { // nie 'ezt' - odwrotne ustawienie pantografów: ^-.-^ zamiast ^-.^- if ((CValue1 == 1)) if ((TestFlag(Couplers[1].CouplingFlag, ctrain_controll) && (CValue2 == 1)) || (TestFlag(Couplers[0].CouplingFlag, ctrain_controll) && (CValue2 == -1))) @@ -7925,7 +8256,7 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV OK = SendCtrlToNext(Command, CValue1, CValue2); } else if (Command == "PantRear") /*Winger 160204, ABu 310105 i 030305*/ - { // Ra: uwzglêdniæ trzeba jeszcze zgodnoœæ sprzêgów + { // Ra: uwzglêdniæ trzeba jeszcze zgodnoϾ sprzêgów if ((TrainType == dt_EZT)) { /*'ezt'*/ if ((CValue1 == 1)) @@ -8005,10 +8336,10 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV OK = false; } else if (Command == "CabSignal") /*SHP,Indusi*/ - { // Ra: to powinno dzia³aæ tylko w cz³onie obsadzonym + { // Ra: to powinno dzia³aæ tylko w cz³onie obsadzonym if (/*(TrainType=dt_EZT)or*/ (ActiveCab != 0) && (Battery) && TestFlag(SecuritySystem.SystemType, - 2)) // jeœli kabina jest obsadzona (silnikowy w EZT?) + 2)) // jeÅ“li kabina jest obsadzona (silnikowy w EZT?) /*?*/ /* WITH SecuritySystem */ { SecuritySystem.VelocityAllowed = floor(CValue1); @@ -8017,14 +8348,14 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV SetFlag(SecuritySystem.Status, s_active); } // else OK:=false; - OK = true; // true, gdy mo¿na usun¹æ komendê + OK = true; // true, gdy mo¿na usun¹æ komendê } /*naladunek/rozladunek*/ else if (Pos("Load=", Command) == 1) { - OK = false; // bêdzie powtarzane a¿ siê za³aduje + OK = false; // bêdzie powtarzane a¿ siê za³aduje if ((Vel == 0) && (MaxLoad > 0) && - (Load < MaxLoad * (1.0 + 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)); @@ -8035,23 +8366,23 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV } else if (Pos("UnLoad=", Command) == 1) { - OK = false; // bêdzie powtarzane a¿ siê roz³aduje + OK = false; // bêdzie powtarzane a¿ siê roz³aduje if ((Vel == 0) && (Load > 0)) // czy jest co rozladowac? if (Distance(Loc, CommandIn.Location, Dim, Dim) < 10) // ten peron { - testload = DUE(Command); // zgodnoœæ nazwy ³adunku z CHK + testload = DUE(Command); // zgodnoϾ nazwy ³adunku z CHK if (LoadType == testload) /*mozna to rozladowac*/ OK = LoadingDone(-Min0R(CValue2, LoadSpeed), testload); } // if OK then LoadStatus:=0; } - return OK; // dla true komenda bêdzie usuniêta, dla false wykonana ponownie + return OK; // dla true komenda bêdzie usuniêta, dla false wykonana ponownie } // ************************************************************************************************* // Q: 20160714 -// Uruchamia funkcjê RunCommand a¿ do skutku. Jeœli bêdzie pozytywny to kasuje komendê. +// Uruchamia funkcjê RunCommand a¿ do skutku. JeÅ“li bêdzie pozytywny to kasuje komendê. // ************************************************************************************************* bool TMoverParameters::RunInternalCommand(void) { @@ -8080,7 +8411,7 @@ bool TMoverParameters::RunInternalCommand(void) // ************************************************************************************************* // Q: 20160714 -// Zwraca wartoœæ natê¿enia pr¹du na wybranym amperomierzu. Podfunkcja do ShowCurrent. +// Zwraca wartoϾ natê¿enia pr¹du na wybranym amperomierzu. Podfunkcja do ShowCurrent. // ************************************************************************************************* int TMoverParameters::ShowCurrentP(int AmpN) { @@ -8089,20 +8420,20 @@ int TMoverParameters::ShowCurrentP(int AmpN) // ClearPendingExceptions; Grupowy = ((DelayCtrlFlag) && (TrainType == dt_ET22)); // przerzucanie walu grupowego w ET22; - Bn = RList[MainCtrlActualPos].Bn; // ile równoleg³ych ga³êzi silników + Bn = RList[MainCtrlActualPos].Bn; // ile równoleg³ych ga³êzi silników if ((DynamicBrakeType == dbrake_automatic) && (DynamicBrakeFlag)) Bn = 2; if (Power > 0.01) { - if (AmpN > 0) // podaæ pr¹d w ga³êzi + if (AmpN > 0) // podaæ pr¹d w ga³êzi { if ((Bn < AmpN) || ((Grupowy) && (AmpN == Bn - 1))) return 0; else // normalne podawanie pradu return floor(abs(Im)); } - else // podaæ ca³kowity + else // podaæ ca³kowity return floor(abs(Itot)); } else // pobor pradu jezeli niema mocy diff --git a/McZapkie/hamulce.cpp b/McZapkie/hamulce.cpp index 146d1c00..9579ebf0 100644 --- a/McZapkie/hamulce.cpp +++ b/McZapkie/hamulce.cpp @@ -193,7 +193,8 @@ double TBrakeCyl::P() static double const cD = 1; static double const pD = VD - cD; - double VtoC = Vol / Cap; // stosunek cisnienia do objetosci + double VtoC = ( Cap > 0.0 ) ? Vol / Cap : 0.0; // stosunek cisnienia do objetosci. + // Added div/0 trap for vehicles with incomplete definitions (cars etc) // P:=VtoC; if (VtoC < VS) return VtoC * pS / VS; // objetosc szkodliwa diff --git a/parser.cpp b/parser.cpp index e2b95798..e77ac103 100644 --- a/parser.cpp +++ b/parser.cpp @@ -79,6 +79,10 @@ bool cParser::getTokens(int Count, bool ToLower, const char *Break) for (i = 0; i < Count; ++i) { std::string string = readToken(ToLower, Break); + if( true == string.empty() ) { + // no more tokens + break; + } // collect parameters if (i == 0) this->str(string); From 77d462ffe4ade7fcd4bb50c98f6f1bded7bdf2d2 Mon Sep 17 00:00:00 2001 From: tmj-fstate Date: Mon, 23 Jan 2017 11:06:34 +0100 Subject: [PATCH 7/9] assorted bug fixes --- Driver.cpp | 4 ++-- DynObj.cpp | 9 +++++---- EU07.cpp | 2 +- Ground.cpp | 17 +++-------------- Ground.h | 30 +++++++++++++++--------------- McZapkie/Mover.cpp | 15 +++++++++++++-- McZapkie/hamulce.cpp | 37 ++++++++++++++----------------------- McZapkie/mctools.cpp | 5 ++++- Model3d.cpp | 6 +++++- PyInt.cpp | 2 +- Train.cpp | 10 +++++----- TrkFoll.cpp | 2 -- World.cpp | 1 - 13 files changed, 68 insertions(+), 72 deletions(-) diff --git a/Driver.cpp b/Driver.cpp index ae67889d..23557452 100644 --- a/Driver.cpp +++ b/Driver.cpp @@ -1881,7 +1881,7 @@ bool TController::CheckVehicles(TOrders user) { // je�li pojazd posiada pantograf, to przydzielamy mu mask�, kt�r� b�dzie informowa� o // je�dzie bezpr�dowej p->iOverheadMask = pantmask; - pantmask << 1; // przesuni�cie bit�w, max. 32 pojazdy z pantografami w sk�adzie + pantmask = pantmask << 1; // przesuni�cie bit�w, max. 32 pojazdy z pantografami w sk�adzie } d = p->DirectionSet(d ? 1 : -1); // zwraca po�o�enie nast�pnego (1=zgodny,0=odwr�cony - // wzgl�dem czo�a sk�adu) @@ -2310,7 +2310,7 @@ bool TController::PrepareEngine() if (OK) { if (eStopReason == stopSleep) // je�li dotychczas spa� - eStopReason == stopNone; // teraz nie ma powodu do stania + eStopReason = stopNone; // teraz nie ma powodu do stania iEngineActive = 1; return true; } diff --git a/DynObj.cpp b/DynObj.cpp index a4240b5c..2799e1d6 100644 --- a/DynObj.cpp +++ b/DynObj.cpp @@ -2847,7 +2847,7 @@ bool TDynamicObject::Update(double dt, double dt1) i = 0; przek = przek / (np - nPrzekrF); for (TDynamicObject *p = GetFirstDynamic(MoverParameters->ActiveCab < 0 ? 1 : 0, 4); p; - (kier > 0 ? p = p->NextC(4) : p = p->PrevC(4))) + (true == kier ? p = p->NextC(4) : p = p->PrevC(4))) { if (!PrzekrF[i]) { @@ -2858,7 +2858,7 @@ bool TDynamicObject::Update(double dt, double dt1) } i = 0; for (TDynamicObject *p = GetFirstDynamic(MoverParameters->ActiveCab < 0 ? 1 : 0, 4); p; - (kier > 0 ? p = p->NextC(4) : p = p->PrevC(4))) + (true == kier ? p = p->NextC(4) : p = p->PrevC(4))) { float Nmax = ((p->MoverParameters->P2FTrans * p->MoverParameters->MaxBrakePress[0] - p->MoverParameters->BrakeCylSpring) * @@ -4252,10 +4252,10 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, iMultiTex = 0; // czy jest wiele tekstur wymiennych? parser.getTokens(); parser >> asModel; - if (asModel.find('#') == asModel.length()) // Ra 2015-01: nie podoba mi siê to + if( asModel[asModel.size() - 1] == '#' ) // Ra 2015-01: nie podoba mi siê to { // model wymaga wielu tekstur wymiennych iMultiTex = 1; - asModel = asModel.substr(0, asModel.length() - 1); + asModel.erase( asModel.length() - 1 ); } if ((i = asModel.find(',')) != std::string::npos) { // Ra 2015-01: mo¿e szukaæ przecinka w @@ -4273,6 +4273,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, // modele w dynamics/basedir Global::asCurrentTexturePath = BaseDir; // biezaca sciezka do tekstur to dynamic/... mdModel = TModelsManager::GetModel(asModel, true); + assert( mdModel != nullptr ); // TODO: handle this more gracefully than all going to shit if (ReplacableSkin != "none") { // tekstura wymienna jest raczej jedynie w "dynamic\" ReplacableSkin = diff --git a/EU07.cpp b/EU07.cpp index 4d83a9ea..001922af 100644 --- a/EU07.cpp +++ b/EU07.cpp @@ -572,7 +572,7 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance LPSTR lpCmdLine, // command line parameters int nCmdShow) // window show state { -#ifdef _MSC_VER & _DEBUG +#if defined(_MSC_VER) && defined (_DEBUG) // memory leaks _CrtSetDbgFlag( _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG ) | _CRTDBG_LEAK_CHECK_DF ); // floating point operation errors diff --git a/Ground.cpp b/Ground.cpp index 229c7209..96b83a6e 100644 --- a/Ground.cpp +++ b/Ground.cpp @@ -42,7 +42,6 @@ http://mozilla.org/MPL/2.0/. #define _PROBLEND 1 //--------------------------------------------------------------------------- -#pragma package(smart_init) bool bCondition; // McZapkie: do testowania warunku na event multiple string LogComment; @@ -684,17 +683,6 @@ void TGroundNode::RenderAlphaDL() //------------------------------------------------------------------------------ //------------------ Podstawowy pojemnik terenu - sektor ----------------------- //------------------------------------------------------------------------------ -TSubRect::TSubRect() -{ - nRootNode = NULL; // lista wszystkich obiektów jest pusta - nRenderHidden = nRenderRect = nRenderRectAlpha = nRender = nRenderMixed = nRenderAlpha = - nRenderWires = NULL; - tTrackAnim = NULL; // nic nie animujemy - tTracks = NULL; // nie ma jeszcze torów - nRootMesh = nMeshed = NULL; // te listy te¿ s¹ puste - iNodeCount = 0; // licznik obiektów - iTracks = 0; // licznik torów -} TSubRect::~TSubRect() { if (Global::bManageNodes) // Ra: tu siê coœ sypie @@ -2278,8 +2266,9 @@ void TGround::FirstInit() for (j = 1; j < Current->iCount; ++j) { // od 1 do koñca s¹ zestawy trójk¹tów std::string xxxzzz = Current->nNode[j].smTerrain->pName; // pobranie nazwy - gr = GetRect(1000 * (stol_def(xxxzzz.substr(0, 3),0) - 500), - 1000 * (stol_def(xxxzzz.substr(3, 3),0) - 500)); + gr = GetRect( + ( std::stoi( xxxzzz.substr( 0, 3 )) - 500 ) * 1000, + ( std::stoi( xxxzzz.substr( 3, 3 )) - 500 ) * 1000 ); if (Global::bUseVBO) gr->nTerrain = Current->nNode + j; // zapamiêtanie else diff --git a/Ground.h b/Ground.h index 77751b9d..b522defc 100644 --- a/Ground.h +++ b/Ground.h @@ -182,28 +182,28 @@ class TGroundNode : public Resource class TSubRect : public Resource, public CMesh { // sektor sk³adowy kwadratu kilometrowego public: - int iTracks; // iloœæ torów w (tTracks) - TTrack **tTracks; // tory do renderowania pojazdów + int iTracks = 0; // iloœæ torów w (tTracks) + TTrack **tTracks = nullptr; // tory do renderowania pojazdów protected: - TTrack *tTrackAnim; // obiekty do przeliczenia animacji - TGroundNode *nRootMesh; // obiekty renderuj¹ce wg tekstury (wtórne, lista po nNext2) - TGroundNode *nMeshed; // lista obiektów dla których istniej¹ obiekty renderuj¹ce grupowo + TTrack *tTrackAnim = nullptr; // obiekty do przeliczenia animacji + TGroundNode *nRootMesh = nullptr; // obiekty renderuj¹ce wg tekstury (wtórne, lista po nNext2) + TGroundNode *nMeshed = nullptr; // lista obiektów dla których istniej¹ obiekty renderuj¹ce grupowo public: TGroundNode * - nRootNode; // wszystkie obiekty w sektorze, z wyj¹tkiem renderuj¹cych i pojazdów (nNext2) + nRootNode = nullptr; // wszystkie obiekty w sektorze, z wyj¹tkiem renderuj¹cych i pojazdów (nNext2) TGroundNode * - nRenderHidden; // lista obiektów niewidocznych, "renderowanych" równie¿ z ty³u (nNext3) - TGroundNode *nRenderRect; // z poziomu sektora - nieprzezroczyste (nNext3) - TGroundNode *nRenderRectAlpha; // z poziomu sektora - przezroczyste (nNext3) - TGroundNode *nRenderWires; // z poziomu sektora - druty i inne linie (nNext3) - TGroundNode *nRender; // indywidualnie - nieprzezroczyste (nNext3) - TGroundNode *nRenderMixed; // indywidualnie - nieprzezroczyste i przezroczyste (nNext3) - TGroundNode *nRenderAlpha; // indywidualnie - przezroczyste (nNext3) - int iNodeCount; // licznik obiektów, do pomijania pustych sektorów + nRenderHidden = nullptr; // lista obiektów niewidocznych, "renderowanych" równie¿ z ty³u (nNext3) + TGroundNode *nRenderRect = nullptr; // z poziomu sektora - nieprzezroczyste (nNext3) + TGroundNode *nRenderRectAlpha = nullptr; // z poziomu sektora - przezroczyste (nNext3) + TGroundNode *nRenderWires = nullptr; // z poziomu sektora - druty i inne linie (nNext3) + TGroundNode *nRender = nullptr; // indywidualnie - nieprzezroczyste (nNext3) + TGroundNode *nRenderMixed = nullptr; // indywidualnie - nieprzezroczyste i przezroczyste (nNext3) + TGroundNode *nRenderAlpha = nullptr; // indywidualnie - przezroczyste (nNext3) + int iNodeCount = 0; // licznik obiektów, do pomijania pustych sektorów public: void LoadNodes(); // utworzenie VBO sektora public: - TSubRect(); +// TSubRect() = default; virtual ~TSubRect(); virtual void Release(); // zwalnianie VBO sektora void NodeAdd(TGroundNode *Node); // dodanie obiektu do sektora na etapie rozdzielania na sektory diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index 53e05a9f..c664dff5 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -352,6 +352,10 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit, Couplers[b].DmaxC = 0.1; Couplers[b].FmaxC = 1000.0; } + for( b = 0; b < 2; ++b ) { + HVCouplers[ b ][ 0 ] = 0.0; + HVCouplers[ b ][ 1 ] = 0.0; + } Power = 0.0; MaxLoad = 0; LoadAccepted = ""; @@ -549,7 +553,7 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit, ResistorsFlag = false; RventRot = 0.0; RVentType = 0; - RVentnmax = 0.0; + RVentnmax = 1.0; RVentCutOff = 0.0; enrot = 0.0; @@ -7791,7 +7795,14 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir) WriteLog("XBT EStED"); Hamulec = std::make_shared(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA); Hamulec->SetRM(RapidMult); - break; + if( MBPM < 2 ) { + //jesli przystawka wazaca + Hamulec->SetLP( 0, MaxBrakePress[ 3 ], 0 ); + } + else { + Hamulec->SetLP( Mass, MBPM, MaxBrakePress[ 1 ] ); + } + break; } case EP2: { diff --git a/McZapkie/hamulce.cpp b/McZapkie/hamulce.cpp index 9579ebf0..99697d96 100644 --- a/McZapkie/hamulce.cpp +++ b/McZapkie/hamulce.cpp @@ -96,9 +96,9 @@ double PFVa(double PH, double PL, double S, double LIM, FM = FM * (LIM - PL) / DP; // jesli jestesmy przy nastawieniu, to zawor sie przymyka if ((sg > 0.5)) // jesli ponizej stosunku krytycznego if ((PH - PL) < DPL) // niewielka roznica cisnien - return (PH - PL) / DPL * FM * 2 * sqrt((sg) * (1 - sg)); + return (PH - PL) / DPL * FM * 2 * sqrt((sg) * (1 - sg)); // BUG: (1-sg) can be < 0, leading to sqrt(-x) else - return FM * 2 * sqrt((sg) * (1 - sg)); + return FM * 2 * sqrt( (sg) * ( 1 - sg ) ); // BUG: (1-sg) can be < 0, leading to sqrt(-x) else // powyzej stosunku krytycznego return FM; } @@ -1835,7 +1835,7 @@ void TKE::CheckReleaser(double dt) CVP = CntrlRes->P(); // odluzniacz - if ((BrakeStatus && b_rls) == b_rls) + if ( true == ((BrakeStatus & b_rls) == b_rls)) if ((CVP - VVP < 0)) BrakeStatus &= 247; else @@ -2591,32 +2591,23 @@ double TM394::GetPos(int i) double TH14K1::GetPF(double i_bcp, double PP, double HP, double dt, double ep) { - static int const LBDelay = 100; // szybkosc + zasilanie sterujacego + int const LBDelay = 100; // szybkosc + zasilanie sterujacego // static double const BPT_K[/*?*/ /*-1..4*/ (4) - (-1) + 1][2] = //{ (10, 0), (4, 1), (0, 1), (4, 0), (4, -1), (15, -1) }; - static double const NomPress = 5.0; + double const NomPress = 5.0; - double LimPP; - double dpPipe; - double dpMainValve; - double ActFlowSpeed; - int BCP; + int BCP = std::lround(i_bcp); + if( i_bcp < -1 ) { BCP = 1; } - BCP = lround(i_bcp); - if (i_bcp < -1) - BCP = 1; - LimPP = BPT_K[BCP + 1][1]; - if (LimPP < 0) - LimPP = 0.5 * PP; - else if (LimPP > 0) - LimPP = PP; - else - LimPP = CP; - ActFlowSpeed = BPT_K[BCP + 1][0]; + double LimPP = BPT_K[BCP + 1][1]; + if( LimPP < 0.0 ) { LimPP = 0.5 * PP; } + else if( LimPP > 0.0 ) { LimPP = PP; } + else { LimPP = CP; } + double ActFlowSpeed = BPT_K[BCP + 1][0]; - CP = CP + 6 * Min0R(abs(LimPP - CP), 0.05) * PR(CP, LimPP) * dt; // zbiornik sterujacy + CP = CP + 6 * std::min( std::abs(LimPP - CP), 0.05 ) * PR(CP, LimPP) * dt; // zbiornik sterujacy - dpMainValve = 0; + double dpMainValve = 0.0; if (BCP == -1) dpMainValve = PF(HP, PP, ActFlowSpeed / LBDelay) * dt; diff --git a/McZapkie/mctools.cpp b/McZapkie/mctools.cpp index 793d87fd..4d34c988 100644 --- a/McZapkie/mctools.cpp +++ b/McZapkie/mctools.cpp @@ -279,7 +279,7 @@ std::string Tab2Sp(std::string const &s) /*Tab to Space sign*/ { std::string s2 = ""; char tmp = (char)9; - for (int b = 0; b < s.length(); ++b) + for (std::size_t b = 0; b < s.length(); ++b) //{ // if (s[b] == tmp[0]) // s[b] = tmp[1]; @@ -415,6 +415,9 @@ std::string to_hex_str( int const Value, int const Width ) int stol_def(const std::string &str, const int &DefaultValue) { + // NOTE: there's good chance this function is bugged, it produced wrong result on at least one occasion + // TODO: rewrite into something more reliable + // this function was developed iteratively on Codereview.stackexchange // with the assistance of @Corbin std::size_t len = str.size(); diff --git a/Model3d.cpp b/Model3d.cpp index c2a62f2f..05d7f523 100644 --- a/Model3d.cpp +++ b/Model3d.cpp @@ -1844,7 +1844,11 @@ bool TModel3d::LoadFromFile(std::string const &FileName, bool dynamic) { Init(); // generowanie siatek i zapis E3D } } - return Root ? (iSubModelsCount > 0) : false; // brak pliku albo problem z wczytaniem + bool const result = Root ? (iSubModelsCount > 0) : false; // brak pliku albo problem z wczytaniem + if( false == result ) { + ErrorLog( "Failed to load 3d model \"" + FileName + "\"" ); + } + return result; }; void TModel3d::LoadFromBinFile(std::string const &FileName, bool dynamic) diff --git a/PyInt.cpp b/PyInt.cpp index 9411d246..c0aa2ddf 100644 --- a/PyInt.cpp +++ b/PyInt.cpp @@ -572,7 +572,7 @@ void TPythonScreens::run() void TPythonScreens::finish() { - _thread == NULL; + _thread = NULL; } DWORD WINAPI ScreenRendererThread(LPVOID lpParam) diff --git a/Train.cpp b/Train.cpp index a9d04029..9ebb15e3 100644 --- a/Train.cpp +++ b/Train.cpp @@ -908,7 +908,7 @@ void TTrain::OnKeyDown(int cKey) else if (cKey == Global::Keys[k_LeftSign]) // lewe swiatlo - w��czenie // ABu 060205: dzielo Wingera po malutkim liftingu: { - if (!mvOccupied->LightsPosNo > 0) + if (false == (mvOccupied->LightsPosNo > 0)) { if ((GetAsyncKeyState(VK_CONTROL) < 0) && (ggRearLeftLightButton.SubModel)) // hunter-230112 - z controlem zapala z tylu @@ -1083,7 +1083,7 @@ void TTrain::OnKeyDown(int cKey) // tylne (koncowki) - // wlaczenie { - if (!mvOccupied->LightsPosNo > 0) + if (false == (mvOccupied->LightsPosNo > 0)) { if ((GetAsyncKeyState(VK_CONTROL) < 0) && (ggRearRightLightButton.SubModel)) // hunter-230112 - z controlem zapala z tylu @@ -2115,7 +2115,7 @@ if else if (cKey == Global::Keys[k_LeftSign]) // ABu 060205: lewe swiatlo - // wylaczenie { - if (!mvOccupied->LightsPosNo > 0) + if (false == (mvOccupied->LightsPosNo > 0)) { if ((GetAsyncKeyState(VK_CONTROL) < 0) && (ggRearLeftLightButton.SubModel)) // hunter-230112 - z controlem gasi z tylu @@ -2288,7 +2288,7 @@ if if (cKey == Global::Keys[k_RightSign]) // Winger 070304: swiatla tylne // (koncowki) - wlaczenie { - if (!mvOccupied->LightsPosNo > 0) + if (false == (mvOccupied->LightsPosNo > 0)) { if ((GetAsyncKeyState(VK_CONTROL) < 0) && (ggRearRightLightButton.SubModel)) // hunter-230112 - z controlem gasi z tylu @@ -3239,7 +3239,7 @@ bool TTrain::Update() rsRunningNoise.AM = am; rsRunningNoise.AA = 0.7; rsRunningNoise.FA = fa; - rsRunningNoise.FM - fm; + rsRunningNoise.FM = fm; } mvOccupied->EventFlag = false; } diff --git a/TrkFoll.cpp b/TrkFoll.cpp index 8d8d15f5..c5a70318 100644 --- a/TrkFoll.cpp +++ b/TrkFoll.cpp @@ -330,5 +330,3 @@ void TTrackFollower::Render(float fNr) } #endif //--------------------------------------------------------------------------- - -#pragma package(smart_init) diff --git a/World.cpp b/World.cpp index c8187d52..dbda391c 100644 --- a/World.cpp +++ b/World.cpp @@ -35,7 +35,6 @@ http://mozilla.org/MPL/2.0/. #define TEXTURE_FILTER_CONTROL_EXT 0x8500 #define TEXTURE_LOD_BIAS_EXT 0x8501 //--------------------------------------------------------------------------- -#pragma package(smart_init) typedef void(APIENTRY *FglutBitmapCharacter)(void *font, int character); // typ funkcji FglutBitmapCharacter glutBitmapCharacterDLL = NULL; // deklaracja zmiennej From 8fb7b5357f0bfc8787eb76351ed7607d60d3cd80 Mon Sep 17 00:00:00 2001 From: tmj-fstate Date: Mon, 23 Jan 2017 11:24:29 +0100 Subject: [PATCH 8/9] pre-merge syncs --- maszyna.rc | Bin 0 -> 5814 bytes resource.h | Bin 0 -> 902 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 maszyna.rc create mode 100644 resource.h diff --git a/maszyna.rc b/maszyna.rc new file mode 100644 index 0000000000000000000000000000000000000000..ac76d2e13680f203d41ccdf7ae22f32e5ea40aa4 GIT binary patch literal 5814 zcmdUzTW=ya6vxkVrGAGgd1=*_gltyrYXXF#B^QN@S}77r6UZVFKmpp_s-L~>?{9N} zfgu~{s-har*khlY&(-$de;wMPC3aywySHZ>+L*U%6UJJMjcsao*5|Ki-|{5(XdN5y zJ~KX{ePHaFR(Ml-_w*C~M6G8dVDk2*eF2xl&>k>4V73qRLx9b#;pgqWTn)+v3I89(M-waBM!@O#j2#7pac|1{*r3Yx7+BsenW2jENG>N7n ze$>XBYCNL*Cr`2wvjL48e721|HG2n!B(5=f$!L?d68zFf1gE&H5}7~QcTlbabvDNk z=Q2{AGFrpGMa^}vUzTxcTsm)+JCz~F*lLJ%d|a*G7AtP^Eu*)3$YGcKD~`|6jIfty zd|a3b5LL8NUV%xhU_YSCBi=&jzomC#KiZqXQND8n?GidIqSG{oPh&gR^I)Y4QeR-7 zI@V6$`2j9nW+b8Vdv_j>(Uxa$t<2s@e;@JCDVihprUV_YF$ zggrq?8ho$6tqWMQIM3-?5@Um>JMh1?mKdZ2s9CTni;|mv;#*&{y1S!$UUJZs<8^roX1SC-gL)Yc3Du2i|Qs)PR44NW7ep(Zo~6x#zX!q&Tc#XE&GLAM?1t_)^-h_Au&8#1mq-$-pOBeVJ(l-7bw4KzG4?BxC)W7c^{aDXhSug<)XhX?=#l-{n|CPh{AX1 zFUG5DcK=$pwYQtjc0R9GZvpFXIt6Mzdk2tx-o7PI#N3+B3p!2i!XxXPpR@H-X3lQO zXSaBCIvOr<*t{?(>xIR%?3t XKF{^If0lNMUiS9^k*auoZC?Ec;)bvM literal 0 HcmV?d00001 diff --git a/resource.h b/resource.h new file mode 100644 index 0000000000000000000000000000000000000000..7fb9d9b65fcecd76b4062138736bb53bc1f78226 GIT binary patch literal 902 zcmb7?-A=+l5QWdRiSMupmnI;_7pN^4M5xA6qF0SnYA^^11%KnKtKW1DAVDITOglTB zIeTVKzdjpk=pBo7p-holy2RruiWREODbWXZr~_&na_VZNTr*8o;)Ukq`s7M2bgMC^ zP)C^4y@s0LGxBrZcjQK7a;g@bhMWsBW1{-n4JlZ@dZ1To9_cUjMm!;^gO@L>jaRM0 zG9+BKQ^)ie@@ncBuI zIwR8|-nOso=kAQ2magHD$#4>SQlgMJgGm5FO1!yC+t7I0g%6W8e!WHYbE prq0`Vd&PUOwt084cA)Nu?Kf#!?8deItp1@I>YHMwoZtTM^EX#`eLnyI literal 0 HcmV?d00001 From b6e3ba8f1cf532bf355a8d75ecaafea4d63b3caf Mon Sep 17 00:00:00 2001 From: tmj-fstate Date: Mon, 23 Jan 2017 13:36:10 +0100 Subject: [PATCH 9/9] post-merge fixes --- Globals.cpp | 4 ++-- Ground.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Globals.cpp b/Globals.cpp index c1ee6f20..413ad574 100644 --- a/Globals.cpp +++ b/Globals.cpp @@ -187,7 +187,7 @@ int Global::iBpp = 32; // chyba już nie używa siÄ™ kart, na których 16bpp co // maciek001: konfiguracja wstÄ™pna portu COM bool Global::bMWDdebugEnable = false; bool Global::bMWDInputDataEnable = false; -unsigned long int Global::iMWDBaudrate = 500000; +unsigned int Global::iMWDBaudrate = 500000; std::string Global::sMWDPortId = "COM1"; // nazwa portu z którego korzystamy - na razie nie dziaÅ‚a bool Global::bMWDBreakEnable = false; // zmienić na FALSE!!! jak już bÄ™dzie dziaÅ‚ać wczytywanie z *.ini double Global::fMWDAnalogCalib[4][3] = {{1023, 0, 1023},{1023, 0, 1023},{1023, 0, 1023},{1023, 0, 1023}}; // wartość max potencjometru, wartość min potencjometru, rozdzielczość (max. wartość jaka może być -1) @@ -1247,7 +1247,7 @@ char bezogonkowo[] = "E?,?\"_++?%Sstzz" std::string Global::Bezogonkow(std::string str, bool _) { // wyciÄ™cie liter z ogonkami, bo OpenGL nie umie wyÅ›wietlić - for (unsigned int i = 1; i <= str.length(); ++i) + for (unsigned int i = 1; i < str.length(); ++i) if (str[i] & 0x80) str[i] = bezogonkowo[str[i] & 0x7F]; else if (str[i] < ' ') // znaki sterujÄ…ce nie sÄ… obsÅ‚ugiwane diff --git a/Ground.h b/Ground.h index ef0d8233..588caa81 100644 --- a/Ground.h +++ b/Ground.h @@ -187,7 +187,7 @@ class TSubRect : public Resource, public CMesh protected: TTrack *tTrackAnim = nullptr; // obiekty do przeliczenia animacji TGroundNode *nRootMesh = nullptr; // obiekty renderujÄ…ce wg tekstury (wtórne, lista po nNext2) - TGroundNode *nMeshed = nullptr; / lista obiektów dla których istniejÄ… obiekty renderujÄ…ce grupowo + TGroundNode *nMeshed = nullptr; // lista obiektów dla których istniejÄ… obiekty renderujÄ…ce grupowo public: TGroundNode * nRootNode = nullptr; // wszystkie obiekty w sektorze, z wyjÄ…tkiem renderujÄ…cych i pojazdów (nNext2)