Announcement

Collapse
No announcement yet.

Technology Used for Automated Operations

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Technology Used for Automated Operations

    Paul asked me to provide some details on how I use technology on my layout. I wasn’t really sure where to start or how detailed to get. I was worried that if I write about 1 aspect of what I’m doing that I might miss something pertinent. So I decided to start at the beginning. Some of this will probably not be relevant to what Paul has asked but hopefully if you follow along through all of it there will be something of interest. I am going to try to keep this at a higher level but I do have a tendency of getting bogged down in the weeds so I apologize for that now. I am also going to break this up into a few posts to try and keep it from getting too long and boring for the people that do decide to read it. Also if you have questions on something please ask. So having said this let’s get started….

    Prior to retiring I use to be a computer architect. I worked on and designed large SAP computer applications for different multi-national companies. I approached the technology design of my layout the same way as I would approach the design of any computer application. This meant figuring out what I wanted the end result to be and documenting the requirements to achieve this. For example, I knew that I was going to be operating my layout by myself and that I wanted to have multiple trains running at the same time. This meant that they would need to be controlled by my computer. I knew that I wanted to have some automated operations occurring where the cars would be uncoupled from the engine automatically. I knew that I wanted my railroad to look as realistic as possible, which for me meant signals. I had also read about how the computer could control the lights in the train room to simulate dawn and dusk. For me this was a nice to have and wouldn’t be a critical requirement when doing my design but if I could accommodate it I would.

    Once I knew my requirements the next step was looking for the software I would need to be able to fulfill them. I was only interested in COTS (Commercial Off The Shelf) software as I didn’t have the desire (or probably skill) to code my own.

    I looked at 3 different software packages. The requirements that I had for the software were:
    1. It must fulfill my layout requirements
    2. It must be easy to use
    3. It must be supported
    The first one I looked at was JMRI.

    In my opinion the big thing that attracts people JMRI is that it is free. However for me this is a red flag as I feel that the risks associated with freeware outweigh the benefits. I liked the fact that it seemed to be closely associated with Digitrax. Even though I hadn’t made a final decision on the hardware I was going to use, Digitrax was my preference as I already owned a DB150 Command Station. I didn’t like that after reading a bunch of JMRI documentation it seemed to me like I would have to do a bunch of Python scripting. I know several computer languages but Python isn’t one of them.

    I must say that I have been following Allen’s JMRI Operations thread and am fascinated with what he is doing.

    The next software package I looked at was TrainController. The major drawback of this software is the price. The Gold version of the software is expensive but I found the Silver and Bronze versions, while cheaper, didn’t have the capabilities that I was looking for. I downloaded the demo version of the software and was really impressed with how much you could do without any special scripting. If you needed to write a special script it was all point and click, not coding in an editor. I liked this.

    The last package I looked at was iTrain. This software also looked good but it didn’t appear to have the same capabilities that TrainController had. I also wasn’t sure on how supportable it was. And I guess to be truthful with myself I was already sold on TrainController. It was more money than iTrain but I didn’t feel it was that much more for what it gave me.

    So my decision was made. I was going to go with TrainController.

    Well that is it for today. In my next post I will be discussing the hardware I choice to enable automatic operations. I hope you didn’t find this post to boring. If you like what you have read please hit the like and subscribe buttons below… Oh wait that is for YouTube not here…(sorry that is my lame attempt at a joke 😀).
    Warren

    #2
    I’m back with some information on the hardware I use. This one isn’t to long so hopefully you can get through it without falling asleep.

    Before deciding on hardware it is important to understand how the software works with regard to train detection. TrainController can detect trains using either momentary contacts, like reed switches or infrared detectors, or using occupancy detection. I used reed switches on my previous layout and I didn’t like that I needed to have a magnet attached to the train to activate them. This time I decided to go with occupancy detection.

    I also needed to be able to have my turnouts switched automatically. On my previous layout I had used Tortoise Switch Machines and I wanted to be able to reuse these so the hardware I chose needed to be able to allow TrainController to switch these.

    I also needed to have hardware in place for driving the train signals based on the logic in TrainController.

    As I already owned a Digitrax command station and Digitrax had products to fulfill my requirements I decided to centre my hardware around Digitrax. Before I laid my track I needed to figure out how to block my layout. To do this I needed to understand what TrainController expected. It was pretty straightforward except that you can not include a turnout in a block. This meant that when laying my track I needed to double gap every leg of every turnout.

    I started investigating what I would need to do for automatic uncoupling of cars. There weren’t a lot of options available but I had read about someone using an electromagnetic uncoupler from Rapido on an N scale layout even though they are made for HO. I decided to try one out and was very happy with how it worked. I was able to integrate the electromagnetic uncoupler with a Digitrax DS64 stationary decoder to turn it on and off. This made it very easy to connect it to TrainController.

    Being able to uncouple cars automatically using an electromagnetic uncoupler also means you need to have some precise positioning ability with your trains. I found when experimenting with the electromagnetic uncoupler that I wasn’t able to get the precision I needed with occupancy detection. I needed to use momentary contacts. I started to investigate IR Detectors and found some from Azatrax that would integrate with the Digitrax SE8C board. I also found that when I do uncouple cars I do not want to leave the cars over the electromagnetic uncoupler as it makes coupling up later difficult.

    At a high level this explains the hardware I have in place for doing automatic operations. Hopefully my next post will be more interesting as it gets into the actual process.
    Warren

    Comment


      #3
      Keep it coming, Warren! This is good.

      What's the limitation, and maybe that's not a fair assessment, with the TrainController block occupancy software that a turnout can't be in a block?
      Southern Railway Slate Fork Branch, March 1978

      Old magazines can still be fresh sources of hobby information!

      Comment


      • Warren K
        Warren K commented
        Editing a comment
        Thanks Paul. I believe it is the way the software draws the track plan and then associates blocks with the track. There is no way to assign a block to a section of track and a turnout. If I was to do it all again I think I would experiment with not double gapping the throat of the turnout and using metal joiners but double gapping both routes on the other end. This way the turnout could be electrically connected to the preceding section of track and thus use its occupancy detection even though in TrainController they would still be separate. If that makes sense at all.

      • Paul S.
        Paul S. commented
        Editing a comment
        Yes, it does make good sense, Warren. Your preference is very similar to how track sections are set up in real life.

      #4
      Now that the boring part is out of the way I’m going to get into what I think Paul’s area of interest really is. That being how does my automated operations work.

      To explain this properly I first need to explain some things from TrainController. To keep this as short as possible I’m only going to include the things that are relevant to my automatic operations.

      In TrainController each block has one or more contact indicators assigned. A contact indicator could be an occupancy detector or a momentary contact like an IR detector. Each block also has a stop marker assigned in each direction. The stop marker is attached to a contact indicator. In really simplistic terms the stop marker tells the train where to stop in the block. I found that when using occupancy detector contact indicators, different mobile decoders would stop more accurately than others. Unfortunately I never found one that stopped accurately enough for automatic uncoupling. Thus the need for momentary contacts.

      TrainController uses schedules to run trains from one block to another. Setting up schedules is extremely simple. Using a feature called Autotrain you simple click on a starting block (block A) and on an ending block (block D) and the train will run from A thru B thru C and stop in block D. This schedule can then be saved and run via a timetable entry, a push button, a flip of a switch, a macro, etc.

      Schedules can only run in one direction at a time. So after running the above train to block D if I wanted to reverse direction and back the train into block E I would need to create another schedule to run from D to E.

      Each schedule can have successors assigned to them. This allows the first schedule to automatically start the second schedule. Thus all I need to do is start the first schedule and TrainController will run the train from A to D and then back the train from D to E. TrainController will also make sure to switch any turnouts appropriately.

      Every schedule has an area where you can write some commands to occur before the schedule starts and as the last thing the schedule does before it terminates. These areas are called Start Operations and End Operations.

      In the blocks where I uncouple cars I installed an IR detector about 3 cms in front of the electromagnetic uncoupler. I didn’t want my IR detectors to be visible so I put them in the track between the ties to use reflective sensing instead of positioning them “above ground” and using across the track sensing. I also assigned a stop marker to the IR detector.

      As I stated above there are areas in TrainController where you can write specific commands in a script. A few commands that are used extensively in the coupling and uncoupling process are:
        • Forward and Backward - these commands will tell the engine to go forward or backward
        • Speed - this command will set the speed the engine is to move. For coupling and uncoupling I use 5 kph.
        • Delay - this command tells TrainController how long to wait before executing the next command. Its format is hh:mm:ss.mmm.
        • Emergency Stop - this command will stop the engine immediately.

      So if I wanted the engine to run backward at 5 kph for 2.345 seconds the commands would be:

      Backward
      Speed 5 kph
      Delay 00:00:02.345
      Emergency Stop


      TrainController also allows the use of variables. Each variable has a different scope, for example global, train, block, etc. I primarily use variables with a scope of train or block. A variable with a scope of train will be assigned to a specific train and you can use that variable in any calculation for that train no matter where it is located. A variable with a scope of block will be assigned to a specific block. That means the value in the variable is only valid to do a calculation for a train when it is done in that specific block.

      Besides each variable having a scope, each variable also has a type. Variables can either be Text, Numerical, Time, or Object. The important ones that I use for automatic uncoupling are numeric variables and time variables.

      A numeric variable can hold whole numbers, no decimals allowed. A time variable can hold numbers that make up time. Its format is hh:mm:ss.mmm. Instead of using numbers as its input a Delay command can also use a time variable.

      I use the following numeric train variables:
        • Length of the Engine: this is how long the engine is to the nearest centimetre
        • Length of the Train: this is the length of the entire train including the engine
        • IR Offset: this variable gets set specific to an engine depending on the block it is in. As each engine will stop at a bit of a different spot over the IR detector it allows me to make fine adjustments depending on exactness of where the engine stopped. This variable could be negative or positive. It is initially set to 0 and via trial and error I fine tune it until I’m happy with the positioning of the train when it stops.
      Each of my blocks that I uncouple cars in have the following numeric variables assigned to them. They are:
        • Distance from the EM Uncoupler to the IR Detector: this is the distance between the EM uncoupler and the IR detector.
        • Distance to Push Cars Back: this is the distance that I want to push the cars back after uncoupling.

      To be continued in the next post…

      Warren

      Comment


        #5
        Now that I have explained a little bit about TrainController let start by coupling an engine to a cut of cars. The important thing to remember is that everything I’m going to describe only involves me starting the first schedule. After that it is all done automatically. (The block names and turnout numbers in the example are from my layout.)
        1. I start schedule 1. Schedule 1 will switch turnout 41 to the main route. It will then back the engine from the engine track (block Y7) thru turnout 41 to block Y5. Schedule 1 then starts schedule 2.
        2. Schedule 2 will switch turnout 41 to the diverging route and turnout 40 to the main route. It will then move the engine forward thru turnout 41 and turnout 40 to block YA2. Schedule 2 will then start schedule 3.
        3. Schedule 3 will then switch turnout 40 to the diverging route and turnout 39 to the main route. It will move the engine backward thru turnout 40 and turnout 39 to block Y2. It will continue in block Y2 until it backs over the IR detector. When the IR detector is activated the stop marker assigned to IR detector will stop the engine.
        4. Schedule 3 does not start another schedule. Instead commands scripted in the End Operations of schedule 3 now take over the coupling process.
        5. At this point my engine is sitting about 3 centimetres in front of the electromagnetic uncoupler and about 6 centimetres in front of the cut of cars to be coupled too.

        This is where I ran into a bit of a problem. When testing my engines I found that each engine took a different amount of time to move a specific distance. This makes sense as each engine will have a different amount of friction on its gears, a different decoder, a small difference in weight, etc. The difference isn’t great but when dealing with automatic uncoupling you need to be precise. This meant that if I wanted to be able to have different engines run the same schedule I would need to determine how to calculate the amount of time needed by the Delay operation for each move for each engine.

        It turns out this is really simple as I found that if you move a numeric variable into a time variable it populates the digits in the time variable from right to left. So for example if you have a numeric variable with a value of 1234 and move it to a time variable the time variable will have a value of 1.234 (1 second and 234 milliseconds).

        To get the precise movement that I required I had to have the Delay time calculated to the milliseconds. As there are no decimals in TC, the numeric variable that I calculated to be used in my Delay operation needed to be in the thousands range. This would allow that numeric variable to be moved to a time variable and populate the milliseconds.

        I knew the speed I wanted to use (5 kph). I also knew the distance I needed to travel (measured from my infrared detector to my electromagnetic uncoupler).

        What I needed was a number I could use for each engine which would represent how far each engine traveled at the constant speed of 5 kph. I called this number my Engine Movement Factor.

        To calculate the Delay required for the movement I needed the distance to have a decimal place value in the millions and my Engine Movement Factor to have a decimal place value in the thousands so that when I divided the distance by the Engine Movement Factor the result would have a decimal place value in the thousands which could be moved into the time variable to provide a time down to the millisecond.

        To figure out the Engine Movement Factor for an engine I marked off a 10 centimetre length of arbitrary track. I then created a script to take this distance and multiply it by 1,000,000. I then divided the result by the Engine Movement Factor (I started with a value of 2000) and moved that result to a Time Variable which was used by the Delay operation.

        I then ran my script and compared the distance the engine actually traveled to the distance I wanted it to travel. I then calculated a proper Engine Movement Factor for this engine by dividing the distance I wanted to the engine to travel by the distance the engine actually traveled and then dividing that result into the Engine Movement Factor I used (i.e. 2000). For example if I wanted the engine to travel 10 centimetres but it actually traveled 11.5 centimetres with an Engine Movement Factor of 2000, my correct Engine Movement Factor for this engine would be 2300. (2000/(10,000,000/11,500,000)).

        So I can now calculate a time variable for my Delay operation which will be different for each engine. For example if I have an engine that has an Engine Movement Factor of 2712 and I want to move 10 centimetres the Delay operation needs to be set to (10*1,000,000) / 2712. This result (3,687) is moved into the time variable which results in the variable being set to 3.687 seconds. If a different engine had an Engine Movement Factor of 2568 the resulting time variable would be 3.894 seconds. This made it possible for me to interchange my engines without having to reconfigure all the various train movements.

        Now back to our example…
        1. At this point the commands in the End Operations of Schedule 3 take over. The first thing that happens is the appropriate variables are initialized for the train and block. Then I need to calculate the distance I want to move. By adding the Distance from the EM uncoupler to the IR detector variable, the Distance to Push Cars Back variable and the IR Offset variable together I know how far the cars are sitting from my engine. I can then multiply this number by 1000000 and then divide the result by the engine movement factor for this engine to calculate the Delay I need.
        2. Once the delay is calculated I use the above commands to back the engine up and couple to the cars.
        3. I then add 1 second to the delay and pull the engine (and hopefully the cars) forward. If the cars are coupled to the engine the lead car will be positioned over the IR detector.
        4. If the IR detector is ON Schedule 4 will be started to take the cars to their destination. If the IR detector is OFF the engine will honk its horn and a message will play that tells me manual intervention is needed at track Y2. Once I manually back the engine up and couple it to the cars I can press a function button on the TrainController throttle and Schedule 4 will start.
        5. When the train arrives at the destination block (let’s call it T3) Schedule 4 will then start Schedule 5 to back the train into the siding (I1). It will continue in block I1 until it backs over the IR detector. When the IR detector is activated the stop marker assigned to IR detector will stop the engine.
        6. Schedule 5 does not start another schedule. Instead commands I have included in the End Operations now take over the uncoupling process. At this point the last car of the train is sitting over the IR detector which is about 3 centimetres in front of the electromagnetic uncoupler.
        7. The first thing that happens is the appropriate variables are initialized for the train and block. Then I need to calculate the distance I want to move. To do this I subtract the Length of the Engine variable from the Length of the Train variable. This will give me the length of the cars attached to the train. To this result I add the Distance from the EM uncoupler to the IR detector variable and the IR Offset variable. I now know the distance the couplers that connect the engine to the first car are from the electromagnetic uncoupler. I can then multiply the result by 1000000 and then divide that by the engine movement factor for this engine to calculate the Delay I need.
        8. Once the delay is calculated the above commands are used to back the engine up and position the coupler of the front car and the rear coupler of the engine over the electromagnetic uncoupler.
        9. The electromagnetic uncoupler is turned on and the engine does the Kadee Shuffle to uncouple the engine from the cars.
        10. Using the Distance to Push Cars Back variable the delay is calculated and the engine pushes the cars into position by the industry.
        11. The engine then pulls ahead far enough so that if the cars were still attached the first car would be positioned over the IR detector.
        12. If the IR detector is OFF Schedule 6 will be started to drive the engine back to the yard. If the IR detector is ON the engine will make a second attempt at an uncoupling the cars (this process is not described here. If someone is interested please ask and I will tell you how it works). If the second attempt fails the engine will honk its horn and a message will play that tells me manual intervention is needed at track I1. Once I manually back the engine up and uncouple it from the cars I can press a function button on the TrainController throttle and Schedule 6 will start.
        In a nutshell that is the process followed for automatic uncoupling of cars. In my next post I will describe the Control Panel I use to coordinate it all.​
        Warren

        Comment


          #6
          I am learning a lot here, Warren! Sounds as if you've attained ninja status with TrainController.
          Southern Railway Slate Fork Branch, March 1978

          Old magazines can still be fresh sources of hobby information!

          Comment


          • Warren K
            Warren K commented
            Editing a comment
            Haha. I’m not sure about that Paul.

          #7
          Warren, does TrainController interface with a DCC system? I'm wondering about acceleration and deceleration during starts and stops.

          And yes, I'd like to learn more about the uncoupling process.
          Southern Railway Slate Fork Branch, March 1978

          Old magazines can still be fresh sources of hobby information!

          Comment


          • Warren K
            Warren K commented
            Editing a comment
            Hi Paul, TrainController interfaces with over 35 different Digital Systems. I use Digitrax. The entire list can be found on the TrainController site at

            https://www.freiwald.com/pages/hardware.htm

            Every engine used on TrainController has to be “profiled”. This is a process where TC maps the different decoder speed steps to its internal speed steps. Acceleration and Deceleration are set to 0 on the decoder but when creating the engine in TC you set acceleration and deceleration there. So TC uses those values when it is starting and stopping a train.

            In a future post I will include more information on how I make my engine do a second try to uncouple if the first fails. Is there anything specific that you would like to know that I have missed?

          #8
          I am -surprisingly- finding this interesting as well. However, questions;
          1. A passenger train at station A requires to stop at B & C and finish at station D. So there's station A block, section block, station B block, section, etc until station D block. To run this train, you'd need multiple 'schedules' like start at A thru section block and stop at station B block. Next schedule is 'start at B block, run thru section and stop at station C block. And so on until station D in a sequential order, is this correct?
          2. A following train, TC allows for following trains on close headway?
          3. Just read your reply re acceleration/braking, can speed be varied at a certain point (mimicking a slow speed track defect)?

          Thanks mate, this is a fascinating topic!!

          Comment


            #9
            Hi Russ,

            1) No that type of run could be done with one schedule. The schedule would be created starting in station A block and ending in station D block. Between station A block and station D block it would pass through station B block and station C block and any other section blocks required to get to station D. Once the schedule is created you can drill into each block you want to stop in and add a wait time. So in station B block you could add a wait time of 10 seconds and in station C block a wait time of 30 seconds. The train would leave station A, travel through as many section blocks as required to get to station B. When entering station B block it would start to slow down, and depending how you had your stop marker set, it would stop centred on your station in the station B block. It would wait 10 seconds and then start up and proceed to station C block where it would stop and wait for 30 seconds before proceeding to station D.

            If you wanted to use this schedule for a Regional Train that needed to stop at all stations and an Express Train that only needed to stop at station D you could further specify that the wait time in the station B block and station C block is only for Regional trains. In this case the Express Train would continue through the station B block and station C block at whatever the speed limit for the block is.

            2). Sorry but I need more information. I’m not a railroader so I don’t know what a close headway is.

            3) Yes. There is a Train Operation called a Temporary Speed Limit that could be put on at any point. Temporary Speed Limits allow you to specify a new speed as well as a distance the train has to get to that speed so it will slow down gradually instead of a sudden slowdown. There are also Action Markers that can be added to contact indicators just like a stop marker is added. Action Markers allow you to specify certain criteria for them to “activate”. So what I would probably do is add an Action Markers with some criteria and specify the Temporary Speed Limit as the operation I wanted to be carried out. The Temporary Speed Limit would be in affect until another Temporary Speed Limit is issued to take it off or until the schedule ends.


            One thing I need to specify is that TC comes in 3 versions Gold, Silver, and Bronze. Bronze is limited in the different things it can do and is thus a lot less money to purchase. Gold can do all the functions and is the most expensive. Silver is somewhere in-between. Everything I have described so far is with Gold. I don’t know if the other versions have this ability.
            Warren

            Comment


              #10
              "Close headway" (and sorry Russ C for barging in) would be one train on the heels of another according to the timetable, Warren. Or it can also be Train B following Train A in signaled territory, but Train B is "running on yellows" because the two trains are separated by only one block. "Running on yellow" is the term I've heard.
              Southern Railway Slate Fork Branch, March 1978

              Old magazines can still be fresh sources of hobby information!

              Comment


              • Russ C
                Russ C commented
                Editing a comment
                Thanks Paul, that's exactly what I meant.

              #11
              The reason behind my questions was, years ago, when the N scale Kato Portrams and other makes started appearing, a bunch of us did a hypothetical light rail and transit 'layout' but the big issue was the control system and how to emulate the close distances trams run at.
              What your doing here Warren solves the operating issues that was the major stumbling block we had.

              Comment


              • Warren K
                Warren K commented
                Editing a comment
                With schedules you can also specify if they should run on a cycle. A schedule on a cycle will automatically restart itself. If it is a shuttle train like a tram it will restart itself in the opposite direction, thus going back and forth. This will continue until you stop it manually or through some criteria like number of cycles to run.

              #12
              Ok to answer Russ’s question number 2.

              When a schedule is created there are a number of rules that can be set for the schedule. One of them is the Look Ahead. With this rule you can specify how many blocks ahead of the train TC will look at reserve the block for the train. Once the block is reserved no other train can enter that block until it is released by the train that reserved it. If you set Look Ahead to 1 for the schedule the trailing train is running then it will run closer to the train in front because only the block behind the front train needs to be “free” for the back train to keep moving.

              There are also rules around critical sections. A critical section occurs when trains travelling in either direction need to share the same section of track. If that section is marked as a critical section then the train will not reserve it unless it can reserve a non-critical section that is after the critical section. This helps prevent deadlocks. With critical sections you can specify that the train following a train that has reserved the critical section can enter and follow the front train through the critical section without waiting for the front train to clear it. Any train waiting to enter the critical section from the opposite direction would need to wait for both trains to exit the critical section before proceeding.

              Hope that answers your question.
              Warren

              Comment


              • Russ C
                Russ C commented
                Editing a comment
                Thanks Warren, it does. This software seems to be very adaptable to almost any sort of track configuration.
                One more question, if I may, does TC read transponding decoders?

              • Warren K
                Warren K commented
                Editing a comment
                Hi Russ. Yes TC does support transponding. They call it Train Identification. I don’t use it myself so I don’t know how easy it is to set it up.

              #13
              I run four different types of trains on my layout. I call them:
              • Freight Trains: These are long freight trains that are used to add extra traffic on my layout. I have 3 different trains that I refer to as Container Train, Coal/Tank Train, and Mixed Freight Train. At maximum only 2 of these trains will run at once. When they leave the Yard they will make a few trips around the layout before returning to the Yard.
              • Passenger Trains: I have a Regional Passenger train and an Express Passenger train. These trains originate from my Main Station and make stops at other smaller stations before returning to the Main Station.
              • Local Trains: These are the main trains I use for my automated operations. These trains will take cuts of cars from the Yard and deliver them to different industries. They will also pick up cars at the industries and bring them to the Yard. When they bring a cut of cars to the Yard they will drop them on one of two different yard tracks, coupling them to any cars already on that track. This will eventually form what I call a Combined Train.
              • Combined Trains: These trains will originate from one of two yard tracks. Once enough car cuts have been dropped on a track TrainController will couple 2 engines to the front of the cars and they will be taken around the layout a few times before returning to the Yard where the engines will uncouple from the cars and leave them on the track for the Local Trains to break apart and deliver to the industries. I use this process to simulate the cars being taken from one town to another.
              All my trains, with exception of my passenger trains, originate from the Yard. Unfortunately the yard on my layout is poorly designed. I’m not going to get into the deficiencies as that is a story for another day. The reason I mentioned it here is because it caused my operations to be centred around cuts of cars instead of individual cars. Thus the Central Control Panel I developed in TrainController involves tracking Car Cuts instead of keeping track of where individual cars are.

              All activity on my layout is controlled through a Central Control Panel that I developed. This panel allows me to keep track of what is running, what is waiting to run, and if there are any issues I need to look into.


              Click image for larger version

Name:	k7zmT-pdlykikno45hrpl332cbyhds.jpg
Views:	113
Size:	231.0 KB
ID:	22831

              The Control Panel is divided into different sections.

              The section on the top left is used to start different trains. Using the different switches I am able to select the type of train I want to start. If the option Complete Schedule is selected then multiple trains will run according to a timetable that I have defined. If I select Passenger Train Only then the system will randomly start one of the two passenger trains. Likewise Freight Train Only will start one of the three Freight Trains and Local Train Only will start one of the Local Trains or a Combined Train.

              The two centre sections are really the heart of the automatic operations process. In general these sections:
              • keep tabs on what tracks are occupied and which ones are free (A Departing or Arriving switch that is green indicates that the track is occupied)
              • which schedules are ready to run and which ones are running (Ready and Active switches)
              • what engine is being used by a particular schedule (KCS 2036 is running the lumber schedule “Move Log Cars to the Yard”)
              • if an error has occurred during the coupling or uncoupling process (CP 3001 has an error that needs manual intervention while running Cement schedule “Move Empty Hoppers to Cement Plant”)
              • whether the schedule should be run automatically by TrainController (Auto) or manually by a human operator (Man - not shown)
              The Freight Trains section on the centre left (top) is used by both the Freight Trains and Combined Trains. The upper part controls the running of the Freight Trains while the lower portion controls building, dismantling, and running of the Combined Trains. For the Combined Trains that originate from either track Y2 or Y3 I keep track of the position the cut of cars is in the Combined Train and the length of the cut of cars. This information is used when dismantling the Combined Train and delivering the cuts to the different industries.

              The section on the centre left (bottom) is used to determine which passenger train is to start and in what direction it should run. When running a Complete Schedule it is possible, and common, that both passenger trains are running at the same time.

              The section on the centre right is used to determine which Local Train is ready to be started. When I start a Complete Schedule or a Local Train Only schedule TrainController will look at the different industries that have the Movement Requested switch set to green and then randomly start one of the trains. This makes the order trains run totally unpredictable.

              The different Movement Requested switches are set to green depending on which tracks have cars positioned on them, which train types are already running, how many trains are already running, and the position of the cut in a Combined Train. This allows me to control the traffic on my railroad.

              If I want to run a particular train myself I can change the Auto switch for a schedule to Manual. I will then be able to control the train myself using either the TrainController throttle or my Digitrax throttle while TrainController continues to run all the other trains that may be running.

              The section on the top right consists of different switches that are used to control the automatic coupling and uncoupling process. These switches drive the logic that is used by TrainController. Each track that contains an electromagnetic uncoupler is listed in this section. TrainController will set these switches to green or red depending on where it is in the uncoupling process. For example if the train was uncoupling cars at elevator track E1 the “Uncoupling 1st Try” switch beside E1 would be green. If the cars didn’t uncouple for some reason the “Uncoupling 1st Try” switch would be turned to red and the “Uncoupling 2nd Try” switch would be turned to green. If the uncoupling failed again the “Uncoupling 2nd Try” switch would be set to red and the “Uncoupling Failed” switch would be set to green, the trains horn would sound and a message telling me that the uncoupling failed would play over my sound system.

              The bottom part of this section keeps track of the number of engines that are available for Local Trains to use as well as the number of engines that are currently being used by Combined Trains.

              So this is how my automated operations are controlled. If you have any questions please ask.
              Attached Files
              Warren

              Comment

              Working...
              X