Skip to content

Repository files navigation

cc-fission-control

Mekanism の**核分裂炉(Fission Reactor)**を ComputerCraft: Tweaked から自動制御する Lua プログラム。Minecraft 1.20.1 / ソーダリウム冷却構成を想定。

安全装置(自動 SCRAM)+ 自動 burn rate 調整 + モニター GUI の 3 点入り。

⚠️ 核分裂炉は暴走するとマップが消し飛ぶ。このプログラムは安全最優先で組んであるが、しきい値(config.lua)は自分の構成に合わせて確認・調整してから本運用すること。まずは予備の世界 or 小規模炉で挙動を確認するのを強く推奨。


機能

  • 自動 SCRAM(緊急停止): 毎サイクル炉の状態を評価し、危険なら即停止
    • 高温(プロファイル依存、ダメージ開始 1200K の手前で SCRAM)+ ソフトリミットで手前から減速
    • ダメージ検知(既定 1% 超で停止)
    • 冷却材不足 / 加熱冷却材の詰まり / 廃棄物満杯 / 燃料切れ
    • フェイルセーフ: 温度などの重要値が読めなければ「危険」とみなして停止
  • トリップ後ラッチ: 安全停止(自動 SCRAM)したら自動再起動しない。人間が IGNITEI)で点火するまで再点火しない(原発制御の鉄則)。トリップ時はブラックボックス(落下直前の軌跡)を記録・表示
  • 起動時の能力監査: メソッド名が MOD バージョンで違う場合、黙って安全無効化せず起動を中止して知らせる
  • 自動 burn rate 調整: 冷却系(coolant/heated/水/蒸気/蓄電)を設定値に保つよう burn rate を PI 制御(デッドバンドで発振防止、炉の上限で自動クランプ)。理論上限の直下に自動で張り付く
  • 3 段階プロファイル: safety / balance / performance を config 一行・画面ボタンで切替。温度(目標・SCRAM)だけでなく、出力を決める冷却系 setpoint(coolant/heated/水/蒸気)も切り替わる(攻めるほど coolant↓ / heated↑ / 水↓ / 蒸気↑)
  • ボイラー監視(任意): Thermoelectric Boiler の水位を読み、水枯れ(coolant 崖落ちの上流原因)の手前で出力を頭打ちにする
  • タービン監視(任意): Industrial Turbine の蒸気・エネルギーが満タン近くなら出力を絞る(蒸気逆流→過熱を未然に防ぐ)
  • モニター GUI: 状態を REACTOR(DAMAGE/COOLANT/HEATED/WASTE/FUEL)/ BOILER(WATER)/ TURBINE(STEAM/BATTERY)のカテゴリ別グループ(cyan 見出し付き)で表示。各バー、burn rate、発電量(PWR、FE/t)、状態バナー。画面表示は ASCII(CC: Tweaked は日本語を描画できないため)。モニターサイズに自動追従getSize() ベースのレスポンシブ、monitor_resize で即再描画、入らない項目は優先度順に省略)。BATTERY(蓄電量)は中立色(満タン=赤の誤警報を出さない)
  • 制御の可視化: RUNNING 中は状態行に制御内容を表示(SEEK+=上限へ攻め中 / SEEK-=境界で微調整 / COOL! / COOL-SAT / THROTTLE)。自動制御が効いているか一目で分かる

運転プロファイル

config.luaprofile を変える(または画面の SAFETY/BALANCE/PERF ボタンで切替、state に保存)だけ。ダメージ開始は 1200K。

温度だけでなく出力も切り替わる。 v4 制御では出力(burn の張り付く点)は温度ではなく冷却系の setpoint(coolant/heated/水/蒸気)で決まるため、プロファイルはその setpoint 群も一緒に切り替える。攻めるほど coolant↓ / heated↑ / boilerWater↓ / turbineSteam↑ / temp↑ の方向。

プロファイル 目標温度 SCRAM 温度 coolant↓ heated↑ 水↓ 蒸気↑ 用途
safety 850K 1050K 20% 50% 55% 45% マージン厚め。まず安全に
balance 1000K 1150K 12% 60% 40% 60% 効率と安全の中間(既定)
performance 1100K 1175K 10% 72% 30% 92% 高出力寄り(ソーダリウム高冷却前提)

coolant/水 は下限(これ以上に保つ)、heated/蒸気 は上限(これ以下に保つ)。攻める方向ほど coolant・水の下限を下げ、heated・蒸気の上限を上げ、burn を runout 直下まで伸ばす。 ダメージ開始は 1200K。温度は手前で止まるよう余裕を持たせてある。初回は safetybalance で挙動を見て、問題なければ上げる。 ハードの最終安全層(coolantFloorPct / boilerWaterFloorPct / heatedCeilPct / turbineSteamCeilPct / safety.* / SCRAM)はプロファイルで変わらない=全プロファイル共通で固定。攻めても暴走の最後の砦は不変(安全 > 出力)。

必要なもの

Minecraft 1.20.1
MOD Mekanism + ComputerCraft: Tweaked
ブロック Fission Reactor Logic Adapter(炉に設置済み)
ブロック(任意) タービン監視を使うなら Industrial Turbine 側にも Logic Adapter / Turbine Valve をコンピュータに繋ぐ
コンピュータ Advanced Computer 推奨(色表示)。Advanced Monitor があれば GUI が綺麗

Logic Adapter はコンピュータに隣接させるか、**有線モデム(Wired Modem)**で繋ぐ。モニター・タービンも同様。タービン未接続でも config.turbine.required=false(既定)なら炉だけで普通に動く。

API の検証について

安全に関わる炉のメソッド(getStatus / getTemperature / getDamagePercent / getCoolantFilledPercentage / getHeatedCoolantFilledPercentage / getWasteFilledPercentage / getBurnRate / setBurnRate / getMaxBurnRate / scram / activate)と、タービンの getEnergyFilledPercentage は、実運用スクリプトと照合して名称を確認済み(パーセント系はいずれも 0-1 の割合で、コードが自動で ×100 する)。getFuelFilledPercentage / getActualBurnRate / getBoilEfficiency は使用例が確認できなかったため、未実装でも起動時に警告するだけで安全には影響しない設計にしている。

操作

キーと、Advanced Monitor のタッチの両対応。起動・停止を 3 つに分けてある。

キー 画面ボタン 動作
I IGNITE 点火(その瞬間が安全な時だけ許可)。前回の高 burn 残りを無効化するため一度 burn を 0 にしてから点火する。SCRAM/STOP 後の再点火もこれ
S STOP 通常停止。burn を 0 まで穏やかに絞ってから止める(=次の点火が安全)。DISARMED へ
X SCRAM 緊急停止(即叩き落とし)。DISARMED へ
Q プログラム終了(終了時は安全のため炉を SCRAM する
SAFETY/BALANCE/PERF 運転プロファイルをその場で切替(即反映 + ファイル保存)
  • 旧操作からの変更: 旧 ARM(R) → IGNITE(I)。旧 S=SCRAM は S=STOP(通常停止)になり、緊急停止は X に分離した。
  • プロファイルは画面タッチで切り替えられ、state ファイルに保存される(再起動後も維持)。config.luaprofile は初期値。
  • 自動の安全トリップは従来どおり: 危険を検知すると自動 SCRAM し、SCRAMMED(ブラックボックス記録 + ラッチ)になる。人が IGNITE するまで再点火しない。
  • 状態: DISARMED(待機・炉OFF)/ RUNNING(稼働・自動制御中)/ SCRAMMED(安全トリップ・要再点火)

ComputerCraft セッティング(物理セットアップ)

ファイルを入れる前に、ゲーム内のブロック配線を済ませる。

1. 炉に Logic Adapter を付ける

  • 核分裂炉マルチブロックの外壁の任意の 1 ブロックFission Reactor Logic Adapter に置き換える(Casing と差し替え)。これが CC から炉を読む口になる。

2. コンピュータを用意

  • Advanced Computer(金色)を推奨。色付き GUI が出る。普通の Computer でも文字バーで動く。
  • 出先表示が欲しいなら Advanced Monitor を 2x3 以上で並べると見やすい。

3. 配線(2 通りのどちらか)

A) 隣接させる(最小構成)

[Logic Adapter] ─ 隣接 ─ [Computer] ─ 隣接 ─ [Monitor]

ブロックを直接くっつけるだけ。小規模ならこれで十分。

B) 有線モデムで離す(推奨・実用的)

[Logic Adapter]──[Wired Modem]
                      │ (Networking Cable)
[Computer]──[Wired Modem]──┼──(cable)──[Wired Modem]──[Monitor]
                      │
              [Wired Modem]──[Turbine Valve / Logic Adapter](タービン監視する場合)
  • 各機器(Logic Adapter / Monitor / タービン)に Wired Modem を貼り、Networking Cable でコンピュータのモデムまで繋ぐ。
  • 貼った Wired Modem を右クリックして有効化(赤→明るくなる)。これで peripheral として認識される。
  • コンピュータ側にもモデムを貼って有効化する。

このプログラムは周辺機器を自動検出する(炉=getTemperature を持つ機器、タービン=getEnergyFilledPercentage を持つ機器、モニター=monitor)。複数あって誤検出する場合だけ config.luaadapterName / turbine.name / monitorName に正確な名前を指定する。名前は CC のコマンド peripherals(または各モデムを右クリックした時のチャット表示)で確認できる。

4. タービン監視を使う場合(任意)

  • Industrial Turbine 側にも Turbine Valve か Logic Adapter を置き、上記 B の配線でコンピュータのネットワークに繋ぐ。
  • 使わないなら何もしなくてよい(config.turbine.required=false が既定なので炉だけで動く)。

インストール

ゲーム内のコンピュータのターミナルで、以下のどれか。

方法 A: installer 一発(公開後・推奨)

wget run https://raw.githubusercontent.com/jirachiuwu/cc-fission-control/main/install.lua

install.lua が全ファイルを自動で落とす。

方法 B: 個別 wget

wget https://raw.githubusercontent.com/jirachiuwu/cc-fission-control/main/config.lua  config.lua
wget https://raw.githubusercontent.com/jirachiuwu/cc-fission-control/main/reactor.lua reactor.lua
wget https://raw.githubusercontent.com/jirachiuwu/cc-fission-control/main/turbine.lua turbine.lua
wget https://raw.githubusercontent.com/jirachiuwu/cc-fission-control/main/boiler.lua  boiler.lua
wget https://raw.githubusercontent.com/jirachiuwu/cc-fission-control/main/state.lua   state.lua
wget https://raw.githubusercontent.com/jirachiuwu/cc-fission-control/main/ui.lua      ui.lua
wget https://raw.githubusercontent.com/jirachiuwu/cc-fission-control/main/fission.lua  fission.lua
wget https://raw.githubusercontent.com/jirachiuwu/cc-fission-control/main/startup.lua  startup.lua

全ファイルはコンピュータのルート(/)に置く。require は同じディレクトリの兄弟ファイルを解決する。

起動

fission

startup.lua を入れておけば、コンピュータ再起動で自動実行される。

セットアップ手順(最短)

  1. 上記でファイルを入れる
  2. config.lua を開いて初回は debug = true にする
  3. fission を実行 → 起動時に API の生値が出るので、% 系の値が 0-1 の小数か 0-100 かを確認(コードは両対応だが念のため)+ しきい値が自分の構成に合うか見る
  4. debug = false に戻す
  5. fission 実行 → R で点火

config.lua の主なしきい値

キー 既定 説明
profile balance 起動時の運転プロファイル(画面ボタン切替で state に保存され、以後はそちらが優先)
monitorTextScale nil モニターの文字スケール。nil ならモニター本来(中型で収まりが良く起動直後のサイズずれも無い)。大型で情報を小さく詰めたい時だけ 0.5 等を指定
safety.scramTemp (profile) これ以上の温度で即SCRAM(K、プロファイルで決まる)
safety.scramDamagePct 1.0 ダメージがこれを超えたらSCRAM(%)
safety.minCoolantPct 3 冷却材がこれ未満(runout 直前)でSCRAM(%)。※実機 coolant は循環で 7〜15% で運転するのが正常
safety.maxHeatedCoolantPct 95 加熱冷却材の出口が詰まりかけでSCRAM(%、最後の砦)
safety.maxWastePct 92 廃棄物満杯でSCRAM(%)
safety.minFuelPct 1 燃料切れでSCRAM(%)
control (auto-seek) 炉ごとの理論上限を自動発見して張り付く。設定不要。詳細は下の「自動制御の仕組み」
control.controlDeadbandPct 2 設定値の ±この % 以内は HOLD(SEEK+/SEEK- のチャタリング防止)。運転点は ceil 制約で setpoint - deadband、floor 制約で setpoint + deadband
control.turbineSteamCeilPct 95 タービン蒸気がこれ超でハード降圧(全プロファイル共通の最終ガード。満杯 100% まで 5%)
control.maxBurnRateFraction 1.0 炉上限に対する burn rate の割合上限(手動キャップにも使える)
boiler.enabled true ボイラー水位監視の ON/OFF(未接続なら水位制約は自動無効)
turbine.enabled true タービン監視の ON/OFF
turbine.throttleAtPct 99 タービンエネルギーがこれ以上なら出力を絞る(%)
turbine.required false true でタービン未検出時に起動中止

プロファイルが切り替える冷却系 setpoint の現行値(攻めるほど coolant↓ / heated↑ / 水↓ / 蒸気↑、上の「運転プロファイル」の表と同じ):

setpoint safety balance performance 向き
control.coolantSetpoint 20 12 10 下限(これ以上に保つ)
control.heatedSetpoint 50 60 72 上限(これ以下に保つ)
control.boilerWaterSetpoint 55 40 30 下限(これ以上に保つ)
control.turbineSteamSetpoint 45 60 92 上限(これ以下に保つ)

発電量(GUI の PWR)は getProductionRate(Mekanism の J/t)をデフォルト変換 1FE=2.5J で割って FE/t で表示する(読めない版では表示しないだけ)。

自動制御の仕組み / チューニング(設計思想 v4 = PI on coolant)

炉ごとの理論上限を自動発見して、その直下に滑らかに張り付く。 目標 burn を手で設定しなくていい。

実機の物理(ここが肝)

Mekanism の coolant は常に循環している。burn を上げるほど循環量が増え、coolant タンクの表示 % は下がって各 burn である値に落ち着く(循環で減るのは正常、容量が減ってるわけじゃない)。本当の限界(runout)は循環予備すら維持できず coolant が 0 へ向かう時。→「coolant が 99% 未満なら危険」みたいな高い閾値はナンセンス。

制御

二重制約 PI: coolant下限 coolantSetpoint(既定 12%)以上に、heated(加熱冷却材=逆流蒸気)を上限 heatedSetpoint(既定 60%)以下に保つよう burn を自動調整。「先に効く方」で頭打ちになる

  • 冷却材供給が律速の炉 → coolant が下限に達して止まる(burn は runout の ~88%)
  • タービンが律速の炉(蒸気がタービンにパンパン→ボイラー水枯れ)→ heated が上限に達して止まる(蒸気が詰まる前に頭打ち)

どちらの炉でも理論上限の直下に張り付く。余裕あり→SEEK+、設定値到達→HOLD、超過→SEEK-

変化率ゲート(重要): coolant が落下中(消費>復水でまだ追いつき待ち)の間は「上げ」を止めて HOLD。復水が追いついて落ち着いたら、また少し上げる。これで遅れ(復水のラグ)があっても追加しすぎて行き過ぎる(coolant が枯れる)のを防ぐ=「状態を見ながらゆっくり上げる」の自動化。起動オーバーシュートと波は slew リミッタ + アンチワインドアップでも抑制 → 定常は波ゼロ。

★出力をもっと攻めたい → coolantSetpoint を下げる(例 8)。安全マージンを厚く → 上げる(例 20)。 これが唯一の主ツマミ。

安全層(ハード・下げのみ): COOL!(温度→半減)/ COOL-SAT(coolant フロア割れ・heated 上限超・急落→強降圧)/ THROTTLE(タービン満タン)/ SCRAM(coolant < 3% 等の最終手前)。

設計の検証(シミュレーター)

sim/実機の循環物理モデルを構築(sim/bench.py)。複数の runout 上限で検証し、全上限で coolant=設定値に張り付き・burn が runout の ~88%(持続可能最大)・波ゼロ・溶融ゼロを確認。実物 reactor.lua を循環モデルで回す統合テスト(sim/verify_control.py)でも、coolant が循環で下がりながら理論上限の直下に滑らかに張り付くこと・SCRAM 誤発振が無いことを確認。

キー 既定 説明
control.coolantSetpoint 12 ★主ツマミ1。coolant をこの % 以上に保つ。低いほど高出力(冷却材律速の炉で効く)
control.heatedSetpoint 60 ★主ツマミ2。heated(逆流蒸気)をこの % 以下に保つ。高いほど高出力だがタービン詰まりに近づく(タービン律速の炉で効く)
control.piKiFraction / piKpFraction 0.0008 / 0.002 PI ゲイン(炉サイズ非依存)。通常いじらない
control.coolantSettleTol 0.5 %/秒。coolant がこれより急に落下中は「上げ」を止めて HOLD(復水待ち・行き過ぎ防止)
control.piUpSlewFraction / piDownSlewFraction 0.006 / 0.10 上げ/下げの最大速度(炉最大 /秒)。上げが遅ければ上げる
control.maxBurnRateFraction 1.0 上限キャップ(手動キャップにも使える)
control.coolantFloorPct / heatedCeilPct 5 / 80 割ると COOL-SAT 強制降圧(運転点 coolant≈設定値 / heated は数十% の外側に設定)
control.coolingTrendFast 6.0 %/秒。coolant がこの速さ以上で急落→即 COOL-SAT
safety.minCoolantPct 3 coolant がこれ未満(runout 直前)で SCRAM
tickInterval 0.5 制御・描画の周期(秒)

そのまま入れれば自動で理論上限まで上がって張り付く。 主なツマミは coolantSetpoint ひとつ:高出力なら下げる、安全マージンを厚くするなら上げる。 画面右上のスピナーと 0.5s実測の更新間隔。回っていれば制御は生きている。

仕組み

peripheral.find("fissionReactorLogicAdapter")(取れなければ getTemperature を持つ機器を総当たり)でアダプタを掴み、毎サイクル getTemperature / getDamagePercent / get*FilledPercentage 等を読む。coolant を低い設定値(既定 12%)に PI 制御で保つよう setBurnRate を調整し、理論上限の直下に張り付く。温度・冷却フロア・タービンの異常時はハード安全層が降圧、危険なら scram()

% 系の API は版によって割合(0-1)と %(0-100) のどちらも返しうるため、1.0 以下なら割合とみなして ×100 で正規化している(reactor.luatoPct)。

⚠️ 免責

このプログラムはベストエフォートの安全装置を実装しているが、MOD のバージョン差・config の設定ミス・想定外の構成により正しく動作しない可能性がある。重要な世界で使う前に必ずテストすること。炉の暴走による損害について作者は責任を負わない。

License

MIT

About

ComputerCraft: Tweaked auto-control for Mekanism fission reactors (MC 1.20.1). Safety-first: auto-SCRAM, post-trip latch, 3 profiles, optional turbine throttle.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages