Welcome to Keen Software House Forums! Log in or Sign up to interact with the KSH community.
  1. You are currently browsing our forum as a guest. Create your own forum account to access all forum functionality.

KeenSWH Explanation of pull & push principles in conveyor system

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

  1. George.Mamakos

    Joined:
    Aug 28, 2013
    Messages:
    426
    Trophy Points:
    267
    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
    ammo
    * Ship drill & ship grinder:
    - Send push requests for all of their contents
     
    • Like Like x 3
  2. Don Leo

    Joined:
    Apr 28, 2014
    Messages:
    57
    Trophy Points:
    21
    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

    Joined:
    Jan 29, 2014
    Messages:
    1,385
    Trophy Points:
    61
    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

    Joined:
    Apr 26, 2014
    Messages:
    364
    Trophy Points:
    31
    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

    Joined:
    Sep 25, 2013
    Messages:
    232
    Trophy Points:
    77
    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

    Joined:
    Apr 18, 2014
    Messages:
    1
    Trophy Points:
    16
    Grinders aren't pushing stuff for me...

    [​IMG]
    [​IMG]
     
  7. LightningBeard

    Joined:
    Dec 14, 2013
    Messages:
    9
    Trophy Points:
    16
    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

    Joined:
    Mar 20, 2014
    Messages:
    193
    Trophy Points:
    31
    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

    Joined:
    Apr 21, 2014
    Messages:
    122
    Trophy Points:
    31
    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

    Joined:
    Dec 24, 2013
    Messages:
    100
    Trophy Points:
    31
    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

    Joined:
    Apr 1, 2014
    Messages:
    1,304
    Trophy Points:
    147
    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

    Joined:
    Apr 10, 2014
    Messages:
    78
    Trophy Points:
    86
    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

    Joined:
    Apr 17, 2014
    Messages:
    678
    Trophy Points:
    117
    George,

    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

    Joined:
    Mar 13, 2014
    Messages:
    1,349
    Trophy Points:
    167
    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

    Joined:
    May 5, 2014
    Messages:
    3
    Trophy Points:
    16
    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

    Joined:
    Mar 20, 2014
    Messages:
    193
    Trophy Points:
    31
    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

    Joined:
    May 5, 2014
    Messages:
    3
    Trophy Points:
    16
    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

    Joined:
    Apr 5, 2014
    Messages:
    240
    Trophy Points:
    101
    the push logic is mosty broken in the 1.028 patch, but the information provided was correct for 1.026
     
  19. Mak260

    Joined:
    Apr 21, 2014
    Messages:
    122
    Trophy Points:
    31
    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

    Joined:
    Nov 19, 2013
    Messages:
    239
    Trophy Points:
    31
    manually turn on anything that is not pushing... Just using it doesn't seem to push stuff right now.
     
  21. Neovin

    Joined:
    Apr 10, 2014
    Messages:
    39
    Trophy Points:
    46
    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

    Joined:
    May 6, 2014
    Messages:
    76
    Trophy Points:
    21
    This <---

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

    Joined:
    Oct 21, 2013
    Messages:
    2,129
    Trophy Points:
    237
    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 Public Relations KeenSWH Developer

    Joined:
    Jan 4, 2014
    Messages:
    2,606
    Trophy Points:
    457
    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

    Joined:
    Oct 31, 2013
    Messages:
    27
    Trophy Points:
    16
    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

    Joined:
    Apr 28, 2014
    Messages:
    57
    Trophy Points:
    21
    My experience with cargo containers and their "cansend" flag:

    [​IMG]

    This was 1.028
     
  27. andreasb

    Joined:
    May 8, 2014
    Messages:
    32
    Trophy Points:
    21
    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

    Joined:
    May 18, 2014
    Messages:
    2
    Trophy Points:
    16
    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

    Joined:
    May 13, 2014
    Messages:
    31
    Trophy Points:
    21
    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

    Joined:
    May 23, 2014
    Messages:
    82
    Trophy Points:
    82
    Any port does both input and output. Connected is connected in the conveyor system, so you can set it up anyway you want.