125 lines
2.7 KiB
Python
125 lines
2.7 KiB
Python
import glob
|
|
|
|
lookup_table_energy = {}
|
|
|
|
def process_charge(data, r_eq, v_source):
|
|
t_prev = None
|
|
v_prev = None
|
|
|
|
e_pj = 0.0
|
|
|
|
last_t = int(data[-1].split(';')[0])
|
|
|
|
v_key = int(v_source*10)
|
|
if v_key not in lookup_table_energy:
|
|
lookup_table_energy[v_key] = {}
|
|
|
|
lookup_table_energy[v_key][r_eq] = {}
|
|
|
|
# t; v; ; t; ua
|
|
for line in data[1:]:
|
|
if 'E' in line:
|
|
continue
|
|
|
|
line = line.replace(',', '.').replace("\n", '').split(";")
|
|
|
|
# Ignore missing measures
|
|
if line[3] == '' or line[4] == '':
|
|
continue
|
|
|
|
t = int(line[0])
|
|
v = float(line[1])
|
|
i_ua = float(line[4])
|
|
|
|
if t_prev is None:
|
|
t_prev = t
|
|
|
|
if v_prev is not None:
|
|
if v < v_prev:
|
|
break
|
|
|
|
# E
|
|
#e_pj += (t-t_prev) * (v_source-v) * i_ua * 1000000.0
|
|
e_pj += (t-t_prev) * v * i_ua * 1000000.0
|
|
|
|
# Q
|
|
#e_pj += (t-t_prev) * i_ua * 1000000.0
|
|
|
|
t_prev = t
|
|
v_prev = v
|
|
|
|
lookup_table_energy[v_key][r_eq][int(e_pj)] = v
|
|
|
|
print(f"Charge @ {v_source}V {r_eq}Ohm - E={round(e_pj/1000000000.0, 4)}mJ; T={t_prev}s ({last_t}s)")
|
|
|
|
def process_discharge(data, r_eq):
|
|
e = 0.0
|
|
t_prev = None
|
|
v_prev = None
|
|
|
|
lookup_table_energy[r_eq] = {}
|
|
|
|
last_t = int(data[-1].split(';')[0])
|
|
|
|
# t; v
|
|
for line in data[1:]:
|
|
if 'E' in line:
|
|
continue
|
|
|
|
line = line.replace(',', '.').replace("\n", '').split(";")
|
|
|
|
t = int(line[0])
|
|
v = float(line[1])
|
|
|
|
if t_prev is None:
|
|
t_prev = t
|
|
|
|
#if v_prev is not None:
|
|
# if v > v_prev:
|
|
# break
|
|
|
|
e += (t-t_prev) * (v * v / r_eq)
|
|
t_prev = t
|
|
v_prev = v
|
|
lookup_table_energy[r_eq][int(e*1000000000000.0)] = v
|
|
|
|
print(f"Discharge @ {r_eq}Ohm - E={e*1000.0}mJ; T={t_prev}s ({last_t}s)")
|
|
|
|
|
|
for f in glob.glob("*.csv"):
|
|
name = f.split("_")
|
|
name[-1] = name[-1].split(".csv")[0]
|
|
|
|
mode = name[0]
|
|
r = int(name[1].replace('ohm', ''))
|
|
|
|
with open(f) as fp:
|
|
data = fp.readlines()
|
|
|
|
if mode == 'charge':
|
|
v = float(name[2].replace('v', ''))
|
|
process_charge(data, r, v)
|
|
else:
|
|
continue
|
|
process_discharge(data, r)
|
|
|
|
|
|
processed = []
|
|
print("V_source=0.6V")
|
|
for e_pj, v in reversed(sorted(lookup_table_energy[6][580].items())):
|
|
v = round(v, 1)
|
|
if v not in processed:
|
|
processed.append(v)
|
|
print(f"{v}V -> {round(e_pj/1000000000.0, 2)}mJ")
|
|
|
|
print()
|
|
|
|
processed = []
|
|
print("V_source=0.8V")
|
|
for e_pj, v in reversed(sorted(lookup_table_energy[8][580].items())):
|
|
v = round(v, 1)
|
|
if v not in processed:
|
|
processed.append(v)
|
|
print(f"{v}V -> {round(e_pj/1000000000.0, 2)}mJ")
|
|
|