A speed and location programmer located at a particular train station is used to prepare a non-volatile program that may be used by an on board microcomputer to control the speed of a train. The program includes train orders, track conditions, and other relevant information, such as size, length and capacity of the train which may be obtained from a centralized location. The program is fed into a microcomputer which monitors the speed and distance of the train and compares it with the program. If the parameters as contained in the program are exceeded, either the throttle would be reduced or the brakes applied to regulate the speed of the train. A trip history of the train may be extracted at the next train station to determine the operation of the train by the engineer. An override system is included to eliminate the function of the microcomputer in case of emergency. Sensors may be used to determine the number of rotations of the train wheel and thereby compute the speed and distance of the train. An operator's console provides for activation of the system and allows for periodic updates of the system.