mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 15:09:19 +02:00
merged upstream changes
This commit is contained in:
138
McZapkie/MOVER.h
138
McZapkie/MOVER.h
@@ -130,15 +130,15 @@ static int const dtrain_out = 128; /*wykolejenie*/
|
||||
#define p_slippdmg (1.000000E-03)
|
||||
|
||||
/*typ sprzegu*/
|
||||
static int const ctrain_virtual = 0; //gdy pojazdy na tym samym torze się widzą wzajemnie
|
||||
static int const ctrain_virtual = 0; //gdy pojazdy na tym samym torze się widzą wzajemnie
|
||||
static int const ctrain_coupler = 1; //sprzeg fizyczny
|
||||
static int const ctrain_pneumatic = 2; //przewody hamulcowe
|
||||
static int const ctrain_controll = 4; //przewody sterujące (ukrotnienie)
|
||||
static int const ctrain_power = 8; //przewody zasilające (WN)
|
||||
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_controll = 4; //przewody sterujące (ukrotnienie)
|
||||
static int const ctrain_power = 8; //przewody zasilające (WN)
|
||||
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_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*/
|
||||
static int const dbrake_none = 0;
|
||||
@@ -149,9 +149,9 @@ static int const dbrake_automatic = 8;
|
||||
|
||||
/*status czuwaka/SHP*/
|
||||
//hunter-091012: rozdzielenie alarmow, dodanie testu czuwaka
|
||||
static int const s_waiting = 1; //działa
|
||||
static int const s_waiting = 1; //działa
|
||||
static int const s_aware = 2; //czuwak miga
|
||||
static int const s_active = 4; //SHP świeci
|
||||
static int const s_active = 4; //SHP świeci
|
||||
static int const s_CAalarm = 8; //buczy
|
||||
static int const s_SHPalarm = 16; //buczy
|
||||
static int const s_CAebrake = 32; //hamuje
|
||||
@@ -170,20 +170,20 @@ static int const sound_brakeacc = 64;
|
||||
|
||||
static bool PhysicActivationFlag = false;
|
||||
|
||||
//szczególne typy pojazdów (inna obsługa) dla zmiennej TrainType
|
||||
//zamienione na flagi bitowe, aby szybko wybierać grupę (np. EZT+SZT)
|
||||
//szczególne typy pojazdów (inna obsługa) dla zmiennej TrainType
|
||||
//zamienione na flagi bitowe, aby szybko wybierać grupę (np. EZT+SZT)
|
||||
static int const dt_Default = 0;
|
||||
static int const dt_EZT = 1;
|
||||
static int const dt_ET41 = 2;
|
||||
static int const dt_ET42 = 4;
|
||||
static int const dt_PseudoDiesel = 8;
|
||||
static int const dt_ET22 = 0x10; //używane od Megapacka
|
||||
static int const dt_SN61 = 0x20; //nie używane w warunkach, ale ustawiane z CHK
|
||||
static int const dt_ET22 = 0x10; //używane od Megapacka
|
||||
static int const dt_SN61 = 0x20; //nie używane w warunkach, ale ustawiane z CHK
|
||||
static int const dt_EP05 = 0x40;
|
||||
static int const dt_ET40 = 0x80;
|
||||
static int const dt_181 = 0x100;
|
||||
|
||||
//stałe dla asynchronów
|
||||
//stałe dla asynchronów
|
||||
static int const eimc_s_dfic = 0;
|
||||
static int const eimc_s_dfmax = 1;
|
||||
static int const eimc_s_p = 2;
|
||||
@@ -206,7 +206,7 @@ static int const eimc_p_Imax = 20;
|
||||
static int const eimc_p_abed = 21;
|
||||
static int const eimc_p_eped = 22;
|
||||
|
||||
//zmienne dla asynchronów
|
||||
//zmienne dla asynchronów
|
||||
static int const eimv_FMAXMAX = 0;
|
||||
static int const eimv_Fmax = 1;
|
||||
static int const eimv_ks = 2;
|
||||
@@ -234,10 +234,10 @@ static int const bom_PN = 2;
|
||||
static int const bom_EP = 4;
|
||||
static int const bom_MED = 8;
|
||||
|
||||
enum TProblem // lista problemów taboru, które uniemożliwiają jazdę
|
||||
enum TProblem // lista problemów taboru, które uniemożliwiają jazdę
|
||||
{ // flagi bitowe
|
||||
pr_Hamuje = 1, // pojazd ma załączony hamulec lub zatarte osie
|
||||
pr_Pantografy = 2, // pojazd wymaga napompowania pantografów
|
||||
pr_Hamuje = 1, // pojazd ma załączony hamulec lub zatarte osie
|
||||
pr_Pantografy = 2, // pojazd wymaga napompowania pantografów
|
||||
pr_Ostatni = 0x80000000 // ostatnia flaga bitowa
|
||||
};
|
||||
|
||||
@@ -373,21 +373,21 @@ struct TBoilerType {
|
||||
};
|
||||
/*rodzaj odbieraka pradu*/
|
||||
struct TCurrentCollector {
|
||||
long CollectorsNo; //musi być tu, bo inaczej się kopie
|
||||
double MinH; double MaxH; //zakres ruchu pantografu, nigdzie nie używany
|
||||
double CSW; //szerokość części roboczej (styku) ślizgacza
|
||||
double MinV; double MaxV; //minimalne i maksymalne akceptowane napięcie
|
||||
long CollectorsNo; //musi być tu, bo inaczej się kopie
|
||||
double MinH; double MaxH; //zakres ruchu pantografu, nigdzie nie używany
|
||||
double CSW; //szerokość części roboczej (styku) ślizgacza
|
||||
double MinV; double MaxV; //minimalne i maksymalne akceptowane napięcie
|
||||
double OVP; //czy jest przekaznik nadnapieciowy
|
||||
double InsetV; //minimalne napięcie wymagane do załączenia
|
||||
double MinPress; //minimalne ciśnienie do załączenia WS
|
||||
double MaxPress; //maksymalne ciśnienie za reduktorem
|
||||
double InsetV; //minimalne napięcie wymagane do załączenia
|
||||
double MinPress; //minimalne ciśnienie do załączenia WS
|
||||
double MaxPress; //maksymalne ciśnienie za reduktorem
|
||||
//inline TCurrentCollector() {
|
||||
// CollectorsNo = 0;
|
||||
// MinH, MaxH, CSW, MinV, MaxV = 0.0;
|
||||
// OVP, InsetV, MinPress, MaxPress = 0.0;
|
||||
//}
|
||||
};
|
||||
/*typy źródeł mocy*/
|
||||
/*typy źródeł mocy*/
|
||||
enum TPowerSource { NotDefined, InternalSource, Transducer, Generator, Accumulator, CurrentCollector, PowerCable, Heater };
|
||||
|
||||
|
||||
@@ -417,7 +417,7 @@ struct _mover__3
|
||||
TBoilerType Boiler;
|
||||
};
|
||||
|
||||
/*parametry źródeł mocy*/
|
||||
/*parametry źródeł mocy*/
|
||||
struct TPowerParameters
|
||||
{
|
||||
double MaxVoltage;
|
||||
@@ -541,7 +541,7 @@ struct TSecuritySystem
|
||||
{
|
||||
int SystemType; /*0: brak, 1: czuwak aktywny, 2: SHP/sygnalizacja kabinowa*/
|
||||
double AwareDelay; // czas powtarzania czuwaka
|
||||
double AwareMinSpeed; // minimalna prędkość załączenia czuwaka, normalnie 10% Vmax
|
||||
double AwareMinSpeed; // minimalna prędkość załączenia czuwaka, normalnie 10% Vmax
|
||||
double SoundSignalDelay;
|
||||
double EmergencyBrakeDelay;
|
||||
int Status; /*0: wylaczony, 1: wlaczony, 2: czuwak, 4: shp, 8: alarm, 16: hamowanie awaryjne*/
|
||||
@@ -581,20 +581,20 @@ struct TCoupling {
|
||||
double DmaxC = 0.1;
|
||||
double FmaxC = 1000.0;
|
||||
TCouplerType CouplerType = NoCoupler; /*typ sprzegu*/
|
||||
/*zmienne*/
|
||||
/*zmienne*/
|
||||
int CouplingFlag = 0; /*0 - wirtualnie, 1 - sprzegi, 2 - pneumatycznie, 4 - sterowanie, 8 - kabel mocy*/
|
||||
int AllowedFlag = 3; //Ra: znaczenie jak wyżej, maska dostępnych // domyślnie hak i hamulec, inne trzeba włączyć jawnie w FIZ
|
||||
int AllowedFlag = 3; //Ra: znaczenie jak wyżej, maska dostępnych
|
||||
bool Render = false; /*ABu: czy rysowac jak zaczepiony sprzeg*/
|
||||
double CoupleDist = 0.0; /*ABu: optymalizacja - liczenie odleglosci raz na klatkę, bez iteracji*/
|
||||
double CoupleDist = 0.0; /*ABu: optymalizacja - liczenie odleglosci raz na klatkę, bez iteracji*/
|
||||
class TMoverParameters *Connected = nullptr; /*co jest podlaczone*/
|
||||
int ConnectedNr = 0; //Ra: od której strony podłączony do (Connected): 0=przód, 1=tył
|
||||
int ConnectedNr = 0; //Ra: od której strony podłączony do (Connected): 0=przód, 1=tył
|
||||
double CForce = 0.0; /*sila z jaka dzialal*/
|
||||
double Dist = 0.0; /*strzalka ugiecia zderzaków*/
|
||||
double Dist = 0.0; /*strzalka ugiecia zderzaków*/
|
||||
bool CheckCollision = false; /*czy sprawdzac sile czy pedy*/
|
||||
};
|
||||
|
||||
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:
|
||||
|
||||
double dMoveLen;
|
||||
@@ -605,7 +605,7 @@ public:
|
||||
/*--sekcja stalych typowych parametrow*/
|
||||
std::string TypeName; /*nazwa serii/typu*/
|
||||
//TrainType: string; {typ: EZT/elektrowoz - Winger 040304}
|
||||
int TrainType; /*Ra: powinno być szybciej niż string*/
|
||||
int TrainType; /*Ra: powinno być szybciej niż string*/
|
||||
TEngineTypes EngineType; /*typ napedu*/
|
||||
TPowerParameters EnginePowerSource; /*zrodlo mocy dla silnikow*/
|
||||
TPowerParameters SystemPowerSource; /*zrodlo mocy dla systemow sterowania/przetwornic/sprezarek*/
|
||||
@@ -614,7 +614,7 @@ public:
|
||||
TPowerParameters LightPowerSource; /*zrodlo mocy dla oswietlenia*/
|
||||
TPowerParameters AlterLightPowerSource;/*alternatywne mocy dla oswietlenia*/
|
||||
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 HeatingPower; double LightPower; /*moc pobierana na ogrzewanie/oswietlenie*/
|
||||
double BatteryVoltage; /*Winger - baterie w elektrykach*/
|
||||
@@ -626,7 +626,7 @@ public:
|
||||
double NominalBatteryVoltage; /*Winger - baterie w elektrykach*/
|
||||
TDimension Dim; /*wymiary*/
|
||||
double Cx; /*wsp. op. aerodyn.*/
|
||||
double Floor; //poziom podłogi dla ładunków
|
||||
double Floor; //poziom podłogi dla ładunków
|
||||
double WheelDiameter; /*srednica kol napednych*/
|
||||
double WheelDiameterL; //Ra: srednica kol tocznych przednich
|
||||
double WheelDiameterT; //Ra: srednica kol tocznych tylnych
|
||||
@@ -655,7 +655,7 @@ public:
|
||||
|
||||
TLocalBrake LocalBrake; /*rodzaj hamulca indywidualnego*/
|
||||
TBrakePressureTable BrakePressureTable; /*wyszczegolnienie cisnien w rurze*/
|
||||
TBrakePressure BrakePressureActual; //wartości ważone dla aktualnej pozycji kranu
|
||||
TBrakePressure BrakePressureActual; //wartości ważone dla aktualnej pozycji kranu
|
||||
int ASBType; /*0: brak hamulca przeciwposlizgowego, 1: reczny, 2: automat*/
|
||||
int TurboTest;
|
||||
double MaxBrakeForce; /*maksymalna sila nacisku hamulca*/
|
||||
@@ -666,7 +666,7 @@ public:
|
||||
/*max. cisnienie w cyl. ham., stala proporcjonalnosci p-K*/
|
||||
double HighPipePress; double LowPipePress; double DeltaPipePress;
|
||||
/*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;
|
||||
/*pojemnosc powietrza w ukladzie hamulcowym, w ukladzie glownej sprezarki [m^3] */
|
||||
int BrakeCylNo; /*ilosc cylindrow ham.*/
|
||||
@@ -690,7 +690,7 @@ public:
|
||||
int ScndCtrlPosNo;
|
||||
int LightsPosNo; int LightsDefPos;
|
||||
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 MBrake; /*Czy jest hamulec reczny*/
|
||||
double StopBrakeDecc;
|
||||
@@ -727,7 +727,7 @@ public:
|
||||
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 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*/
|
||||
double dizel_Mmax; double dizel_nMmax; double dizel_Mnmax; double dizel_nmax; double dizel_nominalfill;
|
||||
@@ -773,7 +773,7 @@ public:
|
||||
bool DoorClosureWarning; /*czy jest ostrzeganie przed zamknieciem*/
|
||||
double DoorOpenSpeed; 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 PlatformMaxShift; /*wysuniecie stopnia*/
|
||||
int PlatformOpenMethod; /*sposob animacji stopnia*/
|
||||
@@ -781,7 +781,7 @@ public:
|
||||
|
||||
/*--sekcja zmiennych*/
|
||||
/*--opis konkretnego egzemplarza taboru*/
|
||||
TLocation Loc; //pozycja pojazdów do wyznaczenia odległości pomiędzy sprzęgami
|
||||
TLocation Loc; //pozycja pojazdów do wyznaczenia odległości pomiędzy sprzęgami
|
||||
TRotation Rot;
|
||||
std::string Name; /*nazwa wlasna*/
|
||||
TCoupling Couplers[2]; //urzadzenia zderzno-sprzegowe, polaczenia miedzy wagonami
|
||||
@@ -790,9 +790,9 @@ public:
|
||||
bool EventFlag; /*!o true jesli cos nietypowego sie wydarzy*/
|
||||
int SoundFlag; /*!o patrz stale sound_ */
|
||||
double DistCounter; /*! licznik kilometrow */
|
||||
double V; //predkosc w [m/s] względem sprzęgów (dodania gdy jedzie w stronę 0)
|
||||
double Vel; //moduł prędkości w [km/h], używany przez AI
|
||||
double AccS; //efektywne przyspieszenie styczne w [m/s^2] (wszystkie siły)
|
||||
double V; //predkosc w [m/s] względem sprzęgów (dodania gdy jedzie w stronę 0)
|
||||
double Vel; //moduł prędkości w [km/h], używany przez AI
|
||||
double AccS; //efektywne przyspieszenie styczne w [m/s^2] (wszystkie siły)
|
||||
double AccN; //przyspieszenie normalne w [m/s^2]
|
||||
double AccV;
|
||||
double nrot;
|
||||
@@ -801,8 +801,8 @@ public:
|
||||
double dL; 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 UnitBrakeForce; /*!s siła hamowania przypadająca na jeden element*/
|
||||
double Ntotal; /*!s siła nacisku klockow*/
|
||||
double UnitBrakeForce; /*!s siła hamowania przypadająca na jeden element*/
|
||||
double Ntotal; /*!s siła nacisku klockow*/
|
||||
bool SlippingWheels; bool SandDose; /*! poslizg kol, sypanie piasku*/
|
||||
double Sand; /*ilosc piasku*/
|
||||
double BrakeSlippingTimer; /*pomocnicza zmienna do wylaczania przeciwposlizgu*/
|
||||
@@ -851,8 +851,8 @@ public:
|
||||
/*komenda przekazywana przez PutCommand*/
|
||||
/*i wykonywana przez RunInternalCommand*/
|
||||
std::string CommandOut; /*komenda przekazywana przez ExternalCommand*/
|
||||
std::string CommandLast; //Ra: ostatnio wykonana komenda do podglądu
|
||||
double ValueOut; /*argument komendy która ma byc przekazana na zewnatrz*/
|
||||
std::string CommandLast; //Ra: ostatnio wykonana komenda do podglądu
|
||||
double ValueOut; /*argument komendy która ma byc przekazana na zewnatrz*/
|
||||
|
||||
TTrackShape RunningShape;/*geometria toru po ktorym jedzie pojazd*/
|
||||
TTrackParam RunningTrack;/*parametry toru po ktorym jedzie pojazd*/
|
||||
@@ -864,10 +864,10 @@ public:
|
||||
int ScndCtrlPos; /*polozenie dodatkowego nastawnika*/
|
||||
int LightsPos;
|
||||
int ActiveDir; //czy lok. jest wlaczona i w ktorym kierunku:
|
||||
//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 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)
|
||||
//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 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)
|
||||
double LastSwitchingTime; /*czas ostatniego przelaczania czegos*/
|
||||
//WarningSignal: byte; {0: nie trabi, 1,2: trabi}
|
||||
bool DepartureSignal; /*sygnal odjazdu*/
|
||||
@@ -876,14 +876,14 @@ public:
|
||||
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;
|
||||
/*ilosc obrotow, prad silnika i calkowity, momenty, sily napedne*/
|
||||
//Ra: Im jest ujemny, jeśli lok jedzie w stronę sprzęgu 1
|
||||
//a ujemne powinien być przy odwróconej polaryzacji sieci...
|
||||
//w wielu miejscach jest używane abs(Im)
|
||||
//Ra: Im jest ujemny, jeśli lok jedzie w stronę sprzęgu 1
|
||||
//a ujemne powinien być przy odwróconej polaryzacji sieci...
|
||||
//w wielu miejscach jest używane abs(Im)
|
||||
int Imin; int Imax; /*prad przelaczania automatycznego rozruchu, prad bezpiecznika*/
|
||||
double Voltage; /*aktualne napiecie sieci zasilajacej*/
|
||||
int MainCtrlActualPos; /*wskaznik RList*/
|
||||
int ScndCtrlActualPos; /*wskaznik MotorParam*/
|
||||
bool DelayCtrlFlag; //czy czekanie na 1. pozycji na załączenie?
|
||||
bool DelayCtrlFlag; //czy czekanie na 1. pozycji na załączenie?
|
||||
double LastRelayTime; /*czas ostatniego przelaczania stycznikow*/
|
||||
bool AutoRelayFlag; /*mozna zmieniac jesli AutoRelayType=2*/
|
||||
bool FuseFlag; /*!o bezpiecznik nadmiarowy*/
|
||||
@@ -918,8 +918,8 @@ public:
|
||||
/*-dla wagonow*/
|
||||
long Load; /*masa w T lub ilosc w sztukach - zaladowane*/
|
||||
std::string LoadType; /*co jest zaladowane*/
|
||||
int LoadStatus; //+1=trwa rozladunek,+2=trwa zaladunek,+4=zakończono,0=zaktualizowany model
|
||||
double LastLoadChangeTime; //raz (roz)ładowania
|
||||
int LoadStatus; //+1=trwa rozladunek,+2=trwa zaladunek,+4=zakończono,0=zaktualizowany model
|
||||
double LastLoadChangeTime; //raz (roz)ładowania
|
||||
|
||||
bool DoorBlocked; //Czy jest blokada drzwi
|
||||
bool DoorLeftOpened; //stan drzwi
|
||||
@@ -946,20 +946,20 @@ public:
|
||||
double FrictConst2d;
|
||||
double TotalMassxg; /*TotalMass*g*/
|
||||
|
||||
vector3 vCoulpler[2]; // powtórzenie współrzędnych sprzęgów z DynObj :/
|
||||
vector3 DimHalf; // połowy rozmiarów do obliczeń geometrycznych
|
||||
// int WarningSignal; //0: nie trabi, 1,2: trabi syreną o podanym numerze
|
||||
int WarningSignal; // tymczasowo 8bit, ze względu na funkcje w MTools
|
||||
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ą
|
||||
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
|
||||
vector3 vCoulpler[2]; // powtórzenie współrzędnych sprzęgów z DynObj :/
|
||||
vector3 DimHalf; // połowy rozmiarów do obliczeń geometrycznych
|
||||
// int WarningSignal; //0: nie trabi, 1,2: trabi syreną o podanym numerze
|
||||
int WarningSignal; // tymczasowo 8bit, ze względu na funkcje w MTools
|
||||
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ą
|
||||
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
|
||||
private:
|
||||
double CouplerDist(int Coupler);
|
||||
|
||||
public:
|
||||
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 vector3 &Loc1, const vector3 &Loc2, const vector3 &Dim1, const vector3 &Dim2);
|
||||
*/ //bool AttachA(int ConnectNo, int ConnectToNr, TMoverParameters *ConnectTo, int CouplingType, bool Forced = false);
|
||||
@@ -970,7 +970,7 @@ public:
|
||||
bool DirectionForward();
|
||||
void BrakeLevelSet(double b);
|
||||
bool BrakeLevelAdd(double b);
|
||||
bool IncBrakeLevel(); // wersja na użytek AI
|
||||
bool IncBrakeLevel(); // wersja na użytek AI
|
||||
bool DecBrakeLevel();
|
||||
bool ChangeCab(int direction);
|
||||
bool CurrentSwitch(int direction);
|
||||
|
||||
1046
McZapkie/Mover.cpp
1046
McZapkie/Mover.cpp
File diff suppressed because it is too large
Load Diff
@@ -129,7 +129,7 @@ void TRapid::Update(double dt)
|
||||
BrakeRes->Flow(-dV);
|
||||
}
|
||||
|
||||
// ------ PRZEK£ADNIK CI¥G£Y ------
|
||||
// ------ PRZEKŁADNIK CIĄGŁY ------
|
||||
|
||||
void TPrzekCiagly::SetMult(double m)
|
||||
{
|
||||
@@ -157,7 +157,7 @@ void TPrzekCiagly::Update(double dt)
|
||||
BrakeRes->Flow(-dV);
|
||||
}
|
||||
|
||||
// ------ PRZEK£ADNIK CI¥G£Y ------
|
||||
// ------ PRZEKŁADNIK CIĄGŁY ------
|
||||
|
||||
void TPrzek_PZZ::SetLBP(double P)
|
||||
{
|
||||
@@ -524,9 +524,9 @@ void TNESt3::SetSize(int size, std::string params) // ustawianie dysz (rozmiaru
|
||||
|
||||
if( ( params.find( "3d" ) != std::string::npos )
|
||||
|| ( params.find( "4d" ) != std::string::npos ) ) {
|
||||
autom = false;
|
||||
autom = false;
|
||||
}
|
||||
else
|
||||
else
|
||||
autom = true;
|
||||
if ((params.find("HBG300") != std::string::npos))
|
||||
HBG300 = 1;
|
||||
|
||||
@@ -113,14 +113,14 @@ class TPrzeciwposlizg : public TRura // przy napelnianiu - rura, przy poslizgu -
|
||||
// przekladnik dwustopniowy
|
||||
class TRapid : public TPrzekladnik {
|
||||
|
||||
private:
|
||||
private:
|
||||
bool RapidStatus = false; // status rapidu
|
||||
double RapidMult = 0.0; // przelozenie (w dol)
|
||||
// Komora2: real;
|
||||
double DN = 0.0;
|
||||
double DL = 0.0; // srednice dysz napelniania i luzowania
|
||||
|
||||
public:
|
||||
public:
|
||||
void SetRapidParams(double mult, double size);
|
||||
void SetRapidStatus(bool rs);
|
||||
void Update(double dt) /*override*/;
|
||||
@@ -132,7 +132,7 @@ public:
|
||||
// AL2
|
||||
class TPrzekCiagly : public TPrzekladnik {
|
||||
|
||||
private:
|
||||
private:
|
||||
double mult = 0.0;
|
||||
|
||||
public:
|
||||
@@ -146,10 +146,10 @@ private:
|
||||
// podwojny zawor zwrotny
|
||||
class TPrzek_PZZ : public TPrzekladnik {
|
||||
|
||||
private:
|
||||
private:
|
||||
double LBP = 0.0;
|
||||
|
||||
public:
|
||||
public:
|
||||
void SetLBP(double P);
|
||||
void Update(double dt) /*override*/;
|
||||
inline TPrzek_PZZ() :
|
||||
@@ -170,10 +170,10 @@ class TPrzekZalamany : public TPrzekladnik // Knicksventil
|
||||
// przy napelnianiu - rura, przy hamowaniu - upust
|
||||
class TPrzekED : public TRura {
|
||||
|
||||
private:
|
||||
private:
|
||||
double MaxP = 0.0;
|
||||
|
||||
public:
|
||||
public:
|
||||
void SetP(double P);
|
||||
void Update(double dt) /*override*/;
|
||||
inline TPrzekED() :
|
||||
@@ -183,8 +183,8 @@ public:
|
||||
|
||||
class TNESt3 : public TBrake {
|
||||
|
||||
private:
|
||||
std::shared_ptr<TReservoir> CntrlRes; // zbiornik sterujšcy
|
||||
private:
|
||||
std::shared_ptr<TReservoir> CntrlRes; // zbiornik sterujacy
|
||||
std::shared_ptr<TReservoir> Miedzypoj; // pojemnosc posrednia (urojona) do napelniania ZP i ZS
|
||||
std::shared_ptr<TPrzekladnik> Przekladniki[ 4 ];
|
||||
double Nozzles[ dMAX ]; // dysze
|
||||
@@ -205,7 +205,7 @@ private:
|
||||
bool autom = false; // odluzniacz samoczynny
|
||||
double LBP = 0.0; // cisnienie hamulca pomocniczego
|
||||
|
||||
public:
|
||||
public:
|
||||
inline TNESt3(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) :
|
||||
TBrake( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa)
|
||||
{}
|
||||
|
||||
@@ -172,7 +172,7 @@ double TBrakeCyl::pa()
|
||||
return P() * 0.1;
|
||||
}
|
||||
|
||||
/* NOWSZA WERSJA - maksymalne ciśnienie to ok. 4,75 bar, co powoduje
|
||||
/* NOWSZA WERSJA - maksymalne ciśnienie to ok. 4,75 bar, co powoduje
|
||||
// problemy przy rapidzie w lokomotywach, gdyz jest3
|
||||
// osiagany wierzcholek paraboli
|
||||
function TBrakeCyl.P:real;
|
||||
@@ -321,7 +321,7 @@ double TBrake::GetBCP()
|
||||
return BrakeCyl->P();
|
||||
}
|
||||
|
||||
// ciśnienie sterujące hamowaniem elektro-dynamicznym
|
||||
// ciśnienie sterujące hamowaniem elektro-dynamicznym
|
||||
double TBrake::GetEDBCP()
|
||||
{
|
||||
return 0;
|
||||
@@ -1273,7 +1273,7 @@ double TLSt::GetPF(double PP, double dt, double Vel)
|
||||
if (EDFlag > 0.2)
|
||||
temp = 10000;
|
||||
|
||||
// powtarzacz — podwojny zawor zwrotny
|
||||
// powtarzacz — podwojny zawor zwrotny
|
||||
temp = Max0R(((CVP - BCP) * BVM + ASBP * int((BrakeStatus & b_asb) == b_asb)) / temp, LBP);
|
||||
// luzowanie CH
|
||||
if ((BrakeCyl->P() > temp + 0.005) || (temp < 0.28))
|
||||
@@ -1454,7 +1454,7 @@ double TEStED::GetPF(double PP, double dt, double Vel)
|
||||
// if EDFlag then temp:=1000;
|
||||
// temp:=temp/(1-);
|
||||
|
||||
// powtarzacz — podwojny zawor zwrotny
|
||||
// powtarzacz — podwojny zawor zwrotny
|
||||
temp = Max0R(LoadC * BCP / temp * Min0R(Max0R(1 - EDFlag, 0), 1), LBP);
|
||||
|
||||
if ((BrakeCyl->P() > temp))
|
||||
|
||||
@@ -12,7 +12,7 @@ http://mozilla.org/MPL/2.0/.
|
||||
MaSzyna EU07 - SPKS
|
||||
Brakes.
|
||||
Copyright (C) 2007-2014 Maciej Cierniak
|
||||
*/
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
@@ -23,13 +23,13 @@ moze jeszcze jakis SW
|
||||
/*
|
||||
Zrobione:
|
||||
ESt3, ESt3AL2, ESt4R, LSt, FV4a, FD1, EP2, prosty westinghouse
|
||||
duzo wersji ¿eliwa
|
||||
duzo wersji żeliwa
|
||||
KE
|
||||
Tarcze od 152A
|
||||
Magnetyki (implementacja w mover.pas)
|
||||
Matrosow 394
|
||||
H14K1 (zasadniczy), H1405 (pomocniczy), St113 (ep)
|
||||
Knorr/West EP - ¿eby by³
|
||||
Knorr/West EP - żeby był
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
@@ -77,7 +77,7 @@ static int const s_fv4a_t = 4; //wyplyw z czasowego
|
||||
|
||||
/*pary cierne*/
|
||||
static int const bp_P10 = 0;
|
||||
static int const bp_P10Bg = 2; //¿eliwo fosforowe P10
|
||||
static int const bp_P10Bg = 2; //żeliwo fosforowe P10
|
||||
static int const bp_P10Bgu = 1;
|
||||
static int const bp_LLBg = 4; //komp. b.n.t.
|
||||
static int const bp_LLBgu = 3;
|
||||
@@ -87,12 +87,12 @@ static int const bp_KBg = 8; //komp. w.t.
|
||||
static int const bp_KBgu = 7;
|
||||
static int const bp_D1 = 9; //tarcze
|
||||
static int const bp_D2 = 10;
|
||||
static int const bp_FR513 = 11; //Frenoplast FR513
|
||||
static int const bp_Cosid = 12; //jakistam kompozyt :D
|
||||
static int const bp_PKPBg = 13; //¿eliwo PKP
|
||||
static int const bp_FR513 = 11; // Frenoplast FR513
|
||||
static int const bp_Cosid = 12; // jakistam kompozyt :D
|
||||
static int const bp_PKPBg = 13; //żeliwo PKP
|
||||
static int const bp_PKPBgu = 14;
|
||||
static int const bp_MHS = 128; //magnetyczny hamulec szynowy
|
||||
static int const bp_P10yBg = 15; //¿eliwo fosforowe P10
|
||||
static int const bp_MHS = 128; // magnetyczny hamulec szynowy
|
||||
static int const bp_P10yBg = 15; //żeliwo fosforowe P10
|
||||
static int const bp_P10yBgu = 16;
|
||||
static int const bp_FR510 = 17; //Frenoplast FR510
|
||||
|
||||
@@ -103,17 +103,17 @@ static int const sf_CylU = 8; //cylinder - oproznianie
|
||||
static int const sf_rel = 16; //odluzniacz
|
||||
static int const sf_ep = 32; //zawory ep
|
||||
|
||||
static int const bh_MIN = 0; //minimalna pozycja
|
||||
static int const bh_MAX = 1; //maksymalna pozycja
|
||||
static int const bh_FS = 2; //napelnianie uderzeniowe //jesli nie ma, to jazda
|
||||
static int const bh_RP = 3; //jazda
|
||||
static int const bh_NP = 4; //odciecie - podwojna trakcja
|
||||
static int const bh_MB = 5; //odciecie - utrzymanie stopnia hamowania/pierwszy 1 stopien hamowania
|
||||
static int const bh_FB = 6; //pelne
|
||||
static int const bh_EB = 7; //nagle
|
||||
static int const bh_EPR = 8; //ep - luzowanie //pelny luz dla ep k¹towego
|
||||
static int const bh_EPN = 9; //ep - utrzymanie //jesli rowne luzowaniu, wtedy sterowanie przyciskiem
|
||||
static int const bh_EPB = 10; //ep - hamowanie //pelne hamowanie dla ep k¹towego
|
||||
static int const bh_MIN = 0; // minimalna pozycja
|
||||
static int const bh_MAX = 1; // maksymalna pozycja
|
||||
static int const bh_FS = 2; // napelnianie uderzeniowe //jesli nie ma, to jazda
|
||||
static int const bh_RP = 3; // jazda
|
||||
static int const bh_NP = 4; // odciecie - podwojna trakcja
|
||||
static int const bh_MB = 5; // odciecie - utrzymanie stopnia hamowania/pierwszy 1 stopien hamowania
|
||||
static int const bh_FB = 6; // pelne
|
||||
static int const bh_EB = 7; // nagle
|
||||
static int const bh_EPR = 8; // ep - luzowanie //pelny luz dla ep kątowego
|
||||
static int const bh_EPN = 9; // ep - utrzymanie //jesli rowne luzowaniu, wtedy sterowanie przyciskiem
|
||||
static int const bh_EPB = 10; // ep - hamowanie //pelne hamowanie dla ep kątowego
|
||||
|
||||
|
||||
static double const SpgD = 0.7917;
|
||||
@@ -137,28 +137,28 @@ static int const i_bcpno = 6;
|
||||
//klasa obejmujaca pojedyncze zbiorniki
|
||||
class TReservoir {
|
||||
|
||||
protected:
|
||||
protected:
|
||||
double Cap = 1.0;
|
||||
double Vol = 0.0;
|
||||
double dVol = 0.0;
|
||||
|
||||
public:
|
||||
void CreateCap(double Capacity);
|
||||
void CreatePress(double Press);
|
||||
virtual double pa();
|
||||
virtual double P();
|
||||
void Flow(double dv);
|
||||
void Act();
|
||||
public:
|
||||
void CreateCap(double Capacity);
|
||||
void CreatePress(double Press);
|
||||
virtual double pa();
|
||||
virtual double P();
|
||||
void Flow(double dv);
|
||||
void Act();
|
||||
|
||||
TReservoir() = default;
|
||||
};
|
||||
|
||||
typedef TReservoir *PReservoir;
|
||||
typedef TReservoir *PReservoir;
|
||||
|
||||
|
||||
class TBrakeCyl : public TReservoir {
|
||||
|
||||
public:
|
||||
public:
|
||||
virtual double pa()/*override*/;
|
||||
virtual double P()/*override*/;
|
||||
TBrakeCyl() : TReservoir() {};
|
||||
@@ -167,7 +167,7 @@ class TBrakeCyl : public TReservoir {
|
||||
//klasa obejmujaca uklad hamulca zespolonego pojazdu
|
||||
class TBrake {
|
||||
|
||||
protected:
|
||||
protected:
|
||||
std::shared_ptr<TReservoir> BrakeCyl; //silownik
|
||||
std::shared_ptr<TReservoir> BrakeRes; //ZP
|
||||
std::shared_ptr<TReservoir> ValveRes; //komora wstepna
|
||||
@@ -188,7 +188,7 @@ class TBrake {
|
||||
int BrakeStatus = 0; //flaga stanu
|
||||
int SoundFlag = 0;
|
||||
|
||||
public:
|
||||
public:
|
||||
TBrake(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa);
|
||||
//maksymalne cisnienie, promien, skok roboczy, pojemnosc ZP, ilosc cylindrow, opoznienia hamulca, material klockow, osie hamowane, klocki na os;
|
||||
virtual void Init(double PP, double HPP, double LPP, double BP, int BDF); //inicjalizacja hamulca
|
||||
@@ -212,14 +212,14 @@ class TBrake {
|
||||
void ASB(int state); //hamulec przeciwposlizgowy
|
||||
int GetStatus(); //flaga statusu, moze sie przydac do odglosow
|
||||
void SetASBP(double Press); //ustalenie cisnienia pp
|
||||
virtual void ForceEmptiness();
|
||||
int GetSoundFlag();
|
||||
virtual void ForceEmptiness();
|
||||
int GetSoundFlag();
|
||||
virtual void SetED(double EDstate) {}; //stan hamulca ED do luzowania
|
||||
};
|
||||
|
||||
class TWest : public TBrake {
|
||||
|
||||
private:
|
||||
private:
|
||||
double LBP = 0.0; //cisnienie hamulca pomocniczego
|
||||
double dVP = 0.0; //pobor powietrza wysokiego cisnienia
|
||||
double EPS = 0.0; //stan elektropneumatyka
|
||||
@@ -228,7 +228,7 @@ class TWest : public TBrake {
|
||||
double TareBP = 0.0; //cisnienie dla proznego
|
||||
double LoadC = 0.0; //wspolczynnik przystawki wazacej
|
||||
|
||||
public:
|
||||
public:
|
||||
void Init(double PP, double HPP, double LPP, double BP, int BDF)/*override*/;
|
||||
void SetLBP(double P); //cisnienie z hamulca pomocniczego
|
||||
double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG
|
||||
@@ -244,13 +244,13 @@ class TWest : public TBrake {
|
||||
|
||||
class TESt : public TBrake {
|
||||
|
||||
private:
|
||||
private:
|
||||
|
||||
protected:
|
||||
std::shared_ptr<TReservoir> CntrlRes; //zbiornik steruj¹cy
|
||||
double BVM = 0.0; //przelozenie PG-CH
|
||||
protected:
|
||||
std::shared_ptr<TReservoir> CntrlRes; // zbiornik sterujący
|
||||
double BVM = 0.0; // przelozenie PG-CH
|
||||
|
||||
public:
|
||||
public:
|
||||
void Init(double PP, double HPP, double LPP, double BP, int BDF)/*override*/;
|
||||
double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG
|
||||
void EStParams(double i_crc); //parametry charakterystyczne dla ESt
|
||||
@@ -262,17 +262,17 @@ class TESt : public TBrake {
|
||||
|
||||
inline TESt(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) :
|
||||
TBrake( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa)
|
||||
{
|
||||
{
|
||||
CntrlRes = std::make_shared<TReservoir>();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class TESt3 : public TESt {
|
||||
|
||||
private:
|
||||
private:
|
||||
//double CylFlowSpeed[2][2]; //zmienna nie uzywana
|
||||
|
||||
public:
|
||||
public:
|
||||
double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG
|
||||
|
||||
inline TESt3(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) :
|
||||
@@ -282,14 +282,14 @@ class TESt3 : public TESt {
|
||||
|
||||
class TESt3AL2 : public TESt3 {
|
||||
|
||||
private:
|
||||
private:
|
||||
std::shared_ptr<TReservoir> ImplsRes; //komora impulsowa
|
||||
double TareM = 0.0; //masa proznego
|
||||
double LoadM = 0.0; //i pelnego
|
||||
double TareBP = 0.0; //cisnienie dla proznego
|
||||
double LoadC = 0.0;
|
||||
|
||||
public:
|
||||
public:
|
||||
void Init(double PP, double HPP, double LPP, double BP, int BDF)/*override*/;
|
||||
double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG
|
||||
void PLC(double mass); //wspolczynnik cisnienia przystawki wazacej
|
||||
@@ -297,42 +297,42 @@ class TESt3AL2 : public TESt3 {
|
||||
|
||||
inline TESt3AL2(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) :
|
||||
TESt3( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa)
|
||||
{
|
||||
{
|
||||
ImplsRes = std::make_shared<TReservoir>();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class TESt4R : public TESt {
|
||||
|
||||
private:
|
||||
private:
|
||||
bool RapidStatus = false;
|
||||
|
||||
protected:
|
||||
protected:
|
||||
std::shared_ptr<TReservoir> ImplsRes; //komora impulsowa
|
||||
double RapidTemp = 0.0; //aktualne, zmienne przelozenie
|
||||
|
||||
public:
|
||||
public:
|
||||
void Init(double PP, double HPP, double LPP, double BP, int BDF)/*override*/;
|
||||
double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG
|
||||
|
||||
inline TESt4R(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) :
|
||||
TESt( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa)
|
||||
{
|
||||
{
|
||||
ImplsRes = std::make_shared<TReservoir>();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class TLSt : public TESt4R {
|
||||
|
||||
private:
|
||||
// double CylFlowSpeed[2][2]; // zmienna nie u¿ywana
|
||||
private:
|
||||
// double CylFlowSpeed[2][2]; // zmienna nie używana
|
||||
|
||||
protected:
|
||||
protected:
|
||||
double LBP = 0.0; //cisnienie hamulca pomocniczego
|
||||
double RM = 0.0; //przelozenie rapida
|
||||
double EDFlag = 0.0; //luzowanie hamulca z powodu zalaczonego ED
|
||||
|
||||
public:
|
||||
public:
|
||||
void Init(double PP, double HPP, double LPP, double BP, int BDF)/*override*/;
|
||||
void SetLBP(double P); //cisnienie z hamulca pomocniczego
|
||||
void SetRM(double RMR); //ustalenie przelozenia rapida
|
||||
@@ -348,7 +348,7 @@ class TLSt : public TESt4R {
|
||||
|
||||
class TEStED : public TLSt { //zawor z EP09 - Est4 z oddzielnym przekladnikiem, kontrola rapidu i takie tam
|
||||
|
||||
private:
|
||||
private:
|
||||
std::shared_ptr<TReservoir> Miedzypoj; //pojemnosc posrednia (urojona) do napelniania ZP i ZS
|
||||
double Nozzles[ 11 ]; //dysze
|
||||
bool Zamykajacy = false; //pamiec zaworka zamykajacego
|
||||
@@ -359,7 +359,7 @@ class TEStED : public TLSt { //zawor z EP09 - Est4 z oddzielnym przekladnikiem,
|
||||
double LoadC = 0.0;
|
||||
|
||||
|
||||
public:
|
||||
public:
|
||||
void Init(double PP, double HPP, double LPP, double BP, int BDF)/*override*/;
|
||||
double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG
|
||||
double GetEDBCP()/*override*/; //cisnienie tylko z hamulca zasadniczego, uzywane do hamulca ED
|
||||
@@ -368,14 +368,14 @@ class TEStED : public TLSt { //zawor z EP09 - Est4 z oddzielnym przekladnikiem,
|
||||
|
||||
inline TEStED(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) :
|
||||
TLSt( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa)
|
||||
{
|
||||
{
|
||||
Miedzypoj = std::make_shared<TReservoir>();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class TEStEP2 : public TLSt {
|
||||
|
||||
private:
|
||||
private:
|
||||
double TareM = 0.0; //masa proznego
|
||||
double LoadM = 0.0; //masa pelnego
|
||||
double TareBP = 0.0; //cisnienie dla proznego
|
||||
@@ -383,7 +383,7 @@ class TEStEP2 : public TLSt {
|
||||
double EPS = 0.0;
|
||||
|
||||
|
||||
public:
|
||||
public:
|
||||
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
|
||||
void PLC(double mass); //wspolczynnik cisnienia przystawki wazacej
|
||||
@@ -397,51 +397,51 @@ class TEStEP2 : public TLSt {
|
||||
|
||||
class TCV1 : public TBrake {
|
||||
|
||||
private:
|
||||
private:
|
||||
double BVM = 0.0; //przelozenie PG-CH
|
||||
|
||||
protected:
|
||||
std::shared_ptr<TReservoir> CntrlRes; //zbiornik steruj¹cy
|
||||
protected:
|
||||
std::shared_ptr<TReservoir> CntrlRes; // zbiornik sterujący
|
||||
|
||||
public:
|
||||
public:
|
||||
void Init(double PP, double HPP, double LPP, double BP, int BDF)/*override*/;
|
||||
double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG
|
||||
double GetCRP()/*override*/;
|
||||
void CheckState(double BCP, double & dV1);
|
||||
double CVs(double BP);
|
||||
double BVs(double BCP);
|
||||
double CVs(double BP);
|
||||
double BVs(double BCP);
|
||||
|
||||
inline TCV1(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) :
|
||||
TBrake( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa)
|
||||
{
|
||||
{
|
||||
CntrlRes = std::make_shared<TReservoir>();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
//class TCV1R : public TCV1
|
||||
|
||||
//{
|
||||
//{
|
||||
//private:
|
||||
// TReservoir *ImplsRes; //komora impulsowa
|
||||
// bool RapidStatus;
|
||||
// TReservoir *ImplsRes; //komora impulsowa
|
||||
// bool RapidStatus;
|
||||
|
||||
//public:
|
||||
// // 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,
|
||||
// int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa,
|
||||
// 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,
|
||||
// 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 {
|
||||
|
||||
private:
|
||||
private:
|
||||
std::shared_ptr<TReservoir> ImplsRes; //komora impulsowa
|
||||
double LBP = 0.0; //cisnienie hamulca pomocniczego
|
||||
|
||||
public:
|
||||
public:
|
||||
void Init(double PP, double HPP, double LPP, double BP, int BDF)/*override*/;
|
||||
double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG
|
||||
void SetLBP(double P); //cisnienie z hamulca pomocniczego
|
||||
@@ -449,16 +449,16 @@ class TCV1L_TR : public TCV1 {
|
||||
|
||||
inline TCV1L_TR(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) :
|
||||
TCV1( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa)
|
||||
{
|
||||
{
|
||||
ImplsRes = std::make_shared<TReservoir>();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class TKE : public TBrake { //Knorr Einheitsbauart — jeden do wszystkiego
|
||||
class TKE : public TBrake { //Knorr Einheitsbauart — jeden do wszystkiego
|
||||
|
||||
private:
|
||||
private:
|
||||
std::shared_ptr<TReservoir> ImplsRes; //komora impulsowa
|
||||
std::shared_ptr<TReservoir> CntrlRes; //zbiornik steruj¹cy
|
||||
std::shared_ptr<TReservoir> CntrlRes; // zbiornik sterujący
|
||||
std::shared_ptr<TReservoir> Brak2Res; //zbiornik pomocniczy 2
|
||||
bool RapidStatus = false;
|
||||
double BVM = 0.0; //przelozenie PG-CH
|
||||
@@ -469,7 +469,7 @@ class TKE : public TBrake { //Knorr Einheitsbauart
|
||||
double RM = 0.0; //przelozenie rapida
|
||||
double LBP = 0.0; //cisnienie hamulca pomocniczego
|
||||
|
||||
public:
|
||||
public:
|
||||
void Init(double PP, double HPP, double LPP, double BP, int BDF)/*override*/;
|
||||
void SetRM(double RMR); //ustalenie przelozenia rapida
|
||||
double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG
|
||||
@@ -485,41 +485,41 @@ class TKE : public TBrake { //Knorr Einheitsbauart
|
||||
|
||||
inline TKE(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) :
|
||||
TBrake( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa)
|
||||
{
|
||||
{
|
||||
ImplsRes = std::make_shared<TReservoir>();
|
||||
CntrlRes = std::make_shared<TReservoir>();
|
||||
Brak2Res = std::make_shared<TReservoir>();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
//klasa obejmujaca krany
|
||||
class TDriverHandle {
|
||||
|
||||
private:
|
||||
// BCP: integer;
|
||||
private:
|
||||
// BCP: integer;
|
||||
|
||||
public:
|
||||
public:
|
||||
bool Time = false;
|
||||
bool TimeEP = false;
|
||||
double Sounds[ 5 ]; //wielkosci przeplywow dla dzwiekow
|
||||
|
||||
virtual double GetPF(double i_bcp, double PP, double HP, double dt, double ep);
|
||||
virtual void Init(double Press);
|
||||
virtual double GetCP();
|
||||
virtual void SetReductor(double nAdj);
|
||||
virtual double GetSound(int i);
|
||||
virtual double GetPos(int i);
|
||||
virtual double GetEP(double pos);
|
||||
virtual double GetPF(double i_bcp, double PP, double HP, double dt, double ep);
|
||||
virtual void Init(double Press);
|
||||
virtual double GetCP();
|
||||
virtual void SetReductor(double nAdj);
|
||||
virtual double GetSound(int i);
|
||||
virtual double GetPos(int i);
|
||||
virtual double GetEP(double pos);
|
||||
};
|
||||
|
||||
class TFV4a : public TDriverHandle {
|
||||
|
||||
private:
|
||||
double CP = 0.0; //zbiornik steruj¹cy
|
||||
private:
|
||||
double CP = 0.0; //zbiornik sterujący
|
||||
double TP = 0.0; //zbiornik czasowy
|
||||
double RP = 0.0; //zbiornik redukcyjny
|
||||
|
||||
public:
|
||||
public:
|
||||
double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/;
|
||||
void Init(double Press)/*override*/;
|
||||
|
||||
@@ -530,20 +530,20 @@ class TFV4a : public TDriverHandle {
|
||||
|
||||
class TFV4aM : public TDriverHandle {
|
||||
|
||||
private:
|
||||
double CP = 0.0; //zbiornik steruj¹cy
|
||||
private:
|
||||
double CP = 0.0; //zbiornik sterujący
|
||||
double TP = 0.0; //zbiornik czasowy
|
||||
double RP = 0.0; //zbiornik redukcyjny
|
||||
double XP = 0.0; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali
|
||||
double XP = 0.0; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali
|
||||
double RedAdj = 0.0; //dostosowanie reduktora cisnienia (krecenie kapturkiem)
|
||||
// Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow
|
||||
// Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow
|
||||
bool Fala = false;
|
||||
static double const pos_table[11]; // = { -2, 6, -1, 0, -2, 1, 4, 6, 0, 0, 0 };
|
||||
|
||||
double LPP_RP(double pos);
|
||||
bool EQ(double pos, double i_pos);
|
||||
double LPP_RP(double pos);
|
||||
bool EQ(double pos, double i_pos);
|
||||
|
||||
public:
|
||||
public:
|
||||
double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/;
|
||||
void Init(double Press)/*override*/;
|
||||
void SetReductor(double nAdj)/*override*/;
|
||||
@@ -557,69 +557,69 @@ class TFV4aM : public TDriverHandle {
|
||||
|
||||
class TMHZ_EN57 : public TDriverHandle {
|
||||
|
||||
private:
|
||||
double CP = 0.0; //zbiornik steruj¹cy
|
||||
private:
|
||||
double CP = 0.0; //zbiornik sterujący
|
||||
double TP = 0.0; //zbiornik czasowy
|
||||
double RP = 0.0; //zbiornik redukcyjny
|
||||
double RedAdj = 0.0; //dostosowanie reduktora cisnienia (krecenie kapturkiem)
|
||||
bool Fala = false;
|
||||
static double const pos_table[11]; //= { -2, 10, -1, 0, 0, 2, 9, 10, 0, 0, 0 };
|
||||
|
||||
double LPP_RP(double pos);
|
||||
bool EQ(double pos, double i_pos);
|
||||
double LPP_RP(double pos);
|
||||
bool EQ(double pos, double i_pos);
|
||||
|
||||
public:
|
||||
public:
|
||||
double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/;
|
||||
void Init(double Press)/*override*/;
|
||||
void SetReductor(double nAdj)/*override*/;
|
||||
double GetSound(int i)/*override*/;
|
||||
double GetPos(int i)/*override*/;
|
||||
double GetCP()/*override*/;
|
||||
double GetEP(double pos);
|
||||
double GetEP(double pos);
|
||||
|
||||
inline TMHZ_EN57(void) :
|
||||
TDriverHandle()
|
||||
{}
|
||||
};
|
||||
|
||||
/* FBS2= class(TTDriverHandle)
|
||||
private
|
||||
CP, TP, RP: real; //zbiornik steruj¹cy, czasowy, redukcyjny
|
||||
XP: real; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali
|
||||
RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem)
|
||||
// Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow
|
||||
Fala: boolean;
|
||||
public
|
||||
function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override;
|
||||
procedure Init(press: real); override;
|
||||
procedure SetReductor(nAdj: real); override;
|
||||
function GetSound(i: int): real; override;
|
||||
function GetPos(i: int): real; override;
|
||||
end; */
|
||||
/* FBS2= class(TTDriverHandle)
|
||||
private
|
||||
CP, TP, RP: real; //zbiornik sterujący, czasowy, redukcyjny
|
||||
XP: real; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali
|
||||
RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem)
|
||||
// Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow
|
||||
Fala: boolean;
|
||||
public
|
||||
function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override;
|
||||
procedure Init(press: real); override;
|
||||
procedure SetReductor(nAdj: real); override;
|
||||
function GetSound(i: int): real; override;
|
||||
function GetPos(i: int): real; override;
|
||||
end; */
|
||||
|
||||
/* TD2= class(TTDriverHandle)
|
||||
private
|
||||
CP, TP, RP: real; //zbiornik steruj¹cy, czasowy, redukcyjny
|
||||
XP: real; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali
|
||||
RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem)
|
||||
// Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow
|
||||
Fala: boolean;
|
||||
public
|
||||
function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override;
|
||||
procedure Init(press: real); override;
|
||||
procedure SetReductor(nAdj: real); override;
|
||||
function GetSound(i: int): real; override;
|
||||
function GetPos(i: int): real; override;
|
||||
end;*/
|
||||
/* TD2= class(TTDriverHandle)
|
||||
private
|
||||
CP, TP, RP: real; //zbiornik sterujący, czasowy, redukcyjny
|
||||
XP: real; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali
|
||||
RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem)
|
||||
// Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow
|
||||
Fala: boolean;
|
||||
public
|
||||
function GetPF(i_bcp:real; pp, hp, dt, ep: real): real; override;
|
||||
procedure Init(press: real); override;
|
||||
procedure SetReductor(nAdj: real); override;
|
||||
function GetSound(i: int): real; override;
|
||||
function GetPos(i: int): real; override;
|
||||
end;*/
|
||||
|
||||
class TM394 : public TDriverHandle {
|
||||
|
||||
private:
|
||||
double CP = 0.0; //zbiornik steruj¹cy, czasowy, redukcyjny
|
||||
private:
|
||||
double CP = 0.0; //zbiornik sterujący, czasowy, redukcyjny
|
||||
double RedAdj = 0.0; //dostosowanie reduktora cisnienia (krecenie kapturkiem)
|
||||
static double const pos_table[11]; // = { -1, 5, -1, 0, 1, 2, 4, 5, 0, 0, 0 };
|
||||
|
||||
public:
|
||||
public:
|
||||
double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/;
|
||||
void Init(double Press)/*override*/;
|
||||
void SetReductor(double nAdj)/*override*/;
|
||||
@@ -633,15 +633,15 @@ class TM394 : public TDriverHandle {
|
||||
|
||||
class TH14K1 : public TDriverHandle {
|
||||
|
||||
private:
|
||||
private:
|
||||
static double const BPT_K[/*?*/ /*-1..4*/ (4) - (-1) + 1][2];
|
||||
static double const pos_table[11]; // = {-1, 4, -1, 0, 1, 2, 3, 4, 0, 0, 0};
|
||||
|
||||
protected:
|
||||
double CP = 0.0; //zbiornik steruj¹cy, czasowy, redukcyjny
|
||||
protected:
|
||||
double CP = 0.0; //zbiornik sterujący, czasowy, redukcyjny
|
||||
double RedAdj = 0.0; //dostosowanie reduktora cisnienia (krecenie kapturkiem)
|
||||
|
||||
public:
|
||||
public:
|
||||
double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/;
|
||||
void Init(double Press)/*override*/;
|
||||
void SetReductor(double nAdj)/*override*/;
|
||||
@@ -655,13 +655,13 @@ class TH14K1 : public TDriverHandle {
|
||||
|
||||
class TSt113 : public TH14K1 {
|
||||
|
||||
private:
|
||||
private:
|
||||
double EPS = 0.0;
|
||||
static double const BPT_K[/*?*/ /*-1..4*/ (4) - (-1) + 1][2];
|
||||
static double const BEP_K[/*?*/ /*-1..5*/ (5) - (-1) + 1];
|
||||
static double const pos_table[11]; // = {-1, 5, -1, 0, 2, 3, 4, 5, 0, 0, 1};
|
||||
|
||||
public:
|
||||
public:
|
||||
double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/;
|
||||
double GetCP()/*override*/;
|
||||
double GetPos(int i)/*override*/;
|
||||
@@ -674,10 +674,10 @@ class TSt113 : public TH14K1 {
|
||||
|
||||
class Ttest : public TDriverHandle {
|
||||
|
||||
private:
|
||||
private:
|
||||
double CP = 0.0;
|
||||
|
||||
public:
|
||||
public:
|
||||
double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/;
|
||||
void Init(double Press)/*override*/;
|
||||
|
||||
@@ -688,18 +688,18 @@ class Ttest : public TDriverHandle {
|
||||
|
||||
class TFD1 : public TDriverHandle {
|
||||
|
||||
private:
|
||||
private:
|
||||
double MaxBP = 0.0; //najwyzsze cisnienie
|
||||
double BP = 0.0; //aktualne cisnienie
|
||||
|
||||
public:
|
||||
public:
|
||||
double Speed = 0.0; //szybkosc dzialania
|
||||
|
||||
double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/;
|
||||
void Init(double Press)/*override*/;
|
||||
double GetCP()/*override*/;
|
||||
void SetSpeed(double nSpeed);
|
||||
// procedure Init(press: real; MaxBP: real); overload;
|
||||
void SetSpeed(double nSpeed);
|
||||
// procedure Init(press: real; MaxBP: real); overload;
|
||||
|
||||
inline TFD1(void) :
|
||||
TDriverHandle()
|
||||
@@ -708,15 +708,15 @@ class TFD1 : public TDriverHandle {
|
||||
|
||||
class TH1405 : public TDriverHandle {
|
||||
|
||||
private:
|
||||
private:
|
||||
double MaxBP = 0.0; //najwyzsze cisnienie
|
||||
double BP = 0.0; //aktualne cisnienie
|
||||
|
||||
public:
|
||||
public:
|
||||
double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/;
|
||||
void Init(double Press)/*override*/;
|
||||
double GetCP()/*override*/;
|
||||
// procedure Init(press: real; MaxBP: real); overload;
|
||||
// procedure Init(press: real; MaxBP: real); overload;
|
||||
|
||||
inline TH1405(void) :
|
||||
TDriverHandle()
|
||||
@@ -725,11 +725,11 @@ class TH1405 : public TDriverHandle {
|
||||
|
||||
class TFVel6 : public TDriverHandle {
|
||||
|
||||
private:
|
||||
private:
|
||||
double EPS = 0.0;
|
||||
static double const pos_table[ 11 ]; // = {-1, 6, -1, 0, 6, 4, 4.7, 5, -1, 0, 1};
|
||||
|
||||
public:
|
||||
public:
|
||||
double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/;
|
||||
double GetCP()/*override*/;
|
||||
double GetPos(int i)/*override*/;
|
||||
|
||||
@@ -112,7 +112,7 @@ bool iSetFlag(int &Flag, int Value)
|
||||
if ((Flag & Value) == 0)
|
||||
{
|
||||
Flag |= Value;
|
||||
return true; // true, gdy by³o wczeœniej 0 i zosta³o ustawione
|
||||
return true; // true, gdy było wcześniej 0 i zostało ustawione
|
||||
}
|
||||
}
|
||||
else if (Value < 0)
|
||||
@@ -121,7 +121,7 @@ bool iSetFlag(int &Flag, int Value)
|
||||
if ((Flag & Value) == Value)
|
||||
{
|
||||
Flag &= ~Value; // Value jest ujemne, czyli zerowanie flagi
|
||||
return true; // true, gdy by³o wczeœniej 1 i zosta³o wyzerowane
|
||||
return true; // true, gdy było wcześniej 1 i zostało wyzerowane
|
||||
}
|
||||
}
|
||||
return false;
|
||||
@@ -342,7 +342,7 @@ std::vector<std::string> Split(const std::string &s, char delim)
|
||||
}
|
||||
|
||||
std::vector<std::string> Split(const std::string &s)
|
||||
{ // dzieli tekst na wektor tekstow po bia³ych znakach
|
||||
{ // dzieli tekst na wektor tekstow po białych znakach
|
||||
std::vector<std::string> elems;
|
||||
std::stringstream ss(s);
|
||||
std::string item;
|
||||
@@ -556,7 +556,7 @@ long Vert(double Y)
|
||||
|
||||
// NOTE: this now does nothing.
|
||||
void ClearPendingExceptions()
|
||||
// resetuje b³êdy FPU, wymagane dla Trunc()
|
||||
// resetuje błędy FPU, wymagane dla Trunc()
|
||||
{
|
||||
; /*?*/ /* ASM
|
||||
FNCLEX
|
||||
|
||||
@@ -19,12 +19,12 @@ http://mozilla.org/MPL/2.0/.
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
|
||||
/*Ra: te sta³e nie s¹ u¿ywane...
|
||||
/*Ra: te stałe nie są używane...
|
||||
_FileName = ['a'..'z','A'..'Z',':','\','.','*','?','0'..'9','_','-'];
|
||||
_RealNum = ['0'..'9','-','+','.','E','e'];
|
||||
_Integer = ['0'..'9','-']; //Ra: to siê gryzie z STLport w Builder 6
|
||||
_Integer = ['0'..'9','-']; //Ra: to się gryzie z STLport w Builder 6
|
||||
_Plus_Int = ['0'..'9'];
|
||||
_All = [' '..'þ'];
|
||||
_All = [' '..'ţ'];
|
||||
_Delimiter= [',',';']+_EOL;
|
||||
_Delimiter_Space=_Delimiter+[' '];
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user