diff --git a/EU07.bpr b/EU07.bpr index 7ef4f5fb..85f60a4e 100644 --- a/EU07.bpr +++ b/EU07.bpr @@ -4,17 +4,16 @@ - + diff --git a/EU07.cpp b/EU07.cpp index 92861da1..a3b2e3ae 100644 --- a/EU07.cpp +++ b/EU07.cpp @@ -81,7 +81,7 @@ USEUNIT("Names.cpp"); USEUNIT("Console.cpp"); USEUNIT("Mover.cpp"); USEUNIT("McZapkie\_mover.pas"); -USEUNIT("McZapkie\hamulce.pas"); +USEUNIT("McZapkie\hamulce.cpp"); USEUNIT("McZapkie\Oerlikon_ESt.cpp"); USEUNIT("Console\PoKeys55.cpp"); USEUNIT("Forth.cpp"); diff --git a/McZapkie/Mover.hpp b/McZapkie/Mover.hpp index c74901e7..d60ec06c 100644 --- a/McZapkie/Mover.hpp +++ b/McZapkie/Mover.hpp @@ -3,7 +3,7 @@ // All rights reserved // (DO NOT EDIT: machine generated header) '_mover.pas' rev: 5.00 -//Ra: eee... tam, sam się generuje błędnie i trzeba ręcznie poprawiać! +//Ra: eee... tam, sam siďż˝ generuje b��dnie i trzeba rďż˝cznie poprawiaďż˝! #ifndef _moverHPP #define _moverHPP @@ -12,7 +12,7 @@ #pragma option push -w- #pragma option push -Vx #include // Pascal unit -#include // Pascal unit +#include // Pascal unit #include // Pascal unit #include // Pascal unit #include // Pascal unit diff --git a/McZapkie/Oerlikon_ESt.cpp b/McZapkie/Oerlikon_ESt.cpp index 402be851..3dc737bd 100644 --- a/McZapkie/Oerlikon_ESt.cpp +++ b/McZapkie/Oerlikon_ESt.cpp @@ -22,7 +22,7 @@ double d2A(double d) // ------ RURA ------ -double __fastcall TRura::P(void) +double TRura::P(void) { return Next->P(); } @@ -209,7 +209,7 @@ void TPrzekED::Update(double dt) // ------ OERLIKON EST NA BOGATO ------ -double __fastcall TNESt3::GetPF(double PP, double dt, double Vel) // przeplyw miedzy komora wstepna i PG +double TNESt3::GetPF(double PP, double dt, double Vel) // przeplyw miedzy komora wstepna i PG { double dV; double dV1; @@ -322,7 +322,7 @@ void TNESt3::EStParams(double i_crc) // parametry charakterystyczne dla ESt { } -void __fastcall TNESt3::Init(double PP, double HPP, double LPP, double BP, unsigned char BDF) +void TNESt3::Init(double PP, double HPP, double LPP, double BP, unsigned char BDF) { ValveRes->CreatePress(1 * PP); BrakeCyl->CreatePress(1 * BP); @@ -347,7 +347,7 @@ void __fastcall TNESt3::Init(double PP, double HPP, double LPP, double BP, unsig RapidStaly = true; } -double __fastcall TNESt3::GetCRP() +double TNESt3::GetCRP() { return CntrlRes->P(); // return Przekladniki[1].P; @@ -462,7 +462,7 @@ void TNESt3::PLC(double mass) 1); } -void __fastcall TNESt3::ForceEmptiness() +void TNESt3::ForceEmptiness() { ValveRes->CreatePress(0); BrakeRes->CreatePress(0); diff --git a/McZapkie/Oerlikon_ESt.h b/McZapkie/Oerlikon_ESt.h index 6c226048..8b4ee8d5 100644 --- a/McZapkie/Oerlikon_ESt.h +++ b/McZapkie/Oerlikon_ESt.h @@ -17,7 +17,7 @@ http://mozilla.org/MPL/2.0/. Copyright (C) 2007-2014 Maciej Cierniak */ -#include // Pascal unit +#include "hamulce.h" // Pascal unit #include // Pascal unit #include // Pascal unit #include // Pascal unit @@ -93,7 +93,7 @@ class TRura : public TPrzekladnik // nieprzekladnik, rura laczaca { private: public: - virtual __fastcall double P(void) /*override*/; + virtual double P(void) /*override*/; virtual void Update(double dt) /*override*/; }; @@ -190,11 +190,11 @@ class TNESt3 : public TBrake double LBP; // cisnienie hamulca pomocniczego public: - virtual double __fastcall GetPF(double PP, double dt, + virtual double GetPF(double PP, double dt, double Vel) /*override*/; // przeplyw miedzy komora wstepna i PG void EStParams(double i_crc); // parametry charakterystyczne dla ESt - virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, unsigned char BDF) /*override*/; - virtual double __fastcall GetCRP() /*override*/; + virtual void Init(double PP, double HPP, double LPP, double BP, unsigned char BDF) /*override*/; + virtual double GetCRP() /*override*/; void CheckState(double BCP, double &dV1); // glowny przyrzad rozrzadczy void CheckReleaser(double dt); // odluzniacz double CVs(double BP); // napelniacz sterujacego @@ -202,7 +202,7 @@ class TNESt3 : public TBrake void SetSize(int size, std::string params); // ustawianie dysz (rozmiaru ZR), przekladniki void PLC(double mass); // wspolczynnik cisnienia przystawki wazacej void SetLP(double TM, double LM, double TBP); // parametry przystawki wazacej - virtual void __fastcall ForceEmptiness() /*override*/; // wymuszenie bycia pustym + virtual void ForceEmptiness() /*override*/; // wymuszenie bycia pustym void SetLBP(double P); // cisnienie z hamulca pomocniczego }; diff --git a/McZapkie/Oerlikon_ESt.hpp b/McZapkie/Oerlikon_ESt.hpp index 8877031f..cf373b8f 100644 --- a/McZapkie/Oerlikon_ESt.hpp +++ b/McZapkie/Oerlikon_ESt.hpp @@ -10,7 +10,7 @@ #pragma delphiheader begin #pragma option push -w- #pragma option push -Vx -#include // Pascal unit +#include // Pascal unit #include // Pascal unit #include // Pascal unit #include // Pascal unit diff --git a/McZapkie/_Mover.hpp b/McZapkie/_Mover.hpp index d93ee368..3b8698d6 100644 --- a/McZapkie/_Mover.hpp +++ b/McZapkie/_Mover.hpp @@ -11,7 +11,7 @@ #pragma option push -w- #pragma option push -Vx #include // Pascal unit -#include // Pascal unit +#include // Pascal unit #include // Pascal unit #include // Pascal unit #include // Pascal unit diff --git a/McZapkie/hamulce.cpp b/McZapkie/hamulce.cpp index e645745d..b30942f5 100644 --- a/McZapkie/hamulce.cpp +++ b/McZapkie/hamulce.cpp @@ -14,7 +14,6 @@ Copyright (C) 2007-2014 Maciej Cierniak #include "hamulce.h" #include "../Mover.h" -#include #include #include @@ -46,7 +45,7 @@ double PF(double P1, double P2, double S, double DP = 0.25) double PH = Max0R(P1, P2) + 1; // wyzsze cisnienie absolutne double PL = P1 + P2 - PH + 2; // nizsze cisnienie absolutne double sg = PL * 1.0 / PH; // bezwymiarowy stosunek cisnien - double FM = PH * 197 * S * sign(P2 - P1); // najwyzszy mozliwy przeplyw, wraz z kierunkiem + double FM = PH * 197 * S * Sign(P2 - P1); // najwyzszy mozliwy przeplyw, wraz z kierunkiem if ((sg > 0.5)) // jesli ponizej stosunku krytycznego if ((PH - PL) < DP) // niewielka roznica cisnien return (1 - sg) * 1.0 / DPL * FM * 2 * sqrt((DP) * (PH - DP)); @@ -64,7 +63,7 @@ double PF1(double P1, double P2, double S) double PH = Max0R(P1, P2) + 1; // wyzsze cisnienie absolutne double PL = P1 + P2 - PH + 2; // nizsze cisnienie absolutne double sg = PL * 1.0 / PH; // bezwymiarowy stosunek cisnien - double FM = PH * 197 * S * sign(P2 - P1); // najwyzszy mozliwy przeplyw, wraz z kierunkiem + double FM = PH * 197 * S * Sign(P2 - P1); // najwyzszy mozliwy przeplyw, wraz z kierunkiem if ((sg > 0.5)) // jesli ponizej stosunku krytycznego if ((sg < DPS)) // niewielka roznica cisnien return (1 - sg) * 1.0 / DPS * FM * 2 * sqrt((DPS) * (1 - DPS)); @@ -74,6 +73,11 @@ double PF1(double P1, double P2, double S) return FM; } +long lround(double value) +{ + return floorl(value + 0.5); +} + double PFVa(double PH, double PL, double S, double LIM, double DP = 0.1) // zawor napelniajacy z PH do PL, PL do LIM { @@ -1841,24 +1845,24 @@ void TKE::CheckState(double BCP, double &dV1) // sprawdzanie stanu if ((BrakeStatus && 1) == 1) if ((VVP + 0.003 + BCP * 1.0 / BVM < CVP)) - BrakeStatus = - (BrakeStatus || 2) // hamowanie stopniowe;else if( ( VVP-0.003+BCP*1.0/BVM>CVP ) ) - BrakeStatus = (BrakeStatus && 252) // luzowanie;else if( ( VVP+BCP*1.0/BVM>CVP ) ) - BrakeStatus = (BrakeStatus && 253) // zatrzymanie napelaniania;else - ; - else if ((VVP + 0.10 < CVP) && (BCP < 0.1)) // poczatek hamowania - { - BrakeStatus = (BrakeStatus || 3); - ValveRes.CreatePress(0.8 * VVP); // przyspieszacz - } - else if ((VVP + BCP * 1.0 / BVM < CVP) && - ((CVP - VVP) * BVM > 0.25)) // zatrzymanie luzowanie - BrakeStatus = (BrakeStatus || 1); + BrakeStatus = (BrakeStatus || 2); // hamowanie stopniowe; + else if ((VVP - 0.003 + BCP * 1.0 / BVM > CVP)) + BrakeStatus = (BrakeStatus && 252); // luzowanie; + else if ((VVP + BCP * 1.0 / BVM > CVP)) + BrakeStatus = (BrakeStatus && 253); // zatrzymanie napelaniania; + else + ; + else if ((VVP + 0.10 < CVP) && (BCP < 0.1)) // poczatek hamowania + { + BrakeStatus = (BrakeStatus || 3); + ValveRes->CreatePress(0.8 * VVP); // przyspieszacz + } + else if ((VVP + BCP * 1.0 / BVM < CVP) && ((CVP - VVP) * BVM > 0.25)) // zatrzymanie luzowanie + BrakeStatus = (BrakeStatus || 1); } double TKE::CVs(double BP) { - double result; double VVP; double BVP; double CVP; @@ -1869,17 +1873,15 @@ double TKE::CVs(double BP) // przeplyw ZS <-> PG if ((BP > 0.2)) - CVs = 0; + return 0; else if ((VVP > CVP + 0.4)) - CVs = 0.05; + return 0.05; else - CVs = 0.23; - return result; + return 0.23; } double TKE::BVs(double BCP) { - double result; double VVP; double BVP; double CVP; @@ -1890,12 +1892,11 @@ double TKE::BVs(double BCP) // przeplyw ZP <-> rozdzielacz if ((BVP > VVP)) - BVs = 0; + return 0; else if ((BVP < CVP - 0.3)) - BVs = 0.6; + return 0.6; else - BVs = 0.13; - return result; + return 0.13; } double TKE::GetPF(double PP, double dt, double Vel) @@ -2077,32 +2078,32 @@ void TKE::SetLBP(double P) //---KRANY--- -double HANDLE::GetPF(double i_bcp, double PP, double HP, double dt, double ep) +double THandle::GetPF(double i_bcp, double PP, double HP, double dt, double ep) { return 0; } -void HANDLE::Init(double Press) +void THandle::Init(double Press) { Time = false; TimeEP = false; } -void HANDLE::SetReductor(double nAdj) +void THandle::SetReductor(double nAdj) { } -double HANDLE::GetCP() +double THandle::GetCP() { return 0; } -double HANDLE::GetSound(Byte i) +double THandle::GetSound(Byte i) { return 0; } -double HANDLE::GetPos(Byte i) +double THandle::GetPos(Byte i) { return 0; } diff --git a/McZapkie/hamulce.h b/McZapkie/hamulce.h index a8a1ee28..f46a4d68 100644 --- a/McZapkie/hamulce.h +++ b/McZapkie/hamulce.h @@ -43,677 +43,730 @@ Knorr/West EP - using namespace Friction; - static int const LocalBrakePosNo = 10; /*ilosc nastaw hamulca recznego lub pomocniczego*/ - static int const MainBrakeMaxPos = 10; /*max. ilosc nastaw hamulca zasadniczego*/ - - /*nastawy hamulca*/ - static int const bdelay_G = 1; //G - static int const bdelay_P = 2; //P - static int const bdelay_R = 4; //R - static int const bdelay_M = 8; //Mg - static int const bdelay_GR = 128; //G-R - - - /*stan hamulca*/ - static int const b_off = 0; //luzowanie - static int const b_hld = 1; //trzymanie - static int const b_on = 2; //napelnianie - static int const b_rfl = 4; //uzupelnianie - static int const b_rls = 8; //odluzniacz - static int const b_ep = 16; //elektropneumatyczny - static int const b_asb = 32; //elektropneumatyczny - static int const b_dmg = 128; //wylaczony z dzialania - - /*uszkodzenia hamulca*/ - static int const df_on = 1; //napelnianie - static int const df_off = 2; //luzowanie - static int const df_br = 4; //wyplyw z ZP - static int const df_vv = 8; //wyplyw z komory wstepnej - static int const df_bc = 16; //wyplyw z silownika - static int const df_cv = 32; //wyplyw z ZS - static int const df_PP = 64; //zawsze niski stopien - static int const df_RR = 128; //zawsze wysoki stopien - - /*indeksy dzwiekow FV4a*/ - static int const s_fv4a_b = 0; //hamowanie - static int const s_fv4a_u = 1; //luzowanie - static int const s_fv4a_e = 2; //hamowanie nagle - static int const s_fv4a_x = 3; //wyplyw sterujacego fala - 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_P10Bgu = 1; - static int const bp_LLBg = 4; //komp. b.n.t. - static int const bp_LLBgu = 3; - static int const bp_LBg = 6; //komp. n.t. - static int const bp_LBgu = 5; - 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_PKPBgu = 14; - 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 - - static int const sf_Acc = 1; //przyspieszacz - static int const sf_BR = 2; //przekladnia - static int const sf_CylB = 4; //cylinder - napelnianie - 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 double const SpgD = 0.7917; - static double const SpO = 0.5067; //przekroj przewodu 1" w l/m - //wyj: jednostka dosyc dziwna, ale wszystkie obliczenia - //i pojemnosci sa podane w litrach (rozsadne wielkosci) - //zas dlugosc pojazdow jest podana w metrach - //a predkosc przeplywu w m/s //3.5 - //7//1.5 -// BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (14, 5.4), (9, 5.0), (6, 4.6), (9, 4.5), (9, 4.0), (9, 3.5), (9, 2.8), (34, 2.8)); -// BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (7, 5.0), (2.0, 5.0), (4.5, 4.6), (4.5, 4.2), (4.5, 3.8), (4.5, 3.4), (4.5, 2.8), (8, 2.8)); - static double const BPT[ /*?*//*-2..6*/ (6) - (-2) + 1][2] = { (0 , 5.0) , (7 , 5.0) , (2.0 , 5.0) , (4.5 , 4.6) , (4.5 , 4.2) , (4.5 , 3.8) , (4.5 , 3.4) , (4.5 , 2.8) , (8 , 2.8) }; - static double const BPT_394[ /*?*//*-1..5*/ (5)-(-1)+1 ][2] = { ( 13 , 10.0 ) , ( 5 , 5.0 ) , ( 0 , -1 ) , ( 5 , -1 ) , ( 5 , 0.0 ) , ( 5 , 0.0 ) , ( 18 , 0.0 ) }; -// BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (12, 5.4), (9, 5.0), (9, 4.6), (9, 4.2), (9, 3.8), (9, 3.4), (9, 2.8), (34, 2.8)); -// BPT: array[-2..6] of array [0..1] of real= ((0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0)); - static int const i_bcpno = 6; - - - //klasa obejmujaca pojedyncze zbiorniki - - -class TReservoir: public TObject +namespace Hamulce { -protected: - double Cap; - double Vol; - double dVol; - -public: - TReservoir(); - void CreateCap(double Capacity); - void CreatePress(double Press); - virtual double pa(); - virtual double P(); - void Flow(double dv); - void Act(); - -}; + + static int const LocalBrakePosNo = 10; /*ilosc nastaw hamulca recznego lub pomocniczego*/ + static int const MainBrakeMaxPos = 10; /*max. ilosc nastaw hamulca zasadniczego*/ + + /*nastawy hamulca*/ + static int const bdelay_G = 1; //G + static int const bdelay_P = 2; //P + static int const bdelay_R = 4; //R + static int const bdelay_M = 8; //Mg + static int const bdelay_GR = 128; //G-R - typedef TReservoir *PReservoir; + /*stan hamulca*/ + static int const b_off = 0; //luzowanie + static int const b_hld = 1; //trzymanie + static int const b_on = 2; //napelnianie + static int const b_rfl = 4; //uzupelnianie + static int const b_rls = 8; //odluzniacz + static int const b_ep = 16; //elektropneumatyczny + static int const b_asb = 32; //elektropneumatyczny + static int const b_dmg = 128; //wylaczony z dzialania - -class TBrakeCyl: public TReservoir - -{ -public: - double pa()/*override*/; - double P()/*override*/; - -}; + /*uszkodzenia hamulca*/ + static int const df_on = 1; //napelnianie + static int const df_off = 2; //luzowanie + static int const df_br = 4; //wyplyw z ZP + static int const df_vv = 8; //wyplyw z komory wstepnej + static int const df_bc = 16; //wyplyw z silownika + static int const df_cv = 32; //wyplyw z ZS + static int const df_PP = 64; //zawsze niski stopien + static int const df_RR = 128; //zawsze wysoki stopien + + /*indeksy dzwiekow FV4a*/ + static int const s_fv4a_b = 0; //hamowanie + static int const s_fv4a_u = 1; //luzowanie + static int const s_fv4a_e = 2; //hamowanie nagle + static int const s_fv4a_x = 3; //wyplyw sterujacego fala + 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_P10Bgu = 1; + static int const bp_LLBg = 4; //komp. b.n.t. + static int const bp_LLBgu = 3; + static int const bp_LBg = 6; //komp. n.t. + static int const bp_LBgu = 5; + 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_PKPBgu = 14; + 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 + + static int const sf_Acc = 1; //przyspieszacz + static int const sf_BR = 2; //przekladnia + static int const sf_CylB = 4; //cylinder - napelnianie + 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 - //klasa obejmujaca uklad hamulca zespolonego pojazdu - - -class TBrake: public TObject -{ -protected: - TReservoir *BrakeCyl; //silownik - TReservoir *BrakeRes; //ZP - TReservoir *ValveRes; //komora wstepna - Byte BCN; //ilosc silownikow - double BCM; //przekladnia hamulcowa - double BCA; //laczny przekroj silownikow - Byte BrakeDelays; //dostepne opoznienia - Byte BrakeDelayFlag; //aktualna nastawa - TFricMat *FM; //material cierny - double MaxBP; //najwyzsze cisnienie - Byte BA; //osie hamowane - Byte NBpA; //klocki na os - double SizeBR; //rozmiar^2 ZP (w stosunku do 14") - double SizeBC; //rozmiar^2 CH (w stosunku do 14") - bool DCV; //podwojny zawor zwrotny - double ASBP; //cisnienie hamulca pp + static double const SpgD = 0.7917; + static double const SpO = 0.5067; //przekroj przewodu 1" w l/m + //wyj: jednostka dosyc dziwna, ale wszystkie obliczenia + //i pojemnosci sa podane w litrach (rozsadne wielkosci) + //zas dlugosc pojazdow jest podana w metrach + //a predkosc przeplywu w m/s //3.5 + //7//1.5 + // BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (14, 5.4), (9, 5.0), (6, 4.6), (9, 4.5), (9, 4.0), (9, 3.5), (9, 2.8), (34, 2.8)); + // BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (7, 5.0), (2.0, 5.0), (4.5, 4.6), (4.5, 4.2), (4.5, 3.8), (4.5, 3.4), (4.5, 2.8), (8, 2.8)); + static double const BPT[ /*?*//*-2..6*/ (6) - (-2) + 1][2] = { (0 , 5.0) , (7 , 5.0) , (2.0 , 5.0) , (4.5 , 4.6) , (4.5 , 4.2) , (4.5 , 3.8) , (4.5 , 3.4) , (4.5 , 2.8) , (8 , 2.8) }; + static double const BPT_394[ /*?*//*-1..5*/ (5) - (-1) + 1][2] = { (13 , 10.0) , (5 , 5.0) , (0 , -1) , (5 , -1) , (5 , 0.0) , (5 , 0.0) , (18 , 0.0) }; + // BPT: array[-2..6] of array [0..1] of real= ((0, 5.0), (12, 5.4), (9, 5.0), (9, 4.6), (9, 4.2), (9, 3.8), (9, 3.4), (9, 2.8), (34, 2.8)); + // BPT: array[-2..6] of array [0..1] of real= ((0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0),(0, 0)); + static int const i_bcpno = 6; + static double const pi = 3.141592653589793; - Byte BrakeStatus; //flaga stanu - Byte SoundFlag; - -public: - TBrake(double i_mbp, double i_bcr, double i_bcd, double i_brc, - Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa); - //maksymalne cisnienie, promien, skok roboczy, pojemnosc ZP; - //ilosc cylindrow, opoznienia hamulca, material klockow, osie hamowane, klocki na os; - - virtual double GetFC(double Vel, double N); //wspolczynnik tarcia - hamulec wie lepiej - virtual double GetPF(double PP, double dt, double Vel); //przeplyw miedzy komora wstepna i PG - double GetBCF(); //sila tlokowa z tloka - virtual double GetHPFlow(double HP, double dt); //przeplyw - 8 bar - virtual double GetBCP(); //cisnienie cylindrow hamulcowych - double GetBRP(); //cisnienie zbiornika pomocniczego - double GetVRP(); //cisnienie komory wstepnej rozdzielacza - virtual double GetCRP(); //cisnienie zbiornika sterujacego - virtual void Init(double PP, double HPP, double LPP, double BP, Byte BDF); //inicjalizacja hamulca - bool SetBDF(Byte nBDF); //nastawiacz GPRM - void Releaser(Byte state); //odluzniacz - virtual void SetEPS(double nEPS); //hamulec EP - void ASB(Byte state); //hamulec przeciwposlizgowy - Byte GetStatus(); //flaga statusu, moze sie przydac do odglosow - void SetASBP(double Press); //ustalenie cisnienia pp - virtual void ForceEmptiness(); - Byte GetSoundFlag(); -// procedure - -}; + //klasa obejmujaca pojedyncze zbiorniki - -class TWest: public TBrake - -{ -private: - double LBP; //cisnienie hamulca pomocniczego - double dVP; //pobor powietrza wysokiego cisnienia - double EPS; //stan elektropneumatyka - double TareM; double LoadM; //masa proznego i pelnego - double TareBP; //cisnienie dla proznego - double LoadC; //wspolczynnik przystawki wazacej - -public: - void SetLBP(double P); //cisnienie z hamulca pomocniczego - double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG - void Init(double PP, double HPP, double LPP, double BP, Byte BDF)/*override*/; - double GetHPFlow(double HP, double dt)/*override*/; - void PLC(double mass); //wspolczynnik cisnienia przystawki wazacej - void SetEPS(double nEPS)/*override*/; //stan hamulca EP - void SetLP(double TM, double LM, double TBP); //parametry przystawki wazacej - -}; + class TReservoir + { + protected: + double Cap; + double Vol; + double dVol; + + public: + TReservoir(); + void CreateCap(double Capacity); + void CreatePress(double Press); + virtual double pa(); + virtual double P(); + void Flow(double dv); + void Act(); + + }; - -class TESt: public TBrake - -{ -protected: - TReservoir *CntrlRes; //zbiornik sterujący - double BVM; //przelozenie PG-CH - -public: - double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG - void EStParams(double i_crc); //parametry charakterystyczne dla ESt - void Init(double PP, double HPP, double LPP, double BP, Byte BDF)/*override*/; - double GetCRP()/*override*/; - void CheckState(double BCP, double & dV1); //glowny przyrzad rozrzadczy - void CheckReleaser(double dt); //odluzniacz - double CVs(double BP); //napelniacz sterujacego - double BVs(double BCP); //napelniacz pomocniczego - -}; + typedef TReservoir *PReservoir; - -class TESt3: public TESt - -{ -private: - double CylFlowSpeed[2][2]; - -public: - double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG - -}; + class TBrakeCyl : public TReservoir + + { + public: + virtual double pa()/*override*/; + virtual double P()/*override*/; + + }; - -class TESt3AL2: public TESt3 - -{ -private: - double TareM; double LoadM; //masa proznego i pelnego - double TareBP; //cisnienie dla proznego - double LoadC; - -public: - TReservoir *ImplsRes; //komora impulsowa - double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG - void PLC(double mass); //wspolczynnik cisnienia przystawki wazacej - void SetLP(double TM, double LM, double TBP); //parametry przystawki wazacej - void Init(double PP, double HPP, double LPP, double BP, Byte BDF)/*override*/; - -}; + //klasa obejmujaca uklad hamulca zespolonego pojazdu - -class TESt4R: public TESt - -{ -private: - bool RapidStatus; -protected: - TReservoir *ImplsRes; //komora impulsowa - double RapidTemp; //akrualne, zmienne przelozenie + class TBrake + { + protected: + TReservoir *BrakeCyl; //silownik + TReservoir *BrakeRes; //ZP + TReservoir *ValveRes; //komora wstepna + Byte BCN; //ilosc silownikow + double BCM; //przekladnia hamulcowa + double BCA; //laczny przekroj silownikow + Byte BrakeDelays; //dostepne opoznienia + Byte BrakeDelayFlag; //aktualna nastawa + TFricMat *FM; //material cierny + double MaxBP; //najwyzsze cisnienie + Byte BA; //osie hamowane + Byte NBpA; //klocki na os + double SizeBR; //rozmiar^2 ZP (w stosunku do 14") + double SizeBC; //rozmiar^2 CH (w stosunku do 14") + bool DCV; //podwojny zawor zwrotny + double ASBP; //cisnienie hamulca pp -public: - double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG - void Init(double PP, double HPP, double LPP, double BP, Byte BDF)/*override*/; - -}; + Byte BrakeStatus; //flaga stanu + Byte SoundFlag; + + public: + TBrake(double i_mbp, double i_bcr, double i_bcd, double i_brc, + Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa); + //maksymalne cisnienie, promien, skok roboczy, pojemnosc ZP; + //ilosc cylindrow, opoznienia hamulca, material klockow, osie hamowane, klocki na os; + + virtual double GetFC(double Vel, double N); //wspolczynnik tarcia - hamulec wie lepiej + virtual double GetPF(double PP, double dt, double Vel); //przeplyw miedzy komora wstepna i PG + double GetBCF(); //sila tlokowa z tloka + virtual double GetHPFlow(double HP, double dt); //przeplyw - 8 bar + virtual double GetBCP(); //cisnienie cylindrow hamulcowych + double GetBRP(); //cisnienie zbiornika pomocniczego + double GetVRP(); //cisnienie komory wstepnej rozdzielacza + virtual double GetCRP(); //cisnienie zbiornika sterujacego + virtual void Init(double PP, double HPP, double LPP, double BP, Byte BDF); //inicjalizacja hamulca + bool SetBDF(Byte nBDF); //nastawiacz GPRM + void Releaser(Byte state); //odluzniacz + virtual void SetEPS(double nEPS); //hamulec EP + void ASB(Byte state); //hamulec przeciwposlizgowy + Byte GetStatus(); //flaga statusu, moze sie przydac do odglosow + void SetASBP(double Press); //ustalenie cisnienia pp + virtual void ForceEmptiness(); + Byte GetSoundFlag(); + // procedure + + }; - -class TLSt: public TESt4R - -{ -private: - double CylFlowSpeed[2][2]; -protected: - double LBP; //cisnienie hamulca pomocniczego - double RM; //przelozenie rapida - double EDFlag; //luzowanie hamulca z powodu zalaczonego ED -public: - void SetLBP(double P); //cisnienie z hamulca pomocniczego - void SetRM(double RMR); //ustalenie przelozenia rapida - double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG - double GetHPFlow(double HP, double dt)/*override*/; //przeplyw - 8 bar - void Init(double PP, double HPP, double LPP, double BP, Byte BDF)/*override*/; - virtual double GetEDBCP(); //cisnienie tylko z hamulca zasadniczego, uzywane do hamulca ED w EP09 - void SetED(double EDstate); //stan hamulca ED do luzowania - -}; + class TWest : public TBrake + + { + private: + double LBP; //cisnienie hamulca pomocniczego + double dVP; //pobor powietrza wysokiego cisnienia + double EPS; //stan elektropneumatyka + double TareM; double LoadM; //masa proznego i pelnego + double TareBP; //cisnienie dla proznego + double LoadC; //wspolczynnik przystawki wazacej + + public: + void SetLBP(double P); //cisnienie z hamulca pomocniczego + double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG + void Init(double PP, double HPP, double LPP, double BP, Byte BDF)/*override*/; + double GetHPFlow(double HP, double dt)/*override*/; + void PLC(double mass); //wspolczynnik cisnienia przystawki wazacej + void SetEPS(double nEPS)/*override*/; //stan hamulca EP + void SetLP(double TM, double LM, double TBP); //parametry przystawki wazacej + + inline TWest(double i_mbp, double i_bcr, double i_bcd, double i_brc, + Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + }; - -class TEStED: public TLSt //zawor z EP09 - Est4 z oddzielnym przekladnikiem, kontrola rapidu i takie tam - -{ -private: - double Nozzles[11]; //dysze - bool Zamykajacy; //pamiec zaworka zamykajacego - bool Przys_blok; //blokada przyspieszacza - TReservoir *Miedzypoj; //pojemnosc posrednia (urojona) do napelniania ZP i ZS - double TareM; double LoadM; //masa proznego i pelnego - double TareBP; //cisnienie dla proznego - double LoadC; - -public: - void Init(double PP, double HPP, double LPP, double BP, Byte 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 - void PLC(double mass); //wspolczynnik cisnienia przystawki wazacej - void SetLP(double TM, double LM, double TBP); //parametry przystawki wazacej - -}; - - -class TEStEP2: public TLSt - -{ -private: - double TareM; double LoadM; //masa proznego i pelnego - double TareBP; //cisnienie dla proznego - double LoadC; - double EPS; - -public: - double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG - void Init(double PP, double HPP, double LPP, double BP, Byte BDF)/*override*/; //inicjalizacja - void PLC(double mass); //wspolczynnik cisnienia przystawki wazacej - void SetEPS(double nEPS)/*override*/; //stan hamulca EP - void SetLP(double TM, double LM, double TBP); //parametry przystawki wazacej - -}; + class TESt : public TBrake + + { + protected: + TReservoir *CntrlRes; //zbiornik sterujący + double BVM; //przelozenie PG-CH + + public: + double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG + void EStParams(double i_crc); //parametry charakterystyczne dla ESt + void Init(double PP, double HPP, double LPP, double BP, Byte BDF)/*override*/; + double GetCRP()/*override*/; + void CheckState(double BCP, double & dV1); //glowny przyrzad rozrzadczy + void CheckReleaser(double dt); //odluzniacz + double CVs(double BP); //napelniacz sterujacego + double BVs(double BCP); //napelniacz pomocniczego + + inline TESt(double i_mbp, double i_bcr, double i_bcd, double i_brc, + Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + }; - -class TCV1: public TBrake - -{ -private: - double BVM; //przelozenie PG-CH -protected: - TReservoir *CntrlRes; //zbiornik sterujący -public: - double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG - void Init(double PP, double HPP, double LPP, double BP, Byte BDF)/*override*/; - double GetCRP()/*override*/; - void CheckState(double BCP, double & dV1); - double CVs(double BP); - double BVs(double BCP); - -}; + class TESt3 : public TESt + + { + private: + double CylFlowSpeed[2][2]; + + 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, + Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TESt(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + }; - -class TCV1R: public TCV1 - -{ -private: - 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: byte); override; - -}; + + class TESt3AL2 : public TESt3 + + { + private: + double TareM; double LoadM; //masa proznego i pelnego + double TareBP; //cisnienie dla proznego + double LoadC; + + public: + TReservoir *ImplsRes; //komora impulsowa + double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG + void PLC(double mass); //wspolczynnik cisnienia przystawki wazacej + void SetLP(double TM, double LM, double TBP); //parametry przystawki wazacej + void Init(double PP, double HPP, double LPP, double BP, Byte BDF)/*override*/; + + inline TESt3AL2(double i_mbp, double i_bcr, double i_bcd, double i_brc + , Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TESt3(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + }; - -class TCV1L_TR: public TCV1 - -{ -private: - TReservoir *ImplsRes; //komora impulsowa - double LBP; //cisnienie hamulca pomocniczego - -public: - double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG - void Init(double PP, double HPP, double LPP, double BP, Byte BDF)/*override*/; - void SetLBP(double P); //cisnienie z hamulca pomocniczego - double GetHPFlow(double HP, double dt)/*override*/; //przeplyw - 8 bar - -}; + + class TESt4R : public TESt + + { + private: + bool RapidStatus; + protected: + TReservoir *ImplsRes; //komora impulsowa + double RapidTemp; //akrualne, zmienne przelozenie + + public: + double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG + void Init(double PP, double HPP, double LPP, double BP, Byte BDF)/*override*/; + + inline TESt4R(double i_mbp, double i_bcr, double i_bcd, double i_brc + , Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TESt(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + }; - -class TKE: public TBrake //Knorr Einheitsbauart — jeden do wszystkiego - -{ -private: - bool RapidStatus; - TReservoir *ImplsRes; //komora impulsowa - TReservoir *CntrlRes; //zbiornik sterujący - TReservoir *Brak2Res; //zbiornik pomocniczy 2 - double BVM; //przelozenie PG-CH - double TareM; double LoadM; //masa proznego i pelnego - double TareBP; //cisnienie dla proznego - double LoadC; //wspolczynnik zaladowania - double RM; //przelozenie rapida - double LBP; //cisnienie hamulca pomocniczego - -public: - void SetRM(double RMR); //ustalenie przelozenia rapida - double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG - void Init(double PP, double HPP, double LPP, double BP, Byte BDF)/*override*/; - double GetHPFlow(double HP, double dt)/*override*/; //przeplyw - 8 bar - double GetCRP()/*override*/; - void CheckState(double BCP, double & dV1); - void CheckReleaser(double dt); //odluzniacz - double CVs(double BP); //napelniacz sterujacego - double BVs(double BCP); //napelniacz pomocniczego - void PLC(double mass); //wspolczynnik cisnienia przystawki wazacej - void SetLP(double TM, double LM, double TBP); //parametry przystawki wazacej - void SetLBP(double P); //cisnienie z hamulca pomocniczego - -}; + + class TLSt : public TESt4R + + { + private: + double CylFlowSpeed[2][2]; + protected: + double LBP; //cisnienie hamulca pomocniczego + double RM; //przelozenie rapida + double EDFlag; //luzowanie hamulca z powodu zalaczonego ED + + public: + void SetLBP(double P); //cisnienie z hamulca pomocniczego + void SetRM(double RMR); //ustalenie przelozenia rapida + double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG + double GetHPFlow(double HP, double dt)/*override*/; //przeplyw - 8 bar + void Init(double PP, double HPP, double LPP, double BP, Byte BDF)/*override*/; + virtual double GetEDBCP(); //cisnienie tylko z hamulca zasadniczego, uzywane do hamulca ED w EP09 + void SetED(double EDstate); //stan hamulca ED do luzowania + + inline TLSt(double i_mbp, double i_bcr, double i_bcd, double i_brc, + Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TESt4R(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + }; + + + + class TEStED : public TLSt //zawor z EP09 - Est4 z oddzielnym przekladnikiem, kontrola rapidu i takie tam + + { + private: + double Nozzles[11]; //dysze + bool Zamykajacy; //pamiec zaworka zamykajacego + bool Przys_blok; //blokada przyspieszacza + TReservoir *Miedzypoj; //pojemnosc posrednia (urojona) do napelniania ZP i ZS + double TareM; double LoadM; //masa proznego i pelnego + double TareBP; //cisnienie dla proznego + double LoadC; + + public: + void Init(double PP, double HPP, double LPP, double BP, Byte 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 + void PLC(double mass); //wspolczynnik cisnienia przystawki wazacej + void SetLP(double TM, double LM, double TBP); //parametry przystawki wazacej + + inline TEStED(double i_mbp, double i_bcr, double i_bcd, double i_brc + , Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TLSt(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + }; + + + + class TEStEP2 : public TLSt + + { + private: + double TareM; double LoadM; //masa proznego i pelnego + double TareBP; //cisnienie dla proznego + double LoadC; + double EPS; + + public: + double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG + void Init(double PP, double HPP, double LPP, double BP, Byte BDF)/*override*/; //inicjalizacja + void PLC(double mass); //wspolczynnik cisnienia przystawki wazacej + void SetEPS(double nEPS)/*override*/; //stan hamulca EP + void SetLP(double TM, double LM, double TBP); //parametry przystawki wazacej + + inline TEStEP2(double i_mbp, double i_bcr, double i_bcd, double i_brc + , Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TLSt(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + }; + + + + class TCV1 : public TBrake + + { + private: + double BVM; //przelozenie PG-CH + protected: + TReservoir *CntrlRes; //zbiornik sterujący + + public: + double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG + void Init(double PP, double HPP, double LPP, double BP, Byte BDF)/*override*/; + double GetCRP()/*override*/; + void CheckState(double BCP, double & dV1); + double CVs(double BP); + double BVs(double BCP); + + inline TCV1(double i_mbp, double i_bcr, double i_bcd, double i_brc, + Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + }; + + + + class TCV1R : public TCV1 + + { + private: + 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: byte); override; + + inline TCV1R(double i_mbp, double i_bcr, double i_bcd, double i_brc, + Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TCV1(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + }; + + + + class TCV1L_TR : public TCV1 + + { + private: + TReservoir *ImplsRes; //komora impulsowa + double LBP; //cisnienie hamulca pomocniczego + + public: + double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG + void Init(double PP, double HPP, double LPP, double BP, Byte BDF)/*override*/; + void SetLBP(double P); //cisnienie z hamulca pomocniczego + double GetHPFlow(double HP, double dt)/*override*/; //przeplyw - 8 bar + + inline TCV1L_TR(double i_mbp, double i_bcr, double i_bcd, double i_brc + , Byte i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TCV1(i_mbp, i_bcr, i_bcd, i_brc, i_bcn + , i_BD, i_mat, i_ba, i_nbpa) { } + }; + + + + class TKE : public TBrake //Knorr Einheitsbauart — jeden do wszystkiego + + { + private: + bool RapidStatus; + TReservoir *ImplsRes; //komora impulsowa + TReservoir *CntrlRes; //zbiornik sterujący + TReservoir *Brak2Res; //zbiornik pomocniczy 2 + double BVM; //przelozenie PG-CH + double TareM; double LoadM; //masa proznego i pelnego + double TareBP; //cisnienie dla proznego + double LoadC; //wspolczynnik zaladowania + double RM; //przelozenie rapida + double LBP; //cisnienie hamulca pomocniczego + + public: + void SetRM(double RMR); //ustalenie przelozenia rapida + double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG + void Init(double PP, double HPP, double LPP, double BP, Byte BDF)/*override*/; + double GetHPFlow(double HP, double dt)/*override*/; //przeplyw - 8 bar + double GetCRP()/*override*/; + void CheckState(double BCP, double & dV1); + void CheckReleaser(double dt); //odluzniacz + double CVs(double BP); //napelniacz sterujacego + double BVs(double BCP); //napelniacz pomocniczego + void PLC(double mass); //wspolczynnik cisnienia przystawki wazacej + void SetLP(double TM, double LM, double TBP); //parametry przystawki wazacej + void SetLBP(double P); //cisnienie z hamulca pomocniczego + + inline TKE(double i_mbp, double i_bcr, double i_bcd, double i_brc, Byte + i_bcn, Byte i_BD, Byte i_mat, Byte i_ba, Byte i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn, + i_BD, i_mat, i_ba, i_nbpa) { } + }; - //klasa obejmujaca krany - - -class HANDLE: public TObject -{ -private: -// BCP: integer; - -public: - bool Time; - bool TimeEP; - 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(Byte i); - virtual double GetPos(Byte i); - -}; + //klasa obejmujaca krany - -class TFV4a: public HANDLE - -{ -private: - double CP; double TP; double RP; //zbiornik sterujący, czasowy, redukcyjny - -public: - double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/; - void Init(double Press)/*override*/; - -}; + class THandle + { + private: + // BCP: integer; + + public: + bool Time; + bool TimeEP; + 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(Byte i); + virtual double GetPos(Byte i); + + }; - -class TFV4aM: public HANDLE - -{ -private: - double CP; double TP; double RP; //zbiornik sterujący, czasowy, redukcyjny - double XP; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali - double RedAdj; //dostosowanie reduktora cisnienia (krecenie kapturkiem) + + class TFV4a : public THandle + + { + private: + double CP; double TP; double RP; //zbiornik sterujący, czasowy, redukcyjny + + public: + double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/; + void Init(double Press)/*override*/; + + inline TFV4a(void) : THandle() { } + + }; + + + + class TFV4aM : public THandle + + { + private: + double CP; double TP; double RP; //zbiornik sterujący, czasowy, redukcyjny + double XP; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali + double RedAdj; //dostosowanie reduktora cisnienia (krecenie kapturkiem) // Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow - bool Fala; + bool Fala; double LPP_RP(double pos); bool EQ(double pos, double i_pos); -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(Byte i)/*override*/; - double GetPos(Byte i)/*override*/; - -}; + 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(Byte i)/*override*/; + double GetPos(Byte i)/*override*/; + + inline TFV4aM(void) : THandle() { } + }; - -class TMHZ_EN57: public HANDLE - -{ -private: - double CP; double TP; double RP; //zbiornik sterujący, czasowy, redukcyjny - double RedAdj; //dostosowanie reduktora cisnienia (krecenie kapturkiem) - bool Fala; + + class TMHZ_EN57 : public THandle + + { + private: + double CP; double TP; double RP; //zbiornik sterujący, czasowy, redukcyjny + double RedAdj; //dostosowanie reduktora cisnienia (krecenie kapturkiem) + bool Fala; double LPP_RP(double pos); bool EQ(double pos, double i_pos); -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(Byte i)/*override*/; - double GetPos(Byte i)/*override*/; - double GetCP()/*override*/; - double GetEP(double pos); - -}; + 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(Byte i)/*override*/; + double GetPos(Byte i)/*override*/; + double GetCP()/*override*/; + double GetEP(double pos); + + inline TMHZ_EN57(void) : THandle() { } + }; -/* FBS2= class(THandle) - 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: byte): real; override; - function GetPos(i: byte): real; override; - end; */ + /* FBS2= class(TTHandle) + 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: byte): real; override; + function GetPos(i: byte): real; override; + end; */ -/* TD2= class(THandle) - 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: byte): real; override; - function GetPos(i: byte): real; override; - end;*/ - - -class TM394: public HANDLE - -{ -private: - double CP; //zbiornik sterujący, czasowy, redukcyjny - double RedAdj; //dostosowanie reduktora cisnienia (krecenie kapturkiem) - -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 GetCP()/*override*/; - double GetPos(Byte i)/*override*/; - -}; + /* TD2= class(TTHandle) + 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: byte): real; override; + function GetPos(i: byte): real; override; + end;*/ - -class TH14K1: public HANDLE - -{ -protected: - double CP; //zbiornik sterujący, czasowy, redukcyjny - double RedAdj; //dostosowanie reduktora cisnienia (krecenie kapturkiem) + class TM394 : public THandle -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 GetCP()/*override*/; - double GetPos(Byte i)/*override*/; - -}; + { + private: + double CP; //zbiornik sterujący, czasowy, redukcyjny + double RedAdj; //dostosowanie reduktora cisnienia (krecenie kapturkiem) + 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 GetCP()/*override*/; + double GetPos(Byte i)/*override*/; - -class TSt113: public TH14K1 - -{ -private: - double EPS; - -public: - double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/; - double GetCP()/*override*/; - double GetPos(Byte i)/*override*/; - void Init(double Press)/*override*/; - -}; - - - -class Ttest: public HANDLE - -{ -private: - double CP; - -public: - double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/; - void Init(double Press)/*override*/; - -}; - - - -class TFD1: public HANDLE - -{ -private: - double MaxBP; //najwyzsze cisnienie - double BP; //aktualne cisnienie - -public: - double Speed; //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; - -}; - - - -class TH1405: public HANDLE - -{ -private: - double MaxBP; //najwyzsze cisnienie - double BP; //aktualne cisnienie - -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; - -}; + inline TM394(void) : THandle() { } + }; - -class TFVel6: public HANDLE - -{ -private: - double EPS; - -public: - double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/; - double GetCP()/*override*/; - double GetPos(Byte i)/*override*/; - double GetSound(Byte i)/*override*/; - void Init(double Press)/*override*/; - -}; + class TH14K1 : public THandle + { + protected: + double CP; //zbiornik sterujący, czasowy, redukcyjny + double RedAdj; //dostosowanie reduktora cisnienia (krecenie kapturkiem) -extern double PF(double P1, double P2, double S, double DP = 0.25); -extern double PF1(double P1, double P2, double S); + 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 GetCP()/*override*/; + double GetPos(Byte i)/*override*/; -extern double PFVa(double PH, double PL, double S, double LIM, double DP = 0.1); //zawor napelniajacy z PH do PL, PL do LIM -extern double PFVd(double PH, double PL, double S, double LIM, double DP = 0.1); //zawor wypuszczajacy z PH do PL, PH do LIM + inline TH14K1(void) : THandle() { } + }; + class TSt113 : public TH14K1 + + { + private: + double EPS; + + public: + double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/; + double GetCP()/*override*/; + double GetPos(Byte i)/*override*/; + void Init(double Press)/*override*/; + + inline TSt113(void) : TH14K1() { } + }; + + + + class Ttest : public THandle + + { + private: + double CP; + + public: + double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/; + void Init(double Press)/*override*/; + + inline Ttest(void) : THandle() { } + }; + + + + class TFD1 : public THandle + + { + private: + double MaxBP; //najwyzsze cisnienie + double BP; //aktualne cisnienie + + public: + double Speed; //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; + + inline TFD1(void) : THandle() { } + }; + + + + class TH1405 : public THandle + + { + private: + double MaxBP; //najwyzsze cisnienie + double BP; //aktualne cisnienie + + 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; + + inline TH1405(void) : THandle() { } + }; + + + + + class TFVel6 : public THandle + + { + private: + double EPS; + + public: + double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/; + double GetCP()/*override*/; + double GetPos(Byte i)/*override*/; + double GetSound(Byte i)/*override*/; + void Init(double Press)/*override*/; + + inline TFVel6(void) : THandle() { } + }; + + + extern double PF(double P1, double P2, double S, double DP = 0.25); + extern double PF1(double P1, double P2, double S); + + extern double PFVa(double PH, double PL, double S, double LIM, double DP = 0.1); //zawor napelniajacy z PH do PL, PL do LIM + extern double PFVd(double PH, double PL, double S, double LIM, double DP = 0.1); //zawor wypuszczajacy z PH do PL, PH do LIM + + extern long lround(double value); //zastepuje funkcje nieobecna w C++99 +} +#if !defined(NO_IMPLICIT_NAMESPACE_USE) +using namespace Hamulce; +#endif #endif//INCLUDED_HAMULCE_H //END diff --git a/Train.cpp b/Train.cpp index dfb5b21b..33f06994 100644 --- a/Train.cpp +++ b/Train.cpp @@ -22,6 +22,8 @@ http://mozilla.org/MPL/2.0/. #include "Timer.h" #include "Driver.h" #include "Console.h" +#include "McZapkie\hamulce.h" +#include //--------------------------------------------------------------------------- #pragma package(smart_init) @@ -321,7 +323,7 @@ PyObject *TTrain::GetTrainState() bool bEP, bPN; bEP = (mvControlled->LocHandle->GetCP()>0.2) || (fEIMParams[0][2]>0.01); PyDict_SetItemString(dict, "dir_brake", PyGetBool(bEP)); - if (mvControlled->Hamulec->ClassNameIs("TLSt") || mvControlled->Hamulec->ClassNameIs("TEStED")) + if (typeid(mvControlled->Hamulec) == typeid(TLSt) || typeid(mvControlled->Hamulec) == typeid(TEStED)) { TBrake* temp_ham = mvControlled->Hamulec; // TLSt* temp_ham2 = temp_ham;