From 1ea2a6e39232a7d4affbe5cebad57574aa149ddb Mon Sep 17 00:00:00 2001 From: antonisauren Date: Thu, 20 Oct 2016 19:55:43 +0200 Subject: [PATCH 1/7] =?UTF-8?q?Wentylatory=20rwent=3Dyes=20za=C5=82=C4=85c?= =?UTF-8?q?zaj=C4=85=20sie=20na=20pozycjach=20oporowych=20a=20nie=20po=20w?= =?UTF-8?q?ybraniu=20kierunku.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- McZapkie/_mover.pas | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/McZapkie/_mover.pas b/McZapkie/_mover.pas index 8dfb7dea..12a03867 100644 --- a/McZapkie/_mover.pas +++ b/McZapkie/_mover.pas @@ -4085,7 +4085,7 @@ begin if (EngineType=ElectricSeriesMotor) then begin case RVentType of {wentylatory rozruchowe} - 1: if ActiveDir<>0 then + 1: if ActiveDir<>0 and (RList[MainCtrlActualPos].R>RVentCutOff) then RventRot:=RventRot+(RVentnmax-RventRot)*RVentSpeed*dt else RventRot:=RventRot*(1-RVentSpeed*dt); From 0dfabe1a0aebe4cdc83ef117bb9d1edbacc4d3c5 Mon Sep 17 00:00:00 2001 From: antonisauren Date: Thu, 20 Oct 2016 20:28:52 +0200 Subject: [PATCH 2/7] =?UTF-8?q?Dodatkowe=20zmienne=20dla=20pythona=20do=20?= =?UTF-8?q?obs=C5=82ugi=20sygnalizacji=20kabinowej.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Driver.cpp | 4 ++++ Driver.h | 1 + McZapkie/_mover.pas | 2 +- Train.cpp | 8 ++++++++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Driver.cpp b/Driver.cpp index b918a463..08790e2c 100644 --- a/Driver.cpp +++ b/Driver.cpp @@ -1151,6 +1151,10 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN iDrivigFlags |= moveSemaphorFound; //jeśli z przodu to dajemy falgę, że jest d_to_next_sem = Min0R(sSpeedTable[i].fDist, d_to_next_sem); } + if (sSpeedTable[i].fDist <= d_to_next_sem) + { + VelSignalNext = sSpeedTable[i].fVelNext; + } } else if (sSpeedTable[i].iFlags & spRoadVel) { // to W6 diff --git a/Driver.h b/Driver.h index 1c902da0..aae8e242 100644 --- a/Driver.h +++ b/Driver.h @@ -242,6 +242,7 @@ class TController double VelLimit; // predkość zadawana przez event jednokierunkowego ograniczenia prędkości public: double VelSignalLast; // prędkość zadana na ostatnim semaforze + double VelSignalNext; // prędkość zadana na następnym semaforze double VelLimitLast; // prędkość zadana przez ograniczenie double VelRoad; // aktualna prędkość drogowa (ze znaku W27) // (PutValues albo komendą) diff --git a/McZapkie/_mover.pas b/McZapkie/_mover.pas index 12a03867..20c8d1c6 100644 --- a/McZapkie/_mover.pas +++ b/McZapkie/_mover.pas @@ -4085,7 +4085,7 @@ begin if (EngineType=ElectricSeriesMotor) then begin case RVentType of {wentylatory rozruchowe} - 1: if ActiveDir<>0 and (RList[MainCtrlActualPos].R>RVentCutOff) then + 1: if (ActiveDir<>0) and (RList[MainCtrlActualPos].R>RVentCutOff) then RventRot:=RventRot+(RVentnmax-RventRot)*RVentSpeed*dt else RventRot:=RventRot*(1-RVentSpeed*dt); diff --git a/Train.cpp b/Train.cpp index dfb5b21b..295535e0 100644 --- a/Train.cpp +++ b/Train.cpp @@ -349,6 +349,14 @@ PyObject *TTrain::GetTrainState() PyDict_SetItemString(dict, "manual_brake", PyGetBool(mvOccupied->ManualBrakePos > 0)); PyDict_SetItemString(dict, "pantpress", PyGetFloat(mvControlled->PantPress)); PyDict_SetItemString(dict, "trainnumber", PyGetString(DynamicObject->Mechanik->TrainName().c_str())); + PyDict_SetItemString(dict, "velnext", PyGetFloat(DynamicObject->Mechanik->VelNext)); + PyDict_SetItemString(dict, "actualproximitydist", PyGetFloat(DynamicObject->Mechanik->ActualProximityDist)); + PyDict_SetItemString(dict, "velsignallast", PyGetFloat(DynamicObject->Mechanik->VelSignalLast)); + PyDict_SetItemString(dict, "vellimitlast", PyGetFloat(DynamicObject->Mechanik->VelLimitLast)); + PyDict_SetItemString(dict, "velroad", PyGetFloat(DynamicObject->Mechanik->VelRoad)); + PyDict_SetItemString(dict, "velsignalnext", PyGetFloat(DynamicObject->Mechanik->VelSignalNext)); + PyDict_SetItemString(dict, "battery", PyGetBool(mvControlled->Battery)); + return dict; } From 7d7300ec2bf9d81d067346560fffd23ac3fad368 Mon Sep 17 00:00:00 2001 From: antonisauren Date: Wed, 28 Dec 2016 16:54:46 +0100 Subject: [PATCH 3/7] =?UTF-8?q?Cofka=20czekania=20na=20W4=20przy=20op?= =?UTF-8?q?=C3=B3=C5=BAnieniu.=20Prawdopodobnie=20blokowa=C5=82o=20AI.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Driver.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Driver.cpp b/Driver.cpp index 08790e2c..04d052df 100644 --- a/Driver.cpp +++ b/Driver.cpp @@ -986,8 +986,10 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN if (TrainParams->IsTimeToGo(GlobalTime->hh, GlobalTime->mm)) { // z dalszą akcją czekamy do godziny odjazdu + /* potencjalny problem z ruszaniem z w4 if (TrainParams->CheckTrainLatency() < 0) WaitingSet(20); //Jak spóźniony to czeka 20s + */ // iDrivigFlags|=moveLate1; //oflagować, gdy odjazd ze // spóźnieniem, będzie jechał forsowniej fLastStopExpDist = From 7e4eb4ffe2f342e03d6e5ac1c763f52dcaca7019 Mon Sep 17 00:00:00 2001 From: antonisauren Date: Wed, 28 Dec 2016 18:17:22 +0100 Subject: [PATCH 4/7] Lampka hamowania ED: i-dynamicbrake Hebelek baterii: battery_sw --- Train.cpp | 21 ++++++++++++++++++--- Train.h | 2 ++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/Train.cpp b/Train.cpp index 295535e0..131668c1 100644 --- a/Train.cpp +++ b/Train.cpp @@ -467,6 +467,10 @@ void TTrain::OnKeyDown(int cKey) if (mvOccupied->BatterySwitch(true)) // bateria potrzebna np. do zapalenia świateł { dsbSwitch->Play(0, 0, 0); + if (ggBatteryButton.SubModel) + { + ggBatteryButton.PutValue(1); + } if (mvOccupied->LightsPosNo > 0) { SetLights(); @@ -1508,6 +1512,10 @@ void TTrain::OnKeyDown(int cKey) { // ewentualnie zablokować z FIZ, // np. w samochodach się nie // odłącza akumulatora + if (ggBatteryButton.SubModel) + { + ggBatteryButton.PutValue(0); + } dsbSwitch->Play(0, 0, 0); // mvOccupied->SecuritySystem.Status=0; mvControlled->PantFront(false); @@ -3673,6 +3681,7 @@ bool TTrain::Update() (mvOccupied->EpFuse)); // napiecie na nastawniku hamulcowym btLampkaForward.Turn(mvControlled->ActiveDir > 0); // jazda do przodu btLampkaBackward.Turn(mvControlled->ActiveDir < 0); // jazda do tyłu + btLampkaED.Turn(mvControlled->DynamicBrakeFlag); //hamulec ED } else { // gdy bateria wyłączona @@ -3686,6 +3695,7 @@ bool TTrain::Update() btLampkaNapNastHam.TurnOff(); btLampkaForward.TurnOff(); btLampkaBackward.TurnOff(); + btLampkaED.TurnOff(); } // McZapkie-080602: obroty (albo translacje) regulatorow if (ggMainCtrl.SubModel) @@ -4958,6 +4968,7 @@ bool TTrain::Update() // hunter-091012 ggCabLightButton.Update(); ggCabLightDimButton.Update(); + ggBatteryButton.Update(); //------ if (ActiveUniversal4) ggUniversal4Button.PermIncValue(dt); @@ -5437,6 +5448,7 @@ bool TTrain::InitializeCab(int NewCabNo, AnsiString asFileName) // hunter-091012 ggCabLightButton.Clear(); ggCabLightDimButton.Clear(); + ggBatteryButton.Clear(); //------- ggUniversal4Button.Clear(); ggFuseButton.Clear(); @@ -5522,6 +5534,7 @@ bool TTrain::InitializeCab(int NewCabNo, AnsiString asFileName) btLampkaWylSzybkiB.Clear(); btLampkaForward.Clear(); btLampkaBackward.Clear(); + btLampkaED.Clear(); btCabLight.Clear(); // hunter-171012 ggLeftLightButton.Clear(); ggRightLightButton.Clear(); @@ -5657,9 +5670,9 @@ bool TTrain::InitializeCab(int NewCabNo, AnsiString asFileName) else if (str == AnsiString("cablight_sw:")) // hunter-091012: swiatlo w kabinie ggCabLightButton.Load(Parser, DynamicObject->mdKabina); else if (str == AnsiString("cablightdim_sw:")) - ggCabLightDimButton.Load( - Parser, - DynamicObject->mdKabina); // hunter-091012: przyciemnienie swiatla w kabinie + ggCabLightDimButton.Load(Parser, DynamicObject->mdKabina); // hunter-091012: przyciemnienie swiatla w kabinie + else if (str == AnsiString("battery_sw:")) + ggBatteryButton.Load(Parser, DynamicObject->mdKabina); // ABu 090305: uniwersalne przyciski lub inne rzeczy else if (str == AnsiString("universal1:")) ggUniversal1Button.Load(Parser, DynamicObject->mdKabina, DynamicObject->mdModel); @@ -5919,6 +5932,8 @@ bool TTrain::InitializeCab(int NewCabNo, AnsiString asFileName) btLampkaBocznik4.Load(Parser, DynamicObject->mdKabina); else if (str == AnsiString("i-braking:")) btLampkaHamienie.Load(Parser, DynamicObject->mdKabina); + else if (str == AnsiString("i-dynamicbrake:")) + btLampkaED.Load(Parser, DynamicObject->mdKabina); else if (str == AnsiString("i-braking-ezt:")) btLampkaHamowanie1zes.Load(Parser, DynamicObject->mdKabina); else if (str == AnsiString("i-braking-ezt2:")) diff --git a/Train.h b/Train.h index c69cae69..44e490c0 100644 --- a/Train.h +++ b/Train.h @@ -189,6 +189,7 @@ class TTrain TGauge ggCabLightButton; // hunter-091012: przelacznik oswietlania kabiny TGauge ggCabLightDimButton; // hunter-091012: przelacznik przyciemnienia + TGauge ggBatteryButton; // Stele 161228 hebelek baterii // oswietlenia kabiny // NBMX wrzesien 2003 - obsluga drzwi @@ -255,6 +256,7 @@ class TTrain TButton btLampkaBocznik4; TButton btLampkaRadiotelefon; TButton btLampkaHamienie; + TButton btLampkaED; //Stele 161228 hamowanie elektrodynamiczne TButton btLampkaJazda; // Ra: nie używane // KURS90 TButton btLampkaBoczniki; From df30d15cc836f87846f859924c7507c1f140b2e1 Mon Sep 17 00:00:00 2001 From: antonisauren Date: Fri, 6 Jan 2017 14:31:34 +0100 Subject: [PATCH 5/7] =?UTF-8?q?Porz=C4=85dki=20w=20zewn=C4=99trznych=20rea?= =?UTF-8?q?lsound.=20W=20ko=C5=84cu=20poddaj=C4=85=20si=C4=99=20translacji?= =?UTF-8?q?=20pojazdu.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DynObj.cpp | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/DynObj.cpp b/DynObj.cpp index cd334add..118539fa 100644 --- a/DynObj.cpp +++ b/DynObj.cpp @@ -3372,24 +3372,24 @@ bool TDynamicObject::Update(double dt, double dt1) // NBMX Obsluga drzwi, MC: zuniwersalnione if ((dDoorMoveL < MoverParameters->DoorMaxShiftL) && (MoverParameters->DoorLeftOpened)) { - rsDoorOpen.Play(vol, 0, MechInside, vPosition); + rsDoorOpen.Play(1, 0, MechInside, vPosition); dDoorMoveL += dt1 * 0.5 * MoverParameters->DoorOpenSpeed; } if ((dDoorMoveL > 0) && (!MoverParameters->DoorLeftOpened)) { - rsDoorClose.Play(vol, 0, MechInside, vPosition); + rsDoorClose.Play(1, 0, MechInside, vPosition); dDoorMoveL -= dt1 * MoverParameters->DoorCloseSpeed; if (dDoorMoveL < 0) dDoorMoveL = 0; } if ((dDoorMoveR < MoverParameters->DoorMaxShiftR) && (MoverParameters->DoorRightOpened)) { - rsDoorOpen.Play(vol, 0, MechInside, vPosition); + rsDoorOpen.Play(1, 0, MechInside, vPosition); dDoorMoveR += dt1 * 0.5 * MoverParameters->DoorOpenSpeed; } if ((dDoorMoveR > 0) && (!MoverParameters->DoorRightOpened)) { - rsDoorClose.Play(vol, 0, MechInside, vPosition); + rsDoorClose.Play(1, 0, MechInside, vPosition); dDoorMoveR -= dt1 * MoverParameters->DoorCloseSpeed; if (dDoorMoveR < 0) dDoorMoveR = 0; @@ -5189,20 +5189,12 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName, str = Parser->GetNextSymbol(); sPantUp.Init(str.c_str(), 50, GetPosition().x, GetPosition().y, GetPosition().z, true); - sPantUp.AM = 50000; - sPantUp.AA = -1 * (105 - random(10)) / 100; - sPantUp.FM = 1.0; - sPantUp.FA = 0.0; } if (str == AnsiString("pantographdown:")) // pliki dzwiekow pantografow { str = Parser->GetNextSymbol(); sPantDown.Init(str.c_str(), 50, GetPosition().x, GetPosition().y, GetPosition().z, true); - sPantDown.AM = 50000; - sPantDown.AA = -1 * (105 - random(10)) / 100; - sPantDown.FM = 1.0; - sPantDown.FA = 0.0; } else if (str == AnsiString("compressor:")) // pliki ze sprezarka { @@ -5225,22 +5217,13 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName, else if (str == AnsiString("dooropen:")) { str = Parser->GetNextSymbol(); - rsDoorOpen.Init(str.c_str(), 50, GetPosition().x, GetPosition().y, - GetPosition().z, true); - rsDoorOpen.AM = 50000; - rsDoorOpen.AA = -1 * (105 - random(10)) / 100; - rsDoorOpen.FM = 1.0; - rsDoorOpen.FA = 0.0; + rsDoorOpen.Init(str.c_str(), 50, GetPosition().x, GetPosition().y, GetPosition().z, true); } else if (str == AnsiString("doorclose:")) { str = Parser->GetNextSymbol(); rsDoorClose.Init(str.c_str(), 50, GetPosition().x, GetPosition().y, GetPosition().z, true); - rsDoorClose.AM = 50000; - rsDoorClose.AA = -1 * (105 - random(10)) / 100; - rsDoorClose.FM = 1.0; - rsDoorClose.FA = 0.0; } else if (str == AnsiString("sand:")) // pliki z piasecznica { From f17f3b0a3642e2008edab6979f8662550c1261dd Mon Sep 17 00:00:00 2001 From: antonisauren Date: Fri, 6 Jan 2017 14:32:07 +0100 Subject: [PATCH 6/7] =?UTF-8?q?Python:=20si=C5=82a=20trakcyjna=20dla=20wsz?= =?UTF-8?q?ystkich=20typ=C3=B3w=20fiz.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Train.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Train.cpp b/Train.cpp index 131668c1..d421e5de 100644 --- a/Train.cpp +++ b/Train.cpp @@ -356,6 +356,7 @@ PyObject *TTrain::GetTrainState() PyDict_SetItemString(dict, "velroad", PyGetFloat(DynamicObject->Mechanik->VelRoad)); PyDict_SetItemString(dict, "velsignalnext", PyGetFloat(DynamicObject->Mechanik->VelSignalNext)); PyDict_SetItemString(dict, "battery", PyGetBool(mvControlled->Battery)); + PyDict_SetItemString(dict, "tractionforce", PyGetFloat(DynamicObject->MoverParameters->Ft)); return dict; From ba7cb4db5397018b24101aa10be5ca5a3befde31 Mon Sep 17 00:00:00 2001 From: antonisauren Date: Tue, 10 Jan 2017 23:53:53 +0100 Subject: [PATCH 7/7] 482 --- Driver.cpp | 2 +- EU07.bpr | 11 ++--------- Globals.cpp | 4 ++-- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/Driver.cpp b/Driver.cpp index 04d052df..a5abbe1e 100644 --- a/Driver.cpp +++ b/Driver.cpp @@ -1382,7 +1382,7 @@ void TController::TablePurger() { // odtykacz: usuwa mniej istotne pozycje ze środka tabelki, aby uniknąć zatkania //(np. brak ograniczenia pomiędzy zwrotnicami, usunięte sygnały, minięte odcinki łuku) if (Global::iWriteLogEnabled & 8) - WriteLog("TablePurger: Czyszczenie tableki."); + WriteLog("TablePurger: Czyszczenie tabelki."); int i, j, k = iLast - iFirst; // może być 15 albo 16 pozycji, ostatniej nie ma co sprawdzać if (k < 0) k += iSpeedTableSize; // ilość pozycji do przeanalizowania diff --git a/EU07.bpr b/EU07.bpr index f2998702..aa8d8a01 100644 --- a/EU07.bpr +++ b/EU07.bpr @@ -60,7 +60,7 @@ AutoIncBuild=0 MajorVer=16 MinorVer=0 Release=1173 -Build=481 +Build=482 Debug=1 PreRelease=0 Special=0 @@ -72,7 +72,7 @@ CodePage=1250 [Version Info Keys] CompanyName=EU07 Team FileDescription=MaSzyna EU07-424 -FileVersion=16.0.1173.481 +FileVersion=16.0.1173.482 InternalName=DP+SPKS+asynch+python LegalCopyright= LegalTrademarks= @@ -81,13 +81,6 @@ ProductName=MaSzyna EU07-424 ProductVersion=16.0 Comments= -[Excluded Packages] -$(BCB)\Bin\bcbsmp50.bpl=Borland C++ Sample Components -$(BCB)\Bin\dclqrt50.bpl=QuickReport Components -C:\WINDOWS\system32\ibsmp50.bpl=Borland C++ InterBase Alerter Component -$(BCB)\Bin\dcltee50.bpl=TeeChart 5.0 Components -$(BCB)\Bin\applet50.bpl=Borland Control Panel Applet Package - [HistoryLists\hlIncludePath] Count=2 Item0=Console;opengl;McZapkie;$(BCB)\include;$(BCB)\include\vcl;python\include diff --git a/Globals.cpp b/Globals.cpp index 39fe3f4f..ff093a7d 100644 --- a/Globals.cpp +++ b/Globals.cpp @@ -49,9 +49,9 @@ double Global::fLuminance = 1.0; // jasno int Global::iReCompile = 0; // zwiększany, gdy trzeba odświeżyć siatki HWND Global::hWnd = NULL; // uchwyt okna int Global::iCameraLast = -1; -AnsiString Global::asRelease = "16.0.1172.481"; +AnsiString Global::asRelease = "16.0.1172.482"; AnsiString Global::asVersion = - "Compilation 2016-08-24, release " + Global::asRelease + "."; // tutaj, bo wysyłany + "Compilation 2017-01-10, release " + Global::asRelease + "."; // tutaj, bo wysyłany int Global::iViewMode = 0; // co aktualnie widać: 0-kabina, 1-latanie, 2-sprzęgi, 3-dokumenty int Global::iTextMode = 0; // tryb pracy wyświetlacza tekstowego int Global::iScreenMode[12] = {0, 0, 0, 0, 0, 0,