mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-18 22:39:18 +02:00
Merge branch 'tmj-dev' into milek-dev
This commit is contained in:
124
Driver.cpp
124
Driver.cpp
@@ -814,8 +814,10 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
{
|
||||
// porównuje do następnej stacji, więc trzeba przewinąć do poprzedniej
|
||||
// nastepnie ustawić następną na aktualną tak żeby prawidłowo ją obsłużył w następnym kroku
|
||||
TrainParams->RewindTimeTable(sSpeedTable[i].evEvent->CommandGet());
|
||||
asNextStop = TrainParams->NextStop();
|
||||
if( true == TrainParams->RewindTimeTable( sSpeedTable[ i ].evEvent->CommandGet() ) ) {
|
||||
asNextStop = TrainParams->NextStop();
|
||||
iStationStart = TrainParams->StationIndex;
|
||||
}
|
||||
}
|
||||
else if( sSpeedTable[ i ].fDist < -fLength ) {
|
||||
// jeśli został przejechany
|
||||
@@ -995,13 +997,13 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
#endif
|
||||
asNextStop = TrainParams->NextStop(); // informacja o końcu trasy
|
||||
TrainParams->NewName("none"); // czyszczenie nieaktualnego rozkładu
|
||||
// TableClear(); //aby od nowa sprawdziło W4 z inną nazwą już - to
|
||||
// nie jest dobry pomysł
|
||||
iDrivigFlags &=
|
||||
~(moveStopCloser |
|
||||
moveStopPoint); // ma nie podjeżdżać pod W4 i ma je pomijać
|
||||
sSpeedTable[i].iFlags =
|
||||
0; // W4 nie liczy się już (nie wyśle SetVelocity)
|
||||
// ma nie podjeżdżać pod W4 i ma je pomijać
|
||||
iDrivigFlags &= ~( moveStopCloser );
|
||||
if( false == TestFlag( iDrivigFlags, movePushPull ) ) {
|
||||
// if the consist can change direction through a simple cab change it doesn't need fiddling with recognition of passenger stops
|
||||
iDrivigFlags &= ~( moveStopPoint );
|
||||
}
|
||||
sSpeedTable[i].iFlags = 0; // W4 nie liczy się już (nie wyśle SetVelocity)
|
||||
sSpeedTable[i].fVelNext = -1; // można jechać za W4
|
||||
fLastStopExpDist = -1.0f; // nie ma rozkładu, nie ma usuwania stacji
|
||||
WaitingSet(60); // tak ze 2 minuty, aż wszyscy wysiądą
|
||||
@@ -1837,6 +1839,12 @@ void TController::AutoRewident()
|
||||
fAccThreshold = -fBrake_a0[BrakeAccTableSize] - 1 * fBrake_a1[BrakeAccTableSize];
|
||||
fBrakeReaction = 1.00 + fLength*0.005;
|
||||
}
|
||||
for (int i = 1; i <= 8; i *= 2) //ustawianie trybu pracy zadajnika hamulca, wystarczy raz po inicjalizacji AI
|
||||
{
|
||||
if ((mvOccupied->BrakeOpModes & i) > 0) {
|
||||
mvOccupied->BrakeOpModeFlag = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
double TController::ESMVelocity(bool Main)
|
||||
@@ -2561,7 +2569,13 @@ bool TController::IncBrake()
|
||||
}
|
||||
case ElectroPneumatic: {
|
||||
if( mvOccupied->EngineType == ElectricInductionMotor ) {
|
||||
OK = mvOccupied->IncLocalBrakeLevel( 1 );
|
||||
if (mvOccupied->BrakeHandle == MHZ_EN57) {
|
||||
if (mvOccupied->BrakeCtrlPos < mvOccupied->Handle->GetPos(bh_FB))
|
||||
OK = mvOccupied->BrakeLevelAdd(1.0);
|
||||
}
|
||||
else {
|
||||
OK = mvOccupied->IncLocalBrakeLevel(1);
|
||||
}
|
||||
}
|
||||
else if( mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos( bh_EPB ) ) {
|
||||
mvOccupied->BrakeLevelSet( mvOccupied->Handle->GetPos( bh_EPB ) );
|
||||
@@ -2609,10 +2623,15 @@ bool TController::DecBrake()
|
||||
Need_BrakeRelease = true;
|
||||
break;
|
||||
case ElectroPneumatic:
|
||||
if (mvOccupied->EngineType == ElectricInductionMotor)
|
||||
{
|
||||
OK = mvOccupied->DecLocalBrakeLevel(1);
|
||||
}
|
||||
if (mvOccupied->EngineType == ElectricInductionMotor) {
|
||||
if (mvOccupied->BrakeHandle == MHZ_EN57) {
|
||||
if (mvOccupied->BrakeCtrlPos > mvOccupied->Handle->GetPos(bh_MB))
|
||||
OK = mvOccupied->BrakeLevelAdd(-1.0);
|
||||
}
|
||||
else {
|
||||
OK = mvOccupied->DecLocalBrakeLevel(1);
|
||||
}
|
||||
}
|
||||
else if (mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos(bh_EPR))
|
||||
{
|
||||
mvOccupied->BrakeLevelSet(mvOccupied->Handle->GetPos(bh_EPR));
|
||||
@@ -2747,12 +2766,12 @@ bool TController::IncSpeed()
|
||||
OK = mvControlling->IncMainCtrl(std::max(1,mvOccupied->MainCtrlPosNo/10));
|
||||
//tutaj jeszcze powinien być tempomat
|
||||
|
||||
double SpeedCntrl = VelDesired;
|
||||
double SpeedCntrlVel = VelDesired;
|
||||
if (fProximityDist < 50)
|
||||
{
|
||||
SpeedCntrl = std::min(SpeedCntrl, VelNext);
|
||||
SpeedCntrlVel = std::min(SpeedCntrlVel, VelNext);
|
||||
}
|
||||
this->SpeedCntrl(SpeedCntrl);
|
||||
SpeedCntrl(SpeedCntrlVel);
|
||||
|
||||
}
|
||||
break;
|
||||
@@ -2814,15 +2833,6 @@ bool TController::DecSpeed(bool force)
|
||||
break;
|
||||
case ElectricInductionMotor:
|
||||
OK = mvControlling->DecMainCtrl(1);
|
||||
if ((mvControlling->ScndCtrlPosNo > 0)&&(mvControlling->Mains)) //jeżeli tempomat
|
||||
{
|
||||
mvControlling->IncScndCtrl(1);
|
||||
mvControlling->RunCommand("SpeedCntrl", VelDesired, mvControlling->CabNo);
|
||||
}
|
||||
else
|
||||
{
|
||||
mvControlling->DecScndCtrl(2);
|
||||
}
|
||||
break;
|
||||
case WheelsDriven:
|
||||
if (!mvControlling->CabNo)
|
||||
@@ -3270,8 +3280,7 @@ bool TController::PutCommand( std::string NewCommand, double NewValue1, double N
|
||||
// CheckVehicles(); //sprawdzenie składu, AI zapali światła
|
||||
TableClear(); // wyczyszczenie tabelki prędkości, bo na nowo trzeba określić kierunek i
|
||||
// sprawdzić przystanki
|
||||
OrdersInit(
|
||||
fabs(NewValue1)); // ustalenie tabelki komend wg rozkładu oraz prędkości początkowej
|
||||
OrdersInit(fabs(NewValue1)); // ustalenie tabelki komend wg rozkładu oraz prędkości początkowej
|
||||
// if (NewValue1!=0.0) if (!AIControllFlag) DirectionForward(NewValue1>0.0); //ustawienie
|
||||
// nawrotnika użytkownikowi (propaguje się do członów)
|
||||
// if (NewValue1>0)
|
||||
@@ -5374,8 +5383,6 @@ inline TOrders TController::OrderNextGet()
|
||||
void TController::OrdersInit(double fVel)
|
||||
{ // wypełnianie tabelki rozkazów na podstawie rozkładu
|
||||
// ustawienie kolejności komend, niezależnie kto prowadzi
|
||||
// Mechanik->OrderPush(Wait_for_orders); //czekanie na lepsze czasy
|
||||
// OrderPos=OrderTop=0; //wypełniamy od pozycji 0
|
||||
OrdersClear(); // usunięcie poprzedniej tabeli
|
||||
OrderPush(Prepare_engine); // najpierw odpalenie silnika
|
||||
if (TrainParams->TrainName == "none")
|
||||
@@ -5389,16 +5396,14 @@ void TController::OrdersInit(double fVel)
|
||||
OrderPush(Shunt); // dla prędkości 0.01 włączamy jazdę manewrową
|
||||
else if (TrainParams ?
|
||||
(TrainParams->DirectionChange() ? // jeśli obrót na pierwszym przystanku
|
||||
((iDrivigFlags &
|
||||
movePushPull) ? // SZT również! SN61 zależnie od wagonów...
|
||||
((iDrivigFlags & movePushPull) ? // SZT również! SN61 zależnie od wagonów...
|
||||
(TrainParams->TimeTable[1].StationName == TrainParams->Relation1) :
|
||||
false) :
|
||||
false) :
|
||||
true)
|
||||
OrderPush(Shunt); // a teraz start będzie w manewrowym, a tryb pociągowy włączy W4
|
||||
else
|
||||
// jeśli start z pierwszej stacji i jednocześnie jest na niej zmiana kierunku, to EZT ma
|
||||
// mieć Shunt
|
||||
// jeśli start z pierwszej stacji i jednocześnie jest na niej zmiana kierunku, to EZT ma mieć Shunt
|
||||
OrderPush(Obey_train); // dla starych scenerii start w trybie pociagowym
|
||||
if (DebugModeFlag) // normalnie nie ma po co tego wypisywać
|
||||
WriteLog("/* Timetable: " + TrainParams->ShowRelation());
|
||||
@@ -5406,10 +5411,14 @@ void TController::OrdersInit(double fVel)
|
||||
for (int i = 0; i <= TrainParams->StationCount; ++i)
|
||||
{
|
||||
t = TrainParams->TimeTable + i;
|
||||
if (DebugModeFlag) // normalnie nie ma po co tego wypisywa?
|
||||
WriteLog(t->StationName + " " + std::to_string(t->Ah) + ":" +
|
||||
std::to_string(t->Am) + ", " + std::to_string(t->Dh) + ":" +
|
||||
std::to_string(t->Dm) + " " + t->StationWare);
|
||||
if (DebugModeFlag) {
|
||||
// normalnie nie ma po co tego wypisywa?
|
||||
WriteLog(
|
||||
t->StationName
|
||||
+ " " + std::to_string(t->Ah) + ":" + std::to_string(t->Am)
|
||||
+ ", " + std::to_string(t->Dh) + ":" + std::to_string(t->Dm)
|
||||
+ " " + t->StationWare);
|
||||
}
|
||||
if (t->StationWare.find('@') != std::string::npos)
|
||||
{ // zmiana kierunku i dalsza jazda wg rozk?adu
|
||||
if (iDrivigFlags & movePushPull) // SZT również! SN61 zależnie od wagonów...
|
||||
@@ -5420,33 +5429,34 @@ void TController::OrdersInit(double fVel)
|
||||
{ // dla zwykłego składu wagonowego odczepiamy lokomotywę
|
||||
OrderPush(Disconnect); // odczepienie lokomotywy
|
||||
OrderPush(Shunt); // a dalej manewry
|
||||
if (i <= TrainParams->StationCount) // 130827: to się jednak nie sprawdza
|
||||
{ //"@" na ostatniej robi tylko odpięcie
|
||||
// OrderPush(Change_direction); //zmiana kierunku
|
||||
// OrderPush(Shunt); //jazda na drugą stronę składu
|
||||
// OrderPush(Change_direction); //zmiana kierunku
|
||||
// OrderPush(Connect); //jazda pod wagony
|
||||
}
|
||||
}
|
||||
if (i < TrainParams->StationCount) // jak nie ostatnia stacja
|
||||
OrderPush(Obey_train); // to dalej wg rozkładu
|
||||
}
|
||||
}
|
||||
if (DebugModeFlag) // normalnie nie ma po co tego wypisywać
|
||||
WriteLog("*/");
|
||||
if( DebugModeFlag ) {
|
||||
// normalnie nie ma po co tego wypisywać
|
||||
WriteLog( "*/" );
|
||||
}
|
||||
OrderPush(Shunt); // po wykonaniu rozkładu przełączy się na manewry
|
||||
}
|
||||
// McZapkie-100302 - to ma byc wyzwalane ze scenerii
|
||||
if (fVel == 0.0)
|
||||
SetVelocity(0, 0, stopSleep); // jeśli nie ma prędkości początkowej, to śpi
|
||||
else
|
||||
{ // jeśli podana niezerowa prędkość
|
||||
if ((fVel >= 1.0) ||
|
||||
(fVel < 0.02)) // jeśli ma jechać - dla 0.01 ma podjechać manewrowo po podaniu sygnału
|
||||
iDrivigFlags = (iDrivigFlags & ~moveStopHere) |
|
||||
moveStopCloser; // to do następnego W4 ma podjechać blisko
|
||||
else
|
||||
iDrivigFlags |= moveStopHere; // czekać na sygnał
|
||||
if( fVel == 0.0 ) {
|
||||
// jeśli nie ma prędkości początkowej, to śpi
|
||||
SetVelocity( 0, 0, stopSleep );
|
||||
}
|
||||
else {
|
||||
// jeśli podana niezerowa prędkość
|
||||
if( ( fVel >= 1.0 )
|
||||
|| ( fVel < 0.02 ) ) {
|
||||
// jeśli ma jechać - dla 0.01 ma podjechać manewrowo po podaniu sygnału
|
||||
// to do następnego W4 ma podjechać blisko
|
||||
iDrivigFlags = ( iDrivigFlags & ~( moveStopHere ) ) | moveStopCloser;
|
||||
}
|
||||
else {
|
||||
// czekać na sygnał
|
||||
iDrivigFlags |= moveStopHere;
|
||||
}
|
||||
JumpToFirstOrder();
|
||||
if (fVel >= 1.0) // jeśli ma jechać
|
||||
SetVelocity(fVel, -1); // ma ustawić żądaną prędkość
|
||||
|
||||
Reference in New Issue
Block a user