Power balance error on Transient Magnetic

Altair Forum User
Altair Forum User
Altair Employee
edited October 2020 in Community Q&A

I'm trying to execute a power balance over a full electric period of a 4 pole motor (180 mechanical degrees) but I get an error :

 

 evaluateInstances : Execution failed. Failed execution Failed to create a new instance of Power Balance.
 BP_ERES  => Wrong parameter BP_ERES  => failed... BP_FNUM  => Evaluation interrupted BAFOC2_1 => Evaluation failed BAFOC2   => Evaluation failed BAFOCC   => Evaluation aborted evaluateInstances => failed stdcom.error.SoftwareFortranException: evaluateInstances : Execution failed. Failed execution 	at cad.core.common.error.ErrorManager.createFortranException(ErrorManager.java:153) 	at cad.flux.kernel.dbmanager.FGCProjectDbWrapper.evaluateInstances(Native Method) 	at cad.flux.kernel.dbmanager.FGCProjectDbAdapter.evaluateInstances(FGCProjectDbAdapter.java:1004) 	at cad.flux.kernel.dbmanager.FGCProjectDbAdapter.evaluateProjectInstances(FGCProjectDbAdapter.java:961) 	at cad.core.kernel.dbmanager.DbManager.evaluateProjectInstances(DbManager.java:2081) 	at cad.core.kernel.components.TransactionCreateInstance.processDBEvaluation(TransactionCreateInstance.java:416) 	at cad.core.kernel.components.TransactionCreateInstance.commit(TransactionCreateInstance.java:330) 	at cad.core.kernel.components.TransactionManager.commit(TransactionManager.java:292) 	at cad.core.kernel.components.TransactionManager.processTransactionCreateInstance(TransactionManager.java:652) 	at cad.core.kernel.components.TransactionManager.newProjectInstance(TransactionManager.java:739) 	at cad.flux.kernel.FGSupervisor.newProjectInstance(FGSupervisor.java:3502) 	at sun.reflect.GeneratedMethodAccessor378.invoke(Unknown Source) 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 	at java.lang.reflect.Method.invoke(Method.java:498) 	at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:186) 	at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:204) 	at org.python.core.PyObject.__call__(PyObject.java:507) 	at org.python.core.PyObject.__call__(PyObject.java:511) 	at org.python.core.PyMethod.__call__(PyMethod.java:156) 	at pydb$py.newObject$203(pydb.py:1586) 	at pydb$py.call_function(pydb.py) 	at org.python.core.PyTableCode.call(PyTableCode.java:167) 	at org.python.core.PyBaseCode.call(PyBaseCode.java:170) 	at org.python.core.PyFunction.__call__(PyFunction.java:434) 	at org.python.core.PyMethod.__call__(PyMethod.java:156) 	at pydb$py.__call__$159(pydb.py:1261) 	at pydb$py.call_function(pydb.py) 	at org.python.core.PyTableCode.call(PyTableCode.java:167) 	at org.python.core.PyBaseCode.call(PyBaseCode.java:307) 	at org.python.core.PyBaseCode.call(PyBaseCode.java:198) 	at org.python.core.PyFunction.__call__(PyFunction.java:482) 	at org.python.core.PyMethod.instancemethod___call__(PyMethod.java:237) 	at org.python.core.PyMethod.__call__(PyMethod.java:228) 	at org.python.core.PyMethod.__call__(PyMethod.java:223) 	at org.python.core.PyObject.invoke(PyObject.java:3697) 	at org.python.core.PyInstance.instance___call__(PyInstance.java:377) 	at org.python.core.PyInstance.__call__(PyInstance.java:372) 	at org.python.core.PyObject.__call__(PyObject.java:405) 	at org.python.pycode._pyx113.f$0(<input>:1) 	at org.python.pycode._pyx113.call_function(<input>) 	at org.python.core.PyTableCode.call(PyTableCode.java:167) 	at org.python.core.PyCode.call(PyCode.java:18) 	at org.python.core.Py.runCode(Py.java:1398) 	at org.python.core.Py.exec(Py.java:1442) 	at org.python.util.PythonInterpreter.exec(PythonInterpreter.java:276) 	at cad.core.kernel.components.PythonWrapper.runCode(PythonWrapper.java:628) 	at cad.core.kernel.components.PythonWrapper.runsource(PythonWrapper.java:623) 	at cad.core.kernel.components.PythonWrapper.runsource(PythonWrapper.java:598) 	at cad.core.kernel.components.PythonWrapper.runsource(PythonWrapper.java:593) 	at cad.core.kernel.components.PythonWrapper.execute(PythonWrapper.java:638) 	at cad.core.kernel.components.PythonWrapper.executeNewCommand(PythonWrapper.java:756) 	at cad.core.kernel.KernelModule.executeNewCommand(KernelModule.java:104) 	at cad.core.kernel.actions.implementation.type.CreateInstanceAction.doAction(CreateInstanceAction.java:108) 	at cad.core.common.dynamic.actions.UIActionManager.postAction(UIActionManager.java:145) 	at cad.core.common.dynamic.actions.UIActionManager.postAction(UIActionManager.java:274) 	at cad.core.kernel.KernelCommon.postAction(KernelCommon.java:306) 	at cad.core.kernel.encoder.ActionServerRequestsInputPlug.postAction(ActionServerRequestsInputPlug.java:88) 	at cad.core.kernel.encoder.ActionServerRequestsInputPlug.postAction(ActionServerRequestsInputPlug.java:82) 	at stdcom.protocole.actionserverrequests.ActionServerRequestsRouter.postAction(ActionServerRequestsRouter.java:70) 	at stdcom.protocole.actionserverrequests.ActionServerRequestsOutputPlug.postAction(ActionServerRequestsOutputPlug.java:96) 	at cad.core.frontal.decoder.FrontalDecoder.postAction(FrontalDecoder.java:464) 	at cad.flux.frontal.actions.implementation.algo.postpro.ExecuteEntityWithResult.postAct(ExecuteEntityWithResult.java:63) 	at cad.core.frontal.actions.implementation.type.CreateInstanceAction.interpret(CreateInstanceAction.java:309) 	at cad.core.frontal.components.box.frontaldialog.FrontalDescriptorDialogBox.internalRun(FrontalDescriptorDialogBox.java:296) 	at cad.core.frontal.frontalthread.WorkerThread.executeImplementer(WorkerThread.java:226) 	at cad.core.frontal.frontalthread.WorkerThread.run(WorkerThread.java:274)

 

Also I'm having a hard time calculating the power balance manually. Because FLUX tells me that the power input is 6000W and the mechanical output is 4200W, however when I sum the joule losses+ the bertotti losses I get 4200+400=4600W. So where are the others 1400W (6000-4600) ?

I'm nearly sure I'm calculating it correctly. But I'm asking because I'm new to flux and I'm still understanding how it works. Is this difference normal or I am missing something?

 

I can give you my solved flu project, but I'd have to send it directly to you since the link expires after one download
Thanks, have a good day!

 

Tagged:

Answers

  • Altair Forum User
    Altair Forum User
    Altair Employee
    edited June 2019

    Also, I have a question regarding the Bertotti losses. It computes the average iron losses over a period but.. does it take into account the length of the motor or it just computes the loses on one slice of steel?

    Basically what I'm asking is, do I need to multiply the average losses * length of motor / thickness of steel slice to obtain the iron losses of the full motor?

  • Alejandro Rodríguez
    Alejandro Rodríguez
    Altair Employee
    edited June 2019

    Hello Holo,

    In fact, Berttoti losses are calculated taken into account the device length, since Berttoti approach deals with losses in the ferromagnetic volumes. However, losses are only calculated in the simulated part of the device: for example, if you are simulating only one pole of your four-poles machine and using periodicities your losses are equal to: 4200+4*400=5800W (not 4600 W, as you have said).

    I do not know what is your problem with “Power Balance”. Cand you send me this macro in order to check it?

    Best regards.

  • Altair Forum User
    Altair Forum User
    Altair Employee
    edited June 2019

    Thanks for answering,

     

    I've simulated a quarter and applied the periodicity to obtain the full motor. My actual bertotti losses are 2,58W * 4 quarters = 10W and I think it's too low. I'm not sure what I'm calculating incorrectly.

    I think I'm also mixing things up because I'm not sure when I need to multiply by 4 and when I don't need to.

     

    https://send.firefox.com/download/25f117c80a3e1ff3/#UjuguY_jRnr6PvaRreOgfg

     

    This is the link of my solved flu project. I did it on FLux 2018. On the advanced menu you can see the power balance macro, it came integrated on the software.

  • Altair Forum User
    Altair Forum User
    Altair Employee
    edited June 2019

     

    Hello Holo,

     

     

    In fact, Berttoti losses are calculated taken into account the device length, since Berttoti approach deals with losses in the ferromagnetic volumes. However, losses are only calculated in the simulated part of the device: for example, if you are simulating only one pole of your four-poles machine and using periodicities your losses are equal to: 4200+4*400=5800W (not 4600 W, as you have said).

     

     

    I do not know what is your problem with “Power Balance”. Cand you send me this macro in order to check it?

     

     

    Best regards.

     

     

     

    Thanks for answering,

     

    I've simulated a quarter and applied the periodicity to obtain the full motor. My actual bertotti losses are 2,58W * 4 quarters = 10W and I think it's too low. I'm not sure what I'm calculating incorrectly.

    I think I'm also mixing things up because I'm not sure when I need to multiply by 4 and when I don't need to.

     

    https://send.firefox.com/download/25f117c80a3e1ff3/#UjuguY_jRnr6PvaRreOgfg

     

    This is the link of my solved flu project. I did it on FLux 2018. On the advanced menu you can see the power balance macro, it came integrated on the software.

  • Altair Forum User
    Altair Forum User
    Altair Employee
    edited June 2019

    Just to be sure, this is how I'm doing the power balance right now (the numbers are rounded):

     

    Torqueelectromag(mechanicalset rotor) = 27Nm average

    Mechanical_power= 27Nm*1500*2*PI()/60 =4200W **

     

    PowerP(current source) over a period = 2100W rms value * 3 current sources =6300W = P_input

     

    Then I calculate the joule losses on the stranded coil conductors with a sensor. It gives a triphasic sine wave that goes from 0 to 9W . The sum of the 3 waves is about 13W constant.

     

    The same but for the resistors that I put into the circuit: sine wave with 30W peak. the sum of 3 waves is 45W constant.

     

    Bertotti losses = 2,56W

     

    Since you mention I need to multiply by four, the end result should be like:

     

    P_input = 4200W + 13W*4 + 45W*4 + 2,56W *4  = 4442 W

    P_input from current sources = 6300W

     

    diference = 1800W

     

    **Considering mechanical losses=0. Also, the motor is running at 1500rpm.

  • Alejandro Rodríguez
    Alejandro Rodríguez
    Altair Employee
    edited June 2019

    Hello Holo,

    In fact, your problem is that you have made a mistake in the input power calculus. You have assumed that, as far as each current source provides 2100 W (mean value) the three will provide three times this quantity (this is, 6300 W). This is not the case, as far as you have a neutral cable (four cable connexion, taking into account the ground) the sources are consuming some of the energy produced by the others, in other words some of this power is coming back to the grid.

    If you plot the sum of the active power of the three phases in each instant you will obtain the next curve below, with a mean (ignoring the transitory part) of 4235 W. This match much better with your results. Anyway, I advise you to simulate some additional rotor positions in order to assure global accuracy.

    image.png

    So you will have a power equilibrium as follows:

    P_input = 4235 W

    P_mec=4170 W (mean torque equal to 26.55 Nm)

    P_Joule= 13+45=58 W

    P_Berttoti=2.56*4 W=10.24 W

    The rule is: any quantity calculated directly from the regions should be multiplied by the number of portions in your periodicity but the quantity calculated from the circuit are not multiplied since the circuit already takes into account the periodicity in order to obtain the electric variables (i.e., currents and voltages).

    On the other hand, if you want to avoid the problem of the neutral in your circuit I advise you to try this connexion:

    image.png

    As you can see, the third current source is no longer necessary as far as the other two are already imposing the current to the third branch. If, anyway, you want to represent it (e.g., because you are interested in its behaviour) you should do as follows:

    image.png

    The resistance above should be a very high one, since this branch is only there to avoid that small differences between the current sources (i.e., numerical noise) leaves to inconsistent equations . For example a value for 1E7 is fine.

    Hope this helps.

    Best regards,

  • Altair Forum User
    Altair Forum User
    Altair Employee
    edited June 2019

    WOW thanks a lot!!!

    That explains everything. I needed to sum the 3 graphs of power, it makes sense now.

    I still can't believe I have 97% efficiency with this thing lol I'll double check it.

     

    Have a good day.