Логистика

Основы сигналов поездов в Factorio | Обычные и цепные сигналы

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

Логистика

Основы сигналов поездов в Factorio | Обычные и цепные сигналы

Железнодорожные сигналы в Factorio работают по-разному: обычный сигнал смотрит только на следующий блок, а цепной сигнал видит весь путь до выхода, чтобы не пускать поезд внутрь пересечения, пока он не сможет полностью из него выехать. Когда вы усвоите эту разницу, пересечения, развилки и однопутные участки станут намного проще — главное правило становится очень простым: цепной на входе, обычный на выходе. Я сам провёл около 3 часов на отладку крестообразного пересечения и по очереди наткнулся на невозможность прокладки маршрута, остановку поезда внутри пересечения и противостояние на однопутной линии, но всё решилось, когда я разделил роли сигналов и переставил их правильно. Эта статья рассчитана на тех, кто хочет научиться диагностировать «почему это забивается» с расчётом на Factorio 2.0 и позже, с разбором основных правил и принципов проектирования пересечений на примерах.

Версия и предварительные знания

Указание целевой версии

Эта статья в основном ориентирована на ванильный Factorio 2.0. Если вы используете расширение Space Age (DLC или крупный коммьюнити-мод), проверьте совместимость отдельно. Основной принцип сигналов (разделение путей на блоки, максимум один поезд одновременно в блоке) общий для версий 1.x и 2.0, здесь я главным образом опираюсь на интерфейс и практику 2.0.

Предполагаемые навыки

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

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

💡 Tip

Качество пересечения или разъезда часто зависит не от количества сигналов, а от того, «полностью ли входит самый длинный состав». Даже если внешний вид идеален, если состав и выходной блок не совпадают по размеру, произойдёт застревание.

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

Что в этой статье не рассматривается

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

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

Детальный дизайн стекера станций тоже в стороне. Стекер — это вершина понимания сигналов, нужно думать о входных затором, длине каждой полосы ожидания и обработке слияния выхода вместе. Здесь я ограничусь основанием: «как разделять блоки» и «не останавливать поезд внутри пересечения».

Я не затрагиваю оптимизацию UPS. Решения о тонком разделении пересечений, использовании однопутных и двухпутных линий, количестве рядом расположенных станций в конечном итоге связаны с UPS. Но это в основном для крупных заводов, с иной целью, чем понимание сигналов. Сначала лучше сосредоточиться на предотвращении заторов и дедлоков, это сделает проектные решения более устойчивыми.

сигналы: только два типа — обычный и цепной

Роль обычного сигнала для поездов

Обычный сигнал для поездов очень прост. Он смотрит только на следующий блок. Если блок впереди свободен, пропускает поезд; если занят, останавливает. Этого понимания достаточно для начала.

Сигналы Factorio разделяют пути на блоки с правилом: в одном блоке одновременно может находиться только один поезд. Обычный сигнал — это основная деталь для создания таких разделений. Поэтому он очень удобен на прямых участках и после выхода из пересечения. На выходе пересечения его поведение предсказуемо.

Цвета сигналов легче запомнить так: зелёный — путь свободен, жёлтый — следующий блок зарезервирован или скоро станет красным, красный — движение невозможно. Жёлтый часто воспринимают как «продолжай с осторожностью», но на самом деле он может появиться и когда поезд физически не может остановиться в пределах тормозного расстояния. Когда я работал с высокоскоростными магистралями, иногда я слишком плотно размещал обычные сигналы, и в результате было больше жёлтых, что привело к постоянному замедлению и ускорению. Даже на одном локомотиве тормозное расстояние может быть довольно большим, так что частые обычные сигналы — не всегда хорошее решение.

С другой стороны, если положить обычный сигнал прямо на входе пересечения, часто происходит вот что: «следующий блок свободен, так что я въезжаю, но потом застрял внутри пересечения, потому что что-то забивается впереди». Это типичная ошибка новичков. Обычный сигнал не виноват, просто его роль другая. Он хорош после выхода из пересечения, но не справляется с тем, чтобы не пускать поезд внутрь. Помните эту разницу ролей.

Роль цепного сигнала для поездов

Здесь стоит упомянуть, что в 2.0 и позже коммьюнити часто ставит цепные сигналы внутри пересечений довольно подробно, и это обычно работает без проблем. Я сам в среде 2.0 много работал с крестообразными пересечениями с разделением маршрутов цепными сигналами, и ощущение того, что «разделение внутри вызывает проблемы» заметно ослабло. Когда вы нацеливаетесь на параллельное движение в несколько направлений, внутреннее разделение часто работает лучше.

Однако это не панацея. При особых условиях пересечения или при высокой плотности потока поездов недостатка места для ожидания на выходе достаточно, чтобы всё застряло. Даже если внутри пересечения множество разделений цепным сигналом, если состав не поместится на выходе, то хвост останется внутри пересечения, произойдёт остановка, и это приведёт к дедлоку. Проще говоря, 2.0 — это не волшебная палочка для разделения пересечений, а скорее более удобный способ применить идею «не останавливать поезд внутри».

На этот счёт в статье «[название статьи о цепных сигналах]» есть хороший пример того, как недостаток места на выходе приводит к проблемам. Я сам при поиске причины заторов сначала смотрю: «есть ли у этого поезда место, где он полностью встанет после выхода?», а не на типы сигналов.

💡 Tip

Правило простое: на входе — цепной, на выходе — обычный. Если сомневаетесь, спросите себя: «где я хочу, чтобы поезд ждал?». Это устраняет большинство ошибок.

www.jias.jp

Простой способ различать сигналы и правило правостороннего движения

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

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

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

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

Так что кратко: обычный смотрит только дальше, цепной — видит весь путь, поезд читает справа. Эти три момента помогут вам объяснить, почему поезд остановился, почти в любой ситуации.

Tutorial:Train signals wiki.factorio.com

Как работают блоки: на один блок — один состав

Блоки, создаваемые сигналами

Сигналы в Factorio — это не просто знаки «ехать» и «стоять». Это границы, разделяющие пути на блоки. Участок между двумя сигналами, или участок, разделённый сигналом, образует один блок, в который одновременно может войти только один состав. Когда вы поймёте это, вы сможете легко объяснить, почему поезд останавливается впереди или почему путь выглядит свободным, но движения нет.

Эта система описана в базовом виде в «Tutorial:Train signals» на вики. Короче говоря, сигналы не прямо управляют поездом, а управляют правом собственности на участок пути по блокам. На пересечениях, однопутных участках, перед станциями — везде поезда не сталкиваются благодаря этому правилу.

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

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

Цвета сигналов и логика резервирования

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

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

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

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

💡 Tip

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

Поиск маршрута и причины ошибки «нет маршрута»

Ошибка «нет маршрута» при наличии рельсов происходит, потому что сигналы читаются неправильно. Типичный случай — сигнал стоит на левой стороне или развёрнут не в ту сторону от направления движения. Поезд читает только правые сигналы, поэтому если сигнал только слева или развёрнут наоборот, для этого направления это всё равно, что сигналов нет.

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

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

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

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

Базовая схема: пересечение — цепной на входе, обычный на выходе

Почему цепной на входе пересечения

Главное правило для пересечений — вход и внутренняя часть цепными, выход обычным. Если это зафиксировать, то будь то T-образное или крестовое, логика сильно упрощается. По ролям: цепной на входе ждёт поезд, чтобы не пускать его внутрь, обычный на выходе пропускает. Вот и всё.

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

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

Внутреннее разделение пересечения и предостережения

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

Порядок действий: сначала определитесь с выходом, потом уже вход и внутри.

  1. Положите обычный сигнал после пересечения на выходе
  2. Перед обычным сигналом оставьте очередь длиной в самый длинный состав
  3. Положите цепной сигнал прямо перед пересечением
  4. При необходимости разделите внутри цепными по маршрутам
  5. Пустите несколько поездов и посмотрите, не останавливаются ли они внутри

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

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

💡 Tip

Смотря на сигналы внутри пересечения, спросите: «если поезд остановится здесь, не заблокирует ли он другие маршруты?» Если да — отправить в очередь на входе, если нет — внутреннее разделение цепным.

Конфигурации сетей поездов - factorio@jp Wiki* wikiwiki.jp

Обычный сигнал на выходе и длина очереди

Обычный сигнал на выходе нужен, чтобы после выхода из пересечения поезд мог спокойно ехать дальше. Когда состав вышел, уже важнее не «не входить внутрь», а «может ли он ехать дальше», поэтому обычный сигнал здесь уместен. Цепной на входе и обычный на выходе — это пара, помните это.

Но самое важное — это не сам сигнал, а достаточно ли места на выходе, чтобы полностью встал самый длинный состав. Если недостаточно, голова выходит, но хвост остаётся в пересечении. Тогда даже если сигналы правильно расставлены, хвост перекроет пересечение, и произойдёт «застревание, несмотря на цепные сигналы». Это не неисправность сигналов, а недостаточное место для очереди.

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

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

Применение на однопутных, разветвлениях и двухпутных пересечениях

Двусторонняя однопутная линия

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

Однако эксплуатация очень сложна.

article.share

R

RinSeo

Factorio 2,000時間超。100駅以上の列車ネットワーク運用実績と Death World マラソンクリアの経験から、物流・防衛の実践ノウハウをお届けします。