#pragma once #ifndef INCLUDED_OERLIKON_EST_H #define INCLUDED_OERLIKON_EST_H /*fizyka hamulcow Oerlikon ESt dla symulatora*/ /* 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/. */ /* MaSzyna EU07 - SPKS Brakes. Oerlikon ESt. Copyright (C) 2007-2014 Maciej Cierniak */ #include #include "hamulce.h" // Pascal unit #include "friction.h" // Pascal unit /* (C) youBy Co jest: - glowny przyrzad rozrzadczy - napelniacz zbiornika pomocniczego - napelniacz zbiornika sterujacego - zawor podskoku - nibyprzyspieszacz - tylko 16",14",12",10" - nieprzekladnik rura - przekladnik 1:1 - przekladniki AL2 - przeciwposlizgi - rapid REL2 - HGB300 - inne srednice Co brakuje: - dobry przyspieszacz - mozliwosc zasilania z wysokiego cisnienia ESt4 - ep: EP1 i EP2 - samoczynne ep - PZZ dla dodatkowego */ static int const dMAX = 11; // dysze static int const dON = 0; // osobowy napelnianie (+ZP) static int const dOO = 1; // osobowy oproznianie static int const dTN = 2; // towarowy napelnianie (+ZP) static int const dTO = 3; // towarowy oproznianie static int const dP = 4; // zbiornik pomocniczy static int const dSd = 5; // zbiornik sterujacy static int const dSm = 6; // zbiornik sterujacy static int const dPd = 7; // duzy przelot zamykajcego static int const dPm = 8; // maly przelot zamykajacego static int const dPO = 9; // zasilanie pomocniczego O static int const dPT = 10; // zasilanie pomocniczego T // przekladniki static int const p_none = 0; static int const p_rapid = 1; static int const p_pp = 2; static int const p_al2 = 3; static int const p_ppz = 4; static int const P_ed = 5; class TPrzekladnik : public TReservoir // przekladnik (powtarzacz) { private: public: std::shared_ptr BrakeRes; std::shared_ptr Next; TPrzekladnik() : TReservoir() {}; virtual void Update(double dt); virtual void SetPoslizg(bool flag) {}; virtual void SetP(double P) {}; virtual void SetMult(double m) {}; virtual void SetLBP(double P) {}; virtual void SetRapidParams(double mult, double size) {}; virtual void SetRapidStatus(bool rs) {}; }; class TRura : public TPrzekladnik // nieprzekladnik, rura laczaca { private: public: TRura() : TPrzekladnik() {}; virtual double P(void) /*override*/; virtual void Update(double dt) /*override*/; }; class TPrzeciwposlizg : public TRura // przy napelnianiu - rura, przy poslizgu - upust { private: bool Poslizg; public: void SetPoslizg(bool flag); void Update(double dt) /*override*/; inline TPrzeciwposlizg() : TRura() { Poslizg = false; } }; // przekladnik dwustopniowy class TRapid : public TPrzekladnik { 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: void SetRapidParams(double mult, double size); void SetRapidStatus(bool rs); void Update(double dt) /*override*/; inline TRapid() : TPrzekladnik() {} }; // AL2 class TPrzekCiagly : public TPrzekladnik { private: double Mult = 0.0; public: void SetMult(double m); void Update(double dt) /*override*/; inline TPrzekCiagly() : TPrzekladnik() {} }; // podwojny zawor zwrotny class TPrzek_PZZ : public TPrzekladnik { private: double LBP = 0.0; public: void SetLBP(double P); void Update(double dt) /*override*/; inline TPrzek_PZZ() : TPrzekladnik() {} }; class TPrzekZalamany : public TPrzekladnik // Knicksventil { private: public: TPrzekZalamany() : TPrzekladnik() {} }; // przy napelnianiu - rura, przy hamowaniu - upust class TPrzekED : public TRura { private: double MaxP = 0.0; public: void SetP(double P); void Update(double dt) /*override*/; inline TPrzekED() : TRura() {} }; class TNESt3 : public TBrake { private: std::shared_ptr CntrlRes; // zbiornik sterujacy std::shared_ptr Miedzypoj; // pojemnosc posrednia (urojona) do napelniania ZP i ZS std::shared_ptr Przekladniki[ 4 ]; double Nozzles[ dMAX ]; // dysze double BVM = 0.0; // przelozenie PG-CH // ValveFlag: byte; //polozenie roznych zaworkow bool Zamykajacy = true; // pamiec zaworka zamykajacego // Przys_wlot: boolean; //wlot do komory przyspieszacza bool Przys_blok = true; // blokada przyspieszacza bool RapidStatus = true; bool RapidStaly = true; double LoadC = 0.0; double TareM = 0.0; // masa proznego double LoadM = 0.0; // masa pelnego double TareBP = 0.0; // cisnienie dla proznego double HBG300 = 0.0; // zawor ograniczajacy cisnienie double Podskok = 0.0; // podskok preznosci poczatkowej // HPBR: real; //zasilanie ZP z wysokiego cisnienia bool autom = true; // odluzniacz samoczynny double LBP = 0.0; // cisnienie hamulca pomocniczego public: inline TNESt3(double i_mbp, double i_bcr, double i_bcd, double i_brc, int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : TBrake( i_mbp, i_bcr, i_bcd, i_brc, i_bcn, i_BD, i_mat, i_ba, i_nbpa) {} void Init( double const PP, double const HPP, double const LPP, double const BP, int const BDF ) /*override*/; virtual double GetPF( double const PP, double const dt, double const Vel ) /*override*/; // przeplyw miedzy komora wstepna i PG void EStParams(double i_crc); // parametry charakterystyczne dla ESt virtual double GetCRP() /*override*/; void CheckState(double const BCP, double &dV1); // glowny przyrzad rozrzadczy void CheckReleaser(double const dt); // odluzniacz double CVs(double const BP); // napelniacz sterujacego double BVs(double const BCP); // napelniacz pomocniczego void SetSize( int const size, std::string const ¶ms ); // ustawianie dysz (rozmiaru ZR), przekladniki void PLC(double const mass); // wspolczynnik cisnienia przystawki wazacej void SetLP(double const TM, double const LM, double const TBP); // parametry przystawki wazacej virtual void ForceEmptiness() /*override*/; // wymuszenie bycia pustym void SetLBP(double const P); // cisnienie z hamulca pomocniczego }; extern double d2A( double const d ); #endif // INCLUDED_OERLIKON_EST_H // END