[S8555] n番目に大きいトルク勾配を取得するスクリプト

 

n番目に大きいトルク勾配を取得するスクリプトを例示します。

※ステップコントロールの設定で、[等間隔]を使用した、全ケース計算済みのデータを使用

app = designer.GetApplication()

# 何番目に大きいトルク勾配を得たいか、指定して下さい。

n = 2

# スタディの[運動:回転]条件につけているタイトルを入れてください。

ConditionName = u"Rotor"

app = designer.GetApplication()

# 現在開いているスタディを取得

study = app.GetCurrentStudy()

# 現在のスタディのケース数を取得する

num_cases = study.GetDesignTable().NumCases()

# ケース毎に n 番目に大きいトルク勾配を取得

for case_id in range(1, num_cases + 1):

   # 指定したケースを表示

   app.View().SetCurrentCase(case_id)

   # ステップコントロールから ステップ数を取得

   num_of_step = study.GetStep().GetValue(u"Step")

   # ステップコントロールから終了時間を取得

   t_end = study.GetStep().GetValue(u"EndPoint")

   # ステップコントロールから分割数 を取得

   num_of_division = study.GetStep().GetValue(u"StepDivision")

   # トルク勾配を格納するリスト

   trq_grad = []

   # [運動:回転]条件から回転数(rpm)を読み取る

   rpm = study.GetCondition(ConditionName).GetValue(u"AngularVelocity")

   # 1ステップあたりの時間刻みを算出

   delta_t = t_end / num_of_division

   # 1ステップあたりの回転量(deg)を算出

   delta_deg_per_step = 360 * (rpm / 60) * delta_t

   # トルクの結果を取得

   trq_data_set = study.GetDataSet("Torque", case_id)

   # ステップごとにトルク勾配(N・m/deg)の絶対値を計算し、配列に格納

   for row in range(int(num_of_step) - 1):

       trq_grad_value = abs(trq_data_set.GetValue(row + 1, 1) - trq_data_set.GetValue(row, 1)) / delta_deg_per_step

       trq_grad.append(trq_grad_value)

   # トルク勾配を降順に並べ替え

   trq_grad.sort(reverse=True)

   # 降順に並べ替えた配列から、n番目に大きいトルク勾配を取得

   if n > 0 and n <= len(trq_grad):

       target_trq_grad = trq_grad[n - 1]

       study.SetUserResponseVariable("TrqGradient", case_id - 1, target_trq_grad)# 応答値グラフのオブジェクトを取得

defn = study.CreateParametricGraphDefinition()

# グラフの名前を設定

defn.SetParameter(u"name", u"TrqGradient")

# X軸のデータセットを指定

defn.SetParameter(u"xaxis", u"Case Index")

# Y軸のデータセットを指定

defn.SetParameter(u"yaxis", u"TrqGradient")

# グラフの作成

defn.CreateParametricGraph()

# グラフを表示

app.GetDataManager().Show(u"TrqGradient")

ファイルご利用の注意点

JMAGスクリプトライブラリをご利用されるに際し、以下の利用規約をよくお読みいただき、ご同意の上ご利用下さるようお願い申し上げます。