from 種類ごとに収納数を調整できる自動仕分け機

収納数を調整できる自動仕分け機draftTODO

  • V字クロックで2段のを作って紹介する
  • アクセス可能な範囲は何段? image

image

image

image

https://scrapbox.io/files/61336659a08d2f001d611fa1.mp4

https://scrapbox.io/files/613368354ee7a4001d9e3fde.mp4

https://scrapbox.io/files/613367e8574b8500231b91f0.mp4

リピーターの有無と伝わり方

なぜ4T遅延だとダメで5T遅延だとOKなのか? 第二章後半

  • アイテムエレベータ

9/5 https://n5v.net/dropper-item-elevator/

  • 他の人の記事でもホッパーとドロッパーが絡んだ時に「計算では間に合わないがなぜか間に合う」みたいなことが書いてあるから、どうやら1ティックの中での処理の順番の関係で差が出るのだろうなぁ。
  • これを実験しようとしたんだけど上京によって違う値になってしまった
    • Q1 : 時刻T0にドロッパーにシグナルが到達した場合、アイテムが射出されるのは何ティック後か

    • Q2: ホッパーXの上にどこにも繋がってないホッパーYがあるとする。時刻T0にYにアイテムが到達した場合、Xに到達するのは何ティック後か。

    • 今の予想は両方1

  • プログラマ的透視能力を使って観察すると、ホッパーにはインベントリとは別に新しく追加されたアイテムを入れる配列があるはずだ。なぜなら直接追加してしまうと、それを吸い取れるホッパーが「アイテムあるから吸い取ろう」と処理してしまい、結果的に1ティックでたくさん移動してしまうから。
  • それとは別に「アイテム追加からのティック数」を保持する変数がある。送り出しの際にはこの値が4以上であるかどうかを判定することで「ホッパーに入れたものが毎ティック送り出される」という状況を防いでるはず。
  • このカウンタはドロッパーでアイテムをホッパーに入れた時にはリセットされる。そして「ホッパーでアイテムを入れてカウンタをリセットする処理」が「カウンタが4以上なら送り出す」の判定よりも1ティックの中で先に行われるので4ティック以上前に入ったアイテムが送り出されない。
  • この解釈が正しければ4ティックより短い間隔でドロッパーからアイテムが挿入されるホッパーからはアイテムが送り出されないことになる。ドロッパーを2つ使って交互に撃てば実験できそう。
  • 「4ティック未満」ではなく「4ティック以下」が条件だったのでドロッパー1個で再現できた

ドロッパーもホッパーも1ティックで動く

サバイバルの6段チェストをこれでやろうと思ったが

  • 奥行き6と結構でかいので前のバージョンを置いてる場所くらいしかいい置き場所がない
  • クロックの根本ではなく上でズレの調整をしないといけないが高所作業だしタイトに作られてるので取り回しに余裕がない
  • ケースバイケースで変わるから突き詰めても意味がないと思ってたけど、エレベータで持ち上げたものをチェストに入れてそこから吸うなら形は固定できる
    • と思ったがアイテムエレベーターでチェストに入るタイミングが同期されてないので…
    • しかしこれ、同期しない方が取り回しの自由度が高まって良いのでは
    • チェストに入れたものをホッパーで吸ってドロッパーに入れ、改めて射出すれば位相は揃う
  • アイテムエレベーター、周期4でいいだろ感
    • 下でコンパレータ使ってクロックする例が挙げられてるが、その結果ホッパーに複数入ると壊れるとか微妙
    • 下で判断したら上にアイテム余るじゃん、上と下からパウダー引いてワイヤードORでどうか?
  • ホッパーの長さによって適切な調整がどう変わるか?
    • クリエイティブで確認する

第三章

その他

  • ボタンは15ティックの長さのパルスを送出する。
  • リピーターは横からリピーターやコンパレータでシグナルを入れると出力をロックできる

収納数を調整できる自動仕分け機draft

メモ

  • 先に単純に止める場合の説明を書いた方がいいか
  • 27スタック、1スタック64個、1個0.8秒、1382.4秒、およそ23分、マイクラの昼2回分

さて、このシグナルを使って上下のホッパーを交互にオンオフさせる。ホッパーは見た目でオンオフがわかりにくいのでまずトーチで挙動を確認する。

https://scrapbox.io/files/6130f74cdae669001dc03c63.mp4

https://scrapbox.io/files/6131068bf7dd2500207f5f26.mp4

問: この状態で上のチェストに物を入れたらどうなるか?

  • 答: 下のホッパーに入る
  • 理由
    • T1: 上のホッパーがONになり、1つ吸い取る
    • T2: 下のホッパーがONになり、上のホッパーの中身を吸い取る
  • これでは横のチェストに物が入らない、どうすれば良いか?
    • こうする?
      • T1: ドロッパーが上のホッパーに1つ入れる
      • T2: 上のホッパーがONで、チェストに入れられるなら入れる
      • T3: 下のホッパーがONになり、上のホッパーに残っているものを吸い取る

ドロッパー、なぜ?

  • 1つずつにする必要がある
  • 上のホッパーはチェストから直接アイテムを吸ってはいけない
    • 常時アイテムが吸える状況では、オンである最後のティックにも吸ってしまい、それがたとえチェストに入るものであっても下のホッパーに吸われてしまう
      • 追加あり
  • 単に上のホッパーをT1, T2ともオンだとどうなる?
    • 上のホッパーが1つ吸って、次のステップで送り出すより先に下が1つ吸う
  • 上のホッパーにものを吸わせるのではなく、別のホッパーが送り出せば良いのでは?
    • そのホッパーがシグナルで制御されてない場合、上のホッパーがオフの間にもものが送り込まれてしまう
  • などを踏まえるとドロッパーの「オンの時間が2ティックあっても、1つだけ送り出す」という挙動がちょうどいい
    • なお、立ち上がりのタイミングではなく2ティック目で送り出す
  • 追記
    • ホッパーが8ティックごとにしか動かないことにより「最後のティックで吸ってしまう」は防げる

あっ、そもそもホッパーが8ティックごとにしか動かないぞ

  • 速いクロック信号ではダメだ

8ティックのクロック信号を作る必要がある

  • コンパレータがあるなら向かい合わせのホッパーにものを1つ入れてコンパレータで存在チェックをすればいい
  • ない場合、リピーターの最大遅延4ティックを重ねる?
  • ロジックアナライザ@マイクラを作って確認した、V字クロックの遅延を3にすれば良い

https://scrapbox.io/files/613257c5c69368001dd7a578.mp4 うーん、うまく動かないぞ、全部下に流れてる 想定している動作

  • 4オン4オフやそれより長いシグナルがくる(動画は5)
  • T0でドロッパーと下のホッパーがオンになる (ホッパーのオンとは動作停止)
  • T2?にドロッパーから上のホッパーにアイテムが入る
  • 下のホッパーは停止していて上のホッパーは動いているので右のチェストにものが入る(期待した挙動)
    • 実際の挙動: 下のチェストに入ってる

つづく

ホッパーの吸い取りが8ティックに1回なら上のホッパーの吸い取りに任せても良いのでは

  • うーん、5オンだと半々に別れて4オンだと全部下に行くなぁ

長さ6のパルスを作りたかったので長さを調整できるパルスジェネレータを作りました。

パルスのオンの幅が4だと全部下のチェストに入って、5だと半々になり、6だと上だけに入る。

  • なぜそうなるのかはわからないがオン6オフ6のシグナルを流すことが大事だということがわかった。
  • こうなる理由は多分ホッパーがオンになった瞬間に動くのではなく、2ティック遅れて動くのかな、と。 あ、違うな、長さ6でも半々に別れる。これはホッパーの挙動を確認するのが先か…

ホッパーを並べて挙動を検証 つまり整理すると

  • ホッパーからの送り出しには最低5ティック必要
  • 5ティック目で吸い取りも発生する(おそらく送り出しより先に)
    • →だから長さ5のパルスを入れたケースで、6ティック目で下のホッパーがONになった時に上のホッパーが直前に吸ったものが残っていて、それを吸い取ってしまい「半々に別れる」という挙動になったわけだ
  • ドロッパーで流量制限する必要がある

できたできた「チェストに入れられるなら入れて、入れられないなら下のホッパーに渡す」というユニットがちゃんと動いた。これで備蓄上限を制御できる自動仕分け機ができる。

「長さ5のパルスを作る」ってのをコンパレータ無しで作る方法ってあるかな?