仕組み
プロセスはシンプルです:プロトコルをアップロードし、セルモデルを設定して、シミュレーションを実行します。- アップロード: プロトコルファイルを生の形式(例:XML や JSON)でアップロードします。システムが形式を自動検出して解析します。
- 設定: セルモデルを選択します — 化学プリセットからその場で構築する Quick model、またはプロジェクトの完全なパラメータ化モデルのいずれかです。
- シミュレーション: シミュレーションを実行して結果を分析します。
ステップ1:プロトコルファイルのアップロード
コンピュータからプロトコルファイルをアップロードして開始します。 現在サポートしているファイル形式:- Arbin
- BioLogic (.mps, .bttest)
- Maccor (.xml, .csv)
- Neware
- Novonix (.pro2)
- PyBaMM 実験文字列 (.txt)
Gamry の
.dta ファイルはプロトコルファイルではないため、ここにアップロード
できません。Gamry 機器からの EIS 測定データをインポートするには、
ionworksdata ライブラリを使用してください。
詳細はデータ形式を参照してください。必要な追加ファイル
一部のプロトコルは、カスタムドライブサイクル波形や再利用可能なサブルーチンなどの複雑なステップ用に外部ファイルを参照します。プロトコルがそのようなファイルを必要とする場合、シミュレータがそれを検出してアップロードを促します。 Arbin スケジュールの場合、SubSchedule ステップが参照する .subsdx サブスケジュールファイルもここに含まれます。各サブスケジュールは UCP の Subroutine ステップにマッピングされ、それ自体がさらに別のサブスケジュールを参照することもあります。それらのネストされた要件は、親ファイルを添付した時点で表面化するため、すべての依存関係が解決されるまで、添付ごとにアップロードプロンプトが1段階ずつ連鎖していきます。
ステップ2:確認と設定
解析後、プロトコルを確認してシミュレーションを設定できます。プロトコルステップ
シミュレータは、タブでアクセス可能な3つの異なる形式で解析されたプロトコルを表示します:- Human-Readable: プロトコル内のステップの簡略化された読みやすい要約。
- UCP (YAML): Universal Cycler Protocol 形式に変換された完全なプロトコル。実行される詳細な基盤構造を示します。
- Raw: アップロードしたファイルの生のテキスト内容。
セル設定
意味のあるシミュレーションを実行するには、シミュレータにどのセルモデルを使用するかを指定する必要があります。2つのオプションがあります:- Quick model — 化学プリセットといくつかの基本入力からその場でセルモデルを構築します。まだセルにフィットしたモデルがない場合の高速なサニティチェックに最適です。
- プロジェクトのパラメータ化モデル — 現在のプロジェクトから既存のパラメータ化モデルを選択します。プロジェクトの他の場所で使用しているのと同じ物理ベースのモデルに対してプロトコルを実行したい場合に最適です。
Quick model
Quick model は、1つの RC ペアを持つ基盤となる等価回路モデル(ECM)を、化学プリセットに合わせた OCV と抵抗パラメータで設定します。完全なパラメータ化モデルを先にフィッティングすることなく、代表的なセルに対してプロトコルを検証したい場合に使用してください。- Chemistry: 事前設定されたオプションのリスト(例:
NMC/Graphite、LFP/Graphite)からセルの化学を選択します。フルセルの化学(例:NMC/Graphite、LFP/Graphite)および Li メタルハーフセル(例:NMC/Li metal、Graphite/Li metal、LFP/Li metal)が利用可能です。これにより、モデルが使用する OCV 曲線、正極/負極の開回路電位、および抵抗値が決まります。 - Cell capacity (Ah): セルの公称容量。ECM パラメータはこの容量に合わせてスケーリングされます。
- Resistance scale (%): 選択した化学のデフォルト値に対するモデルの内部抵抗を調整します。デフォルトは
100%(変更なし)です。例えば、抵抗を2倍にするには200に、半分にするには50に設定します。化学のデフォルトよりも高いまたは低いインピーダンスのセルを近似するのに便利です。 - Initial SOC (%): シミュレーション開始時のセルの充電状態。
- Temperature (°C): シミュレーションの周囲温度。
プロジェクトのパラメータ化モデル
現在のプロジェクトに既にパラメータ化モデルがある場合は、Quick model を構築する代わりにモデルセレクターからそれを選択してください。シミュレータは、アップロードされたプロトコルをその完全なパラメータセットを持つモデルに対して実行するため、結果はプロジェクト内の他のシミュレーションと直接比較できます。モデルの上に Initial SOC と Temperature のみを指定する必要があります。高度な設定
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 ボタンをクリックすることで、実行中のシミュレーションをいつでもキャンセルできます。これは、必要な結果が既に確認できる長時間実行プロトコルに便利です。シミュレーション結果
プロット
主な出力は、時間に対するシミュレーションデータのインタラクティブなプロットです。デフォルトでは Voltage と Current が表示されますが、表示する変数を正確に設定できます。 Configure Plot をクリックしてプロット設定ドロワーを開きます。Time Series の下で、利用可能な変数のオン/オフを切り替えます:
有効にした各変数は、共通の時間軸を共有して垂直に積み重ねた個別のサブプロットに表示されます。Charge capacity と Discharge capacity は比較しやすいように1つのサブプロットにグループ化されます。
主要メトリクス
プロットの下に、シミュレーションから計算された主要なパフォーマンス指標が表示されます:- Total Time
- Charge Throughput (Ah)
- Energy Throughput (Wh)
- Early termination reason(終了条件がトリガーされた場合)
- Stop reason(プロトコルが最後まで実行されず、補助ステップで停止した場合に
Reached pause stepまたはReached end stepが設定されます)
フルスクリーンモード
プロットの右上隅にあるフルスクリーンアイコンをクリックして、画面全体に拡大します。フルスクリーンビューには同じ 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(電圧に遷移して電流カットオフまでホールド)を区別
Chg Func CCCV / Dis Func CCCV ステップを解析する際、パーサーはこれを同等の2ステップ UCP ブロックに自動的に展開します。
ヘッダーメタデータ
一部の形式(例:Novonix.pro2)には、トップレベルのヘッダーデータ(Version、LastUpdated、Charger)が含まれています。このメタデータは 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つの基本的なアプローチがあります:- ネストされたステップ: ループをネストされたステップを持つステップブロックとして定義し、
repeatパラメータでループの繰り返し回数を指定します。これは Python のようなモダンなプログラミング言語でのループ定義に似た、より現代的なアプローチです。
- UCP(ステップブロックを使用)
- Novonix(
TimesToLoop付きのChildProtocolStepListを使用)
サイクル番号のインクリメント
- Novonix は
StepType = 6を使用してサイクルカウンターをインクリメントします。UCP ではこれが補助的なIncrement cycle numberステップにマッピングされます。 - Arbin は組み込みの
PV_CHAN_Cycle_Index変数を使用して現在のサイクルを追跡します。この変数がSet Variable(s)ステップを介してインクリメントされると、UCP ではset_variableアクションとIncrement cycle number補助ステップの両方にマッピングされます。
- 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 ターゲットを持つ制御ステップを使用して表現されます。
時間変化する高度な式(Arbin)
Arbin スケジュールは、ステップの経過とともに値が変化する 高度な式(AF_* 式)でステップを駆動できます。たとえば、固定された経過時間で極性を交互に切り替える SIGN(...) ベースのピースワイズ電流波形などです。Arbin では、これらの式は組み込みプロセス変数 PV_CHAN_Step_Time から経過ステップ時間を読み取ります。
このような式がステップの制御値として使用されると、パーサーは PV_CHAN_Step_Time を UCP のステップ時間変数 t に変換し、式をステップ値に直接インライン化するため、シミュレータはこれを時間の関数として評価します。Arbin の SIGN(...) 関数は UCP の sign() ヘルパーにマッピングされます。
たとえば、「ステップの最初の30秒間は +1 A、次の30秒間は –1 A」に相当する Arbin の高度な式は、次の UCP ステップになります:
- 波形は式自体に極性を持っているため、パーサーは符号をそのまま保持し、ステップ中に値が何度反転しても、ステップを公称
Charge方向として報告します。 - 値はステップ内でセルをどちらの方向にも押し進める可能性があるため、動作範囲の両側に電圧カットオフを
endsとして設定できます。 - 終了 方程式内に現れる
PV_CHAN_Step_Timeは依然として Duration 終了を意味し、別途処理されます。制御値の式内での使用のみがtにマッピングされます。 - ステップ時間に依存せず Arbin の
MV_UD*ユーザー変数のみを参照する高度な式は、以前と同様にプロトコル開始時にスカラー UCP 変数としてシードされ続けます。
直前ステップの読み出し(Arbin)
Arbin スケジュールでは、Set Variable(s) ステップ内で LS_CHAN_*(「last step」)変数を読み取ることで、直前ステップの終了時のチャンネル値をログできます。たとえば、直前に完了した放電の放電容量をユーザー変数に取り込み、後段で利用できます:
Set Variable(s) ステップは 制御ステップ になります。その set_variable アクションは直前ステップのデータに対して評価されるため、LS_CHAN_* はそのステップの最終値に解決されます:
LS_CHAN_Discharge_Capacity→LastStepDischargeCapacityLS_CHAN_Charge_Capacity→LastStepChargeCapacity
LS_CHAN_*はSet Variable(s)のソース式に直接指定した場合にのみ有効で、算術式内での使用(LS_CHAN_Discharge_Capacity * 0.25)も可能です。制御値、終了条件の方程式、または名前付き式の本体で使用することは — たとえその式を後でSet Variable(s)ステップが参照する場合であっても — 解析時に拒否されます。それらの場所では誤ったステップのデータに束縛されてしまうためです。- エネルギー系のバリアント(
LS_CHAN_Discharge_Energy、LS_CHAN_Charge_Energy)は認識されますが、現時点では拒否されます。シミュレートされるステップごとのデータは容量を保持しますがエネルギーは保持しません。該当する場合は容量の読み出しを使用するか、リクエストを提出してください。
Power Simulation ドライブサイクル(Arbin)
Arbin スケジュールでは、Power Simulation 波形(ステップが参照する.txt プロファイル)でステップを駆動できます。2列目は電流(アンペア)ではなく電力(ワット)として解釈されます。これは既存の Current Simulation ステップタイプの電力モード版であり、いずれも UCP の Drive ステップに解析され、ステップの mode がそれに応じて設定されます:
Current Simulation→mode: Currentを持つDrive(値はアンペア)Power Simulation→mode: Powerを持つDrive(値はワット)
.txt 波形は、Current Simulation プロファイルとまったく同様に、スケジュールと一緒に Additional Files プロンプトからアップロードします。電圧のステップ制限はそのまま引き継がれ、Drive ステップ上の ends になります。
累積容量・エネルギーカウンタ(Arbin)
Arbin のPV_CHAN_Discharge_Capacity、PV_CHAN_Charge_Capacity、PV_CHAN_Discharge_Energy、PV_CHAN_Charge_Energy チャンネルは、明示的な Set Variable(s) リセットでゼロクリアされるまで、ステップをまたいで電荷およびエネルギーのスループットを累積します。Arbin プロトコルが UCP に解析される際、これら4つのカウンタは(正味の Capacity / Energy に集約されるのではなく)別々のランタイム変数として保持されるため、これらを比較する式が正しく評価されます。
カウンタの挙動:
- プロトコルの先頭で 0 にシード されます。
- 各ステップの後に そのステップの放電または充電スループットで 加算 されます。
Set Variable(s)ステップのリセットマスクにカウンタが含まれる場合に 0 にリセット されます。
set_variable 式や VariableEnd 条件で2つのカウンタの差を用いて記述できます:
Charge to PV_CHAN_Charge_Capacity >= MV_UD1)、パーサはこれをステップごとの Capacity エンドに書き換えます。通常、プロトコルはそのようなステップの直前にカウンタをリセットするため、ステップ内でのカウンタの値はそのステップ自身のスループットに等しくなります。方向性のあるエネルギーカウンタは変数式の中では使用できますが、現時点ではステップ制限の左辺としてはサポートされていません。
ラウンドトリップは保持されます:UCP プロトコルを Arbin にエクスポートし直す際、
PV_CHAN_(Charge|Discharge)_(Capacity|Energy) = 0 の set-variable アクションは認識され、Set Variable(s) ステップのリセットマスクエントリとしてエンコードされます。ドライブサイクル(BioLogic)
BioLogic の.mps プロトコルは、ドライブサイクル(例えば、駆動電流プロファイル)を適用するために User Profile ステップを使用します。波形は技術ブロックの後に Urban Profile Table として .mps ファイル自体に埋め込まれているため、追加のアップロードは必要ありません。UCP に解析されると、User Profile ステップは Drive ステップにマッピングされます。テーブルの時間カラムがステップの継続時間を定義し、値カラムが対応する制御モード(例:Current)でセルを駆動します。
複数のテクニックを含む .mps ファイルでは、内部 Ns インデックスを共有する複数の User Profile ステップが存在することがあります。各ドライブサイクルは UP_tech<N>_step_<Ns>(<N> はテクニック番号)という名前で識別されるため、異なるテクニック由来のサイクルがインポート時に衝突することはありません。
埋め込みドライブサイクルの上書き
EC-Lab は各ドライブサイクル波形の イベント圧縮 されたコピーを.mps ファイル内に埋め込みます。この圧縮波形はそのままシミュレーションに使用できますが、元のフル解像度の .txt プロファイルがあれば、シミュレーション前にそれを差し替えてより高い忠実度で実行できます。
ドライブサイクルを含む .mps をアップロードすると、Additional Files パネルに Drive cycle waveforms (optional) セクションが表示され、埋め込まれた各サイクルが名前付きで一覧されます。任意のスロットにファイルをドロップすると、そのサイクルがシミュレーション用に上書きされます。スロットを空のままにすると、埋め込み波形がそのまま使用されます。上書きはファイル名ではなくドライブサイクル名でマッチングされるため、各スロットには任意のファイルを添付できます。
バッテリー容量決定(BioLogic)
EC-Lab の Battery Capacity Determination (BCD) テクニックは、固定された容量チェックシーケンス(最初の電圧境界に向かう CC レグ(I1 sign はデフォルトで充電のため、既定では EM1)、任意の CV ホールド、単一の休止(tR)、その後反対側の境界に向かう CC レグ(I2 sign はデフォルトで放電のため EM2))を実行し、対応する CC、CV、Rest ステップを含む UCP ステップブロックとしてインポートされます。各 CC レグの方向はその I1 sign / I2 sign フィールドに従うため、放電が先のシーケンスも同様にサポートされます。テクニックの両側(Is1/N1 および Is2/N2)はいずれも Set I/C モードの I(A、mA、µA 単位の定電流)、C / N(ユーザー指定の N 除数から算出される C-rate)、C x N(N を掛けた C-rate)をサポートし、tR の休止時間は EC-Lab の h:m:s 文字列から解析されます(0:00:0.0000 の継続時間は休止が無効であることを意味し、ブロックから取り除かれます)。
EIS(BioLogic)
ポテンショスタティック(PEIS)とガルバノスタティック(GEIS)両方のインピーダンステクニックが認識され、テクニックのctrl2_val / ctrl3_val フィールドにある周波数境界を使用して UCP の EIS ステップに変換されます。両者は同じ UCP EIS ステップで表現され、サイクラーシミュレータが設定済みのセルモデルに対してインピーダンススイープを実行し、結果として Nyquist トレースを返します。
3 電極セルと 2 電極セル(BioLogic)
Ewe および Ece のステップ制限の解釈は、.mps ファイルヘッダーに設定された Potential control モードに依存します。
Ewe-Ece(3 電極):Eweは作用電極(カソード)電位で、CathodePotential終了条件にマッピングされます。Eceは対極(アノード)電位で、AnodePotentialにマッピングされます。- それ以外のモード(
Ewe、Ecell、または未設定の 2 電極フルセル):Eweは端子電圧で、Voltage終了条件にマッピングされます。Eceには端子電圧に対応する量がないため破棄されます。対極の安全ガードを端子電圧にマッピングすると、ステップ開始直後に発火する誤ったカットオフが生成されるためです。
.mps を解析したのに想定していた電圧カットオフが付いていない場合は、ヘッダーの potential control が明示的に設定されているか確認してください。空欄のままだと 2 電極として扱われます。
ループ回数(BioLogic)
EC-Lab のLoop テクニックは、追加の反復回数を nt に格納します(つまり nt = 0 ではループ本体を 1 回実行し、nt = 3 では 4 回実行します)。UCP の repeat は 総 実行回数を表すため、パーサーは BioLogic の nt を UCP の repeat = nt + 1 に変換します。この変更前にインポートされたループは 1 回少なく実行されていました。修正後の回数を反映するには .mps を再インポートしてください。
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 で持続時間制約を含めることができます:
リスト反復
ステップのシーケンスを複数回繰り返すには、角括弧で囲んで* N で乗算します。これは Python のリスト反復構文と同等です。
repeat: 100 の単一の反復ブロックが UCP に生成されます。反復ブロックとプレーンステップを混在させることができます:
ネストされた反復
より複雑なプロトコル用に、反復ブロックをネストできます:サイクルグループ
リスト内で丸括弧を使用して、ステップのグループをサイクルとしてマークします。これにより、各反復の最後に「Increment cycle number」ステップが自動的に挿入され、サイクルレベルのメトリクスが正しく追跡されます:タプルサイクルグループは常にリストの中にある必要があります。
[(...)] * N を使用してください。(...) * N ではありません。