回路ネットワークの仕様

Last-modified: 2024-03-09 (土) 11:24:39

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

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

基本概念

回路ネットワークとは、「ケーブル」と「設置物」からなるネットワークであり、「信号」の送受信による機器の制御および情報の伝達を可能とする。

circuit_concept.jpg

設置物を「レッドケーブル」か「グリーンケーブル」で接続すると、赤と緑の範囲で図示したように独立したネットワークが形成される。

接続された設置物は個々のネットワーク内で「信号」を送受信する。

信号は設置物の「定数回路」「算術回路」「条件回路」により制御し、機器の動作設定などの目的に応じて活用することができる。
これらはネットワーク構築における大きな役割を担っており、この概念を「回路ネットワーク」と呼ぶ理由となっている。

応用の幅は広く、例えば以下のような物がある。

  • 初級
    • 各アイテムの在庫量低下時の警告
    • 中間品分配の優先順位管理
  • 中上級

この他、実用性は無いが、ランプやプログラマブルスピーカーでアニメーションや音楽を作ることすらできる。

 

アイテム在庫管理に関する物流ネットワークとの比較検討

回路ネットワークと物流ネットワークは類似する点も多く、アイテムの在庫管理での利用においては比較検討の余地がある。

参考に、以下にどちらが適するかのフローチャートを用意している。

cirvsbot.png

在庫管理の例として、素材にアイテムAを要求するアイテムBの生産について、Aの在庫数に応じて制御したい場合を挙げる。
事前にロボットステーションが配備されていて、AとBが入るストレージチェストが同一の物流ネットワーク上にあれば、回路ネットワークを用いずともAの在庫数に応じたBの生産の制御が可能である。

具体的には、物流ネットワークの構築ができていれば、遠隔地にある緑基板の在庫数に応じて赤基板の生産をオンオフするために、わざわざレッド・グリーンケーブルを伸ばして接続する必要はないということになる。

他方で、ロボット関係の研究が済んでいなかったり、単純な在庫数の比較以上の計算が必要な場合は回路ネットワークの使用が適当である。

 

信号について

信号(シグナル)は、種類と値で構成される。

  • 種類 … アイテム、英数字、色など(種類としての数字と値は無関係)
  • 値 … -2,147,483,648 ~ 2,147,483,647 の整数(32 bit の符号付き整数)
    • 値が 0 の信号は無信号扱いであり、回路ネットワークに送信されない。
    • 値は 1 tick ごとに再計算・更新される。(1 tick = 1/60 秒)
    • 同一ネットワークに同種の信号を出力する機器が複数あった場合、その信号の数値は合算される。

circuit_1.jpg

レッドケーブル、グリーンケーブルについて

設置物を繋いでネットワークを構築し、信号を伝達するための導線。
接続可能な設置物についてはこちらを参照→回路ネットワークへ接続可能な機器

ケーブルの色

ケーブルがレッドかグリーンかによって、ネットワークが区別される。
2色のケーブルを1つの設置物に繋ぐこともできる。

ケーブルの取り扱い

消耗品であり、ケーブルが接続された設置物を撤去してもケーブルは返ってこない。
設置物を結ぶケーブルはコピー&ペーストで複製可能で、実物が設置されると自動でケーブルも配線される。
ケーブルを消すには、同色のケーブルで上書きするように繋ぐ操作をすると消える。

ケーブルの接続距離

ケーブル1本の長さは限られているが、設置物を経由すれば接続距離に制限はなく、信号の減衰もない。
大型電柱から大型電柱への間などは通常より長い距離を繋ぐことができる。

注意点

ループ回路では、信号の値が毎tick計算・更新されるので比較的処理負荷が大きい。
そのため、あまりに大量の算術回路の入出力をループさせるように繋ぐと処理落ちやクラッシュを誘発する事もある。
数十個程度ならまず問題ないが、大規模な回路を組む際は頭の片隅に入れておこう。

定数回路、算術回路、条件回路

この項では「定数回路」「算術回路」「条件回路」の仕様について説明する。
定数回路を除き、入力側と出力側があり、双方にケーブルを接続して利用する。
ケーブルは複数接続することも可能である。

circuit_2.jpg
外観

これらの各設置物をクリックすると、設定ウィンドウが開き、計算方法や条件を設定できる。

circuit_3.jpg
設定ウィンドウ

定数回路について

指定した信号を出力し続ける機器。
設定ウィンドウで出力する信号の種類とその値を20種類まで指定できるほか、定数回路の出力の一括ON/OFFもできる。
値はテキストボックスに直接入力することで巨大な値や負の値も指定することができる。

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

算術回路について

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

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

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

シンボル演算名演算例注記
+加算1 + 2 → 3
-減算3 - 2 → 1
*乗算3 * 2 → 6
/除算5 / 2 → 2商のみ出力
%剰余5 / 2 → 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を返す

※AND/OR/XORはビット演算である点に注意が必要である*1
※ビットについてはビット演算解説で詳しく解説している。

  • 指定した信号の入力がない場合、その信号の値は 0 として扱われる。
  • 計算結果が 0 または0除算などで計算できない場合は、信号は出力されない。
  • 計算結果が値の範囲の上下を超えると以下のようにオーバーフローする。

    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 * 1 = 16px-wood.png
算術回路への入力信号:A,B,C
算術回路の動作:信号A,B,Cを受け取り、(A+B+C)の計算結果を材木 16px-signal_each.png の信号として出力する

また、入力信号が 16px-signal_each.png の時に限り、出力信号にも次のように 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_everything.png16px-signal_anything.png があるが、算術回路では 16px-signal_each.png のみが使用できる。
詳細は条件回路の項で述べる。

 

条件回路について

指定した条件式が成り立つ時のみ、任意の信号を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の遅延がある。(算術回路と同様)

条件回路における「*」の指定と効果

(1)条件式における「*」

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

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」として機能する。

 

(2)出力信号における「*」

16px-signal_everything.png:赤*「全て(Everything wildcard,AND)」
条件式が真ならば入力信号を全て出力する。条件式が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を出力する → 条件回路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 ⇒ X=1」と設定した条件回路、同「B>0 ⇒ X=1」「C>0 ⇒ X=1」を用意の上、この3つを「X>0 ⇒ 16px-wood.png=1」とした回路に繋ぐ必要がある。

 

算術回路・条件回路の入出力に2色のケーブルを接続した場合の仕様

1つの算術回路・条件回路の入力側にケーブルを2色とも接続した場合、両ケーブルの全ての信号に対して区別なく演算・条件判定がなされる。
出力側に2色とも接続した場合は、両ネットワークに同じ信号を出力する。

動作例と説明

(例1)条件回路の入力側に2種類のケーブルが接続されている場合

レッドケーブルから入力に接続されている信号:A=1
グリーンケーブルから入力に接続されている信号:A=1
条件式:A>1
出力:A、入力数
結果:A=2が出力される。

n10.png

 

ランプ

ランプにケーブルを接続すると、作動条件が設定できるようになり(図1)、日中や夜間に関係なく点灯が可能になる。
条件には任意の信号・数値に加えて16px-signal_everything.png16px-signal_anything.pngが指定できる。

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

lamp01.png
図1

ランプの点灯色の変更

回路ネットワークに接続されたランプは、設定ウィンドウで「色の使用」にチェックを入れる(図1)と点灯する色を変更できるようになる。
白色以外に6種類用意されており(図2)、ネットワーク内の色信号(図3)の有無によってランプの色が決まる。
作動条件とは無関係であり、条件に色信号を用いる必要はない。

RGB等の値による調整には対応しておらず、白、グレー、黒の信号については全て同じ白色になる。

lamp02.png
図2

lamp03.png
図3

注意点

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

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

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

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

搬送ベルト

 搬送ベルトはアイテムを運搬・移動する、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種類が選択できる。パルスモード、ホールドモードは、「搬送ベルト」の項の説明と同様であり、応用例も同様に実現可能であるため、ここでは省略する。

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

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

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

なお、フィルターインサーターに設定できるフィルタの種類は制限されている(通常版は5種類、スタック版は1種類)。
もし、回路ネットワーク上に制限種類数を超える信号が入力されていた場合、インベントリのアイテム作成欄に表示されている順で優先され、低優先の信号は無視される。

応用例

寿司ベルト

sushi1.jpg

研究で必要な最大7種類のサイエンスパック(SP)を、任意個の研究所に少ないレイアウト制約で供給する有名な方法。
海外Factorioプレイヤーの間でも "Sushi belt" として知られる。

仕組みは単純で、以下の3部品により現在のベルト上の各SPの数を保持する。

赤ネットワークと算術回路
「黄* + 0 → 黄*」の算術回路の入出力が繋がれていて(ループ回路になっていて)、他に入力がなければ前のtickでの値をそのまま次のtickに保持する。
即ち、ここでベルト上の各SP数を保持する。
ベルトに供給するインサータ
インサータがコンベアに供給したSPの数を逐次出力する。
つまり、赤ネットワーク上のSPのカウンタを増やす。
それに加え、赤ネットワーク上のSPのカウンタが一定以下の場合のみ動作するよう設定されている。
ベルトから研究所へ供給するインサータ
インサータが研究所に供給したSPの数を緑ネットワークに逐次出力する。
更に、緑ネットワークは-1倍して赤ネットワークに出力する。
したがって、インサータが研究所にSPを供給すると、その数だけ赤ネットワーク上のカウンタが減る。

このように回路を組むことによって、ベルト上が1色のSPで埋まってしまうということを防ぎつつ、1本のベルトで多種類のSPを供給できる。
インサータはこの図でいう内側のレーンにしかSPを置かないので、コンベア上のどこかでレーン均等化の処理も入れておく(図右上)とより流量が上がる。

補足

  • 寿司ベルトは電力不足に対して脆い。
    • 電力不足の間、不足率に応じて算術回路の計算が行われないtickが生じる。
      その結果、インサータで運んだアイテムが回路に反映されず、実際のSP収支と回路上のSP収支にズレが生じる。
  • 適正なSP供給数は、循環用ベルトの長さやSPの種類により変わる。
  • 循環用ベルトや研究所に供給するインサータを上位の物にした方が、研究所の稼働率が上がる。
    • 理由: 目的色のSPが回ってくるまでの待ち時間で、インサータの実効処理能力が落ちる。
      これを補うために処理能力は過大なくらいでちょうど良い。
  • ベルトに供給するインサータの代わりにベルトを使っても同等の制御ができる。
    インサータと比べて挙動が若干不安定になるが、省電力である。

ロボットステーション

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

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

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

robst01.png

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

アイテムの状態の送信

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

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

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

駅/列車

列車ネットワークに回路ネットワークを接続することで、駅や列車の動作を回路信号に基づいて制御が可能となる。
また、停車中の列車の貨物情報等も、回路ネットワークに送信することができる。

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

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

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

nolink

駅の無効化

「駅の有効/無効」にチェックを入れると、指定した作動条件が真となるときのみ駅が有効になる。
無効になっている駅は存在しないものとして扱われ、その駅に向かうはずだった列車は以下の挙動を取る。

  • 有効な同名駅が無い場合、無効化された駅を無視して次の駅に向かう
  • 有効な同名駅が他にある場合、そちらに向かう
  • 有効な同名駅があるが到達不能な場合、到達可能な同名駅が有効になるまでその場で停車し続ける

なお、列車が駅に向かっている途中で駅が無効化された場合、直ちに上記ルールでルート再計算を行い、それに応じて走行する。
特に最後の条件に当てはまる場合、変な位置で停車してスタックを招くことがある。
そのため、無効化することがある駅では同名駅の扱いに注意する必要がある。

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

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

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

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

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

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

  • 対象は、貨物車両・タンク貨車の内容のみ。機関車の燃料インベントリ情報は送信されない。
  • 複数の貨車が接続されていても、すべて合算された値が回路信号として送信される。
  • 自動モードで、さらに停車中のみ送信されることに注意。

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

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

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

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

列車数の上限数

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

列車数の読み取り

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

蓄電設備(蓄電池)

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

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

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

電源スイッチ

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

 

電柱などに繋がった電力ネットワークの電線はアイテム「32px-copper-cable.png銅線」で回路ケーブルと同様の編集ができる。
繋がっているところを切断したり、集合したところでは選択したところだけ繋げるなども可能

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

電源スイッチは、やや設置の仕方が特殊なので注意が必要である。通常、電柱の範囲に入った設置物は電力ネットワークに入るが、電源スイッチは、中間生産物の「銅線」を、左右に分かれているユニットそれぞれにプレイヤー自身でつなぐ必要がある。つなぎ方は回路ネットワークによるレッド・グリーンケーブルと同様である。
その後、回路ネットワークに接続するには、信号を送受信したい他の設置物とケーブルでつなげばよい。ケーブルをつなぐと、直ちに回路ネットワークに接続され、クリックすると図1のようなウィンドウが開く。通常は電源スイッチの状態はプレイヤーが自分でオフ/オンを選択できるが、回路ネットワークに接続すると、プレイヤーは選択できなくなり、信号の条件を満たす場合のみ、オンを選択するようになる。
ps01.png
図1

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

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

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

ゲート、列車用信号

ゲート

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

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

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

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

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

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

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

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

gate02.jpg
 

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

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

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

 連動式/列車用信号と任意の設置物とをケーブルでつなぐことで回路ネットワークに接続される。回路ネットワークに接続した連動式/列車用信号には、関連する専用部分が追加して表示される。

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

信号の条件を満たす際に列車用信号を赤にする

列車用信号は、前方の閉塞区間の列車の有無を監視して信号を切り替える。
回路信号を利用すると、所定の条件を満たす時に強制的に赤信号に変更できる。
設定時は、下図のように「動作モード」の「信号を閉じる」にチェックを入れ、出てきた「停止条件」に回路の条件を入力すれば良い。
sig01.jpg
なお、以下2点には注意が必要。

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

列車用信号の状態を信号として送信する

 図4に示すように、「動作モード」の「信号を取得する」にチェックを入れると、「出力信号」の欄が表示され、現在の列車用信号の状態(赤・黄・緑・青)に応じた回路信号が回路ネットワークに送信される。

  • 初期状態では、列車用信号色に応じた色シグナルが設定されている。任意の回路信号に変更可能。
  • 出力される回路信号の値は、1である。
  • 通常信号で「信号を閉じる」と併用した場合、信号からの出力は以下の通りになる。
    • 「信号を閉じる」の条件を満たしていない → 通常と同様に赤/黃/緑が出力される。
    • 「信号を閉じる」の条件を満たしている → 信号を閉じるが無くとも赤信号になる状況なら赤、それ以外は出力なしになる。

sig02_016.jpg

応用例:踏切

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

各種チェスト

 各種チェストは、ケーブルをつないだ時点で、チェストの中身のアイテムをすべて、回路ネットワークに信号として送信する。
 要求/バッファーチェストは、回路信号で物流要求が設定可能。(リクエストモードではチェスト内容は送信しない)

  • 物流要求の設定枠(12アイテム)を超える数の信号が入力される場合、回路信号設定ウィンドウの表示順に優先されて設定される
  • チェストに格納できないアイテム(流体)や、仮想信号(アルファベット、数、色)は無視される。
  • 値が負数の回路信号は無視される。

汲み上げポンプ、ポンプ

 汲み上げポンプは海岸に設置して水を汲み上げる施設であり、ポンプはパイプライン内に設置し、流体を送る設置物である。この両者はケーブルをつなぐことで、設定ウィンドウの「動作モード:有効/無効」にチェックが入り、直ちに回路ネットワークに接続される。「作動条件」の欄に設定された信号の条件に応じて、条件を満たせば動作する(水を汲み上げる・流体を送る)よう制御できる。
 なお、これとは逆に汲み上げている・流体を送っているという作動状態を、信号として回路ネットワークに送信する事はできない。

  • ポンプは動作無効となる場合、流体を通さなくなる(弁となる)

燃料式掘削機、電動掘削機、油井

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

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

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

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

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

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

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

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

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

信号による音階再生

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

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

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

AND回路

全ての条件を満たした場合に信号を送信する回路

and.jpg

この例では、各チェスト内の鉄板・銅板が両方100個以上ある場合のみ、ランプが点灯する。
なおランプの作動条件の方で「A = 2」に設定すれば、右側の条件回路は省略できる。

右側の条件回路の条件を「A = 2」から「A > 0」に変更すれば、
OR回路(片方でも100個以上なら点灯)となる。

ラッチ回路

参考サイト

以下の様な動作を実現させたい。

  1. SET:ある条件1(一般にトリガーという)を満たすと、「ON状態」にする。
  2. STAY:SETされると、条件1を満たす・満たさないに関わらず、「ON状態」を保持する。
  3. RESET:STAYのとき、条件2(一般にリセット値という)を満たすと、「OFF状態」にする。

これは広義には「ラッチ回路」として知られる動作である。

シングルプレイかつメガベースを目指す予定が無いなら、条件回路に条件1 (トリガー) を入れただけの単純な回路で十分でありラッチ回路は必要ない。
この場合は条件1付近で数値が変動した場合に装置のオン/オフが頻繁に切り替わることになるが、これが生産能力に与える影響はほぼ無い。
一方、電源スイッチを筆頭に装置のオン/オフの切り替えがパソコンに小さくない負荷を掛けるケースがある。
そのため、マルチプレイまたはメガベースを目指すなら、ラグや処理落ちを避けるためにラッチ回路が必要不可欠な手法と化す。

タンクの水を600~1000の間になるよう制御する

画像左の汲み上げポンプから画像中央のタンクA、タンクAから画像右のタンクBにパイプがつながっている。タンクAの水が1000を超えた際のみ、水をAからBに400だけ送信する。(※ただし逆流を防ぐため、タンクAとBの間にポンプを設置している)
トリガーとリセット値を、条件回路と算術回路で構成する。

[汲上げポンプから繋がったタンク]---赤---→ [条件回路]→---赤---→[汲上げポンプ:a=0で作動]
                                            b→ [水>999, a=1 ]→a
a→---緑---→[算術回路:a*400,水]→---緑---→b

kai01.jpg

動作の解説

  1. 汲み上げポンプにより水が汲み上げられ、タンクAの水量が1000を超えると、条件回路で、入力条件「水>999」を満たすため、a=1を算術回路に出力する。
  2. 同時に、ON状態を汲上げポンプに出力し、汲み上げポンプはa=0を満たさなくなるので汲上げを停止する。
  3. 算術回路では、a=1を受け取っている限り、水=400を条件回路の入力に対して常に出力する。
  4. 条件回路にはタンクの水量+400が入力されることになる。結果、タンクの水量が599を下回るまで条件を満たし続ける。
  5. タンクの水量が599を下回ると、a=1が出力されなくなる。結果、汲み上げポンプが再起動し、水を汲み上げ始める。

蓄電池の残量が50%を切ったら蒸気機関を稼働、その後90%に回復するまで動かし続ける

応用例:電源スイッチによる電力使用優先度の変更 の応用。
①--③--⑤ と ②--④ を繋ぎ、③と④を無限ループになるように繋ぐ。
このとき無限ループになるケーブルと ①--③ / ②--④ を繋ぐケーブルは別々の色のケーブルを使用して混ざらないようにする。
後は以下のように回路の条件を設定する。
①: A > 90 のとき B=1 を出力
②: A < 50 のとき B=1 を出力
③: B = 0 のとき B=1 を出力
④: B = 0 のとき B=1 を出力
⑤: 作動条件 B > 0

rs-latch.jpg

この回路は信号の状態を③と④の無限ループで保持している。

  • ①がB=1を出力する(=残量が90%以上)と信号の状態がRESETされ、③が信号を出力しなくなる。
  • ②がB=1を出力する(=残量が50%以下)と信号の状態がSETされ、③がB=1の信号を出力する。
  • ①と②が両方出力しない(=残量が50%以上90%以下)と信号の状態がSTAYされ、前回と同じ信号を出力する(しない)。
  • ③が信号を出力している間は電源スイッチがONになり蒸気機関が稼働する。
※上記システムのラッチ回路を組まない方式例

上記システムを条件回路を使わずにわかりやすくしたもの
storage_rate_switch.jpg

  • 構成施設
    • 電源スイッチ1基+チェスト1個
    • 搬送ベルト3枚
    • インサータ2本+蓄電池1基
  • 構造説明
    1. 「電源スイッチとチェスト」をケーブルで繋げる
      電源スイッチは条件を「 【チェストに入れるアイテム】>0 」に設定する
    2. チェストに電源スイッチで条件付けしたアイテムを1個入れる
    3. インサータを2本「 チェストから取り出す→搬送ベルトで流す→チェストへ入れる 」ように配置
      インサータがアイテムをチェストから出せばOFF
      インサータがアイテムをチェストへ入れればONという構成ができる
    4. そして「2本のインサータと蓄電池」をケーブル繋げて条件設定する
      1. 例として
        入れるインサータを「 【A】 < 10 」
        取り出すインサータを「 【A】 > 60 」
        と設定すれば「蓄電率10%未満で起動・61%以上で停止」という非常電源用のシステムになる
      2. 一応<>記号を反対に
        入れるインサータを「 【A】 > 50 」
        取り出すインサータを「 【A】 < 20 」
        と設定すれば「蓄電率51%以上で起動・20%未満で停止」となり工場の一時停止システムにできる
    • ※搬送ベルトに落ちているアイテムをうっかり拾ってしまうとスイッチが起動しなくなる
      それが嫌な場合は搬送ベルト部分をチェストでリレーさせる形にすると良い

回路数削減と、信号を整理した版

rs-latch2.jpg

右側の条件回路は、緑ケーブルで入り口と出口をループさせる。

電力残量が50%以下でB(SET信号)が入力され、右の回路がB=1の信号を出力する。
電力残量が90%以上でC(RESET信号)が入力され、右の回路は信号を出力しない。
どちらの信号もない場合、右側の条件回路は前回の出力状態を保持する。

クロック回路

クロック回路は、時計の秒針が規則正しく時を刻むように、ある特定の時間周期ごとに規則的に値を上昇させることによって、複数の回路のタイミングをとることを目的とした回路である。
回路ネットワークの計算の処理単位である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が出力される」という現象を防止するための仕組み。
この現象が起きても実用上問題ないことは多いはず。その場合は右側の条件回路は省略できる。


*1 一般的な計算ツールのように「0以外はTRUE」と考えると誤りが生じる。例えば、5 AND 8 = 0 となる。
*2 空虚な真(vacuous truth)と呼ばれる。