RailQuik overview
In this thread I'll attempt to describe the system in enough detail to make it understandable, but not so much that I overwhelm you with information. I'm happy to answer questions and go into more detail upon request, but would prefer to do so through this thread rather than through personal emails in order to make the process as efficient and effective as possible in reaching all potential users.
First of all, here's an example of one of the prototype screens on which I based my RailQuik user interface.
Below is an image of the main menu for RailQuik. I tried to get as close to the look of an IBM terminal emulator as I could within the confines of Access.
Clicking on option 10 (Online Inventory) on the main menu brings us to the screen below, which shows key pieces of data for every car in service (as well as those yet to be built, identified by their blank Status field).
I've highlighted two groups of cars we'll be following throughout this example in order to show the progression that the application follows, as indicated by the Status field, the values for which are outlined below:
0 = "Available" - All cars that are off the visible portion of the layout in staging/storage
1 = "Inbound" - Cars that the program has selected for movement onto the layout through the generation of car orders. These will be arriving either from staging or interchanges. They can either be "one-way" cars - bridge moves that don't automatically return in the next session - or "two-way" - those cars that are bound for an on-layout industry and that will automatically be routed elsewhere (e.g. back to their originating road) with subsequent op session cycles. In the example above, the cars in yellow are one-way cars, while those in red are two-way.
2 - "On spot" - Cars that are spotted at their intended on-layout customer, pending loading or unloading.
3 - "Outbound" - Cars that have been released from the on-layout customer and are ready to be pulled.
Once cars have been pulled from the customer and moved to their return or forwarding destination, their Status returns to 0 (Available), meaning they're ready to be selected for subsequent car orders in the future. Note that all cars in the above screen shot have a Status of either 0 (Available) or blank (not yet in service).
All cars in a particular active state can be viewed using the Tracing portion of the main menu, options 10-13.
Option 10 (Online Inventory) shows all cars and their current state. An example shot of this screen was shown above.
Options 11-13 are pretty self-explanatory, with each showing only those cars in the selected Status. Here's an example of the Option 12 (On Spot Cars) screen, but the other two are virtually identical.
Clicking on the Ignore box will cause the selected car to remain in its current state when other cars are transitioned to the next. This can be useful when a car is to remain On Spot rather than being released from the customer in the next session, for example.
The rotation of all cars to their next Status value in the cycle is accomplished through the Billing portion of the main menu, options 24-27. I'll describe the use of each menu selection in the setup of a typical operating session below.
*****
Option 24 (Generate Car Orders) will perform a randomized selection of shipments, weighted based on prototype probability ratios, and will then select from Available (Status 0) cars that are assigned to that particular shipment. The status value on selected cars will be modified from "0" to "1" (Inbound). This option plays a major part in the generation of an operating session.
Option 25 (Update Inbound to On Spot) will transition all cars currently having a Status value of "1" (Inbound) to a value of "2" (On spot). This is selected after a session to reflect those cars that have been spotted to an on-layout customer. Note that any cars that had to be left off-spot, e.g. set out to a nearby track due to the customer's spur being full, will remain in a Status of "1" (Inbound), but will have their Track, Seq, and Station values updated to reflect their location. For "one-way" cars (i.e. bridge traffic), Option 25 will update them from a Status of "1" (Inbound) directly to a value of "0" (Available), since they will have moved from staging or interchange, over the layout, and off to staging or interchange on the other end.
Option 26 (Update On Spot to Outbound) will transition all cars currently having a Status value of "2" (On Spot) to a value of "3" (Outbound). This is selected prior to the next session to reflect those cars that are to be pulled. If cars are to remain on spot, checking the Ignore option (described above) will cause them to retain their Status value of "2".
Option 27 (Update Outbound to Available) will transition all cars currently having a Status value of "3" (Outbound) to a value of "0" (Available). This is selected after a session in order to reflect those cars that moved from an on-layout customer to staging or interchange, making them available for selection the next time car orders are generated.
I'll now go through the process of generating an op session, paying particular attention to the FPAX and GATX cars highlighted on the Online Inventory screen shown previously. As mentioned above, selecting Option 24 (Generate Car Orders) will cause one car associated with the particular Shipment to have its Status Value updated to "1" (Inbound). We can then view the cars that the application selected by clicking on Option 11 (Inbound Cars):
Opening the Online Inventory screen again, we can now see how the chosen cars have been updated by the system.
Status values have been changed from "0" (Available) to "1" (Inbound) and the Load/Empty indicator, Block To, ID, Hazardous Materials, Bad Order, and Commodity values have been set appropriately for the selected shipment.
Clicking on Option 22 (Inbound Interchange) will generate an interchange report, formatted to be identical to the prototype report.
As you can see, the GATX tank cars are coming inbound from the UP.
Clicking on Option 21 (Active Trains - BICB) will generate a train list for the inbound BICB (Blue Island-to-Council Bluffs, the IAIS's daily westbound). Again, this is a duplication of the prototype reports.
Since the FPAX covered hoppers are coming back empty from delivering loads of plastic pellets to an IAIS customer in Wilton, Iowa, they appear in the train list, reflecting cars that'll be moving west out of staging.
You might also notice that the train list includes the locomotives assigned to that train. These are configured through the Locomotive Management screen, Option 5 from the main menu:
The train list shows me the tonnage of the westbound BICB, and main menu option 19, "Planned Trains - CBBI Tonnage Forecast", tells me the tonnage that the BICB consist will have to bring back east on train CBBI - Council Bluffs-to-Blue Island. I therefore assign power to BICB according to the tonnage ratings shown in the Locomotive Management screen.
At the end of each operating session, click on Option 25 (Update Inbound to On Spot) indicate those cars that are now spotted to the appropriate customer spur, changing their Status value from "1" to "2". I also manually update the Track, Seq, and Station values of each, as shown in the below screen shot:
With those values updated, the On Spot cars appear in the Yard Report (main menu option 1 - Yard Manager) as shown below, grouped by track:
Prior to the op session in which the cars are to be pulled, clicking on option 26 (Update On Spot to Outbound) will change the Status values of those cars from "2" to "3", as seen here:
That option will also update the car's Load/Empty, Block TO, ID, and Commodity fields to the appropriate return-route values, as shown below. This screen shot also shows that the FPAX covered hoppers seen earlier, being one-way bridge traffic, had their Status values updated to "0" (Available) when Option 25 (Update Inbound to On Spot) was selected.
Here's the Yard Report following those updates. As you can see, when the Load/Empty indicator changed from "L" to "E", the individual tonnage of each car was automatically updated to reflect the appropriate empty value. In the case of these tank cars, the tonnage dropped from 132 to 37 per car. That change is reflected in the total tonnage for each track as well.
Once the empties are pulled and delivered to their return-route destination - the UP interchange at "COB" (Council Bluffs), main menu option 27 (Update Outbound to Available) will be selected, changing the Status values of the appropriate cars from "3" to "0", meaning they'll again be available for selection on future moves. This change will also re-initialize the variable fields in the appropriate records, as shown below.
As shown in this screen shot, any cars that are to remain On Spot can be left in that state indefinitely by simply clicking on Ignore for that particular car.
RailQuik also handles the generation of random events at appropriate intervals through main menu option 6 - Dispatcher's Shift Turnover. Some examples of such events are bad-ordered cars received in interchange, locomotives to be routed to a maintenance point for tests or repairs, and rejected or buggy hoppers at elevators. Because of the way my prototype deals with covered hoppers for grain orders, I also generate those car orders separately through this option rather than including them with the general population of cars for other customers. Covered hoppers on the IAIS are often gathered from multiple points to satisfy a customer car order, and can often be stored at various points on-line pending such orders. Because of the dynamic nature of these moves, it's easier to just generate the orders and let the trainmaster (me) determine from where they'll be filled, just as they're handled on the prototype. I then just hand-write the related moves in on the reports.
I haven't yet determined how to combine the output from multiple queries into a single report for this purpose, so for now I'm just displaying the resulting Datasheet View of each query, a few examples of which are shown below.
To boil all this down to its simplest form, preparation for an op session would consist of the following steps in order:
- Open "13 Outbound Cars" and click on the Ignore box for any that are to retain their Status value of Outbound (e.g. any that were pulled in the previous session but not moved off-layout).
- Select "27 Update Outbound to Available"
- Open "12 On Spot Cars" and click on the Ignore box for any that are to retain their Status value of On Spot (e.g. any that are spotted to a customer and not to be pulled in the upcoming session).
- Select "26 Update On Spot to Outbound"
- Open "11 Inbound Cars" and click on the Ignore box for any that are to retain their Status value of Inbound (e.g. any that had to be left off-spot in the previous session).
- Select "25 Update Inbound to On Spot"
- Select "24 Generate Car Orders"
- Select options 11-13 again and update the Track, Seq, and Station values of all cars currently on the layout.
- Select "19 Planned Trains - CBBI Tonnage Forecast" and "21 Active Trains - BICB" and note the maximum required tonnage.
- Open "5 Locomotive Management" and assign appropriate power to cover the tonnage needs noted above.
- Select "1 Yard Manager", "2 Work List - Road", "21 Active Trains - BICB", and "22 Inbound Interchange" and print the resulting reports.
- Select "6 Dispatcher's Shift Turnover" and update the above printed reports by writing in any grain orders and exceptions generated.
- Physically build the generated train(s) in staging and the generated interchange cuts in the interchange tracks/yards.
Whew! I know that was a lot to read through, but I assure you that this is all much simpler in practice than it sounds in writing. If anyone's interested in trying this for yourself, please let me know, and I'll update this thread once I'm comfortable that this has all the functionality I'll need.
I want to thank Dave Husman for his assistance with randomization and automatic return-route examples for Access, as they saved me a great deal of research and development. Also, thank you to Jim Brown and Perry Sugerman for their help with various Access questions along the way.