static ErrorCode request_core(Train *tra, int step, struct timeval tnow,
PredictionProblemCallback *ppc, void *ppcu) {
ErrorCode ec, ec2;
- double vnow, vtarg;
+ double vnow, vtarg, vmax;
SpeedInfo try;
const SpeedRange *regime;
Distance oldmaxinto;
DPRINTF(speed,core, " request vnow=%f vtarg=%f\n", vnow,vtarg);
- try.max_speed_estimate= MAX(vtarg,vnow);
- regime= stop_info(tra,try.max_speed_estimate);
- try.stopping_distance= stoppingdistance(tra,tnow, regime,
- try.max_speed_estimate);
+ vmax= MAX(vtarg,vnow);
+ try.max_speed_estimate= vmax * MARGIN_SPEED;
+ regime= stop_info(tra,vmax);
+ try.stopping_distance= stoppingdistance(tra,tnow, regime, vmax);
try.stopping= !step;
if (!try.stopping) {
toev_stop(&tra->speed.decel);
tra->speed.step= step;
- tra->speed.speed= try.max_speed_estimate;
+ tra->speed.speed= vmax;
if (vtarg <= vnow) {
tra->speed.decel.duration= regime->ts;