前提・実現したいこと
Pythonで電気回路の設計ソフトを作成しています。TkinterでGUI画面を作成し、画面上のボックスに必要な数値を入力して、実行ボタンを押すと設計結果が返ってくるというものです。数値は書き換えて何度も設計を繰り返すことができます。試行回数によらず一定の計算速度を保てるようにしたいです。
Python、tkinterともに扱い初めて1か月の初心者です。
発生している問題・エラーメッセージ
何度も設計を繰り返すと処理速度がどんどん遅くなってしまいます。
ファイルを扱う部分に問題があるのではないかと考えたのですが、原因を見つけることに難航しています。
該当のソースコード
Python
1def inductor_design(specification, line_1, line_2, thickness, result): 2 #設計仕様の値を変数に代入 3 f = float(specification[0]) 4 SC_Rated = float(specification[1]) 5 L_init = float(specification[2]) 6 L_Rated = float(specification[3]) 7 Max_tmp = float(specification[4]) 8 Ku = float(specification[5]) 9 Jmax = float(specification[6]) 10 11 #コアデータベースの値を変数に代入 12 perm = float(line_1[4]) 13 a = float(line_1[5]) 14 b = float(line_1[6]) 15 c = float(line_1[7]) 16 A = float(line_1[8]) 17 B = float(line_1[9]) 18 C = float(line_1[10]) 19 D = float(line_1[11]) 20 Bsat = float(line_1[12]) 21 22 OD = float(line_2[1]) 23 ID = float(line_2[2]) 24 HT = float(line_2[3]) 25 Le = float(line_2[4]) 26 Limit_Wire_Dia = float(line_2[5]) 27 S = float(line_2[6]) 28 Ae = float(line_2[7]) 29 Ve = float(line_2[8]) 30 W = float(line_2[9]) 31 MP = float(line_2[11]) 32 HF = float(line_2[12]) 33 MF = float(line_2[13]) 34 SD = float(line_2[14]) 35 HS = float(line_2[15]) 36 SG = float(line_2[16]) 37 38 N = int(math.ceil(math.sqrt((L_init*Le*pow(10,3))/(4.0*math.pi*perm*(Ae*thickness))))) 39 40 N_11 = 0 41 N_21 = 0 42 N_22 = 0 43 N_31 = 0 44 N_32 = 0 45 N_33 = 0 46 47 48 N_init = N 49 current = int(SC_Rated) 50 diff_max = 1.25 51 diff_min = 0.97 52 flag_1 = 1 53 flag_2 = 1 54 count = 0 55 i = 0 56 57 #定格インダクタンスを得るように初期インダクタンスを動かしている 58 while flag_1 != 0: 59 60 L_at0A = 4.0*math.pi*perm*(Ae*thickness)*math.pow(N,2)/(Le*math.pow(10,3)) 61 H = N*current*math.pow(10,2)/(Le*79.577) 62 per_mu = 100/(a + b*math.pow(H,c)) 63 inductance.insert(current, L_at0A*per_mu/100) 64 if inductance[current] >= L_Rated*diff_min and inductance[current] <= L_Rated*diff_max: 65 Ldc = inductance[current] 66 flag_1 = 0 67 break 68 69 elif flag_2 == 1: 70 N += 1 71 if N > 3*N_init: 72 flag_2 = 2 73 74 elif flag_2 == 2: 75 N -= 1 76 if N < 1: 77 return(3) 78 Ku = Ku/100 79 input_Ku = Ku 80 81 while True: 82 83 84 Aw = (Ku*W*math.pow(10,2))/float(N) 85 if Aw <= 6.733: 86 N_wire = 1 87 Aw = (Ku*W*math.pow(10,2))/float(N*N_wire) 88 elif Aw > 6.733 and Aw <= 13.466: 89 N_wire = 2 90 Aw = (Ku*W*math.pow(10,2))/float(N*N_wire) 91 else: 92 N_wire = 1 93 Aw = Aw 94 95 out_wire = getwire(Aw,wire) 96 97 98 99 #膨らみ率 100 if float(wire[0]) < 1.0: 101 kp = 1.0 102 else: 103 kp = float(wire[0]) 104 105 106 107 Ku_real = (float(wire[10])*N*N_wire*100)/(W*math.pow(10,2))*kp 108 if out_wire == 1 or out_wire == 2: 109 Ku_real = 100 110 111 if Ku_real >= (input_Ku*100-5.0) and Ku_real <= (input_Ku*100+5.0): 112 break 113 else: 114 Ku = Ku - 0.01 115 116 if Ku <= 0: 117 return (5) 118 119 120 ############中略################ 121 122 123 #結果出力 124 result.insert(0, L_at0A) 125 result.insert(1, Ldc) 126 result.insert(2, N) 127 result.insert(3, float(wire[0])) 128 result.insert(4, wire_Weight + core_Weight) 129 result.insert(5, delta_T) 130 result.insert(6, Fin_Ve) 131 result.insert(7, Bm) 132 result.insert(8, Jm) 133 result.insert(9, Pi) 134 result.insert(10, Pwdc) 135 result.insert(11,Rwdc) 136 result.insert(12,Ku_real) 137 result.insert(13,OD) 138 result.insert(14,ID) 139 result.insert(15,HT) 140 result.insert(16,N_wire) 141 result.insert(18,N1) 142 result.insert(19,N2) 143 result.insert(20,N3) 144 result.insert(21,Fin_OD) 145 result.insert(22,Fin_HT) 146 result.insert(23,wire_Weight) 147 result.insert(24,core_Weight) 148 result.insert(25,f) 149 result.insert(26,SC_Rated) 150 result.insert(27,Ae) 151 result.insert(28,Ve) 152 result.insert(29,W) 153 result.insert(30, float(wire[1])) 154 result.insert(31, float(wire[2])) 155 result.insert(32,wire_Length) 156 result.insert(33,kp) 157 result.insert(34,Le) 158 159 160 161 162 163 164 return (0) 165 166
試したこと
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー