Page 1 of 1

Send train to station ID using combinator signal

Posted: Sat Aug 17, 2019 4:13 pm
by doxsroxs
I might not be entirely sane since I have been fiddling with combinator control of trains for years, but this is really driving me crazy.
I have used mods to make this happen before, as well as other peoples train control systems that required mods. I dont mind mods.
But I want the things I build to be accessible in the vanilla game so that I can share them.

There is one single issue preventing full combinator control of trains.

We need to be able to send a train to a station using station ID number.
  • Station ID must be readable via combinator
  • Signal with destination ID to be sent to train via combinator signal (integer, just like train ID)
  • Destination to temporarily override train schedule (this is important to reduce setup time and complexity)
  • Default wait condition options or set wait conditions using combinator signal
Im baffled that so many other features, even more advanced train features are implemented into the game, yet this part is ignored.
There are advanced workarounds to automate sending a train to a specific station when needed.
However, these are all empty shells compared to the glory that could be combinator controlled trains in vanilla!

Please support more automation! This is the one part of factorio that cannot be properly automated today.

Re: Send train to station ID using combinator signal

Posted: Sun Aug 18, 2019 6:58 pm
by Lubricus
Agree something like that should be in the base game.

Re: Send train to station ID using combinator signal

Posted: Thu Aug 22, 2019 7:36 pm
by slippycheeze
doxsroxs wrote:
Sat Aug 17, 2019 4:13 pm
I might not be entirely sane since I have been fiddling with combinator control of trains for years, but this is really driving me crazy.
I have used mods to make this happen before, as well as other peoples train control systems that required mods. I dont mind mods.
But I want the things I build to be accessible in the vanilla game so that I can share them.

There is one single issue preventing full combinator control of trains.
I'm pretty sure the single issue is actually that it is next to impossible to reconcile what you asked for and the existing automation of trains in a remotely comfortable way in the vanilla game. You specifically say that this should...
doxsroxs wrote:
Sat Aug 17, 2019 4:13 pm
Destination to temporarily override train schedule (this is important to reduce setup time and complexity)
...and I don't think that'll be nearly so universal as you think. Especially combined with the relative challenge of building a "train at station -> route to destination" system, many people will find this hurts, because they want a system where they only route some subset of trains with combinators.

Not to mention that you can achieve the same result with circuit-disabled stations, and circuit-controlled dispatch of a single train from a stacker, right now without anything being added. The only cost is that you can't add *new* things to the schedule without editing all the trains, but...
doxsroxs wrote:
Sat Aug 17, 2019 4:13 pm
Default wait condition options or set wait conditions using combinator signal
...both wait conditions, and schedules, are super-hard to configure through the circuit network. It simply doesn't deal with the correct data types well.

Specifically, wait conditions are a nested set of boolean logic operations and individual tests that can be duplicated. The circuit network has no concept of ordering or nesting. How do you express this in circuit signals in a way that is reasonably comprehensible and discoverable:

Code: Select all

(and (or (and (signal-green > 0)
              (fluid-level oil >= 50,000)) 
         (and (signal-red = 0)
              (or (cargo-is-full)
                  (idle-time > 5))))
     (passenger-not-present))
Meanwhile, stations ... have strings as names, and the circuit network just doesn't do strings™.

Re: Send train to station ID using combinator signal

Posted: Wed Aug 28, 2019 9:28 pm
by doxsroxs
slippycheeze wrote:
Thu Aug 22, 2019 7:36 pm
doxsroxs wrote:
Sat Aug 17, 2019 4:13 pm
I might not be entirely sane since I have been fiddling with combinator control of trains for years, but this is really driving me crazy.
I have used mods to make this happen before, as well as other peoples train control systems that required mods. I dont mind mods.
But I want the things I build to be accessible in the vanilla game so that I can share them.

There is one single issue preventing full combinator control of trains.
I'm pretty sure the single issue is actually that it is next to impossible to reconcile what you asked for and the existing automation of trains in a remotely comfortable way in the vanilla game. You specifically say that this should...
doxsroxs wrote:
Sat Aug 17, 2019 4:13 pm
Destination to temporarily override train schedule (this is important to reduce setup time and complexity)
...and I don't think that'll be nearly so universal as you think. Especially combined with the relative challenge of building a "train at station -> route to destination" system, many people will find this hurts, because they want a system where they only route some subset of trains with combinators.

Not to mention that you can achieve the same result with circuit-disabled stations, and circuit-controlled dispatch of a single train from a stacker, right now without anything being added. The only cost is that you can't add *new* things to the schedule without editing all the trains, but...
I disagree, the example you refer to is utterly useless as soon as you want any sort of size and throughput. You also need to manage train arrival at the station and make sure the timing does not interfere with disabling stations to select a new target station.

In comparison, my idea would be much easier. Telling a train to go to station #39 via combinator is exactly as universal as need be to build a very advanced train control system without mods. How do I know this, because I have used several systems, for example, this old one where a majority of the control was handled by combinator.
viewtopic.php?f=190&t=14432
I made extensive modifications to that system with buffer stations and all sorts of crazy things.
In the end I left it and started over with another system since it was limited in throughput and could only send a limited number of trains per minute. (matching system was to slow and I think we had over 400 stations at one point)
However, it used vanilla and combinators as much as was possible and as little modding as was possible.

As you state above, if someone want to build a much more simple system. Being able to tell a train to go to station number x is much easier then any of the current workarounds and above all, it would actually be functional in a larger system as well.
slippycheeze wrote:
Thu Aug 22, 2019 7:36 pm
doxsroxs wrote:
Sat Aug 17, 2019 4:13 pm
Default wait condition options or set wait conditions using combinator signal
...both wait conditions, and schedules, are super-hard to configure through the circuit network. It simply doesn't deal with the correct data types well.

Specifically, wait conditions are a nested set of boolean logic operations and individual tests that can be duplicated. The circuit network has no concept of ordering or nesting. How do you express this in circuit signals in a way that is reasonably comprehensible and discoverable:

Code: Select all

(and (or (and (signal-green > 0)
              (fluid-level oil >= 50,000)) 
         (and (signal-red = 0)
              (or (cargo-is-full)
                  (idle-time > 5))))
     (passenger-not-present))
Please note I wrote default OR set by combinator. Either you use a default wait condition set via the interface or allow combinators to program it.
Its like when you read a roboport. You dont get X robots. You use variables representing what you want to set, just a matter of setting up a translation table.
These variables could then be set quite easily using a constant combinator or built using a multitude of signals via combinator for advanced users.
Im perfectly fine with some limitations here, the main point is that some sort of default wait condition must be in place for a train to behave correctly at the target station so stays there until ordered to drive again.
slippycheeze wrote:
Thu Aug 22, 2019 7:36 pm
Meanwhile, stations ... have strings as names, and the circuit network just doesn't do strings™.
That was never my intention. You can read train IDs using combinator. Use the exact same thing for stations.
To clarify, this is an integer value, not a name. I have updated the original post to reflect this.