17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-10-18 00:59:18 +02:00
Files
maszyna/McZapkie/Oerlikon_ESt.cppm
maj00r b8f040e6fd propagate template headers transitively, import Console where used
AnimModel.cpp reaches cParser through the simulation core, not a direct
import, so the previous pass missed it; the propagation now follows the
whole import closure. Train.cpp, drivermode.cpp and Globals.cpp call
Console:: inside _WIN32 guards without importing eu07.console - invisible
on Linux, where those blocks are skipped.
2026-09-10 01:41:24 +02:00

246 lines
6.7 KiB
C++

/*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
*/
/*
(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
*/
module;
#include <chrono>
#include <cstddef>
#include <deque>
#include <limits>
#include <mutex>
#include <ostream>
#include <sstream>
#include <type_traits>
#include <unordered_map>
#include <utility>
#include <vector>
#include <string>
#include <array>
#include <memory>
export module eu07.mczapkie.oerlikon_est;
import eu07.mczapkie.hamulce;
import eu07.mczapkie.friction;
export {
inline int const dMAX = 11; // dysze
inline int const dON = 0; // osobowy napelnianie (+ZP)
inline int const dOO = 1; // osobowy oproznianie
inline int const dTN = 2; // towarowy napelnianie (+ZP)
inline int const dTO = 3; // towarowy oproznianie
inline int const dP = 4; // zbiornik pomocniczy
inline int const dSd = 5; // zbiornik sterujacy
inline int const dSm = 6; // zbiornik sterujacy
inline int const dPd = 7; // duzy przelot zamykajcego
inline int const dPm = 8; // maly przelot zamykajacego
inline int const dPO = 9; // zasilanie pomocniczego O
inline int const dPT = 10; // zasilanie pomocniczego T
// przekladniki
inline int const p_none = 0;
inline int const p_rapid = 1;
inline int const p_pp = 2;
inline int const p_al2 = 3;
inline int const p_ppz = 4;
inline int const P_ed = 5;
class TPrzekladnik : public TReservoir // przekladnik (powtarzacz)
{
private:
public:
std::shared_ptr<TReservoir> BrakeRes;
std::shared_ptr<TReservoir> Next;
TPrzekladnik() : TReservoir() {};
virtual void Update(double dt);
};
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<TReservoir> CntrlRes; // zbiornik sterujacy
std::shared_ptr<TReservoir> Miedzypoj; // pojemnosc posrednia (urojona) do napelniania ZP i ZS
std::array<std::shared_ptr<TPrzekladnik>, 4> Przekladniki; // indeksowane od 1, indeks jest zarazem pojemnoscia
// bezposrednie wskazniki do przekladnikow dostrajanych w GetPF, inicjowane przy tworzeniu
std::shared_ptr<TRapid> PrzekRapid;
std::shared_ptr<TPrzeciwposlizg> PrzekPoslizg;
std::shared_ptr<TPrzekED> PrzekED;
std::shared_ptr<TPrzekCiagly> PrzekCiagly;
std::shared_ptr<TPrzek_PZZ> PrzekPZZ;
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 &params ); // 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 );
// END
} // export