TrainNo is ‘soft’ as you say, and a set of carriages can be assigned ‘abc’ when it is dispatched from the depot. But in fact it’s even softer than that and once on the railway a set can be assigned a different TrainNo at any time.
One reason might be:
The timetable will say: ‘train ‘abc’ should depart Cockfosters for Heathrow T5 at 14:00’, but at 13:55 train ‘abc’ is still at King’s Cross.
One option for the controllers is to renumber a train that is at Cockfosters to ‘abc’ and send it off at the right time. This would mean there are now two 'abc’s, so in practice they might give the train at King’s Cross the TrainNo of the one that was at Cockfosters (a paired swap).
I don’t know anything about how to run a railway so the above might be a stupid example, but I think the principle is correct. When trains get out of position, operators will swap number between trains to get back to the timetabled order and timings.
The benefits of moving the TrainNos between trains to match the timetable are:
- You don’t end up with several trains in a row to the same destination
- Drivers have a complicated schedule, getting on and off different trains during the day to take their breaks. If trains get out of position then this process falls apart.
A better solution is an integrated control system which ‘knows’ where all trains and drivers are at all times and can manage the train timetable and crew schedule ‘on the fly’, but I don’t think London Underground is there yet - at least not on all lines.