メインコンテンツへスキップ
数日間にわたるバッテリーテストを開始した後で、使用したプロトコルが間違っていたことに気づいた経験はありませんか?バッテリーサイクラーシミュレータは、プロトコルファイルをアップロードして物理ベースのクイックシミュレーションを実行し、実際の実験を開始する前にその動作を検証することで、この問題を防ぎます。

仕組み

プロセスはシンプルです:プロトコルをアップロードし、セルを設定して、シミュレーションを実行します。
  1. アップロード: プロトコルファイルを生の形式(例:XML や JSON)でアップロードします。システムが形式を自動検出して解析します。
  2. 設定: シミュレーションしたいセルのパラメータを設定します。
  3. シミュレーション: シミュレーションを実行して結果を分析します。

ステップ1:プロトコルファイルのアップロード

コンピュータからプロトコルファイルをアップロードして開始します。 現在サポートしているファイル形式:
  • Arbin
  • BioLogic (.mps, .bttest)
  • Maccor (.xml, .csv)
  • Neware
  • Novonix (.pro2)
  • PyBaMM 実験文字列 (.txt)
ファイルをアップロードすると、システムは即座に解析し、変換されたステップを表示します。
Gamry の .dta ファイルはプロトコルファイルではないため、ここにアップロード できません。Gamry 機器からの EIS 測定データをインポートするには、 ionworksdata ライブラリを使用してください。 詳細はデータ形式を参照してください。

必要な追加ファイル

一部のプロトコルは、カスタムドライブサイクル波形や再利用可能なサブルーチンなどの複雑なステップ用に外部ファイルを参照します。プロトコルがそのようなファイルを必要とする場合、シミュレータがそれを検出してアップロードを促します。

ステップ2:確認と設定

解析後、プロトコルを確認してシミュレーションを設定できます。

プロトコルステップ

シミュレータは、タブでアクセス可能な3つの異なる形式で解析されたプロトコルを表示します:
  • Human-Readable: プロトコル内のステップの簡略化された読みやすい要約。
  • UCP (YAML): Universal Cycler Protocol 形式に変換された完全なプロトコル。実行される詳細な基盤構造を示します。
  • Raw: アップロードしたファイルの生のテキスト内容。

セル設定

意味のあるシミュレーションを実行するには、テストしたいバッテリーセルに関する基本情報を提供する必要があります。これにより、1つの RC ペアを持つ基盤となる等価回路モデル(ECM)が、セルに合わせた OCV と抵抗パラメータで設定されます。
  • Chemistry: 事前設定されたオプションのリスト(例:NMC/GraphiteLFP/Graphite)からセルの化学を選択します。これにより、モデルが使用する OCV 曲線と抵抗値が決まります。
  • Cell capacity (Ah): セルの公称容量。ECM パラメータはこの容量に合わせてスケーリングされます。
  • Resistance scale (%): 選択した化学のデフォルト値に対するモデルの内部抵抗を調整します。デフォルトは 100%(変更なし)です。例えば、抵抗を2倍にするには 200 に、半分にするには 50 に設定します。化学のデフォルトよりも高いまたは低いインピーダンスのセルを近似するのに便利です。
  • Initial SOC (%): シミュレーション開始時のセルの充電状態。
  • Temperature (°C): シミュレーションの周囲温度。
セル設定がプロトコルが設計されたセルと一致していることを注意深く確認してください。 セル設定が正しくない場合、シミュレーションが実行できない可能性があります。

高度な設定

Advanced セクションでは、実行時のシミュレーション動作を変更するオプションのルールを設定できます。

終了条件

終了条件により、変数が目標値に達したときにシミュレーションを早期に停止できます。これは、限られたサイクル数や特定の時間のみをシミュレーションする必要がある長いサイクルプロトコルに便利です。 各条件は変数比較演算子==, !=, >, <, >=, <=)、およびを指定します。いずれかの条件が満たされるとシミュレーションが停止します。 変数ドロップダウンは2つのグループに整理されています:
  • Built-in — プロトコルに関係なくシミュレーションエンジンが自動的に提供する変数
  • Protocol variables — 解析されたプロトコルで定義・抽出された変数
Total time
Total time は、シミュレーションの累積経過時間を秒単位で追跡する組み込み変数です。プロトコル自体のステップロジックとは独立して、シミュレーションの実行時間を制限するために使用します。 Total time を選択すると、値フィールドの横に単位ピッカーが表示され、時間、またはでしきい値を入力できます。値はシミュレーションエンジン用に自動的に秒に変換されます。 例えば、長いサイクルプロトコルを2時間後に停止するには、Total time >= 2 hours の終了条件を追加します。
プロトコルが total_time という名前の独自の変数を定義している場合、プロトコルの変数が優先され、組み込みの値は注入されません。
Protocol variables
Protocol variables はアップロードされたプロトコルファイルから抽出されます。例えば、Arbin プロトコルを3サイクル後に停止するには、PV_CHAN_Cycle_Index >= 4 の条件を追加できます。Arbin は各サイクルの開始時に PV_CHAN_Cycle_Index をインクリメントするため、インデックスが4に達するのは4番目のサイクルが開始されたときのみで、3つの完全なサイクルが既に完了していることを意味します。 終了条件がトリガーされると、理由が人間が読める形式でシミュレーションメトリクスに表示されます(例:“Early termination reason: Total time >= 2 hours”)。

変数コールバックルール

変数コールバックルールにより、条件に基づいてシミュレーション中にプロトコル変数を動的に更新できます。各ルールは条件(変数、演算子、値)と、条件が満たされたときに適用する変数更新のセットを指定します。 例えば、特定のサイクル数の後にC-rateを増加させるルールを作成できます:PV_CHAN_Cycle_Index >= 3 のとき、Current(A) をより高い値に更新します。これにより、充電または放電パラメータがサイクル中の特定のポイントで変更される多段階プロトコルをシミュレーションできます。

ステップ3:シミュレーションの実行と結果の分析

すべての設定が完了したら、Run Simulation をクリックします。シミュレータが設定されたセルモデルに対してプロトコルを実行します。 シミュレーションページの Cancel ボタンをクリックすることで、実行中のシミュレーションをいつでもキャンセルできます。これは、必要な結果が既に確認できる長時間実行プロトコルに便利です。

シミュレーション結果

プロット

主な出力は、時間に対するシミュレーションデータのインタラクティブなプロットです。デフォルトでは VoltageCurrent が表示されますが、表示する変数を正確に設定できます。 Configure Plot をクリックしてプロット設定ドロワーを開きます。Time Series の下で、利用可能な変数のオン/オフを切り替えます:
変数単位説明
VoltageVセル端子電圧
CurrentA印加電流
Temperature°Cセル温度(利用可能な場合)
Charge capacityAh累積充電容量
Discharge capacityAh累積放電容量
State of charge%セルの充電状態(利用可能な場合)
Step count全体のステップインデックス
Cycle count現在のサイクル番号
Step count (within cycle)現在のサイクル内のステップ番号
有効にした各変数は、共通の時間軸を共有して垂直に積み重ねた個別のサブプロットに表示されます。Charge capacity と Discharge capacity は比較しやすいように1つのサブプロットにグループ化されます。
プロトコルが数値変数(例:C-rate、温度設定値)を定義している場合、これらも 時系列としてプロットできます。Configure Plot ドロワーの Additional Variables ドロップダウンを使用して、任意の数値プロトコル変数を選択します。選択した変数は、 組み込みの時系列とともに追加のサブプロットとして表示されます。

主要メトリクス

プロットの下に、シミュレーションから計算された主要なパフォーマンス指標が表示されます:
  • Total Time
  • Charge Throughput (Ah)
  • Energy Throughput (Wh)
  • Early termination reason(終了条件がトリガーされた場合)

フルスクリーンモード

プロットの右上隅にあるフルスクリーンアイコンをクリックして、画面全体に拡大します。フルスクリーンビューには同じ Configure Plot ボタンが含まれているため、フルスクリーンを離れることなく表示する変数を調整できます。

CSV ダウンロード

Configure Plot の隣にある Download CSV をクリックすると、シミュレーションの時系列全体を CSV ファイル(simulation_data.csv)としてエクスポートできます。プロットで特定の範囲にズームしている場合でも、ダウンロードには常にシミュレーション全体が含まれます。 ファイルには、シミュレーションで生成されたすべての時系列変数(Voltage、Current、Temperature、容量、Step count、Cycle count、追加のプロトコル変数)に加え、各時点に合わせて展開されたステップレベルの列が含まれます。シミュレーションを再実行することなく、Excel、pandas、MATLAB、または独自の解析ツールに結果を取り込むのに利用できます。 プロトコルをシミュレーションすることで、エラーを早期に発見し、実験設計を検証し、実際のテストに時間とリソースを投入する前に確信を持つことができます。

商用プロトコル間の違い

異なるプロトコル間の変換における課題の多くは、構文ではなく、同じステップシーケンスに従うロジックをサイクラーが定義する方法の根本的な違いにあります。 このセクションでは、Ionworks Universal Cycler Protocol と、サポートしているサイクラーのプロトコルとの実装の違いについて説明します。

CCCV ステップ

ほとんどのサイクラーは CCCV ステップを、電圧を「limit」フィールドとする1つのステップとして定義します:
  • Maccor: 電圧を「limit」とする定電流ステップを使用。Maccor は CC フェーズと CV フェーズを組み合わせたネイティブな単一ステップタイプ Chg Func CCCV / Dis Func CCCV もサポートしています(CV カットオフは電流リミットとして指定)。
  • Neware: 電流と電圧の両方を「limit」として指定
  • Novonix: 電流と電圧の両方をフィールドとして指定し、ステップタイプで CC(電圧はカットオフ)と CCCV(電圧に遷移して電流カットオフまでホールド)を区別
UCP では、最大のモジュール性のために、電圧カットオフ付きの CC と電流カットオフ付きの CV の2つのステップを持つステップブロックを使用し、合計持続時間とその他の終了条件はステップブロックレベルで定義されます。Maccor の Chg Func CCCV / Dis Func CCCV ステップを解析する際、パーサーはこれを同等の2ステップ UCP ブロックに自動的に展開します。

ヘッダーメタデータ

一部の形式(例:Novonix .pro2)には、トップレベルのヘッダーデータ(VersionLastUpdatedCharger)が含まれています。このメタデータは UCP では header の下に保存され、元の形式に戻す変換時に使用されます。

関数式

Maccor はステップの値と終了条件に関数式(例:VAR1*0.5)をサポートしています。これらは UCP では文字列として伝達され、ベンダー固有の構造(例:Maccor の「User Def」エンドエントリ)を使用してラウンドトリップされるため、別の形式に正確な同等物がない場合でも意味が保持されます。

ネストされたループ

Do/Loop 構造を使用する形式(Maccor)では、ネストされたループに番号が付けられ(Do 1/Loop 1, Do 2/Loop 2, …)、構造を反映します。UCP ではブロックの repeat でループを表現します。Maccor に戻す変換時には、ブロックのネスト深度から Do/Loop の番号付けが生成されます。

Report/Record/Save data/Resolution

これは、サイクラーが出力時系列にデータを保存する頻度を定義するフィールドです。
  • Maccor は「Report」フィールドを使用し、時間、電流、電圧、温度を許可
  • Neware は「Record」フィールドを使用し、時間、電流、電圧を許可
  • Novonix は ConditionType: "Save data" を持つ StepConditions エントリを使用し、ΔtΔVΔI を許可
  • UCP は「Resolution」フィールドを使用し、グローバルに設定して各ステップでオーバーライド可能で、現在は時間のみをサポート

ループ

ループには2つの基本的なアプローチがあります:
  1. ネストされたステップ: ループをネストされたステップを持つステップブロックとして定義し、repeat パラメータでループの繰り返し回数を指定します。これは Python のようなモダンなプログラミング言語でのループ定義に似た、より現代的なアプローチです。
以下のプロトコルがこのアプローチを使用しています:

サイクル番号のインクリメント

  • Novonix は StepType = 6 を使用してサイクルカウンターをインクリメントします。UCP ではこれが補助的な Increment cycle number ステップにマッピングされます。
  • Arbin は組み込みの PV_CHAN_Cycle_Index 変数を使用して現在のサイクルを追跡します。この変数が Set Variable(s) ステップを介してインクリメントされると、UCP では set_variable アクションと Increment cycle number 補助ステップの両方にマッピングされます。
  1. Goto/状態マシン: 「start loop」と「end loop」のような特殊ステップを定義します。これは Fortran のような古いプログラミング言語に似た、よりレガシーなアプローチです。
以下のプロトコルがこのアプローチを使用しています:
  • Maccor(ループ開始に Do ステップ、ループ終了に Loop ステップを使用)
  • Neware(指定された前のステップに一定回数ループバックする特殊なステップタイプを使用)
  • Arbin(goto ターゲット付きの limit 条件を使用してステップ間をジャンプし、Set Variable(s) ステップでカウンターを管理)

サイクルインデックス分岐(Arbin)

Arbin プロトコルは、異なるサイクルで異なるパラメータが適用されるサイクル依存の分岐を実装するために PV_CHAN_Cycle_Index を一般的に使用します。UCP に解析されると、このパターンは set_variable アクションと goto ターゲットを持つ制御ステップを使用して表現されます。

ドライブサイクル(BioLogic)

BioLogic の .mps プロトコルは、ドライブサイクル(例えば、駆動電流プロファイル)を適用するために User Profile ステップを使用します。波形は技術ブロックの後に Urban Profile Table として .mps ファイル自体に埋め込まれているため、追加のアップロードは必要ありません。UCP に解析されると、User Profile ステップは Drive ステップにマッピングされます。テーブルの時間カラムがステップの継続時間を定義し、値カラムが対応する制御モード(例:Current)でセルを駆動します。

PyBaMM 実験文字列

PyBaMM 実験文字列を含むプレーンテキストファイルをバッテリーサイクラーシミュレータに直接アップロードできます。システムは形式を自動検出し、ステップを UCP に変換します。リスト反復ブロックは repeat カウント付きのステップブロックにマッピングされます。

基本構文

プレーンステップの場合、ファイルの各行が単一の PyBaMM ステップ文字列です。サポートされるステップタイプは以下の通りです:
  • Charge at <value> <unit> — 定電流、C-rate、または定電力充電
  • Discharge at <value> <unit> — 定電流、C-rate、または定電力放電
  • Hold at <value> V — 定電圧ホールド
  • Rest for <duration> — 開回路休止期間
ステップには until で終了条件、for で持続時間制約を含めることができます:
Charge at 1C until 4.2V
Discharge at 0.5C for 1 hour
Hold at 4.2V until C/50
Rest for 10 minutes

リスト反復

ステップのシーケンスを複数回繰り返すには、角括弧で囲んで * N で乗算します。これは Python のリスト反復構文と同等です。
["Charge at 1C until 4.2V", "Discharge at 1C until 2.5V"] * 100
これにより、ステップを100回複製するのではなく、repeat: 100 の単一の反復ブロックが UCP に生成されます。反復ブロックとプレーンステップを混在させることができます:
Charge at 1C until 4.2V
Hold at 4.2V until C/50
["Discharge at 0.5C until 3.0V", "Rest for 10 minutes"] * 50
Rest for 1 hour

ネストされた反復

より複雑なプロトコル用に、反復ブロックをネストできます:
[["Charge at 1C until 4.2V", "Rest for 5 minutes"] * 2, "Discharge at 1C until 2.5V"] * 30
これにより、30回繰り返す外側ブロックが作成され、各反復で充電-休止ペアが2回実行された後、1回の放電が行われます。

サイクルグループ

リスト内で丸括弧を使用して、ステップのグループをサイクルとしてマークします。これにより、各反復の最後に「Increment cycle number」ステップが自動的に挿入され、サイクルレベルのメトリクスが正しく追跡されます:
[("Charge at 1C until 4.2V", "Discharge at 1C until 2.5V")] * 100
タプルサイクルグループは常にリストの中にある必要があります。[(...)] * N を使用してください。(...) * N ではありません。

マルチラインフォーマット

可読性のために、反復ブロックを複数行に分割できます:
[
    "Charge at 1C until 4.2V",
    "Hold at 4.2V until C/50",
    "Discharge at 1C until 2.5V",
] * 50