Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /homepages/45/d549400858/htdocs/nicklebyhousewebsite/templates/sdr_template_nov17/functions.php on line 199
TC Tips & Tricks
Train movements on the South Downs Railway are pretty much all controlled by schedules. The schedules can be activated in several ways - by right clicking them in the dispatcher window; by using "start" and "destination" buttons on the schedule control switchboard; and by pushbuttons on DTM30 panels.
Reasonably often, though, we get an instance of Traincontroller reporting "schedule XXX cannot be started - call Details view for further information". The Details view often says little else. But there's usually a reason. I've written this list as a reminder - mostly to myself - of what to check for.
- Is there a train in the srarting block? I'm not sure I've fallen foul of that yet, but one day it will happen.
- Is the exit from the starting block locked? If you've blocked TC from being able to send a train out, then it can't go. Some of our blocks are locked by DTM30 pushbuttons (so that the station manager can control access to tracks). The DTM30 track LEDs should be green for access to be allowed.
- Is there a route out of the start block to the next block? (After some track editing in Clanfield, I found that trains could get into Clanfield but there was no route out in the schedules. I had to go through the schedules and re-add them back in).
- If the train too big for the next block? We have TC gold that can use train length as a restriction on what train can go where. If the block is too short, TC won't try to enter the block.
- Is the train in an appropriate train group for the next block? We have the terminus platforms at Clanfield and Petersfield set to accept "push/pull" trains only. That group consists of the DMUs (and will also include small steam trains that can run backwards). So when you buy a new DMU, you need to add it to the push/pull group; if you don't, then TC won't send it there.
- Similarly - is the train in an appropriate group for the route to the next block? You can restrict which trains use which routes. I don't know why we'd done it, but we had a restriction on the route into Petersfield platform 1 that was "push/pull" trains only.
So if the schedule won't start - work through the list. No doubt I'll have to extend the list at some point but this describes the common failings we get.
We have a level crossing on a busy main line. The previous way of making the crossing operate was to trigger it when any Traincontroller route through the crossing was activated. That worked for any train running clockwise. But for a train setting out from Petersfield, the train could be on the crossing before the barrier was down.
The previous approach was to have a flagman activated by any of the routes becoming reserved; the flagman activated lights, waited 4 seconds then activated barriers. But the route was immediately available to be used by a train.
We tried adding activation delays to the accessory device (the feature was designed to allow slow pointwork to have gaps between each point being activated). It gapped the point commands, but still TC wouldn't wait before running a train through.
The solution is to get rid of the flagman and have the operations in the "operations" section of each route instead. There are 9 routed through there in each direction, so a bit of editing! When each route is activated, set the lights, wait 4s, set the barriers, and wait another 4 seconds. TC only makes the route available to a train after that full process has completed.
When the route is deactivated, deselect both accessories:
The final step (not on the diagram above) has been to set a special accessory address 922 to THROWN 4s after the barriers are told to come down. That is used to allow the SIGM20 signals to go green once the crossing barriers are in place.
We did also try using macros, so that the macro could be written once. But the route doesn't wait for the macro to complete.
A newly-discovered feature is the schedule sequence. This is like a schedule, but instead of bringing up a list of blocks to visit, it brings up a list of complete sequences that will be executed instead.
The schedule sequence is needed where a given train route would go through the same block more than once. A schedule can't do that (other than by running the same sequence several times). So if I want a train to go on a long journey - for example from Portsmouth, round the railway 3 times then back - it can't done in a single schedule. What you can do is make up discrete schedules, then chain them together in a sequence. So my "long journey" can be:
Portsmouth to green fiddle yard ( a short run);
Green fiddle yard to green fiddle yard, twice;
Green fiddle yard to orange fiddle yard;
Orange fiddle yard to orange fiddle yard, twice;
Orange fiddle yard to Portsmouth.
That now takes several minutes with lots of activity!
Another possible benefit of sequences is to cut down the number of sequences required. Instead of lots of individual sequences, you can instead have sequences for all of the main "point to point" operations required then treat a train journey as a sequence of them.
1st Oct 2016 - we have discovered more about sequences. There are some things to remember:
- If you need to terminate a schedule, then terminating the sequence doesn't terminate the schedule that the train is on. You need to terminate that lower level schedule.
- We had generated some "cycle" schedules. These only use the front 3 roads in the fiddle yards (to avoid being blocked behind another short train) and some are set to do several "laps".
- They do several laps because you can only list a schedule once in a schedule sequence. So if in once sequence you might want 2 laps round the railway and in another sequence you want 5 laps, you need to make 2 sequences.
- The rules for the schedules forming a sequence need to include "train may stay in start block" being ticked. If not, there can be a case where the path ahead is blocked and the train can't go; the whole sequence gets terminated with the train left out of position.
One of the major features in Traincontroller "Gold" edition is the concept of a "train set". A train set is a collection of carriages, wagons and locomotives. The key thing is that you can make changes to it at run time - i.e. not in edit mode. I needed this feature for terminus arrangements: where a locomotive needs to be removed from its carriages and repositioned or replaced by another one.
Consider a terminus station: a locomotive hauls a train into the station, and reaches the buffers at the end of the platform. A common operation is for a new locomotive to be added on to the other end of the train, and it will then take the carriages away leaving the original locomotive behind. It's not possible for this to be automatic. This is how we did it.
Firstly, the schedule for the "arriving" train needs to be set to separate the engine on completion. There's an option in each schedule for an operation at start and finish of the schedule; simply set "separate locomotive" in the finish operation. In this example, I've got two operations (separate locomotive, and turn off loco lights) so you have to make a list.
Secondly, you need to enable a train to be joined to the other end automatically. It turns out that if Traincontroller can use train tracking to follow the locomotives, then it can do the join automatically when it detects the locomotive backing onto the uncoupled carriages. To enable that:
For each engine you want to be able to do this:
1. select the engine in the "engines and trains" window
2. On the main menu, select train | train set | enable join by train tracking.
For all this to work, train tracking must be functioning. That means you need to have a block that the locomotive can be tracked from, and to, your block containing the carriages; each must have detection. On my railway, platforms have had 2 detectors: one to detect occupancy for most of the block, and one to detect the train arriving at the end (so TC stops it). You now need 3 detectors: an additional one at the entry to the block, that won't be occupied by any resistor wheelsets on carriages, so TC can see the engine arriving in the block.
So now: my old train departs, leaving behind a locomotive. A new train arrives, and it logically separates the loco from the carriages when the schedule stops. Uncoupling magnets automatically uncouple it at the same time. You manually drive a new loco onto the other end of the carriages; Traincontroller tracks it, and joints the loco on; then that new train can depart. All without using edit mode!
Finally - on my railway, multiple units are treated as single engines. When they arrive at the station, they can be separated and you get an error "engine xxx cannot be separated because it is not contained in a consist" indicated in the messages window; it's safe to ignore that error.
(I've updated this from the old version. Now the spoken text is part of the command line, so there's only one script file).
Sometimes a spoken message is useful. My railway has PM42 power managers to isolate power if a track shorts. A spoken message is a useful way to know where to look for a derailed train.
I've added contact indicators that light up blue if the PM42 zones report a short:
Contact indicators are assigned to PM42 cells as follows: set the "connection" tab to say LocoNet PM4 power manager sub-district, and set the board number (which you will have programmed with a throttle) nd channel number.
You can then add operations to those contact indicators. Mine displays a message in the Traincontroller message window, and initiates the windows speech engine via a Visual Basic Script (VBS) file:
wscript is the program that runs the script. Put the full path to the script in quotes, because it doesn't seem to like paths with spaces in the filenames.
Choose "system operations", cluck "execute" then "add". Click "Change..." and enter the full command line. Mine is:
wscript "C:\Users\Laurence\Documents\south downs railway\rr&co\speech.vbs" "this text is spoken when the track is shorted"
The script file has 4 simple lines of text as follows:
Set objArgs = Wscript.Arguments
(the last line tells the script to speak the text presented in the command line text)
There's probably more you can do to change the selected voice etc.... but it's a start!