ゼロから始めるFactorioの回路構築(実践例編)
[Factorio] [2025/03/11 21:06]
前回までに書いたFactorioにおける回路構成のまとめ。
前回までに、鉄板や銅板の量に応じてランプを光らせるといった動作をさせてみたが、それを具体的にどう活かしていけばいいか、自分が実際に構成した例を引き合いに出してみたい。
2025/3/11更新:
記事をV2.0.39向けに更新しました。(一部画像が古いままですが時間があるときに更新します。)
V1.1以降の差分はこちらの記事にまとめました。
🚀のマークがついているのはDLC「SpaceAge」の機能です。
基本編 > 入力・出力編 > テクニック編 > 算術回路編 > 条件回路編 > 実践例編 > 累積回路編
軽油をプロパンガスに分解し過ぎ問題を解決する
一番最初の記事にも書いたが、軽油を石油ガスに分解するプラントを動かし続けると、いざ軽油が大量に必要になったときに軽油が足りなくなってしまう。
逆にプラントを動かさなければ、ガスが大量に必要になったときにガスが足りなくなってしまう。
この問題を自動的に解決するのが本節で書く回路である。
結論を先に書いてしまうと、この回路は以下の制御を行っている。
- 軽油タンクの内容量と、ガスタンクの内容量を比較する。
- ガスのほうが少ない場合は、「軽油をガスに分解」のプラントを動かす。
- ガスのほうが多い場合は、「軽油をガスに分解」のプラントを止める。
上記により、ガスが減った場合は軽油を分解してガスの補給に努め、ガスが増えた場合は分解を止めて軽油の温存に努めることが可能になる。
具体的な回路の構成を見てみよう。
ガスタンクと軽油タンクから、それぞれレッドワイヤーで内容量が化学プラントに伝えられる。
化学プラントは両タンクの内容量を比較し、「ガス<軽油」の有効/無効条件がYESと判断されたときだけ有効化され、軽油をガスに分解する。
ガスのほうが多くなるとプラントが無効化され、分解も停止する仕組み。
ちなみにこの図ではおまけとして化学プラントの隣にランプを置いてケーブルをつなぎ、同じ条件「ガス<軽油」を設定してある。
こうするとプラントが動くときはランプも光るのでリアルの工場でよくある“動作表示灯”として機能し、工場らしさが増して見た目が楽しくなる。
ここで書いた軽油→ガスの分解制御は一例に過ぎず、同様の方法で重油→軽油、重油→潤滑油、ガス→(硫黄→)硫酸すべての制御が可能である。
また、「タンク → 化学プラント」の組み合わせを「チェスト → 炉」の組み合わせに置き換えて考えれば、
「チェストの中の鋼鉄と鉄板の量を比較し、鋼鉄のほうが少ない時だけ鉄板を焼いて鋼鉄にする炉を動かす」
ことで鉄板と鋼鉄をバランスよく蓄えるといった応用もでき、この考え方自体はあらゆる生産制御に応用できる。
余談だが、上記で書いた表示灯はガスと軽油の残量がほぼ等しい時はチカチカとフラッシュランプ的な光り方をする。
真っ暗な工場で明るいランプがチカチカ光るのは結構目が疲れる。
その場合は工場全体にランプを置いて、工場がそもそも暗くならないようにすると目にやさしくなる。
各タンクが満タンになるのを防いで原油を絶えず生産しながら、固形燃料を生産し続ける
原油を原油処理施設で処理すると、重油と軽油と石油ガスが採れる。
しかし原油処理施設は、3つのうちどれかのタンクが満タンになると、原油処理を停止してしまう。
このためあまり大量に特定の資源を使い続けると、例えば「石油ガスタンクが空なのに、軽油タンクが満タンなので原油処理が動かない」といった事態が起きてしまう。
また、Factorioの油田は産出量が減りこそすれ、決して尽きることはない。
このため、産出量が最低まで低下した油田は、温存しても意味がないので掘り続けたほうが得と思われる。
しかし原油のタンクが満タンになると産出が止まってしまう。
このように石油精製関連のタンクは、満タンになるといろいろ非効率である。
かといって原油を減らすために固形燃料を延々と作り続けたら、いざ必要なときには軽油や石油ガスのタンクが空という事態も起きかねない。
そこで、いざというときに備えてタンクの備蓄を確保しながら、満タンになりそうなときは固形燃料を生産してタンクの中身を減らすという制御を考えた。
回路による制御は以下のように行う。
- 原油タンクと軽油タンクの内容量が、どちらも24000以上か調べる(備蓄が充分あることを確認する)。
- どちらも24000より多い場合は、「軽油を固形燃料に変換」のプラントを動かす。
- どちらかが24000より少ない場合は、「軽油を固形燃料に変換」のプラントを動かさない。
原油と軽油の2つのタンクの内容量をレッドワイヤーで取り出し、化学プラントに入力する。
化学プラントはすべての信号が24,000より多いか調べ、YESなら軽油から固形燃料を生産する。
なお既に記載の通り「すべて」はゼロの信号を無視する特性があるため、
定数回路から「原油が1、軽油が1」の信号を常時出力し加算することで値がゼロにならないよう底上げしている。
こうすることで、原油や軽油のタンクに充分な備蓄がある状態を維持しつつ、備蓄量を超えた分は消費することで軽油タンクが満タンになるのを防ぐ。
なおFactorio@Wikiの記載によると、
固形燃料の生産はガス・軽油・重油のうち軽油から行うのが最も効率が良いらしい。
このため重油については上記した「分解し過ぎ問題を解決する」の流用で備蓄量超過分は自動で軽油に分解するプラントを作っておく。
そうすれば、重油はまず軽油に分解され、分解された軽油が軽油タンク経由で固形燃料生産プラントに流れるので、最高の固形燃料生成効率を維持できる。
不足アイテムを自動生産する(ロボットステーションと組立機の回路制御)
インサータや搬送ベルトなど「よく使うアイテム」は、いちいち手で作るより自動で作っておいたほうが便利である。
そんなときは、ロボットステーションから出力される倉庫内アイテムの信号をインサータに入力し、
「アイテムの在庫が減ってきたらインサータが作動して、組立機に材料を投入する」ようにしておく。
こうすればアイテムが減った時だけ組立機が組立てを行い、減ったアイテムを補充してくれる。
ロボットステーションからは、物流ネットワーク内にあるアイテムの在庫数が信号として出力される。
ここでは条件に「インサータ<500」が指定されているので、インサータの在庫が500個を下回ったら自動的にインサータを組み立て補充する。
在庫が増えると組み立ては自動で止まるので、過剰な在庫を抱えずに済む。
実際の我が拠点の運用風景。上で紹介した組立機のセットを実際には数十セット並べて設置し、それぞれ違うアイテムを自動補充している。
こうすれば歯車1個からスタックインサータに至るまで使用頻度の高いアイテムが全自動で補充される。
ちなみに回路制御をせずとも、「チェストが満杯になったら組立機が自動で止まる」ことを利用して在庫数制限は可能である。
ただしその場合、使用後に回収したアイテムを供給チェストなどに入れた場合に在庫として計上されず、在庫を補充しすぎ気味になる点が異なる。
ちなみに物流ネットワーク(物流ロボットがアイテムを運んでくれる範囲)内に置かれた設備であれば、実は回路を繋がなくても物流ネットワーク内の在庫量を参照することができる。
この図の場合はインサータに回路が繋がっていないが、物流ネットワークの範囲内に置かれているので、物流ネットワーク内の在庫数をリアルタイムで受信し、鉄板が200枚より多くあるときだけ動作する。
アイテムが十分にあったら工場を停電させて節電する(チェストと電源スイッチの回路制御)
ゲームが後半戦に入ってくると、ビーコンを使ったり組立機に生産力モジュールをセットして生産効率を向上させたい場合がある。
しかしそうすると消費電力が増え、汚染をばらまき放題になってしまう。
そこで、もしアイテムが十分にあるときはビーコンや組立機を含む工場区画全体の電源を落とすようにすれば、燃料を節約できて環境にもやさしく、バイターとの友好にも寄与できるはずである。
画像は生産力モジュール4枚差しで消費電力激増の組立機が並ぶ製造サイエンスパック(紫P)工場を回路で節電させている例。
画像左下に出荷口があり、6個のチェストに紫Pを溜め込み、列車で出荷している。
そこで、その6個のチェストを回路でつないでチェストの内容物の信号を出力させ、それを電源スイッチに入力する。
電源スイッチの動作条件は「紫P<50000」とする。(50000は「これ以上在庫があるときは工場を停電させる」というお好みの在庫数。)
こうしておけば、在庫が足りない場合だけ工場に電気を流し、在庫が増えたら停電させて節電に取り組む。
工場を停電させても駅施設は停電させないところがポイント。
この回路は駅に溜まった在庫の数で停電を判断しているので、駅施設を停電させると積み込みが止まり、
積み込みが止まると在庫が減らないので永久に停電したままになってしまう。
なお補足だが、組立機などの設備は停止中は待機電力だけになるので、わざわざ停電させる必要性は薄い。
ビーコンには停止の概念がなく工場の停止中にも大電力を消費してしまうので、節電が役に立つのは主にビーコンを含む工場である。
原油が溜まった時だけ原油輸送列車を呼ぶ(タンクと駅の回路制御)
原油は油田から採れる。採れた原油は一旦タンクに溜め、列車で製油所に運んで軽油などの石油製品に加工する。
しかし各地に散らばる油田から原油を集めて処理しているとき、まだ原油が溜まっていない駅に列車が来てしまうと、
タンクが満タンになるまで列車が延々と待たされ続ける羽目になってしまう。
そんなときは、原油が充分溜まってから列車を呼ぶように回路制御を加えてみよう。
タンクをレッドワイヤーで数珠繋ぎにして原油の在庫量を算出し、それを算術回路を使い列車1本分の輸送可能量で割れば、
原油が列車何本分貯まっているかを計算できる。
その計算結果を駅の列車数上限に設定すると駅にはそれ以下の本数の列車しか来なくなるので、
駅に来た列車はスムーズに積み込みを終えて帰路に就くことができる。
ちなみにタンク貨車は1両満タンで50k。上の画像の場合は列車1本=貨車4両、よって輸送力は200kなので、算術回路で「原油の量÷200k」を計算している。)
(ちなみに厳密に言うなら、1本のパイプに繋がるタンクにはすべて平均に流体が貯まるので
数珠繋ぎにしなくてもタンク1つの在庫が分かればそれをタンク数で掛けることで在庫全量を計算できるとか、
タンク以外にもパイプ部分にも原油があるのでもうちょっと在庫を多く見積もってもいいとか、いろいろ改善の余地はある。)
Factorioでは2つ以上の駅に同じ駅名をつけることができる。その場合、列車は「同じ名前の行き先のうち、最短距離で行ける駅」へ自動的に向かう。
さらに回路制御を組み合わせ「原油が少ない駅は無効化する」ように設定しておけば、列車は「同じ名前の行き先のうち、原油が充分溜まっている最短距離で行ける駅」へ自動的に向かうようになり、最小限の列車を能動的に走らせて各地から原油をかき集めることが可能になる。
上記画像では“油田駅”が3か所あるが、左端の駅は無効化(赤く表示)されているので、列車は残り2駅のうち最短なほうに自動的に向かう。
列車のダイヤはピストン輸送のように、油田駅[発車条件:貨物が満杯]と製油所駅[発車条件:貨物が空]の2つを登録しておくだけでいい。
状況に応じて駅の有効/無効や列車数を制御する方法は、かなり広い範囲に応用が利く。
例えば発電所で燃料がたくさんある時は駅を無効化し、燃料が少ないときだけ駅を有効化すると、燃料が減った時だけ燃料搬入列車が来るようになる。
ウランの採掘場でタンクの硫酸が減ったときだけ駅を有効化して硫酸を運ばせるというのも面白い。
バイターの侵入を防ぐために防壁を張り巡らせて建設ロボットで自動修復させている場合は、
リペアキットなどの修理部材が減ってきたら補給列車を呼ぶといったこともできる。
必要な時に必要な量だけ列車を動かすことで線路の混雑を減らす効果も期待できる。
タンクの残量メーターを作る(貯蔵タンクとランプの回路制御)
原子力発電で発生させた蒸気を貯蔵タンクに溜め、タンク内の蒸気の残量を表示させてみる。
実用性はないが、見た目が少し楽しくなる回路。
画像左側に19個並んでいるランプが蒸気の残量メーター。うち左の10個が10%単位、右の9個が1%単位で0~100までの数値を表すことができる。
熱交換器で発生させた蒸気を溜める貯蔵タンクにレッドワイヤーをつなぎ、それを算術回路に入力する。
算術回路は「蒸気の量÷5000」の割り算を行うことで、タンクに溜まった蒸気の残量を0~100の百分率に変換する。
(5000は画像のように貯蔵タンクが20個ある場合の満タン量を100で割った値(25000×20÷100)。)
左側のランプにはその計算結果を入力して「蒸気≧10」「蒸気≧20」などの10%刻みの条件を設定しておく。
また百分率の信号をもうひとつ別の算術回路に入力し「蒸気の量%10」の剰余算(割り算の余りを求める)を行うことで、百分率から1の位を抽出する。
右側のランプには2つ目の算術回路の結果を入力して「蒸気≧1」「蒸気≧2」などの1%刻みの条件を設定しておく。
こうすれば、例えば蒸気の量が85%であれば、左のランプが8つ、右のランプが5つ点灯し、85%という値が目視で確認できるようになる。
このような表示器は蒸気残量に限らず、いろいろな場面で使える。例えばロボットステーションのロボット稼働率表示器なんてのもいいだろう。
画像では白一色の直線表示だが、もっとシンプルに赤>黄>緑の1灯式にしたり、プログラマブルスピーカーと組み合わせて異常な減り方をしたら警報を上げると、トラブルが起きた場合に迅速に対応できるだろう。
こちらは上記の蒸気タンクとは違ったアプローチによる、水タンクの1灯式残量表示器。
タンクに水が充分ある時はランプが水色に光り、減ってくると黄色、減りすぎると赤く光る。
ランプの設定は「常に点灯」とし、さらに回路設定で「色の使用」にチェックをつけておく。
1台目の条件回路は「水<20,000」のとき「黄色=1」を、2台目の条件回路は「水<10,000」のとき「赤=1」を出力する。
定数回路からは常時「シアン=1」を出力する。
別頁に書いた通り、ランプの色には優先順位があり最も優先度の高い色のみが発色するので、
上記のようにしておけば最も優先度の高い赤の信号が出ているときはシアンと黄色は無視されてランプは赤く光り、次点で黄色、
赤も黄色もないときは最も優先度の低いシアンが発色する。
🚀アイテムが十分あるときだけスタックインサータで運び出す(スタックインサータの回路制御)
スタックインサータはアイテムを最大4つまで重ね置きすることでベルトの輸送力を大きく引き上げるが、
一方で他と違って「アイテムを最大数掴むまで旋回しない」という特徴がある。
このため、例えばチェストの中に鉄板が100枚と銅板が1枚入っている場合、
スタックインサータが鉄板を掴めば一気に運び出してくれるが、もし銅板を掴んでしまうとそのまま動かず銅板が追加されるのを待ち、
物流がストップしてしまう。
これを防ぐにはどうすればいいか。チェストの中に沢山あるアイテムだけを選択的に掴むようにすればいい。
フルゴラでは廃材をリサイクラーに入れると十数種類に及ぶアイテムがランダムに得られる。
それをそのままベルトに載せてしまうと、上記画像の上のようにベルトが少量のアイテムで埋まってしまう。
そこで上記画像の下では、リサイクラーの排出アイテムをいったんチェストに溜め込み、条件回路の条件「それぞれ」
を使って16個以上溜まっているアイテムの信号だけを抽出し、
その信号をスタックインサータのフィルターに設定することで、たくさん貯まったアイテムだけを選択的に運び出している。
これによりアイテムを最大限積み重ねてベルトに載せ、輸送効率を大幅に引き上げることができる。
ちなみに条件回路を使わず、チェストとスタックインサータを回路で直結しスタックインサータの有効無効条件を「いずれか≧16」に設定することでも、
かなり近い動きをさせることができる。
ただし回路条件の「いずれか」はチェストの中に16個以上のアイテムが1種類でもあればYESと判定されてしまうのに対し、
インサータはチェストの右下スロットのアイテムを優先的に運び出す動作をするため、
もし右下スロットに端数なアイテムがあるとそれを先に取り出してしまうなど、輸送効率は少しは上がるが最高にはならないという違いがある。
ちなみにその場合は「フィルターを設定」も✅をつけておこう。そうしないと端数のアイテムを掴んだスタックインサータはスタック(停止)してしまう。
フィルターを✅した場合、スタックインサータがチェストから端数のアイテムを取り出すとチェストからそのアイテムが無くなって信号が途絶えるためフィルターが解除され、
スタックインサータは速やかに手持ちのアイテムを排出することで、スタックには陥らなくなる。
火力発電所を必要な時だけ動かす(蓄電池と電源スイッチの回路制御)
火力発電所は電気を生み出すが、同時に汚染も生み出す。
汚染のない太陽光発電をメインにし、それで足りない分だけ火力発電所を動かすようにすると、できるだけ汚染を減らしつつ電力を保つことができる。
送電網に太陽光発電(夜間も使用する場合は大量の蓄電池も含む)を直結する。
火力発電は送電網との間にスイッチを挟んで接続する。
送電網側に充電量検出用の蓄電池を1個つなぎ、この蓄電池とスイッチの間をレッドワイヤーで接続する。
蓄電池からは充電残量が百分率(0~100)で出力されるので、これを電源スイッチに入力し、作動条件を「充電残量<20」にしておく。
すると、充電残量が充分ある場合は火力発電所は送電網から切り離されるため発電を停止し、汚染を出さなくなる。
充電残量が20%未満になると火力発電所が送電網に接続され、発電を開始する。
(なお、充電残量はデフォルトではAという特殊アイテム信号として出力される。蓄電池をクリックして設定を確認できる。)
上記のような単純なON/OFF制御でも問題なく動くが、しかしそれだと以下のような挙動が起きる。
- 夜間に蓄電池の容量が消費され、充電残量が19%になる。
- 回路が働き、発電機が発電を開始する。
- 発電が行われると蓄電池が充電を開始し、充電残量が20%になる。
- 回路が働き、発電機が発電を停止する。
- しかし蓄電池の容量は1%しか回復していないので、すぐに充電残量が19%になる。
- 以降、発電機は発電と停止を繰り返す。
だめではないが、機械的に考えるとあまり美しいとは言えない稼動方法である。
そこで、発電の開始と停止の閾値を分けてみる。
例えば、蓄電容量が10%より下がったら発電を開始し、充電を行い、蓄電容量が30%を超えたら発電を停止する。
そうすれば差分の20%分は発電機が発電を続けることができる。
改善された非常用発電所の回路制御。
風車のように時計回り4マスで一周する搬送ベルトを用意し、ここに木材を1本だけ流しておく。
蓄電池からのレッドワイヤーを、風車の左上と右下のベルトにつなぎ、左上には「充電容量<10」、右下には「充電容量≧30」の作動条件を設定しておく。
こうすれば、充電容量が9%になると左上のベルトが動き出して木材は右上に流れ込むが、右下のベルトは止まっているので木材は右上で止まる。
充電容量が30%になると右下のベルトが動き出して木材は左下に流れ込むが、左上のベルトは止まっているので木材は左下で止まる。
これにより、「木材が右上のベルト上にある時は火力発電を行う」という検出器が出来上がる。
そこで、右上のベルトからもう1本別のレッドワイヤーを引き出して電源スイッチにつなぐ。
右上のベルトの設定は「有効/無効」のチェックを外し「ベルト上のアイテムを取得する」「ホールドモード」にしておく。
電源スイッチの動作条件を「木材=1」にすれば、木材が右上のベルト上にある時にだけ電源スイッチが接続され発電が開始される。
なお昔のバージョンのFactorioでは、電力網が発電設備のみで電力消費設備がない場合に停電警告マークが表示されていたが、現在のバージョンでは警告は出ないよう変更されているので当時のような対策は不要である。
参考までに、改善していないほうの(蓄電池と電源スイッチを直結した場合の)回路制御の結果例(V0.17時代)。
電力状況グラフが剣山になる。
と、回路を使うと想像力次第でいろいろなことができる。
次回はアイテムの信号をどんどん足し合わせていく、累積回路について触れる。
基本編 > 入力・出力編 > テクニック編 > 算術回路編 > 条件回路編 > 実践例編 > 累積回路編
この記事を評価
この記事にコメント
- ...