Skip to main content
予定測定 (planned measurement) は、実施予定のテストをプロジェクト単位で記録したものです。リクエスターはチャンネルを持たない requested として作成し(見積もり実行時間を伴います)、後でスケジューラーがチャンネルと [planned_start_time, planned_end_time) の時間枠を割り当て、scheduled に移行させます。 予定測定は実際のセル測定を作成したり変更したりすることは決してありません。実テストが開始すると、実際の cell_measurement がプランへリンクバックし、プランを in_progress に移行させます — 予定行はリクエストとスケジュールの監査証跡として残ります。

使い分け

予定測定はオプションです — ラボビューに記載されている通り、測定を直接作成して実行時に channel_id を設定することもできます。次のような場合に予定測定を使用します:
  • プロジェクトまたは特定のセル仕様に対してリクエストされたテストのバックログを追跡したい。
  • 2 人のスケジューラーが同じチャンネルと時間枠を予約しないよう、将来のチャンネル時間を予約したい。
  • (科学者や PM からの)リクエストと、(ラボオペレーターによる)スケジュールの決定を分離したい。
  • 各テストを誰がリクエストし、誰がスケジュールしたかの監査証跡を残したい。
サイクラーが 1 台だけで、テストをアドホックに開始する場合は、測定を直接チャンネルにリンクし続け、予定測定は使わないでください。

ライフサイクル

スケジュールは完全に手動です — スケジューラーがチャンネルと時刻を選びます。自動オプティマイザはありません。 scheduled プランで将来のチャンネル時間を予約しても、ラボビューでチャンネルが occupied として表示されることはありません — それは実行中の実測定のみが行います。プランはカレンダーを予約し、cell_measurement は現時点を予約します。

フィールド

name はプロジェクト内で一意(大文字小文字を区別しない)です。重複する名前でプランを作成すると IonworksErrorerror_code == "CONFLICT"(HTTP 409)で発生します。作成を冪等にするには create_or_get を使用してください。

測定のリクエスト

チャンネルなしの requested プランを作成し、実行するプロトコル、テスト対象のセル仕様、見積もり実行時間を指定します。具体的なセルインスタンスとチャンネルは後でスケジューラーが選択します。
名前で冪等にリクエストするには create_or_get を使用します:
Request test フォームの Protocol セクションの先頭には英語のプロンプトが表示されます。試験内容を入力して(例:"1C/1C cycling for 200 cycles between 4.2 V and 2.5 V"Generate をクリックすれば、YAML を書いたりビジュアルビルダーを操作したりせずに、検証済みの UCP プロトコルが得られます。添付したセル仕様はコンテキストとして使われるため、電圧上下限を明示的に書く必要はほとんどありません。詳細は AI によるプロトコル作成 を参照してください。

プロトコルの検証

protocol_id は組織内の実験テンプレートを参照する必要があり、また、その基盤となるプロトコルは実際のセルで実行可能な状態でなければなりません — 計画測定はラボが実行する正確なテストを固定するため、中途半端に設定されたプロトコルは、後で失敗した実行として現れるのではなく、リクエスト時点で拒否されます。 createupdate は、protocol_id が次のいずれかの場合、IonworksError(HTTP 400)でプランを拒否します。
  • 組織内に存在しない。 エラー: protocol_id '…' does not reference a protocol in this organization.
  • 未解決の入力が残っている。 input["…"] プレースホルダーで作成されたプロトコル(パラメータ化入力を参照)は、計画測定にリンクする前にすべての入力を具体的な値に解決しておく必要があります。エラーには未指定の入力名が列挙されます: protocol_id '…' references a protocol with unresolved inputs (C-rate, Temperature [°C]). Planned measurements require a fully-specified protocol — set all input values first.
  • UCP 検証に失敗する。 構造的に無効なプロトコル(不正なステップ定義、一貫性のない終了条件など — POST /protocols/validate と同じチェック)は、内部の検証エラーとともに拒否されます。
プロトコルを先に修正してから、リクエストを再試行してください。実行したいプロトコルがまだ完全に指定されていない場合は、複製してコピー側で入力を固定してください — プロトコルの作成と入力設定の方法についてはプロトコルを参照してください。

チャンネルへのスケジュール

schedule でチャンネルと時間枠を割り当てます — これは requested プランを scheduled に移行する便利なラッパーです。
最初から scheduled として一度に作成することもできます:

UI でチャンネルを選ぶ

スケジュールダイアログのチャンネルピッカーには、各チャンネルの名前と並んでリアルタイムの空き状況と電気的定格が表示されるため、適合性を判断するためにラボビューへ移動する必要はありません:
  • 主要行cycler / channel
  • 定格 — 最大電流と電圧範囲(例: 40 A · 0–5 V)。チャンネルの定格から取得されます。未設定のフィールドは省略されます。
  • 状態freeoccupied、または stale。ラボウォールと同じチャンネル占有状態ルールから導出されます。運用停止(out-of-commission)チャンネルは一覧には表示されますが無効化されています。
運用停止でないすべてのチャンネルは選択可能なままです — 使用中(occupied)や滞留(stale)チャンネルも、将来の時間枠を予約できるように表示されます。ピッカーはプロトコルに対する「適合度」で絞り込みや並べ替えを行いません。定格はあくまで参考情報です。

スケジュール衝突

チャンネル上ですでに使用中の枠と衝突する場合、スケジュールは拒否されます。別のチャンネルまたは時間枠を選んで再試行してください。 既存プランのキャンセルや完了は、チャンネルが運用停止になった後でも常に許可されます。

一覧取得とフィルタリング

list はプロジェクト単位で、PaginatedList[PlannedMeasurement] を返します。ライフサイクルステータス、チャンネル、名前でフィルタリングできます。

更新、キャンセル、削除

プランを再スケジュールするには、新しいチャンネルまたは時間枠で schedule を再度呼び出す(あるいは個別フィールドを update する)だけです。サーバーは新しい値に対して重複と運用停止のチェックを再実行します。

テストスケジューラーの行アクション

テストスケジューラーページ(プロジェクトごとに Lab → Test scheduler から開く)には、バックログのすべてのプランが一覧表示されます。各行のオーバーフローメニューには以下のアクションが表示されます。表示されるアクションはプランの現在のステータスに応じて変わります — エラーになる操作はボタンを押せる状態にせず、UI 側で非表示にします。 Delete は意図的に Cancel の後ろに配置されています — アクティブなリクエスト、予約済みチャンネル、または実行済みテストの記録を一度のクリックで削除できないようにするためです。まず Cancel し、その後に必要であれば Delete してください。 Copy は、ほぼ同じ内容のテスト(同じセル仕様とプロトコル、異なるメモやセットアップ)を続けて追加する最も速い方法です。Request test ボタンと同じリクエストフォームを使用するため、通常のバリデーションが適用されます。新規プランは独自の名前と監査フィールドを持ち、元のプランは変更されません。

実測定をプランにリンクする

プランを手動で in_progress に遷移させることはありません。実行が開始したら、planned_measurement_id を設定した cell_measurement を作成します — バックエンドがそれをリンクし、アトミックにプランを in_progress へ移行させます。
以下のすべてが成立しない限り、リンクは HTTP 400 で拒否されます:
  • プランが scheduled である。
  • 測定が time_series タイプであり、channel_id を持っている(channel_id のない planned_measurement_id は拒否)。
  • プランと測定が同じプロジェクトおよび組織にある。
  • 測定の channel_id がプランの channel_id と一致する。
  • プランに cell_instance_id が設定されている場合、測定は同じセルインスタンスで実行される必要がある。
2 つの並行測定が同じプランを取得することは決してありません — リンクは status = scheduled に対するアトミックな compare-and-set であり、負けた側はリンクされないまま残されます(警告としてログに記録されます)。 リンク後は、ラボビュー上のチャンネル占有状態は実行中の cell_measurement によって駆動されます。予定行は監査証跡として残ります。

リクエスターの自動ウォッチ

scheduled プランが実際の cell_measurement にリンクされて in_progress に遷移すると、リクエスター(プランの requested_by)が開始された測定のウォッチャーとして自動的に追加されます。リクエスターは次回のラボステータス更新で、ラボビューMy Channels にその実行が表示されます — 手動で Watch をクリックする必要はありません。 動作:
  • 両方のリンク経路で発火します: planned_measurement_id を指定した cell_measurement の作成、および started_measurement_id を伴うプランの in_progress への PATCH。
  • 冪等です — 再リンクや再遷移で重複したウォッチは作成されず、すでにウォッチしているユーザーはそのままウォッチを続けます。
  • requested_by のみが自動ウォッチされます。scheduled_by やラボオペレーターは対象外です。彼らは引き続きチャンネルページや測定ページから手動でウォッチできます。
  • ベストエフォートです — ウォッチの失敗が測定の作成やプランの更新を失敗させることはありません。リンクとステータス遷移は成功します。
通知を受け取りたくないリクエスターは、開始後に測定の詳細ページからウォッチを解除できます。

プログラム

プログラムは組織スコープのカタログ項目で、FormationCyclingRPT のようなラボテストの種別を表す短い再利用可能な名前です。プランに program_id を設定するとそのテストがどの種別に属するかが記録され、実測定が プランにリンクした時点でその値がコピーされます。 プログラムは自由入力のタグではありません。カタログは組織設定 → プログラムから管理し、リクエストおよびスケジュールのフォームはその一覧から 選択するため、同じ種別を全員が同じ表記で扱えます。名前は組織内で一意です (大文字小文字を区別しません)。 タグ付けされると、その Program はプラン上とテストスケジューラの計画テーブルに 表示されるため、ラボオペレーターはリクエストがどの種別に属するのかを一目で 把握できます。
プログラムは完全に任意です。program_id は登場するすべての箇所で null 許容 です。プロジェクト名やセル仕様名だけでテスト内容が分かる場合は、使わなくても 問題ありません。

権限

予定測定のエンドポイントは既存の cell_measurement 権限を再利用します:

project_id

すべての client.planned_measurement.* メソッドは任意の project_id を受け付けます。省略した場合、Ionworks クライアントに設定されている project_id(または IONWORKS_PROJECT_ID 環境変数)にフォールバックします。どこからも project_id が取得できない場合は ValueError が発生します。

次のステップ

ラボビュー

予定測定がスケジュールされるサイト、サイクラー、チャンネルをセットアップします。

測定

スケジュール済みプランへリンクバックする実際の cell_measurement を作成します。