mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-23 09:49:19 +02:00
control pressure switch, ground relay state exposed to uart interface, independent brake ai logic tweaks
This commit is contained in:
66
Driver.cpp
66
Driver.cpp
@@ -3092,6 +3092,16 @@ bool TController::DecBrake()
|
||||
return OK;
|
||||
};
|
||||
|
||||
bool TController::ZeroLocalBrake() {
|
||||
|
||||
if( mvOccupied->UniCtrlIntegratedLocalBrakeCtrl ) {
|
||||
return DecBrakeEIM();
|
||||
}
|
||||
else {
|
||||
return mvOccupied->DecLocalBrakeLevel( 2 );
|
||||
}
|
||||
}
|
||||
|
||||
bool TController::DecBrakeEIM()
|
||||
{ // zmniejszenie siły hamowania
|
||||
bool OK = false;
|
||||
@@ -3170,9 +3180,10 @@ bool TController::IncSpeed()
|
||||
if (iOverheadZero) // jazda bezprądowa z poziomu toru ustawia bity
|
||||
return false; // to nici z ruszania
|
||||
}
|
||||
if (!mvControlling->FuseFlag) //&&mvControlling->StLinFlag) //yBARC
|
||||
if ((mvControlling->IsMainCtrlNoPowerPos()) ||
|
||||
(mvControlling->StLinFlag)) // youBy polecił dodać 2012-09-08 v367
|
||||
if ((!mvControlling->FuseFlag)
|
||||
&&(!mvControlling->ControlPressureSwitch)) {
|
||||
if ((mvControlling->IsMainCtrlNoPowerPos())
|
||||
|| (mvControlling->StLinFlag)) { // youBy polecił dodać 2012-09-08 v367
|
||||
// na pozycji 0 przejdzie, a na pozostałych będzie czekać, aż się załączą liniowe (zgaśnie DelayCtrlFlag)
|
||||
if (Ready || (iDrivigFlags & movePress)) {
|
||||
// use series mode:
|
||||
@@ -3267,10 +3278,11 @@ bool TController::IncSpeed()
|
||||
OK = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
mvControlling->AutoRelayCheck(); // sprawdzenie logiki sterowania
|
||||
break;
|
||||
case TEngineType::Dumb:
|
||||
case TEngineType::DieselElectric:
|
||||
if (!mvControlling->FuseFlag)
|
||||
if (Ready || (iDrivigFlags & movePress)) //{(BrakePress<=0.01*MaxBrakePress)}
|
||||
{
|
||||
@@ -3281,6 +3293,23 @@ bool TController::IncSpeed()
|
||||
OK = mvControlling->IncScndCtrl(1);
|
||||
}
|
||||
break;
|
||||
case TEngineType::DieselElectric:
|
||||
if ((!mvControlling->FuseFlag)
|
||||
&&(!mvControlling->ControlPressureSwitch)) {
|
||||
if ((mvControlling->IsMainCtrlNoPowerPos()) ||
|
||||
(mvControlling->StLinFlag)) { // youBy polecił dodać 2012-09-08 v367
|
||||
// na pozycji 0 przejdzie, a na pozostałych będzie czekać, aż się załączą liniowe (zgaśnie DelayCtrlFlag)
|
||||
if (Ready || (iDrivigFlags & movePress)) //{(BrakePress<=0.01*MaxBrakePress)}
|
||||
{
|
||||
OK = IncSpeedEIM();
|
||||
if( !OK )
|
||||
OK = mvControlling->IncMainCtrl(1);
|
||||
if (!OK)
|
||||
OK = mvControlling->IncScndCtrl(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case TEngineType::ElectricInductionMotor:
|
||||
if (!mvControlling->FuseFlag)
|
||||
if (Ready || (iDrivigFlags & movePress) || (mvOccupied->ShuntMode)) //{(BrakePress<=0.01*MaxBrakePress)}
|
||||
@@ -3619,7 +3648,14 @@ void TController::SpeedSet()
|
||||
}
|
||||
break;
|
||||
case TEngineType::Dumb:
|
||||
break;
|
||||
case TEngineType::DieselElectric:
|
||||
if( ( false == mvControlling->StLinFlag )
|
||||
&& ( mvControlling->MainCtrlPowerPos() > 1 ) ) {
|
||||
// styczniki liniowe rozłączone yBARC
|
||||
ZeroSpeed();
|
||||
}
|
||||
break;
|
||||
case TEngineType::ElectricInductionMotor:
|
||||
break;
|
||||
case TEngineType::DieselEngine:
|
||||
@@ -3726,6 +3762,7 @@ void TController::SetTimeControllers()
|
||||
//2. Check the type of Secondary Brake Handle
|
||||
|
||||
//3. Check the type od EIMCtrlType
|
||||
/*
|
||||
if (mvOccupied->EIMCtrlType > 0)
|
||||
{
|
||||
if (mvOccupied->EIMCtrlType == 1) //traxx
|
||||
@@ -3737,6 +3774,12 @@ void TController::SetTimeControllers()
|
||||
if (mvOccupied->LocalBrakePosA > 0.95) mvOccupied->MainCtrlPos = 1;
|
||||
}
|
||||
}
|
||||
*/
|
||||
if( ( mvOccupied->UniCtrlIntegratedLocalBrakeCtrl )
|
||||
&& ( mvOccupied->LocalBrakePosA > 0.95 ) ) {
|
||||
while( IncBrakeEIM() ) { ; }
|
||||
}
|
||||
|
||||
//4. Check Speed Control System
|
||||
if (mvOccupied->EngineType == TEngineType::ElectricInductionMotor && mvOccupied->ScndCtrlPosNo > 1 && mvOccupied->SpeedCtrlTypeTime)
|
||||
{
|
||||
@@ -5492,9 +5535,7 @@ TController::UpdateSituation(double dt) {
|
||||
if( iVehicleCount >= 0 ) {
|
||||
// zmieni się po odczepieniu
|
||||
WriteLog( mvOccupied->Name + " dociskanie..." );
|
||||
while( mvOccupied->DecLocalBrakeLevel( 1 ) ) { // dociśnij sklad
|
||||
;
|
||||
}
|
||||
ZeroLocalBrake();
|
||||
IncSpeed();
|
||||
}
|
||||
WriteLog(mvOccupied->Name + " odczepianie w kierunku " + std::to_string(mvOccupied->DirAbsolute));
|
||||
@@ -6233,6 +6274,15 @@ TController::UpdateSituation(double dt) {
|
||||
if( ( AccDesired > -0.03 )
|
||||
&& ( false == mvOccupied->Hamulec->Releaser() ) ) {
|
||||
if( mvOccupied->PipePress < 3.0 ) {
|
||||
ZeroSpeed(); // some vehicles may require master controller in neutral position
|
||||
// some vehicles require brake handle to be moved to specific position
|
||||
if( mvOccupied->HandleUnlock != -3 ) {
|
||||
while( ( BrakeCtrlPosition >= mvOccupied->HandleUnlock )
|
||||
&& ( BrakeLevelAdd( -1 ) ) ) {
|
||||
// all work is done in the header
|
||||
;
|
||||
}
|
||||
}
|
||||
mvOccupied->BrakeReleaser( 1 );
|
||||
}
|
||||
if( ( mvOccupied->BrakePress > 0.4 )
|
||||
@@ -6492,7 +6542,7 @@ TController::UpdateSituation(double dt) {
|
||||
if( mvOccupied->LocalBrake != TLocalBrake::ManualBrake ) {
|
||||
// do it only if the vehicle actually has the independent brake
|
||||
if( mvOccupied->BrakeCtrlPos == mvOccupied->Handle->GetPos( bh_RP ) ) {
|
||||
if( mvOccupied->LocalBrakePosA == 0.0 ) {
|
||||
if( mvOccupied->LocalBrakePosA < 1.0 ) {
|
||||
// dodatkowy na pozycję 1
|
||||
mvOccupied->IncLocalBrakeLevel( LocalBrakePosNo );
|
||||
}
|
||||
|
||||
1
Driver.h
1
Driver.h
@@ -227,6 +227,7 @@ private:
|
||||
void SetDriverPsyche();
|
||||
bool IncBrake();
|
||||
bool DecBrake();
|
||||
bool ZeroLocalBrake();
|
||||
bool IncSpeed();
|
||||
bool DecSpeed(bool force = false);
|
||||
void ZeroSpeed( bool const Enforce = false );
|
||||
|
||||
@@ -3079,9 +3079,10 @@ bool TDynamicObject::Update(double dt, double dt1)
|
||||
MEDLogTime = 0;
|
||||
}
|
||||
auto FzadED { 0.0 };
|
||||
if( ( MoverParameters->EpFuse && (MoverParameters->BrakeHandle != TBrakeHandle::MHZ_EN57))
|
||||
|| ( ( MoverParameters->BrakeHandle == TBrakeHandle::MHZ_EN57 )
|
||||
&& ( MoverParameters->BrakeOpModeFlag & bom_MED ) ) ) {
|
||||
if( ( LBR > MoverParameters->MED_MinBrakeReqED )
|
||||
&& ( MoverParameters->BrakeHandle == TBrakeHandle::MHZ_EN57 ?
|
||||
( ( MoverParameters->BrakeOpModeFlag & bom_MED ) != 0 ) :
|
||||
MoverParameters->EpFuse ) ) {
|
||||
FzadED = std::min( Fzad, FmaxED );
|
||||
}
|
||||
if (MoverParameters->EIMCtrlType == 2 && MoverParameters->MainCtrlPos < 2 && MoverParameters->eimic > -0.999)
|
||||
|
||||
@@ -86,7 +86,7 @@ struct global_settings {
|
||||
std::string Period{}; // time of the day, based on sun position
|
||||
bool FullPhysics{ true }; // full calculations performed for each simulation step
|
||||
bool bnewAirCouplers{ true };
|
||||
float fMoveLight{ -1.f }; // numer dnia w roku albo -1
|
||||
float fMoveLight{ 0.f }; // numer dnia w roku albo -1
|
||||
bool FakeLight{ false }; // toggle between fixed and dynamic daylight
|
||||
double fTimeSpeed{ 1.0 }; // przyspieszenie czasu, zmienna do testów
|
||||
double fLatitudeDeg{ 52.0 }; // szerokość geograficzna
|
||||
|
||||
@@ -339,8 +339,6 @@ enum TCompressorList // lista parametrów w programatorze sprężarek
|
||||
cl_MaxFactor = 3 // mnożnik progu wyłącznika ciśnieniowego
|
||||
};
|
||||
|
||||
/*ogolne*/
|
||||
/*lokacja*/
|
||||
struct TLocation
|
||||
{
|
||||
double X;
|
||||
@@ -1255,6 +1253,7 @@ public:
|
||||
bool MED_EPVC = 0; // czy korekcja sily hamowania EP, gdy nie ma dostepnego ED
|
||||
double MED_EPVC_Time = 7; // czas korekcji sily hamowania EP, gdy nie ma dostepnego ED
|
||||
bool MED_Ncor = 0; // czy korekcja sily hamowania z uwzglednieniem nacisku
|
||||
double MED_MinBrakeReqED = 0;
|
||||
|
||||
int DCEMUED_CC { 0 }; //na którym sprzęgu sprawdzać działanie ED
|
||||
double DCEMUED_EP_max_Vel{ 0.0 }; //maksymalna prędkość, przy której działa EP przy włączonym ED w jednostce (dla tocznych)
|
||||
@@ -1425,7 +1424,8 @@ public:
|
||||
double MainsInitTime{ 0.0 }; // config, initialization time (in seconds) of the main circuit after it receives power, before it can be closed
|
||||
double MainsInitTimeCountdown{ 0.0 }; // current state of main circuit initialization, remaining time (in seconds) until it's ready
|
||||
bool LineBreakerClosesAtNoPowerPosOnly{ false };
|
||||
bool HasPressureSwitch{ true };
|
||||
bool ControlPressureSwitch{ false }; // activates if the main pipe and/or brake cylinder pressure aren't within operational levels
|
||||
bool HasControlPressureSwitch{ true };
|
||||
int MainCtrlPos = 0; /*polozenie glownego nastawnika*/
|
||||
int ScndCtrlPos = 0; /*polozenie dodatkowego nastawnika*/
|
||||
int LightsPos = 0; /*polozenie przelacznika wielopozycyjnego swiatel*/
|
||||
|
||||
@@ -3641,7 +3641,15 @@ bool TMoverParameters::AntiSlippingBrake(void)
|
||||
bool TMoverParameters::BrakeReleaser(int state)
|
||||
{
|
||||
bool OK = true; //false tylko jeśli nie uda się wysłać, GF 20161124
|
||||
if( state != 0 ) {
|
||||
// additional limitations imposed by pressure switch
|
||||
if( ( false == ControlPressureSwitch ) || ( true == IsMainCtrlNoPowerPos() ) ) {
|
||||
Hamulec->Releaser( state );
|
||||
}
|
||||
}
|
||||
else {
|
||||
Hamulec->Releaser( state );
|
||||
}
|
||||
if (CabActive != 0) // rekurencyjne wysłanie do następnego
|
||||
OK = SendCtrlToNext("BrakeReleaser", state, CabActive);
|
||||
return OK;
|
||||
@@ -3671,9 +3679,7 @@ bool TMoverParameters::UniversalBrakeButton(int button, int state)
|
||||
if ( TestFlag ( UniversalBrakeButtonFlag[0] & UniversalBrakeButtonFlag[1] & UniversalBrakeButtonFlag[2],
|
||||
TUniversalBrake::ub_Release ) )
|
||||
{
|
||||
Hamulec->Releaser( int ( TestFlag ( flag, TUniversalBrake::ub_Release ) ));
|
||||
if (CabActive != 0) // rekurencyjne wysłanie do następnego
|
||||
OK = SendCtrlToNext("BrakeReleaser", state, CabActive);
|
||||
BrakeReleaser( TestFlag( flag, TUniversalBrake::ub_Release ) ? 1 : 0 );
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
@@ -5003,7 +5009,7 @@ double TMoverParameters::TractionForce( double dt ) {
|
||||
if (EIMCtrlType > 0) //sterowanie cyfrowe
|
||||
tmp = (DElist[0].RPM + ((DElist[MainCtrlPosNo].RPM - DElist[0].RPM) * std::max(0.0,eimic_real))) / 60.0;
|
||||
else
|
||||
tmp = DElist[ MainCtrlPos ].RPM / 60.0;
|
||||
tmp = DElist[ ( ControlPressureSwitch ? MainCtrlNoPowerPos() : MainCtrlPos ) ].RPM / 60.0;
|
||||
|
||||
if( ( true == HeatingAllow )
|
||||
&& ( HeatingPower > 0 )
|
||||
@@ -6629,13 +6635,12 @@ bool TMoverParameters::AutoRelayCheck(void)
|
||||
bool TMoverParameters::MotorConnectorsCheck() {
|
||||
|
||||
// hunter-111211: wylacznik cisnieniowy
|
||||
auto const pressureswitch {
|
||||
( TrainType != dt_EZT )
|
||||
&& ( HasPressureSwitch )
|
||||
ControlPressureSwitch = (
|
||||
( HasControlPressureSwitch )
|
||||
&& ( ( BrakePress > 2.0 )
|
||||
|| ( PipePress < 3.6 ) ) };
|
||||
|| ( PipePress < 3.6 ) ) );
|
||||
|
||||
if( pressureswitch ) { return false; }
|
||||
if( true == ControlPressureSwitch ) { return false; }
|
||||
|
||||
auto const connectorsoff {
|
||||
( false == Mains )
|
||||
@@ -9985,7 +9990,7 @@ void TMoverParameters::LoadFIZ_Blending(std::string const &line) {
|
||||
extract_value(MED_amax, "MED_amax", line, "9.81");
|
||||
extract_value(MED_EPVC, "MED_EPVC", line, "");
|
||||
extract_value(MED_Ncor, "MED_Ncor", line, "");
|
||||
|
||||
extract_value(MED_MinBrakeReqED, "MED_MinBrakeReqED", line, "");
|
||||
}
|
||||
|
||||
void TMoverParameters::LoadFIZ_DCEMUED(std::string const &line) {
|
||||
@@ -10324,7 +10329,7 @@ void TMoverParameters::LoadFIZ_Engine( std::string const &Input ) {
|
||||
extract_value( MotorBlowers[ end::front ].speed, "MotorBlowersSpeed", Input, "" );
|
||||
MotorBlowers[ end::rear ] = MotorBlowers[ end::front ];
|
||||
// pressure switch
|
||||
extract_value( HasPressureSwitch, "PressureSwitch", Input, "" );
|
||||
extract_value( HasControlPressureSwitch, "PressureSwitch", Input, ( TrainType != dt_EZT ? "yes" : "no" ) );
|
||||
}
|
||||
|
||||
void TMoverParameters::LoadFIZ_Switches( std::string const &Input ) {
|
||||
|
||||
19
Train.cpp
19
Train.cpp
@@ -685,6 +685,7 @@ TTrain::get_state() const {
|
||||
btLampkaRadioStop.GetValue(),
|
||||
btLampkaOpory.GetValue(),
|
||||
btLampkaWylSzybki.GetValue(),
|
||||
btLampkaPrzekRozn.GetValue(),
|
||||
btLampkaNadmSil.GetValue(),
|
||||
btLampkaStyczn.GetValue(),
|
||||
btLampkaPoslizg.GetValue(),
|
||||
@@ -2402,10 +2403,13 @@ void TTrain::change_pantograph_selection( int const Change ) {
|
||||
|
||||
void TTrain::OnCommand_pantographcompressorvalvetoggle( TTrain *Train, command_data const &Command ) {
|
||||
|
||||
if( ( Train->ggPantCompressorValve.SubModel == nullptr )
|
||||
&& ( Train->mvControlled->TrainType == dt_EZT ?
|
||||
( Train->mvControlled != Train->mvOccupied ) :
|
||||
( Train->iCabn != 0 ) ) ) {
|
||||
auto const valveispresent {
|
||||
( Train->ggPantCompressorValve.SubModel != nullptr )
|
||||
|| ( ( Train->iCabn == 0 )
|
||||
&& ( Train->mvControlled == Train->mvOccupied ) ) };
|
||||
|
||||
if( false == valveispresent )
|
||||
{
|
||||
// tylko w maszynowym, unless actual device is present
|
||||
return;
|
||||
}
|
||||
@@ -6424,12 +6428,12 @@ bool TTrain::Update( double const Deltatime )
|
||||
|| ( mvControlled->MainCtrlActualPos == 0 ) ); // do EU04
|
||||
|
||||
btLampkaStyczn.Turn(
|
||||
( ( mvControlled->StLinFlag ) || ( mvControlled->BrakePress > 2.0 ) || ( mvControlled->PipePress < 3.6 ) ) ?
|
||||
( ( mvControlled->StLinFlag ) || ( mvControlled->ControlPressureSwitch ) ) ?
|
||||
false :
|
||||
( mvControlled->BrakePress < 1.0 ) ); // mozna prowadzic rozruch
|
||||
|
||||
btLampkaPrzekRozn.Turn(
|
||||
( ( mvControlled->GroundRelay ) || ( mvControlled->BrakePress > 2.0 ) || ( mvControlled->PipePress < 3.6 ) ) ?
|
||||
( ( mvControlled->GroundRelay ) || ( mvControlled->ControlPressureSwitch ) ) ?
|
||||
false :
|
||||
( mvControlled->BrakePress < 1.0 ) ); // relay is off and needs a reset
|
||||
|
||||
@@ -6656,8 +6660,7 @@ bool TTrain::Update( double const Deltatime )
|
||||
|| ( mover->MainCtrlActualPos == 0 ) ); // do EU04
|
||||
|
||||
if( ( mover->StLinFlag )
|
||||
|| ( mover->BrakePress > 2.0 )
|
||||
|| ( mover->PipePress < 3.6 ) ) {
|
||||
|| ( mover->ControlPressureSwitch ) ) {
|
||||
btLampkaStycznB.Turn( false );
|
||||
}
|
||||
else if( mover->BrakePress < 1.0 ) {
|
||||
|
||||
1
Train.h
1
Train.h
@@ -84,6 +84,7 @@ class TTrain {
|
||||
std::uint8_t radio_stop;
|
||||
std::uint8_t motor_resistors;
|
||||
std::uint8_t line_breaker;
|
||||
std::uint8_t ground_relay;
|
||||
std::uint8_t motor_overload;
|
||||
std::uint8_t motor_connectors;
|
||||
std::uint8_t wheelslip;
|
||||
|
||||
@@ -663,8 +663,6 @@ debug_panel::update_section_vehicle( std::vector<text_line> &Output ) {
|
||||
locale::strings[ locale::string::debug_vehicle_devicespower ].c_str(),
|
||||
// devices
|
||||
( mover.Battery ? 'B' : '.' ),
|
||||
( mover.Mains ? 'M' : '.' ),
|
||||
( mover.FuseFlag ? '!' : '.' ),
|
||||
( mover.PantsValve.is_active ? '+' : '.' ),
|
||||
( mover.Pantographs[ end::rear ].valve.is_active ? 'O' : ( mover.Pantographs[ end::rear ].valve.is_enabled ? 'o' : '.' ) ),
|
||||
( mover.Pantographs[ end::front ].valve.is_active ? 'P' : ( mover.Pantographs[ end::front ].valve.is_enabled ? 'p' : '.' ) ),
|
||||
@@ -673,10 +671,13 @@ debug_panel::update_section_vehicle( std::vector<text_line> &Output ) {
|
||||
( true == mover.WaterHeater.is_damaged ? '!' : ( mover.WaterHeater.is_active ? 'H' : ( false == mover.WaterHeater.breaker ? '-' : ( mover.WaterHeater.is_enabled ? 'h' : '.' ) ) ) ),
|
||||
( mover.FuelPump.is_active ? 'F' : ( mover.FuelPump.is_enabled ? 'f' : '.' ) ),
|
||||
( mover.OilPump.is_active ? 'O' : ( mover.OilPump.is_enabled ? 'o' : '.' ) ),
|
||||
( mover.Mains ? 'M' : '.' ),
|
||||
( mover.FuseFlag ? '!' : '.' ),
|
||||
( false == mover.ConverterAllowLocal ? '-' : ( mover.ConverterAllow ? ( mover.ConverterFlag ? 'X' : 'x' ) : '.' ) ),
|
||||
( mover.ConvOvldFlag ? '!' : '.' ),
|
||||
( mover.CompressorFlag ? 'C' : ( false == mover.CompressorAllowLocal ? '-' : ( ( mover.CompressorAllow || mover.CompressorStart == start_t::automatic ) ? 'c' : '.' ) ) ),
|
||||
( mover.CompressorGovernorLock ? '!' : '.' ),
|
||||
( mover.StLinSwitchOff ? '-' : ( mover.ControlPressureSwitch ? '!' : ( mover.StLinFlag ? '+' : '.' ) ) ),
|
||||
( mover.Heating ? 'H' : ( mover.HeatingAllow ? 'h' : '.' ) ),
|
||||
std::string( isplayervehicle ? locale::strings[ locale::string::debug_vehicle_radio ] + ( mover.Radio ? std::to_string( m_input.train->RadioChannel() ) : "-" ) : "" ).c_str(),
|
||||
std::string( isdieselenginepowered ? locale::strings[ locale::string::debug_vehicle_oilpressure ] + to_string( mover.OilPump.pressure, 2 ) : "" ).c_str(),
|
||||
|
||||
@@ -70,7 +70,7 @@ init() {
|
||||
"Name: %s%s\nLoad: %.0f %s\nStatus: %s%s\nCouplers:\n front: %s\n rear: %s",
|
||||
", owned by: ",
|
||||
"none",
|
||||
"Devices: %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%s%s\nPower transfers: %.0f@%.0f%s%s[%.0f]%s%s%.0f@%.0f",
|
||||
"Devices: %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%s%s\nPower transfers: %.0f@%.0f%s%s[%.0f]%s%s%.0f@%.0f",
|
||||
" radio: ",
|
||||
" oil pressure: ",
|
||||
"Controllers:\n master: %d(%d), secondary: %s\nEngine output: %.1f, current: %.0f\nRevolutions:\n engine: %.0f, motors: %.0f\n engine fans: %.0f, motor fans: %.0f+%.0f, cooling fans: %.0f+%.0f",
|
||||
@@ -271,7 +271,7 @@ init() {
|
||||
"Nazwa: %s%s\nLadunek: %.0f %s\nStatus: %s%s\nSprzegi:\n przedni: %s\n tylny: %s",
|
||||
", wlasciciel: ",
|
||||
"wolny",
|
||||
"Urzadzenia: %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%s%s\nTransfer pradow: %.0f@%.0f%s%s[%.0f]%s%s%.0f@%.0f",
|
||||
"Urzadzenia: %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%s%s\nTransfer pradow: %.0f@%.0f%s%s[%.0f]%s%s%.0f@%.0f",
|
||||
" radio: ",
|
||||
" cisn.oleju: ",
|
||||
"Nastawniki:\n glowny: %d(%d), dodatkowy: %s\nMoc silnika: %.1f, prad silnika: %.0f\nObroty:\n silnik: %.0f, motory: %.0f\n went.silnika: %.0f, went.motorow: %.0f+%.0f, went.chlodnicy: %.0f+%.0f",
|
||||
|
||||
Reference in New Issue
Block a user