/* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef MoverH #define MoverH //--------------------------------------------------------------------------- //#include "Mover.hpp" //Q: 20160805 - odlaczenie pliku fizyki .pas od kompilacji #include "Oerlikon_ESt.h" #include "hamulce.h" #include #include /* MaSzyna EU07 locomotive simulator Copyright (C) 2001-2004 Maciej Czapkiewicz and others */ /* (C) McZapkie v.2004.02 Co brakuje: 6. brak pantografow itp 'Nie do konca, juz czesc zrobiona - Winger 7. brak efektu grzania oporow rozruchowych, silnika, osi 9. ulepszyc sprzeg sztywny oraz automatyczny 10. klopoty z EN57 ... n. Inne lokomotywy oprocz elektrowozu pradu stalego */ /* Zrobione: 1. model szeregowego silnika elektrycznego sterowanego reostatem 2. fizyka ruchu - sily oporu, nachylenia, przyspieszenia styczne i normalne, przyczepnosc/poslizg przy hamowaniu i rozruchu 3. docisk klockow hamulcowych -hamulec reczny oraz pomocniczy hamulec pneumatyczny 4. ubytki cisnienia wskutek hamowania, kompresor - ladowanie zbiornika 5. niektore uszkodzenia i awarie - logika rozmyta a) silnik elektryczny - za duzy prad, napiecie, obroty b) sprzegi - zerwanie gdy zbyt duze sily 6. flagi niektorych dzwiekow 7. hamulec zasadniczy - elektropneumatyczny (impulsowanie), pneumatyczny - zmiany cisnienia zwiekszenie nacisku przy duzych predkosciach w hamulcach Oerlikona 8. sprzegi - sila, tlumiennosc 9. lok. el. - wylacznik glowny, odlacznik uszkodzonych silnikow 10. parametry trakcji 11. opoznienia w zalaczaniu stycznikow 12. trakcja wielokrotna 13. informacja na temat zrodla mocy dla silnikow trakcyjnych, ogrzewania, oswietlenia 14. dumb - uproszczony model lokomotywy (tylko dla AI) 15. ladunki - ilosc, typ, szybkosc na- i rozladunku, funkcje przetestowac! 16. ulepszony model fizyczny silnika elektrycznego (hamowanie silnikiem, ujemne napiecia) 17. poprawione hamulce - parametry cylindrow itp 18. ulepszone hamulce - napelnianie uderzeniowe, stopnie hamowania 19. poprawione hamulce - wyszczegolnenie cisnienia dla stopni hamowania 20. poprawione hamulce elektropneumatyczne 21. poprawione hamowanie przeciwposlizgowe i odluzniacz 22. dodany model mechanicznego napedu recznego (drezyna) 23. poprawiona szybkosc hamowania pomocniczego i przeciwposlizgowego, odlaczanie silnikow, odlaczanie bocznikow 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 27. lampy/sygnaly przednie/tylne 28. wprowadzona pozycja odciecia hamulca (yB: tja, ale oerlikona....) 29. rozne poprawki: slizganie, wykolejanie itp 30. model silnika spalinowego z przekladnia mechaniczna 31. otwieranie drzwi, sprezarka, przetwornica 32. wylaczanie obliczen dla nieruchomych wagonow 33. Zbudowany model rozdzielacza powietrza roznych systemow 34. Poprawiona pozycja napelniania uderzeniowego i hamulec EP 35. Dodane baterie akumulatorow (KURS90) 36. Hamowanie elektrodynamiczne w ET42 i poprawione w EP09 37. jednokierunkowosc walu kulakowego w EZT (nie do konca) 38. wal kulakowy w ET40 39. poprawiona blokada nastawnika w ET40 ... */ #include "dumb3d.h" using namespace Math3D; const Steel2Steel_friction = 0.15; //tarcie statyczne const g = 9.81; //przyspieszenie ziemskie const SandSpeed = 0.1; //ile kg/s} const RVentSpeed = 0.4; //rozpedzanie sie wentylatora obr/s^2} const RVentMinI = 50.0; //przy jakim pradzie sie wylaczaja} const Pirazy2 = 6.2831853071794f; #define PI 3.1415926535897f //-- var, const, procedure --------------------------------------------------- static bool const Go = true; static bool const Hold = false; /*dla CheckLocomotiveParameters*/ static int const ResArraySize = 64; /*dla silnikow elektrycznych*/ static int const MotorParametersArraySize = 10; static int const maxcc = 4; /*max. ilosc odbierakow pradu*/ //static int const LocalBrakePosNo = 10; /*ilosc nastaw hamulca pomocniczego*/ //static int const MainBrakeMaxPos = 10; /*max. ilosc nastaw hamulca zasadniczego*/ static int const ManualBrakePosNo = 20; /*ilosc nastaw hamulca recznego*/ static int const LightsSwitchPosNo = 16; /*uszkodzenia toru*/ static int const dtrack_railwear = 2; static int const dtrack_freerail = 4; static int const dtrack_thinrail = 8; static int const dtrack_railbend = 16; static int const dtrack_plants = 32; static int const dtrack_nomove = 64; static int const dtrack_norail = 128; /*uszkodzenia taboru*/ static int const dtrain_thinwheel = 1; /*dla lokomotyw*/ static int const dtrain_loadshift = 1; /*dla wagonow*/ static int const dtrain_wheelwear = 2; static int const dtrain_bearing = 4; static int const dtrain_coupling = 8; static int const dtrain_ventilator = 16; /*dla lokomotywy el.*/ static int const dtrain_loaddamage = 16; /*dla wagonow*/ static int const dtrain_engine = 32; /*dla lokomotyw*/ static int const dtrain_loaddestroyed = 32;/*dla wagonow*/ static int const dtrain_axle = 64; static int const dtrain_out = 128; /*wykolejenie*/ /*wagi prawdopodobienstwa dla funkcji FuzzyLogic*/ #define p_elengproblem (1.000000E-02) #define p_elengdamage (1.000000E-01) #define p_coupldmg (2.000000E-02) #define p_derail (1.000000E-03) #define p_accn (1.000000E-01) #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_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_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 /*typ hamulca elektrodynamicznego*/ static int const dbrake_none = 0; static int const dbrake_passive = 1; static int const dbrake_switch = 2; static int const dbrake_reversal = 4; 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_aware = 2; //czuwak miga 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 static int const s_SHPebrake = 64; //hamuje static int const s_CAtest = 128; /*dzwieki*/ static int const sound_none = 0; static int const sound_loud = 1; static int const sound_couplerstretch = 2; static int const sound_bufferclamp = 4; static int const sound_bufferbump = 8; static int const sound_relay = 16; static int const sound_manyrelay = 32; 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) 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_EP05 = 0x40; static int const dt_ET40 = 0x80; static int const dt_181 = 0x100; //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; static int const eimc_s_cfu = 3; static int const eimc_s_cim = 4; static int const eimc_s_icif = 5; static int const eimc_f_Uzmax = 7; static int const eimc_f_Uzh = 8; static int const eimc_f_DU = 9; static int const eimc_f_I0 = 10; static int const eimc_f_cfu = 11; static int const eimc_p_F0 = 13; static int const eimc_p_a1 = 14; static int const eimc_p_Pmax = 15; static int const eimc_p_Fh = 16; static int const eimc_p_Ph = 17; static int const eimc_p_Vh0 = 18; static int const eimc_p_Vh1 = 19; 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 static int const eimv_FMAXMAX = 0; static int const eimv_Fmax = 1; static int const eimv_ks = 2; static int const eimv_df = 3; static int const eimv_fp = 4; static int const eimv_U = 5; static int const eimv_pole = 6; static int const eimv_Ic = 7; static int const eimv_If = 8; static int const eimv_M = 9; static int const eimv_Fr = 10; static int const eimv_Ipoj = 11; static int const eimv_Pm = 12; static int const eimv_Pe = 13; static int const eimv_eta = 14; static int const eimv_fkr = 15; static int const eimv_Uzsmax = 16; static int const eimv_Pmax = 17; static int const eimv_Fzad = 18; static int const eimv_Imax = 19; static int const eimv_Fful = 20; static int const bom_PS = 1; 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ę { // flagi bitowe 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 }; /*ogolne*/ struct TLocation { double X; double Y; double Z; /*lokacja*/ }; struct TRotation { double Rx; double Ry; double Rz; /*rotacja*/ }; struct TDimension { double W; double L; double H; /*wymiary*/ }; struct TCommand { std::string Command; /*komenda*/ double Value1; double Value2; /*argumenty komendy*/ TLocation Location; }; /*tory*/ struct TTrackShape {/*ksztalt odcinka - promien, dlugosc, nachylenie, przechylka*/ double R; double Len; double dHtrack; double dHrail; }; struct TTrackParam {/*parametry odcinka - szerokosc, tarcie statyczne, kategoria, obciazalnosc w t/os, uszkodzenia*/ double Width; double friction; int CategoryFlag; int QualityFlag; int DamageFlag; double Velmax; /*dla uzytku maszynisty w ai_driver*/ }; struct TTractionParam { double TractionVoltage; /*napiecie*/ double TractionFreq; /*czestotliwosc*/ double TractionMaxCurrent; /*obciazalnosc*/ double TractionResistivity; /*rezystancja styku*/ }; /*powyzsze parametry zwiazane sa z torem po ktorym aktualnie pojazd jedzie*/ /*typy hamulcow zespolonych*/ enum TBrakeSystem { Individual, Pneumatic, ElectroPneumatic }; /*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 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*/ enum TLocalBrake { NoBrake, ManualBrake, PneumaticBrake, HydraulicBrake }; /*dla osob/towar: opoznienie hamowania/odhamowania*/ typedef double TBrakeDelayTable[4]; struct TBrakePressure { double PipePressureVal; double BrakePressureVal; double FlowSpeedVal; TBrakeSystem BrakeType; }; typedef TBrakePressure TBrakePressureTable[MainBrakeMaxPos]; /*typy napedow*/ enum TEngineTypes { None, Dumb, WheelsDriven, ElectricSeriesMotor, ElectricInductionMotor, DieselEngine, SteamEngine, DieselElectric }; /*postac dostarczanej energii*/ enum TPowerType { NoPower, BioPower, MechPower, ElectricPower, SteamPower }; /*rodzaj paliwa*/ enum TFuelType { Undefined, Coal, Oil }; /*rodzaj rusztu*/ struct TGrateType { TFuelType FuelType; double GrateSurface; double FuelTransportSpeed; double IgnitionTemperature; double MaxTemperature; }; /*rodzaj kotla*/ struct TBoilerType { double BoilerVolume; double BoilerHeatSurface; double SuperHeaterSurface; double MaxWaterVolume; double MinWaterVolume; double MaxPressure; }; /*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 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 }; /*typy źródeł mocy*/ enum TPowerSource { NotDefined, InternalSource, Transducer, Generator, Accumulator, CurrentCollector, PowerCable, Heater }; struct _mover__1 { double MaxCapacity; TPowerSource RechargeSource; }; struct _mover__2 { TPowerType PowerTrans; double SteamPressure; }; struct _mover__3 { TGrateType Grate; TBoilerType Boiler; }; /*parametry źródeł mocy*/ struct TPowerParameters { double MaxVoltage; double MaxCurrent; double IntR; TPowerSource SourceType; union { struct { _mover__3 RHeater; }; struct { _mover__2 RPowerCable; }; struct { TCurrentCollector CollectorParameters; }; struct { _mover__1 RAccumulator; }; struct { TEngineTypes GeneratorEngine; }; struct { double InputVoltage; }; struct { TPowerType PowerType; }; }; }; /*dla lokomotyw elektrycznych:*/ struct TScheme { int Relay; /*numer pozycji rozruchu samoczynnego*/ double R; /*opornik rozruchowy*/ /*dla dizla napelnienie*/ int Bn; int Mn; /*ilosc galezi i silnikow w galezi*/ /*dla dizla Mn: czy luz czy nie*/ bool AutoSwitch; /*czy dana pozycja nastawniana jest recznie czy autom.*/ int ScndAct; /*jesli ma bocznik w nastawniku, to ktory bocznik na ktorej pozycji*/ }; typedef TScheme TSchemeTable[ResArraySize + 1]; /*tablica rezystorow rozr.*/ struct TDEScheme { double RPM; /*obroty diesla*/ double GenPower; /*moc maksymalna*/ double Umax; /*napiecie maksymalne*/ double Imax; /*prad maksymalny*/ }; typedef TDEScheme TDESchemeTable[33]; /*tablica rezystorow rozr.*/ struct TShuntScheme { double Umin; double Umax; double Pmin; double Pmax; }; typedef TShuntScheme TShuntSchemeTable[33]; struct TMPTRelay {/*lista przekaznikow bocznikowania*/ double Iup; double Idown; }; typedef TMPTRelay TMPTRelayTable[8]; struct TMotorParameters { double mfi; double mIsat; double mfi0; // aproksymacja M(I) silnika} {dla dizla mIsat=przekladnia biegu double fi; double Isat; double fi0; // aproksymacja E(n)=fi*n} {dla dizla fi, mfi: predkosci przelozenia biegu <-> bool AutoSwitch; }; 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 SoundSignalDelay; double EmergencyBrakeDelay; int Status; /*0: wylaczony, 1: wlaczony, 2: czuwak, 4: shp, 8: alarm, 16: hamowanie awaryjne*/ double SystemTimer; double SystemSoundCATimer; double SystemSoundSHPTimer; double SystemBrakeCATimer; double SystemBrakeSHPTimer; double SystemBrakeCATestTimer; // hunter-091012 int VelocityAllowed; int NextVelocityAllowed; /*predkosc pokazywana przez sygnalizacje kabinowa*/ bool RadioStop; // czy jest RadioStop }; struct TTransmision {//liczba zebow przekladni int NToothM; int NToothW; double Ratio; }; enum TCouplerType { NoCoupler, Articulated, Bare, Chain, Screw, Automatic }; class TMoverParameters; // wyforwardowanie klasy coby typ byl widoczny w ponizszej strukturze struct TCoupling { /*parametry*/ double SpringKB; double SpringKC; double beta; /*stala sprezystosci zderzaka/sprzegu, %tlumiennosci */ double DmaxB; double FmaxB; double DmaxC; double FmaxC; /*tolerancja scisku/rozciagania, sila rozerwania*/ TCouplerType CouplerType; /*typ sprzegu*/ /*zmienne*/ int CouplingFlag; /*0 - wirtualnie, 1 - sprzegi, 2 - pneumatycznie, 4 - sterowanie, 8 - kabel mocy*/ int AllowedFlag; //Ra: znaczenie jak wyżej, maska dostępnych bool Render; /*ABu: czy rysowac jak zaczepiony sprzeg*/ double CoupleDist; /*ABu: optymalizacja - liczenie odleglosci raz na klatkę, bez iteracji*/ TMoverParameters* Connected; /*co jest podlaczone*/ int ConnectedNr; //Ra: od której strony podłączony do (Connected): 0=przód, 1=tył double CForce; /*sila z jaka dzialal*/ double Dist; /*strzalka ugiecia zderzaków*/ bool CheckCollision; /*czy sprawdzac sile czy pedy*/ }; class TMoverParameters { // Ra: wrapper na kod pascalowy, przejmujący jego funkcje Q: 20160824 - juz nie wrapper a klasa bazowa :) public: double dMoveLen; std::string filename; /*---opis lokomotywy, wagonu itp*/ /*--opis serii--*/ int CategoryFlag; /*1 - pociag, 2 - samochod, 4 - statek, 8 - samolot*/ /*--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*/ TEngineTypes EngineType; /*typ napedu*/ TPowerParameters EnginePowerSource; /*zrodlo mocy dla silnikow*/ TPowerParameters SystemPowerSource; /*zrodlo mocy dla systemow sterowania/przetwornic/sprezarek*/ TPowerParameters HeatingPowerSource; /*zrodlo mocy dla ogrzewania*/ TPowerParameters AlterHeatPowerSource; /*alternatywne zrodlo mocy dla ogrzewania*/ 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 TotalMass; /*wyliczane przez ComputeMass*/ double HeatingPower; double LightPower; /*moc pobierana na ogrzewanie/oswietlenie*/ double BatteryVoltage; /*Winger - baterie w elektrykach*/ bool Battery; /*Czy sa zalavzone baterie*/ bool EpFuse; /*Czy sa zalavzone baterie*/ bool Signalling; /*Czy jest zalaczona sygnalizacja hamowania ostatniego wagonu*/ bool DoorSignalling; /*Czy jest zalaczona sygnalizacja blokady drzwi*/ bool Radio; /*Czy jest zalaczony radiotelefon*/ double NominalBatteryVoltage; /*Winger - baterie w elektrykach*/ TDimension Dim; /*wymiary*/ double Cx; /*wsp. op. aerodyn.*/ 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 double TrackW; /*nominalna szerokosc toru [m]*/ double AxleInertialMoment; /*moment bezwladnosci zestawu kolowego*/ std::string AxleArangement; /*uklad osi np. Bo'Bo' albo 1'C*/ int NPoweredAxles; /*ilosc osi napednych liczona z powyzszego*/ int NAxles; /*ilosc wszystkich osi j.w.*/ int BearingType; /*lozyska: 0 - slizgowe, 1 - toczne*/ double ADist; double BDist; /*odlegosc osi oraz czopow skretu*/ /*hamulce:*/ int NBpA; /*ilosc el. ciernych na os: 0 1 2 lub 4*/ int SandCapacity; /*zasobnik piasku [kg]*/ TBrakeSystem BrakeSystem;/*rodzaj hamulca zespolonego*/ TBrakeSubSystem BrakeSubsystem; TBrakeValve BrakeValve; TBrakeHandle BrakeHandle; TBrakeHandle BrakeLocHandle; double MBPM; /*masa najwiekszego cisnienia*/ TBrake *Hamulec; TDriverHandle *Handle; TDriverHandle *LocHandle; TReservoir *Pipe; TReservoir *Pipe2; TLocalBrake LocalBrake; /*rodzaj hamulca indywidualnego*/ TBrakePressureTable BrakePressureTable; /*wyszczegolnienie cisnien w rurze*/ 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*/ double MaxBrakePress[5]; //pomocniczy, proz, sred, lad, pp double P2FTrans; double TrackBrakeForce; /*sila nacisku hamulca szynowego*/ int BrakeMethod; /*flaga rodzaju hamulca*/ /*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 BrakeVolume; double BrakeVVolume; double VeselVolume; /*pojemnosc powietrza w ukladzie hamulcowym, w ukladzie glownej sprezarki [m^3] */ int BrakeCylNo; /*ilosc cylindrow ham.*/ double BrakeCylRadius; double BrakeCylDist; double BrakeCylMult[3]; int LoadFlag; /*promien cylindra, skok cylindra, przekladnia hamulcowa*/ double BrakeCylSpring; /*suma nacisku sprezyn powrotnych, kN*/ double BrakeSlckAdj; /*opor nastawiacza skoku tloka, kN*/ double BrakeRigEff; /*sprawnosc przekladni dzwigniowej*/ double RapidMult; /*przelozenie rapidu*/ int BrakeValveSize; std::string BrakeValveParams; double Spg; double MinCompressor; double MaxCompressor; double CompressorSpeed; /*cisnienie wlaczania, zalaczania sprezarki, wydajnosc sprezarki*/ TBrakeDelayTable BrakeDelay; /*opoznienie hamowania/odhamowania t/o*/ int BrakeCtrlPosNo; /*ilosc pozycji hamulca*/ /*nastawniki:*/ int MainCtrlPosNo; /*ilosc pozycji nastawnika*/ int ScndCtrlPosNo; int LightsPosNo; int LightsDefPos; bool LightsWrap; int Lights[2][ /*?*//*1..16*/ (16) - (1) + 1]; bool ScndInMain; /*zaleznosc bocznika od nastawnika*/ bool MBrake; /*Czy jest hamulec reczny*/ double StopBrakeDecc; TSecuritySystem SecuritySystem; /*-sekcja parametrow dla lokomotywy elektrycznej*/ TSchemeTable RList; /*lista rezystorow rozruchowych i polaczen silnikow, dla dizla: napelnienia*/ int RlistSize; TMotorParameters MotorParam[MotorParametersArraySize + 1]; /*rozne parametry silnika przy bocznikowaniach*/ /*dla lokomotywy spalinowej z przekladnia mechaniczna: przelozenia biegow*/ TTransmision Transmision; // record {liczba zebow przekladni} // NToothM, NToothW : byte; // Ratio: real; {NToothW/NToothM} // end; double NominalVoltage; /*nominalne napiecie silnika*/ double WindingRes; double u; //wspolczynnik tarcia yB wywalic!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! double CircuitRes; /*rezystancje silnika i obwodu*/ int IminLo; 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 InitialCtrlDelay; double CtrlDelay; /* -//- -//- miedzy kolejnymi poz.*/ 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 AutoRelayType; /*0 -brak, 1 - jest, 2 - opcja*/ bool CoupledCtrl; /*czy mainctrl i scndctrl sa sprzezone*/ //CouplerNr: TCouplerNr; {ABu: nr sprzegu podlaczonego w drugim obiekcie} bool IsCoupled; /*czy jest sprzezony ale jedzie z tylu*/ int DynamicBrakeType; /*patrz dbrake_**/ int RVentType; /*0 - brak, 1 - jest, 2 - automatycznie wlaczany*/ double RVentnmax; /*maks. obroty wentylatorow oporow rozruchowych*/ 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*/ /*-sekcja parametrow dla lokomotywy spalinowej z przekladnia mechaniczna*/ double dizel_Mmax; double dizel_nMmax; double dizel_Mnmax; double dizel_nmax; double dizel_nominalfill; /*parametry aproksymacji silnika spalinowego*/ double dizel_Mstand; /*moment oporow ruchu silnika dla enrot=0*/ /* dizel_auto_min, dizel_auto_max: real; {predkosc obrotowa przelaczania automatycznej skrzyni biegow*/ double dizel_nmax_cutoff; /*predkosc obrotowa zadzialania ogranicznika predkosci*/ double dizel_nmin; /*najmniejsza dopuszczalna predkosc obrotowa*/ double dizel_minVelfullengage; /*najmniejsza predkosc przy jezdzie ze sprzeglem bez poslizgu*/ double dizel_AIM; /*moment bezwladnosci walu itp*/ double dizel_engageDia; double dizel_engageMaxForce; double dizel_engagefriction; /*parametry sprzegla*/ /*- dla lokomotyw spalinowo-elektrycznych -*/ double AnPos; // pozycja sterowania dokladnego (analogowego) bool AnalogCtrl; // bool AnMainCtrl; // bool ShuntModeAllow; bool ShuntMode; bool Flat; double Vhyp; TDESchemeTable DElist; double Vadd; TMPTRelayTable MPTRelay; int RelayType; TShuntSchemeTable SST; double PowerCorRatio; //Wspolczynnik korekcyjny /*- dla uproszczonego modelu silnika (dumb) oraz dla drezyny*/ double Ftmax; /*- dla lokomotyw z silnikami indukcyjnymi -*/ double eimc[26]; /*-dla wagonow*/ long MaxLoad; /*masa w T lub ilosc w sztukach - ladownosc*/ std::string LoadAccepted; std::string LoadQuantity; /*co moze byc zaladowane, jednostki miary*/ double OverLoadFactor; /*ile razy moze byc przekroczona ladownosc*/ double LoadSpeed; 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*/ 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*/ double PlatformSpeed; /*szybkosc stopnia*/ double PlatformMaxShift; /*wysuniecie stopnia*/ int PlatformOpenMethod; /*sposob animacji stopnia*/ bool ScndS; /*Czy jest bocznikowanie na szeregowej*/ /*--sekcja zmiennych*/ /*--opis konkretnego egzemplarza taboru*/ 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 double HVCouplers[2][2]; //przewod WN int ScanCounter; /*pomocnicze do skanowania sprzegow*/ 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 AccN; //przyspieszenie normalne w [m/s^2] double AccV; double nrot; /*! rotacja kol [obr/s]*/ double EnginePower; /*! chwilowa moc silnikow*/ 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*/ bool SlippingWheels; bool SandDose; /*! poslizg kol, sypanie piasku*/ double Sand; /*ilosc piasku*/ double BrakeSlippingTimer; /*pomocnicza zmienna do wylaczania przeciwposlizgu*/ double dpBrake; double dpPipe; double dpMainValve; double dpLocalValve; /*! przyrosty cisnienia w kroku czasowym*/ double ScndPipePress; /*cisnienie w przewodzie zasilajacym*/ double BrakePress; /*!o cisnienie w cylindrach hamulcowych*/ double LocBrakePress; /*!o cisnienie w cylindrach hamulcowych z pomocniczego*/ double PipeBrakePress; /*!o cisnienie w cylindrach hamulcowych z przewodu*/ double PipePress; /*!o cisnienie w przewodzie glownym*/ double EqvtPipePress; /*!o cisnienie w przewodzie glownym skladu*/ double Volume; /*objetosc spr. powietrza w zbiorniku hamulca*/ double CompressedVolume; /*objetosc spr. powietrza w ukl. zasilania*/ double PantVolume; /*objetosc spr. powietrza w ukl. pantografu*/ double Compressor; /*! cisnienie w ukladzie zasilajacym*/ bool CompressorFlag; /*!o czy wlaczona sprezarka*/ bool PantCompFlag; /*!o czy wlaczona sprezarka pantografow*/ bool CompressorAllow; /*! zezwolenie na uruchomienie sprezarki NBMX*/ bool ConverterFlag; /*! czy wlaczona przetwornica NBMX*/ bool ConverterAllow; /*zezwolenie na prace przetwornicy NBMX*/ int BrakeCtrlPos; /*nastawa hamulca zespolonego*/ double BrakeCtrlPosR; /*nastawa hamulca zespolonego - plynna dla FV4a*/ double BrakeCtrlPos2; /*nastawa hamulca zespolonego - kapturek dla FV4a*/ int LocalBrakePos; /*nastawa hamulca indywidualnego*/ int ManualBrakePos; /*nastawa hamulca recznego*/ double LocalBrakePosA; 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*/ int BrakeDelayFlag; /*nastawa opoznienia ham. osob/towar/posp/exp 0/1/2/4*/ int BrakeDelays; /*nastawy mozliwe do uzyskania*/ int BrakeOpModeFlag; /*nastawa trybu pracy PS/PN/EP/MED 1/2/4/8*/ int BrakeOpModes; /*nastawy mozliwe do uzyskania*/ bool DynamicBrakeFlag; /*czy wlaczony hamulec elektrodymiczny*/ // NapUdWsp: integer; double LimPipePress; /*stabilizator cisnienia*/ double ActFlowSpeed; /*szybkosc stabilizatora*/ int DamageFlag; //kombinacja bitowa stalych dtrain_* } int EngDmgFlag; //kombinacja bitowa stalych usterek} int DerailReason; //przyczyna wykolejenia //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} TCommand CommandIn; /*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*/ TTrackShape RunningShape;/*geometria 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*/ /*-zmienne dla lokomotyw*/ bool Mains; /*polozenie glownego wylacznika*/ int MainCtrlPos; /*polozenie glownego nastawnika*/ 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) double LastSwitchingTime; /*czas ostatniego przelaczania czegos*/ //WarningSignal: byte; {0: nie trabi, 1,2: trabi} bool DepartureSignal; /*sygnal odjazdu*/ bool InsideConsist; /*-zmienne dla lokomotywy elektrycznej*/ 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) 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? double LastRelayTime; /*czas ostatniego przelaczania stycznikow*/ bool AutoRelayFlag; /*mozna zmieniac jesli AutoRelayType=2*/ bool FuseFlag; /*!o bezpiecznik nadmiarowy*/ bool ConvOvldFlag; /*! nadmiarowy przetwornicy i ogrzewania*/ bool StLinFlag; /*!o styczniki liniowe*/ bool ResistorsFlag; /*!o jazda rezystorowa*/ double RventRot; /*!s obroty wentylatorow rozruchowych*/ bool UnBrake; /*w EZT - nacisniete odhamowywanie*/ double PantPress; /*Cisnienie w zbiornikach pantografow*/ bool s_CAtestebrake; //hunter-091012: zmienna dla testu ca /*-zmienne dla lokomotywy spalinowej z przekladnia mechaniczna*/ double dizel_fill; /*napelnienie*/ 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_automaticgearstatus; /*0 - bez zmiany, -1 zmiana na nizszy +1 zmiana na wyzszy*/ bool dizel_enginestart; /*czy trwa rozruch silnika*/ double dizel_engagedeltaomega; /*roznica predkosci katowych tarcz sprzegla*/ /*- zmienne dla lokomotyw z silnikami indukcyjnymi -*/ double eimv[21]; /*-zmienne dla drezyny*/ double PulseForce; /*przylozona sila*/ double PulseForceTimer; int PulseForceCount; /*dla drezyny, silnika spalinowego i parowego*/ double eAngle; /*-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 bool DoorBlocked; //Czy jest blokada drzwi bool DoorLeftOpened; //stan drzwi bool DoorRightOpened; bool PantFrontUp; //stan patykow 'Winger 160204 bool PantRearUp; bool PantFrontSP; //dzwiek patykow 'Winger 010304 bool PantRearSP; int PantFrontStart; //stan patykow 'Winger 160204 int PantRearStart; double PantFrontVolt; //pantograf pod napieciem? 'Winger 160404 double PantRearVolt; std::string PantSwitchType; std::string ConvSwitchType; bool Heating; //ogrzewanie 'Winger 020304 int DoubleTr; //trakcja ukrotniona - przedni pojazd 'Winger 160304 bool PhysicActivation; /*ABu: stale dla wyznaczania sil (i nie tylko) po optymalizacji*/ double FrictConst1; double FrictConst2s; 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 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 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); bool Attach(int ConnectNo, int ConnectToNr, TMoverParameters *ConnectTo, int CouplingType, bool Forced = false); int DettachStatus(int ConnectNo); bool Dettach(int ConnectNo); void SetCoupleDist(); bool DirectionForward(); void BrakeLevelSet(double b); bool BrakeLevelAdd(double b); bool IncBrakeLevel(); // wersja na użytek AI bool DecBrakeLevel(); bool ChangeCab(int direction); bool CurrentSwitch(int direction); 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 FastComputeMovement(double dt, const TTrackShape &Shape, TTrackParam &Track, const TLocation &NewLoc, TRotation &NewRot); //oblicza przesuniecie pojazdu - wersja zoptymalizowana double ShowEngineRotation(int VehN); // Q ******************************************************************************************* double GetTrainsetVoltage(void); bool Physic_ReActivation(void); double LocalBrakeRatio(void); double ManualBrakeRatio(void); double PipeRatio(void);/*ile napelniac*/ double RealPipeRatio(void);/*jak szybko*/ double BrakeVP(void); /*! przesylanie komend sterujacych*/ bool SendCtrlBroadcast(std::string CtrlCommand, double ctrlvalue); bool SendCtrlToNext(std::string CtrlCommand, double ctrlvalue, double dir); bool SetInternalCommand(std::string NewCommand, double NewValue1, double NewValue2); double GetExternalCommand(std::string &Command); bool RunCommand(std::string command, double CValue1, double CValue2); bool RunInternalCommand(void); void PutCommand(std::string NewCommand, double NewValue1, double NewValue2, const TLocation &NewLocation); bool CabActivisation(void); bool CabDeactivisation(void); /*! funkcje zwiekszajace/zmniejszajace nastawniki*/ /*! glowny nastawnik:*/ bool IncMainCtrl(int CtrlSpeed); bool DecMainCtrl(int CtrlSpeed); /*! pomocniczy nastawnik:*/ bool IncScndCtrl(int CtrlSpeed); bool DecScndCtrl(int CtrlSpeed); bool AddPulseForce(int Multipler);/*dla drezyny*/ bool SandDoseOn(void);/*wlacza/wylacza sypanie piasku*/ /*! zbijanie czuwaka/SHP*/ void SSReset(void); bool SecuritySystemReset(void); void SecuritySystemCheck(double dt); bool BatterySwitch(bool State); bool EpFuseSwitch(bool State); /*! stopnie hamowania - hamulec zasadniczy*/ bool IncBrakeLevelOld(void); bool DecBrakeLevelOld(void); bool IncLocalBrakeLevel(int CtrlSpeed); bool DecLocalBrakeLevel(int CtrlSpeed); /*! ABu 010205: - skrajne polozenia ham. pomocniczego*/ bool IncLocalBrakeLevelFAST(void); bool DecLocalBrakeLevelFAST(void); bool IncManualBrakeLevel(int CtrlSpeed); bool DecManualBrakeLevel(int CtrlSpeed); bool DynamicBrakeSwitch(bool Switch); bool EmergencyBrakeSwitch(bool Switch); bool AntiSlippingBrake(void); bool BrakeReleaser(int state); bool SwitchEPBrake(int state); bool AntiSlippingButton(void); /*! reczny wlacznik urzadzen antyposlizgowych*/ /*funkcje dla ukladow pneumatycznych*/ bool IncBrakePress(double &brake, double PressLimit, double dp); bool DecBrakePress(double &brake, double PressLimit, double dp); bool BrakeDelaySwitch(int BDS);/*! przelaczanie nastawy opoznienia*/ bool IncBrakeMult(void);/*przelaczanie prozny/ladowny*/ bool DecBrakeMult(void); /*pomocnicze funkcje dla ukladow pneumatycznych*/ void UpdateBrakePressure(double dt); void UpdatePipePressure(double dt); void CompressorCheck(double dt);/*wlacza, wylacza kompresor, laduje zbiornik*/ void UpdatePantVolume(double dt); //Ra void UpdateScndPipePressure(double dt); double GetDVc(double dt); /*funkcje obliczajace sily*/ void ComputeConstans(void);//ABu: wczesniejsze wyznaczenie stalych dla liczenia sil double ComputeMass(void); void ComputeTotalForce(double dt, double dt1, bool FullVer); double Adhesive(double staticfriction); double TractionForce(double dt); double FrictionForce(double R, int TDamage); double BrakeForce(const TTrackParam &Track); double CouplerForce(int CouplerN, double dt); void CollisionDetect(int CouplerN, double dt); /*obrot kol uwzgledniajacy poslizg*/ double ComputeRotatingWheel(double WForce, double dt, double n); /*--funkcje dla lokomotyw*/ bool DirectionBackward(void);/*! kierunek ruchu*/ bool MainSwitch(bool State);/*! wylacznik glowny*/ bool ConverterSwitch(bool State);/*! wl/wyl przetwornicy*/ bool CompressorSwitch(bool State);/*! wl/wyl sprezarki*/ /*-funkcje typowe dla lokomotywy elektrycznej*/ void ConverterCheck(); // przetwornica bool FuseOn(void); //bezpiecznik nadamiary bool FuseFlagCheck(void); // sprawdzanie flagi nadmiarowego void FuseOff(void); // wylaczenie nadmiarowego int ShowCurrent(int AmpN); //pokazuje bezwgl. wartosc pradu na wybranym amperomierzu int ShowCurrentP(int AmpN); //pokazuje bezwgl. wartosc pradu w wybranym pojezdzie //Q 20160722 /*!o pokazuje bezwgl. wartosc obrotow na obrotomierzu jednego z 3 pojazdow*/ /*function ShowEngineRotation(VehN:int): integer; //Ra 2014-06: przeniesione do C++*/ /*funkcje uzalezniajace sile pociagowa od predkosci: v2n, n2r, current, momentum*/ double v2n(void); double current(double n, double U); double Momentum(double I); double MomentumF(double I, double Iw, int SCP); bool CutOffEngine(void); //odlaczenie udszkodzonych silnikow /*funkcje automatycznego rozruchu np EN57*/ bool MaxCurrentSwitch(bool State); //przelacznik pradu wysokiego rozruchu bool MinCurrentSwitch(bool State); //przelacznik pradu automatycznego rozruchu bool AutoRelaySwitch(bool State); //przelacznik automatycznego rozruchu bool AutoRelayCheck(void);//symulacja automatycznego rozruchu bool ResistorsFlagCheck(void); //sprawdzenie kontrolki oporow rozruchowych NBMX bool PantFront(bool State); //obsluga pantografou przedniego bool PantRear(bool State); //obsluga pantografu tylnego /*-funkcje typowe dla lokomotywy spalinowej z przekladnia mechaniczna*/ bool dizel_EngageSwitch(double state); bool dizel_EngageChange(double dt); bool dizel_AutoGearCheck(void); double dizel_fillcheck(int mcp); double dizel_Momentum(double dizel_fill, double n, double dt); bool dizel_Update(double dt); /* funckje dla wagonow*/ bool LoadingDone(double LSpeed, std::string LoadInit); bool DoorLeft(bool State); //obsluga drzwi lewych bool DoorRight(bool State); //obsluga drzwi prawych bool DoorBlockedFlag(void); //sprawdzenie blokady drzwi /* funkcje dla samochodow*/ bool ChangeOffsetH(double DeltaOffset); /*funkcje ladujace pliki opisujace pojazd*/ bool LoadFIZ(std::string chkpath); //Q 20160717 bool LoadChkFile(std::string chkpath); bool readMPT(int ln, std::string line); //Q 20160717 bool readRLIST(int ln, std::string line); //Q 20160718 bool readBPT(int ln, std::string line); //Q 20160721 void BrakeValveDecode(std::string s); //Q 20160719 void BrakeSubsystemDecode(); //Q 20160719 void PowerParamDecode(std::string lines, std::string prefix, TPowerParameters &PowerParamDecode); //Q 20160719 TPowerSource PowerSourceDecode(std::string s); //Q 20160719 TPowerType PowerDecode(std::string s); //Q 20160719 TEngineTypes EngineDecode(std::string s); //Q 20160721 bool CreateBrakeSys(); //Q 20160722 bool CheckLocomotiveParameters(bool ReadyFlag, int Dir); std::string EngineDescription(int what); }; extern double Distance(TLocation Loc1, TLocation Loc2, TDimension Dim1, TDimension Dim2); #endif