From 384d6d5cfbb6d54c02b351c4ca2d518b73b705cc Mon Sep 17 00:00:00 2001 From: Pedro Romero Date: Wed, 26 Mar 2025 10:26:29 +0100 Subject: [PATCH] first commit --- Ensayos.xlsx | Bin 0 -> 20607 bytes automation.py | 11 +++ ensayos_motor.py | 173 ++++++++++++++++++++++++++++++++++++++++ genCurvas.py | 62 ++++++++++++++ requirements.py | 5 ++ resultados_ensayos.json | 23 ++++++ 6 files changed, 274 insertions(+) create mode 100644 Ensayos.xlsx create mode 100644 automation.py create mode 100644 ensayos_motor.py create mode 100644 genCurvas.py create mode 100644 requirements.py create mode 100644 resultados_ensayos.json diff --git a/Ensayos.xlsx b/Ensayos.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..800261b83fb0251b2fb8256cd10617d104169d38 GIT binary patch literal 20607 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�is*Z6eSLdaUYvIB*Cjy^d~Z5>a7t3TMHT{H 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 literal 0 HcmV?d00001 diff --git a/automation.py b/automation.py new file mode 100644 index 0000000..565143d --- /dev/null +++ b/automation.py @@ -0,0 +1,11 @@ +import numpy as np +import pandas as pd +import json +import h5py + +pyenv("Version", "3.9", "ExecutionMode","OutOfProcess") +pymotorcad = py.importlib.import_module('ansys.motorcad.core') + +pymotorcad.set_motorcad_exe('D:\Ansys_Motor-CAD\2024_2_2_1\Motor-CAD_2024_2_2_1.exe') + +mcApp=pymotorcad.MotorCAD() \ No newline at end of file diff --git a/ensayos_motor.py b/ensayos_motor.py new file mode 100644 index 0000000..e7391a3 --- /dev/null +++ b/ensayos_motor.py @@ -0,0 +1,173 @@ +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +import json + +def ensayo_vacio(V,f): + + ''' + Entrada: + V = { + 'a': [datos] + 'b': [datos] + 'c': [datos] + } + + f = [datos] + + Salida: + ke media por fase + ke por fase + ''' + + keA = [] + keB = [] + keC = [] + + for i in range(len(f)): + + keA.append(V['a'][i]/f[i]) + keB.append(V['b'][i]/f[i]) + keC.append(V['c'][i]/f[i]) + + keMedia = { + 'a': np.mean(keA), + 'b' : np.mean(keB), + 'c' : np.mean(keC) + } + ke = { + 'a': keA, + 'b' : keB, + 'c' : keC + } + + return keMedia, ke + +def ensayo_corto(I, f, ke, R): + ''' + Entrada: + I = { + 'a': [datos] + 'b': [datos] + 'c': [datos] + } + + f = [datos] + + R = cte + + Salida: + media induccion [mH] + todas las inducciones + coeficiente de variacion + ''' + L = [] + for i in range(len(f)): + xa = np.sqrt((ke['a']*f[i]/I['a'][i])**2 - R**2 ) + xb = np.sqrt((ke['b']*f[i]/I['b'][i])**2 - R**2 ) + xc = np.sqrt((ke['c']*f[i]/I['c'][i])**2 - R**2 ) + + L.append(np.mean([xa,xb,xc]) / (2 * np.pi * f[i]) * 1e3) + + return np.mean(L), np.array(L), np.std(L)/np.mean(L)*100 + + +def ensayo_carga(V, I, f, R, L): + ''' + Entrada: + V = { + 'a': [datos] + 'b': [datos] + } + + I = { + 'a': [datos] + 'b': [datos] + } + + f = [datos] + + ''' + E = [] + Ireal = [] + for i in range(len(f)): + Vtemp = np.mean([V['a'][i], V['b'][i]]) + Itemp = np.mean([I['a'][i], I['b'][i]]) + + Ireal.append(Itemp) + E.append(np.sqrt((R + Vtemp/Itemp) ** 2 + (2*np.pi*f[i]*L*1e-3) ** 2) * Itemp) + + + return np.array(E), np.array(Ireal) + +if __name__ == '__main__': + archivo = 'Ensayos.xlsx' + + vacio = pd.read_excel(archivo, sheet_name='vacio', engine='openpyxl').dropna() + corto = pd.read_excel(archivo, sheet_name='corto', engine='openpyxl').dropna() + carga = pd.read_excel(archivo, sheet_name='carga', engine='openpyxl').dropna() + + + resistencia = 4.5 + materiales = np.unique(vacio['material']) + + fig = plt.figure() + ax = fig.add_subplot(111, projection='3d') + + for material in materiales: + tensionVacio = { + 'a' : np.array(vacio['V1'][vacio['material'] == material]), + 'b' : np.array(vacio['V2'][vacio['material'] == material]), + 'c' : np.array(vacio['V3'][vacio['material'] == material]) + } + fVacio = np.array(vacio['f'][vacio['material'] == material]) + + keMedia, ke= ensayo_vacio(tensionVacio, fVacio) + + + corrienteCorto ={ + 'a' : np.array(corto['I1'][corto['material'] == material]), + 'b' : np.array(corto['I2'][corto['material'] == material]), + 'c' : np.array(corto['I3'][corto['material'] == material]) + } + fCorto = np.array(corto['f'][corto['material'] == material]) + + lMedia, l, lCV = ensayo_corto(corrienteCorto, fCorto, keMedia, resistencia) + + + tensionCarga = { + 'a' : np.array(carga['V1'][carga['material'] == material]), + 'b' : np.array(carga['V2'][carga['material'] == material]) + } + corrienteCarga = { + 'a' : np.array(carga['I1'][carga['material'] == material]), + 'b' : np.array(carga['I2'][carga['material'] == material]) + } + fCarga = np.array(carga['f'][carga['material'] == material]) + + E, I = ensayo_carga(tensionCarga, corrienteCarga, fCarga, resistencia, lMedia) + + ax.plot3D(I, fCarga, E, label = material) + + if material == 'PLACOND': + datos = { + 'E' : E.tolist(), + 'I' : I.tolist(), + 'f' : fCarga.tolist() + } + with open('resultados_ensayos.json', 'w') as f: json.dump(datos, f, indent=4) + + ax.set_xlabel('Corriente [A]') + ax.set_ylabel('Frecuencia [Hz]') + ax.set_zlabel('Tension [V]') + + Imax = np.max(I) + Emax = np.max(E) + fmax = np.max(fCarga) + + ax.set_xlim(0, Imax * 1.1) + ax.set_ylim(0, fmax * 1.1) + ax.set_zlim(0, Emax * 1.1) + + ax.legend() + plt.show() \ No newline at end of file diff --git a/genCurvas.py b/genCurvas.py new file mode 100644 index 0000000..7455d0e --- /dev/null +++ b/genCurvas.py @@ -0,0 +1,62 @@ +import numpy as np +import pandas as pd +import json + +def generar_curva(offset): + muVacio = 4 * np.pi * 1e-7 + + hPos = np.arange(1,5001,1) + hNeg = np.arange(-5000,0,1) + + bPos = muVacio*hPos + offset + bNeg = muVacio*hNeg - offset + + h = np.concatenate((hNeg, hPos)) + b = np.concatenate((bNeg, bPos)) + + return h, b + +if __name__ == '__main__': + + with open('resultados_ensayos.json', 'r') as f: datos = json.load(f) + + Eobjetivo = np.array(datos['E']) + Iobjetivo = np.array(datos['I']) + fObjetivo = np.array(datos['f']) + + errorObjetivo = 0.01 # +- cuanto % puede haber de diferencia + limSup = 1 + errorObjetivo + limInf = errorObjetivo + + offset = 0 + + flag = False + + while flag: + h,b = generar_curva(offset) + + datos = np.column_stack((h,b)) + + np.savetxt('curva.csv', datos, delimiter=',') + + ############################ + ''' + Logica de motorCAD-Pyhton, se sacaran unos vectores con + corrientes, frecuencias y tensiones de operacion en + distintos puntos con una curva dada. Esto se hara estableciendo + como fijo la frecuencia y la corriente, si se puede solo + con frecuencia mejor. Se compara la tension (y corriente si no se fija) + con los valores objetivos. + + ''' + Ecalc = [1, 1, 1, 1, 1] + + ############################ + + error = Ecalc / Eobjetivo + + + + + + diff --git a/requirements.py b/requirements.py new file mode 100644 index 0000000..115055f --- /dev/null +++ b/requirements.py @@ -0,0 +1,5 @@ +numpy +pandas +json +openpyxl +h5py==3.9 \ No newline at end of file diff --git a/resultados_ensayos.json b/resultados_ensayos.json new file mode 100644 index 0000000..743bd45 --- /dev/null +++ b/resultados_ensayos.json @@ -0,0 +1,23 @@ +{ + "E": [ + 175.66197827609287, + 160.81787128674983, + 145.4009250653107, + 104.3877062608225, + 95.01237852797996 + ], + "I": [ + 2.085, + 1.87, + 1.635, + 0.965, + 0.79 + ], + "f": [ + 138.9, + 139.6, + 140.6, + 144.3, + 145.3 + ] +} \ No newline at end of file