fluxcontrol/motorcad.py
2025-03-31 11:31:56 +02:00

56 lines
2.1 KiB
Python

import ansys.motorcad.core as MCAD
import os
def simularMCAD(corriente, frecuencia, material, iteration):
working_folder = os.getcwd()
motPath = os.path.join(working_folder, "motores", f"{material}.mot")
materialPath = os.path.join(working_folder, f"{material}.mdb")
mcad = MCAD.MotorCAD()
mcad.set_variable("MessageDisplayState", 2)
mcad.set_visible(True)
mcad.load_from_file(motPath)
print("Archivo de motor cargado desde:", motPath)
# Simulation config
mcad.set_variable("MagneticThermalCoupling", 0)
mcad.set_variable("CurrentDefinition", 1)
mcad.set_variable("BackEMFCalculation", False)
mcad.set_variable("CoggingTorqueCalculation", False)
mcad.set_variable("ElectromagneticForcesCalc_OC", False)
mcad.set_variable("TorqueSpeedCalculation", False)
mcad.set_variable("DemagnetizationCalc", False)
mcad.set_variable("ElectromagneticForcesCalc_Load", False)
mcad.set_variable("InductanceCalc", False)
mcad.set_variable("BPMShortCircuitCalc", False)
mcad.set_variable("TorqueCalculation", True)
# Operation point
polos = mcad.get_variable("PoleNumber")
n = frecuencia * 60 / (polos/2)
mcad.set_variable("ShaftSpeed", n)
mcad.set_variable("RMSCurrent", corriente)
mcad.set_variable("DCBusVoltage", 230)
mcad.set_variable("PhaseAdvance", 0)
# Material
mcad.import_solid_material(materialPath, material)
print("Material importado desde:", materialPath)
mcad.set_component_material("Rotor Lam (Back Iron)", material)
print("Material puesto en el rotor.")
# Ejecución y resultados
mcad.do_magnetic_calculation()
E = mcad.get_variable("RMSBackEMFLine")
I = mcad.get_variable("RMSPhaseCurrent")
f = mcad.get_variable("FundamentalFrequency")
resultsPath = os.path.join(working_folder, "results", f"results_{iteration}.txt")
try:
mcad.export_results("EMagnetic", resultsPath)
print("Results successfully exported.")
except mcad.MotorCADError:
print("Results failed to export.")
return E, I, f