Factorio 鉄道信号的工作原理与网络构建
我最初建造的十字交叉口,第一列火车能正常运行,但第二列到达时就在中间停下,整个网络彻底堵塞了。后来我把入口改成链式信号,流量立刻改善了,这才意识到「通常信号和链式信号的作用完全不同啊」。
Factorio 鉄道信号的工作原理与网络构建
我最初建造的十字交叉口,第一列火车能正常运行,但第二列到达时就在中间停下,整个网络彻底堵塞了。
后来我把入口改成链式信号,流量立刻改善了,这才意识到「通常信号和链式信号的作用完全不同啊」。
这篇文章是为在Factorio中文版 1.1~2.0版本中刚开始建造列车网的初学者和中级玩家准备的。
内容从停止位置和预留范围的差异出发,帮助你理解信号的使用方法,并学会自己设计不会堵塞的交叉口和车站配置。
主干线采用双线单向、交叉口入口用链式信号出口用通常信号、车站设在主干线外建立候车线——只要掌握这个基本形式,就能大幅减少常见的死锁问题。
同时,我也会用实际操作角度来解释交叉口内部的链式信号分割问题。
这个在旧教程和2.0版本的运用方式上有所不同,我会梳理得足够清楚,让你不会在配置时迷茫。
本文适用版本与术语前置
本文讨论的是Factorio中文版 1.1~2.0版本的列车信号系统。
通常列车信号和链式列车信号的基本规则在这个范围内是一致的。
初学者必须掌握的「入口用链式信号、出口用通常信号」「火车以区块为单位管理」这些基本原理并没有改变。
官方Wiki的『信号教程』也以这个基本规则为基础来说明的。
本文采用官方Wiki的术语标准。
我们称之为通常列车信号(Rail signal)、链式列车信号(Rail chain signal)、区块、路线预留、交叉口、候车栈(等待线)。
有时会简称为「链式信号」「通常信号」,但指的都是这些正式名称。
术语统一很重要,因为在讲解交叉口时,「在哪里停车」「需要多少空间才能进入」会直接影响理解效果。
前置知识中最重要的一点是,火车只读取前进方向右侧的信号。
双线单向的情况下配置很直接,但如果要实现单线双向,就需要在两侧都放置对应的信号。
这是初见杀手,我一开始也被这个困惑过。
问题不在信号本身的性能差异,而在于火车是否能以正确方向读取那个信号。
关于版本差异,我想提一下交叉口内部的细分。
在1.1版本中基本思想是相同的,但旧的教程图多数假设「交叉口内部不进行太多分割」。
而在2.0版本,社区观察报告「在交叉口内部用链式信号进行细致分割的运用方法逐渐普及」,很多玩家觉得这样的实际操作更方便。
这不是说官方改变了规则,而是基于社区实践积累的运用知识。
本文会保留基本原理,在2.0版本环境下补充这种运用选项。
还有一个中级玩家常忽视的前置知识。
置放或移除信号和铁轨时,所有火车都会重新验证路线。
这在『列车/列车寻路』中有提到,通常很方便,但在大规模路线中效果很明显。
我有一次整理本线信号时,行驶中的火车一齐减速,整个屏幕都弥漫着「糟糕」的气息。
其实没有损坏,只是在进行路线重验证,但火车越多的存档影响越明显。
所以在运行较少的时间段集中修改是个明智的做法。
从下个章节开始,我会以1.1~2.0版本共通的原则为轴心来说明,同时加入2.0版本交叉口内部链式信号分割的便利性。
在这个阶段统一术语后,从区块切分方法、路线预留的表现形式,到候车栈的放置位置,一切都会连贯起来。
Factorio列车信号前置知识:区块与前进方向的概念
区块=安全地带的最小单位
要理解Factorio的列车信号,首先要理解这个概念:「信号将铁轨分割成区块」。
区块是火车的安全领地,基本规则是1个区块只能进1列火车。
这是防止碰撞的基础。
只看信号灯色会很复杂,但本质上火车就是在看「前方的区域是否空闲」。
在直线上等间距放置通常信号,每放一个就会切出新的区块。
前一列火车进入下一个区块后,后续火车才能进入前一个区块。
所以不要把本线看成一条长线,而要看成一系列细分的安全区间连接起来。
我理解了这一点后,信号配置从「符号记忆」变成了「区域划分」。
分岔和合并容易混乱的原因,也是没有在脑子里追踪好区块的切割方式。
如果分支后的两条路最终连接在同一区块上,看起来是不同路线,但火车实际上无法同时进入。
反过来,如果用信号正确分割,不冲突的路线就能各自使用。
交叉口入口用链式信号、出口用通常信号的基本规则,说白了就是不让火车在危险的交叉口中心停留,只在安全的区块中让它停下的设计思路。
这里如果有图A就特别有帮助。看到右行线路上,火车只读取前进方向右侧信号的样子,你会直观地明白「啊,信号不是装饰,而是有方向的出入口啊」。
右行通行与双向线路的信号配置
信号规则中另一个重要点是,火车只读取前进方向右侧的信号。
左边立了信号也没用,只要不对应这个方向的火车,形同虚设。
双线单向被认为是初学者友好的原因就在这里——固定好前进方向后,信号放置也自然对齐了。
以右行为例,上行线和下行线都沿着「那列火车的右侧」排列信号就行了。
但如果想用一条线实现双向通行,情况就完全不同。
同一段线路要容纳两个方向的火车,就必须在两侧都放置对应的信号。
如果只在一侧放信号,看似有信号,实际上另一个方向的火车根本读不到,永远动不了。
说实话,我一开始就在这里踩坑了。
想节省铁轨把线路改成双向的,结果只在一侧放了信号。
火车看起来没法走的样子呆呆地停着。
路线是连通的,却动不了,那真是让人抓狂。
我先疑心了停靠站设置,再疑心了燃料,最后才明白火车无法读取它应该读的那一侧的信号。
这个特性在单线待避或分支中也完全适用。
双向线路技术上可行,但忽略信号放置马上就会导致无法通行或相互对峙。
新手还没习惯的话,往往会造成严重事故。
官方Wiki的『信号教程』也以方向分离的平行双线为基础来介绍的。
列车数量越多,这个「前进方向右侧」的前提对整体设计的影响越大。

Tutorial:Train signals
wiki.factorio.com用区块可视化进行自我诊断
被信号问题困扰时,最快的办法是用区块可视化来查看。
文字理解不如看着着色的线路快。
观察直线、分支、合并、交叉口各自分出多少区块,「为什么这里会堵」就一下子明白了。
看到像图B那样的着色例子,1区块1列火车的原则立刻被可视化,初学者特别受益。
看的诀窍很简单。
首先看该停车位置的前面是否切出了新区块。
其次查看分支或合并内部是否还是一个大区块。
比如交叉口整体都是一种颜色,说明里面只能运行1列火车。
反过来如果分得很细,不冲突的线路就能同时跑多列。
旧图表中常见交叉口不怎么分割,但2.0版本中用链式信号细分会更顺手,实际运用中我也经常这样做。
自我诊断特别容易发现的问题是「看起来是不同路线,却同一种颜色」。
这信号不足,同一区块的信号。
如果分支后的列车在无关的地方被等待,多半就是这个原因。
反过来如果出口刚过的区块太短,列车尾部会留在交叉口,也会出问题。
只看外观配置容易忽视,颜色标记一下就一目了然。
💡 Tip
信号出问题时,先看「火车读取那一侧有没有信号」和「停在的位置后面是不是新区块」这两点,原因切分会快得多。
设计信号时,与其看路线图,不如把它看作着色区间的排列。
一旦能这样看清楚,分支合并的设计就先从「要让哪些地方成为独立区块」决定,之后通常信号和链式信号的分工就自然而然地显现了。
通常列车信号与链式列车信号的区别
通常信号的运作与配置原则
通常列车信号相当简单。
它只看前方1个区块是否空闲,对更远处的分支或交叉口情况一概不管。
前面空着就进,被占了就停。
正因为这种干脆,通常信号特别适合长时间等车的地方。
典型例子是本线等间距分割的地方,或者站前建立的候车线内部。
在这些地方列车停下来很长时间也没事,因为交叉口本身不会被占据。
反倒是提前用通常信号分割成细区块,当前车进一点时后车也能跟进,这样直线的容量就提高了。
我当初学信号时,所有信号都按一样的方式放。
但只用通常信号来进交叉口,很容易发生「进了交叉口,但出口堵了,结果卡在中间」的情况。
看起来信号是绿的,火车进去了,怎么又停了?从通常信号的角度看,它只看前1个区块,所以这个行为是对的。
理解了这一点,就能明白通常信号不是万能的,而是用来在安全等待地点停车的信号。
图C用「停车位置」和「查看范围」来展示这个差异,特别容易理解。通常信号固定区块单位判断进入,所以在需要精确控制停车位置的场景特别强。
链式信号的运作与4个状态
链式列车信号比通常信号谨慎得多。
它看的不是前1个区块,而是到下一个信号或路线出口为止。
而且不仅要看是否空闲,还要确认这段路线能被预留,才决定是否进入。
简单说,这个信号只在确定进去不会动不了的时候才放行。
这个特性在交叉口、分支入口、单线区间入口这样的「中间停车就麻烦」的地方很必要。
官方Wiki的『链式列车信号』和英文版『Rail chain signal』都以这个信号是出口前需要观察状态为前提来解释的。
链式信号有绿、黄、红、蓝4个状态。这是它和通常信号最大的区别。
| 状态 | 含义 |
|---|---|
| 绿 | 后续出口备选点通行无碍,路线预留也没问题,可以放行 |
| 黄 | 后续链式信号之外还需考虑,但作为路线是通得了的状态 |
| 红 | 无法确保到出口的路线,不放行 |
| 蓝 | 出口备选中只有一部分通行可行的状态 |
这个蓝信号是让链式信号显得复杂的元凶。
蓝不是「全部通行」,而是分支的某些方向能走,某些方向堵了的意思。
比如十字交叉口入口亮蓝灯,可能说的是右转方向能通,直行方向被堵了。
我最初对蓝灯的理解很草率,觉得亮了就能走,但实际上每列火车根据目的地判断能否通过,这点特别关键。
另一个容易被忽视的是列车重新寻路。
自动列车在链式信号前等待一段时间后会重新寻找路线。
社区报告说「大约5秒左右」会进行重新寻路,但官方文档没有明确时间(参考:Railway/Train_path_finding)。
所以本文中表述为「等待后进行重新寻路(社区报告约5秒)」,明确说明信息来源是更安全的。
把使用场景整理成表1这样,最接近实际运用的感受。
| 项目 | 通常列车信号 | 链式列车信号 |
|---|---|---|
| 主要用途 | 长直线、本线分割、候车地点 | 交叉口入口、分支入口、单线入口 |
| 查看范围 | 前方1个区块 | 下个信号·出口为止的路线与预留 |
| 长时间停车 | 容易实现 | 原则上不做这种设计 |
| 信号状态 | 绿·黄·红 | 绿·黄·红·蓝 |
| 过度使用的影响 | 细分割容易改善流量 | 预留范围扩大,反而容易堵塞 |

链式列车信号 - Factorio Wiki
wiki.factorio.com在哪等车,在哪绝对不能停
实际配置时如果迷茫了,判断标准相当简单。长时间等也没关系的地方用通常信号,停了会全网堵塞的进口用链式信号。这个原则就能大幅减少事故。
比如在站前建立候车栈,栈内用通常信号。
那儿的作用本来就是让列车排队等,停车是职责。
反过来交叉口进口、环形口流入部、单线进入部,那儿停了后面全部受影响,所以用链式信号。
不在进口就地停车,而是只放通得了的列车进去。
常见的坑是把候车栈内部也全用链式信号。
那样列车太谨慎,总往深处钻不足,候车栈看起来稀稀拉拉,本线那边却在堵车。
我就因为这个搞过气古怪的配置——本线堵,栈区稀。
改回来的办法是候车地点用通常信号分割,交叉口和单线进口才用链式信号,一下就理顺了。
💡 Tip
不确定用哪个时,想象「这地方停30秒会不会糟」就行。没问题用通常信号,会出事用链式信号。
交叉口死锁对策中著名的是把进口改成链式信号的公式调整例子,原理也是一样的。
交叉口内是通过区,候车在外面。
信号差别不在灯色,而在于在哪预留位置,在哪停车的设计思想。
想通这点,通常信号和链式信号就不再是竞争关系,而是分工明确的一对了。
交叉口不堵的信号配置:入口链式,出口通常
T形路口:最少用量的不堵配置
T形路口看似简单,其实最直接体现基本规则的形式。配置核心就一条:进交叉口的各入口用链式信号,出口用通常信号。这样火车会「只在出口通得了时才进」,中间停不住。
具体做法是,从本线进T字的每个入口都放链式信号,交叉口出去后的各方向第一个安全位置放通常信号。
这里有个细节很关键:出口的通常信号别放得太靠近。
交叉口外直接放信号的话,最长列车头出去了尾还在交叉口。
这叫尾部残留,也是T形路口全网停摆的引火索。
我当初用4-8节编成跑的时候,觉得T形路口应该没事就没注意。
结果右转的列车尾部卡在交叉点,对面和左支线都停了。
问题不在信号本身,而是出口后没给1列完整编成的长度。
给出口预留足够空间后,同样的配置就稳定多了。
官方『信号教程』也体现了这个思想——交叉口要改成入口链式信号,保证中间不停。
T形作为入门,图D那样的最小配置就很容易重现。
只要守住「进口才用链式、出口用通常、出口后留1列车的长度」这3点,就相当稳定了。
十字路口:同时通行的内部区块设计
十字交叉口要提高容量,除了分清进出角色,还要在交叉口内部用链式信号细分。目标是不再是一列列轮流通过,而是把不冲突的路线同时流通。
比如北→南和东→西直行会相撞,不适合同时通行。
但北→东右转和南→西右转这样的组合,用内部区块隔离就不会冲突。
把十字中心当一整块的话,实际上不会撞的路线也被占住了。
把中心和弯角切成多个区块,各进口的链式信号只预留必要的那条路,闲着的线路就能并行用上。
社区的改进例子中,十字交叉口有最多4列同时通过的配置。
当然不是每时每刻都4列在跑,关键是从「4个方向最多1列能动」的交叉口升级成「不冲突的列车可以一起处理」的交叉口。
列车数一多,这个差异的效果远超外观。
2.0版本特别容易意识到区块分割,边看边调也方便。
但这儿也很容易过度——链式信号放太多了。
细分本身是有效的,但预留范围越广,就越会出现「看着能过结果却因为远方预约停下」的情况。
我曾经想做个聪明的十字口,从进口前老远就开始放链式信号,结果反而更堵。
原因是列车太谨慎,中间是空的结果却在外面就停了。
分割粒度要根据交叉口大小和流量调整。
小十字不用特别细分,交叉口足够大才需要多区块。
图E看起来就清楚了。设计思路特别直白:进口链式判断进入,内部按冲突点分割,出口通常信号承接。交叉口内部从「候车地」变成「通行道」。
💡 Tip
十字路口堵的时候,先看出口后面能否容纳整列火车,而不是中间信号数。中间设计对了,尾部残留还是会全堵。
分支·合并·单线进口的处理
分支和合并没交叉口那么引人注目,但实际运用中常常成为堵塞源。
原因很简单:路线选择和合并等待在同一地点发生。
基本原则不变——分支前、合并前、单线进口前都用链式信号守卫,通过后回到通常信号。
分支的情况下,列车想走的那条支路出口被堵了,就别让它进分支。
蓝灯就是这种时候——某支路空着但另一支路满了。
链式信号的话根据列车目的地判断,空的支路就通,通常信号的话在分支内部停下,后面本线跟着全堵。
合并需要防的是把合并点当候车地。
一侧列车在合并区等出口,另一侧就进不了,背后本线连锁反应堵上。
所以合并前用链式「只在完全通得了时进」,合并后用通常信号接应。
图F这样素朴的构成看起来不起眼,但列车一多效果就显著。
单线支线的进口也是同理。
单线因为对向车就堵,所以进口用链式守卫,看到单线区间和对面出口位置都空着才进。
单线交叉口的详例中需要很多链式信号的配置也有,重点是用进口的链式信号同时守卫对向和交叉。
进去以后再想就几乎肯定堵。
大规模工厂的时候,往往不是交叉口最堵,而是这种分支·合并的连续段最堵。
看起来简单所以容易后续补设,但实际是容量瓶颈。
交叉口设计得再豪华,前后的分支单线如果还是通常信号,整网流量也改不了。
这些地方恰好最能体现进口链式、出口通常的基本规则。
站点与本线的接线方式:候车栈(堆垛区)防止站前堵塞
候车栈的构成要素
多列火车共用同名站点运行时,不让后续在本线上等是稳定的第一步。
效果最好的做法就是在站前建个堆垛区专门停车。
我当初批量建矿山站,车一停满本线就堵上,后续全部排到交叉口。
站前加候车栈以后,等队就不容易溢出本线了。
这个差别真的很大。
基本构成很直白:本线分出来进候车栈,内部多条平行线整列,空出的站位时就轮流进站。
2个站共用一个资源的话,就做1个共用候车区。
『信号教程』中也介绍了共用候车区的例子。
图G那样的典型配置看起来就像「站前停车场」。
构成要素方面,先是从本线到候车栈的入口分支。
再是把列车分配到各条候车线的扇形分配部。
最后是从各线到站的合并部。
关键是理解候车的主角是堆垛区内的线路,不是站也不是本线。
站满的时候在这儿缓冲,站空了瞬间才放过去。
画配置时,线路数先别急着决定,先想清楚谁在哪儿等。本线是流的地方,候车栈是排的地方,站是作业的地方。角色不分明的话,看起来路连得没问题,运行却直接就渻塞。
进口链式·内部通常的原因
候车栈的信号配置常常让人纠结。基本原则相当明快:进口用链式,内部候车线用通常信号。
进口用链式的理由是要「判断能否放进」。
栈内没空线,后面的站也满,这时通常信号的话列车容易卡在分支,成为分支堵塞源。
进口用链式的话整个候车栈就成了「进场判定卡门」。
反过来栈内全用链式的话整队就别扭了。
候车线的活儿是整列排好队,不需要路线预留。
长时间停车交给通常信号比较自然,链式用在候车地反而会因预留范围扩大而流量变差。
坦白说最初的我也觉得「链式看起来更聪明,全用链式吧」,结果反倒是这样。
候车区越是专门等车的地方,通常信号越趁手。
这套想法对站前位置也同样适用。
长等的地点通常信号,进入可否判定的进口链式,列车的决定就清晰了。
链式的4状态表显示在分支判断场景很强,但这股力量要在进口判定那儿才能体现。
候车列的紧密依赖通常信号的方块作用更素直。
💡 Tip
候车栈堵的话,看在进口分支停了还是在候车线内停了来判因素。前者是进口判定设计,后者可能是容纳列车数或线路长不够。
容纳数和编成长的估算
候车栈「大概2~3列份」就够了的想法,列车一多马上破
RinSeo
Factorio 2,000時間超。100駅以上の列車ネットワーク運用実績と Death World マラソンクリアの経験から、物流・防衛の実践ノウハウをお届けします。