回路で作る在庫モニターと自動制御の作例集
Factorioの回路制御は、デサイダ、算術、定数の3コンビネータを土台に組み立てる仕組みである。これを覚えても、ランプで在庫を見せたり、ポンプや原子炉を自動で切り替えたりする回路は、最初のうち自力ではなかなか形にしづらいでしょう。
回路で作る在庫モニターと自動制御の作例集
Factorioの回路制御は、デサイダ、算術、定数の3コンビネータを土台に組み立てる仕組みである。
これを覚えても、ランプで在庫を見せたり、ポンプや原子炉を自動で切り替えたりする回路は、最初のうち自力ではなかなか形にしづらいでしょう。
自分もポンプが毎秒カチカチ鳴るのを直せず、しきい値を1点で粘って3時間溶かしましたが、SRラッチで起動15,000・停止19,000の2点に分けた瞬間に動きが止まり、ヒステリシスの意味が腹に落ちました。
この記事では、その橋渡しとして、用途別にコピペできる作例をしきい値つきで示し、原子炉の燃料浪費を防ぐ蒸気タンク監視までつなげていきます。
回路制御の3部品と配線の基本ルール
回路制御の基礎は、まず3種類のコンビネータを役割で切り分けることにあります。
条件で信号を通すのがデサイダ、数値を変換するのが算術、基準値を出し続けるのが定数で、この分担が見えるだけで回路図の読み解きはかなり楽になります。
自分も最初は条件判定まで算術に押し込んで配線を増やしてしまいましたが、分岐はデサイダ、計算は算術と割り切った瞬間に設計が整理されました。
配線の側では、同じ電柱に繋いだチェストやタンク、ロボポートの中身が合算される性質を押さえると、在庫モニターの作り方が一気に変わります。
デサイダ・算術・定数コンビネータの使い分け
デサイダは「条件を満たすなら通す、満たさないなら止める」という役回りに向いています。
算術は足し算や引き算だけでなく、信号同士の加工やスケール調整を受け持ち、定数は回路の基準点を与える発信源になります。
ここを曖昧にすると、必要のない場所まで演算を重ねて配線が膨らみますが、3者の境界を先に決めてしまえば、ヒステリシス回路でも原子炉制御でも部品数を抑えやすくなります。
ポイントは、判断はデサイダ、数値処理は算術、初期値やしきい値は定数に任せることです。
赤線・緑線とEACH/ANYワイルドカードの基礎
同じ電柱に複数のチェストやタンクを繋ぐと中身が合算表示されるので、1本の配線で工場全体の在庫合計を読めます。
個別の箱を全部追う必要がなくなるため、在庫モニターや供給監視の回路が短くなり、保守もしやすいです。
さらにワイルドカードのEACHは各信号に個別に演算や判定をかける指定で、ANYは条件を満たす信号のどれか1つを拾う指定になります。
複数アイテムをまとめて扱うとき、この違いを知っているかどうかで回路の書き方が変わります。
2.0で増えたセレクタコンビネータと表示パネル
2.0では赤線と緑線を別オペランドに割り当てられるようになり、EACHを別ワイヤーの値と比較しやすくなりました。
しきい値テーブルとの突合を1つのコンビネータで書けるので、条件分岐が増える場面ほど恩恵が出ます。
あわせてセレクタコンビネータと表示パネルが追加され、最大値や最小値の抽出、数値ダッシュボードの表示が組み立てやすくなりました。
赤線と緑線を別々に使える設計と組み合わせると、監視用の回路が見通しよくまとまります。
作例1: ランプ式在庫モニターを作る
最小構成は、チェスト、デサイダ、ランプの3部品だけで成立します。
歯車チェストが100個以上ならデサイダで signal=1 を返し、ランプを signal>0 で点灯させれば、在庫の閾値を画面上で即座に拾えるようになります。
難しいのは配線数ではなく、どの条件で明るくするかを先に決めておくことでした。
ここが固まると、在庫監視は一気に扱いやすくなるでしょう。
チェスト→デサイダ→ランプの最小構成
同じ電柱につないだチェストの中身は合算されるので、個別の箱を覗き込まなくても全体在庫を1つの数値として扱えます。
そこからデサイダで「歯車が100個以上なら signal=1」と判定し、ランプ側はその信号を受けて点灯させます。
これなら、搬入が止まったのか、消費が先行したのかを色以前の段階で見失いません。
まず1個のランプを点けて消す体験から入ると、回路に苦手意識がある場面でも挫折しにくいです。
緑・黄・赤で在庫を3段階に色分けする
在庫表示を3段階に分けると、ただの点灯よりも現場の判断が速くなります。
不足は赤、適正は緑、過剰は黄として割り当て、しきい値ごとにデサイダの判定を変えれば、どこが危ないかを一目で読めるからです。
ランプの点灯色は赤→緑→青→黄→桃→水→白の優先順で勝敗が決まるため、赤と緑を同時に送ると赤が残ります。
自分も最初はこの優先順位を知らず、なぜ常に赤になるのかを1時間ほど悩みましたが、順番を理解してからは狙った色を出せるようになりました。
色を持たせたいときは、算術コンビネータで signal-red などの色シグナルを生成して配線します。
デサイダの判定結果に応じて色シグナルを出し分ける構成にすると、赤・緑・黄の切り替えが安定し、同じランプでも意味を持った表示になります。
弾薬チェストの横に赤ランプを1個置いただけで、防衛ラインの弾切れを夜間でも見逃さなくなったことがあり、たったこれだけで安心感が段違いでした。
こうした「見れば分かる」状態を作るのが、この配線の価値です。
弾薬・石油・流体の警告ランプ作例
実用面では、弾薬切れの赤ランプ、石油過飽和の黄ランプ、在庫健全の緑ランプを工場の見やすい場所に並べる使い方が分かりやすいです。
防衛、精製、物流はどれも止まると影響が大きいので、異常の種類ごとに色を固定しておくと、画面を見渡すだけで問題箇所が浮かび上がります。
流体タンクやチェストの状態を個別に開かなくて済むぶん、巡回のテンポも崩れません。
回路学習の練習台としても扱いやすく、短時間で「反応が返る」楽しさを掴めます。
作例2: 数字とドットマトリクスで残量を表示する
ランプ配列で数値を見せる方法は、ON/OFFの見た目をそのまま数字へ変える発想です。
各行に0-9のシグナルを割り当て、定数コンビネータで点灯するライトを固定すれば、桁ごとに同じ仕組みを繰り返して残量表示が組めます。
手はかかりますが、巨大な工場の入口に置くとランドマークとして映えるでしょう。
ランプ配列で数字を描くドットマトリクス
ドットマトリクスは、桁ごとにランプ行を用意し、入力値を算術コンビネータで分解して該当するパターンだけを点灯させる作り方です。
0から9までの見え方を先に決めておけば、あとは定数コンビネータで「どのライトを光らせるか」を渡すだけなので、数字の読み取りが一目で済みます。
昔はこの方式で巨大な数値表示を作るのに半日かけていたのですが、完成したときの存在感はそれだけの手間に見合うものでした。
表示パネルでアイコン+テキストを条件表示
2.0の表示パネルは1x1でアイコンとテキストを出せて、条件付きメッセージを上から評価し、最初に真になったものを表示します。
ランプ配列のように桁を分解して組む必要がないので、残量や状態をさっと見せたい場面ではこちらがずっと扱いやすいです。
実際、同じ情報を部品1個で出せると分かった瞬間は拍子抜けしましたが、数値ダッシュボードとしてはこれで十分という場面が多いのも事実です。
セレクタコンビネータで最大・最小を抽出する
セレクタコンビネータは、入力信号群から最大値・最小値・スタックサイズ・ランダム抽出を取り出せるので、監視用途と相性がいいです。
複数チェストの中で最も少ないアイテムを選んで警告に回せば、「今いちばん足りないアイテム」が常に表示パネルへ出るようになります。
補充の優先順位で迷わなくなるので、在庫監視を人の記憶に頼らず回したいときにおすすめです。
Space Age環境では品質グレードのフィルタやロケット積載数の取得まで扱えるため、表示できる情報の幅も広がります。
作例3: ヒステリシス回路でポンプのチャタリングを止める
ヒステリシス回路は、しきい値を1点で切らず、起動と停止に別の境界を持たせてチャタリングを抑える回路です。
軽油が15,000未満でポンプを動かすだけだと、起動した瞬間に15,000を少し超えて止まり、また下回って動き、という往復が毎tickで起きます。
自分も最初はこの挙動を止められず、しきい値を1点のまま何度も調整して3時間ほど溶かしました。
なぜ1点しきい値だとチャタリングするのか
1点しきい値の問題は、判定が境界をまたいだ瞬間に動作が反転することにあります。
『軽油が15,000未満なら起動』だけで組むと、在庫が減って条件を満たした時点でポンプが動き、供給で残量が増えた直後に条件を外れて停止します。
すると次のtickでまた下回って再起動するので、見た目は動いているのに中身は点滅を繰り返すだけになります。
蒸気発電のバックアップでも同じで、発電所が点いたり消えたりして警告が鳴り続ける、あの嫌な挙動です。
SRラッチで起動・停止の2点を作る
解決はヒステリシスで、起動しきい値と停止しきい値を分けます。
たとえば残量15,000未満で起動し、19,000に達するまで止めないようにすれば、4,000の幅が往復を吸収してくれます。
ここで状態を覚えるのがSRラッチで、set条件でONを記憶し、reset条件でOFFに戻します。
今は低しきい値モードなのか、高しきい値モードなのかを回路自身が覚えているので、境界を少しまたいだ程度では切り替わりません。
wikiの基本例は3コンビネータですが、出力を入力に戻すデサイダ自己ループに算術1個を足すだけでも、1〜2コンビネータで省スペースに組めます。
自分はこの形に変えた瞬間、毎秒カチカチ往復していたポンプがぴたりと止まり、ヒステリシスの意味がやっと腹落ちしました。
蒸気発電のバックアップでも同じことが起きていて、起動と停止のしきい値を分けただけで電力警告が消え、運用が落ち着いたのを覚えています。
ポンプ・精製・発電所への応用としきい値設定
この回路はポンプ専用ではありません。
原油精製の在庫調整、蒸気発電所のON/OFF、製錬ラインの過剰生産抑制のように、しきい値で何かを起動・停止する場面ならそのまま流用できます。
ポイントは、停止側の値を起動側より十分上に置いて、単なる揺れでは状態が戻らないようにすることです。
数値の幅が小さすぎると再び往復し、大きすぎると反応が鈍るので、まずは15,000と19,000のように明確な差を置いてから調整すると扱いやすいでしょう。
作例4: 原子炉の燃料セルを自動投入する
原子炉の燃料は、電力が余っていても監視がなければ流れ続ける。
そこで蒸気タンクの残量を見てインサータを止める構成にすると、必要なときだけ燃料セルを入れられ、無駄な焚き続けを避けられます。
自動投入は単なる省力化ではなく、燃料在庫と発電の流れをそろえるための制御です。
蒸気タンク残量でインサータをON/OFF
制御の核は、蒸気タンクの中身をデサイダで読み取り、下限を割ったら投入、上限に達したら停止する二値の判断です。
原子炉は燃料セルを200秒で1個消費し、1セルあたり8GJを生むため、蒸気の増減を見ながら追従させると、余剰電力がある局面で燃料を追加しなくて済みます。
監視なしで回していた頃は、夜間にソーラーが落ちる前提で組んだはずなのに昼も燃料を焚き続け、ウラン濃縮が追いつかず赤字になりましたが、蒸気監視を入れた途端に燃料消費が体感半分以下まで落ち着きました。
隣接ボーナスも見落とせません。
隣接する原子炉は1基ごとに+100%(+40MW相当)のボーナスを受けるので、2x2や2xNに敷き詰める設計ほど熱出力が伸び、蒸気タンクへの充填速度も変わります。
蒸気タンク自体は25,000ユニット/500℃で約2.425GJを蓄えるため、瞬間的な需要変動を受け止めるバッファとして働きます。
下限・上限の線引きは、この貯蔵量と発電の立ち上がりを見比べて決めると扱いやすいです。
SRラッチとタイマで1セルずつ投入する
起動と停止には、作例3のSRラッチをそのまま流用すると扱いやすくなります。
下限を割った瞬間にラッチをセットし、上限に達したらリセットするだけで、インサータのON/OFFがぶれにくくなるからです。
さらに200秒タイマを組み合わせて1サイクルに1セルだけ入れると、燃料が減るたびに連続投入してしまう事故を防げます。
ここを外したままだと、下限を割った瞬間に複数セルが一気に入り、在庫が無駄に積み上がりました。
この1セル制御は、原子炉の200秒という燃焼周期に合わせるのが要です。
タイマがあると、投入したセルが次にどれだけ蒸気へ変換されるかを見届けてから次の判断に移れるので、ラッチだけの単純な開閉よりも安定します。
実際、タイマを入れ忘れていた頃は燃料箱の減り方が読みにくく、補給の見通しも立ちませんでした。
1サイクル1セルに直してからは在庫がきれいに安定し、制御の癖も読みやすくなりました。
燃料を浪費しないしきい値の決め方
しきい値は、定数コンビネータに下限と上限をまとめて置くと後から調整しやすくなります。
蒸気監視の回路は、結局のところ「どこで入れるか」「どこで止めるか」を決めるだけなので、数値を1か所に集約しておくとコンビネータ1個の書き換えで挙動を変えられます。
複数の場所に同じ値を散らすより、保守の負担が軽く、拡張もしやすい構成です。
下限は早めに投入を始めるための安全側、上限は蒸気を抱え込みすぎないための停止側、と考えると整理しやすいでしょう。
原子炉の出力、蒸気タンクの約2.425GJの蓄え、そして隣接ボーナスで増える発電量を同時に見ておくと、発電が追いつく局面と余る局面の境目が見えてきます。
こうして数値を集約しておけば、燃料セルを浪費しない回路を保ったまま、発電所全体の感触に合わせて微調整できます。
作例5: 蓄電池とバックアップ発電の自動切替
蓄電池のA信号は、回路に接続しただけで充電率を0から100までの整数で返してくれるので、電力網の余裕を1本の信号で読めます。
晴天時はボイラーを止め、夜間や需要が跳ねた瞬間だけ蒸気発電を動かしたい場面では、この単純な値がいちばん扱いやすいです。
A信号をしきい値で見て電源スイッチを切り替えれば、手元の操作を減らしながら燃料の無駄も抑えられます。
蓄電池のA信号で充電率を読む
蓄電池は回路に繋ぐと、内部の充電率をそのままA信号として出力します。
0〜100の整数なので読み方は難しくなく、電池がどれだけ余っているかを直感的に把握できます。
ここが便利なのは、太陽光の発電量そのものを追うのではなく、供給側の「まだ回せるか」を見られる点です。
夜のあいだに電力が落ちるたび、ボイラーを手で焚いていた頃と比べると、監視の手間が一気に減ります。
電源スイッチを充電率で開閉する
このA信号を電源スイッチに渡し、「A<20で接続」に設定すると、充電が20%を割った瞬間に蒸気発電が主電網へつながります。
ソーラーが回復して蓄電池が満ちてくれば、条件が外れて自然に切り離されるので、発電所を都度操作する必要がありません。
自分も最初は起動と解除を同じ20%にしてしまい、夜明け前後に発電所が点滅しました。
解除を別の高い値に変えた途端に安定し、ヒステリシスは本当に使い回しが利くと実感しました。
配線ミスのトラブルシュート
動かないときは、まず赤と緑の取り違えを見ます。
次に、電源スイッチの不等号が逆になっていないか、A信号を別の信号と混同していないかを確認してください。
しきい値を入れたのに発電所が反応しない回路は、たいていこの3点のどれかで止まっています。
配線の向き、条件式、信号種別の順に見直せば、回路図を頭の中で追わなくても原因を切り分けられるでしょう。
Takuma
Factorio 3,000時間超。1k SPM メガベースを複数パターンで達成した生産ライン設計のスペシャリスト。本業のプラントエンジニアの知識を工場最適化に応用しています。