石橋を叩いて壊すブログ

ゼロから始めるFactorioの回路構築(実践例編)

前回までに書いたFactorioにおける回路構成のまとめ。

前回までに、鉄板や銅版の量に応じてランプを光らせるといった動作をさせてみたが、それを具体的にどう活かしていけばいいか、
自分が実際に構成した例を引き合いに出してみたい。


自分が油田地帯に建てた石油処理プラントの全体俯瞰。
一昔前はサイエンスパック3(青パック)と電池とプラスチックと固形燃料のプラントが複雑に絡み合ってお祭り状態だったが、
研究もすべて終わって大抵の部材の備蓄も整ったため、つい最近全部取り壊してリプレースしてさっぱりさせた。
左から順に、硫酸、プロパンガス、軽油、重油、潤滑油のタンクが置かれている。

この石油プラントには、小さな機能を受け持つ複数の回路が設置されているが、それらは大きく分けると、
一番最初の記事で自分が困っていると書いた「軽油をプロパンに分解し過ぎ問題」を解決するものと、
タンクが満タンにならない程度に固形燃料を作って原油を可能な限り掘り続けて最大活用するための「オーバーフロー制御」を行うものがある。
以下に説明する。

軽油をプロパンガスに分解し過ぎ問題を解決する

一番最初の記事にも書いたが、軽油をプロパンガス(以下、単にガスと記載)に分解するプラントを動かし続けると、
いざ軽油が大量に必要になったときに軽油が足りなくなってしまう。
逆にプラントを動かさなければ、ガスが大量に必要になったときにガスが不足してしまう。
この問題を自動的に解決するのが本節で書く回路である。

結論を先に書いてしまうと、この回路は以下の制御を行っている。

上記により、ガスが消費されて減った場合は場合は軽油を分解してガスの補給に努め、
軽油が消費されて減った場合は分解を止めて軽油の温存に努めることが可能になる。

具体的な回路の構成を見てみよう。


軽油タンクとガスタンクから、それぞれケーブルで内容量が小型ポンプに伝えられる。
小型ポンプは両タンクの内容量を比較し、「ガス<軽油」の条件が成立したときだけ動作し、軽油をプラントに流し込む。
プラントが軽油をガスに分解してガスの容量が増すと、前述の条件が満たされなくなり、小型ポンプが停止し、分解が停止する。
ちなみに、ポンプの近くに置かれているランプは動作状況を視認するための表示灯で、ポンプが動くのと同じ条件で光るように設定されている。
こうすると、ポンプが動くたびランプが光るので見た目が楽しくなる。ただし、夜間にチカチカと明滅されて目に悪い。

ここで書いた軽油~ガス間の分解制御は一例に過ぎず、ほぼ同じ方法で重油~軽油間、重油~潤滑油間、ガス~硫黄~硫酸間すべての制御が可能である。
硫黄と硫酸の間の制御は、小型ポンプで石油の流入を制御する代わりにスマートインサータを接続して硫黄の投入を制御する。

各タンクが満タンになるのを防いで原油を絶えず生産しながら、固形燃料を生産し続ける

原油を原油処理施設で処理すると、重油と軽油とガスが採れる。
しかし原油処理施設は、3つのうちどれかのタンクが満タンになると、以降の処理を停止してしまう。
このため、あまり大量に特定の資源を使い続けると、例えば「ガスは満タンなのに軽油が空で、
しかも原油処理が動かないので補充もない」といった八方塞がりの事態が起きてしまう。

また、Factorioの油田は産出量が減りこそすれ、決して尽きることはない。
このため、産出量が最低まで低下した油田は、温存しても意味がないので掘り続けたほうが得と思われる。
しかし原油のタンクが満タンになると産出が止まってしまう。

このように石油精製関連の貯蔵タンクは、満タンになるといろいろ非効率である。
かといって固形燃料を延々と作り続けたら、いざ石油が必要なときにタンクが空という事態が発生してしまう。
そこで、いざというときに備えてタンクの内容量がほぼ満タンの状態を維持しながら、
満タンになりそうになったら固形燃料を生産してタンクの中身を減らすという制御を考えた。

話が脱線するが、これはタンク付き水洗トイレのタンクの中の構造と同じである。
故障か何かでタンクに水が注がれ続ける状態が起きると、タンクから水があふれ、トイレが水浸しになってしまう。
これを防ぐため、タンクの中には予めプラスチックの管が垂直に設置されており、その上端はタンクのふちよりわずかに低くなっている。
タンクに水が注がれ続けると、水位がタンクのふちに達する前にそれより低い位置にある管の中に水が流れ、下水に流すことで水浸しになるのを防いでいる。
この管のことをオーバーフロー管と呼ぶ。今回説明するのはまさにこの挙動である。
貯蔵タンクの貯蔵量が予定限界より多くなったら、あふれた石油を管に流して固形燃料を生成し、決して満タンにさせないよう振舞うのである。

無駄なことを記載したが、やることは結局先ほどと同じ、タンクの容量と小型ポンプの組み合わせである。
制御内容は以下のとおりである。


画像には映っていないが、原油タンクの近くに条件回路を置き、原油の量を調べる。軽油タンクも同様に量を調べる。
あとは条件回路の記事に書いたとき同様、信号が足し算されるのを利用してAND条件が成立したかを調べポンプを動作させる。

こうすることで、原油や軽油のタンクに充分な資源がある状態を維持しつつも、軽油のタンクが満タンになるのを防ぐ。

なおFactorio@Wikiの記載によると、固形燃料の生産はガス・軽油・重油のうち軽油から行うのが最も効率が良いらしい。
このため重油のタンクについてはオーバーフロー管を設置せず、代わりに前記の「分解し過ぎ問題」の回路と「重油を軽油に分解」のプラントを設置しておく。
すると、軽油のタンクについてはオーバーフロー制御により水位が2400より高くはならないため、重油タンクの水位がこれを超えると超えた分が軽油に分解され、
分解で増えた軽油が軽油タンクからオーバーフロー管に流れて固形燃料に変換されることで最高の固形燃料生成効率を維持できる。

逆にガスを軽油に分解することはできないので、ガスについてはオーバーフロー管を設置する。
このとき、オーバーフロー判断の水位は軽油の同水位より高めにしておく。
もし判断水位が同じだと、軽油が増えたときに「分解し過ぎ問題」の回路が働いて「軽油をガスに分解」が行われてしまう。すると固形燃料の生成効率が落ちてしまう。
ガスの判断水位を軽油のそれより高めることで、「分解し過ぎ問題」の回路の動作を防ぎつつ、ガスはガスで、軽油は軽油で固形燃料を生成することができる。
(なお、ガスが大量消費された際には軽油からガスへの分解が必要になるので、軽油~ガス間の「分解し過ぎ問題」回路それ自体が不要になるわけではない。)

V0.13で作れそうな回路 - 留置線の列車通過を防ぐ

以下は、V0.13で追加される機能を使って実装できそうだと自分が考えている案である。
正式版を待ちたいので、今はアップデートしないで想像するだけにとどめている。
もしかしたら実際はできないかもしれないが備忘録代わりに書いておく。

2016/09/01追記:
V0.13の正式版で確認したところ、きちんと動きました。
信号の回路設定画面に「経路の探索は行いません」と書いてあるのが気になりますが、ちゃんと経路の探索に影響を与えることができるようです。

以下の画像は、自分がいつも活動している拠点である。


南側に貨物を降ろす駅があり、列車はすべて北側へ走り去る。
活動拠点の近くにはチェストが大量に置いてあり資源が入っており作業に適している。
そのチェストの西には線路が3本平行しており、うちチェストに最も近い側は臨時積み込み作業などを行う作業線として想定している。
一方、活動拠点を通過する列車は、高速で走行しており接触すると危険なので、チェストから最も遠い線路を通過線と想定している。

しかし実際には、線路の南端と北端を結ぶ最短ルートは作業線なため、通過列車はすべて作業線を通過してしまい、いつも危険と隣りあわせだった。
作業線は列車を自動運行で臨時で引き込み発車させることもあるので、線路を分断して通過を防止するわけにも行かない。
似た悩みを抱えている人も少なからずいると思う。

V0.13で、鉄道信号を回路に組み込めるらしいので、以下のように回路を組めば、
作業線(留置線)を通過列車が通過するのを簡単に防ぐことができると予想している。


作業線の駅の前後に鉄道信号を計2つ設置する。
手前(下側)の信号は回路に現在の状態を出力する。
奥側(上側)の信号は回路からの入力で、手前の信号が緑なら赤を出すように指定する。

このように制御すれば、以下のような挙動となるはずである。

これなら、自動運行の列車も作業線に入ることができ、なおかつ通過列車は通過線を通ってくれるはずである。
問題は通過線と作業線がともに赤のとき、列車がどちらを選択するかだが、信号の位置を調整して作業線より通過線のほうがより先へ進めるように見せかけたり、
連動用信号を使って通過線と作業線の分岐の手前で列車を停めさせることで対処できると思われる。

V0.13で作れそうな回路 - 蓄電池の蓄電残量が減ったら非常用ディーゼル発電機を動作させる

こちらもV0.13で作れそうだと思っている内容である。
使用する電力を全て太陽光発電パネルと蓄電池で得る場合のディーゼル発電機の取り扱いの自動化方法である。

2016/09/01追記:
V0.13の正式版で確認したところ、きちんと動きました。

日中は太陽光発電パネルで発電して電力を賄い、夜間は蓄電池からの放電で電力を賄う。
万一、電力が不足する場合にはディーゼル発電機で発電して電力を補充するようにすれば、
環境汚染を減らし、バイターと共存できる環境づくりができるはずである。
共存は無理?まあそのときは殲滅するけど、それはさておき。

V0.13では、蓄電池を回路に組み込み、蓄電容量を回路で利用可能になるらしい。
また、回路からON/OFFできるスイッチが追加されるらしい。
ならば、ディーゼル発電機(以下、単に発電機と記載)を一箇所に集中させてスイッチを挟んで電力網と接続しておき、
蓄電池の蓄電容量が減ったときだけスイッチを入れれば、発電機が動き出して、
蓄電池の蓄電容量が充分になったらスイッチを切って発電を停止するといった制御ができるようになると思う。

ここでひとつ問題がある。単純なON/OFF制御だと、以下のような挙動が起きる。
例えば、蓄電容量が20%より少なくなったときだけ発電機を動かすとする。

  1. 夜間に蓄電池の容量が消費され、蓄電容量が19%になる。
  2. 回路が働き、発電機が発電を開始する。
  3. 発電が行われると蓄電池が充電を開始し、蓄電容量が20%になる。
  4. 回路が働き、発電機が発電を停止する。
  5. しかし蓄電池の容量は1%しか回復していないので、すぐに蓄電容量が19%になる。
  6. 以降、発電機は発電と停止を繰り返す。

だめではないが、あまり効率的とは思えない稼動方法である。
そこで、発電の開始と停止の閾値を分けてみる。
例えば、蓄電容量が20%より下がったら発電を開始し、充電を行い、蓄電容量が30%を超えたら発電を停止する。
そうすれば差分の10%分は発電機が発電を続けるので、効率的である。

これを実現するには以下のようになると思われる。
なおV0.12で想像しているだけなので、蓄電池の代わりに保管チェストに原木を100本入れて蓄電容量0~100%を表現している。
また画像最上部のランプは同じくスイッチの代わりで、光っているランプがスイッチのON状態に相当する。
初期状態で蓄電容量は100%とし、チェスト1は空で、チェスト2に原木が1本だけ入っているとする。


蓄電池を保管チェストで、スイッチをランプで代用して作成した回路。思いのほか小さくなった。

制御内容は以下である。

つまりチェストをフラグとして活用するのである。
少し複雑だが回路は画面内に収まる程度なのでいろいろ調整が利くできるはずである。
ちなみに、発電機群に電力を消費する設備がひとつも繋がっていないと、発電機に電柱が繋がっていないのと同様の停電警告がついてしまう。
対策として発電機群に蓄電器をひとつ繋いでおくと、停電警告を回避でき、なおかつ充電完了後は消費電力ゼロのため発電機を完全停止させられる。

以上、だいぶ長くなったが、回路について調べた分はこれくらい。
今度は鉄道網について何か書くかも知れない。

この記事を評価

48 20

コメント

【この記事にコメント】
お名前:
コメント:

277,008

記事カテゴリー

最近の記事

  1. FF14を翻訳したら国によって結構特色が違った[12/11]
  2. ゼロから始めるFactorioの回路構築(実践例編)[7/24]
  3. ゼロから始めるFactorioの回路構築(条件回路・論理演算編)[7/24]
  4. ゼロから始めるFactorioの回路構築(定数回路・算術回路編)[7/24]
  5. ゼロから始めるFactorioの回路構築(入力・出力・混合編)[7/24]

RSS1.0 RSS2.0

最近のコメント

  1. 天晴れ!押したらポーションのモヤモヤでまし…[5/26]
  2. 習うより慣れろって感じで。この記事は記事冒…[4/7]
  3. もっと詳しく説明してください[3/21]
  4. みなさんと同じです、
    すみません
    [11/21]
  5. 上と同じ理由です。
    すみません
    [9/26]

記事を検索


管理人

石橋

免許はあるけど車はない