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

View File

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

View File

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

View File

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

View File

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