Factorio ltn гайд

Обновлено: 02.07.2024

В последнее время много копий сломано вокруг технических собеседований. Очевидно, что инвертирование двоичного дерева на доске практически никак не связано с практическими навыками реального программиста. Примитивный Fizzbuzz по-прежнему остаётся самым эффективным тестом. Как следствие, выросло внимание к опенсорсным проектам, но оказалось, что это тоже не очень хороший показатель, потому что у большинства профессионалов нет на них времени.

Все эти методы интервью не сравнятся с очень простой метрикой: совместная игра в Factorio. Прохождение всего цикла Factorio — практически идеальный показатель, насколько хорошо человек решает общие технические проблемы. Можно даже настроить прохождение игры на основе будущей должности, чтобы лучше понять, как кандидат справится со своей ролью.

Factorio — это игра об автоматизации. Вероятно, лучшим введением будет этот трейлер, но, по сути, ваша задача — построить автоматизированный завод, способный запустить ракету в космос.

Начинаете с нуля. Добываете вручную железную руду и камень, строите плавильную печь, чтобы плавить руду в железные пластины, из которых можно скрафтить автоматический твёрдотопливный бур. Можно самостоятельно забирать железную руду из бура и закладывать её в плавильню, но более эффективно использовать автоматический конвейер. Потом можно использовать полученное железо, чтобы сделать другой бур, который автоматизирует добычу угля. Затем строится конвейер для забора угля и конвейер для его передачи в бур. Эта крошечная фабрика производит железные пластины, из которых можно сделать третий бур — и начать добычу медной руды, которая позволяет крафтить медные плиты, а из них можно сделать медный провод, необходимый для работы погружного насоса. В сочетании с паровым котлом и паровым двигателем это даёт нам первую электроэнергию. Её можно использовать для исследовательского центра и изобретения новых технологий, таких как сборочный автомат. Как только разблокируете сборочные автоматы, можете использовать сделанный вручную провод для создания сборочной машины, которая будет автоматически изготавливать эти провода.

Игра начинается без установленной цели и почти без направления. Ведущий программист должен быть способен изучить UI и определить цель, а затем разработать план для её достижения. От джуниора ожидают правильного выполнения задач, поставленных ведущим разработчиком. Предполагается, что стажёр работает с наставником, но джуниор должен быть в состоянии самостоятельно устранить основные проблемы со своим кодом, прежде чем просить помощи от старшего. Миддл должен уметь работать независимо, как только ему дают задание, но от него не ожидают архитектурного проектирования.

Конкретные ожидания можно сформулировать так:

Важнейшим аспектом разработки программного обеспечения является умение работать в команде. Это означает координацию усилий с другими людьми, удовлетворение потребностей чужих проектов и сотрудничество с командой, а не самостоятельную работу, когда вы отказываетесь изменить свой дизайн, чтобы помочь интегрировать его с чьей-то работой. Естественно, такие ситуации всё время возникают в Factorio, потому что стандартные чертежи ограничены физическим пространством. В результате нужно тщательно изучить действия других людей, а иногда скорректировать свой дизайн, чтобы вписаться в ограничения по размеру или приспособиться к какому-то чужому чертежу, который занял больше места, чем ожидалось.

Если игрок уйдёт в себя, начнёт делать всё сам или молча исправлять проблемы, это быстро навлечёт на него гнев команды по тем же самым причинам, по которым коллеги злятся на программистов-ковбоев. К счастью, в Factorio есть встроенный эквивалент git blame : он показывает последнего игрока, который изменил любую сущность. Таким образом, если кто-то поставил костыль и не сообщил команде о проблеме, то когда этот костыль наконец сломается — все узнают, кто виноват. Если хотите выиграть, придётся плотно сотрудничать с товарищами по команде.

Одним из главных навыков для программиста является отладка. Это, пожалуй, самая очевидная параллель между Factorio и реальной разработкой ПО. Что-то может сломаться очень далеко от фактического источника проблемы. Способность быстро выяснить реальную проблему — это критический навык, и процесс мышления почти идентичен отслеживанию причины сбоя в реальной программе. Если перестал работать сборочный автомат, сначала нужно проверить выходящие потоки. Потом проверить, какого ингредиента не хватает на входе. Затем проследить ингредиент по фабрике, чтобы узнать, где он производится. И повторять процесс снова и снова, до тошноты.

Отладка в Factorio быстро усложняется. Как только вы построите нефтеперерабатывающий завод, то займётесь крекингом, где на выходе три разных трубы (мазут, дизельное топливо и попутный нефтяной газ), и если какая-то из них по какой-то причине стопорится, то весь завод прекращает работу.

Бывали случаи, когда весь завод останавливался, потому что вы начали исследовать что-то, не требующее жёлтой науки. В результате вы перестали использовать каркасы дронов, которым перестали поставляться электрические двигатели, где использовалась смазочная жидкость, для производства которой забирался мазут. В итоге стопорилась выходящая труба на нефтеперерабатывающем заводе, из-за чего у вас заканчивался попутный нефтяной газ (petrolium), что останавливало производство пластмассы. Как результат, прекращался выпуск сигнального красного провода — и вся фабрика выходила из строя. Опытные игроки предвидят подобные сценарии и внедряют самобалансирующийся крекинг нефти, чтобы всегда гарантировать баланс системы. Такой завод остановится только при закупорке выходящей трубы с попутным газом. Если хорошему программисту дадут сломавшийся нефтеперерабатывающий завод, он обычно сможет проследить проблему до источника, понять, что произошло, и быстро попытаться найти решение. С другой стороны, если человек просто плюхает на землю пару новых резервуаров без веской причины (он абсолютно уверен, что смазочная жидкость будет нужна всегда), то это большой красный флаг на методы решения проблем в его программах.

Подобные ситуации позволяют Factorio точно сымитировать сложные взаимозависимости, с которыми обычно имеют дело программисты. Сложность возрастает по мере добавления в геймплей новых концепций. Это очень похоже на рост сложности от дополнительных уровней абстракции в отладке сбоя, который мог произойти глубоко внутри одного из используемых вами фреймворков.

Сопротивление фидбеку без веских причин — хорошо известный красный флаг. Кроме того, настороженность вызывает программист, который неохотно принимает предлагаемые изменения и отказывается соответствующим образом корректировать будущие проекты. В итоге ему придётся постоянно напоминать о необходимости придерживаться какого-то стандартного способа решения проблемы. При этом человек не объясняет, почему ему не нравится предлагаемый метод. Это потенциально бомба замедленного действия в организации, потому что без присмотра он может быстро накопить технический долг для своих коллег. Такого рода проблемы практически невозможно уловить на традиционном собеседовании, только на стажировке.

Отказ следовать советам — лишь часть гораздо большей проблемы, когда программист не способен нормально интегрироваться в существующую структуру. Есть много способов построить фабрику в Factorio, и каждый требует стандартных методов сборки. Несоблюдение стандартов быстро затормозит всю фабрику, часто тонкими способами, которые не очевидны неосторожному разработчику.

Конструкция магистрального ленточного конвейера включает 4-8 конвейеров, разделённых на две секции (для подземных конвейеров). Он помещается в центре фабрики, и всё производство происходит перпендикулярно ленте. Эта конструкция опирается на несколько правил, нарушение которых может привести к полному хаосу. Во-первых, всегда следует использовать разделитель на выходе с конвейера. Никогда нельзя перенаправлять всю ленту: пустое пространство для другой ленты означает, что вы теряете целый конвейер ресурсов, даже после апгрейда. Во-вторых, все заводы должны масштабироваться перпендикулярно основному конвейеру. Невозможность быстрого масштабирования приведёт либо к огромной потере пространства, либо к невозможности масштабирования производственной линии, потому что она окружена другими производственными линиями.


Логистическая сеть

Есть разные способы построения логистических сетей. Самый простой — с сундуками пассивного снабжения. Но есть другой метод — сундуки хранения с фильтром, который решает проблему с мусором. Оба метода требуют правильной установки ограничителей в нужных местах. Сундуки пассивного снабжения обычно ограничены пространством сундука. К сундукам хранения нужно поставить манипулятор для подключения сундука к логистической сети. И обеспечить не менее N предметов перед установкой манипулятора. Если забыть про эти шаги, то будут впустую потрачены огромные ресурсы. Если программист постоянно забывает про ограничители на выходах — это красный флаг, что человек небрежно относится к производительности в реальных приложениях.

В других случаях команда может применять заранее разработанные чертежи, такие как проект ядерного реактора или роботизированного завода на дронах (bot factory). Они могут быть крайне сложными, но если сделать над собой усилие и разобраться, то они чрезвычайно экономят время. Остерегайтесь кандидатов, которые не хотят настраивать на заводе новый элемент просто потому, что не могут отследить сложную управляющую логику. Или кто бросает попытки разобраться в алгоритме функционирования такого завода, несмотря на очевидные преимущества дронов перед конвейерами.



Неоптимальный дизайн завода на дронах, источник

Поезда в Factorio — прямой аналог многопоточности: один поезд — это один поток выполнения, а каждое пересечение поездов или остановка — место в памяти, куда два потока потенциально могут писать одновременно. Светофоры — это блокировки (или мьютексы). Все баги в железнодорожной сети проявляются точно так же, как состояние гонки в ПО, потому что они буквально являются физическим состоянием гонки. Все компромиссы применимы и здесь — слишком длительная блокировка уменьшает пропускную способность. Неправильное проектирование светофоров обычно вызывает взаимоблокировку, точно так же, как в программном обеспечении, потому что в итоге возникает циклическая зависимость блокировок. Самая распространённая взаимоблокировка — это когда поезд слишком длинный и неожиданно блокирует второй перекрёсток, ожидая входа в первый. Затем этот второй перекрёсток препятствует отправлению другого поезда, предотвращая разблокировку первого перекрёстка.

Количество путей в железнодорожной сети соответствует количеству ядер CPU. Один железнодорожный путь трудно масштабировать больше, чем на несколько полос, потому что пропускная способность всей системы очень быстро ограничивается, даже с зонами ожидания. Наиболее распространённой конструкцией является двухполосная конструкция, по одной полосе в каждую сторону. Здесь появятся проблемы с пропускной способностью, когда возникнет необходимость постоянно разгружать поезда. Поэтому в больших железнодорожных сетях минимум по четыре полосы, причём две внешние действуют как объездные пути, чтобы избежать пересечений, когда это возможно.

Проблемы со светофорами в этих системах могут проявиться через фантастический промежуток времени. Единственный пропущенный светофор в одной железнодорожной сети однажды вызвал взаимную блокировку после корректной работы в течение двух недель. Так же и в программах состояние гонки может проявляться только раз в месяц, когда под сильной нагрузкой возникает высокая конкуренция потоков.

Как и в программном обеспечении, масштабирование производства в Factorio вводит новые проблемы в оригинальный дизайн чертежей и часто требует полной перестройки для максимального повышения производительности, с установкой модулей продуктивности и модулей скорости с маяками. Конвейеры становятся узким местом производительности даже на максимальной скорости ленты, заставляя искать способы разделить конструкции так, чтобы позже можно было вставить больше лент, или разделить заводы на модули.

Управление логистической сетью само по себе становится логистической задачей в конце игры из-за того количества проблем, какое вызывают экспансивные дрон-сети. Как правило, нужно приступить к сегментированию логистической сети и либо использовать поезда для транспортировки товаров между сегментами, либо строить сундуки запроса и снабжения, которые будут передавать товары через границы.

В конце игре для управления поездами требует перехода с push-архитектуры на pull-архитектуру, поскольку push-архитектура не справляется с высокой пропускной способностью. Это неизбежно приводит к использованию функции Train Limit и изучению, как использовать логические сети для кодирования базовой логики, чтобы станция запрашивала поезд только тогда, когда действительно готова полностью заполнить его ресурсами, вместо обычной игровой тактики в начале игры, когда куче поездов просто даётся команда ехать за железом. Новая схема сводит к минимуму количество поездов и при этом гарантирует, что в сети обслуживаются все станции.

Часто бывает, что ограничения входных линий в сборочный автомат и лимиты скорости манипулятора требуют перепроектирования заводов вокруг, точно так же, как высокоскоростные вычисления требуют знания узких мест в работе CPU. Эти узкие места почти никогда не являются проблемой, пока вы не достигнете определённого масштаба, но после этого начинают ограничивать производительность.

В конце концов, заводы становятся настолько огромными, что приходится отказаться от простого дизайна с основным ленточным конвейером или спагетти-дизайна — и перейти на более масштабируемую структуру. Чтобы выйти на мега-уровень, заводы обычно используют либо систему поездов, либо модульную систему, которая примерно соответствует микросервисам или архитектуре с плагинами.

Модульная архитектура пытается сохранить некое подобие основного конвейера, но вместо этого разделяет ленты на заводе и использует модульные блоки, которые принимают стандартные входы и стандартные выходы. Иногда этого можно достичь полностью с помощью дронов, но обычно материалы приходится доставлять по конвейеру на большие расстояния. Это очень похоже на систему модулей для монолитного приложения с теми же компромиссами.

Такие мегабазы представляют верхний уровень дефолтного сервера Factorio. Конечно, существует много модов, которые гораздо усложняют игру.

Space Exploration — полностью переделанная версия Factorio для колонизации космоса. Здесь планеты становятся ограниченными ресурсами, требуя от игроков колонизировать другие миры и использовать ракеты для передачи ресурсов между планетами. Из-за огромной задержки с доставкой материалов между планетами, координация этих баз приводит к возникновению проблем, сходных с глобально распределённой системой баз данных. Даже в логической сети приходится бороться с задержкой, потому что автоматическая система теряет из виду элементы, которые запущены, но ещё не достигли целевой планеты. Если это не учитывать, возникают дубликаты запросов для всех нужных элементов. С точно такой же проблемой сталкиваются распределённые системы при попытке обеспечить согласованность между узлами.

В целом софтверная индустрия не имеет ни малейшего представления, как находить и нанимать лучших разработчиков. Наверное, совместная игра в Factorio стала лучшим техническим собеседованием, которые мы когда-либо проводили. И это нас сильно смущает. Такое собеседование дико непрактично, занимает более 20 часов в мультиплеере с первого раза или 8 часов для команды опытных игроков. Что из этого можно извлечь? Не знаю. Мы, конечно, не можем перейти на Factorio в качестве метода собеседований — с таким же успехом можно просто дать кандидату домашнее задание.


LTN - Logistic Train Network

Adds logistic-train-stops acting as anchor points for building a fully automated, train logistic network. It can handle all possible train configuration. Just send all trains to depots and LTN will pick the best suitable train for a job. LTN cuts the amount of rolling stock required to run a megabase down to 30% or less. With cargo ships installed also adds a logistic port for ships.

3 months ago

This mod adds a "logistic-train-stop" acting as anchor points for building a fully automated, train logistic network.
It can handle all possible train configuration. Just send all trains to depots and LTN will pick the best suitable train for a job.
LTN cuts the amount of rolling stock required to run a megabase down to 30% or less.

Complete Manual and Demos can be found on the LTN subforum.

The manual would be longer than the allowed 1000 characters for descriptions.


Оценок: 147 Железные дороги - Продвинутое руководство Как сделать железнодорожную сеть?
Какие сигналы выбрать и куда их ставить?
Как настроить станции?
Вечные вопросы любого игрока в факторию. Постараюсь на них ответить)


4


1 В избранное В избранном Этот предмет добавлен в избранное.


Wlady
Не в сети 13 окт. 2018 в 4:20 26 авг в 14:24
6,531 уникальных посетителей
236 добавили в избранное
Оглавление руководства



Для чего нужно это руководство?


Основы железнодорожной логистической сети


Сигналы - основы


Проходные сигналы - практическая польза


Сигналы - размер сегментов и длина поезда


Развязки - расстановка сигналов


Станции - настройка


Станции - буферы


Послесловие


Комментарии Для чего нужно это руководство? Некоторые из вещей, о которых я буду говорить, кажутся мне очевидными, но я регулярно встречаю вопросы вида "Как мне настроить железную дорогу?". Базовый туториал даёт все ответы - но на языке, понятном скорее инженерам, чем простым игрокам. Большинство мануалов в ютубе, к сожалению, просто пересказывают это руководство, и показывают простую схемку из пары станций, рельс и поезда или двух. Несколько хороших мануалов с углублением в особенности ЖД в фактории есть в англоязычном ютубе, но они, опять же, недоступны тем, кто недостаточно знаком с разговорным английским. Я не умею снимать ролики для ютуба, поэтому решил написать небольшой мануал, и рассказать о некоторых особенностях, которые проявляются на больших размерах ЖД сетей, а так же постараться объяснить не "как надо делать" а "почему лучше делать так".
Итак, приступим! Основы железнодорожной логистической сети

Как только у вас вместо одного поезда начинает ездить два, пять, десять . сто - начинают возникать проблемы с пропускной способностью. Опыт использования конвейеров говорит - "просто добавь ещё пару путей!". Это неверно. Пропускная способность пути, как правило, крайне высока, и если у вас поезда не идут непрерывно один за другим - нет смысла делать 4-х или тем более 6-ти путевую линию. Как правило, проблемы находятся в других местах - это развязки, станции, и общая организация ЖД сети. И если развязки вы можете перестроить, а к станциям добавить буферы - общая органицация сети с трудом поддаётся переделыванию.

Чтобы минимизировать пробки на развязках, желательно с самого начала строить свою базу и ресурсные модули по цепочке зависимостей. Например, на юге, снизу от базы, у вас добывается руда. Эта руда поездами доставляется на переплавку чуть выше. Оттуда другие поезда везут её дальше вверх - к созданию базовых компонентов. Далее эти базовые компоненты отправляются ещё выше, к местам где они требуются на производствах. Это создаёт некую виртуальную цепочку из добычи - переплавки - производств - продвинутых производств.

Представим её как цепочку A-B-C-D. В этой цепочке поезда ходят по маршрутам A-B, B-C, и C-D. Конечно, производственные линии не такие простые, и будут добавляться маршруты, которым требуется идти по пути B-D, например, однако основная масса поездов уже перестанет мешать друг другу. Просто для примера - если вы об этом не задумались в самом начале, то к середине игры у вас может возникнуть ситуация, когда поезда с рудой едут с южных месторождений, создавая пробки в самом центре базы - потомучто едут по маршруту E-A. Старайтесь избегать таких маршрутов, и если зона добычи у вас на противоположной стороне от переплавки - лучше создайте отдельный обходной путь для поездов с рудой.

Помимо разделения зон маршрутов, оптимизация такого рода даст уменьшение среднего времени, которое поезд проводит в пути - что опять же повышает эффективность тренспортного потока.

Сигналы - основы

Туториал в игре крайне невнятно объясняет разницу между обычными и проходными сигналами, а самые лучшие туториалы в инете ,вместо объяснения логики сводятся к простой рекомендации - ставьте обычные сигналы за развязками, а проходные - во всех остальных местах. В принципе, этот совет работает. Но почему?

Давайте сначала разберёмся, как работают сами сигналы. В игровой механике, все рельсы разделены на виртуальные сегменты, своего рода куски пути. Разделены они как раз этими сигналами. В каждом сегменте одновременно может находится один поезд. Если у вас нет сигналов на путях - то в вашей сети сможет свободно кататься только один поезд, как только вы добавите второй, произойдёт ошибка и они не смогут рассчитать свой маршрут.

Когда в сегменте ЖД находится поезд, все сигналы которые стоят на пути в этот сегмент - т.е. отделяют его от других сегментов - показывают красный. Так же, красный показывают проходные сигналы, которые ведут к этому сегменту. Так же, красный можно включить логикой, что используют для создания безопасных ЖД переходов.

Когда поезд едет по маршруту, он проверяет сигнал на въезд в следующий сегмент, и если он зелёный - едет дальше. Если красный - ждёт. Это может приводить к дедлокам, но про них чуть позже.

После такого базового объяснения становится понятно, что нужно нарезать свою ЖД на сегменты, но всё ещё непонятно - зачем использовать проходные сигналы. Я придумал конкретный пример, который показывает, какое преимущество они дают при правильном применении.

Проходные сигналы - практическая польза

Итак, давайте представим что у нас есть две станции - "Отправление" и "Прибытие". Между ними есть два пути, путь А и путь Б, причём путь А - короче, поэтому поезда всегда выбирают его. Но у пути А есть одна проблема - на нём есть станция "Бологое", и когда на ней стоит поезд - проезд по этому пути заблокирован. Перед станцией есть несколько сегментов, отделённых обычными сигналами - от развилки путей 3 сегмента.

Поезд отправляется из "Отправление" в "Прибытие", подъезжает к развилке, от которой ведут пути А и Б, и выбирает путь А, как более короткий. Он подъезжает к "Бологое", и видит что станция, по чъему-то недосмотру установленная прямо на путях, занята поездом, и проехать дальше нельзя. Поезд занимает первый свободный сегмент перед "Бологое" и ждёт, пока путь освободится. Та же история повторяется ещё с двумя поездами - пока не заполняются все сегменты от развилки до "Бологое". Четвёртый поезд, подъезжая к развилке, видит что путь А(точнее, первый сегмент этого пути) занят, и принимает решение ехать по маршруту Б. Первые три поезда всё ещё стоят.

А теперь представим, что в сегментах между развилкой и "Бологое" установлены проходные сигналы. Что изменится? Обычный сигнал перед "Бологое" показывает красный, проходной сигнал в предыдущем сегменте считывает его и тоже показывает красный, и так - до развилки. Первый поезд подъедет к развилке, увидит что путь А в данный момент заблокирован, и поедет по пути Б.

Мы избежали пробки, материалы оперативно доставлены на станцию назначения, профит)

Отдельный вопрос - кикие сигналы ставить на протяжении пути. Если везде будут стоять обычные - поезда будут набиваться даже там, где проезд в данный момент заблокирован. Если проходные - поезда не будут заезжать на длинный перегон пока другой поезд его не освободит. Тут нужно придерживаться баланса. Если в сети много путей, и нужно чтобы поезда выбирали свободную дорогу - ставьте проходные сигналы, а если у вас длинный перегон (например, между месторождением руды и базой) без вариантов - то на этом перегоне должны стоять обычные сигналы, с промежутком чуть больше длины поезда.

Сигналы - размер сегментов и длина поезда

Это неинтуитивно, но при планировании важно учитывать этот момент. Если вкратце - сегмент пути должен быть длиннее чем ваш состав. Более того - не только виртуальный сегмент - но и реальный, между развязками! Если вы используете составы из поезда и двух вагонов - сегменты должны вмещать в себя такой состав. Если вы используете длинные поезда - сегменты должны быть длиннее, если вы используете очень большие поезда - планируйте свою ЖД сеть очень тщательно! Почему?

Когда поезд въезжает в сегмент ЖД, он может остановиться на его выезде. Возможно, впереди занята станция, на которую ему нужно свернуть, возможно на развязке прямо перед ним сейчас красный. Что произойдёт если поезд длиннее чем сегмент? Его хвост останется торчать в предыдущем сегменте. Это не вызовет особых проблем в случае если предыдущий сегмент линейный, но что если это развязка? Она будет заблокирована до тех пор пока этот поезд не уедет.

Более того, если у нас, например, квадратная сетка ЖД путей, мы можем теоретически получить дедлок - поезд не может выехать на развязку потому что она заблокирована, другой поезд подъезжает к хвосту первого, и тоже стоит перед развязкой, блокируя уже третий перекрёсток,и это продолжается, пока не замкнётся квадрат. 4 поезда стоят, блокируя друг друга. Вы можете подумать, что это гипотетическая ситуация, для этого должно идеально совпасть время, в которое эти поезда подъедут в место X, но даже если вероятность этого крайне маленькая - однажды это случится. Поездов в вашей системе будет становится всё больше, движение всё насыщеней, и в определённый момент где-то поезда совпадут.

Поэтому просто запомните правило - расстояние между развязками должно быть больше, чем самый длинный поезд который будет ездить по этой ветке!

Развязки - расстановка сигналов

В целом, при проектировании развязок можно руководствоваться тем же правилом - на въезде проходные сигналы, на выезде обычные. Но я хочу разобрать это немного подробней.

Когда поезд въезжает на развязку, он её блокирует для других поездов, частично или полностью. Поскольку это может создать пробки, важно чтобы поезд въезжая на перекрёсток имел возможность выехать с него. Ставим на каждом выезде обычный сигнал, а по всей развязке, и перед въездом - проходные. Если поезду нужно после развязки налево, а тот путь сейчас занят - поезд, при правильной конфигурации сигналов, будет ждать перед развязкой, пока путь не освободится.

Любая развязка, особенно сложная, как правило, предполагает возможность поворота любого поезда в любом направлении. Иногда даже разворот. Это выгодно с точки зрения построения кратчайшего маршрута, но превращает развязку, особенно если она четырёхполосная, в мешанину из рельс.

Проектируя развязку, и расставляя на ней сигналы, попробуте установить на неё поезд, и посмотреть, какие направления при этом будут заблокировны (красный сигнал). Идеально спроектированная развязка не должна мешать проезду других поездов. Например, если при правостороннем движении поезд идущий снизу поворачивает направо - он использует развязку, но оставляет свободными все пути кроме пути слева направо. Поезда идущие сверху вниз, справа налево, справа вверх или сверху налево - не должны останавливаться из за первого поезда.

Станции - настройка

Один из эффективных способов экономить топливо и не перегружать ЖД сеть - не гонять поезда порожняком. Я предпочитаю использовать LTN мод для более гибкой настройки, но сейчас расскажу о возможностях ванильной версии - их тоже вполне достаточно, чтобы организовать правильные транспортные потоки.

Как правило, первые эксперименты по настройке сводятся к условям "Ждать полной загрузки" и "Ждать полной разгрузки", но они не дают достаточной гибкости. Поезд может стоять на станции по добыче руды, и ждать пока в него загрузят руду - а добыча истощилась. Поезд в результате бездействует, непрактично. Или ждёт пока его разгрузят - а на переплавке перепроизводство, продукция никуда не идёт и сундуки с рудой тоже забиты. В это же время, возможно, на другой станции руда требуется.

Для полноценного использования станций нам во первых потребуется хак, о котором многие не знают - если станции названы одинаково, то поезд едет на любую из них - во вторых - логические цепи. Начнём с организации доставки угля, например. Добывается он у нас в одном месте, но планируем добавить ещё добычу. Потребляется в топливном блоке, на переплавке железа\меди\стали, и на производстве гранат. Итого у нас две станции поставки и пять станций потребления.

Для начала, именование. Назовём обе станции на которых мы загружаем уголь - "Добыча угля", а все станции на которых мы хотим выгружать уголь - "Выгрузка угля". Названия можете придумывать свои, главное чтобы они повторялись) Теперь, если мы поставим поезду маршрут "Добыча угля" (Ждать полной погрузки) - "Выгрузка угля (Ждать полной разгрузки), поезд будет ездить к любой из этих станций. Но есть проблема - сначала он поедет к ближайшей добыче а от неё - к ближайшей выгрузке. Давайте это исправим.

Если мы присоединим провод к станции и к сундукам - мы можем настроить условие, по которому станция будет работать. Для станции добычи нам нужно условие, что в сундуках достаточное количество угля для полной загрузки поезда. Я обычно использую двухвагонные поезда, поэтому ставлю условие включения - больше 4000 угля. Сундуки передают по проводам, сколько в них угля, и как только его накопится достаточно - станция заработает. Для станции выгрузки нам нужно условие, что в сундуках осталось мало угля. Например, мы хотим чтобы в них поддерживалось не менее 2000 угля - ставим условие: если угля меньше 2000, включаем станцию.

Что теперь происходит? Поезд едет к ближайшей включённой станции. Сначала он забрал уголь на ближайшей добыче, и отвёз его на ближайшую выгрузку. Например, это оказалась плавка меди. Он вернулся к добыче, загрузился, и едет к ближайшей станции, но на переплавку меди только что выгрузили 4к угля, и она их не успела потребить, поэтому поезд отвёз уголь на другую станцию выгрузки. Далее он опять едет за углём, но первая станция ещё не успела добыть 4к угля, поэтому он едет на дальнюю. Если все станции отключены - поезд стоит на той, на которую приехал последней, и ждёт.

Эту схему можно легко расширять - если первый поезд не справляется, мы добавляем второй с теми же настройками, и он тоже будет курсировать между двумя добычами и пятью выгрузками. Когда у нас появятся новые места добычи\потребления, мы просто называем их тем же именем, ставим логику, и они автоматом включаются в сеть. Так же можно добавить в маршрут станцию буфер - всегда включённую, на которой поезда заправляются топливом.

Самый сложный момент в данном разделе - это логические условия. Объяснение того, как они работают, выходит за рамки этого туториала, но внизу я оставлю ссылки на интересные ресурсы.

Станции - буферы

Когда у вас на одном маршруте много поездов, они могут приехать к станции одновременно, и выстроится в очередь на путях, блокируя движение другим поездам. Это не очень хорошо, поэтому для таких случаев увеличивают количество принимающих станций, а так же используют "буферы" из путей.

Выглядит это достаточно просто - от путей выходит отнорок в сторону, разделяется на нужное количество линий, каждая из которых в длину позволяет вместить один или два поезда (опять же ,учитывайте, какие поезда у вас будут заезжать в этот буфер!), а в конце эти линии опять сходятся и ведут на станцию.

Кажется, это самый короткий раздел, и достаточно простой - но он тоже поможет вам избежать лишних пробок)

Послесловие

Я очень надеюсь, что данное руководство поможет вам организовать большую, красивую и стабильно работающую железнодорожную логистическую сеть) Если я забыл рассказать о каком-то важном моменте, или что-то не совсем понятно - спрашивайте в комментариях, отвечу или дополню руководство.

Канал "fed1s Play" - самый адекватный русскоязычный канал по фактории.
Канал "Nilaus" - если вы дружите с английским - тут тоже много фактории.
Канал "Xterminator" - тоже на английском - гайды, прохождения, обзоры модов.
Канал "KatherineOfSky" - много классных прохождений на английском, с разными сборками модов и без.

UPD: Мы наконец-то дождались видео от Фёдора - лучшее руководство по ЖД в русском ютубе, а может и не только в русском)


2


Tutorial / Guide

Updated 2017-10-6: Added Imgur album

Updated 2017-10-7: Added blueprint book and fixed a major inaccuracy regarding buffer chests at provider stations.

All Stations

Connect a constant combinator to the LTN lamp using green wire . Red wire will not work. Either wire color is fine. Disable the constant combinator using the on/off switch until you have completed the station setup.

Limit trains = 1 (or higher if you have a stacker)

Max train size = maximum train length allowed

Name all your depots the same thing (like "Depot" or "LTN Depot")

Constant combinator connected to the LTN lamp

Smart refueling (useful with varying train sizes/configurations)

Configure a single constant combinator to output [0]=1 , [1]=2 , [2]=4 , . [9]=512 , [A]=1024 , etc. (as many signals as largest train -- may use multiple combinators if necessary). Blueprint here

For each station, place a single arithmetic combinator set to each AND [encoded positions of locomotives] → each .

Place an inserter to load each locomotive/wagon spot at a train station, and connect each one to the arithmetic combinator for that station. The inserters should pull from some fuel supply (requester chests work well).

Each inserter should be set to "enable/disable" on the condition [n] > 0 , where n is 0 for the first wagon spot, 1 for the second, 2 for the third, . 9 for the tenth, A for the eleventh, etc.

Optional/recommended depot "junk provider" setup to eliminate residue in trains (only works for solid items, not liquids):

At each depot, place an inserter emptying each cargo wagon into an active provider chest (or torture yourself with some belt-based system for this)

Create a station in the vicinity (accessible by the same logistic network) with a single logistic storage chest loading into the wagon of a 1-1 or 1-1-1 train.

Set up this station as a provider, with the following differences:

Do use filter inserters. These are very important here, because the station will be handling multiple different item types.

Provider threshold = something low, ex. 1 or 5

(Optional) Provider priority = a positive number (prioritizes this station over other ones)

Constant combinator connected to the LTN lamp.

Provider threshold = number of items needed before a train shows up (set this to roughly max capacity of your largest train)

Connect buffer chests to the LTN lamp.

Connect filter inserters (set to "set filter") to the LTN constant combinator.

Constant combinator connected to the LTN lamp.

Provider threshold = a very large number (just drag the slider all the way to the maximum value)

[ requested item ] = however many items you want to keep stocked, but negative (I usually do 3-5 times a normal train shipment); ex. -50,000. Make sure that this number is below the maximum number of items that the unloading station itself can store.

Requester threshold = number of missing items to trigger a deliver (set this to roughly max capacity of your largest train)

Connect buffer chests to the LTN lamp.

Connect filter inserters (set to "set filter") to the output of an arithmetic combinator set to each * -1 → each .

Set the station to "read train contents" (instead of "send signal to train") and connect it along the same line as the filter inserters.

Connect the LTN constant combinator to the input of the arithmetic combinator (the one set to each * -1 → each ).

Читайте также: