PAMインバータのスイッチングタイミングを設定するスクリプトを例示します。
app = designer.GetApplication()
# 設定用のダイアログボックスを作成
dialog = app.CreateDialogBox()
# 表示するテキストを定義 (日本語と英語)
title_en = u"Settings for Inverter Switch"
label1_en = u"Number of Pole"
label2_en = u"Initial phase of U(-360 < setting value < 360)"
label3_en = u"Commutating Sequence(UWV = 0, UVW = 1)"
label4_en = u"Name of Macro component"
title_jp = u"インバータスイッチの設定"
label1_jp = u"極数"
label2_jp = u"U相の初期位相(-360 < 設定値 < 360)"
label3_jp = u"相順(UWV = 0, UVW = 1)"
label4_jp = u"マクロ素子名"
# 表示するテキストを指定
dialog.SetTranslation(title_en, title_jp)
dialog.SetTranslation(label1_en, label1_jp)
dialog.SetTranslation(label2_en, label2_jp)
dialog.SetTranslation(label3_en, label3_jp)
dialog.SetTranslation(label4_en, label4_jp)
# ダイアログのタイトルを設定
dialog.SetTitle(title_en)
# 整数入力フィールドを追加: 極数
dialog.AddInteger("int_name", label1_en, 2)
# 実数入力フィールドを追加: U相の初期位相
dialog.AddReal("real_name", label2_en, 0.0)
# 実数入力フィールドを追加: 相順
dialog.AddReal("another_real", label3_en, 0)
# 文字列入力フィールドを追加: マクロ素子の名称
dialog.AddString("string_name", label4_en, "PAM")
# ダイアログを表示
dialog.Show()
# ダイアログから設定値を取得
v1 = dialog.GetValue("int_name") # 極数 P
v2 = dialog.GetValue("real_name") # U相の初期位相 Uini
v3 = dialog.GetValue("another_real") # 整流シーケンス ComSeq
v4 = dialog.GetValue("string_name") # マクロコンポーネント名
# 設定値を変数に代入
ComSeq = v3
P = v1
Uini = v2
# スイッチの周期(機械角)を定義
Period = 360/(P/2)
# スイッチの開始角度を計算する
def getSt1(phase, switchNumber):
angle = 210 if switchNumber%2==0 else 30
# U相の計算
if phase == "U":
# U相の開始角度
st1 = (-Uini+angle)/(P/2)
# V相の計算
elif phase == "V":
# 相順によって位相を決定
if ComSeq == 0:
st1 = (-Uini+angle)/(P/2)+120/(P/2)
else:
st1 = (-Uini+angle)/(P/2)-120/(P/2)
# W相の計算
elif phase == "W":
# 相順によって位相を決定
if ComSeq == 0: # UWV (120度遅れ)
st1 = (-Uini+angle)/(P/2)-120/(P/2)
else:
st1 = (-Uini+angle)/(P/2)+120/(P/2)
else:
return 0.0
return st1
# スイッチの設定値を計算し、適用する
def setSwitch(phase, switchName, switchNumber):
# 開始角度を取得
st1 = getSt1(phase, switchNumber)
# 終了角度を計算
st2 = st1+120/(P/2)
# 初期状態を設定 (0: OFF, 1: ON)
sIni = 0
# st2 が 0 以下の場合は、st1 と st2 を Period だけ進める
if st2 <= 0:
st1 = st1+Period
st2 = st2+Period
sIni = 0
# st1 が負で st2 が正の場合 (ON期間が0点をまたぐ場合)
if (st1 < 0) and (st2 > 0):
st1t = st1
st1 = st2
st2 = st1t+Period
sIni = 1
# st1 が Period 以下で st2 が Period を超える場合 (ON期間が Period をまたぐ場合)
if (st1 <= Period) and (st2 > Period):
# st1 と st2 の値を周期で分割し、st1 < st2 となるように順序を入れ替える
st1t = st1
st1 = st2-Period
st2 = st1t
sIni = 1
# st1 が Period 以上の場合は、st1 と st2 を Period だけ戻す
if st1 >= Period:
st1 = st1-Period
st2 = st2-Period
sIni = 0
# 現在のスタディを取得
study = app.GetCurrentStudy()
# マクロ素子内のスイッチを取得
comp = study.GetCircuit().GetSubCircuit(v4).GetComponent(switchName)
# 周期を設定
comp.SetValue("Period", Period)
# 第一切り替わりを設定
comp.SetValue("t1", st1)
# 第二切り替わりを設定
comp.SetValue("t2", st2)
# 初期状態を設定
comp.SetValue("InitialState", sIni)
# W相のスイッチの設定
setSwitch("W", "S1", 1)
setSwitch("W", "S2", 2)
# V相のスイッチの設定
setSwitch("V", "S3", 3)
setSwitch("V", "S4", 4)
# U相のスイッチの設定
setSwitch("U", "S5", 5)
setSwitch("U", "S6", 6)


