Normalize all locomotive speed steps to one common speed scale such as km/h
User interfaces that present speed controls in terms of loco decoder speed steps are just awful. Some locos have decoders that have 14 speed steps, others 27 or 126, so it should normalize them all by mapping them all to km/h speeds. Different model designs (motor, gearing, etc) also means that speed step 6 will be unlikely to produce the same speed in two or more locos. This means that the software needs to calibrate each loco and maintain a scale speed table for each decoder speed step for both forward and reverse. Once this is done, everything can work on the same baseline, multiple locos can be inserted into a single train and controlled independently so that their actual speeds are matched as closely as possible.
Sample calibration screen. In this case a 27 step Motorola decoder.
Interface (c) Dale Schultz
Do not require the user to memorize decoder and turnout addresses and such numbers
The software should not expect the user to remember decoder addresses. There should be a symbolic layer that the software maintains so that a loco can be named (e.g. BR 05) and that is mapped to the address of that loco under the covers for all operations on that loco.
Turnouts should be changed using a visual representation of the layout. A mouse click or similar friendly gesture should suffice and the user should not have to remember what the turnout numbers are.
Principles of control
Summary
Creating the software has taken some years and works well. For me, this validates my design principles and gives me the confidence to make statements about train detection systems and braking modules etc. After inventing the system of calculating the speed backwards from the end point I found out that the scheme is very similar to the high speed control system of modern trains which travel too fast for visual signals to be used. Essentially the maximum speed is calculated based on the distance available to stop/slow in time at the next halt/slower speed limit. The system continually attempts to adjust the current speed to a desired speed. I found that very gratifying. Even more gratifying is watching the trains waiting for empty track, selecting available tracks, rolling about setting off sound effects, coming to smooth stops etc.
What I have described here is just the basic principles. In addition to running the trains there are of course many other features such as arrival and departure boards, cab views of the track, remote PDA control and generic events (such as sound effects, switching on/off of smoke, lights, on board sounds) that can be triggered by routes starting, ending or specific s88s. etc.