16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-22 20:59:19 +02:00

Poprawka na parsowanie wpisu hamulca. Formatowanie plików.

This commit is contained in:
firleju
2017-01-13 18:48:37 +01:00
parent 7df7c8b76e
commit cb63982266
10 changed files with 2799 additions and 2613 deletions

4
.gitignore vendored
View File

@@ -64,3 +64,7 @@ MaSzyna.sln
MaSzyna.vcxproj MaSzyna.vcxproj
MaSzyna.vcxproj.filters MaSzyna.vcxproj.filters
*.suo *.suo
EU07.tds
MaSzyna.VC.VC.opendb
MaSzyna.VC.db
.vs/

View File

@@ -1763,10 +1763,10 @@ TDynamicObject::Init(string Name, // nazwa pojazdu, np. "EU07-424"
// kropkę na koniec // kropkę na koniec
int kropka = MoreParams.find("."); // znajdź kropke int kropka = MoreParams.find("."); // znajdź kropke
string ActPar; // na parametry string ActPar; // na parametry
while (kropka > 0) // jesli sa kropki jeszcze while (kropka != std::string::npos) // jesli sa kropki jeszcze
{ {
int dlugosc = MoreParams.length(); int dlugosc = MoreParams.length();
ActPar = ToUpper(MoreParams.substr(0, kropka - 1)); // pierwszy parametr; ActPar = ToUpper(MoreParams.substr(0, kropka)); // pierwszy parametr;
MoreParams = MoreParams.substr(kropka + 1, dlugosc - kropka); // reszta do dalszej MoreParams = MoreParams.substr(kropka + 1, dlugosc - kropka); // reszta do dalszej
// obrobki // obrobki
kropka = MoreParams.find("."); kropka = MoreParams.find(".");

View File

@@ -41,8 +41,7 @@
<OPTIONS> <OPTIONS>
<IDLCFLAGS value="-src_suffix cpp -DGLEW_STATIC -D_DEBUG -IConsole -Iopengl -IMcZapkie <IDLCFLAGS value="-src_suffix cpp -DGLEW_STATIC -D_DEBUG -IConsole -Iopengl -IMcZapkie
-I$(BCB)\include -I$(BCB)\include\vcl -Ipython\include -boa"/> -I$(BCB)\include -I$(BCB)\include\vcl -Ipython\include -boa"/>
<CFLAG1 value="-Od -H=$(BCB)\lib\vcl50.csm -Hc -w- -Vx -Ve -X- -r- -a1 -6 -b- -k -y -v <CFLAG1 value="-Od -w- -Vx -Ve -X- -r- -a1 -6 -b- -k -y -v -vi- -c -tW -tWM"/>
-vi- -c -tW -tWM"/>
<PFLAGS value="-$Y+ -$W -$O- -v -JPHNE -M"/> <PFLAGS value="-$Y+ -$W -$O- -v -JPHNE -M"/>
<RFLAGS value=""/> <RFLAGS value=""/>
<AFLAGS value="/mx /w2 /zi"/> <AFLAGS value="/mx /w2 /zi"/>
@@ -58,9 +57,9 @@
IncludeVerInfo=1 IncludeVerInfo=1
AutoIncBuild=0 AutoIncBuild=0
MajorVer=16 MajorVer=16
MinorVer=0 MinorVer=1
Release=1173 Release=1174
Build=481 Build=483
Debug=1 Debug=1
PreRelease=0 PreRelease=0
Special=0 Special=0
@@ -72,13 +71,13 @@ CodePage=1250
[Version Info Keys] [Version Info Keys]
CompanyName=EU07 Team CompanyName=EU07 Team
FileDescription=MaSzyna EU07-424 FileDescription=MaSzyna EU07-424
FileVersion=16.0.1173.481 FileVersion=16.1.1174.483
InternalName=DP+SPKS+asynch+python InternalName=DP+SPKS+asynch+python
LegalCopyright= LegalCopyright=
LegalTrademarks= LegalTrademarks=
OriginalFilename=eu07.exe OriginalFilename=eu07.exe
ProductName=MaSzyna EU07-424 ProductName=MaSzyna EU07-424
ProductVersion=16.0 ProductVersion=16.1
Comments= Comments=
[Excluded Packages] [Excluded Packages]

View File

@@ -54,9 +54,9 @@ double Global::fLuminance = 1.0; // jasno
int Global::iReCompile = 0; // zwiêkszany, gdy trzeba odœwie¿yæ siatki int Global::iReCompile = 0; // zwiêkszany, gdy trzeba odœwie¿yæ siatki
HWND Global::hWnd = NULL; // uchwyt okna HWND Global::hWnd = NULL; // uchwyt okna
int Global::iCameraLast = -1; int Global::iCameraLast = -1;
std::string Global::asRelease = "16.0.1172.481"; std::string Global::asRelease = "16.1.1174.483";
std::string Global::asVersion = std::string Global::asVersion =
"Compilation 2016-08-24, release " + Global::asRelease + "."; // tutaj, bo wysy³any "Compilation 2017-01-13, 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::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::iTextMode = 0; // tryb pracy wyœwietlacza tekstowego
int Global::iScreenMode[12] = {0, 0, 0, 0, 0, 0, int Global::iScreenMode[12] = {0, 0, 0, 0, 0, 0,

View File

@@ -1809,7 +1809,7 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
if (int2 != string::npos) // yB: jesli znalazl kropke, to ja przetwarza jako parametry if (int2 != string::npos) // yB: jesli znalazl kropke, to ja przetwarza jako parametry
{ {
int dlugosc = str4.length(); int dlugosc = str4.length();
int1 = atoi(str4.substr(0, int2 - 1).c_str()); // niech sprzegiem bedzie do kropki cos int1 = atoi(str4.substr(0, int2).c_str()); // niech sprzegiem bedzie do kropki cos
str4 = str4.substr(int2 + 1, dlugosc - int2); str4 = str4.substr(int2 + 1, dlugosc - int2);
} }
else else

View File

@@ -10,12 +10,13 @@ http://mozilla.org/MPL/2.0/.
#ifndef MoverH #ifndef MoverH
#define MoverH #define MoverH
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
//#include "Mover.hpp" //Q: 20160805 - odlaczenie pliku fizyki .pas od kompilacji //#include "Mover.hpp" //Q: 20160805 -
//odlaczenie pliku fizyki .pas od kompilacji
#include "Oerlikon_ESt.h" #include "Oerlikon_ESt.h"
#include "hamulce.h" #include "hamulce.h"
#include <string>
#include "mctools.h" #include "mctools.h"
#include <map> #include <map>
#include <string>
/* /*
MaSzyna EU07 locomotive simulator MaSzyna EU07 locomotive simulator
@@ -23,7 +24,6 @@ Copyright (C) 2001-2004 Maciej Czapkiewicz and others
*/ */
/* /*
(C) McZapkie v.2004.02 (C) McZapkie v.2004.02
Co brakuje: Co brakuje:
@@ -62,9 +62,12 @@ zwiekszenie nacisku przy duzych predkosciach w hamulcach Oerlikona
20. poprawione hamulce elektropneumatyczne 20. poprawione hamulce elektropneumatyczne
21. poprawione hamowanie przeciwposlizgowe i odluzniacz 21. poprawione hamowanie przeciwposlizgowe i odluzniacz
22. dodany model mechanicznego napedu recznego (drezyna) 22. dodany model mechanicznego napedu recznego (drezyna)
23. poprawiona szybkosc hamowania pomocniczego i przeciwposlizgowego, odlaczanie silnikow, odlaczanie bocznikow 23. poprawiona szybkosc hamowania pomocniczego i przeciwposlizgowego, odlaczanie silnikow,
24. wprowadzone systemy zabezpieczenia: SHP, Czuwak, sygnalizacja kabinowa (nie dzialaja w DebugMode). odlaczanie bocznikow
25. poprawiona predkosc propagacji fali cisnienia (normalizacja przez kwadrat dlugosci) //to jest zdeka liniowe 24. wprowadzone systemy zabezpieczenia: SHP, Czuwak, sygnalizacja kabinowa (nie dzialaja w
DebugMode).
25. poprawiona predkosc propagacji fali cisnienia (normalizacja przez kwadrat dlugosci) //to jest
zdeka liniowe
26. uwzgledniona masa ladunku, przesuniecie w/m toru ruchu 26. uwzgledniona masa ladunku, przesuniecie w/m toru ruchu
27. lampy/sygnaly przednie/tylne 27. lampy/sygnaly przednie/tylne
28. wprowadzona pozycja odciecia hamulca (yB: tja, ale oerlikona....) 28. wprowadzona pozycja odciecia hamulca (yB: tja, ale oerlikona....)
@@ -143,7 +146,8 @@ static int const ctrain_power = 8; //przewody zasilaj
static int const ctrain_passenger = 16; // mostek przejściowy static int const ctrain_passenger = 16; // mostek przejściowy
static int const ctrain_scndpneumatic = 32; // przewody 8 atm (żółte; zasilanie powietrzem) static int const ctrain_scndpneumatic = 32; // przewody 8 atm (żółte; zasilanie powietrzem)
static int const ctrain_heating = 64; // przewody ogrzewania WN static int const ctrain_heating = 64; // przewody ogrzewania WN
static int const ctrain_depot = 128; //nie rozłączalny podczas zwykłych manewrów (międzyczłonowy), we wpisie wartość ujemna static int const ctrain_depot =
128; // nie rozłączalny podczas zwykłych manewrów (międzyczłonowy), we wpisie wartość ujemna
/*typ hamulca elektrodynamicznego*/ /*typ hamulca elektrodynamicznego*/
static int const dbrake_none = 0; static int const dbrake_none = 0;
@@ -252,7 +256,8 @@ struct TLocation
double X; double X;
double Y; double Y;
double Z; /*lokacja*/ double Z; /*lokacja*/
inline TLocation() { inline TLocation()
{
X, Y, Z = 0.0; X, Y, Z = 0.0;
} }
}; };
@@ -261,7 +266,8 @@ struct TRotation
double Rx; double Rx;
double Ry; double Ry;
double Rz; /*rotacja*/ double Rz; /*rotacja*/
inline TRotation() { inline TRotation()
{
Rx, Ry, Rz = 0.0; Rx, Ry, Rz = 0.0;
} }
}; };
@@ -284,7 +290,8 @@ struct TCommand
double Value1; double Value1;
double Value2; /*argumenty komendy*/ double Value2; /*argumenty komendy*/
TLocation Location; TLocation Location;
inline TCommand() { inline TCommand()
{
Command = ""; Command = "";
Value1, Value2 = 0.0; Value1, Value2 = 0.0;
Location = TLocation(); Location = TLocation();
@@ -298,7 +305,8 @@ struct TTrackShape
double Len; double Len;
double dHtrack; double dHtrack;
double dHrail; double dHrail;
inline TTrackShape() { inline TTrackShape()
{
R, Len, dHrail, dHtrack = 0.0; R, Len, dHrail, dHtrack = 0.0;
} }
}; };
@@ -311,7 +319,8 @@ struct TTrackParam
int QualityFlag; int QualityFlag;
int DamageFlag; int DamageFlag;
double Velmax; /*dla uzytku maszynisty w ai_driver*/ double Velmax; /*dla uzytku maszynisty w ai_driver*/
inline TTrackParam() { inline TTrackParam()
{
Width, friction, Velmax = 0.0; Width, friction, Velmax = 0.0;
CategoryFlag, QualityFlag, DamageFlag = 0; CategoryFlag, QualityFlag, DamageFlag = 0;
} }
@@ -323,7 +332,8 @@ struct TTractionParam
double TractionFreq; /*czestotliwosc*/ double TractionFreq; /*czestotliwosc*/
double TractionMaxCurrent; /*obciazalnosc*/ double TractionMaxCurrent; /*obciazalnosc*/
double TractionResistivity; /*rezystancja styku*/ double TractionResistivity; /*rezystancja styku*/
inline TTractionParam() { inline TTractionParam()
{
TractionVoltage, TractionFreq = 0.0; TractionVoltage, TractionFreq = 0.0;
TractionMaxCurrent, TractionResistivity = 0.0; TractionMaxCurrent, TractionResistivity = 0.0;
} }
@@ -331,13 +341,86 @@ struct TTractionParam
/*powyzsze parametry zwiazane sa z torem po ktorym aktualnie pojazd jedzie*/ /*powyzsze parametry zwiazane sa z torem po ktorym aktualnie pojazd jedzie*/
/*typy hamulcow zespolonych*/ /*typy hamulcow zespolonych*/
enum TBrakeSystem { Individual, Pneumatic, ElectroPneumatic }; enum TBrakeSystem
{
Individual,
Pneumatic,
ElectroPneumatic
};
/*podtypy hamulcow zespolonych*/ /*podtypy hamulcow zespolonych*/
enum TBrakeSubSystem { ss_None, ss_W, ss_K, ss_KK, ss_Hik, ss_ESt, ss_KE, ss_LSt, ss_MT, ss_Dako }; enum TBrakeSubSystem
enum TBrakeValve { NoValve, W, W_Lu_VI, W_Lu_L, W_Lu_XR, K, Kg, Kp, Kss, Kkg, Kkp, Kks, Hikg1, Hikss, Hikp1, KE, SW, EStED, NESt3, ESt3, LSt, ESt4, ESt3AL2, EP1, EP2, M483, CV1_L_TR, CV1, CV1_R, Other }; {
enum TBrakeHandle { NoHandle, West, FV4a, M394, M254, FVel1, FVel6, D2, Knorr, FD1, BS2, testH, St113, MHZ_P, MHZ_T, MHZ_EN57 }; ss_None,
ss_W,
ss_K,
ss_KK,
ss_Hik,
ss_ESt,
ss_KE,
ss_LSt,
ss_MT,
ss_Dako
};
enum TBrakeValve
{
NoValve,
W,
W_Lu_VI,
W_Lu_L,
W_Lu_XR,
K,
Kg,
Kp,
Kss,
Kkg,
Kkp,
Kks,
Hikg1,
Hikss,
Hikp1,
KE,
SW,
EStED,
NESt3,
ESt3,
LSt,
ESt4,
ESt3AL2,
EP1,
EP2,
M483,
CV1_L_TR,
CV1,
CV1_R,
Other
};
enum TBrakeHandle
{
NoHandle,
West,
FV4a,
M394,
M254,
FVel1,
FVel6,
D2,
Knorr,
FD1,
BS2,
testH,
St113,
MHZ_P,
MHZ_T,
MHZ_EN57
};
/*typy hamulcow indywidualnych*/ /*typy hamulcow indywidualnych*/
enum TLocalBrake { NoBrake, ManualBrake, PneumaticBrake, HydraulicBrake }; enum TLocalBrake
{
NoBrake,
ManualBrake,
PneumaticBrake,
HydraulicBrake
};
/*dla osob/towar: opoznienie hamowania/odhamowania*/ /*dla osob/towar: opoznienie hamowania/odhamowania*/
typedef double TBrakeDelayTable[4]; typedef double TBrakeDelayTable[4];
@@ -347,7 +430,8 @@ struct TBrakePressure
double BrakePressureVal; double BrakePressureVal;
double FlowSpeedVal; double FlowSpeedVal;
TBrakeSystem BrakeType; TBrakeSystem BrakeType;
inline TBrakePressure() { inline TBrakePressure()
{
BrakeType = Pneumatic; BrakeType = Pneumatic;
PipePressureVal, BrakePressureVal, FlowSpeedVal = 0.0; PipePressureVal, BrakePressureVal, FlowSpeedVal = 0.0;
} }
@@ -355,15 +439,37 @@ struct TBrakePressure
typedef std::map<int, TBrakePressure> TBrakePressureTable; typedef std::map<int, TBrakePressure> TBrakePressureTable;
/*typy napedow*/ /*typy napedow*/
enum TEngineTypes { None, Dumb, WheelsDriven, ElectricSeriesMotor, ElectricInductionMotor, DieselEngine, SteamEngine, DieselElectric }; enum TEngineTypes
{
None,
Dumb,
WheelsDriven,
ElectricSeriesMotor,
ElectricInductionMotor,
DieselEngine,
SteamEngine,
DieselElectric
};
/*postac dostarczanej energii*/ /*postac dostarczanej energii*/
enum TPowerType { NoPower, BioPower, MechPower, ElectricPower, SteamPower }; enum TPowerType
{
NoPower,
BioPower,
MechPower,
ElectricPower,
SteamPower
};
/*rodzaj paliwa*/ /*rodzaj paliwa*/
enum TFuelType { Undefined, Coal, Oil }; enum TFuelType
{
Undefined,
Coal,
Oil
};
/*rodzaj rusztu*/ /*rodzaj rusztu*/
struct TGrateType { struct TGrateType
{
TFuelType FuelType; TFuelType FuelType;
double GrateSurface; double GrateSurface;
double FuelTransportSpeed; double FuelTransportSpeed;
@@ -378,11 +484,13 @@ struct TGrateType {
//} //}
}; };
/*rodzaj kotla*/ /*rodzaj kotla*/
struct TBoilerType { struct TBoilerType
{
double BoilerVolume; double BoilerVolume;
double BoilerHeatSurface; double BoilerHeatSurface;
double SuperHeaterSurface; double SuperHeaterSurface;
double MaxWaterVolume; double MinWaterVolume; double MaxWaterVolume;
double MinWaterVolume;
double MaxPressure; double MaxPressure;
// inline TBoilerType() { // inline TBoilerType() {
// BoilerVolume = 0.0; // BoilerVolume = 0.0;
@@ -394,11 +502,14 @@ struct TBoilerType {
//} //}
}; };
/*rodzaj odbieraka pradu*/ /*rodzaj odbieraka pradu*/
struct TCurrentCollector { struct TCurrentCollector
{
long CollectorsNo; // musi być tu, bo inaczej się kopie long CollectorsNo; // musi być tu, bo inaczej się kopie
double MinH; double MaxH; //zakres ruchu pantografu, nigdzie nie używany double MinH;
double MaxH; // zakres ruchu pantografu, nigdzie nie używany
double CSW; // szerokość części roboczej (styku) ślizgacza double CSW; // szerokość części roboczej (styku) ślizgacza
double MinV; double MaxV; //minimalne i maksymalne akceptowane napięcie double MinV;
double MaxV; // minimalne i maksymalne akceptowane napięcie
double OVP; // czy jest przekaznik nadnapieciowy double OVP; // czy jest przekaznik nadnapieciowy
double InsetV; // minimalne napięcie wymagane do załączenia double InsetV; // minimalne napięcie wymagane do załączenia
double MinPress; // minimalne ciśnienie do załączenia WS double MinPress; // minimalne ciśnienie do załączenia WS
@@ -410,8 +521,17 @@ struct TCurrentCollector {
//} //}
}; };
/*typy źródeł mocy*/ /*typy źródeł mocy*/
enum TPowerSource { NotDefined, InternalSource, Transducer, Generator, Accumulator, CurrentCollector, PowerCable, Heater }; enum TPowerSource
{
NotDefined,
InternalSource,
Transducer,
Generator,
Accumulator,
CurrentCollector,
PowerCable,
Heater
};
struct _mover__1 struct _mover__1
{ {
@@ -446,44 +566,35 @@ struct TPowerParameters
double MaxCurrent; double MaxCurrent;
double IntR; double IntR;
TPowerSource SourceType; TPowerSource SourceType;
union union {
{
struct struct
{ {
_mover__3 RHeater; _mover__3 RHeater;
}; };
struct struct
{ {
_mover__2 RPowerCable; _mover__2 RPowerCable;
}; };
struct struct
{ {
TCurrentCollector CollectorParameters; TCurrentCollector CollectorParameters;
}; };
struct struct
{ {
_mover__1 RAccumulator; _mover__1 RAccumulator;
}; };
struct struct
{ {
TEngineTypes GeneratorEngine; TEngineTypes GeneratorEngine;
}; };
struct struct
{ {
double InputVoltage; double InputVoltage;
}; };
struct struct
{ {
TPowerType PowerType; TPowerType PowerType;
}; };
}; };
inline TPowerParameters() inline TPowerParameters()
{ {
@@ -548,7 +659,8 @@ struct TMotorParameters
double Isat; double Isat;
double fi0; // aproksymacja E(n)=fi*n} {dla dizla fi, mfi: predkosci przelozenia biegu <-> double fi0; // aproksymacja E(n)=fi*n} {dla dizla fi, mfi: predkosci przelozenia biegu <->
bool AutoSwitch; bool AutoSwitch;
TMotorParameters() { TMotorParameters()
{
mfi = 0.0; mfi = 0.0;
mIsat = 0.0; mIsat = 0.0;
mfi0 = 0.0; mfi0 = 0.0;
@@ -583,23 +695,38 @@ struct TTransmision
int NToothM; int NToothM;
int NToothW; int NToothW;
double Ratio; double Ratio;
TTransmision() { TTransmision()
{
NToothM, NToothW = 0; NToothM, NToothW = 0;
Ratio = 1.0; Ratio = 1.0;
} }
}; };
enum TCouplerType { NoCoupler, Articulated, Bare, Chain, Screw, Automatic }; 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 { struct TCoupling
{
/*parametry*/ /*parametry*/
double SpringKB; double SpringKC; double beta; /*stala sprezystosci zderzaka/sprzegu, %tlumiennosci */ double SpringKB;
double DmaxB; double FmaxB; double DmaxC; double FmaxC; /*tolerancja scisku/rozciagania, sila rozerwania*/ 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*/ TCouplerType CouplerType; /*typ sprzegu*/
/*zmienne*/ /*zmienne*/
int CouplingFlag; /*0 - wirtualnie, 1 - sprzegi, 2 - pneumatycznie, 4 - sterowanie, 8 - kabel mocy*/ int CouplingFlag; /*0 - wirtualnie, 1 - sprzegi, 2 - pneumatycznie, 4 - sterowanie, 8 - kabel
mocy*/
int AllowedFlag; // Ra: znaczenie jak wyżej, maska dostępnych int AllowedFlag; // Ra: znaczenie jak wyżej, maska dostępnych
bool Render; /*ABu: czy rysowac jak zaczepiony sprzeg*/ bool Render; /*ABu: czy rysowac jak zaczepiony sprzeg*/
double CoupleDist; /*ABu: optymalizacja - liczenie odleglosci raz na klatkę, bez iteracji*/ double CoupleDist; /*ABu: optymalizacja - liczenie odleglosci raz na klatkę, bez iteracji*/
@@ -611,9 +738,9 @@ struct TCoupling {
}; };
class TMoverParameters class TMoverParameters
{ // Ra: wrapper na kod pascalowy, przejmujący jego funkcje Q: 20160824 - juz nie wrapper a klasa bazowa :) { // Ra: wrapper na kod pascalowy, przejmujący jego funkcje Q: 20160824 - juz nie wrapper a klasa
// bazowa :)
public: public:
double dMoveLen; double dMoveLen;
std::string filename; std::string filename;
/*---opis lokomotywy, wagonu itp*/ /*---opis lokomotywy, wagonu itp*/
@@ -625,15 +752,19 @@ public:
int TrainType; /*Ra: powinno być szybciej niż string*/ int TrainType; /*Ra: powinno być szybciej niż string*/
TEngineTypes EngineType; /*typ napedu*/ TEngineTypes EngineType; /*typ napedu*/
TPowerParameters EnginePowerSource; /*zrodlo mocy dla silnikow*/ TPowerParameters EnginePowerSource; /*zrodlo mocy dla silnikow*/
TPowerParameters SystemPowerSource; /*zrodlo mocy dla systemow sterowania/przetwornic/sprezarek*/ TPowerParameters
SystemPowerSource; /*zrodlo mocy dla systemow sterowania/przetwornic/sprezarek*/
TPowerParameters HeatingPowerSource; /*zrodlo mocy dla ogrzewania*/ TPowerParameters HeatingPowerSource; /*zrodlo mocy dla ogrzewania*/
TPowerParameters AlterHeatPowerSource; /*alternatywne zrodlo mocy dla ogrzewania*/ TPowerParameters AlterHeatPowerSource; /*alternatywne zrodlo mocy dla ogrzewania*/
TPowerParameters LightPowerSource; /*zrodlo mocy dla oswietlenia*/ TPowerParameters LightPowerSource; /*zrodlo mocy dla oswietlenia*/
TPowerParameters AlterLightPowerSource; /*alternatywne mocy dla oswietlenia*/ TPowerParameters AlterLightPowerSource; /*alternatywne mocy dla oswietlenia*/
double Vmax; double Mass; double Power; /*max. predkosc kontrukcyjna, masa wlasna, moc*/ double Vmax;
double Mass;
double Power; /*max. predkosc kontrukcyjna, masa wlasna, moc*/
double Mred; /*Ra: zredukowane masy wirujące; potrzebne do obliczeń hamowania*/ double Mred; /*Ra: zredukowane masy wirujące; potrzebne do obliczeń hamowania*/
double TotalMass; /*wyliczane przez ComputeMass*/ double TotalMass; /*wyliczane przez ComputeMass*/
double HeatingPower; double LightPower; /*moc pobierana na ogrzewanie/oswietlenie*/ double HeatingPower;
double LightPower; /*moc pobierana na ogrzewanie/oswietlenie*/
double BatteryVoltage; /*Winger - baterie w elektrykach*/ double BatteryVoltage; /*Winger - baterie w elektrykach*/
bool Battery; /*Czy sa zalavzone baterie*/ bool Battery; /*Czy sa zalavzone baterie*/
bool EpFuse; /*Czy sa zalavzone baterie*/ bool EpFuse; /*Czy sa zalavzone baterie*/
@@ -653,7 +784,8 @@ public:
int NPoweredAxles; /*ilosc osi napednych liczona z powyzszego*/ int NPoweredAxles; /*ilosc osi napednych liczona z powyzszego*/
int NAxles; /*ilosc wszystkich osi j.w.*/ int NAxles; /*ilosc wszystkich osi j.w.*/
int BearingType; /*lozyska: 0 - slizgowe, 1 - toczne*/ int BearingType; /*lozyska: 0 - slizgowe, 1 - toczne*/
double ADist; double BDist; /*odlegosc osi oraz czopow skretu*/ double ADist;
double BDist; /*odlegosc osi oraz czopow skretu*/
/*hamulce:*/ /*hamulce:*/
int NBpA; /*ilosc el. ciernych na os: 0 1 2 lub 4*/ int NBpA; /*ilosc el. ciernych na os: 0 1 2 lub 4*/
int SandCapacity; /*zasobnik piasku [kg]*/ int SandCapacity; /*zasobnik piasku [kg]*/
@@ -667,7 +799,8 @@ public:
TBrake *Hamulec; TBrake *Hamulec;
TDriverHandle *Handle; TDriverHandle *Handle;
TDriverHandle *LocHandle; TDriverHandle *LocHandle;
TReservoir *Pipe; TReservoir *Pipe2; TReservoir *Pipe;
TReservoir *Pipe2;
TLocalBrake LocalBrake; /*rodzaj hamulca indywidualnego*/ TLocalBrake LocalBrake; /*rodzaj hamulca indywidualnego*/
TBrakePressureTable BrakePressureTable; /*wyszczegolnienie cisnien w rurze*/ TBrakePressureTable BrakePressureTable; /*wyszczegolnienie cisnien w rurze*/
@@ -680,13 +813,18 @@ public:
double TrackBrakeForce; /*sila nacisku hamulca szynowego*/ double TrackBrakeForce; /*sila nacisku hamulca szynowego*/
int BrakeMethod; /*flaga rodzaju hamulca*/ int BrakeMethod; /*flaga rodzaju hamulca*/
/*max. cisnienie w cyl. ham., stala proporcjonalnosci p-K*/ /*max. cisnienie w cyl. ham., stala proporcjonalnosci p-K*/
double HighPipePress; double LowPipePress; double DeltaPipePress; double HighPipePress;
double LowPipePress;
double DeltaPipePress;
/*max. i min. robocze cisnienie w przewodzie glownym oraz roznica miedzy nimi*/ /*max. i min. robocze cisnienie w przewodzie glownym oraz roznica miedzy nimi*/
double CntrlPipePress; // ciśnienie z zbiorniku sterującym double CntrlPipePress; // ciśnienie z zbiorniku sterującym
double BrakeVolume; double BrakeVVolume; double VeselVolume; double BrakeVolume;
double BrakeVVolume;
double VeselVolume;
/*pojemnosc powietrza w ukladzie hamulcowym, w ukladzie glownej sprezarki [m^3] */ /*pojemnosc powietrza w ukladzie hamulcowym, w ukladzie glownej sprezarki [m^3] */
int BrakeCylNo; /*ilosc cylindrow ham.*/ int BrakeCylNo; /*ilosc cylindrow ham.*/
double BrakeCylRadius; double BrakeCylDist; double BrakeCylRadius;
double BrakeCylDist;
double BrakeCylMult[3]; double BrakeCylMult[3];
int LoadFlag; int LoadFlag;
/*promien cylindra, skok cylindra, przekladnia hamulcowa*/ /*promien cylindra, skok cylindra, przekladnia hamulcowa*/
@@ -697,14 +835,17 @@ public:
int BrakeValveSize; int BrakeValveSize;
std::string BrakeValveParams; std::string BrakeValveParams;
double Spg; double Spg;
double MinCompressor; double MaxCompressor; double CompressorSpeed; double MinCompressor;
double MaxCompressor;
double CompressorSpeed;
/*cisnienie wlaczania, zalaczania sprezarki, wydajnosc sprezarki*/ /*cisnienie wlaczania, zalaczania sprezarki, wydajnosc sprezarki*/
TBrakeDelayTable BrakeDelay; /*opoznienie hamowania/odhamowania t/o*/ TBrakeDelayTable BrakeDelay; /*opoznienie hamowania/odhamowania t/o*/
int BrakeCtrlPosNo; /*ilosc pozycji hamulca*/ int BrakeCtrlPosNo; /*ilosc pozycji hamulca*/
/*nastawniki:*/ /*nastawniki:*/
int MainCtrlPosNo; /*ilosc pozycji nastawnika*/ int MainCtrlPosNo; /*ilosc pozycji nastawnika*/
int ScndCtrlPosNo; int ScndCtrlPosNo;
int LightsPosNo; int LightsDefPos; int LightsPosNo;
int LightsDefPos;
bool LightsWrap; bool LightsWrap;
int Lights[2][17]; // pozycje świateł, przód - tył, 1 .. 16 int Lights[2][17]; // pozycje świateł, przód - tył, 1 .. 16
bool ScndInMain; /*zaleznosc bocznika od nastawnika*/ bool ScndInMain; /*zaleznosc bocznika od nastawnika*/
@@ -713,7 +854,8 @@ public:
TSecuritySystem SecuritySystem; TSecuritySystem SecuritySystem;
/*-sekcja parametrow dla lokomotywy elektrycznej*/ /*-sekcja parametrow dla lokomotywy elektrycznej*/
TSchemeTable RList; /*lista rezystorow rozruchowych i polaczen silnikow, dla dizla: napelnienia*/ TSchemeTable
RList; /*lista rezystorow rozruchowych i polaczen silnikow, dla dizla: napelnienia*/
int RlistSize; int RlistSize;
TMotorParameters MotorParam[MotorParametersArraySize + 1]; TMotorParameters MotorParam[MotorParametersArraySize + 1];
/*rozne parametry silnika przy bocznikowaniach*/ /*rozne parametry silnika przy bocznikowaniach*/
@@ -725,14 +867,19 @@ public:
// end; // end;
double NominalVoltage; /*nominalne napiecie silnika*/ double NominalVoltage; /*nominalne napiecie silnika*/
double WindingRes; double WindingRes;
double u; //wspolczynnik tarcia yB wywalic!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! double u; // wspolczynnik tarcia yB
// wywalic!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
double CircuitRes; /*rezystancje silnika i obwodu*/ double CircuitRes; /*rezystancje silnika i obwodu*/
int IminLo; int IminHi; /*prady przelacznika automatycznego rozruchu, uzywane tez przez ai_driver*/ int IminLo;
int ImaxLo; int ImaxHi; /*maksymalny prad niskiego i wysokiego rozruchu*/ int IminHi; /*prady przelacznika automatycznego rozruchu, uzywane tez przez ai_driver*/
int ImaxLo;
int ImaxHi; /*maksymalny prad niskiego i wysokiego rozruchu*/
double nmax; /*maksymalna dop. ilosc obrotow /s*/ double nmax; /*maksymalna dop. ilosc obrotow /s*/
double InitialCtrlDelay; double CtrlDelay; /* -//- -//- miedzy kolejnymi poz.*/ double InitialCtrlDelay;
double CtrlDelay; /* -//- -//- miedzy kolejnymi poz.*/
double CtrlDownDelay; /* -//- -//- przy schodzeniu z poz.*/ /*hunter-101012*/ double CtrlDownDelay; /* -//- -//- przy schodzeniu z poz.*/ /*hunter-101012*/
int FastSerialCircuit;/*0 - po kolei zamyka styczniki az do osiagniecia szeregowej, 1 - natychmiastowe wejscie na szeregowa*/ /*hunter-111012*/ int FastSerialCircuit;
/*0 - po kolei zamyka styczniki az do osiagniecia szeregowej, 1 - natychmiastowe wejscie na szeregowa*/ /*hunter-111012*/
int AutoRelayType; /*0 -brak, 1 - jest, 2 - opcja*/ int AutoRelayType; /*0 -brak, 1 - jest, 2 - opcja*/
bool CoupledCtrl; /*czy mainctrl i scndctrl sa sprzezone*/ bool CoupledCtrl; /*czy mainctrl i scndctrl sa sprzezone*/
// CouplerNr: TCouplerNr; {ABu: nr sprzegu podlaczonego w drugim obiekcie} // CouplerNr: TCouplerNr; {ABu: nr sprzegu podlaczonego w drugim obiekcie}
@@ -741,20 +888,28 @@ public:
int RVentType; /*0 - brak, 1 - jest, 2 - automatycznie wlaczany*/ int RVentType; /*0 - brak, 1 - jest, 2 - automatycznie wlaczany*/
double RVentnmax; /*maks. obroty wentylatorow oporow rozruchowych*/ double RVentnmax; /*maks. obroty wentylatorow oporow rozruchowych*/
double RVentCutOff; /*rezystancja wylaczania wentylatorow dla RVentType=2*/ double RVentCutOff; /*rezystancja wylaczania wentylatorow dla RVentType=2*/
int CompressorPower; /*0: bezp. z obwodow silnika, 1: z przetwornicy, reczne, 2: w przetwornicy, stale, 5: z silnikowego*/ int CompressorPower; /*0: bezp. z obwodow silnika, 1: z przetwornicy, reczne, 2: w przetwornicy,
stale, 5: z silnikowego*/
int SmallCompressorPower; /*Winger ZROBIC*/ int SmallCompressorPower; /*Winger ZROBIC*/
bool Trafo; /*pojazd wyposażony w transformator*/ bool Trafo; /*pojazd wyposażony w transformator*/
/*-sekcja parametrow dla lokomotywy spalinowej z przekladnia mechaniczna*/ /*-sekcja parametrow dla lokomotywy spalinowej z przekladnia mechaniczna*/
double dizel_Mmax; double dizel_nMmax; double dizel_Mnmax; double dizel_nmax; double dizel_nominalfill; double dizel_Mmax;
double dizel_nMmax;
double dizel_Mnmax;
double dizel_nmax;
double dizel_nominalfill;
/*parametry aproksymacji silnika spalinowego*/ /*parametry aproksymacji silnika spalinowego*/
double dizel_Mstand; /*moment oporow ruchu silnika dla enrot=0*/ double dizel_Mstand; /*moment oporow ruchu silnika dla enrot=0*/
/* dizel_auto_min, dizel_auto_max: real; {predkosc obrotowa przelaczania automatycznej skrzyni biegow*/ /* dizel_auto_min, dizel_auto_max: real; {predkosc obrotowa przelaczania
* automatycznej skrzyni biegow*/
double dizel_nmax_cutoff; /*predkosc obrotowa zadzialania ogranicznika predkosci*/ double dizel_nmax_cutoff; /*predkosc obrotowa zadzialania ogranicznika predkosci*/
double dizel_nmin; /*najmniejsza dopuszczalna predkosc obrotowa*/ double dizel_nmin; /*najmniejsza dopuszczalna predkosc obrotowa*/
double dizel_minVelfullengage; /*najmniejsza predkosc przy jezdzie ze sprzeglem bez poslizgu*/ double dizel_minVelfullengage; /*najmniejsza predkosc przy jezdzie ze sprzeglem bez poslizgu*/
double dizel_AIM; /*moment bezwladnosci walu itp*/ double dizel_AIM; /*moment bezwladnosci walu itp*/
double dizel_engageDia; double dizel_engageMaxForce; double dizel_engagefriction; /*parametry sprzegla*/ double dizel_engageDia;
double dizel_engageMaxForce;
double dizel_engagefriction; /*parametry sprzegla*/
/*- dla lokomotyw spalinowo-elektrycznych -*/ /*- dla lokomotyw spalinowo-elektrycznych -*/
double AnPos; // pozycja sterowania dokladnego (analogowego) double AnPos; // pozycja sterowania dokladnego (analogowego)
@@ -772,7 +927,6 @@ public:
TShuntSchemeTable SST; TShuntSchemeTable SST;
double PowerCorRatio; // Wspolczynnik korekcyjny double PowerCorRatio; // Wspolczynnik korekcyjny
/*- dla uproszczonego modelu silnika (dumb) oraz dla drezyny*/ /*- dla uproszczonego modelu silnika (dumb) oraz dla drezyny*/
double Ftmax; double Ftmax;
@@ -781,14 +935,20 @@ public:
/*-dla wagonow*/ /*-dla wagonow*/
long MaxLoad; /*masa w T lub ilosc w sztukach - ladownosc*/ long MaxLoad; /*masa w T lub ilosc w sztukach - ladownosc*/
std::string LoadAccepted; std::string LoadQuantity; /*co moze byc zaladowane, jednostki miary*/ std::string LoadAccepted;
std::string LoadQuantity; /*co moze byc zaladowane, jednostki miary*/
double OverLoadFactor; /*ile razy moze byc przekroczona ladownosc*/ double OverLoadFactor; /*ile razy moze byc przekroczona ladownosc*/
double LoadSpeed; double UnLoadSpeed;/*szybkosc na- i rozladunku jednostki/s*/ double LoadSpeed;
int DoorOpenCtrl; int DoorCloseCtrl; /*0: przez pasazera, 1: przez maszyniste, 2: samoczynne (zamykanie)*/ double UnLoadSpeed; /*szybkosc na- i rozladunku jednostki/s*/
int DoorOpenCtrl;
int DoorCloseCtrl; /*0: przez pasazera, 1: przez maszyniste, 2: samoczynne (zamykanie)*/
double DoorStayOpen; /*jak dlugo otwarte w przypadku DoorCloseCtrl=2*/ double DoorStayOpen; /*jak dlugo otwarte w przypadku DoorCloseCtrl=2*/
bool DoorClosureWarning; /*czy jest ostrzeganie przed zamknieciem*/ bool DoorClosureWarning; /*czy jest ostrzeganie przed zamknieciem*/
double DoorOpenSpeed; double DoorCloseSpeed; /*predkosc otwierania i zamykania w j.u. */ double DoorOpenSpeed;
double DoorMaxShiftL; double DoorMaxShiftR; double DoorMaxPlugShift;/*szerokosc otwarcia lub kat*/ double DoorCloseSpeed; /*predkosc otwierania i zamykania w j.u. */
double DoorMaxShiftL;
double DoorMaxShiftR;
double DoorMaxPlugShift; /*szerokosc otwarcia lub kat*/
int DoorOpenMethod; /*sposob otwarcia - 1: przesuwne, 2: obrotowe, 3: trójelementowe*/ int DoorOpenMethod; /*sposob otwarcia - 1: przesuwne, 2: obrotowe, 3: trójelementowe*/
double PlatformSpeed; /*szybkosc stopnia*/ double PlatformSpeed; /*szybkosc stopnia*/
double PlatformMaxShift; /*wysuniecie stopnia*/ double PlatformMaxShift; /*wysuniecie stopnia*/
@@ -814,15 +974,22 @@ public:
double nrot; double nrot;
/*! rotacja kol [obr/s]*/ /*! rotacja kol [obr/s]*/
double EnginePower; /*! chwilowa moc silnikow*/ double EnginePower; /*! chwilowa moc silnikow*/
double dL; double Fb; double Ff; /*przesuniecie, sila hamowania i tarcia*/ double dL;
double FTrain; double FStand; /*! sila pociagowa i oporow ruchu*/ double Fb;
double Ff; /*przesuniecie, sila hamowania i tarcia*/
double FTrain;
double FStand; /*! sila pociagowa i oporow ruchu*/
double FTotal; /*! calkowita sila dzialajaca na pojazd*/ double FTotal; /*! calkowita sila dzialajaca na pojazd*/
double UnitBrakeForce; /*!s siła hamowania przypadająca na jeden element*/ double UnitBrakeForce; /*!s siła hamowania przypadająca na jeden element*/
double Ntotal; /*!s siła nacisku klockow*/ double Ntotal; /*!s siła nacisku klockow*/
bool SlippingWheels; bool SandDose; /*! poslizg kol, sypanie piasku*/ bool SlippingWheels;
bool SandDose; /*! poslizg kol, sypanie piasku*/
double Sand; /*ilosc piasku*/ double Sand; /*ilosc piasku*/
double BrakeSlippingTimer; /*pomocnicza zmienna do wylaczania przeciwposlizgu*/ double BrakeSlippingTimer; /*pomocnicza zmienna do wylaczania przeciwposlizgu*/
double dpBrake; double dpPipe; double dpMainValve; double dpLocalValve; double dpBrake;
double dpPipe;
double dpMainValve;
double dpLocalValve;
/*! przyrosty cisnienia w kroku czasowym*/ /*! przyrosty cisnienia w kroku czasowym*/
double ScndPipePress; /*cisnienie w przewodzie zasilajacym*/ double ScndPipePress; /*cisnienie w przewodzie zasilajacym*/
double BrakePress; /*!o cisnienie w cylindrach hamulcowych*/ double BrakePress; /*!o cisnienie w cylindrach hamulcowych*/
@@ -845,7 +1012,8 @@ public:
int LocalBrakePos; /*nastawa hamulca indywidualnego*/ int LocalBrakePos; /*nastawa hamulca indywidualnego*/
int ManualBrakePos; /*nastawa hamulca recznego*/ int ManualBrakePos; /*nastawa hamulca recznego*/
double LocalBrakePosA; double LocalBrakePosA;
int BrakeStatus; /*0 - odham, 1 - ham., 2 - uszk., 4 - odluzniacz, 8 - antyposlizg, 16 - uzyte EP, 32 - pozycja R, 64 - powrot z R*/ int BrakeStatus; /*0 - odham, 1 - ham., 2 - uszk., 4 - odluzniacz, 8 - antyposlizg, 16 - uzyte
EP, 32 - pozycja R, 64 - powrot z R*/
bool EmergencyBrakeFlag; /*hamowanie nagle*/ bool EmergencyBrakeFlag; /*hamowanie nagle*/
int BrakeDelayFlag; /*nastawa opoznienia ham. osob/towar/posp/exp 0/1/2/4*/ int BrakeDelayFlag; /*nastawa opoznienia ham. osob/towar/posp/exp 0/1/2/4*/
int BrakeDelays; /*nastawy mozliwe do uzyskania*/ int BrakeDelays; /*nastawy mozliwe do uzyskania*/
@@ -856,12 +1024,12 @@ public:
double LimPipePress; /*stabilizator cisnienia*/ double LimPipePress; /*stabilizator cisnienia*/
double ActFlowSpeed; /*szybkosc stabilizatora*/ double ActFlowSpeed; /*szybkosc stabilizatora*/
int DamageFlag; // kombinacja bitowa stalych dtrain_* } int DamageFlag; // kombinacja bitowa stalych dtrain_* }
int EngDmgFlag; // kombinacja bitowa stalych usterek} int EngDmgFlag; // kombinacja bitowa stalych usterek}
int DerailReason; // przyczyna wykolejenia int DerailReason; // przyczyna wykolejenia
//EndSignalsFlag: byte; {ABu 060205: zmiany - koncowki: 1/16 - swiatla prz/tyl, 2/31 - blachy prz/tyl} // EndSignalsFlag: byte; {ABu 060205: zmiany - koncowki: 1/16 - swiatla prz/tyl, 2/31 - blachy
// prz/tyl}
// HeadSignalsFlag: byte; {ABu 060205: zmiany - swiatla: 1/2/4 - przod, 16/32/63 - tyl} // HeadSignalsFlag: byte; {ABu 060205: zmiany - swiatla: 1/2/4 - przod, 16/32/63 - tyl}
TCommand CommandIn; TCommand CommandIn;
/*komenda przekazywana przez PutCommand*/ /*komenda przekazywana przez PutCommand*/
@@ -872,7 +1040,8 @@ public:
TTrackShape RunningShape; /*geometria toru po ktorym jedzie pojazd*/ TTrackShape RunningShape; /*geometria toru po ktorym jedzie pojazd*/
TTrackParam RunningTrack; /*parametry toru po ktorym jedzie pojazd*/ TTrackParam RunningTrack; /*parametry toru po ktorym jedzie pojazd*/
double OffsetTrackH; double OffsetTrackV; /*przesuniecie poz. i pion. w/m osi toru*/ double OffsetTrackH;
double OffsetTrackV; /*przesuniecie poz. i pion. w/m osi toru*/
/*-zmienne dla lokomotyw*/ /*-zmienne dla lokomotyw*/
bool Mains; /*polozenie glownego wylacznika*/ bool Mains; /*polozenie glownego wylacznika*/
@@ -881,7 +1050,8 @@ public:
int LightsPos; int LightsPos;
int ActiveDir; // czy lok. jest wlaczona i w ktorym kierunku: int ActiveDir; // czy lok. jest wlaczona i w ktorym kierunku:
// względem wybranej kabiny: -1 - do tylu, +1 - do przodu, 0 - wylaczona // względem wybranej kabiny: -1 - do tylu, +1 - do przodu, 0 - wylaczona
int CabNo; //numer kabiny, z której jest sterowanie: 1 lub -1; w przeciwnym razie brak sterowania - rozrzad int CabNo; // numer kabiny, z której jest sterowanie: 1 lub -1; w przeciwnym razie brak
// sterowania - rozrzad
int DirAbsolute; // zadany kierunek jazdy względem sprzęgów (1=w strone 0,-1=w stronę 1) int DirAbsolute; // zadany kierunek jazdy względem sprzęgów (1=w strone 0,-1=w stronę 1)
int ActiveCab; // numer kabiny, w ktorej jest obsada (zwykle jedna na skład) int ActiveCab; // numer kabiny, w ktorej jest obsada (zwykle jedna na skład)
double LastSwitchingTime; /*czas ostatniego przelaczania czegos*/ double LastSwitchingTime; /*czas ostatniego przelaczania czegos*/
@@ -890,12 +1060,22 @@ public:
bool InsideConsist; bool InsideConsist;
/*-zmienne dla lokomotywy elektrycznej*/ /*-zmienne dla lokomotywy elektrycznej*/
TTractionParam RunningTraction; /*parametry sieci trakcyjnej najblizej lokomotywy*/ TTractionParam RunningTraction; /*parametry sieci trakcyjnej najblizej lokomotywy*/
double enrot; double Im; double Itot; double IHeating; double ITraction; double TotalCurrent; double Mm; double Mw; double Fw; double Ft; double enrot;
double Im;
double Itot;
double IHeating;
double ITraction;
double TotalCurrent;
double Mm;
double Mw;
double Fw;
double Ft;
/*ilosc obrotow, prad silnika i calkowity, momenty, sily napedne*/ /*ilosc obrotow, prad silnika i calkowity, momenty, sily napedne*/
// Ra: Im jest ujemny, jeśli lok jedzie w stronę sprzęgu 1 // Ra: Im jest ujemny, jeśli lok jedzie w stronę sprzęgu 1
// a ujemne powinien być przy odwróconej polaryzacji sieci... // a ujemne powinien być przy odwróconej polaryzacji sieci...
// w wielu miejscach jest używane abs(Im) // w wielu miejscach jest używane abs(Im)
int Imin; int Imax; /*prad przelaczania automatycznego rozruchu, prad bezpiecznika*/ int Imin;
int Imax; /*prad przelaczania automatycznego rozruchu, prad bezpiecznika*/
double Voltage; /*aktualne napiecie sieci zasilajacej*/ double Voltage; /*aktualne napiecie sieci zasilajacej*/
int MainCtrlActualPos; /*wskaznik RList*/ int MainCtrlActualPos; /*wskaznik RList*/
int ScndCtrlActualPos; /*wskaznik MotorParam*/ int ScndCtrlActualPos; /*wskaznik MotorParam*/
@@ -911,10 +1091,10 @@ public:
double PantPress; /*Cisnienie w zbiornikach pantografow*/ double PantPress; /*Cisnienie w zbiornikach pantografow*/
bool s_CAtestebrake; // hunter-091012: zmienna dla testu ca bool s_CAtestebrake; // hunter-091012: zmienna dla testu ca
/*-zmienne dla lokomotywy spalinowej z przekladnia mechaniczna*/ /*-zmienne dla lokomotywy spalinowej z przekladnia mechaniczna*/
double dizel_fill; /*napelnienie*/ double dizel_fill; /*napelnienie*/
double dizel_engagestate; /*sprzeglo skrzyni biegow: 0 - luz, 1 - wlaczone, 0.5 - wlaczone 50% (z poslizgiem)*/ double dizel_engagestate; /*sprzeglo skrzyni biegow: 0 - luz, 1 - wlaczone, 0.5 - wlaczone 50%
(z poslizgiem)*/
double dizel_engage; /*sprzeglo skrzyni biegow: aktualny docisk*/ double dizel_engage; /*sprzeglo skrzyni biegow: aktualny docisk*/
double dizel_automaticgearstatus; /*0 - bez zmiany, -1 zmiana na nizszy +1 zmiana na wyzszy*/ double dizel_automaticgearstatus; /*0 - bez zmiany, -1 zmiana na nizszy +1 zmiana na wyzszy*/
bool dizel_enginestart; /*czy trwa rozruch silnika*/ bool dizel_enginestart; /*czy trwa rozruch silnika*/
@@ -967,19 +1147,25 @@ public:
// int WarningSignal; //0: nie trabi, 1,2: trabi syreną o podanym numerze // int WarningSignal; //0: nie trabi, 1,2: trabi syreną o podanym numerze
int WarningSignal; // tymczasowo 8bit, ze względu na funkcje w MTools int WarningSignal; // tymczasowo 8bit, ze względu na funkcje w MTools
double fBrakeCtrlPos; // płynna nastawa hamulca zespolonego double fBrakeCtrlPos; // płynna nastawa hamulca zespolonego
bool bPantKurek3; // kurek trójdrogowy (pantografu): true=połączenie z ZG, false=połączenie z małą sprężarką bool bPantKurek3; // kurek trójdrogowy (pantografu): true=połączenie z ZG, false=połączenie z
// małą sprężarką
int iProblem; // flagi problemów z taborem, aby AI nie musiało porównywać; 0=może jechać int iProblem; // flagi problemów z taborem, aby AI nie musiało porównywać; 0=może jechać
int iLights[2]; // bity zapalonych świateł tutaj, żeby dało się liczyć pobór prądu int iLights[2]; // bity zapalonych świateł tutaj, żeby dało się liczyć pobór prądu
private: private:
double CouplerDist(int Coupler); double CouplerDist(int Coupler);
public: public:
TMoverParameters(double VelInitial, std::string TypeNameInit, std::string NameInit, int LoadInitial, std::string LoadTypeInitial, int Cab); TMoverParameters(double VelInitial, std::string TypeNameInit, std::string NameInit,
int LoadInitial, std::string LoadTypeInitial, int Cab);
// obsługa sprzęgów // obsługa sprzęgów
double Distance(const TLocation &Loc1, const TLocation &Loc2, const TDimension &Dim1, const TDimension &Dim2); double Distance(const TLocation &Loc1, const TLocation &Loc2, const TDimension &Dim1,
double Distance(const vector3 &Loc1, const vector3 &Loc2, const vector3 &Dim1, const vector3 &Dim2); const TDimension &Dim2);
//bool AttachA(int ConnectNo, int ConnectToNr, TMoverParameters *ConnectTo, int CouplingType, bool Forced = false); double Distance(const vector3 &Loc1, const vector3 &Loc2, const vector3 &Dim1,
bool Attach(int ConnectNo, int ConnectToNr, TMoverParameters *ConnectTo, int CouplingType, bool Forced = false); const vector3 &Dim2);
// bool AttachA(int ConnectNo, int ConnectToNr, TMoverParameters *ConnectTo, int CouplingType,
// bool Forced = false);
bool Attach(int ConnectNo, int ConnectToNr, TMoverParameters *ConnectTo, int CouplingType,
bool Forced = false);
int DettachStatus(int ConnectNo); int DettachStatus(int ConnectNo);
bool Dettach(int ConnectNo); bool Dettach(int ConnectNo);
void SetCoupleDist(); void SetCoupleDist();
@@ -991,8 +1177,13 @@ public:
bool ChangeCab(int direction); bool ChangeCab(int direction);
bool CurrentSwitch(int direction); bool CurrentSwitch(int direction);
void UpdateBatteryVoltage(double dt); void UpdateBatteryVoltage(double dt);
double ComputeMovement(double dt, double dt1, const TTrackShape &Shape, TTrackParam &Track, TTractionParam &ElectricTraction, const TLocation &NewLoc, TRotation &NewRot); //oblicza przesuniecie pojazdu double ComputeMovement(double dt, double dt1, const TTrackShape &Shape, TTrackParam &Track,
double FastComputeMovement(double dt, const TTrackShape &Shape, TTrackParam &Track, const TLocation &NewLoc, TRotation &NewRot); //oblicza przesuniecie pojazdu - wersja zoptymalizowana TTractionParam &ElectricTraction, const TLocation &NewLoc,
TRotation &NewRot); // oblicza przesuniecie pojazdu
double
FastComputeMovement(double dt, const TTrackShape &Shape, TTrackParam &Track,
const TLocation &NewLoc,
TRotation &NewRot); // oblicza przesuniecie pojazdu - wersja zoptymalizowana
double ShowEngineRotation(int VehN); double ShowEngineRotation(int VehN);
// Q ******************************************************************************************* // Q *******************************************************************************************
@@ -1011,7 +1202,8 @@ public:
double GetExternalCommand(std::string &Command); double GetExternalCommand(std::string &Command);
bool RunCommand(std::string Command, double CValue1, double CValue2); bool RunCommand(std::string Command, double CValue1, double CValue2);
bool RunInternalCommand(void); bool RunInternalCommand(void);
void PutCommand(std::string NewCommand, double NewValue1, double NewValue2, const TLocation &NewLocation); void PutCommand(std::string NewCommand, double NewValue1, double NewValue2,
const TLocation &NewLocation);
bool CabActivisation(void); bool CabActivisation(void);
bool CabDeactivisation(void); bool CabDeactivisation(void);
@@ -1023,7 +1215,6 @@ public:
bool IncScndCtrl(int CtrlSpeed); bool IncScndCtrl(int CtrlSpeed);
bool DecScndCtrl(int CtrlSpeed); bool DecScndCtrl(int CtrlSpeed);
bool AddPulseForce(int Multipler); /*dla drezyny*/ bool AddPulseForce(int Multipler); /*dla drezyny*/
bool SandDoseOn(void); /*wlacza/wylacza sypanie piasku*/ bool SandDoseOn(void); /*wlacza/wylacza sypanie piasku*/
@@ -1137,7 +1328,8 @@ public:
bool readBPT(int ln, std::string line); // Q 20160721 bool readBPT(int ln, std::string line); // Q 20160721
void BrakeValveDecode(std::string s); // Q 20160719 void BrakeValveDecode(std::string s); // Q 20160719
void BrakeSubsystemDecode(); // Q 20160719 void BrakeSubsystemDecode(); // Q 20160719
void PowerParamDecode(std::string lines, std::string prefix, TPowerParameters &PowerParamDecode); //Q 20160719 void PowerParamDecode(std::string lines, std::string prefix,
TPowerParameters &PowerParamDecode); // Q 20160719
TPowerSource PowerSourceDecode(std::string s); // Q 20160719 TPowerSource PowerSourceDecode(std::string s); // Q 20160719
TPowerType PowerDecode(std::string s); // Q 20160719 TPowerType PowerDecode(std::string s); // Q 20160719
TEngineTypes EngineDecode(std::string s); // Q 20160721 TEngineTypes EngineDecode(std::string s); // Q 20160721

View File

@@ -7,26 +7,26 @@ obtain one at
http://mozilla.org/MPL/2.0/. http://mozilla.org/MPL/2.0/.
*/ */
#include <MATH.H>
#include <FLOAT.H> #include <FLOAT.H>
#include <typeinfo> #include <MATH.H>
#include <fstream> // std::ifstream
#include <sstream>
#include <istream>
#include <iostream>
#include <stdio.h> // sprintf()
#include <stdlib.h>
#include <math.h>
#include <cmath> #include <cmath>
#include <fstream> // std::ifstream
#include <iostream>
#include <istream>
#include <math.h>
#include <sstream>
#include <stdio.h> // sprintf()
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <typeinfo>
#include "Mover.h"
#include "../globals.h" #include "../globals.h"
#include "Mover.h"
//#include "../qutils.h" //#include "../qutils.h"
#include "mctools.h"
#include "../logs.h" #include "../logs.h"
#include "hamulce.h"
#include "Oerlikon_ESt.h" #include "Oerlikon_ESt.h"
#include "hamulce.h"
#include "mctools.h"
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
#pragma package(smart_init) #pragma package(smart_init)
@@ -200,8 +200,8 @@ double TMoverParameters::current(double n, double U)
if ((DynamicBrakeType == dbrake_switch) && (TrainType == dt_ET42)) if ((DynamicBrakeType == dbrake_switch) && (TrainType == dt_ET42))
{ // z Megapacka { // z Megapacka
Rz = WindingRes + R; Rz = WindingRes + R;
MotorCurrent = MotorCurrent = -MotorParam[SP].fi * n /
-MotorParam[SP].fi * n / Rz; //{hamowanie silnikiem na oporach rozruchowych} Rz; //{hamowanie silnikiem na oporach rozruchowych}
} }
} }
else else
@@ -285,8 +285,7 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit,
// NameInit, LoadInitial, LoadTypeInitial, Cab) // NameInit, LoadInitial, LoadTypeInitial, Cab)
{ {
int b, k; int b, k;
WriteLog( WriteLog("------------------------------------------------------");
"------------------------------------------------------");
WriteLog("init default physic values for " + NameInit + ", [" + TypeNameInit + "], [" + WriteLog("init default physic values for " + NameInit + ", [" + TypeNameInit + "], [" +
LoadTypeInitial + "]"); LoadTypeInitial + "]");
Dim = TDimension(); Dim = TDimension();
@@ -384,7 +383,6 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit,
nmax = 0.0; nmax = 0.0;
Voltage = 0.0; Voltage = 0.0;
HeatingPowerSource = TPowerParameters(); HeatingPowerSource = TPowerParameters();
// HeatingPowerSource.MaxVoltage = 0.0; // HeatingPowerSource.MaxVoltage = 0.0;
// HeatingPowerSource.MaxCurrent = 0.0; // HeatingPowerSource.MaxCurrent = 0.0;
@@ -1377,7 +1375,8 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap
(((Couplers[b].CouplingFlag & ctrain_heating) == ctrain_heating) && (Heating))) (((Couplers[b].CouplingFlag & ctrain_heating) == ctrain_heating) && (Heating)))
{ {
HVCouplers[1 - b][1] = HVCouplers[1 - b][1] =
Max0R(abs(hvc), Couplers[b].Connected->HVCouplers[Couplers[b].ConnectedNr][1] - Max0R(abs(hvc),
Couplers[b].Connected->HVCouplers[Couplers[b].ConnectedNr][1] -
HVCouplers[b][0] * 0.02); HVCouplers[b][0] * 0.02);
} }
else else
@@ -1408,12 +1407,10 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap
{ {
if (((Couplers[0].CouplingFlag & ctrain_power) == ctrain_power) || if (((Couplers[0].CouplingFlag & ctrain_power) == ctrain_power) ||
(((Couplers[0].CouplingFlag & ctrain_heating) == ctrain_heating) && (Heating))) (((Couplers[0].CouplingFlag & ctrain_heating) == ctrain_heating) && (Heating)))
TotalCurrent += TotalCurrent += Couplers[0].Connected->HVCouplers[1 - Couplers[0].ConnectedNr][0];
Couplers[0].Connected->HVCouplers[1 - Couplers[0].ConnectedNr][0];
if (((Couplers[1].CouplingFlag & ctrain_power) == ctrain_power) || if (((Couplers[1].CouplingFlag & ctrain_power) == ctrain_power) ||
(((Couplers[1].CouplingFlag & ctrain_heating) == ctrain_heating) && (Heating))) (((Couplers[1].CouplingFlag & ctrain_heating) == ctrain_heating) && (Heating)))
TotalCurrent += TotalCurrent += Couplers[1].Connected->HVCouplers[1 - Couplers[1].ConnectedNr][0];
Couplers[1].Connected->HVCouplers[1 - Couplers[1].ConnectedNr][0];
HVCouplers[0][0] = 0; HVCouplers[0][0] = 0;
HVCouplers[1][0] = 0; HVCouplers[1][0] = 0;
} }
@@ -3156,10 +3153,11 @@ void TMoverParameters::CompressorCheck(double dt)
(DElist[MainCtrlPos].RPM / DElist[MainCtrlPosNo].RPM); (DElist[MainCtrlPos].RPM / DElist[MainCtrlPosNo].RPM);
else else
{ {
CompressedVolume += CompressedVolume += dt * CompressorSpeed *
dt * CompressorSpeed * (2.0 * MaxCompressor - Compressor) / MaxCompressor; (2.0 * MaxCompressor - Compressor) / MaxCompressor;
TotalCurrent += 0.0015 TotalCurrent +=
* Voltage; // tymczasowo tylko obciążenie sprężarki, tak z 5A na sprężarkę 0.0015 *
Voltage; // tymczasowo tylko obciążenie sprężarki, tak z 5A na sprężarkę
} }
else else
{ {
@@ -3192,8 +3190,8 @@ void TMoverParameters::CompressorCheck(double dt)
CompressorFlag = false; // bez tamtego członu nie zadziała CompressorFlag = false; // bez tamtego członu nie zadziała
} }
else else
CompressorFlag = (CompressorAllow) && CompressorFlag =
((ConverterFlag) || (CompressorPower == 0)) && (Mains); (CompressorAllow) && ((ConverterFlag) || (CompressorPower == 0)) && (Mains);
if (Compressor > 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; CompressorFlag = false;
@@ -3221,8 +3219,8 @@ void TMoverParameters::CompressorCheck(double dt)
CompressorFlag = false; // bez tamtego członu nie zadziała CompressorFlag = false; // bez tamtego członu nie zadziała
} }
else else
CompressorFlag = (CompressorAllow) && CompressorFlag =
((ConverterFlag) || (CompressorPower == 0)) && (Mains); (CompressorAllow) && ((ConverterFlag) || (CompressorPower == 0)) && (Mains);
if (CompressorFlag) // jeśli została załączona if (CompressorFlag) // jeśli została załączona
LastSwitchingTime = 0; // to trzeba ograniczyć ponowne włączenie LastSwitchingTime = 0; // to trzeba ograniczyć ponowne włączenie
} }
@@ -3250,7 +3248,8 @@ void TMoverParameters::CompressorCheck(double dt)
// sprężarki, tak z 5A na // sprężarki, tak z 5A na
// sprężarkę // sprężarkę
else else
TotalCurrent += 0.0015 * 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ę
} }
} }
@@ -3279,8 +3278,7 @@ void TMoverParameters::UpdatePipePressure(double dt)
// with BrakePressureTable[BrakeCtrlPos] do // with BrakePressureTable[BrakeCtrlPos] do
{ {
if ((EngineType != ElectricInductionMotor)) if ((EngineType != ElectricInductionMotor))
dpLocalValve = dpLocalValve = LocHandle->GetPF(Max0R(LocalBrakePos / LocalBrakePosNo, LocalBrakePosA),
LocHandle->GetPF(Max0R(LocalBrakePos / LocalBrakePosNo, LocalBrakePosA),
Hamulec->GetBCP(), ScndPipePress, dt, 0); Hamulec->GetBCP(), ScndPipePress, dt, 0);
else else
dpLocalValve = dpLocalValve =
@@ -3312,8 +3310,7 @@ void TMoverParameters::UpdatePipePressure(double dt)
// if(EmergencyBrakeFlag)and(BrakeCtrlPosNo=0)then //ulepszony hamulec bezp. // if(EmergencyBrakeFlag)and(BrakeCtrlPosNo=0)then //ulepszony hamulec bezp.
if ((EmergencyBrakeFlag) || (TestFlag(SecuritySystem.Status, s_SHPebrake)) || if ((EmergencyBrakeFlag) || (TestFlag(SecuritySystem.Status, s_SHPebrake)) ||
(TestFlag(SecuritySystem.Status, s_CAebrake)) || (TestFlag(SecuritySystem.Status, s_CAebrake)) || (s_CAtestebrake == true) ||
(s_CAtestebrake == true) ||
(TestFlag(EngDmgFlag, 32)) /* or (not Battery)*/) // ulepszony hamulec bezp. (TestFlag(EngDmgFlag, 32)) /* or (not Battery)*/) // ulepszony hamulec bezp.
dpMainValve = dpMainValve + PF(0, PipePress, 0.15) * dt; dpMainValve = dpMainValve + PF(0, PipePress, 0.15) * dt;
// 0.2*Spg // 0.2*Spg
@@ -3566,7 +3563,8 @@ double TMoverParameters::GetDVc(double dt)
// if ((TestFlag(Couplers[0].CouplingFlag, ctrain_pneumatic)) && // if ((TestFlag(Couplers[0].CouplingFlag, ctrain_pneumatic)) &&
// (TestFlag(Couplers[1].CouplingFlag, ctrain_pneumatic))) // (TestFlag(Couplers[1].CouplingFlag, ctrain_pneumatic)))
// { // {
// dV = 0.05 * dt * PF(Couplers[0].Connected->PipePress, Couplers[1].Connected->PipePress, // dV = 0.05 * dt * PF(Couplers[0].Connected->PipePress,
// Couplers[1].Connected->PipePress,
// (Spg * 0.85) / (1 + 0.03 * Dim.L)) * // (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[0].Connected->Pipe->Flow(+dV);
@@ -3734,8 +3732,7 @@ void TMoverParameters::ComputeTotalForce(double dt, double dt1, bool FullVer)
Couplers[b].CForce = 0; Couplers[b].CForce = 0;
// FStand:=Fb+FrictionForce(RunningShape.R,RunningTrack.DamageFlag); // FStand:=Fb+FrictionForce(RunningShape.R,RunningTrack.DamageFlag);
FStand += Fb; FStand += Fb;
FTrain += FTrain += TotalMassxg * RunningShape.dHtrack; // doliczenie składowej stycznej grawitacji
TotalMassxg * RunningShape.dHtrack; // doliczenie składowej stycznej grawitacji
//! niejawne przypisanie zmiennej! //! niejawne przypisanie zmiennej!
FTotal = FTrain - Sign(V) * FStand; FTotal = FTrain - Sign(V) * FStand;
} }
@@ -4488,7 +4485,8 @@ double TMoverParameters::TractionForce(double dt)
else if (((dtrans < 0.25) && (LocHandle->GetCP() < 0.25) && (AnPos < 0.01)) || else if (((dtrans < 0.25) && (LocHandle->GetCP() < 0.25) && (AnPos < 0.01)) ||
((dtrans < 0.25) && (ShuntModeAllow) && (LocalBrakePos == 0))) ((dtrans < 0.25) && (ShuntModeAllow) && (LocalBrakePos == 0)))
DynamicBrakeFlag = false; DynamicBrakeFlag = false;
else if ((((BrakePress > 0.25) && (dtrans > 0.25) || (LocHandle->GetCP() > 0.25))) || else if ((((BrakePress > 0.25) && (dtrans > 0.25) ||
(LocHandle->GetCP() > 0.25))) ||
(AnPos > 0.02)) (AnPos > 0.02))
DynamicBrakeFlag = true; DynamicBrakeFlag = true;
dtrans = Hamulec->GetEDBCP() * eimc[eimc_p_abed]; // stala napedu dtrans = Hamulec->GetEDBCP() * eimc[eimc_p_abed]; // stala napedu
@@ -4510,7 +4508,8 @@ double TMoverParameters::TractionForce(double dt)
Hamulec->SetED(Max0R(0.0, Min0R(PosRatio, 1))); Hamulec->SetED(Max0R(0.0, Min0R(PosRatio, 1)));
// (Hamulec as TLSt).SetLBP(LocBrakePress*(1-PosRatio)); // (Hamulec as TLSt).SetLBP(LocBrakePress*(1-PosRatio));
PosRatio = -Max0R(Min0R(dtrans * 1.0 / MaxBrakePress[0], 1), AnPos) * PosRatio = -Max0R(Min0R(dtrans * 1.0 / MaxBrakePress[0], 1), AnPos) *
Max0R(0, Min0R(1, (Vel - eimc[eimc_p_Vh0]) / Max0R(0, Min0R(1,
(Vel - eimc[eimc_p_Vh0]) /
(eimc[eimc_p_Vh1] - eimc[eimc_p_Vh0]))); (eimc[eimc_p_Vh1] - eimc[eimc_p_Vh0])));
eimv[eimv_Fzad] = -Max0R(LocalBrakeRatio(), dtrans / MaxBrakePress[0]); eimv[eimv_Fzad] = -Max0R(LocalBrakeRatio(), dtrans / MaxBrakePress[0]);
tmp = 5; tmp = 5;
@@ -4527,7 +4526,8 @@ double TMoverParameters::TractionForce(double dt)
else else
PosRatio = PosRatio =
Min0R(PosRatio, Max0R(-1, 0.5 * (ScndCtrlActualPos * 2 - Vel))); Min0R(PosRatio, Max0R(-1, 0.5 * (ScndCtrlActualPos * 2 - Vel)));
// PosRatio = 1.0 * (PosRatio * 0 + 1) * PosRatio; // 1 * 1 * PosRatio = PosRatio // PosRatio = 1.0 * (PosRatio * 0 + 1) * PosRatio; // 1 * 1 * PosRatio =
// PosRatio
Hamulec->SetED(0); Hamulec->SetED(0);
// (Hamulec as TLSt).SetLBP(LocBrakePress); // (Hamulec as TLSt).SetLBP(LocBrakePress);
if ((PosRatio > dizel_fill)) if ((PosRatio > dizel_fill))
@@ -4620,18 +4620,16 @@ double TMoverParameters::TractionForce(double dt)
if ((abs(eimv[eimv_fp]) <= eimv[eimv_fkr])) if ((abs(eimv[eimv_fp]) <= eimv[eimv_fkr]))
eimv[eimv_pole] = eimc[eimc_f_cfu] / eimc[eimc_s_cfu]; eimv[eimv_pole] = eimc[eimc_f_cfu] / eimc[eimc_s_cfu];
else else
eimv[eimv_pole] = eimv[eimv_pole] = eimv[eimv_Uzsmax] / eimc[eimc_s_cfu] / abs(eimv[eimv_fp]);
eimv[eimv_Uzsmax] / eimc[eimc_s_cfu] / abs(eimv[eimv_fp]);
eimv[eimv_U] = eimv[eimv_pole] * eimv[eimv_fp] * eimc[eimc_s_cfu]; eimv[eimv_U] = eimv[eimv_pole] * eimv[eimv_fp] * eimc[eimc_s_cfu];
eimv[eimv_Ic] = (eimv[eimv_fp] - DirAbsolute * enrot * eimc[eimc_s_p]) * eimv[eimv_Ic] = (eimv[eimv_fp] - DirAbsolute * enrot * eimc[eimc_s_p]) *
eimc[eimc_s_dfic] * eimv[eimv_pole]; eimc[eimc_s_dfic] * eimv[eimv_pole];
eimv[eimv_If] = eimv[eimv_Ic] * eimc[eimc_s_icif]; eimv[eimv_If] = eimv[eimv_Ic] * eimc[eimc_s_icif];
eimv[eimv_M] = eimv[eimv_pole] * eimv[eimv_Ic] * eimc[eimc_s_cim]; eimv[eimv_M] = eimv[eimv_pole] * eimv[eimv_Ic] * eimc[eimc_s_cim];
eimv[eimv_Ipoj] = (eimv[eimv_Ic] * NPoweredAxles * eimv[eimv_U]) / eimv[eimv_Ipoj] =
(Voltage - eimc[eimc_f_DU]) + (eimv[eimv_Ic] * NPoweredAxles * eimv[eimv_U]) / (Voltage - eimc[eimc_f_DU]) +
eimc[eimc_f_I0]; eimc[eimc_f_I0];
eimv[eimv_Pm] = eimv[eimv_Pm] = ActiveDir * eimv[eimv_M] * NPoweredAxles * enrot * Pirazy2 / 1000;
ActiveDir * eimv[eimv_M] * NPoweredAxles * enrot * Pirazy2 / 1000;
eimv[eimv_Pe] = eimv[eimv_Ipoj] * Voltage / 1000; eimv[eimv_Pe] = eimv[eimv_Ipoj] * Voltage / 1000;
eimv[eimv_eta] = eimv[eimv_Pm] / eimv[eimv_Pe]; eimv[eimv_eta] = eimv[eimv_Pm] / eimv[eimv_Pe];
@@ -4653,8 +4651,7 @@ double TMoverParameters::TractionForce(double dt)
i = 0; i = 0;
while ((i < RlistSize - 1) && (DElist[i + 1].RPM < abs(tmpV))) while ((i < RlistSize - 1) && (DElist[i + 1].RPM < abs(tmpV)))
i++; i++;
RventRot = (abs(tmpV) - DElist[i].RPM) / RventRot = (abs(tmpV) - DElist[i].RPM) / (DElist[i + 1].RPM - DElist[i].RPM) *
(DElist[i + 1].RPM - DElist[i].RPM) *
(DElist[i + 1].GenPower - DElist[i].GenPower) + (DElist[i + 1].GenPower - DElist[i].GenPower) +
DElist[i].GenPower; DElist[i].GenPower;
} }
@@ -6080,7 +6077,8 @@ bool TMoverParameters::readBPT(int ln, std::string line)
BrakePressureTable[k].BrakeType = Individual; BrakePressureTable[k].BrakeType = Individual;
// WriteLog("BPTx: " + p0 + "," + p1 + "," + p2 + "," + p3 + "," + p4); // WriteLog("BPTx: " + p0 + "," + p1 + "," + p2 + "," + p3 + "," + p4);
//WriteLog("BPTk: " + to_string(k) + "," + to_string(BrakePressureTable[k].PipePressureVal) + // WriteLog("BPTk: " + to_string(k) + "," + to_string(BrakePressureTable[k].PipePressureVal)
// +
// "," + to_string(BrakePressureTable[k].BrakePressureVal) + "," + // "," + to_string(BrakePressureTable[k].BrakePressureVal) + "," +
// to_string(BrakePressureTable[k].FlowSpeedVal) + "," + p4); // to_string(BrakePressureTable[k].FlowSpeedVal) + "," + p4);
@@ -6370,10 +6368,10 @@ bool TMoverParameters::LoadFIZ(std::string chkpath)
} }
bool secBPT = false, secMotorParamTable0 = false, secPower = false, secEngine = false, bool secBPT = false, secMotorParamTable0 = false, secPower = false, secEngine = false,
secParam = false, secLoad = false, secDimensions = false, secParam = false, secLoad = false, secDimensions = false, secWheels = false,
secWheels = false, secBrake = false, secBuffCoupl = false, secCntrl = false, secBrake = false, secBuffCoupl = false, secCntrl = false, secSecurity = false,
secSecurity = false, secLight = false, secCircuit = false, secRList = false, secLight = false, secCircuit = false, secRList = false, secDList = false,
secDList = false, secWWList = false, secffList = false, secTurboPos = false; secWWList = false, secffList = false, secTurboPos = false;
ConversionError = 0; ConversionError = 0;

View File

@@ -17,7 +17,6 @@ http://mozilla.org/MPL/2.0/.
Copyright (C) 2007-2014 Maciej Cierniak Copyright (C) 2007-2014 Maciej Cierniak
*/ */
/* /*
(C) youBy (C) youBy
Co brakuje: Co brakuje:
@@ -39,8 +38,6 @@ Knorr/West EP -
#include "mctools.h" // Pascal unit #include "mctools.h" // Pascal unit
//#include <array> //#include <array>
static int const LocalBrakePosNo = 10; /*ilosc nastaw hamulca recznego lub pomocniczego*/ static int const LocalBrakePosNo = 10; /*ilosc nastaw hamulca recznego lub pomocniczego*/
static int const MainBrakeMaxPos = 10; /*max. ilosc nastaw hamulca zasadniczego*/ static int const MainBrakeMaxPos = 10; /*max. ilosc nastaw hamulca zasadniczego*/
@@ -51,7 +48,6 @@ Knorr/West EP -
static int const bdelay_M = 8; // Mg static int const bdelay_M = 8; // Mg
static int const bdelay_GR = 128; // G-R static int const bdelay_GR = 128; // G-R
/*stan hamulca*/ /*stan hamulca*/
static int const b_off = 0; // luzowanie static int const b_off = 0; // luzowanie
static int const b_hld = 1; // trzymanie static int const b_hld = 1; // trzymanie
@@ -116,10 +112,10 @@ Knorr/West EP -
static int const bh_FB = 6; // pelne static int const bh_FB = 6; // pelne
static int const bh_EB = 7; // nagle 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_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_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 int const bh_EPB = 10; // ep - hamowanie //pelne hamowanie dla ep k¹towego
static double const SpgD = 0.7917; static double const SpgD = 0.7917;
static double const SpO = 0.5067; // przekroj przewodu 1" w l/m static double const SpO = 0.5067; // przekroj przewodu 1" w l/m
// wyj: jednostka dosyc dziwna, ale wszystkie obliczenia // wyj: jednostka dosyc dziwna, ale wszystkie obliczenia
@@ -127,20 +123,25 @@ Knorr/West EP -
// zas dlugosc pojazdow jest podana w metrach // zas dlugosc pojazdow jest podana w metrach
// a predkosc przeplywu w m/s //3.5 // a predkosc przeplywu w m/s //3.5
// 7//1.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), (14, 5.4), (9, 5.0), (6, 4.6), (9, 4.5),
// 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)); // (9, 4.0), (9, 3.5), (9, 2.8), (34, 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} }; // 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,
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} }; // 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 = 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 // 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, 5.0), (12, 5.4), (9, 5.0), (9, 4.6), (9, 4.2),
// 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)); // (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 int const i_bcpno = 6;
// static double const pi = 3.141592653589793; //definicja w mctools // static double const pi = 3.141592653589793; //definicja w mctools
// klasa obejmujaca pojedyncze zbiorniki // klasa obejmujaca pojedyncze zbiorniki
class TReservoir class TReservoir
{ {
protected: protected:
@@ -156,13 +157,10 @@ Knorr/West EP -
virtual double P(); virtual double P();
void Flow(double dv); void Flow(double dv);
void Act(); void Act();
}; };
typedef TReservoir *PReservoir; typedef TReservoir *PReservoir;
class TBrakeCyl : public TReservoir class TBrakeCyl : public TReservoir
{ {
@@ -172,10 +170,8 @@ Knorr/West EP -
TBrakeCyl() : TReservoir(){}; TBrakeCyl() : TReservoir(){};
}; };
// klasa obejmujaca uklad hamulca zespolonego pojazdu // klasa obejmujaca uklad hamulca zespolonego pojazdu
class TBrake class TBrake
{ {
protected: protected:
@@ -199,20 +195,21 @@ Knorr/West EP -
int BrakeStatus; // flaga stanu int BrakeStatus; // flaga stanu
int SoundFlag; int SoundFlag;
public: public:
TBrake(double i_mbp, double i_bcr, double i_bcd, double i_brc, TBrake(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat,
int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa); int i_ba, int i_nbpa);
// maksymalne cisnienie, promien, skok roboczy, pojemnosc ZP; // maksymalne cisnienie, promien, skok roboczy, pojemnosc ZP;
// ilosc cylindrow, opoznienia hamulca, material klockow, osie hamowane, klocki na os; // 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 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 double GetFC(double Vel, double N); // wspolczynnik tarcia - hamulec wie lepiej
virtual double GetPF(double PP, double dt, double Vel); // przeplyw miedzy komora wstepna i PG virtual double GetPF(double PP, double dt, double Vel); // przeplyw miedzy komora wstepna i PG
double GetBCF(); // sila tlokowa z tloka double GetBCF(); // sila tlokowa z tloka
virtual double GetHPFlow(double HP, double dt); // przeplyw - 8 bar virtual double GetHPFlow(double HP, double dt); // przeplyw - 8 bar
double GetBCP(); // cisnienie cylindrow hamulcowych double GetBCP(); // cisnienie cylindrow hamulcowych
virtual double GetEDBCP(); //cisnienie tylko z hamulca zasadniczego, uzywane do hamulca ED w EP09 virtual double
GetEDBCP(); // cisnienie tylko z hamulca zasadniczego, uzywane do hamulca ED w EP09
double GetBRP(); // cisnienie zbiornika pomocniczego double GetBRP(); // cisnienie zbiornika pomocniczego
double GetVRP(); // cisnienie komory wstepnej rozdzielacza double GetVRP(); // cisnienie komory wstepnej rozdzielacza
virtual double GetCRP(); // cisnienie zbiornika sterujacego virtual double GetCRP(); // cisnienie zbiornika sterujacego
@@ -231,11 +228,8 @@ Knorr/West EP -
virtual void SetED(double EDstate){}; // stan hamulca ED do luzowania virtual void SetED(double EDstate){}; // stan hamulca ED do luzowania
// procedure // procedure
}; };
class TWest : public TBrake class TWest : public TBrake
{ {
@@ -243,41 +237,41 @@ Knorr/West EP -
double LBP; // cisnienie hamulca pomocniczego double LBP; // cisnienie hamulca pomocniczego
double dVP; // pobor powietrza wysokiego cisnienia double dVP; // pobor powietrza wysokiego cisnienia
double EPS; // stan elektropneumatyka double EPS; // stan elektropneumatyka
double TareM; double LoadM; //masa proznego i pelnego double TareM;
double LoadM; // masa proznego i pelnego
double TareBP; // cisnienie dla proznego double TareBP; // cisnienie dla proznego
double LoadC; // wspolczynnik przystawki wazacej double LoadC; // wspolczynnik przystawki wazacej
public: public:
void Init(double PP, double HPP, double LPP, double BP, int BDF) /*override*/; void Init(double PP, double HPP, double LPP, double BP, int BDF) /*override*/;
void SetLBP(double P); // cisnienie z hamulca pomocniczego void SetLBP(double P); // cisnienie z hamulca pomocniczego
double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG double GetPF(double PP, double dt,
double Vel) /*override*/; // przeplyw miedzy komora wstepna i PG
double GetHPFlow(double HP, double dt) /*override*/; double GetHPFlow(double HP, double dt) /*override*/;
void PLC(double mass); // wspolczynnik cisnienia przystawki wazacej void PLC(double mass); // wspolczynnik cisnienia przystawki wazacej
void SetEPS(double nEPS) /*override*/; // stan hamulca EP void SetEPS(double nEPS) /*override*/; // stan hamulca EP
void SetLP(double TM, double LM, double TBP); // parametry przystawki wazacej 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, inline TWest(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD,
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 int i_mat, int i_ba, int i_nbpa)
, i_BD, i_mat, i_ba, 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; LBP, dVP, EPS, TareM, TareBP, LoadM, LoadC = 0.0;
} }
}; };
class TESt : public TBrake class TESt : public TBrake
{ {
private: private:
protected: protected:
TReservoir *CntrlRes; // zbiornik steruj¹cy TReservoir *CntrlRes; // zbiornik steruj¹cy
double BVM; // przelozenie PG-CH double BVM; // przelozenie PG-CH
public: public:
void Init(double PP, double HPP, double LPP, double BP, int BDF) /*override*/; 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 double GetPF(double PP, double dt,
double Vel) /*override*/; // przeplyw miedzy komora wstepna i PG
void EStParams(double i_crc); // parametry charakterystyczne dla ESt void EStParams(double i_crc); // parametry charakterystyczne dla ESt
double GetCRP() /*override*/; double GetCRP() /*override*/;
void CheckState(double BCP, double &dV1); // glowny przyrzad rozrzadczy void CheckState(double BCP, double &dV1); // glowny przyrzad rozrzadczy
@@ -285,16 +279,14 @@ Knorr/West EP -
double CVs(double BP); // napelniacz sterujacego double CVs(double BP); // napelniacz sterujacego
double BVs(double BCP); // napelniacz pomocniczego double BVs(double BCP); // napelniacz pomocniczego
inline TESt(double i_mbp, double i_bcr, double i_bcd, double i_brc, inline TESt(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD,
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 int i_mat, int i_ba, int i_nbpa)
, i_BD, i_mat, i_ba, 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 = new TReservoir();
} }
}; };
class TESt3 : public TESt class TESt3 : public TESt
{ {
@@ -302,41 +294,41 @@ Knorr/West EP -
// double CylFlowSpeed[2][2]; //zmienna nie uzywana // double CylFlowSpeed[2][2]; //zmienna nie uzywana
public: public:
double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG 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, inline TESt3(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD,
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 int i_mat, int i_ba, int i_nbpa)
, i_BD, i_mat, i_ba, 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: private:
double TareM; double LoadM; //masa proznego i pelnego double TareM;
double LoadM; // masa proznego i pelnego
double TareBP; // cisnienie dla proznego double TareBP; // cisnienie dla proznego
double LoadC; double LoadC;
public: public:
TReservoir *ImplsRes; // komora impulsowa TReservoir *ImplsRes; // komora impulsowa
void Init(double PP, double HPP, double LPP, double BP, int BDF) /*override*/; 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 double GetPF(double PP, double dt,
double Vel) /*override*/; // przeplyw miedzy komora wstepna i PG
void PLC(double mass); // wspolczynnik cisnienia przystawki wazacej void PLC(double mass); // wspolczynnik cisnienia przystawki wazacej
void SetLP(double TM, double LM, double TBP); // parametry 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 inline TESt3AL2(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD,
, 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 int i_mat, int i_ba, int i_nbpa)
, i_BD, i_mat, i_ba, 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; TareM, TareBP, LoadM, LoadC = 0.0;
} }
}; };
class TESt4R : public TESt class TESt4R : public TESt
{ {
@@ -349,19 +341,18 @@ Knorr/West EP -
public: public:
void Init(double PP, double HPP, double LPP, double BP, int BDF) /*override*/; 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 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 inline TESt4R(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD,
, 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 int i_mat, int i_ba, int i_nbpa)
, i_BD, i_mat, i_ba, i_nbpa) : TESt(i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa)
{ {
RapidTemp = 0.0; RapidTemp = 0.0;
ImplsRes = new TReservoir(); ImplsRes = new TReservoir();
} }
}; };
class TLSt : public TESt4R class TLSt : public TESt4R
{ {
@@ -377,21 +368,22 @@ Knorr/West EP -
void Init(double PP, double HPP, double LPP, double BP, int BDF) /*override*/; void Init(double PP, double HPP, double LPP, double BP, int BDF) /*override*/;
void SetLBP(double P); // cisnienie z hamulca pomocniczego void SetLBP(double P); // cisnienie z hamulca pomocniczego
void SetRM(double RMR); // ustalenie przelozenia rapida void SetRM(double RMR); // ustalenie przelozenia rapida
double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG double GetPF(double PP, double dt,
double Vel) /*override*/; // przeplyw miedzy komora wstepna i PG
double GetHPFlow(double HP, double dt) /*override*/; // przeplyw - 8 bar double GetHPFlow(double HP, double dt) /*override*/; // przeplyw - 8 bar
virtual double GetEDBCP(); //cisnienie tylko z hamulca zasadniczego, uzywane do hamulca ED w EP09 virtual double
GetEDBCP(); // cisnienie tylko z hamulca zasadniczego, uzywane do hamulca ED w EP09
virtual void SetED(double EDstate); // stan hamulca ED do luzowania virtual void SetED(double EDstate); // stan hamulca ED do luzowania
inline TLSt(double i_mbp, double i_bcr, double i_bcd, double i_brc, inline TLSt(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD,
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 int i_mat, int i_ba, int i_nbpa)
, i_BD, i_mat, i_ba, 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: private:
@@ -399,21 +391,22 @@ Knorr/West EP -
bool Zamykajacy; // pamiec zaworka zamykajacego bool Zamykajacy; // pamiec zaworka zamykajacego
bool Przys_blok; // blokada przyspieszacza bool Przys_blok; // blokada przyspieszacza
TReservoir *Miedzypoj; // pojemnosc posrednia (urojona) do napelniania ZP i ZS TReservoir *Miedzypoj; // pojemnosc posrednia (urojona) do napelniania ZP i ZS
double TareM; double LoadM; //masa proznego i pelnego double TareM;
double LoadM; // masa proznego i pelnego
double TareBP; // cisnienie dla proznego double TareBP; // cisnienie dla proznego
double LoadC; double LoadC;
public: public:
void Init(double PP, double HPP, double LPP, double BP, int BDF) /*override*/; 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 double GetPF(double PP, double dt,
double Vel) /*override*/; // przeplyw miedzy komora wstepna i PG
double GetEDBCP() /*override*/; // cisnienie tylko z hamulca zasadniczego, uzywane do hamulca ED double GetEDBCP() /*override*/; // cisnienie tylko z hamulca zasadniczego, uzywane do hamulca ED
void PLC(double mass); // wspolczynnik cisnienia przystawki wazacej void PLC(double mass); // wspolczynnik cisnienia przystawki wazacej
void SetLP(double TM, double LM, double TBP); // parametry 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 inline TEStED(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD,
, 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 int i_mat, int i_ba, int i_nbpa)
, i_BD, i_mat, i_ba, i_nbpa) : TLSt(i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa)
{ {
Przys_blok = false; Przys_blok = false;
TareM, TareBP, LoadM, LoadC = 0.0; TareM, TareBP, LoadM, LoadC = 0.0;
@@ -421,63 +414,58 @@ Knorr/West EP -
} }
}; };
class TEStEP2 : public TLSt class TEStEP2 : public TLSt
{ {
private: private:
double TareM; double LoadM; //masa proznego i pelnego double TareM;
double LoadM; // masa proznego i pelnego
double TareBP; // cisnienie dla proznego double TareBP; // cisnienie dla proznego
double LoadC; double LoadC;
double EPS; double EPS;
public: public:
void Init(double PP, double HPP, double LPP, double BP, int BDF) /*override*/; // inicjalizacja void Init(double PP, double HPP, double LPP, double BP, int BDF) /*override*/; // inicjalizacja
double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG double GetPF(double PP, double dt,
double Vel) /*override*/; // przeplyw miedzy komora wstepna i PG
void PLC(double mass); // wspolczynnik cisnienia przystawki wazacej void PLC(double mass); // wspolczynnik cisnienia przystawki wazacej
void SetEPS(double nEPS) /*override*/; // stan hamulca EP void SetEPS(double nEPS) /*override*/; // stan hamulca EP
void SetLP(double TM, double LM, double TBP); // parametry przystawki wazacej 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 inline TEStEP2(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD,
, 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 int i_mat, int i_ba, int i_nbpa)
, i_BD, i_mat, i_ba, 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; TareM, TareBP, LoadM, LoadC, EPS = 0.0;
} }
}; };
class TCV1 : public TBrake class TCV1 : public TBrake
{ {
private: private:
double BVM; // przelozenie PG-CH double BVM; // przelozenie PG-CH
protected: protected:
TReservoir *CntrlRes; // zbiornik steruj¹cy TReservoir *CntrlRes; // zbiornik steruj¹cy
public: public:
void Init(double PP, double HPP, double LPP, double BP, int BDF) /*override*/; 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 double GetPF(double PP, double dt,
double Vel) /*override*/; // przeplyw miedzy komora wstepna i PG
double GetCRP() /*override*/; double GetCRP() /*override*/;
void CheckState(double BCP, double &dV1); void CheckState(double BCP, double &dV1);
double CVs(double BP); double CVs(double BP);
double BVs(double BCP); double BVs(double BCP);
inline TCV1(double i_mbp, double i_bcr, double i_bcd, double i_brc, inline TCV1(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD,
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 int i_mat, int i_ba, int i_nbpa)
, i_BD, i_mat, i_ba, 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 = new TReservoir();
} }
}; };
// class TCV1R : public TCV1 // class TCV1R : public TCV1
//{ //{
@@ -486,17 +474,17 @@ Knorr/West EP -
// bool RapidStatus; // bool RapidStatus;
// public: // public:
// // function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora wstepna i PG // // function GetPF(PP, dt, Vel: real): real; override; //przeplyw miedzy komora
//wstepna i PG
// // procedure Init(PP, HPP, LPP, BP: real; BDF: int); override; // // procedure Init(PP, HPP, LPP, BP: real; BDF: int); override;
// inline TCV1R(double i_mbp, double i_bcr, double i_bcd, double i_brc, // inline TCV1R(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, // int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa,
// double PP, double HPP, double LPP, double BP, int BDF) : TCV1(i_mbp, i_bcr, i_bcd, i_brc, i_bcn // double PP, double HPP, double LPP, double BP, int BDF) : TCV1(i_mbp, i_bcr, i_bcd,
//i_brc, i_bcn
// , i_BD, i_mat, i_ba, i_nbpa, PP, HPP, LPP, BP, BDF) { } // , i_BD, i_mat, i_ba, i_nbpa, PP, HPP, LPP, BP, BDF) { }
//}; //};
class TCV1L_TR : public TCV1 class TCV1L_TR : public TCV1
{ {
@@ -504,24 +492,22 @@ Knorr/West EP -
TReservoir *ImplsRes; // komora impulsowa TReservoir *ImplsRes; // komora impulsowa
double LBP; // cisnienie hamulca pomocniczego double LBP; // cisnienie hamulca pomocniczego
public: public:
void Init(double PP, double HPP, double LPP, double BP, int BDF) /*override*/; 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 double GetPF(double PP, double dt,
double Vel) /*override*/; // przeplyw miedzy komora wstepna i PG
void SetLBP(double P); // cisnienie z hamulca pomocniczego void SetLBP(double P); // cisnienie z hamulca pomocniczego
double GetHPFlow(double HP, double dt) /*override*/; // przeplyw - 8 bar 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 inline TCV1L_TR(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD,
, 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 int i_mat, int i_ba, int i_nbpa)
, i_BD, i_mat, i_ba, i_nbpa) : TCV1(i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa)
{ {
LBP = 0.0; LBP = 0.0;
ImplsRes = new TReservoir(); ImplsRes = new TReservoir();
} }
}; };
class TKE : public TBrake // Knorr Einheitsbauart — jeden do wszystkiego class TKE : public TBrake // Knorr Einheitsbauart — jeden do wszystkiego
{ {
@@ -531,17 +517,18 @@ Knorr/West EP -
TReservoir *CntrlRes; // zbiornik steruj¹cy TReservoir *CntrlRes; // zbiornik steruj¹cy
TReservoir *Brak2Res; // zbiornik pomocniczy 2 TReservoir *Brak2Res; // zbiornik pomocniczy 2
double BVM; // przelozenie PG-CH double BVM; // przelozenie PG-CH
double TareM; double LoadM; //masa proznego i pelnego double TareM;
double LoadM; // masa proznego i pelnego
double TareBP; // cisnienie dla proznego double TareBP; // cisnienie dla proznego
double LoadC; // wspolczynnik zaladowania double LoadC; // wspolczynnik zaladowania
double RM; // przelozenie rapida double RM; // przelozenie rapida
double LBP; // cisnienie hamulca pomocniczego double LBP; // cisnienie hamulca pomocniczego
public: public:
void Init(double PP, double HPP, double LPP, double BP, int BDF) /*override*/; void Init(double PP, double HPP, double LPP, double BP, int BDF) /*override*/;
void SetRM(double RMR); // ustalenie przelozenia rapida void SetRM(double RMR); // ustalenie przelozenia rapida
double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG double GetPF(double PP, double dt,
double Vel) /*override*/; // przeplyw miedzy komora wstepna i PG
double GetHPFlow(double HP, double dt) /*override*/; // przeplyw - 8 bar double GetHPFlow(double HP, double dt) /*override*/; // przeplyw - 8 bar
double GetCRP() /*override*/; double GetCRP() /*override*/;
void CheckState(double BCP, double &dV1); void CheckState(double BCP, double &dV1);
@@ -552,9 +539,9 @@ Knorr/West EP -
void SetLP(double TM, double LM, double TBP); // parametry przystawki wazacej void SetLP(double TM, double LM, double TBP); // parametry przystawki wazacej
void SetLBP(double P); // cisnienie z hamulca pomocniczego void SetLBP(double P); // cisnienie z hamulca pomocniczego
inline TKE(double i_mbp, double i_bcr, double i_bcd, double i_brc, int inline TKE(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD,
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, int i_mat, int i_ba, int i_nbpa)
i_BD, i_mat, i_ba, i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa)
{ {
RapidStatus = false; RapidStatus = false;
TareM, TareBP, LoadM, LoadC, RM, LBP = 0.0; TareM, TareBP, LoadM, LoadC, RM, LBP = 0.0;
@@ -564,13 +551,8 @@ Knorr/West EP -
} }
}; };
// klasa obejmujaca krany // klasa obejmujaca krany
class TDriverHandle class TDriverHandle
{ {
private: private:
@@ -587,32 +569,32 @@ Knorr/West EP -
virtual double GetSound(int i); virtual double GetSound(int i);
virtual double GetPos(int i); virtual double GetPos(int i);
virtual double GetEP(double pos); virtual double GetEP(double pos);
}; };
class TFV4a : public TDriverHandle class TFV4a : public TDriverHandle
{ {
private: private:
double CP; double TP; double RP; //zbiornik steruj¹cy, czasowy, redukcyjny double CP;
double TP;
double RP; // zbiornik steruj¹cy, czasowy, redukcyjny
public: public:
double GetPF(double i_bcp, double PP, double HP, double dt, double ep) /*override*/; double GetPF(double i_bcp, double PP, double HP, double dt, double ep) /*override*/;
void Init(double Press) /*override*/; void Init(double Press) /*override*/;
inline TFV4a(void) : TDriverHandle() { } inline TFV4a(void) : TDriverHandle()
{
}
}; };
class TFV4aM : public TDriverHandle class TFV4aM : public TDriverHandle
{ {
private: private:
double CP; double TP; double RP; //zbiornik steruj¹cy, czasowy, redukcyjny double CP;
double TP;
double RP; // zbiornik steruj¹cy, czasowy, redukcyjny
double XP; // komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali double XP; // komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali
double RedAdj; // dostosowanie reduktora cisnienia (krecenie kapturkiem) double RedAdj; // dostosowanie reduktora cisnienia (krecenie kapturkiem)
// Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow // Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow
@@ -622,6 +604,7 @@ Knorr/West EP -
static double pos_table[11]; static double pos_table[11];
double LPP_RP(double pos); double LPP_RP(double pos);
bool EQ(double pos, double i_pos); bool EQ(double pos, double i_pos);
public: public:
double GetPF(double i_bcp, double PP, double HP, double dt, double ep) /*override*/; double GetPF(double i_bcp, double PP, double HP, double dt, double ep) /*override*/;
void Init(double Press) /*override*/; void Init(double Press) /*override*/;
@@ -629,16 +612,18 @@ Knorr/West EP -
double GetSound(int i) /*override*/; double GetSound(int i) /*override*/;
double GetPos(int i) /*override*/; double GetPos(int i) /*override*/;
inline TFV4aM(void) : TDriverHandle() { } inline TFV4aM(void) : TDriverHandle()
{
}
}; };
class TMHZ_EN57 : public TDriverHandle class TMHZ_EN57 : public TDriverHandle
{ {
private: private:
double CP; double TP; double RP; //zbiornik steruj¹cy, czasowy, redukcyjny double CP;
double TP;
double RP; // zbiornik steruj¹cy, czasowy, redukcyjny
double RedAdj; // dostosowanie reduktora cisnienia (krecenie kapturkiem) double RedAdj; // dostosowanie reduktora cisnienia (krecenie kapturkiem)
bool Fala; bool Fala;
// const double pos_table[11] = { -2, 10, -1, 0, 0, 2, 9, 10, 0, 0, 0 }; // const double pos_table[11] = { -2, 10, -1, 0, 0, 2, 9, 10, 0, 0, 0 };
@@ -655,15 +640,16 @@ Knorr/West EP -
double GetCP() /*override*/; double GetCP() /*override*/;
double GetEP(double pos); double GetEP(double pos);
inline TMHZ_EN57(void) : TDriverHandle() { } inline TMHZ_EN57(void) : TDriverHandle()
{
}
}; };
/* FBS2= class(TTDriverHandle) /* FBS2= class(TTDriverHandle)
private private
CP, TP, RP: real; //zbiornik steruj¹cy, czasowy, redukcyjny CP, TP, RP: real; //zbiornik steruj¹cy, czasowy, redukcyjny
XP: real; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali XP: real; //komora powietrzna w reduktorze — jest potrzebna do
odwzorowania fali
RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem) RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem)
// Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow // Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow
Fala: boolean; Fala: boolean;
@@ -678,7 +664,8 @@ Knorr/West EP -
/* TD2= class(TTDriverHandle) /* TD2= class(TTDriverHandle)
private private
CP, TP, RP: real; //zbiornik steruj¹cy, czasowy, redukcyjny CP, TP, RP: real; //zbiornik steruj¹cy, czasowy, redukcyjny
XP: real; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali XP: real; //komora powietrzna w reduktorze — jest potrzebna do
odwzorowania fali
RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem) RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem)
// Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow // Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow
Fala: boolean; Fala: boolean;
@@ -690,7 +677,6 @@ Knorr/West EP -
function GetPos(i: int): real; override; function GetPos(i: int): real; override;
end;*/ end;*/
class TM394 : public TDriverHandle class TM394 : public TDriverHandle
{ {
@@ -707,11 +693,11 @@ Knorr/West EP -
double GetCP() /*override*/; double GetCP() /*override*/;
double GetPos(int i) /*override*/; double GetPos(int i) /*override*/;
inline TM394(void) : TDriverHandle() { } inline TM394(void) : TDriverHandle()
{
}
}; };
class TH14K1 : public TDriverHandle class TH14K1 : public TDriverHandle
{ {
@@ -730,11 +716,11 @@ Knorr/West EP -
double GetCP() /*override*/; double GetCP() /*override*/;
double GetPos(int i) /*override*/; double GetPos(int i) /*override*/;
inline TH14K1(void) : TDriverHandle() { } inline TH14K1(void) : TDriverHandle()
{
}
}; };
class TSt113 : public TH14K1 class TSt113 : public TH14K1
{ {
@@ -751,11 +737,11 @@ Knorr/West EP -
double GetPos(int i) /*override*/; double GetPos(int i) /*override*/;
void Init(double Press) /*override*/; void Init(double Press) /*override*/;
inline TSt113(void) : TH14K1() { } inline TSt113(void) : TH14K1()
{
}
}; };
class Ttest : public TDriverHandle class Ttest : public TDriverHandle
{ {
@@ -766,11 +752,11 @@ Knorr/West EP -
double GetPF(double i_bcp, double PP, double HP, double dt, double ep) /*override*/; double GetPF(double i_bcp, double PP, double HP, double dt, double ep) /*override*/;
void Init(double Press) /*override*/; void Init(double Press) /*override*/;
inline Ttest(void) : TDriverHandle() { } inline Ttest(void) : TDriverHandle()
{
}
}; };
class TFD1 : public TDriverHandle class TFD1 : public TDriverHandle
{ {
@@ -786,11 +772,11 @@ Knorr/West EP -
void SetSpeed(double nSpeed); void SetSpeed(double nSpeed);
// procedure Init(press: real; MaxBP: real); overload; // procedure Init(press: real; MaxBP: real); overload;
inline TFD1(void) : TDriverHandle() { } inline TFD1(void) : TDriverHandle()
{
}
}; };
class TH1405 : public TDriverHandle class TH1405 : public TDriverHandle
{ {
@@ -804,12 +790,11 @@ Knorr/West EP -
double GetCP() /*override*/; double GetCP() /*override*/;
// procedure Init(press: real; MaxBP: real); overload; // procedure Init(press: real; MaxBP: real); overload;
inline TH1405(void) : TDriverHandle() { } inline TH1405(void) : TDriverHandle()
{
}
}; };
class TFVel6 : public TDriverHandle class TFVel6 : public TDriverHandle
{ {
@@ -825,15 +810,18 @@ Knorr/West EP -
double GetSound(int i) /*override*/; double GetSound(int i) /*override*/;
void Init(double Press) /*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 PF(double P1, double P2, double S, double DP = 0.25);
extern double PF1(double P1, double P2, double S); 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 PFVa(double PH, double PL, double S, double 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 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
extern long lround(double value); // zastepuje funkcje nieobecna w C++99 extern long lround(double value); // zastepuje funkcje nieobecna w C++99

View File

@@ -81,7 +81,8 @@ bool TTrainParameters::UpdateMTable(double hh, double mm, std::string NewName)
{ {
if (NewName == NextStationName) // jeœli dojechane do nastêpnego if (NewName == NextStationName) // jeœli dojechane do nastêpnego
{ // Ra: wywo³anie mo¿e byæ powtarzane, jak stoi na W4 { // Ra: wywo³anie mo¿e byæ powtarzane, jak stoi na W4
if (TimeTable[StationIndex + 1].km - TimeTable[StationIndex].km < 0) // to jest bez sensu if (TimeTable[StationIndex + 1].km - TimeTable[StationIndex].km <
0) // to jest bez sensu
Direction = -1; Direction = -1;
else else
Direction = 1; // prowizorka bo moze byc zmiana kilometrazu Direction = 1; // prowizorka bo moze byc zmiana kilometrazu
@@ -339,7 +340,8 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax)
record->km = atof(s.c_str()); record->km = atof(s.c_str());
fin >> s; fin >> s;
} }
if (s.find("|_____|") != std::string::npos) /*zmiana predkosci szlakowej*/ if (s.find("|_____|") !=
std::string::npos) /*zmiana predkosci szlakowej*/
UpdateVelocity(StationCount, vActual); UpdateVelocity(StationCount, vActual);
else else
{ {
@@ -360,9 +362,10 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax)
{ {
if (s.find(hrsd) != std::string::npos) if (s.find(hrsd) != std::string::npos)
{ {
record->Ah = atoi(s.substr(0, s.find(hrsd)).c_str()); // godzina przyjazdu record->Ah = atoi(
record->Am = atoi( s.substr(0, s.find(hrsd)).c_str()); // godzina przyjazdu
s.substr(s.find(hrsd) + 1, s.length()).c_str()); // minuta przyjazdu record->Am = atoi(s.substr(s.find(hrsd) + 1, s.length())
.c_str()); // minuta przyjazdu
} }
else else
{ {
@@ -387,7 +390,8 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax)
/*tu s moze byc miejscem zmiany predkosci szlakowej*/ /*tu s moze byc miejscem zmiany predkosci szlakowej*/
fin >> s; fin >> s;
} }
if (s.find("|_____|") != std::string::npos) /*zmiana predkosci szlakowej*/ if (s.find("|_____|") !=
std::string::npos) /*zmiana predkosci szlakowej*/
UpdateVelocity(StationCount, vActual); UpdateVelocity(StationCount, vActual);
else else
{ {
@@ -408,9 +412,10 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax)
{ {
if (s.find(hrsd) != std::string::npos) if (s.find(hrsd) != std::string::npos)
{ {
record->Dh = atoi(s.substr(0, s.find(hrsd)).c_str()); // godzina odjazdu record->Dh =
record->Dm = atoi( atoi(s.substr(0, s.find(hrsd)).c_str()); // godzina odjazdu
s.substr(s.find(hrsd) + 1, s.length()).c_str()); // minuta odjazdu record->Dm = atoi(s.substr(s.find(hrsd) + 1, s.length())
.c_str()); // minuta odjazdu
} }
else else
{ {
@@ -421,11 +426,15 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax)
} }
else else
{ {
record->Dh = record->Ah; // odjazd o tej samej, co przyjazd (dla ostatniego te¿) record->Dh = record->Ah; // odjazd o tej samej, co przyjazd (dla
record->Dm = record->Am; // bo s¹ u¿ywane do wyliczenia opóŸnienia po dojechaniu // ostatniego te¿)
record->Dm = record->Am; // bo s¹ u¿ywane do wyliczenia opóŸnienia
// po dojechaniu
} }
if ((record->Ah >= 0)) if ((record->Ah >= 0))
record->WaitTime = (int)(CompareTime(record->Ah, record->Am, record->Dh, record->Dm) + 0.1); record->WaitTime = (int)(CompareTime(record->Ah, record->Am,
record->Dh, record->Dm) +
0.1);
do do
{ {
fin >> s; fin >> s;
@@ -443,7 +452,8 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax)
/*tu s moze byc miejscem zmiany predkosci szlakowej*/ /*tu s moze byc miejscem zmiany predkosci szlakowej*/
fin >> s; fin >> s;
} }
if (s.find("|_____|") != std::string::npos) /*zmiana predkosci szlakowej*/ if (s.find("|_____|") !=
std::string::npos) /*zmiana predkosci szlakowej*/
UpdateVelocity(StationCount, vActual); UpdateVelocity(StationCount, vActual);
else else
{ {
@@ -540,8 +550,3 @@ bool TTrainParameters::DirectionChange()
return true; return true;
return false; return false;
} }