本記事ではPSIMの機能紹介としてSubcircuitブロックの概要/使用方法/使用することのメリット等を紹介しています。
概要
Subcircuitブロックを使用することにより、メイン回路とは別にサブ回路を作成することができます。これによりモデルサイズが大きくなることによる複雑化やモデルの読みやすさの低下を防ぐことができます。また機能ごとにサブ回路をモジュールとして扱うことができ、複数箇所に使用したり、大規模モデルへの適用に便利だったり、といったメリットがあります。
例えば、以前の記事で扱ったPMSMのドライブ回路でのdq⇒三相変換(下図)について、この部分をすべてメイン回路内に表示すると大きなスペースをとることとなり、(下図のモデルは比較的小規模ですが、)さらにモデル規模を大きくしようとした場合、シミュレーションモデルの読みやすさが損なわれます。
このような問題を解決するため、今回はSubcircuitブロックの使用方法について解説していきます。

使用方法
初めにSubcircuitブロックをメイン回路(Subcircuitによって作成される回路をサブ回路と表現しているため、大元の回路をメイン回路と記述しています)に配置します。メニューバーのSubcircuit⇒New Subcircuitと選択していき、Subcircuitブロックを任意の場所に配置します。

配置が終わったらSubcircuitブロックをダブルクリックして、Subcircuitの中身の編集画面へ移動します。新規に追加する場合はブロック等もなくキャンバスのみしかない状態です。
まずはここにPortを追加していきます。このPortがSubCircuit外部からSubcircuit内部へ信号を引き入れるまたは出力する、入出力ポートの役割を担うパーツになります。Subcircuit⇒Place Portを選択して、下図のようにPortを配置します。この時、Portの設定ウィンドウが開くため、外部から信号を取り込みたい位置と何の信号を取り込んでいるのか分かりやすいように名前(Port名)を付けておきます(ユーザが設定可)。下図の例ではdq⇒三相変換に使用する位相θを入力するためのPortを追加しています(Port名:Thetaとしています。)。Portの場所はブロックの下側としています。

同様の手順で入出力に必要なPortをすべて追加します。今回の例では入力として、dqの信号(IdRef,IqRef)、位相(θ)、出力として三相の信号(IuRef,IvRef,IwRef)になります。
配置したPortの位置はSubcircuit⇒Display Portを選択することにより、下図のようにPortsウィンドウが開いて確認することができます。

Portの追加が完了したら、次は回路(ブロック/信号処理)部を作成していきます。今回はdq⇒三相変換なので、以下の式になるように入出力Port間をつないでいきます。
\[
\begin{pmatrix}
U \\
V \\
W
\end{pmatrix}=
\begin{pmatrix}
cosθ&sinθ \\
cos(θ-\frac{2}{3}π)&sin(θ-\frac{2}{3}π) \\
cos(θ+\frac{2}{3}π)&sin(θ+\frac{2}{3}π)
\end{pmatrix}
\begin{pmatrix}
D \\
Q
\end{pmatrix}
\]

これでSubcircuitの編集は完了です。File⇒Save asで名前を付けて保存します。保存したらSubcircuitを開いているウィンドウを閉じて、メイン回路に戻ります。
するとSubcircuitを新規に配置した際は何も表示されていない白い箱だったのに対して、Subcircuitの編集画面で追加したPortが表示されていることが確認できます。それぞれのPortの位置もPortウィンドウで設定した位置にきています。
これらのPortの内、入力Port(下図の場合D_IN/Q_IN/Theta)に信号を接続することでSubCircuit内部にも同様の信号が入力され、信号処理した結果が出力Port(下図の場合U_OUT/V_OUT/W_OUT)から出てきます。

Subcircuitのブロックの大きさ(箱の幅、高さ)を変更したい場合は再度、Subcircuitブロックをダブルクリックして、Subcircuit編集画面に入ります。Subcircuit⇒Set Sizeを選択することにより下図のようにSet element dimensionsウィンドウが開きます。任意の幅(Width)、高さ(Height)を入力することでブロックの大きさを変更可能です。変更後、File⇒Saveで上書き保存を行った後、元のブロックに戻るとSubcircuitブロックの大きさが変わっています。

以上がSubcircuitブロックの新規作成から編集方法の解説になります。
次の章では動作確認について説明しています。
動作確認
動作確認として以下のシミュレーションモデルのようにSubcircuit機能を使わない場合とSubcircuitでdq⇒三相変換を行った場合の結果を比較してみます。

結果、U,V,W相すべての波形でSubcircuitを使う/使わないにかかわらず波形が一致していることがわかります(※Iu,Iv,Iwは見やすくするため、波形の線の太さをやや太くしています)。
カーソルを当てて数値を読み取っても同様の値となっていることから、Subcircuit機能を使用した場合でも結果に変わりがないことが確認できました。

SubCircuit機能を使用することで最初に示したシミュレーションモデルに比べ、モデル全体がスッキリして見やすくなりました。また、dq⇒三相変換機能をモジュール化することもでき、この機能を他の箇所で使用したい場合にも、簡単に適用できるようになりました。

以上でSubcircuitブロックの使用方法やメリットの解説を終わります。
お疲れさまでした!
コメント
こんにちは.
研究のために読ませていただいています.
質問なのですが,出力の直前で引き算をしているのはなぜなのでしょうか.行列の計算的に輪をとるのかとおもい質問しました.
ご回答いただけると嬉しいです・