1. This forum is obsolete and read-only. Feel free to contact us at support.keenswh.com

Explanation of pull & push principles in conveyor system

Discussion in 'Gameplay Help' started by George.Mamakos, May 1, 2014.

Thread Status:
This last post in this thread was made more than 31 days old.
  1. George.Mamakos

    George.Mamakos Apprentice Engineer

    This text is purely illustrational and cannot be taken for a design document or hard-coded rules that won't ever change. On the contrary - as we keep working on the game and making it better, a lot of the information here might become obsolete.

    Conveyor Push-n-Pull principles:

    Some of the blocks (e.g. assembler, turrets, etc.) that can be connected to the conveyor system can automatically "push" or "pull" items to/from the conveyors. This works as follows:

    1) If the block is set to use the conveyor system, it checks certain conditions when it is necessary (which are different for each block type) that say whether it should send a push/pull request.

    2) If the conditions for the request are met, the block finds another block with inventory that can satisfy the request.

    2a) Push request:

    If the block sends a push request, it finds a suitable remote inventory,
    which has the CanReceive flag set. Once the inventory is found, the
    request is fulfilled by sending the requested items to the remote
    inventory. If the remote inventory does not have enough free space, only
    a part of the request is fulfilled and the request continues by searching
    for another remote inventory.

    2b) Pull request:

    If the block sends a pull request, it finds a remote inventory with the
    CanSend flag set. The remote inventory also has to contain the desired
    items. If these conditions are met, the request is fulfilled by
    transferring the items from the remote inventory.

    Inventories with CanSend flag:
    * Cargo container inventories
    * Assembler output inventory
    * Refinery output inventory
    * Ship drill inventory
    * Ship grinder inventory
    * Collector inventory
    * Connector inventory

    Inventories with CanReceive flag:
    * Cargo container inventories
    * Assembler input inventory
    * Refinery input inventory
    * Reactor inventory
    * Turret & gun inventories
    * Connector inventory

    Requests of the individual block types:
    * Assembler:
    - If the input inventory is less than 60% full, the assembler issues a pull
    request for the needed materials according to the current blueprint
    - If the output inventory is more than 75% full, the assembler issues a
    push request for its contents.
    * Refinery:
    - See assembler; Refinery works similarly
    * Collector:
    - Sends push requests for all of its contents
    * Reactor:
    - If the fuel inventory is less than 60% full, sends pull request for some
    small amount of fuel
    * Turrets and ship guns:
    - If their inventories ar less than 50% full, they send pull requests for
    * Ship drill & ship grinder:
    - Send push requests for all of their contents
    • Like Like x 3
  2. Don Leo

    Don Leo Trainee Engineer

    I have 2 different ships. One ship is a sort of large ship category mining support vessel. Like a mobile headquarters. It has some collectors on top where I dump various items from time to time. Either ores or components. The collectors push everything into the large cargo container on the ship, or the refinery.

    The other ship is a scrapyard with a few more collectors. I dump the same stuff on them. The ship has cargo containers, everything is set to use conveyor system. The collectors do -not- send stuff to the cargo containers. Instead they keep everything until they're full. Once full, items dumped onto them just land on top of them. Components don't get pushed. Ores are sent to the refinery. Refined ores stay in the collectors still.

    Both ships were built in survival. I have no idea why it works on one ship and not the other.
  3. mastpayne

    mastpayne Senior Engineer

    Thank you very much! It is about as I figured, though I think this will help a lot of folks get some answers to questions.

    I have some questions on the 'reactor' pull.

    I have one small ship, 14 small thrusters, 5200kg mass, small ship reactor - max volume 125 liters, and in it I have .08 liters of uranium which will idle it for 3 days, and run it for 1 hour game-time.

    I also have a large cargo ship (16 containers), 20 small thrusters, 3 large thrusters, 868,000kg, and 4 small reactors - max volume each 1000 liters, and in each one I have .16 liters of uranium (3kg ea.) which will idle it for 8 days, and run it full acceleration for 53 minutes game-time.

    On both ships I keep a container connected JUST to the reactors for backup fuel.

    For a reactor to pull fuel at <60% in either the small ship example, or the large ship, is pulling a LOT of uranium (up to 600 liters?).

    You mentioned it will pull a 'small amount', but the question is...how often? ...and will it pull evenly from the source, or will one reactor manage to hog it all?

    Unless you are planning on changing the characteristics of the uranium 'burn' time, (PLEASE don't!..LOL), I would think you could drop the 'pull' on reactors way down. Filling the tank on a 1000 liter reactor is a LOT of uranium, even at 60%.

    UNLESS, there are plans for blocks and mechanics in the future that will really use up power, but then the amount of uranium available could become a problem.

    Yes, I currently have my reactors 'pull' turned off, but for safety's sake, I could see the 'pull' threshold being put down even as far as 1%.

    The 'pull' amount for turrets makes good sense.

    (Off topic question: Are there plans to include the mass of contents of storage containers to the total mass of ships? This will REALLY determine the amount of thrusters needed, therefore the amount of reactors/fuel.)

    Thanks again!
  4. Cyber Cheese

    Cyber Cheese Apprentice Engineer

    Are there plans to allow players more customization of these settings? The thresholds seem simple enough that an in-game setting for blocks would be easy to use. Also, for blocks that can send and receive, the option to turn these on/off separately would be simple enough not to interfere with gameplay.

    As the above poster said, most people wouldn't need their reactor pulling 600L of uranium--but on the other hand a very high intake ship with many small reactors might need this setting. Personally, I would want the assembler to pull materials until 100% capacity, then dump its INPUT if it needs more space. But other people might not want the assembler constantly refilling, etc.
  5. Stoner

    Stoner Apprentice Engineer

    When you say "small amount", what does the really mean? Does it pull just enough to rise above 50%?: in which case, the pull requests would be constant. Or, better yet, pull enough to rise above, say 70%; in this case, another pull would not be issued for a long time.
  6. SJ

    SJ Trainee Engineer

    Grinders aren't pushing stuff for me...

  7. LightningBeard

    LightningBeard Trainee Engineer

    To get grinders to push you have to turn them on. Just clicking to use them doesn't push for some reason yet
  8. xwhitemousex

    xwhitemousex Apprentice Engineer

    Thanks for the explanation about how the current logic works, however we need customizable options for this.

    1. I don't want assemblers to wait until 75% full before pushing items to cargo containers. I want them to continuously push items to cargo containers, just like drills. There is absolutely no reason whatsoever why an assembler should storage items in the output inventory, except when there are no cargo containers on the conveyor network. (ps, same goes for refineries. Just push the ingots into cargo already).

    2. I don't want every cargo container to receive any item. I want to prioritize content for different cargo containers (i.e. some contain ingots, some contain ammo, some contain commonly used components, some contain rarely used components such as medical components and others).

    Giving us options to direct the flow of components and materials will greatly enhance our ability to make logical conveyor networks that suit our needs.

    On example is... I want ammo to go to a container near a landing pad so I can load rocket launchers and gatling turrets for my ships. But I don't want ingots, steel plates, construction components, rifles, drills, iron ore, magnesium ore, interior plates, large steel tubes, small steel tubes and all the other 'rubbish' to fill up a dedicated ammo container which I have conveniently placed right next to where the ships land.

    Please add user customization to conveyor system. Any automated push/send type of logic will never accommodate the hundreds of different needs and layouts every player has for their bases.
  9. Mak260

    Mak260 Apprentice Engineer

    I fully agree with adding much more customization to the conveyor system, including sorting blocks, one-way blocks, the ability to choose weather a block will push/pull instead of just "use conveyor system on/off", the ability to manually set the inventory levels at which a container will send out a "push/pull request", and to set which items certain inventories are willing to push/pull in the first place.
    Did i miss anything?
    (because having ore go through one refinery to get to another refinery automatically with no way to stop it is NOT okay)
  10. GnatTheGnome

    GnatTheGnome Apprentice Engineer

    I have yet to have the "push" work for refineries or assemblers. I dont usually let my refineries get that full, but my assemblers regularly shut off due to output hopper being full.

    Do I need conveyors connected to more than one of the ports on each assembler/refinery? My setup is one large cargo container in the middle of a star pattern of conveyors. 1 collector, 4 refineries, 3 assemblers. Each connected to a separate trunk line to the container.
  11. Andon

    Andon Senior Engineer

    I would like assemblers Input Inventory to be able to have the "CanSend" flag when they're idle - There's been a few times that I've had enough materials for something, but it's been in two assemblers so it wouldn't build.

    Regardless, it's good to see how they work.
  12. Uncle Gus

    Uncle Gus Trainee Engineer

    I guess something must be straight up broken then, because my assemblers stop when they are full, despite having an empty cargo container available on the conveyor network. Also, my small mining ship has two large cargo containers that do not collect anything from the drills.
  13. ViperMan

    ViperMan Junior Engineer


    Thanks for this post, but I'm having issues with collectors... Twice I've had a collector overfill and leave items sitting on the surface (which brought my game-save to an absolute crawl until I cleaned them up.)

    The collectors are connected to a large cargo container and the system is very small - only a few tubes and a few conveyors in-place. This is on a station.

    I know everything is connected because I can manually drag items from the collector directly to the cargo container.

    Any advice?
  14. LFCavalcanti

    LFCavalcanti Senior Engineer

    The question is: Which port is the output and which is the input in the Assemblers and Refineries, because they all have 3 ports each.
  15. kregeth

    kregeth Trainee Engineer

    can anyone explain to me how the conveyor system is supposed to be set up becasue the only thing functioning for me at the moment is pull requests (connectors,gatling guns, assemblers, refineries, generators) but there is no push requests so i need to manually clean every single collector, assembler output, GRINDER(god damn slow), and drill(not necessary but doesn't push materials to cargo holds) when they are getting full. is there any way to ensure the push commands?
  16. xwhitemousex

    xwhitemousex Apprentice Engineer

    Drill and Grinder will send push items immediately to cargo (if cargo is connected to conveyor network) if you go to the control console of your ship and set the grinder/drills in forced ON mode from inside the control panel. If you use mousebutton / hotbutton to run the drills/grinder they do not push items to the container.

    It's a bug, and it's registered in the bug forums.

    There's also a bug with more than 1 refinery or more than 1 assembler on the conveyor network which causes the collector blocks to not push items. This is also a bug and registered in bug forums. Solution (at least in my base) has been to disassemble all extra assemblers and refineries so we only have 1 active on the network. Then collector blocks push as intended.
  17. kregeth

    kregeth Trainee Engineer

    i know the bug that when you use the hotbar to activate the grinders they wont push, but (for instance) my grinder ship, it has 5 grinders at the front that's connected closely to eachother through a line of conveyers behind them, that those connect to the central conveyor system of the ship that then branches off to 4 connectors, one collector in the back and 2 large cargo containers, there is also 4 gatling guns connected on the outer ports of the large containers. all my parts on the ship are set to use the conveyors, but there is no push whatsoever, not even to mention my station with 24 grinders (also set "on" in the control panel when i use them) also has no push commands altough that might be caused by my four assemblers/refineries on the same network

    EDIT: i've tried testing in a fresh save where i prebuilt test ships in creative, the push signals are there it seems, but not on my 3 day old save
  18. Neouni

    Neouni Apprentice Engineer

    the push logic is mosty broken in the 1.028 patch, but the information provided was correct for 1.026
  19. Mak260

    Mak260 Apprentice Engineer

    Theres still the problem where things like containers and refineries become part of the conveyor system rather then just an endpoint.
    ie. ore goes through one refinery to get to another
    and containers act the same way as conveyor joints
  20. Maul555

    Maul555 Apprentice Engineer

    manually turn on anything that is not pushing... Just using it doesn't seem to push stuff right now.
  21. Neovin

    Neovin Trainee Engineer

    just a quick tip, what i use myself until we have full control of the individual behavior of each conveyor is a physical seperation of lines. This can be achived by using a connector and collector to pull finished items/ores from the device then sent to refiners/assemblers/waiting ships/reactors.
    Setting them up in the right way will mean less messing around, you will have to manually separate the specific items Ammo/Uranium but the other parts will nicely run smooth and should keep clear.
    So you set up:

    Collector ///// this is where you dump you ores
    Storage crate ///// buffer
    Connector/s ////This is used to constantly top up refiners (using multiple will distribute items () () () () to each one (Evenly????? do we know?????)

    # # # #
    [] [] [] []
    Refinery/s ////Should be getting distributed supplies
    [] [] [] []
    [] [] [] []
    connector/s //// Now by having the here they will pull items out( but make sure these are
    () () () () using a different port to the refinery than the collector uses to fill them

    # # # #
    [] [] [] []

    Now from here you can do the same seperation technique, buffer in storage, but this time maybe add in an extra port for you reactors/guns, add a buffer to store the uranium/ammo, then use the same system to disburse the items over the range of units you have.
  22. Lechai

    Lechai Trainee Engineer

    This <---

    Push seems to be not working on assemblers and grinders at least, haven't noticed on the others lately.
  23. midspace

    midspace Senior Engineer

    This might readily explain my problem.
    I had built a large scale ship compactor (capture arms with grinders, so I didn't need gravity) on a Station.
    I wanted it to operate on a separate power supply than my main Station so I could turn off everything when not in use.
    The Grinders work great, and the Connector grabs all the components from the system, and spits it out.
    The Collector on the other side however is not pushing all the parts into the Cargo containers.
    It appears to take all the components until full, then it stops accepting them, and lets everything else drift into space.
  24. Xocliw

    Xocliw Public Relations Staff

    Thanks a lot for this help page devs :thumb:! I haven't had time recently to understand exactly how they work in detail like this.
  25. tommygunner70

    tommygunner70 Trainee Engineer

    have a similar setup with the same issues. I usually have this grinder platform not connected to the rest of the base. but I use a connector to take all the items from the grinders and spit them into a collector thats part of the main base. I've figured out that you can put connectors and collectors right beside each other for instant drop and pick up. so that there is no risk of stuff floating off by a rogue gravity field or loosing stuff because of the max float item limit.
  26. Don Leo

    Don Leo Trainee Engineer

    My experience with cargo containers and their "cansend" flag:


    This was 1.028
  27. andreasb

    andreasb Trainee Engineer

    I disagree with this, it should NOT push continuously to cargo. When I press the button for 1 drill to be made in the assembler, I expect all the parts to STAY in the assembler, and not be moved ANYWHERE. That would defeat the purpose of those buttons.
  28. Wonderfish

    Wonderfish Trainee Engineer

    Both parties can, of course, be appeased by making the push optional via routing (requesting the jobs from a certain assembler to be routed to a specific cargo container). This would be the most flexible solution I would think, however I'm not sure how much extra code it would require.
  29. celem

    celem Trainee Engineer

    That is already possible even with WIP conveyor system, both refineries and assemblers can be set up so that their output goes directly and instantly to cargo. They dont need to tailor it to individual needs to be honest, or make it super complex with in-depth targeting options and routing, just make it robust and logical and the Engineers will solve the rest, you can already fully automate a factory and have everything going to storage, just about the only thing I haven't seen accomplished is proper ore sorting since the ores all have uniform density. The one major addition I would like is a finer tuning of connectors to give alternatives to 'all' and the ability of cargo containers to disable conveyoring as well as appear on the control panel systems list, and a fix to assembler input buildup through production cancellation, but they are relatively minor points and much is doable with what we have.

    But using what is already in-game, as-is, you can make automated systems that empty themselves and end up with all the bits in the storage containers just the way you want. You just have to solve the Engineering puzzle ;)

    Cargo Containers do not pull and wont initiate a push. They 'canSend' and will supply pull requests but wont do anything alone. They must be fed as you see from Don Leo's excellent diagrams above, they can be sent to or pulled from. Remember however that a collector always pushes, so if you throw your items a short distance (connector-collector pair) then the collector will fill any and all storage it can reach regardless of how the conveyoring system is actually set up between the storages by pushing to it, you then link the storages back around with conveyors to above the break made by the connector-collector to create a loop so that items are still reachable by refinery/assembler pulls and leave the connector running constantly. Anything meant for storage sticks or loops around, anything the connector moved out of place will sit in storage until something pulls. Automated, overflow-proof factory where nothing is full until all the storage is full and everything is in cargo or in use. Only real drawback is that approximately 1,250 litres of your stuff is unavailable at any given moment due to being in the connector or collector.

    Contradictions to the OP for v1.030
    A refinery pulls until it is full and wont push its output, it's input tray lacks 'canSend' or behaves that way and will never release.
    It's output canSend however and an assembler will pull from it as needed, other ingots will build and fill unless likewise requested. If a connector can reach the refinery it will pull all output

    The assembler pulls as required and wont push output, it's input tray lacks 'canSend' or behaves like it and will never release. If a job is queued in the assembler and cancelled after the ingots have been pulled in then player intervention is needed as no block implemented can pull them out again. The assembler output canSend and if a connector can reach it will pull all. However a connector is the only block that will pull from the assembler.
  30. blkandwhtlion

    blkandwhtlion Trainee Engineer

    Any port does both input and output. Connected is connected in the conveyor system, so you can set it up anyway you want.
Thread Status:
This last post in this thread was made more than 31 days old.