Yes sure
Here's the basic concept
1) Make a func_tracktrain, the size of the train model, textured nodraw. Put speed as you want, give a name (ex. train_box)
2) Parent models to func_tracktrain, make trigger hurt up front and parent as well.
3) Put path_tracks, name the first one to something, then shift+drag to create more. And set the last one (edge of the train path) with the following output:
OnPass train_box TeleportToPathTrack [your first path_track name]
4) make logic_timer
5) set it to random intervals, standard intervals, whatever.
6) Make two logic_relays and name them Train_start_relay (for train movement) and Train_sound_relay (for warning sound).
7) Give the timer the output
OnTimer Train_start_relay trigger w/ a delay of 1 sec or so
OnTimer Train_sound_relay trigger
8) Train_start_relay has
OnTrigger train_box startforward
OnTrigger (motor sound ambient generic) play
Train_sound_relay sends the ambient generic w/ the "ding ding ding" sounds the "play" output.
6) Make logic_auto w/ OnMapSpawn train_box TeleportToPathTrack [your first path_track name]
7) Test? Should work, but I can't promise that