回路ネットワークの仕様

Last-modified: 2025-12-08 (月) 17:08:25

ここでは回路ネットワークにおける信号とその計算・判定の仕様を中心に解説する。

ページ案内
基本詳細仕様と応用例ビット演算詳細
完全な目次

基本仕様

回路ネットワークページを参照。

定数回路

指定した信号を指定した値で出力し続ける機器。
複数種類の信号も指定できる。
また、出力を一括でON/OFFもできる。

各機器が参照する定数値(CONST)として利用するほか、動作テスト用にも使える。
例えば、チェストに鉄鉱石が入った時の動作をテストする際、アイテムとしての鉄鉱石を用意しなくとも定数回路で鉄鉱石の信号を出力させれば代用できる。

算術回路

指定した計算式の計算結果を任意の信号で出力する機器。
計算結果が全て0でない時は信号を出力し続ける。
整数のみを扱うため、小数以下は切り捨てられる(例: 23/4 = 5.75 → 5)。

算術回路の入力信号と計算

任意の信号・数値を計算式に用いることができる。演算子は下表の通りに用意されている。
後述する黄色の 16px-signal_each.png(Each wildcard、乗算記号とは異なる)を計算式に用いると全ての入力信号に対する演算も行える。

シンボル演算名演算例注記
+加算1 + 2 → 3
-減算3 - 2 → 1
*乗算3 * 2 → 6
/除算5 / 2 → 2
%剰余5 / 2 → 1整数除算の余りを出力。負数の場合、絶対値で剰余を算出してから左項と同じ符号を付ける*1
^べき乗2 ^ 3 → 8
<<左シフト3 << 2 → 12
(0011 → 1100)
算術シフト
>>右シフト12 >> 3 → 1
(1100 → 0001)
AND論理積13 AND 7 = 5
(1101 AND 0111 → 0101)
左右両方が1のビットは1、どちらかが0のビットは0を返す
OR論理和13 OR 7 = 15
(1101 OR 0111 → 1111)
左右どちらかまたは両方が1のビットは1、両方が0のビットは0を返す
XOR排他的論理和13 XOR 7 = 10
(1101 XOR 0111 → 1010)
左右で異なるビットは1、一致するビットは0を返す

補足

  • 指定した信号の入力が無い場合、その信号の値は 0 として扱われる。
  • いずれの演算も、計算結果が小数になった場合は整数になるように切り捨てられる (ゼロへの丸め)。
  • 計算結果が0の場合と0除算などで計算できない場合は、信号が出力されない。
  • AND/OR/XORはビット演算になる*2
  • 計算結果が値の範囲の上下を超えると以下のようにオーバーフローする。
    • 2,147,483,647 + 1 = -2,147,483,648
    • -2,147,483,648 - 1 = 2,147,483,647

算術回路の出力信号

計算結果は指定した出力信号の値として出力される。

計算式に 16px-signal_each.png が指定されている場合、出力信号にも 16px-signal_each.png を指定することができる。
その場合、演算された信号が個別に出力される(具体例は次項の折りたたみ内を参照)。

入力から計算結果の出力までに1tickの遅延がある。

算術回路の入力信号と出力信号の関係と例

Factorioは入力信号と出力信号を自由に指定できるため、柔軟な運用が可能である。

動作例と説明

最も単純な例を次に挙げる。

算術回路:16px-iron-ore.png * 2 = 16px-iron-ore.png
算術回路の動作:入力された鉄鉱石 16px-iron-ore.png の信号を2倍し、計算結果を同じく鉄鉱石 16px-iron-ore.png の信号として出力する

次のように異なる信号も指定できる。

算術回路:16px-iron-gear-wheel.png * 10 = 16px-iron-plate.png
算術回路の動作:入力された鉄の歯車 16px-iron-gear-wheel.png の信号を10倍し、計算結果を鉄板 16px-iron-plate.png の信号として出力する

さらに、入力信号は1つに限らず、いくつでも受け付けることができ、 16px-signal_each.png を用いて次のように計算に使用できる。

算術回路:16px-signal_each.png * 2 = 16px-signal_each.png
算術回路の動作:受け取った信号A,B,Cの値を各々2倍して各々出力する
例 :

  • 入力信号:A = 1, B = 2, C = 4
  • 出力信号:A = 2, B = 4, C = 8

また、入力信号が 16px-signal_each.png でも、出力信号に通常の信号を指定できる。

算術回路:16px-signal_each.png * 1 = 16px-wood.png
算術回路への入力信号:A, B, C
算術回路の動作:信号A, B, Cを受け取り、(A*1+B*1+C*1)の計算結果を材木 16px-wood.png の信号として出力する
補足:より正確には、A*1→材木 16px-wood.png、B*1→材木 16px-wood.png、C*1→材木 16px-wood.pngとして入力信号ごとに計算して出力する。
この計算と同種の信号は足し合わされる仕様により、結果として出力信号の値がA*1+B*1+C*1になる。

この時、入力信号ごとに端数切り捨て処理が入ることに注意する必要がある。

算術回路:16px-signal_each.png / 2 = 16px-wood.png
算術回路への入力信号:A, B, C
例 :

  • 入力信号:A = 3, B = 2, C = 1
  • 出力信号:16px-wood.png = 2 (≠3)
  • 補足:A/2 = 3/2 = 1.5 → 1、B/2 = 2/2 = 1、C/2 = 1/2 = 0.5 → 0、16px-wood.png = 1+1+0 = 2

このような特殊な信号は他に 16px-signal_everything.png16px-signal_anything.png があるが、算術回路では 16px-signal_each.png のみが使用できる。
詳細は条件回路の項で述べる。

入出力に2色のケーブルを接続した場合の仕様

1つの算術回路・条件回路の入力側にケーブルを2色とも接続した場合、デフォルトでは両ケーブルの全ての信号に対して区別なく演算・条件判定がなされる。
両ケーブルに同種の信号がある場合、その合計値が入力されたとみなされる。
ただし、設定用ウィンドウにある「R」や「G」のチェックボックスを外すことで、レッドケーブル/グリーンケーブルの一方の信号のみを受け取ることもできる。

出力側に2色とも接続した場合は、両ネットワークに同じ信号を出力する。
こちらは一方のみには制限できない。

 

条件回路

指定した条件式が成り立つ時のみ、任意の信号を1か入力数の値で出力する機器。

条件式が成り立つことを真(true) 、そうでないことを偽(false)という。

条件回路の入力信号と条件式

任意の信号・数値に加えて 16px-signal_everything.png 16px-signal_anything.png 16px-signal_each.png (後述)を条件式に指定できる。
比較演算子は下表の通りに用意されている。

シンボル様式
>より大きい
<より小さい
=等しい
以上
以下
等しくない
  • 指定した信号の入力がない場合、その信号の値は 0 として扱われる。

条件回路の出力信号

通常の信号に加えて 16px-signal_everything.png 16px-signal_anything.png 16px-signal_each.png(後述)を指定できる。
出力信号の値は「1」か、「入力数(=入力信号の値をそのまま出力)」から選択できる。

入力から出力までに1tickの遅延がある。(算術回路と同様)

条件回路におけるワイルドカードの指定と効果

条件式におけるワイルドカード

32px-signal_everything.png:全て (Everything wildcard, AND, 通称「赤*」*3)
全ての入力信号が条件式を満たす場合に真を返す。信号が無い場合は真を返す。*4

32px-signal_anything.png:いずれか (Anything wildcard, OR, 通称「緑*」)
全ての入力信号の中で1つの信号でも条件式を満たす場合に真を返す。信号が無い場合は偽を返す。

32px-signal_each.png:それぞれ (Each wildcard, 通称「黄*」)
全ての入力信号に対して個別に条件を判定する。出力信号を通常の信号で「1」とすると真である信号の個数(値ではない)が出力される。

注: 値が0の信号は無信号扱いであることを踏まえると、「16px-signal_anything.png = 0」は常に偽(false)、「16px-signal_everything.png > 0」は事実上「16px-signal_everything.png ≧ 0」として機能する。

 

出力信号におけるワイルドカード

16px-signal_everything.png:全て (Everything wildcard, AND, 通称「赤*」*5)
条件式が真ならば入力信号を全て出力する。条件式が16px-signal_each.pngでない時に指定できる。

16px-signal_anything.png:いずれか (Anything wildcard, OR, 通称「緑*」)
条件式が真ならば入力信号を1種類だけ出力する。(インベントリ順に優先される模様)条件式が16px-signal_anything.pngの時のみ指定できる。

16px-signal_each.png:それぞれ (Each wildcard, 通称「黄*」)
条件式が真となる入力信号のみ出力する。条件式が16px-signal_each.pngの時のみ指定できる。

 

動作例と説明

(例1)A, B, Cの値が全て5を超える場合、16px-wood.png = 1を出力する

入力に接続されている信号:A,B,C
条件式:16px-signal_everything.png > 5
出力:16px-wood.png、1

(例2)A, B, Cの値の内の1つ以上が0を超える場合、Aの値をそのまま出力する

入力に接続されている信号:A,B,C
条件式:16px-signal_anything.png > 0
出力:A、入力数

(例3)Aの値が0を超える場合、A, B, Cの値をそのまま出力する

入力に接続されている信号:A, B, C
条件式:A > 0
出力:16px-signal_everything.png、入力数

(例4)A, B, Cの値すべてが0を超える場合、A, B, Cの値をそのまま出力する

入力に接続されている信号:A, B, C
条件式:16px-signal_everything.png > 0
出力:16px-signal_everything.png、入力数

(例5)A, B, Cの値のうち、0を超える信号について、値をそのまま出力する

入力に接続されている信号:A, B, C
条件式:16px-signal_each.png > 0
出力:16px-signal_each.png、入力数

n9.png
※画像が古いため、条件回路が組み合わせ回路となっています。

(例6)A, B, Cの値が全て0を超える場合、16px-wood.png=1を出力する → ワイルドカードでは不可能

入力に接続されている信号:A, B, C
条件式:16px-signal_everything.png > 0
出力:16px-wood.png、1
…とすると、以下の理由で「A,B,Cの値が全て0以上の場合、16px-wood.png=1を出力する」として動作する。
例えば、A=0、B=1、C=1の場合、A = 信号なし、B=1、C=1と扱われる。
「信号なし」は無視されるので、入力信号の全て(B=1、C=1)が0を超えているとみなされる。
その結果、16px-wood.png=1が出力される。
厳密に「0を超える」としたい場合、条件を「(A > 0) and (B > 0) and (C > 0)」とする必要がある。

入出力に2色のケーブルを接続した場合の仕様

算術回路と同じく、原則として両ケーブルは区別されないが、入力信号に限り一方のケーブルのみを参照するように設定できる。

 

選別回路

複数のモードがあるので個別に紹介する。

他の回路と同様、どのモードでも値がゼロのシグナルは存在しないものとして取り扱われる。

モード一覧

入力を選択 ◢ および ◣

入力された信号群に対し、インデックスと並べ替え順を指定して1つを選ぶ。
以下のプロセスで出力信号を決定する。

  1. 入力一覧からインデックスに指定された信号を取り除く
  2. 降順の場合は値が大きい順 (同じ場合はアイテムIDの小さい順) に並べる。昇順の場合は降順の逆順になる。
  3. インデックスの値に対応する順番の信号を出力する (1つ目が0番になる)。

  • 入力: A = 4, B = 2, C = 3, D = 1, X = 1
  • インデックス: X、降順
  • 並び替えの結果: A, C, B, D
  • 出力: C = 3

入力の種類をカウント #

入力される信号の種類を数え、指定した種類の信号の値として出力する。同一の信号が複数入力された場合は他の回路と同じくそれぞれが合算された結果に対して数えるので、信号の種類の数には反映されない。

ランダム入力 ?

入力からランダムに1つを選んで出力する。出力は指定tick数ごとに再選択される。
更新タイミングはゲーム開始からの時間を参照しているので更新間隔が同じならば必ず同時に更新される

スタック数 📚

入力信号それぞれのスタック数を出力する。信号の元の値は無視される。スタックの概念のないシグナル(流体や実体のないシグナルなど)は出力されない。

ロケット容量 🚀 (要 Space Age)

入力信号それぞれのロケットへの収容量 (ファクトリオペディアやツールチップで確認できる値) を出力する。ロケットに積めないものを表すシグナルは出力されない。

品質フィルター Q (要 Quality)

入力信号のうち、品質に対する条件をパスしたものだけが出力される。

品質転換 Q (要 Quality)

指定の入力シグナルと品質を合わせた信号を出力する。品質は直接指定するか、入力のシグナルから指定する。後者の場合、指定シグナルの最も高い品質が採用される。

ランプ

ランプにケーブルを接続すると作動条件が設定できるようになり、信号に応じたタイミングで点灯・消灯を切り替えられる。
条件には任意の信号・数値に加えて16px-signal_everything.png16px-signal_anything.pngが指定できる。

物流ネットワークへの接続も可能で、同じようにアイテム数などで条件の設定ができる。

lamp01.png
図1

ランプの点灯色の変更

回路ネットワークに接続されたランプは、設定ウィンドウで「色の使用」にチェックを入れると点灯する色を変更できるようになる。
モードが3種類あり、それによって入力方式と表現できる色が異なる。

色マッピング
全9種類ある色信号 (図2) を用いてランプの色を決める。
色要素
赤・緑・青それぞれの値を0~255の範囲で指定し、これにより任意の色を表現する。
例えば、橙色にしたい場合、赤 = 240, 緑 = 131, 青 = 0 と指定する。
パックRGB
Webなどで良く見かけるRGB式の色コードに基づいて色を指定する。
例えば上記の橙色の色コードは#F08300である。
Factorioでは数字の前に0xを付けると16進数とみなされるので、定数回路などで0xf08300と入力してランプに送信すると橙色になる。
なお、色コードと16進数の解説については省略する。
これらを知らない場合、PCでは一般的な表現方法なので自身で調べるか、色要素を使用すると良いだろう。

lamp03.png
図2

注意点

色マッピング方式かつ同一回路ネットワーク内に色信号が複数存在する場合、ランプは赤>緑>青>黄>ピンク>シアン(信号タブの表示順)で優先して点灯する。

関連して陥りやすい誤解の例を図4に挙げる。

定数回路出力:
赤信号 = 1   ランプA条件:赤信号 > 0
緑信号 = 1 → ランプB条件:緑信号 > 0
青信号 = 1   ランプC条件:青信号 > 0

全ての信号とランプが同一のネットワーク内にあるため、全て優先順位の高い「赤色」に点灯している。
lamp04.png
図3

プログラマブルスピーカー

回路ネットワークの信号に基づき、アラート音や音階をサウンドとして出力できる。
他の施設と異なり、動作には回路ネットワークへの接続が必須となる。
特に、チェストやタンクと繋いで在庫量低下時にアラートを出力させる事は設定が簡単かつ有用性が高いので、回路初心者にもおすすめ。
nolink

  • 全体再生:プレイヤーとスピーカーの距離に関係なくサウンドが聞こえるようになる
  • アラートの表示:サウンド再生時にアラート(バイター襲撃時の!マークと同様のもの)が画面下に表示され、クリックすることでマップ確認が可能となる
  • 複数音再生可能:同時発音数を単音から10音まで再生可能にする

この他、上級者向けのお遊びだが、回路信号で音階を入力してメロディを奏でる事もできる。

資源が枯渇する前にアラートで報せる

掘削機とスピーカーを接続して、以下の設定を行うことで、プレイヤーに残り資源が少ないことをアラートで報せることができる。

  1. 電動掘削機の近くにプログラマブルスピーカーを設置し、レッドかグリーンケーブルで接続する
  2. 電動掘削機をクリックし、回路設定ウィンドウで動作モードの「資源を取得」にチェックし、読み取りモードを「鉱石区画全体」にする。
  3. プログラマブルスピーカーをクリックし、「全体再生」にチェック、「アラートの表示」にチェック、「信号による音階」にチェックは入れないまま。
  4. 動作条件の信号に資源の種類(鉄、銅等)を、条件式を「<」、右側に一定値でたとえば「5000」とする。例:銅<5000
    1. 動作条件が真となる間、音が繰り返し再生される
  5. 再生する音色を選択する
  6. アラート表示用のアイコンを選択し、「マップにアイコンを表示」にチェックを入れる。アラート文は空欄のままでも「資源枯渇寸前!」等お好きに。
    1. アラート表示を試してみたければ、条件式を「>」にする

信号による音階再生

回路信号の値で、指定した音色の音階を奏でる。

  • 信号値はその音色の設定可能な音階(ドロップダウンリストの表示順)に対応する。
    • ピアノであれば 1~48 が F3~E7

搬送ベルト

 搬送ベルトはアイテムを運搬・移動する、Factorioの基本になる設置物である。搬送ベルトを回路ネットワーク、もしくは物流ネットワークに接続することにより、「信号の条件によるアイテム搬送停止・再開 」、「搬送中のアイテム情報の出力」が行える。

ネットワークへの接続方法

 搬送ベルトを回路・物流ネットワークに接続するには、1本のケーブルを別の設置物・電柱から搬送ベルトのマスにひく必要がある。図1で示すように、ケーブルを持ち、設置物や電柱から搬送ベルトの好きなマス目をクリックすると、回路ネットワークに接続できる。接続すると、四角い枠のような固有のグラフィックの設置物が表示される。
belt01.png
図1

 もし、そのマス目がロボットステーションの物流ネットワークの範囲に入っているなら、同時に、物流ネットワークにも接続できる。(※物流ネットワークに接続するかどうかは、プレイヤーが選べる。)
 接続を解除するには、該当するマスを撤去するか、ケーブルを撤去する。なお、物流ネットワークの範囲に入っている場合、ケーブルを撤去すると、マスはそのまま残る。

信号の条件によるアイテム搬送停止・再開

条件によって、搬送ベルト上のアイテムの搬送を停止したり、搬送を再開したりすることができる。図2に示すように、「動作モード」の「有効/無効」の欄にチェックを入れると、ウィンドウ下部に「作動条件」の欄が追加され、条件による動作の変更を行える。
belt02.png
図2

 動作モードを有効にすると、条件回路と同様に、ケーブルを通じて他の回路ネットワーク内の信号を入力として受け取り、条件に設定できる。 条件を満たさない場合、ベルト上のアイテムの流れをせき止める。条件を満たした場合のみ、通常通りアイテムを流す。
 なお、物流ネットワークに接続している場合も、同様に、物流ネットワーク内のアイテム状態を条件として、動作を変更することができる。図3で示すように、右上の「物流ネットワーク」のアイコンをクリックして表示される「物流網への接続」のウィンドウで、「接続」にチェックを入れると、物流ネットワークに接続する。チェックを外すと接続を切断する。
belt03.png
図3

チェックを入れた時点で、動作モードは自動的に「有効」になり、直ちに、下部に表示された条件判定にしたがって動作を変更する。
 回路ネットワークと物流ネットワークに同時に接続することもできる。この場合、各ネットワークに設定された2つの条件を「両方満たす」場合のみ、アイテムを流す。

搬送中のアイテム情報の出力

 搬送ベルト上のアイテムを監視し、回路ネットワークに、現在の状態を信号として出力することもできる。図4に示すように、「動作モード」の「ベルト上のアイテムを取得する」にチェックを入れると、ウィンドウ下部に、「読み取りモード」の欄が追加される。
belt04.png
図4

「読み取りモード」の欄では「パルス」「ホールド」の2種類から1種類が選択できる。

パルス
パルスモードは、アイテムが乗ったことを確認すると1tickだけ信号を回路ネットワークに送信する。
1tickしか出力されないので、「アイテムがベルトに乗っていることをランプの点灯で確認したい」といった応用はできない。
一方、信号1パルスがアイテム1個に対応するので、流れたアイテム数をカウントすることに適している。
ホールド
ホールドモードは、アイテムが乗っているあいだ、連続的に信号を送信する。
その区画に載っている数を出力するので、信号の値は1~8の整数である。
ホールドモードでは、アイテムが乗っている間は信号を出力し続ける。
そのため、アイテムが乗っていることをランプの点灯で確認したり、アイテムが載っている間だけ特定の設備を動かしたりする事に適している。

応用例

仕様の理解のために、搬送ベルトの回路ネットワーク接続の応用例を挙げる。

ベルト上を流れるアイテムの数をカウントする

図5のように回路を組むと、ベルト上を流れるアイテムの数をカウントすることができる。

搬送ベルト:「ベルト上のアイテムを取得する」にチェック→「読み取りモード」=「パルス」
算術回路:算術回路の出力と入力をケーブルで接続する。
「入力」=「電子基板*1」、「出力」=「電子基板」
結果:アイテムが1つ通過するたびに、算術回路の出力側の電子基板の信号のカウントが1ずつ増える。

なお、数値をリセットする場合、算術回路の出力を一度右クリックで消去して再度設定する。
(※信号でリセットする方式は下記)
belt05.png
図5

時系列で動作をまとめると以下のようになる。

tick (時刻)イベント出力信号: 搬送ベルト → ネットワーク出力信号: 算術回路 → ネットワーク入力信号: ネットワーク → 算術回路算術回路の計算 (次tickで出力)
0(なし)(なし)(なし)(なし)(なし)
1ベルトに32px-electronic-circuit.pngが進入32px-electronic-circuit.png 1(なし)32px-electronic-circuit.png 132px-electronic-circuit.png 1 × 1 = 32px-electronic-circuit.png 1
2(なし)(なし)32px-electronic-circuit.png 132px-electronic-circuit.png 132px-electronic-circuit.png 1 × 1 = 32px-electronic-circuit.png 1
3(なし)(なし)32px-electronic-circuit.png 132px-electronic-circuit.png 132px-electronic-circuit.png 1 × 1 = 32px-electronic-circuit.png 1
4ベルトに32px-electronic-circuit.pngが進入32px-electronic-circuit.png 132px-electronic-circuit.png 132px-electronic-circuit.png 232px-electronic-circuit.png 2 × 1 = 32px-electronic-circuit.png 2
5(なし)(なし)32px-electronic-circuit.png 232px-electronic-circuit.png 232px-electronic-circuit.png 2 × 1 = 32px-electronic-circuit.png 2

ベルトライン上のアイテムの状態に応じて、動作を変更する

図6のように、ベルトの2点間をケーブルで接続することで、別のベルトのラインにおけるアイテムの状態に応じて、アイテムを流すか流さないか、判断することができる。

左の搬送ベルト:「ベルト上のアイテムを取得する」にチェック→「読み取りモード」=「ホールド」
右の搬送ベルト:「動作モード」の「有効/無効」にチェック→「作動条件」=「電子基板>0」
結果:電子基板が左のラインを流れている時だけ、右のラインの発展基板が流れる。

belt06.png
図6

ベルトを利用した擬似タイマー

図7のように、環状に配置したベルトとインサータをケーブルで接続することにより、任意の間隔でインサータを動かすといった擬似タイマーが可能になる。
図7の例では環状ベルト上のケーブル接続部をアイテム(エイリアンアーティファクト)が通過したときのみインサータが動く。
環状ベルトの長さや、流すアイテムの個数を変更することにより任意の間隔(3秒間に1回など)でインサータを動かすことができ
より細かな流入量調整が可能となる。

環状ベルト:「ベルト上のアイテムを取得する」にチェック→「読み取りモード」=「ホールド」
インサータ:「動作モード」の「有効/無効」にチェック→「作動条件」=「エイリアンアーティファクト=1」

belt07.png
図7

インサーター

全てのインサーターが、回路ネットワーク、もしくは物流ネットワークに接続できる。(図1)
全てのインサーターは、信号の条件による掴み動作の停止と再開・スタックサイズの設定・フィルター設定、および掴んでいるアイテム情報の出力が行える。
ins01.png
図1

ネットワークへの接続方法

 回路・物流ネットワークへの接続は、他の設置物と同様、ケーブルを接続することで行える。また、物流ネットワークの範囲に入っている場合、ケーブルを接続しなくても、インサータをクリックして表示されるウィンドウ右上の「物流ネットワーク」アイコンをクリックすることで物流ネットワークに接続できる。(※物流ネットワークに接続するかどうかは、プレイヤーが選べる。)
 接続してインサータをクリックすると、図2のようなウィンドウが表示され、ケーブルを繋いでいれば「動作モード」の「有効/無効」にチェックが入り、「作動条件」の欄が表示されている。
 回路ネットワークとの接続を解除するには、インサータもしくはケーブルを撤去するか、「動作モード」で「無し」を選択する。
ins02.png
図2

信号の条件による掴み動作の停止・再開

動作モードを有効にすると、回路ネットワークの信号を通じてインサータが動作するかを制御できる。
条件を満たしている間のみインサーターが動作する。
ただし、アイテムを搬送している途中で条件を満たさなくなった場合、現在の搬送を完了してから停止する。

物流ネットワークに接続している場合も、物流ネットワーク内のアイテム状態を条件として動作を変更できる。
回路ネットワークと物流ネットワークに同時に接続することもできる。
この場合、各ネットワークに設定された条件を両方満たす場合のみ、アイテムを掴む。

スタックサイズの設定

インサータは回路ネットワークの信号を基にして、スタックサイズを上書き設定できる。
「スタックサイズの設定」にチェックを入れ、制御シグナルを指定することで、そのシグナルの値がスタックサイズとして設定される。

  • シグナルの値が、現在のスタックサイズ最大値を超える場合、スタックサイズ最大値が設定される。
  • シグナルが未入力か値が負数の場合、スタックサイズは 1 となる。

掴んでいるアイテム情報の出力

 インサータが今現在掴んでいるアイテムの情報を信号として回路ネットワークに出力することもできる。図3に示すように、「動作モード」の「掴んでいるアイテムを取得する」にチェックを入れると、ウィンドウ下部に、「読み取りモード」の欄が追加される。
ins03.png
図3

「読み取りモード」の欄では「パルス」「ホールド」の2種類から1種類が選択できる。パルスモード、ホールドモードは、「搬送ベルト」の項の説明と同様であり、応用例も同様に実現可能であるため、ここでは省略する。

回路ネットワークに存在する信号のアイテムを掴む

インサータは、フィルタ機能によりインサータが掴むアイテムの種類を最大5種類に制限できる。
通常はこれを手動設定するが、回路ネットワークに接続の上でインサーターの「動作モード」を「フィルターを設定」にするとアイテム信号により設定することもできる。
信号で制御する場合は、信号の数値が1以上のアイテムがフィルターに入る。

この例を下図に示す。
ins04.png
この例では、画面下部にある定数回路で、銅板、鉄板、電子基板、発展基板を数値1で出力している。
したがって、この4種類のアイテムをつかむ。
実用上は定数回路ではなく他の施設や条件回路等と接続し、適切な条件設定を行うと状況に応じて掴むアイテムを変えることができる。

なお、回路ネットワーク上に5種類を超える信号が入力されていた場合、インベントリのアイテム作成欄に表示されている順で優先され、低優先の信号は無視される。

応用例

寿司ベルト

Sushi_belt_v2.0.jpg
研究で必要な最大12種類のサイエンスパックを研究所に供給する有名な方法。
通常の直線ベルトと比べると、スループットが劣る代わりに少ないレイアウト制約と土地面積でラインを構築できる。
英語圏の Factorio プレイヤーの間でも "Sushi belt" として知られる。

仕組みは単純で、以下の3部品によりベルト上の各サイエンスパックの数を一定に保つ。

環状ベルト
見ての通り回転寿司のようにサイエンスパックを循環させる。
この内の1ヶ所は回路に繋ぎ、「ベルト上のアイテムを取得する、ホールド (全ベルト)」としてアイテム数をインサーターに送信する。
インサーター&定数回路 (画像下部)
環状ベルトにサイエンスパックを供給する。
この時、ベルト上のサイエンスパックが一定数以下の場合のみ供給するように設定する。
「一定数」を具体的に何個にするかは、環状ベルトの長さとサイエンスパックの種類数によって変わる。
大まかな目安としては、「0.8 × 8 × (環状ベルト1周の長さ) / (サイエンスパックの種類数)」である。
また、指定の際はインサーターに直接数値を入れても良いが、定数回路で一括設定できるようにしておくと調整が楽になる。
分配器 (画像右上)
インサーターは環状ベルトの内側のレーンにサイエンスパックを置くので、分配器でサイエンスパックを外側にも送るとレーンを無駄なく使える。
逆に分配器が無い場合、ベルト上に流せるサイエンスパックの数が半減する。

補足

  • 循環用ベルトや研究所に供給するインサーターを上位の物にした方が、研究所の稼働率が上がる。
    • 理由: 目的色のSPが回ってくるまでの待ち時間で、インサータの実効処理能力が落ちる。
      これを補うために処理能力は過大なくらいでちょうど良い。
  • ベルトに供給するインサーターとしてバルクインサーターは適していない。
    一度に多数を供給するので、環状ベルト上のサイエンスパック数が不安定になる。
  • ベルトに供給するインサーターの代わりにベルトを使っても同等の制御ができる。
    インサーターと比べて挙動が若干不安定になるが、省電力である。

チェスト各種、貯蔵タンク

チェストや貯蔵タンクは、デフォルト設定では中のアイテムを全て信号として送信する。

物流チェストに限り、追加で以下の機能を持つ。

全ての物流チェスト
有効/無効を切り替える。
無効にすると、ロボットによるアイテム輸送が停止する。
インサーターによる搬送は停止しない。
バッファーチェスト・要求チェスト
「リクエスト」が選択できる。
これを選ぶと、受信した信号に基づいて物流要求が設定される。
すなわち、入力した信号と同じアイテムを信号の値と同じ数だけ要求する。
そのほか、以下の性質を持つ。
  • 「読み込む」(内容物の送信) とは排他的で、一方しか設定できない。
  • チェストに格納できないアイテム(流体)や、仮想信号(アルファベット、数、色)は無視される。
  • 値が負数の回路信号は無視される。

ポンプ

ポンプはパイプライン内に設置して流体を送る設置物で、以下の2つを制御できる。

有効/無効
その名の通り、無効にすると動作を停止する。
動作が停止中はポンプが流体を全く通さないので、実質的にバルブとして使用できる。
フィルターを設定
こちらも名前通り、通す流体を指定できる。
かなり特殊な運用だが、これを応用することで1本のパイプで複数種類の流体を交互輸送できる。

ロボットステーション

ロボットステーションは建設・物流ロボットの拠点であると同時に、物流ネットワークを構成するために必須の設置物である。ロボットステーション同士をオレンジの点線の範囲内に置くことで、更に広い物流ネットワークを構成することができる。
 ロボットステーションを回路ネットワークに接続することにより、「物流ネットワークの状態を回路ネットワークに送信する」ことが可能である。

ネットワークへの接続方法

ロボットステーションを回路ネットワークに接続するには、他の設置物と同様に、設置物とロボットステーションをケーブルで接続すればよい。接続すれば自動的に「動作モード」の「物流ネットワークの内容を取得」にチェックが入り、直ちに、物流ネットワーク内のアイテムの数量を、アイテム信号として回路ネットワークに送信開始する。送信したくない場合は、ケーブルを切るか、もしくは「動作モード」の「ロボットの統計を読み込む」にチェックを入れる。

robst01.png

物流ネットワークの状態を回路ネットワークに送信する

アイテムの状態の送信

 ケーブルを接続し、「動作モード」の「物流ネットワークの内容を取得」にチェックを入れることで、アイテムの状態の送信が開始される。そのロボットステーションに接続されているロボットステーションが複数であった場合、範囲内のアイテム数を合計した数値が回路ネットワークに送信される。回路ネットワークでは、遠隔地間をケーブルでつなぐ際には手間がかかるが、これにより、物流ネットワークの広さを活かして信号を活用できる。

物流、建設ロボットの状態の送信

 物流ロボット、建設ロボットの待機状態などの情報を回路ネットワークに送信できる。「動作モード」で「ロボットの統計を読み込む」にチェックを入れると、「待機中物流ロボット数」を仮想信号「X」、「すべての物流ロボット数」を仮想信号「Y」、「利用可能建設ロボット数」を仮想信号「Z」、すべての建設ロボットを仮想信号「T」として送信する。なお、これらの仮想信号は初期値で、任意の信号に変えられる。これにより、ロボットの待機状態などに応じて、設置物の各種動作を制御することができる。
 なお、1つのロボットステーションから、「アイテムの状態」と、「物流、建設ロボットの状態」の両信号を同時に送信することはできない。必要な場合は別のロボットステーションで取得する必要がある。

駅/列車

駅に回路ケーブルを接続すると、駅および駅に停車中の列車が回路ネットワークに接続される。
これにより駅や列車の動作を回路信号に基づいて制御できる。
また、停車中の列車の貨物情報等も、回路ネットワークに送信することができる。

ネットワークへの接続方法

列車ネットワークへ回路ネットワークの状態を送信するには、線路に設置した「駅」に回路ネットワークを接続し、信号を駅が受け取れる状態にする。
任意の回路ネットワーク関連の設置物からケーブルを駅につなぐと、直ちに回路ネットワークに接続される。駅をクリックすると開くウィンドウでは、図1で示すように回路ネットワーク用の設定ペが追加で表示される。
以下の動作モードが選択可能。

  • 駅の有効/無効
  • 列車に送る
  • 列車の内容を取得する
  • 停車中の列車を取得する
  • 列車の上限数
  • 列車数の読み取り

nolink

駅の無効化

「駅の有効/無効」にチェックを入れると、指定した作動条件が真となるときのみ駅が有効になる。
無効になっている駅は、列車数の上限が0であるものとして扱われる。
その挙動は、「列車数の上限」を参照。

一応、外観には小さな差異があり、上限が0の駅は通常と変わらないが、無効の駅は上部の信号が赤点滅になる。

列車に送る:回路ネットワークによる列車の待機条件設定

「列車に送る」にチェックを入れると、その駅に停車中の列車に接続された回路ネットワークの回路信号が送信される。
更に、各列車の発車条件を「回路による」に設定すると、駅経由で受信したの回路信号で発車を制御できる。
train02.png

この時、「回路による」を選択だけして具体的条件を入れ忘れると、常に発車条件不適(false)と判断される。
したがって、設定漏れには注意が必要である。

なお、回路による発車条件も、他の発車条件と同様に複数選択の上で「かつ(and)」や「または(or)」を選択できる。

停車中の列車の内容を取得する

「列車の内容を取得する」にチェックを入れると、その駅に停車中の列車の貨物インベントリ・タンクの内容が、回路ネットワークに送信されるようになる。

  • 対象は、貨物車両・タンク貨車の内容のみ。機関車の燃料インベントリ情報は送信されない。
  • 複数の貨車が接続されていても、すべて合算された値が回路信号として送信される。
  • 自動モードで、さらに停車中のみ送信されることに注意。 列車をアイテム欄から手動で設置した直後は、自動モードでもなく、また(駅の上に置いたとしても)停車中扱いではないことに注意。

停車中の列車を取得する:駅に停車している列車の有無やIDを識別する

「停車中の列車を取得する」にチェックを入れて出力信号を設定すると、その駅に列車が停車している間は回路に信号が送信される。
信号の値は列車のID (列車固有の正の整数) になる。
詳細は以下の通り。

  • ひとつの駅で指定できる回路信号は1種類のみ
  • 回路信号の値は、停車中の列車ごとの固有のID値となる
    • 機関車を再配置したり、貨車を連結/解除するとID値は変わる
    • 機関車にカーソルを合わせると列車のID値の確認ができる

ID毎に積み込む荷物を使い分けるなどの応用も一応はできるが、よほど無理してでも省スペース化したい時でなければ駅を分けたほうが無難。
基本的には停車中の列車の有無を判別するために「ID > 0」の形で使うことになる。

列車数の上限数

回路の値に応じ、この駅に向かう列車の上限数を設定する。
主に、同名駅間で列車を振り分けるために利用する。
詳細は、列車ネットワークを参照。

列車数の読み取り

この駅に向かっている列車の数を出力する。
列車数の上限と同様に停車数の列車もカウントされる。

列車用信号、連動式列車用信号

レールに設置して列車の往来を管理するために「列車用信号」と「連動式列車用信号」が利用できるが、これも回路ネットワークに接続できる。
つまり、信号の状態に応じて列車の運行を制御することができる。
さらに、その反対に列車用信号の状態を回路ネットワークにシグナルとして送信できる。

両信号「信号を閉じる」「信号を取得する」の2つの動作モードが用意されている。両モードを同時使用も可能。

信号を閉じる (信号を強制的に赤にする)

通常、列車用信号は前方の閉塞区間の列車の有無を監視して信号を切り替える。
回路信号を利用すると、所定の条件を満たす時に強制的に赤信号に変更できる。

設定時は、下図のように「動作モード」の「信号を閉じる」にチェックを入れ、出てきた「停止条件」に回路の条件を入力すれば良い。
sig01.jpg
なお、以下2点には注意が要る。

  • 回路で赤信号は強制できるが、青信号は強制できない。
  • 既に通過予約が入っている (黄信号になっている) 時に回路の条件を満たした場合、通過予約している列車が通過してから赤信号になる。

信号を取得する (列車用信号の状態を回路に送信する)

「動作モード」の「信号を取得する」にチェックを入れると、現在の列車用信号の状態(赤・黄・緑・青)に応じた回路信号が回路ネットワークに送信される。
初期状態では、列車用信号色に応じた色シグナルが設定されているが、望むなら任意の回路信号に変更できる。
また、出力される回路信号の値は、1である。

「信号を閉じる」と併用した場合、信号からの出力は以下の通りになる。

  • 「信号を閉じる」の条件を満たしていない → 通常と同様に赤/黄/緑/青が出力される。
  • 「信号を閉じる」の条件を満たしている → 信号を閉じるが無くとも赤信号になる状況なら赤、それ以外は出力なしになる。

応用例:踏切

プレイヤーが線路を横切る際、無防備に横切ると列車に轢き殺されるおそれがある。
高速走行する列車を人の目で見切るのはほぼ不可能なので、「列車が近づいていないか良く見る」ではなく踏切の設置が必要である。
すなわち、人が通行する際は列車を止め、列車が通行する際に人の通行を止めるための設備である。
詳細は、列車ネットワークを参照。

ゲート

 石の防壁に設置する「ゲート」は、通常、普段は閉じて(上がって)おり、プレイヤーが近づいた時のみ開く(下がる)よう動作している。このゲートを回路ネットワークに接続することで、「信号の条件を満たす際にゲートを開く」、「ゲートの開状態時に信号を送信する」ことが可能になる。

ネットワークへの接続方法

 ゲートは石の防壁の間の2点間をゲートで繋げば設置できるが、ゲートの左右端にあたる石の防壁には、赤色(閉状態)、緑色(開状態)のランプが点灯している。この防壁をクリックすると「ゲート コントローラ付きの壁」という特別な名称が付いている。ゲートを回路ネットワークに接続するには、この壁と、任意の設置物とをケーブルでつなげばよい。
 「ゲート コントローラ付きの壁」をクリックすると表示されるウィンドウには、回路ネットワークに関連する専用部分が追加して表示される。以下に示す2つの動作モードが選択でき、両モードを同時に使用することもできる。

信号の条件を満たす際にゲートを開く

通常、ゲートはプレイヤーが近づいた事を察知して自動で開く。
一方、「動作モード」の「ゲートを開く」にチェックを入れると「通行条件」の欄が追加表示される。
このモードをONにすると、通行条件で設定された信号の条件を満たす場合のみゲートが開くようになる。
gate01.jpg

ゲートの開状態時に信号を送信する

「動作モード」の「センサー読み取り」にチェックを入れると、「出力信号」の欄が追加表示される。
このモードでは、ゲートがプレイヤーや列車を検出している時に「出力信号」で指定した信号(値: 1)を送信する。
言い換えると、以下の通りである。

  • 「ゲートを開く」にチェックが入っていない場合、ゲートが開いている時に信号を送信する
  • 「ゲートを開く」にチェックが入っている場合、「チェックが入っていなければゲートが開いていた」という状態になった時に信号を送信する

gate02.jpg

原子炉、給熱塔

以下の2項目を設定できる。

燃料を読み込む
投入されている燃料の種類と数を送信する。
この時、燃焼途中の燃料も1個としてカウントされる。
温度を読み込む
名前の通り、温度を指定した信号で送信する。

蓄電設備(蓄電池)

蓄電設備(蓄電池)は、余った電力をあらかじめ蓄えておき、電力を消費する際に、他のリソースが無くなった場合に放電する、いわば補助電力の供給装置である。これまでも回路ネットワークの活用による応用例はあったが(回路ネットワークの項参照)、 基本的には、最終手段的な電力の二重化/バックアップ用途に利用するのみであった。
 バージョン0.13より、直接、回路ネットワークに信号を送信し、活用することができるようになった。これにより、後述する「電源スイッチによる電力使用優先度の変更 」の応用例などに活用できる。

ネットワークへの接続方法

蓄電設備を設置し、ケーブルをつなぐと、直ちに回路ネットワークへ信号の送信を開始する。蓄電設備をクリックすると開くウィンドウでは、図1で示すように「動作モード」の「充電量を取得する」にチェックが入っている。「出力信号」の欄には初期値で「A」が入っており(プレイヤーが変更可能)、この信号により、蓄電設備が現在蓄えている電力量を、0~100(%)で回路ネットワークに送信する。
batt01.png
図1

電源スイッチ

Factorioにおける電源スイッチは、2点間の電力ネットワークを「接続する」か、「切断する」かをプレイヤーが選択することができる設置物である。手動での接続/切断のほか、回路ネットワークの状態による接続/切断が可能である。

電柱や電源スイッチに繋ぐ銅ケーブル (電線) の編集方法は、電気ネットワーク#電柱を参照。

設置方法とネットワークへの接続方法

電源スイッチは、やや設置の仕方が特殊なので注意が必要である。通常、電柱の範囲に入った設置物は電力ネットワークに入る。しかし、電源スイッチは銅ケーブル (電線) 左右に分かれているユニットそれぞれにプレイヤー自身でつなぐ必要がある。

その後、回路ネットワークに接続するには、信号を送受信したい他の設置物とケーブルで繋げば良い。ケーブルを繋いでから電源スイッチをクリックすると図1のようなウィンドウが開く。通常は電源スイッチの状態はプレイヤーが自分でオフ/オンを選択できるが、回路ネットワークに接続すると、プレイヤーは選択できなくなり、信号の条件を満たす場合のみ、オンを選択するようになる。
ps01.png
図1

応用例:電源スイッチによる電力使用優先度の変更

回路ネットワークに接続した電源スイッチの応用例を下図に示す。
ソーラー発電と蒸気機関発電と蓄電池がある場合、夜にソーラーが切れると電力が蓄えられていても蒸気機関が優先して動いてしまう。
しかし、回路ネットワークに接続した蓄電設備と電源スイッチを使うと、充電が無くなったら蒸気機関を動かすことができる。
ps02.jpg

まず、電源スイッチを、電力ネットワークの間に設置する。
具体的に、上図のように [メイン電力側(ソーラーパネル+蓄電設備)- 電柱-電源スイッチ-電柱- 補助電力側(蒸気機関) ]という形で銅ケーブルを繋ぐ。
次に、メイン電力側の蓄電設備と電源スイッチを、ケーブルで繋ぐ。
最後に、電源スイッチ側で作動条件を「蓄電設備の蓄電量が一定以下の時」とする。つまり、例えば図2で示すように「A=0」とする。
もし、メイン電力側の蓄電設備の蓄電量が0%になると、条件が満たされ、電源スイッチがONになる。
つまり真に電力が不足している場合のみ、補助電力側である蒸気機関の電力ネットワークと接続されて蒸気機関が作動し、電力がメイン電力側に供給される。

掘削機各種、ポンプジャック

これらの採掘施設は作動条件の指定による動作の停止・開始制御とともに、資源の埋蔵量を出力することができる。
nolink

  • 回路信号の種類は、採掘している資源の種類となる
  • 資源が無尽蔵の場合は(ポンプジャックがこれにあたる)、採掘レート(小数点以下切り捨ての整数値)が出力される
  • 燃料式/電動掘削機は、埋蔵量の範囲をその掘削機のエリアと鉱床区画全体を選択できる
    • 掘削機のエリアの埋蔵量は、掘削機のツールチップで確認できる量
    • 区画全体の埋蔵量は、マップ画面で鉱床をポイントすることで確認できる
  • 埋蔵量は5秒ごとに更新される

汲み上げポンプ

海岸に設置して水などを汲み上げる施設で、回路ネットワークに接続すると有効/無効を制御できる。
無効にするとポンプが汲み上げを停止する。

組立機、その他レシピ設定可能な生産設備

以下の6項目を設定できる。

有効/無効
無効にすると生産が停止する。
生産1サイクルの進行途中だったとしても、途中のまま停止する。
レシピを設定
レシピまたはアイテムの信号を受け取ると、レシピをその通りに設定する。
値が負の信号・生産設備が対応していないレシピやアイテムの信号・アイテムでもレシピでもない信号は、無視される。
有効な信号が複数ある場合、最初の信号のレシピが採用される。
この「最初」は信号の並び順準拠 (≒レシピ一覧にて最も左上にあるものが優先) である。
また、レシピを変更した時は中のアイテムを全て搬出する必要がある。
たとえ「鉄の歯車→鉄筋」のように原料が変わらないレシピ変更でも、いったん搬出する必要がある。
製造所と信号の組み合わせによってはその信号のアイテムを完成品とするレシピが自動的に選択される。
例:化学プラントに水の信号を与えると蒸気凝縮になる。ただし方解石処理が未研究なら氷の融解になる。
読み取る
生産設備内のアイテムの種類と数を送信する。
原料と生産物の双方を送信する。
この時、デフォルトでは進行中の生産1サイクル分の原料も送信する。
これを送信対象外にしたい場合、「製作中のものを含める」のチェックを外せば良い。
なお、燃料として搬入しているアイテムは送信しない。
材料を読み取る
その名の通り、設定中のレシピの材料を読み取る。
値は1サイクル分の材料数になる。
完成したレシピを読み取る
レシピが1サイクル完了すると、完了した瞬間に 1 tick だけ指定した信号を値1で送信する。
生産性が高い場合、サブゲージによる追加生産時にも信号が送信される。
なお、メインゲージ分とサブゲージ分の生産が全く同じ tick で完了した場合に限り、値が2になる。
稼働状況を読み取る
生産設備が動作 (生産) しているときのみ指定した信号を値1で送信する。
電力不足により稼働率が低下していても生産が進んでさえいれば送信する。

タレット各種

以下の項目を設定できる。

有効/無効
無効にするとタレットが動作を停止する。
優先標的リストを設定・リストにない標的の無視を設定 (長距離砲タレットでは設定不可)
手動設定に同じ。
弾薬を読み込む
その名の通り、タレット内の弾薬の種類と数を送信する。
レーザータレットやテスラタレットでも形式的には設定できるが、弾薬が無いので何も送信しない。

レーダー

同一サーフィス上に複数のレーダーを設置の上で各々にケーブルを接続すると、それらの間で無線通信を行う。
挙動としては、レーダー同士が長いレッドケーブルとグリーンケーブルで繋がれたものと同一である。
すなわち、レーダーを挟んで両側の回路ネットワークが1つネットワークとみなされ、同一のネットワークIDが付与される。
必然的にレーダーに送信/受信の区別は無い。
なお、レーダーの電力が不足すると、無線通信が切れてレーダー同士が別々の回路ネットワークに分断される。

ロケットサイロ (Space Age 導入時)

以下の2つがある。

読み込む
ロケットインベントリの内容物の種類と数を送信する。
ロケット製造用の材料 (制御基板など) や廃棄スロットは無視される。
軌道上の要求を読み込む
名称の通り、今の惑星の軌道上に停留している宇宙プラットフォームから要求されているアイテムの種類と数を送信する。
要求の一部が満たされている場合、不足分のみを送信する。

カーゴ降着パッド (Space Age 導入時)

「読み込む」と「リクエスト」が選択できる。
機能は要求チェストと変わらない。
なお、有効/無効は無い。

アステロイド収集機 (要 Space Age)

以下の3つが設定できる。

有効/無効
無効にするとアステロイドの収集を停止する。
無効化前に収集したアステロイドはインサーターで取り出せる。
フィルターを設定
その名の通り、回路信号に基づいてフィルターを設定する。
ただし、アステロイドの破片以外の信号や値が負の信号は無視する。
読み込む
チェストと同じく保管中のアステロイドの種類と数を送信する。
この時、デフォルトではアームが掴んでいるアステロイドも送信する。
これを送信対象外にしたい場合、「掴んでいるものを含める」のチェックを外せば良い。

宇宙プラットフォームハブ (要 Space Age)

以下の項目がある。

読み込む
チェストと同じく保管中のアイテムの種類と数を送信する。
プラットフォームに送る
駅の「列車に送る」と同じく、プラットフォームの発車条件判定に回路信号が利用できるようになる。
起点を読み込む・終点を読み込む
プラットフォームが移動中の場合、移動元惑星の信号を値1で、移動先惑星の信号を値2で送信する。
ここで言う移動元/先は、現在地の直前/直後の惑星を指す。
例えば、時刻表上はヴルカヌスからアクィロに直行だとしても、ヴルカヌスとグレバの間にいる時はヴルカヌス1・グレバ2になる。
その後、グレバを通過するとグレバ1・アクィロ2になる。
また、惑星軌道上に停留している場合は、移動元も移動先も停留中の惑星とみなされる。
したがって、起点・終点の双方にチェックを入れていれば、停留中の惑星が値3で送信される。
スピードを読み込む
名称の通り、プラットフォームの移動速度を送信する。
受けたダメージを読み込む
宇宙プラットフォーム上の施設が受けたダメージの累計値を送信する。
ハブ本体だけでなく、基盤・生産施設・タレット・防壁などなど、プラットフォーム上の全ての施設が集計対象になる。
さらに、累計なので修理や再建設をしても値は減らない。
時刻表上の次の惑星に到着すると、値が0にリセットされる。

回路ネットワークの応用例

ラッチ回路

参考サイト

以下の様な動作を行う回路を「ラッチ回路」と言う。

  1. SET:ある条件1(一般にトリガーという)を満たすと、「ON状態」にする。
  2. RESET:別の条件2(一般にリセット値という)を満たすと、「OFF状態」にする。
  3. STAY:条件1も2も満たしていない時、今の状態を維持する。

実践上は「条件1: X < 30」「条件2: X > 50」のようにし、Xが多少変動しても ON/OFF が頻繁には切り替わらないようにするために使用する。

シングルプレイかつメガベースを目指す予定が無いなら、ON/OFFが頻繁に切り替わっても害は無い。
そのため、単純な条件回路だけで十分であり、ラッチ回路にする必要は無い。

一方、電源スイッチを筆頭に装置のオン/オフの切り替えがパソコンに小さくない負荷を掛けるケースがある。
そのため、マルチプレイまたはメガベースを目指すなら、ラグや処理落ちを避けるためにラッチ回路が必要不可欠な手法と化す。

ラッチ回路の基本構造

Factorioにおけるラッチ回路の基本的な設計は、以下の通りである。
この例では、蓄電池の充電量が50%を切ると電源スイッチを接続、90%を超えると切断する。

Latch_v.2.0__1.jpg
※条件回路は、グリーンケーブルで入り口と出口をループさせる。

画像中の文字が小さめなので、各施設の設定を以下にも記す。

  • 蓄電池: 蓄電量を取得する (出力信号: A)。
  • 条件回路
    • 条件: (A > 90) OR {(A > 50) AND (✗ > 0)}
    • 出力: ✗ = 1
  • 電源スイッチ: 有効/無効 (条件: ✗ ≤ 0)

冒頭の解説でのトリガーに相当するものが A > 90 、リセットに相当するものが「A > 50 でない」 (A ≤ 50) である。

この回路は大まかには以下の挙動を取る。

  1. 初期状態 (蓄電量0%) では電源スイッチが接続されている。
  2. 蓄電量が90%を超えると、条件 A > 90 が満たされて条件回路から ✗ = 1 が出力、電源スイッチが切断される。
    それと同時に、グリーンケーブルがループされているので条件回路自身にも ✗ = 1 が入力される。
  3. その後に蓄電量が70%程度に下がっても、(A > 50) AND (✗ > 0) が満たされているので、電源スイッチの切断が維持される。
  4. 更に蓄電量が下がって50%を切ると、A > 90 も (A > 50) AND (✗ > 0) も満たされない。
    したがって、✗ の出力が停止して電源スイッチが再接続されるとともに、条件回路自身に入力されていた ✗ = 1 も停止する。
  5. その後に蓄電量が70%程度に上がっても、もはや ✗ = 1 が入力されていないので (A > 50) AND (✗ > 0) が満たされない。
    したがって、電源スイッチは切断されない。

複数信号対応のラッチ回路

条件設定が複雑になるが、入力信号が複数ある場合も条件回路1つでラッチ回路を構築できる。
ただし、条件 (閾値) は全ての入力信号に対して同じものが適用される。

代表的な用途は、石油精製における分解系レシピのように複数の流体やアイテムの生産量のバランス取りが必要な状況である。
以下の例では、入力信号が20kを超えたら「当該信号 = 1」を出力、15kを切ったら出力停止としている。
なお、ケーブルの接続は前項の蓄電池&電源スイッチと変わらないので省略する。

Latch_v.2.0__2.jpg

  • 1行目: Rのみ、16px-signal_each.png > 20k
  • 2行目: Rのみ、16px-signal_each.png > 15k
  • 3行目: Gのみ、16px-signal_each.png > 0
  • 条件全体: 1行目 OR (2行目 AND 3行目)
  • 出力: 16px-signal_each.png = 1

16px-signal_each.png ばかりで分かりにくくなっているが、実態としては蓄電池の例における A を レッドケーブルの 16px-signal_each.png に、✗ をグリーンケーブルの 16px-signal_each.png に置き換えただけである。

クロック回路

クロック回路は、時計の秒針が規則正しく時を刻むように、ある特定の時間周期ごとに規則的に値を上昇させることによって、複数の回路のタイミングをとることを目的とした回路である。
回路ネットワークの計算の処理単位である1tickは現実の1/60秒と設定されているため、これと計算処理を用いることで簡単に実装することができる。
これらの計算回路設備以外でも、ベルトコンベアとアイテムなどの様々な物理的な設備による実装も可能である。

クロック回路は汎用性が高いが、基本的な生産管理では必要になる機会は乏しい。
むしろ、時間計測・動作の同期・信号の遅延処理などにより、意図的に生産速度を落としたりデコレーションをしたりするような凝った用途が主になる。

構成例

この画像は定数回路、条件回路、算術回路を用いて、任意の時間間隔ごとに「A」の値を1ずつ増やす出力を(右に置かれた算術回路の出力側で)行う回路である。
clk01.jpg

  • 左(定数回路):定数値を作成し常に出力する。
    出力にA、値1を設定する。
  • 中央(条件回路):出力側と入力側をケーブルでつないでいる。これにより、動作条件に当てはまる限り、1tickごとにAの値が1ずつ増え続ける。そしてこの条件から外れるとA=0になり、再び増え続ける。
    つまりこの条件は、一定の時間が経過した際にtickのカウントアップをリセットする役割を持っている。
    通常は右辺に十分に大きな値を設定すればよい。例えば24時間(=tick換算で5184000)経過後にリセットしたい場合、次のように設定する。
    入力:A < 5184000
    出力:A、値に入力数
  • 右(算術回路):カウントアップするための回路。
    tickの値を定数値で割ることによって、出力する時間間隔を調整する。小さい数で割れば速くカウントアップし、大きい数で割れば遅くカウントアップする。各自で調整できる。
    例えば1秒(=60tick)ごとにAの値を1ずつ増やしたい場合、次のように入力値を60で割ればよい。
    入力:A / 60
    出力:A

カウント回路

counter.jpg

左側の条件回路は、入力側と出力側をケーブルで繋ぐ。

銅板がベルトを5回流れるとランプが点灯する。
定数回路の出力をONにすることでカウンタをリセットする。

右側の条件回路は「リセット信号がONの間、銅板が通過した瞬間に1が出力される」という現象を防止するための仕組み。
この現象が起きても実用上問題ないことは多いはず。その場合は右側の条件回路は省略できる。

PFM制御回路(ポンプ流量の適応制御)

Pulse Frequency Modulation(PFM)はパルスを発生させる周期を変動させることで出力をコントロールする技術。
Space Ageのスラスター制御のような、ポンプ流量を制御したいときに用いる。

以下は、Space Ageのスラスター制御において、供給されるスラスター酸化剤の供給量を、宇宙プラットフォームの速度で自動制御する例。

PFM_構成.png

  • 条件回路の入力と出力を接続する
  • 条件回路の出力とポンプを接続する
  • 宇宙プラットフォームハブと条件回路の入力を接続する

PFM_回路設定.png
PFM_条件詳細.png

  • スラスター出力(酸化剤の貯蔵量)の変動から速度の変動まではタイムラグ(時間遅れ要素)がある。最短でも50tickの間隔をあけることで、安定性が改善される
  • 速度依存ではなく流量を直接可変したい場合は、定数50tickを変数に置き換える

PFM_動作波形.png

  • 50tickを下限として、パルス周期が適応制御される

*1 負数の剰余の扱いはプログラムによって異なる。この処理はあくまでも Factorio の場合である。
*2 一般的な計算ツールのように「0以外はTRUE」と考えると誤りが生じる。例えば、5 AND 8 = 0 となる。
*3 ver.1.x まではワイルドカードのマークが*だったことに由来する。下の2つも同じ。
*4 空虚な真(vacuous truth)と呼ばれる。
*5 ver.1.x まではワイルドカードのマークが*だったことに由来する。下の2つも同じ。