16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-23 01:39:19 +02:00

Zmiana obiektów na wskaźniki zgodnie z konwerterem Borlanda.

This commit is contained in:
firleju
2016-09-26 06:36:28 +02:00
parent fcd06c35c5
commit 48c4ecd1a2
6 changed files with 665 additions and 639 deletions

View File

@@ -4,16 +4,16 @@
<MACROS>
<VERSION value="BCB.05.03"/>
<PROJECT value="E:\Gry\MaSzyna_15_04\EU07.exe"/>
<OBJFILES value="QueryParserComp.obj McZapkie\_mover.obj McZapkie\hamulce.obj
McZapkie\Oerlikon_ESt.obj EU07.obj dumb3d.obj Camera.obj Texture.obj
World.obj Model3d.obj MdlMngr.obj Train.obj wavread.obj Timer.obj
Event.obj MemCell.obj Logs.obj Spring.obj Button.obj Globals.obj Gauge.obj
AnimModel.obj Ground.obj TrkFoll.obj Segment.obj Sound.obj AdvSound.obj
Track.obj DynObj.obj RealSound.obj EvLaunch.obj FadeSound.obj Traction.obj
TractionPower.obj parser.obj sky.obj AirCoupler.obj opengl\glew.obj
ResourceManager.obj VBO.obj mtable.obj TextureDDS.obj
opengl\ARB_Multisample.obj Float3d.obj Classes.obj Driver.obj Names.obj
Console.obj Mover.obj Console\PoKeys55.obj Forth.obj Console\LPT.obj
<OBJFILES value="QueryParserComp.obj McZapkie\_mover.obj McZapkie\hamulce.obj EU07.obj
dumb3d.obj Camera.obj Texture.obj World.obj Model3d.obj MdlMngr.obj
Train.obj wavread.obj Timer.obj Event.obj MemCell.obj Logs.obj Spring.obj
Button.obj Globals.obj Gauge.obj AnimModel.obj Ground.obj TrkFoll.obj
Segment.obj Sound.obj AdvSound.obj Track.obj DynObj.obj RealSound.obj
EvLaunch.obj FadeSound.obj Traction.obj TractionPower.obj parser.obj
sky.obj AirCoupler.obj opengl\glew.obj ResourceManager.obj VBO.obj
mtable.obj TextureDDS.obj opengl\ARB_Multisample.obj Float3d.obj
Classes.obj Driver.obj Names.obj Console.obj Mover.obj
McZapkie\Oerlikon_ESt.obj Console\PoKeys55.obj Forth.obj Console\LPT.obj
PyInt.obj"/>
<RESFILES value="EU07.res"/>
<IDLFILES value=""/>
@@ -24,7 +24,7 @@
<LIBRARIES value="dclocx50.bpi bcbsmp50.bpi VCLX50.lib bcbsmp50.lib Vcl50.lib"/>
<SPARELIBS value="Vcl50.lib bcbsmp50.lib VCLX50.lib bcbsmp50.bpi dclocx50.bpi"/>
<PACKAGES value="Vcl50.bpi Vclx50.bpi"/>
<PATHCPP value=".;opengl;Console"/>
<PATHCPP value=".;opengl;McZapkie;Console"/>
<PATHPAS value=".;McZapkie"/>
<PATHRC value=".;"/>
<PATHASM value=".;"/>

View File

@@ -82,7 +82,7 @@ USEUNIT("Console.cpp");
USEUNIT("Mover.cpp");
USEUNIT("McZapkie\_mover.pas");
USEUNIT("McZapkie\hamulce.pas");
USEUNIT("McZapkie\Oerlikon_ESt.pas");
USEUNIT("McZapkie\Oerlikon_ESt.cpp");
USEUNIT("Console\PoKeys55.cpp");
USEUNIT("Forth.cpp");
USEUNIT("Console\LPT.cpp");

View File

@@ -11,7 +11,7 @@
#pragma delphiheader begin
#pragma option push -w-
#pragma option push -Vx
#include <Oerlikon_ESt.hpp> // Pascal unit
#include <Oerlikon_ESt.h> // Pascal unit
#include <hamulce.hpp> // Pascal unit
#include <SysUtils.hpp> // Pascal unit
#include <mctools.hpp> // Pascal unit

View File

@@ -13,24 +13,23 @@ Copyright (C) 2007-2014 Maciej Cierniak
*/
#include "Oerlikon_ESt.h"
#include <typeinfo>
double d2A(double d)
{ double result;
d2A =( d*d )*0.7854*1.0/1000;
return result;
{
return (d * d) * 0.7854 * 1.0 / 1000;
}
// ------ RURA ------
double TRura::P()
{ double result;
P =Next.P;
return result;
double __fastcall TRura::P(void)
{
return Next->P();
}
void TRura::Update(double dt)
{
Next.Flow( dVol );
Next->Flow(dVol);
dVol = 0;
}
@@ -45,33 +44,35 @@ void TPrzeciwposlizg::Update(double dt)
{
if ((Poslizg))
{
BrakeRes.Flow( dVol );
Next.Flow( PF( Next.P, 0, d2A( 10 ) )*dt );
BrakeRes->Flow(dVol);
Next->Flow(PF(Next->P(), 0, d2A(10)) * dt);
}
else
Next.Flow( dVol );
Next->Flow(dVol);
dVol = 0;
}
// ------ PRZEKLADNIK ------
void TPrzekladnik::Update(double dt)
{ double BCP; double BVP; double dV;
{
double BCP;
double BVP;
double dV;
BCP =Next.P;
BVP =BrakeRes.P;
BCP = Next->P();
BVP = BrakeRes->P();
if ((BCP > P))
dV =-PFVd( BCP, 0, d2A( 10 ), P )*dt;else
if( ( BCP<P ) )
dV =PFVa( BVP, BCP, d2A( 10 ), P )*dt;else dV =0;
dV = -PFVd(BCP, 0, d2A(10), P) * dt;
else if ((BCP < P))
dV = PFVa(BVP, BCP, d2A(10), P) * dt;
else
dV = 0;
Next.Flow( dV );
Next->Flow(dV);
if (dV > 0)
BrakeRes.Flow( -dV );
BrakeRes->Flow(-dV);
}
// ------ PRZEKLADNIK RAPID ------
@@ -98,10 +99,14 @@ void TRapid::SetRapidStatus(bool rs)
}
void TRapid::Update(double dt)
{ double BCP; double BVP; double dV; double ActMult;
{
double BCP;
double BVP;
double dV;
double ActMult;
BVP =BrakeRes.P;
BCP =Next.P;
BVP = BrakeRes->P();
BCP = Next->P();
if ((RapidStatus))
{
@@ -113,14 +118,15 @@ void TRapid::Update(double dt)
}
if ((BCP * RapidMult > P * ActMult))
dV =-PFVd( BCP, 0, DL, P*ActMult*1.0/RapidMult )*dt;else
if( ( BCP*RapidMult<P*ActMult ) )
dV =PFVa( BVP, BCP, DN, P*ActMult*1.0/RapidMult )*dt;else dV =0;
dV = -PFVd(BCP, 0, DL, P * ActMult * 1.0 / RapidMult) * dt;
else if ((BCP * RapidMult < P * ActMult))
dV = PFVa(BVP, BCP, DN, P * ActMult * 1.0 / RapidMult) * dt;
else
dV = 0;
Next.Flow( dV );
Next->Flow(dV);
if (dV > 0)
BrakeRes.Flow( -dV );
BrakeRes->Flow(-dV);
}
// ------ PRZEK£ADNIK CI¥G£Y ------
@@ -131,20 +137,24 @@ void TPrzekCiagly::SetMult(double m)
}
void TPrzekCiagly::Update(double dt)
{ double BCP; double BVP; double dV;
{
double BCP;
double BVP;
double dV;
BVP =BrakeRes.P;
BCP =Next.P;
BVP = BrakeRes->P();
BCP = Next->P();
if ((BCP > P * mult))
dV =-PFVd( BCP, 0, d2A( 8 ), P*mult )*dt;else
if( ( BCP<P*mult ) )
dV =PFVa( BVP, BCP, d2A( 8 ), P*mult )*dt;else dV =0;
dV = -PFVd(BCP, 0, d2A(8), P * mult) * dt;
else if ((BCP < P * mult))
dV = PFVa(BVP, BCP, d2A(8), P * mult) * dt;
else
dV = 0;
Next.Flow( dV );
Next->Flow(dV);
if (dV > 0)
BrakeRes.Flow( -dV );
BrakeRes->Flow(-dV);
}
// ------ PRZEK£ADNIK CI¥G£Y ------
@@ -155,22 +165,27 @@ void TPrzek_PZZ::SetLBP(double P)
}
void TPrzek_PZZ::Update(double dt)
{ double BCP; double BVP; double dV; double Pgr;
{
double BCP;
double BVP;
double dV;
double Pgr;
BVP =BrakeRes.P;
BCP =Next.P;
BVP = BrakeRes->P();
BCP = Next->P();
Pgr = Max0R(LBP, P);
if ((BCP > Pgr))
dV =-PFVd( BCP, 0, d2A( 8 ), Pgr )*dt;else
if( ( BCP<Pgr ) )
dV =PFVa( BVP, BCP, d2A( 8 ), Pgr )*dt;else dV =0;
dV = -PFVd(BCP, 0, d2A(8), Pgr) * dt;
else if ((BCP < Pgr))
dV = PFVa(BVP, BCP, d2A(8), Pgr) * dt;
else
dV = 0;
Next.Flow( dV );
Next->Flow(dV);
if (dV > 0)
BrakeRes.Flow( -dV );
BrakeRes->Flow(-dV);
}
// ------ PRZECIWPOSLIG ------
@@ -182,127 +197,143 @@ void TPrzekED::SetP(double P)
void TPrzekED::Update(double dt)
{
if( Next.P>MaxP )
if (Next->P > MaxP)
{
BrakeRes.Flow( dVol );
Next.Flow( PFVd( Next.P, 0, d2A( 10 )*dt, MaxP ) );
BrakeRes->Flow(dVol);
Next->Flow(PFVd(Next->P, 0, d2A(10) * dt, MaxP));
}
else
Next.Flow( dVol );
Next->Flow(dVol);
dVol = 0;
}
// ------ OERLIKON EST NA BOGATO ------
double TNESt3::GetPF(double PP, double dt, double Vel) // przeplyw miedzy komora wstepna i PG
{ double result; double dV; double dV1; double temp;
double VVP; double BVP; double BCP; double CVP; double MPP; double nastG;
{
double dV;
double dV1;
double temp;
double VVP;
double BVP;
double BCP;
double CVP;
double MPP;
double nastG;
unsigned char i;
BVP =BrakeRes.P;
VVP =ValveRes.P;
BVP = BrakeRes->P();
VVP = ValveRes->P();
// BCP:=BrakeCyl.P;
BCP =Przekladniki[ 1 ].P;
BCP = Przekladniki[1]->P();
CVP = CntrlRes.P - 0.0;
MPP =Miedzypoj.P;
MPP = Miedzypoj->P();
dV1 = 0;
nastG =( BrakeDelayFlag && bdelay_G );
nastG = (BrakeDelayFlag & bdelay_G);
// sprawdzanie stanu
CheckState(BCP, dV1);
CheckReleaser(dt);
// luzowanie
if( ( BrakeStatus && b_hld )==b_off )
dV =PF( 0, BCP, Nozzles[ dTO ]*nastG+( 1-nastG )*Nozzles[ dOO ] )*dt*( 0.1+4.9*Min0R( 0.2, BCP-( ( CVP-0.05-VVP )*BVM+0.1 ) ) );else dV =0;
// BrakeCyl.Flow(-dV);
Przekladniki[ 1 ].Flow( -dV );
if( ( ( BrakeStatus && b_on )==b_on )&&( Przekladniki[ 1 ].P*HBG300<MaxBP ) )
dV =PF( BVP, BCP, Nozzles[ dTN ]*( nastG+2*unsigned char( BCP<Podskok ) )+Nozzles[ dON ]*( 1-nastG ) )*dt*( 0.1+4.9*Min0R( 0.2, ( CVP-0.05-VVP )*BVM-BCP ) );else dV =0;
// BrakeCyl.Flow(-dV);
Przekladniki[ 1 ].Flow( -dV );
BrakeRes.Flow( dV );
{ long i_end = 4 ; for( i = 1 ; i < i_end ; ++i )
{
Przekladniki[ i ].Update( dt );
if( ( Przekladniki[ i ] is TRapid ) )
{
RapidStatus =( ( ( BrakeDelayFlag && bdelay_R )==bdelay_R ) && ( ( abs( Vel )>70 ) || ( ( RapidStatus ) && ( abs( Vel )>50 ) ) || ( RapidStaly ) ) );
( Przekladniki[ i ] as TRapid ).SetRapidStatus( RapidStatus );
}
if ((BrakeStatus & b_hld) == b_off)
dV = PF(0, BCP, Nozzles[dTO] * nastG + (1 - nastG) * Nozzles[dOO]) * dt *
(0.1 + 4.9 * Min0R(0.2, BCP - ((CVP - 0.05 - VVP) * BVM + 0.1)));
else
if( ( Przekladniki[ i ] is TPrzeciwposlizg ) )
( Przekladniki[ i ] as TPrzeciwposlizg ).SetPoslizg( ( BrakeStatus && b_asb )==b_asb );else
if( ( Przekladniki[ i ] is TPrzekED ) )
if( ( Vel<-15 ) )
( Przekladniki[ i ] as TPrzekED ).SetP( 0 );else ( Przekladniki[ i ] as TPrzekED ).SetP( MaxBP*3 );else
if( ( Przekladniki[ i ] is TPrzekCiagly ) )
( Przekladniki[ i ] as TPrzekCiagly ).SetMult( LoadC );else
if( ( Przekladniki[ i ] is TPrzek_PZZ ) )
( Przekladniki[ i ] as TPrzek_PZZ ).SetLBP( LBP );
}}
dV = 0;
// BrakeCyl.Flow(-dV);
Przekladniki[1]->Flow(-dV);
if (((BrakeStatus & b_on) == b_on) && (Przekladniki[1]->P * HBG300 < MaxBP))
dV = PF(BVP, BCP, Nozzles[dTN] * (nastG + 2 * unsigned char(BCP < Podskok)) +
Nozzles[dON] * (1 - nastG)) *
dt * (0.1 + 4.9 * Min0R(0.2, (CVP - 0.05 - VVP) * BVM - BCP));
else
dV = 0;
// BrakeCyl.Flow(-dV);
Przekladniki[1]->Flow(-dV);
BrakeRes->Flow(dV);
{
short i_end = 4;
for (i = 1; i < i_end; ++i)
{
Przekladniki[i]->Update(dt);
if (typeid(Przekladniki[i]) == typeid(TRapid))
{
RapidStatus =
(((BrakeDelayFlag & bdelay_R) == bdelay_R) &&
((abs(Vel) > 70) || ((RapidStatus) && (abs(Vel) > 50)) || (RapidStaly)));
Przekladniki[i]->SetRapidStatus(RapidStatus);
}
else if (typeid(Przekladniki[i]) == typeid(TPrzeciwposlizg))
Przekladniki[i]->SetPoslizg((BrakeStatus & b_asb) == b_asb);
else if (typeid(Przekladniki[i]) == typeid(TPrzekED))
if ((Vel < -15))
Przekladniki[i]->SetP(0);
else
Przekladniki[i]->SetP(MaxBP * 3);
else if (typeid(Przekladniki[i]) == typeid(TPrzekCiagly))
Przekladniki[i]->SetMult(LoadC);
else if (typeid(Przekladniki[i]) == typeid(TPrzek_PZZ))
Przekladniki[i]->SetLBP(LBP);
}
}
// przeplyw testowy miedzypojemnosci
dV = PF(MPP, VVP, BVs(BCP)) + PF(MPP, CVP, CVs(BCP));
if ((MPP - 0.05 > BVP))
dV = dV + PF(MPP - 0.05, BVP, Nozzles[dPT] * nastG + (1 - nastG) * Nozzles[dPO]);
if( MPP>VVP ) dV =dV+PF( MPP, VVP, d2A( 5 ) );
Miedzypoj.Flow( dV*dt*0.15 );
if (MPP > VVP)
dV = dV + PF(MPP, VVP, d2A(5));
Miedzypoj->Flow(dV * dt * 0.15);
// przeplyw ZS <-> PG
temp = CVs(BCP);
dV = PF(CVP, MPP, temp) * dt;
CntrlRes.Flow( +dV );
ValveRes.Flow( -0.02*dV );
CntrlRes->Flow(+dV);
ValveRes->Flow(-0.02 * dV);
dV1 = dV1 + 0.98 * dV;
// przeplyw ZP <-> MPJ
if ((MPP - 0.05 > BVP))
dV =PF( BVP, MPP-0.05, Nozzles[ dPT ]*nastG+( 1-nastG )*Nozzles[ dPO ] )*dt;else dV =0;
BrakeRes.Flow( dV );
dV = PF(BVP, MPP - 0.05, Nozzles[dPT] * nastG + (1 - nastG) * Nozzles[dPO]) * dt;
else
dV = 0;
BrakeRes->Flow(dV);
dV1 = dV1 + dV * 0.98;
ValveRes.Flow( -0.02*dV );
ValveRes->Flow(-0.02 * dV);
// przeplyw PG <-> rozdzielacz
dV = PF(PP, VVP, 0.005) * dt; // 0.01
ValveRes.Flow( -dV );
ValveRes->Flow(-dV);
ValveRes.Act;
BrakeCyl.Act;
BrakeRes.Act;
CntrlRes.Act;
Miedzypoj.Act;
Przekladniki[ 1 ].Act;
Przekladniki[ 2 ].Act;
Przekladniki[ 3 ].Act;
GetPF =dV-dV1;
return result;
ValveRes->Act();
BrakeCyl->Act();
BrakeRes->Act();
CntrlRes->Act();
Miedzypoj->Act();
Przekladniki[1]->Act();
Przekladniki[2]->Act();
Przekladniki[3]->Act();
return dV - dV1;
}
void TNESt3::EStParams(double i_crc) // parametry charakterystyczne dla ESt
{
}
void TNESt3::Init(double PP, double HPP, double LPP, double BP, unsigned char BDF)
{
ValveRes.CreatePress( 1*PP );
BrakeCyl.CreatePress( 1*BP );
BrakeRes.CreatePress( 1*PP );
CntrlRes =TReservoir.Create;
CntrlRes.CreateCap( 15 );
CntrlRes.CreatePress( 1*HPP );
ValveRes->CreatePress(1 * PP);
BrakeCyl->CreatePress(1 * BP);
BrakeRes->CreatePress(1 * PP);
CntrlRes = new TReservoir();
CntrlRes->CreateCap(15);
CntrlRes->CreatePress(1 * HPP);
BrakeStatus = unsigned char(BP > 1) * 1;
Miedzypoj =TReservoir.Create;
Miedzypoj.CreateCap( 5 );
Miedzypoj.CreatePress( PP );
Miedzypoj = new TReservoir();
Miedzypoj->CreateCap(5);
Miedzypoj->CreatePress(PP);
BVM = 1 * 1.0 / (HPP - 0.05 - LPP) * MaxBP;
@@ -310,118 +341,130 @@ void TNESt3::Init(double PP, double HPP, double LPP, double BP, unsigned char B
Zamykajacy = false;
if( !( ( FM is TDisk1 ) || ( FM is TDisk2 ) ) ) //jesli zeliwo to schodz
RapidStaly =false;else
if (!(typeid(FM) == typeid(TDisk1) || typeid(FM) == typeid(TDisk2))) // jesli zeliwo to schodz
RapidStaly = false;
else
RapidStaly = true;
}
double TNESt3::GetCRP()
{ double result;
GetCRP =CntrlRes.P;
// GetCRP:=Przekladniki[1].P;
// GetCRP:=Miedzypoj.P;
return result;
{
return CntrlRes->P();
// return Przekladniki[1].P;
// return Miedzypoj.P;
}
void TNESt3::CheckState(double BCP, double &dV1) // glowny przyrzad rozrzadczy
{ double VVP; double BVP; double CVP; double MPP;
{
double VVP;
double BVP;
double CVP;
double MPP;
BVP =BrakeRes.P; //-> tu ma byc komora rozprezna
VVP =ValveRes.P;
CVP =CntrlRes.P;
MPP =Miedzypoj.P;
BVP = BrakeRes->P(); //-> tu ma byc komora rozprezna
VVP = ValveRes->P();
CVP = CntrlRes->P();
MPP = Miedzypoj->P();
if( ( BCP<0.25 )&&( VVP+0.08>CVP ) ) Przys_blok =false;
if ((BCP < 0.25) && (VVP + 0.08 > CVP))
Przys_blok = false;
// sprawdzanie stanu
// if ((BrakeStatus and 1)=1)and(BCP>0.25)then
if ((VVP + 0.01 + BCP * 1.0 / BVM < CVP - 0.05) && (Przys_blok))
BrakeStatus =( BrakeStatus || 3 ) //hamowanie stopniowe;else if( ( VVP-0.01+( BCP-0.1 )*1.0/BVM>CVP-0.05 ) )
BrakeStatus =( BrakeStatus && 252 ) //luzowanie;else if( ( VVP+BCP*1.0/BVM>CVP-0.05 ) )
BrakeStatus =( BrakeStatus && 253 ) //zatrzymanie napelaniania;else if( ( VVP+( BCP-0.1 )*1.0/BVM<CVP-0.05 )&&( BCP>0.25 ) ) //zatrzymanie luzowania
BrakeStatus =( BrakeStatus || 1 );
BrakeStatus =
(BrakeStatus |
3) // hamowanie stopniowe;else if( ( VVP-0.01+( BCP-0.1 )*1.0/BVM>CVP-0.05 ) )
BrakeStatus = (BrakeStatus & 252) // luzowanie;else if( ( VVP+BCP*1.0/BVM>CVP-0.05 ) )
BrakeStatus =
(BrakeStatus & 253) // zatrzymanie napelaniania;else if( ( VVP+( BCP-0.1
// )*1.0/BVM<CVP-0.05 )&&( BCP>0.25 ) ) //zatrzymanie luzowania
BrakeStatus = (BrakeStatus | 1);
if( ( BrakeStatus && 1 )==0 )
SoundFlag =SoundFlag || sf_CylU;
if ((BrakeStatus & 1) == 0)
SoundFlag = SoundFlag | sf_CylU;
if ((VVP + 0.10 < CVP) && (BCP < 0.25)) // poczatek hamowania
if ((!Przys_blok))
{
ValveRes.CreatePress( 0.1*VVP );
SoundFlag =SoundFlag || sf_Acc;
ValveRes.Act;
ValveRes->CreatePress(0.1 * VVP);
SoundFlag = SoundFlag | sf_Acc;
ValveRes->Act();
Przys_blok = true;
}
if ((BCP > 0.5))
Zamykajacy =true;else if( ( VVP-0.6<MPP ) )
Zamykajacy = true;
else if ((VVP - 0.6 < MPP))
Zamykajacy = false;
}
void TNESt3::CheckReleaser(double dt) // odluzniacz
{
double VVP; double CVP;
double VVP;
double CVP;
VVP =ValveRes.P;
CVP =CntrlRes.P;
VVP = ValveRes->P();
CVP = CntrlRes->P();
// odluzniacz automatyczny
if( ( BrakeStatus && b_rls==b_rls ) )
if ((BrakeStatus & b_rls == b_rls))
{
CntrlRes.Flow( +PF( CVP, 0, 0.02 )*dt );
CntrlRes->Flow(+PF(CVP, 0, 0.02) * dt);
if ((CVP < VVP + 0.3) || (!autom))
BrakeStatus =BrakeStatus && 247;
BrakeStatus = BrakeStatus & 247;
}
}
double TNESt3::CVs(double BP) // napelniacz sterujacego
{ double result; double CVP; double MPP;
{
double CVP;
double MPP;
CVP =CntrlRes.P;
MPP =Miedzypoj.P;
CVP = CntrlRes->P();
MPP = Miedzypoj->P();
// przeplyw ZS <-> PG
if ((MPP < CVP - 0.17))
CVs =0;else
if( ( MPP>CVP-0.08 ) )
CVs =Nozzles[ dSd ];else
CVs =Nozzles[ dSm ];
return result;
return 0;
else if ((MPP > CVP - 0.08))
return Nozzles[dSd];
else
return Nozzles[dSm];
}
double TNESt3::BVs(double BCP) // napelniacz pomocniczego
{ double result; double CVP; double MPP;
{
double CVP;
double MPP;
CVP =CntrlRes.P;
MPP =Miedzypoj.P;
CVP = CntrlRes->P();
MPP = Miedzypoj->P();
// przeplyw ZP <-> rozdzielacz
if ((MPP < CVP - 0.3))
BVs =Nozzles[ dP ];else
if( ( BCP<0.5 ) )
return Nozzles[dP];
else if ((BCP < 0.5))
if ((Zamykajacy))
BVs =Nozzles[ dPm ] //1.25;else
BVs =Nozzles[ dPd ];else
BVs =0;
return result;
return Nozzles[dPm]; // 1.25
else
return Nozzles[dPd];
else
return 0;
}
void TNESt3::PLC(double mass)
{
LoadC =1+unsigned char( mass<LoadM )*( ( TareBP+( MaxBP-TareBP )*( mass-TareM )*1.0/( LoadM-TareM ) )*1.0/MaxBP-1 );
LoadC =
1 +
unsigned char(mass < LoadM) *
((TareBP + (MaxBP - TareBP) * (mass - TareM) * 1.0 / (LoadM - TareM)) * 1.0 / MaxBP -
1);
}
void TNESt3::ForceEmptiness()
{
ValveRes.CreatePress( 0 );
ValveRes->CreatePress(0);
BrakeRes.CreatePress(0);
Miedzypoj.CreatePress(0);
CntrlRes.CreatePress(0);
@@ -434,7 +477,6 @@ void TNESt3::ForceEmptiness()
CntrlRes.Act();
}
void TNESt3::SetLP(double TM, double LM, double TBP)
{
TareM = TM;
@@ -442,14 +484,11 @@ void TNESt3::SetLP(double TM, double LM, double TBP)
TareBP = TBP;
}
void TNESt3::SetLBP(double P)
{
LBP = P;
}
void TNESt3::SetSize(int size, std::string params) // ustawianie dysz (rozmiaru ZR)
{
static double /*?*/ const dNO1l = 1.250;
@@ -459,39 +498,47 @@ void TNESt3::SetSize(int size, std::string params) //ustawianie dysz (rozmi
int i;
if( Pos( "ESt3", params )>0 )
if (params.find("ESt3") != std::string::npos)
{
Podskok = 0.7;
Przekladniki[ 1 ] =TRura.Create;
Przekladniki[ 3 ] =TRura.Create;
Przekladniki[1] = new TRura();
Przekladniki[3] = new TRura();
}
else
{
Podskok = -1;
Przekladniki[ 1 ] =TRapid.Create;
if( Pos( "-s216", params )>0 )
( Przekladniki[ 1 ] as TRapid ).SetRapidParams( 2, 16 );else
( Przekladniki[ 1 ] as TRapid ).SetRapidParams( 2, 0 );
Przekladniki[ 3 ] =TPrzeciwposlizg.Create;
if( Pos( "-ED", params )>0 )
Przekladniki[1] = new TRapid();
if (params.find("-s216") != std::string::npos)
Przekladniki[1]->SetRapidParams(2, 16);
else
Przekladniki[1]->SetRapidParams(2, 0);
Przekladniki[3] = new TPrzeciwposlizg();
if (params.find("-ED") != std::string::npos)
{
Przekladniki[ 3 ].Free( );
( Przekladniki[ 1 ] as TRapid ).SetRapidParams( 2, 18 );
Przekladniki[ 3 ] =TPrzekED.Create;
delete Przekladniki[3]; //tutaj ma byæ destruktor
Przekladniki[1]->SetRapidParams(2, 18);
Przekladniki[3] = new TPrzekED();
}
}
if( Pos( "AL2", params )>0 )
Przekladniki[ 2 ] =TPrzekCiagly.Create;else
if( Pos( "PZZ", params )>0 )
Przekladniki[ 2 ] =TPrzek_PZZ.Create;else
Przekladniki[ 2 ] =TRura.Create;
if (params.find("AL2") != std::string::npos)
Przekladniki[2] = new TPrzekCiagly();
else if (params.find("PZZ") != std::string::npos)
Przekladniki[2] = new TPrzek_PZZ();
else
Przekladniki[2] = new TRura();
if( ( Pos( "3d", params )+Pos( "4d", params )>0 ) ) autom =false;else autom =true;
if( ( Pos( "HBG300", params )>0 ) ) HBG300 =1;else HBG300 =0;
if ((params.find("3d") + params.find("4d") != std::string::npos))
autom = false;
else
autom = true;
if ((params.find("HBG300") != std::string::npos))
HBG300 = 1;
else
HBG300 = 0;
switch( size ) {
switch (size)
{
case 16:
{ // dON,dOO,dTN,dTO,dP,dS
Nozzles[dON] = 5.0; // 5.0;
@@ -604,22 +651,25 @@ void TNESt3::SetSize(int size, std::string params) //ustawianie dysz (rozmi
Nozzles[dSm] = 0.9;
// przeliczanie z mm^2 na l/m
{ long i_end = dMAX+1 ; for( i = 0 ; i < i_end ; ++i )
{
for (i = 0; i < dMAX; ++i)
{
Nozzles[i] = d2A(Nozzles[i]); //(/1000^2*pi/4*1000)
}}
{ long i_end = 4 ; for( i = 1 ; i < i_end ; ++i )
{
Przekladniki[ i ].BrakeRes =&BrakeRes;
Przekladniki[ i ].CreateCap( i );
Przekladniki[ i ].CreatePress( BrakeCyl.P );
if( i<3 )
Przekladniki[ i ].Next =&Przekladniki[ i+1 ];else
Przekladniki[ i ].Next =&BrakeCyl;
}}
}
}
{
for (i = 1; i < 4; ++i)
{
Przekladniki[i]->BrakeRes = &BrakeRes;
Przekladniki[i]->CreateCap(i);
Przekladniki[i]->CreatePress(BrakeCyl->P());
if (i < 3)
Przekladniki[i]->Next = &Przekladniki[i + 1];
else
Przekladniki[i]->Next = &BrakeCyl;
}
}
}
// END

View File

@@ -23,6 +23,9 @@ http://mozilla.org/MPL/2.0/.
#include <mctools.hpp> // Pascal unit
#include <SysInit.hpp> // Pascal unit
#include <System.hpp> // Pascal unit
#include <string>
using namespace Hamulce;
/*
(C) youBy
@@ -48,60 +51,53 @@ Co brakuje:
- PZZ dla dodatkowego
*/
static double/*?*/ const dMAX = 10; //dysze
static double/*?*/ const dON = 0; //osobowy napelnianie (+ZP)
static double/*?*/ const dOO = 1; //osobowy oproznianie
static double/*?*/ const dTN = 2; //towarowy napelnianie (+ZP)
static double/*?*/ const dTO = 3; //towarowy oproznianie
static double/*?*/ const dP = 4; //zbiornik pomocniczy
static double/*?*/ const dSd = 5; //zbiornik sterujacy
static double/*?*/ const dSm = 6; //zbiornik sterujacy
static double/*?*/ const dPd = 7; //duzy przelot zamykajcego
static double/*?*/ const dPm = 8; //maly przelot zamykajacego
static double/*?*/ const dPO = 9; //zasilanie pomocniczego O
static double/*?*/ const dPT = 10; //zasilanie pomocniczego T
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 double/*?*/ const p_none = 0;
static double/*?*/ const p_rapid = 1;
static double/*?*/ const p_pp = 2;
static double/*?*/ const p_al2 = 3;
static double/*?*/ const p_ppz = 4;
static double/*?*/ const P_ed = 5;
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;
struct/*class*/ TPrzekladnik: public TReservoir //przekladnik (powtarzacz)
class TPrzekladnik : public TReservoir // przekladnik (powtarzacz)
{
private:
public:
PReservoir BrakeRes;
PReservoir Next;
TReservoir *BrakeRes;
TReservoir *Next;
virtual void Update(double dt);
void SetPoslizg(bool flag) {};
void SetP(double P) {};
void SetMult(double m) {};
void SetLBP(double P) {};
void SetRapidParams(double mult, double size) {};
void SetRapidStatus(bool rs) {};
};
struct/*class*/ TRura: public TPrzekladnik //nieprzekladnik, rura laczaca
class TRura : public TPrzekladnik // nieprzekladnik, rura laczaca
{
private:
public:
double P()/*override*/;
void Update(double dt)/*override*/;
virtual __fastcall double P(void) /*override*/;
virtual void Update(double dt) /*override*/;
};
struct/*class*/ TPrzeciwposlizg: public TRura //przy napelnianiu - rura, przy poslizgu - upust
class TPrzeciwposlizg : public TRura // przy napelnianiu - rura, przy poslizgu - upust
{
private:
@@ -110,30 +106,25 @@ private:
public:
void SetPoslizg(bool flag);
void Update(double dt) /*override*/;
};
struct/*class*/ TRapid: public TPrzekladnik //przekladnik dwustopniowy
class TRapid : public TPrzekladnik // przekladnik dwustopniowy
{
private:
bool RapidStatus; // status rapidu
double RapidMult; // przelozenie (w dol)
// Komora2: real;
double DN; double DL; //srednice dysz napelniania i luzowania
double DN;
double DL; // srednice dysz napelniania i luzowania
public:
void SetRapidParams(double mult, double size);
void SetRapidStatus(bool rs);
void Update(double dt) /*override*/;
};
struct/*class*/ TPrzekCiagly: public TPrzekladnik //AL2
class TPrzekCiagly : public TPrzekladnik // AL2
{
private:
@@ -142,12 +133,9 @@ private:
public:
void SetMult(double m);
void Update(double dt) /*override*/;
};
struct/*class*/ TPrzek_PZZ: public TPrzekladnik //podwojny zawor zwrotny
class TPrzek_PZZ : public TPrzekladnik // podwojny zawor zwrotny
{
private:
@@ -156,23 +144,16 @@ private:
public:
void SetLBP(double P);
void Update(double dt) /*override*/;
};
struct/*class*/ TPrzekZalamany: public TPrzekladnik //Knicksventil
class TPrzekZalamany : public TPrzekladnik // Knicksventil
{
private:
public:
};
struct/*class*/ TPrzekED: public TRura //przy napelnianiu - rura, przy hamowaniu - upust
class TPrzekED : public TRura // przy napelnianiu - rura, przy hamowaniu - upust
{
private:
@@ -181,28 +162,26 @@ private:
public:
void SetP(double P);
void Update(double dt) /*override*/;
};
struct/*class*/ TNESt3: public TBrake
class TNESt3 : public TBrake
{
private:
double Nozzles[dMAX+1]; //dysze
TReservoir CntrlRes; //zbiornik sterujšcy
double Nozzles[dMAX]; // dysze
TReservoir *CntrlRes; // zbiornik sterujšcy
double BVM; // przelozenie PG-CH
// ValveFlag: byte; //polozenie roznych zaworkow
bool Zamykajacy; // pamiec zaworka zamykajacego
// Przys_wlot: boolean; //wlot do komory przyspieszacza
bool Przys_blok; // blokada przyspieszacza
TReservoir Miedzypoj; //pojemnosc posrednia (urojona) do napelniania ZP i ZS
TPrzekladnik Przekladniki[ /*?*//*1..3*/ (3)-(1)+1 ];
TReservoir *Miedzypoj; // pojemnosc posrednia (urojona) do napelniania ZP i ZS
TPrzekladnik *Przekladniki[4];
bool RapidStatus;
bool RapidStaly;
double LoadC;
double TareM; double LoadM; //masa proznego i pelnego
double TareM;
double LoadM; // masa proznego i pelnego
double TareBP; // cisnienie dla proznego
double HBG300; // zawor ograniczajacy cisnienie
double Podskok; // podskok preznosci poczatkowej
@@ -211,10 +190,11 @@ private:
double LBP; // cisnienie hamulca pomocniczego
public:
double GetPF(double PP, double dt, double Vel)/*override*/; //przeplyw miedzy komora wstepna i PG
virtual double __fastcall 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, unsigned char BDF)/*override*/;
double GetCRP()/*override*/;
virtual void __fastcall Init(double PP, double HPP, double LPP, double BP, unsigned char BDF) /*override*/;
virtual double __fastcall GetCRP() /*override*/;
void CheckState(double BCP, double &dV1); // glowny przyrzad rozrzadczy
void CheckReleaser(double dt); // odluzniacz
double CVs(double BP); // napelniacz sterujacego
@@ -222,15 +202,11 @@ public:
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
void ForceEmptiness()/*override*/; //wymuszenie bycia pustym
virtual void __fastcall ForceEmptiness() /*override*/; // wymuszenie bycia pustym
void SetLBP(double P); // cisnienie z hamulca pomocniczego
};
double d2A(double d);
extern double d2A(double d);
#endif // INCLUDED_OERLIKON_EST_H
// END

View File

@@ -10,7 +10,7 @@
#pragma delphiheader begin
#pragma option push -w-
#pragma option push -Vx
#include <Oerlikon_ESt.hpp> // Pascal unit
#include <Oerlikon_ESt.h> // Pascal unit
#include <hamulce.hpp> // Pascal unit
#include <SysUtils.hpp> // Pascal unit
#include <mctools.hpp> // Pascal unit