コンテンツにスキップ

使用方法

各機能の使い方を、サンプルコードとあわせて解説します。

Example

サンプルコードは、サンプル集からダウンロードできます

Note

インストール手順、はじめての解析、サンプルコードのライセンス切り替えについては、ScideamPyチュートリアルを参照してください。


解析の基本フロー

多くの解析(波形解析・損失解析・FRAなど)は、回路が定常状態であることを前提としています。基本的な流れは以下のとおりです。

with Converter() as conv:
    conv.read_configuration("path/to/file.cvt2")

    # 1. 必要に応じて出力変数を追加する(回路ファイルに未定義の場合)
    conv.add_output("D.I", OutputType.CURRENT)

    # 2. 回路を定常状態にする
    if conv.is_ready_for_steady_state():
        conv.steady_state_analysis()
    else:
        conv.transient_analysis(10e-3)

    # 3. 後続の解析前にパラメータを更新する
    conv.update_parameter()

    # 4. 各種解析を実行する
    conv.waveform_analysis(1e-3)
    # conv.power_analysis()
    # conv.fra(...)

    # 5. 解析結果を取得する
    times = conv.get_times()
    voltage = conv.output_data("R", OutputType.VOLTAGE)
    current = conv.output_data("D.I", OutputType.CURRENT)

Note

update_parameter()は定常状態にした後、後続の解析を行う前に必ず呼び出してください。


過渡解析(Transient 解析)

Example

samples/Scideam/ScideamPy/transient_analysis.py

指定した時間だけ回路の過渡応答をシミュレーションし、時間軸の波形データを取得します。

    # --- samples/Scideam/ScideamPy/transient_analysis.py より抜粋 ---

    with Converter() as conv:
        # 回路ファイルを読み込む
        conv.read_configuration(CVT2_FILE)

        # Transient 解析を実行(10 ms)
        conv.transient_analysis(10e-3)

        # 時間軸データを取得
        times = conv.get_times()

        # 出力波形を取得
        voltage = conv.output_data("R", OutputType.VOLTAGE)
        current = conv.output_data("L.I", OutputType.CURRENT)

        # ... グラフ描画 ...

ポイント

Note

output_data()の第1引数(シンボル名)および第2引数(OutputType)は、各素子モデルのページに記載されている出力変数のOutput引数の定義に対応しています。使用可能なOutputTypeは、対象の素子モデルのページを参照してください。

Note

.cvt2ファイル内でOUから始まる行が出力変数の定義に該当します。例えばOU R V AVE ...は「シンボルRの電圧(AVEモード)」を意味します。Scideamで出力設定を変更すると、このOU行が増減します。

  • get_times()で時間軸、output_data()でシンボル名と出力種別を指定して波形を取得します。
  • output_data()で取得できるのは、Scideamの出力設定で登録済みの出力変数、または後述のadd_output()で追加した出力変数です。登録されていない出力変数を指定した場合はNoneが返されます。
  • output_data()の第3引数にOutputModeを指定すると、サンプリングモードを切り替えて波形を取得できます。
OutputMode 説明
AVERAGE 各サイクルの平均値(デフォルト)
PEAK 各サイクルの絶対値ピーク
MINIMUM 各サイクルの最小値
MAXIMUM 各サイクルの最大値
INITIAL 各サイクルの開始値
FINAL 各サイクルの終了値
from scideampy import OutputMode
voltage = conv.output_data("R", OutputType.VOLTAGE, OutputMode.PEAK)

実行結果

実行結果


Steady State 解析

Example

samples/Scideam/ScideamPy/steady_state_analysis.py

回路を自動的に定常状態に収束させます。波形解析・損失解析・FRAなど、多くの解析は定常状態を前提とするため、事前にこの解析を実行しておくことが重要です。

    # --- samples/Scideam/ScideamPy/steady_state_analysis.py より抜粋 ---

    with Converter() as conv:
        # 回路ファイルを読み込む
        conv.read_configuration(CVT2_FILE)

        # 解析可能か確認
        if not conv.is_ready_for_steady_state():
            print("回路が Steady State 解析の条件を満たしていません")
            raise SystemExit(1)

        # Steady State 解析を実行
        # 回路が定常状態に収束するまで自動的にシミュレーションを繰り返す
        states = conv.steady_state_analysis()

        # 各出力変数の定常値を表示
        signatures = conv.output_signatures()
        for signature, value in zip(signatures, states, strict=True):
            print(f"{signature} = {value:.6f}")

ポイント

  • 実行前にis_ready_for_steady_state()で対応可否を確認してください。非対応の場合はTransient解析で代用します。
  • 戻り値のstatesは出力変数の定義順と同じ順序で定常値が格納されたリストです。

波形解析(Waveform 解析)

Example

samples/Scideam/ScideamPy/waveform_analysis.py

定常状態前後の波形を比較し、1スイッチングサイクル分の詳細な波形を取得します。

    # --- samples/Scideam/ScideamPy/waveform_analysis.py より抜粋 ---

    with Converter() as conv:
        # 回路ファイルを読み込む
        conv.read_configuration(CVT2_FILE)

        # --- 定常状態にする前の波形解析 ---

        conv.waveform_analysis(1e-3)  # 詳細スイッチモデルを使う場合は for_detail_switch=True を指定する
        # ...

        # --- 定常状態にする ---
        # Steady State 解析に対応していればそちらを使い、そうでなければ Transient で代用
        if conv.is_ready_for_steady_state():
            conv.steady_state_analysis()
        else:
            conv.transient_analysis(10e-3)

        # 定常状態の後に続けて解析する場合は update_parameter() が必要
        conv.update_parameter()

        # --- 定常状態にした後の波形解析 ---
        conv.waveform_analysis(1e-3)
        # ...

ポイント

Note

定常状態にした後に波形解析を行う場合は、update_parameter()を忘れずに呼んでください。

  • Steady State解析に対応していない回路では、Transient解析で十分な時間シミュレーションして定常状態に近づけます。

実行結果

実行結果


損失解析(Power Analysis)

Example

samples/Scideam/ScideamPy/power_analysis.py

回路内の各部品の損失(電力・割合)を算出します。

    # --- samples/Scideam/ScideamPy/power_analysis.py より抜粋 ---

    with Converter() as conv:
        # 回路ファイルを読み込む
        conv.read_configuration(CVT2_FILE)

        # --- 定常状態にする ---
        if conv.is_ready_for_steady_state():
            conv.steady_state_analysis()
        else:
            conv.transient_analysis(10e-3)

        # 損失解析の前に update_parameter() が必要
        conv.update_parameter()

        # --- 損失解析を実行 ---
        info, loss = conv.power_analysis()

        # 解析情報を表示
        print(f"Base Cycle    : {info.base_cycle}")
        print(f"Storage Rate  : {info.storage_rate:.6f}")

        # 各部品の損失を表示
        symbols = Loss.part_symbols(loss)
        for sym in symbols:
            power, g_rate, _ = Loss.select(loss, sym)
            print(f"{sym}: {power:.6f} W ({g_rate:.1%})")

ポイント

Note

損失解析の前に回路を定常状態にし、update_parameter()を呼ぶ必要があります。

Note

損失解析が正常に収束したかどうかは、戻り値のinfo.storage_ratestorage_rate_toleranceと比較して判定できます。収束が悪い場合はstorage_rate_toleranceの値を変更してください。

  • Loss.select()にシンボル名のリストを渡すと、複数部品の損失を合算して取得できます。
    power, rate = Loss.select(loss, ["QM1", "QM2"])  # FET2個の合計損失
    
  • mode=PowerAnalysisMode.IDEALを指定すると理想スイッチモデルで解析できます(高速ですが精度は低くなります)。
  • power_analysis()には以下の追加オプションを指定できます。
パラメータ 説明 デフォルト値
base_sw 基準スイッチング素子のシンボルパターン "*CVT"
storage_rate_tolerance Storage Rateの収束許容値 1
frequency AC加振周波数 (Hz)。0はDC解析 0
sample サイクルあたりの追加サンプル数。0は自動 0
min_cycle 最小解析サイクル数 1
max_cycle 最大解析サイクル数 1000
  • FETやIGBTの帰還容量(Crss / Cres)の有効・無効は、後述の「解析条件の確認・変更」で切り替えることができます。

周波数特性解析(FRA)

Example

samples/Scideam/ScideamPy/fra.py

AC Sweep素子を用いた周波数応答解析を実行し、ボード線図(ゲイン・位相)を取得します。

    # --- samples/Scideam/ScideamPy/fra.py より抜粋 ---

    with Converter() as conv:
        # 回路ファイルを読み込む
        conv.read_configuration(CVT2_FILE)

        # --- 定常状態にする ---
        if conv.is_ready_for_steady_state():
            conv.steady_state_analysis()
        else:
            conv.transient_analysis(10e-3)

        # 定常状態の後に続けて解析する場合は update_parameter() が必要
        conv.update_parameter()

        # --- FRA 解析を実行 ---
        options = FraOptions(fmin=10, fmax=1e5, vac=0.01)
        freq, gain, phase = conv.fra("VAS1", "OUT1.V:V:AVE", "OUT2.V:V:AVE", options)

        # プロット範囲: メイン周波数の 1/4 まで
        plot_fmin = options.fmin
        plot_fmax = conv.frequency() / 4

        # ... ボード線図を描画 ...

ポイント

Note

FRA実行前に回路を定常状態にし、update_parameter()を呼んでおく必要があります。

Note

FRA用の回路ファイル(AC Sweep素子を含むもの)が必要です。

Note

ボード線図の描画範囲はメイン周波数の1/4以下を推奨します。

  • fra()の第1引数にはAC Sweep素子のシンボル名(例: "VAS1")、第2・第3引数には入力側・出力側の出力変数シグネチャを指定します。これらは回路ファイルに該当する素子・出力変数が設定されていることが前提です(add_output()で追加することも可能です)。
  • FraOptionsで以下のパラメータを指定できます。
パラメータ 説明 デフォルト値
fmin スイープ開始周波数 (Hz) 10
fmax スイープ終了周波数 (Hz) 100e3
vac AC加振振幅 (V) 10e-3
phase_fold 位相を [-180°, 180°] に折り畳むかどうか True

実行結果

実行結果


パラメトリック解析

Example

samples/Scideam/ScideamPy/parametric_analysis.py

parameter()/set_parameter()でシンボル名とパラメータ名を指定して回路定数を読み書きすることで、素子パラメータを変化させながら繰り返し解析を行い、結果を比較します。

    # --- samples/Scideam/ScideamPy/parametric_analysis.py より抜粋 ---

    with Converter() as conv:
        # 回路ファイルを読み込む
        conv.read_configuration(CVT2_FILE)

        # parameter() で現在の素子パラメータを取得できる
        original_l = conv.parameter("L", "Value")

        # パラメータを振って比較(元の値の 0.5倍、1倍、2倍)
        multipliers = [0.5, 1.0, 2.0]

        for mult in multipliers:
            new_l = original_l * mult

            # set_parameter() でパラメータを変更し、定常状態にしてから波形解析
            conv.set_parameter("L", "Value", new_l)
            conv.clear_parameter()

            if conv.is_ready_for_steady_state():
                conv.steady_state_analysis()
            else:
                conv.transient_analysis(10e-3)
            conv.update_parameter()

            conv.waveform_analysis(100e-6)
            times = [t * 1e6 for t in conv.get_times()]
            current = conv.output_data("L.I", OutputType.CURRENT)

            # ... グラフ描画 ...

ポイント

Note

パラメータ変更後はclear_parameter()で回路の電圧・電流の初期値をリセットし、改めて定常状態にしてから解析を行います。

Note

parameter()/set_parameter()の第2引数のパラメータ名は、各素子モデルのページに記載されているスペックのパラメータ名の定義に対応しています。

実行結果

実行結果


マルチプロセスによる並列解析

Example

samples/Scideam/ScideamPy/multiprocess.py

multiprocessing.Poolを使い、パラメータを変化させた解析を複数プロセスで並列実行します。サンプルではインダクタンス L を100パターン変化させ、各条件でのインダクタ電流のピークピーク値を算出しています。

# --- samples/Scideam/ScideamPy/multiprocess.py より抜粋 ---

NUM_CASES = 100
L_VALUES = [10e-6 + (100e-6 - 10e-6) * i / (NUM_CASES - 1) for i in range(NUM_CASES)]
NUM_WORKERS = cpu_count() or 4


def worker(args: tuple[str, str | Path, float]) -> float:
    """ワーカープロセスで L を設定し、定常→波形解析→ピークピーク値を返す."""
    license_type_value, cvt2_path, l_value = args
    lt = LicenseType(license_type_value)

    Converter.initialize(license_type=lt)
    with Converter() as conv:
        conv.read_configuration(cvt2_path)
        conv.set_parameter("L", "Value", l_value)
        conv.clear_parameter()

        if conv.is_ready_for_steady_state():
            conv.steady_state_analysis()
        else:
            conv.transient_analysis(10e-3)
        conv.update_parameter()

        conv.waveform_analysis(100e-6)
        current = conv.output_data("L.I", OutputType.CURRENT)
        assert current is not None
        return max(current) - min(current)


def run(license_type: LicenseType) -> None:
    """L の値を 100 パターン変えて並列解析し、結果をグラフ化する."""
    tasks = [(license_type.value, CVT2_FILE, lv) for lv in L_VALUES]

    with Pool(processes=NUM_WORKERS) as pool:
        peak_to_peaks = pool.map(worker, tasks)

    # ... グラフ描画 ...

ポイント

Warning

スクリプトには if __name__ == "__main__": ガードが必要です。これがないと、ワーカープロセスの起動時にスクリプト全体が再実行されます。

Note

各ワーカープロセスでConverter.initialize()を呼び出す必要があります。Converterはスレッドセーフではありませんが、プロセス単位では独立して動作します。

  • cpu_count()でCPUコア数を取得し、ワーカー数として使用しています。

実行結果

実行結果


出力変数の追加

Example

samples/Scideam/ScideamPy/add_output.py

回路ファイルに定義されていない出力変数を追加して波形を取得します。

    # --- samples/Scideam/ScideamPy/add_output.py より抜粋 ---

    with Converter() as conv:
        # 回路ファイルを読み込む
        conv.read_configuration(CVT2_FILE)

        # add_output する前は、解析しても出力変数が登録されていないため None が返る
        conv.waveform_analysis(100e-6)
        print(f"D.I (追加前): {conv.output_data('D.I', OutputType.CURRENT)}")

        # 回路ファイルに定義されていない出力変数を追加する
        conv.add_output("D.I", OutputType.CURRENT)  # ダイオード電流
        conv.add_output("Q.Sw.R", OutputType.CURRENT)  # FET電流

        # 定常状態にしてから波形解析
        if conv.is_ready_for_steady_state():
            conv.steady_state_analysis()
        else:
            conv.transient_analysis(10e-3)
        conv.update_parameter()

        conv.waveform_analysis(100e-6)

        # 追加した出力波形を取得
        current_d = conv.output_data("D.I", OutputType.CURRENT)

        # ... グラフ描画 ...

ポイント

  • add_output()で追加する前は、output_data()Noneを返します。
  • 不要になった出力変数はremove_output()で削除、clear_output()で全削除できます。

実行結果

実行結果


解析条件の確認・変更

Example

samples/Scideam/ScideamPy/analysis_condition.py

詳細スイッチの帰還容量(FET Crss / IGBT Cres)の有効・無効を制御します。

    # --- samples/Scideam/ScideamPy/analysis_condition.py より抜粋 ---

    with Converter() as conv:
        # 回路ファイルを読み込む
        conv.read_configuration(CVT2_FILE)

        # --- 現在の解析条件を取得 ---
        condition = conv.analysis_condition()
        print(f"fet_crss (FET帰還容量Crss)   : {condition.fet_crss}")
        print(f"igbt_cres (IGBT帰還容量Cres) : {condition.igbt_cres}")

        # --- 解析条件を変更する ---
        # 変更したいパラメータだけ指定すればよい(指定しないものは現在の値を維持)
        conv.set_analysis_condition(fet_crss=True, igbt_cres=True)

        # 変更後の値を確認
        condition = conv.analysis_condition()
        print(f"fet_crss (FET帰還容量Crss)   : {condition.fet_crss}")
        print(f"igbt_cres (IGBT帰還容量Cres) : {condition.igbt_cres}")

ポイント

  • set_analysis_condition()は変更したいパラメータだけ指定すれば、それ以外は現在値が維持されます。

パラメータの初期化(clear_parameter)

Example

samples/Scideam/ScideamPy/clear_parameter.py

clear_parameter()は全素子の電圧・電流の初期値を0にリセットします。

    # --- samples/Scideam/ScideamPy/clear_parameter.py より抜粋 ---

    with Converter() as conv:
        # 回路ファイルを読み込む
        conv.read_configuration(CVT2_FILE)

        # --- 定常状態にする前の波形解析 ---
        conv.waveform_analysis(1e-3)
        # ...

        # --- 定常状態にする ---
        if conv.is_ready_for_steady_state():
            conv.steady_state_analysis()
        else:
            conv.transient_analysis(10e-3)

        # clear_parameter() で全パラメータを初期値にリセットする
        # update_parameter() の代わりに使うと、定常状態が破棄される
        conv.clear_parameter()

        # --- リセット後の波形解析 ---
        conv.waveform_analysis(1e-3)
        # ...

ポイント

Note

定常状態にした後にclear_parameter()を呼ぶと、定常状態が破棄されて初期状態に戻ります。 定常状態を維持したまま後続の解析を行いたい場合は、clear_parameter()ではなくupdate_parameter()を使ってください。

実行結果

実行結果


メイン周波数の変更

Example

samples/Scideam/ScideamPy/set_frequency.py

回路のメイン周波数(スイッチング周波数)を変更して解析します。

    # --- samples/Scideam/ScideamPy/set_frequency.py より抜粋 ---

    with Converter() as conv:
        # 回路ファイルを読み込む
        conv.read_configuration(CVT2_FILE)

        # --- 定常状態にして、現在のメイン周波数で波形解析 ---
        original_freq = conv.frequency()

        if conv.is_ready_for_steady_state():
            conv.steady_state_analysis()
        else:
            conv.transient_analysis(10e-3)
        conv.update_parameter()

        conv.waveform_analysis(100e-6)
        # ...

        # --- メイン周波数を変更して、定常状態から波形解析 ---
        new_freq = original_freq * 2
        conv.set_frequency(new_freq)
        conv.clear_parameter()

        if conv.is_ready_for_steady_state():
            conv.steady_state_analysis()
        else:
            conv.transient_analysis(10e-3)
        conv.update_parameter()

        conv.waveform_analysis(100e-6)
        # ...

ポイント

Note

周波数変更後はclear_parameter()で初期値をリセットし、定常状態からやり直す必要があります。

Note

FRD素子のサブ周波数はset_parameter('FRD1', 'Freq', ...)で個別に変更できます。

実行結果

実行結果


詳細スイッチのパラメータ変更(import_device_parameter)

Example

samples/Scideam/ScideamPy/switch_parameter.py

FETなどのデバイスパラメータファイル(.prm)を読み込んで、詳細スイッチのパラメータを差し替えます。

    # --- samples/Scideam/ScideamPy/switch_parameter.py より抜粋 ---

    with Converter() as conv:
        # 回路ファイルを読み込む
        conv.read_configuration(CVT2_FILE)

        # Nch FET のパラメータをインポート
        data = conv.import_device_parameter("QM", PRM_FILE)
        print(f"インポートしたパラメータ:\n{data}")

ポイント

Note

.prmファイルはScideamのインストールディレクトリ(C:/Program Files/Scideam/DeviceParameters/)に同梱されています。

  • import_device_parameter()はインポートしたパラメータの設定値を文字列として返します。どのパラメータが適用されたか確認する際に活用できます。

回路ファイルの保存

Example

samples/Scideam/ScideamPy/save_configuration.py

パラメータを変更した回路データを.cvt2ファイルとして保存します。サンプルでは保存後に再読み込みして変更が反映されていることを確認しています。

    # --- samples/Scideam/ScideamPy/save_configuration.py より抜粋 ---

    with Converter() as conv:
        # 回路ファイルを読み込む
        conv.read_configuration(CVT2_FILE)

        # 現在のパラメータを確認
        original_l = conv.parameter("L", "Value")

        # パラメータを変更
        new_l = original_l * 2
        conv.set_parameter("L", "Value", new_l)

        # 変更後の回路ファイルを保存
        conv.save_configuration(output_path)

    # 保存したファイルを読み直して、変更が反映されていることを確認
    with Converter() as conv:
        conv.read_configuration(output_path)
        saved_l = conv.parameter("L", "Value")

ポイント

Warning

保存先のディレクトリは事前に存在している必要があります。

  • 保存したファイルは再度read_configuration()で読み込んで使用できます。

DLL の使用

Example

samples/Scideam/ScideamPy/dll.py

DLL で定義した定電力抵抗(10W)を使った Transient 解析の例です。

    # --- samples/Scideam/ScideamPy/dll.py より抜粋 ---

    with Converter() as conv:
        # 回路ファイルを読み込む
        conv.read_configuration(CVT2_FILE)

        # Transient 解析を実行(30 ms)
        conv.transient_analysis(30e-3)

        # 時間軸データを取得
        times = conv.get_times()

        # 出力シグネチャ一覧を取得
        signatures = conv.output_signatures()

        # 各シグネチャの波形データを取得
        waveforms = {}
        for i in range(len(signatures)):
            data = conv.output_data(i)
            if data is not None:
                waveforms[signatures[i]] = data

        # ... グラフ描画 ...

ポイント

Warning

.cvt2ファイル内の DLC 行で DLL のパスを指定します。このパスは Python を実行するカレントディレクトリからの相対パス、または絶対パスで記述してください。

サンプルの dll.cvt2 では以下のように記述されています。

DLC DA plugin ON "examples\dll\plugin.dll"

実行する環境に合わせて、Python を実行するカレントディレクトリからの相対パスに置き換えてください。

例えば、samples/Scideam/ScideamPy/ ディレクトリで python dll.py を実行する場合は、以下のように記述します。

DLC DA plugin ON "dll\plugin.dll"

エラーハンドリング

Example

samples/Scideam/ScideamPy/error_handler.py

解析中に発生するエラーを検知し、必要に応じて解析を中断します。サンプルでは、エラー発生時にフラグを立ててon_set_quit_status経由で解析を中断するクラスを実装しています。

# --- samples/Scideam/ScideamPy/error_handler.py より抜粋 ---

class ErrorQuit:
    """エラーが発生したら解析を中断するコールバック."""

    def __init__(self) -> None:
        self._should_quit = False

    def on_error(self, err: Error) -> None:
        """エラー発生時に呼ばれる。エラーを表示し、中断フラグを立てる."""
        print(f"エラーにより解析を中断します: {err.name}: {err.message}")
        self._should_quit = True

    def __call__(self) -> bool:
        return self._should_quit


def run(license_type: LicenseType) -> None:
    Converter.initialize(license_type=license_type)

    quit_status = ErrorQuit()

    # with_error_handler でエラーコールバックを登録する
    # エラーハンドラーは自動で有効化され、ブロックを抜けるとハンドラーは自動解除される
    with Converter() as conv, conv.with_error_handler(quit_status.on_error):
        # 回路ファイルを読み込む
        conv.read_configuration(CVT2_FILE)

        # on_set_quit_status で中断判定を渡す
        conv.transient_analysis(10e-3, on_set_quit_status=quit_status)

ポイント

  • with_error_handler()をwith文で使うと、エラーハンドラーが自動で有効化され、スコープを抜けた時点でコールバックが自動解除されます。
  • エラー発生時に解析を中断するには、サンプルのようにエラーコールバックで中断フラグを立て、on_set_quit_statusで参照する方法が有効です。

解析のタイムアウト中断

Example

samples/Scideam/ScideamPy/timeout.py

長時間かかる解析を、指定した秒数が経過した時点で中断します。

    # --- samples/Scideam/ScideamPy/timeout.py より抜粋 ---
    from scideampy import timeout_quit

    # ...

    with Converter() as conv:
        # 回路ファイルを読み込む
        conv.read_configuration(CVT2_FILE)

        # 非常に長い解析時間(1000秒)を指定し、3秒でタイムアウト中断する
        # on_set_quit_status に渡したコールバックが True を返すと解析が中断される
        conv.transient_analysis(1000, on_set_quit_status=timeout_quit(3))

ポイント

  • timeout_quit()はscideampyが提供するヘルパー関数で、指定秒数が経過するとTrueを返すコールバックを生成します。
  • transient_analysis以外にもwaveform_analysispower_analysissteady_state_analysisで使用できます。