Multiphysics - Zugriff auf die Module ME und TH¶
Das Beispiel zeigt die Verwendung von Funktionen aus verschiedenen Modulen. Die exe-Dateien von FEMAG-ME und FEMAG-TH liegen in den Verzeichnissen “C:/FEMAG/FEMAG-ME/” bzw. “C:/FEMAG/FEMAG-TH/”. Für die einwandfreie Funktion muss das Skript aus FEMAG-DC heraus gestartet werden.
Skript-Datei
--[[
Modell eines BLDC-Motor mit Oberflaechenmagneten
Script erzeugen das Modell und führt daran
magnetische, mechanische und thermische
Berechnungen durch.
--]]
---------------------------------------------
-- Allgemeine Einstellungen -----------------
---------------------------------------------
exit_on_error = false -- Verhalten nach Fehler
exit_on_end = false -- Verhalten nach Skriptausfuehrung
verbosity = 2 -- Grad der Bildschirmmeldungen
---------------------------------------------
-- Zugriff auf externe Module ---------------
---------------------------------------------
--point_to_dc("wfemagw64.exe") -- Zugriff auf Funktionen von FEMAG-DC
point_to_me("C:/FEMAG/FEMAG-ME/wmefemag64.exe") -- Zugriff auf Funktionen von FEMAG-ME
point_to_th("C:/FEMAG/FEMAG-TH/wthfemag64.exe") -- Zugriff auf Funktionen von FEMAG-TH
---------------------------------------------
-- Modellerstellung -------------------------
---------------------------------------------
model_name = "test_access"
comment = "BLDC with surface magnets"
new_model_force(model_name,comment)
global_unit('mm') -- Globale Einheit (m; cm; mm)
pickdist(0.001) -- Abstand Schnappen auf Knotenpunkt
cosys('polar')
-- FE-contr-data
-- Version 8.1.x
m.hc_min = 95.000 -- Limit demagnetisa > 0:[%]Hc;<0:[kA/m]
m.con_hdcopy = 1.000 -- Hc-copy:Name:auto:0;intact:1; none:-1
m.b_max = 2.400 -- Max Induction [T] in colorgradation
m.b_min = 0.000 -- Move inside: 0 ; Move outside: > 0
m.calc_fe_loss = 1.000 -- Calc. FE-Loss:0:no; 1:yes; 2:m-output
m.eval_force = 0.000 -- Eval. force density > 0; no <= 0
m.allow_draw = 1.000 -- Draw Graphics :> 0: yes; 0: no
m.fline_dens = 0.000 -- F-Lines: 1: small; 2: medium; 3:thick
m.num_flines = 0.000 -- Number of Field-lines: < 100 > 2
m.name_bch_log = 0.000 -- Name bch-file in Logfile:> 0:yes;0:no
m.st_size_move = 0.000 -- Step size move: r/ph:[degr]; x/y:[mm]
m.num_nonl_it = 300.000 -- Number of nonlinear Iterations < 99
m.perm_mode = 0.000 -- Permeability mode:>0:restore;0:actual
m.error_perm = 0.010 -- Rel. Permeability error < 0.1 [%]
m.allow_demagn = 0.000 -- Allow Demagnetisation:= 1:yes;= 0:no
m.maenergy = 0.000 -- Force from magn energy 1 :yes;= 0:no
m.el_order_ag = 1.000 -- El. order in air gap: lin=1: quadr=2
m.export_scrpt = 0.000 -- Export parameters in script: yes > 0
pre_models("FE-contr-data");
-- Simulation Data:
-- Version 8.1.x
slots = 12.000 -- Number of STATOR SLOTS (>= 1)
slots_gen = 3.000
poles = 4.000 -- Number of Poles 2p (>= 2)
poles_gen = 1.000 -- Number of Poles simulated (>= 1)
das = 50
dis = 29
dar = 28
dir = 12.0
diw = 6.0
airgap = (dis-dar)/2
airgapradius = (dis+dar)/4
length = 30
slot_width = 3
slot_height = 7.5
tooth_width = 5.6
m.tot_num_slots = slots -- Number of STATOR SLOTS (>= 1)
m.num_slots = slots_gen -- Number of STATOR SLOTS (>= 1)
m.num_poles = poles -- Number of Poles 2p (>= 2)
m.npols_gen = poles_gen -- Number of Poles simulated (>= 1)
m.fc_radius = airgapradius
m.arm_length = length
m.skew_angle = 0.0
m.num_par_wdgs = 1
pre_models("basic_modpar");
-- CAD-Parameter Data:
-- STATOR_3
-- Version 8.1.x
m.yoke_diam = das -- Outer diameter yoke DAS [mm]
m.inside_diam = dis -- Inner diameter DIS [mm]
m.slot_height = slot_height -- Total slot height HSL [mm]
m.slot_h1 = 1.000 -- Slot opening height H1S [mm]
m.slot_h2 = 2.500 -- Slot head height H2S [mm]
m.slot_width = slot_width -- Slot width SWI;< 0 groove in Slot[mm]
m.slot_r1 = 1.000 -- Upper Radius R1S [mm]
m.slot_r2 = 1.000 -- Lower Radius R2S [mm]
m.wedge_width1 = 0.000 -- Distance middlepoints B1S [mm]
m.wedge_width2 = 0.000 -- Distance middlepoints B2S [mm]
m.nodedist = 5.000 -- Rel.nod-dist > 0 begin tooth;< 0 slot
m.middle_line = 0.000 -- Layers: 0;vert:1;horiz:2;vert+horiz:3
m.tooth_width = tooth_width -- Tooth width TW (replaces B1; B2) [mm]
m.slot_top_sh = 0.000 -- Top of slot: corner=2; line=1; arc=0
m.airgap = 2./3.*airgap -- Airgap 2/3 height:>0; <0:no ndchn[mm]
m.tot_num_sl = slots -- Total number of teeth on 2pi
m.num_sl_gen = slots_gen -- Number of teeth be generated
m.zeroangl = 0.000 -- Reference angle to x-axis [grad]
m.rlength = 100.000 -- rel. length fe in z-dir [%]
m.mcvkey_yoke = 'dummy'
m.delta_angle_ndchn = 1.0 -- angle nodechain airgap in [degr]
post_models("nodedistance","b")
-- DELTA_KNOTEN = b[1] in [m] distance nodes stator surface
-- DELTA_KNOTEN_ANGLE = b[2] in [degr] angle nodechain airgap
pre_models("STATOR_3");
-- CAD-Parameter Data:
-- Magnet-Sector
-- Version 8.1.x
m.magn_rad = dar/2 -- Radius Magnet airgap side RA [mm]
m.yoke_rad = dir/2 -- Radius iron yoke inside RI [mm]
m.magn_height = 3.000 -- Magnet height HM [mm]
m.magn_width = 70.000 -- Magnet width: > 0: [%]; < 0:[mm]
m.airgap = 2./3.*airgap -- Mesh height (2/3 airgap) [mm]
m.nodedist = 5.000 -- Rel. Node distance > 0.5 ..
m.condshaft_r = diw/2 -- Conduct. Shaft Radius:< yoke_rad [mm]
m.magn_num = 1.000 -- Number Magnet sections: > = 1
m.magn_perm = 11.000 -- Radius Iron RFE between magnets [mm]
m.magn_l = 100.000 -- Magnet Length: < 150 % air gap length
m.magn_ori = 1.000 -- Magnet:par = +/-1;Pol = 2;halb = +/-3
m.magn_type = 2.000 -- MagnType:Ac:1;Acp:2;Rc:3; Rcp:4;AAp:5
m.magn_shape = 0.000 -- Magnet surface radius <= RA HA[mm]
m.br_height = 0.000 -- Iron bridge height: = 0: none BH[mm]
m.br_width = 0.000 -- Iron bridge width : = 0: none BW[mm]
m.num_poles = poles -- Total number of poles on 2pi
m.npols_gen = poles_gen -- Number of poles be generated
m.zeroangl = 0.000 -- Reference angle to x-axis [grad]
m.cond_shaft = 0.000 -- El. Conductivity of shaft [S/m]
m.mcvkey_yoke = 'dummy'
m.mcvkey_mshaft = 'dummy'
pre_models("Magnet-Sector");
-- Simulation Data:
-- connect_models
-- Version 8.1.x
pre_models("connect_models");
-- Simulation Data:
-- Gen_winding
-- Version 8.1.x
m.tot_num_slot = slots -- Total Number of slots Q
m.num_poles = poles -- Number of Poles 2p
m.num_phases = 3.000 -- Number of Phases m <= 500
m.num_layers = 1.000 -- Number of Layers (slot sides)per slot
m.num_wires = 10.000 -- Number of wires per slot side
m.current = 50.000 -- Wdg-Current [A] or flux [Vs/mm];peak
m.coil_span = 3.000 -- Coil span Y >= 1
m.num_slots = slots_gen -- Number of slots in Model (Rot-Mot)
m.mat_type = 1.000 -- Ma-type:1=Rot;21=lin-x;22=lin-y
m.wind_type = 1.000 -- W-typ:1=w&cur;2=w&flux;3=bar&cur
m.win_asym = 1.000 -- asy. slot pitch: 1=sym.; <1=asym.
m.wdg_location = 1.000 -- Windg location:1: stator; 2: rotor
m.curr_inp = 1.000 -- Curent:Const:0; Q-axis:1; D-axis:-1
m.dq_offset = 0.000 -- Offset to D-axis:>=0 Compl;<0 only Re
m.npols_gen = poles_gen -- Number of Poles simulated (>= 1)
m.xcoil_1 = 0.000 -- center coordinate of 1. coil side [mm]
m.ycoil_1 = 0.000 -- center coordinate of 1. coil side [mm]
m.xcoil_2 = 0.000 -- center coordinate of 2. coil side [mm]
m.ycoil_2 = 0.000 -- center coordinate of 2. coil side [mm]
pre_models("Gen_winding");
-- Simulation Data:
-- gen_pocfile
-- Version 8.1.x
pre_models("gen_pocfile");
---------------------------------------------
-- Magnetisches Modell berechnen ------------
---------------------------------------------
calc_field_single();
color_gradation(0,0,tot,Babs,0,2.4,model_name.."_mag.ps")
sleep(1)
---------------------------------------------
-- Mechanisches Modell berechnen ------------
---------------------------------------------
-- Material des Rotors:
x1,y1 = pd2c(dir/2+1,45)
x2,y2 = pd2c(dir/2-1,45)
def_mat_mech(x1,y1,"darkblue",7600.0,210.0e9,0.3,0.0,0.0,0.13e-4)
def_mat_mech(x2,y2,"blue",7600.0,205.0e9,0.3,0.0,0.0,0.128e-4)
def_temp_mech(x1,y1,"darkred", 80)
def_temp_mech(x2,y2,"red", 80)
-- Randbedingungen:
del_bcond( )
def_nccond_dphio(0,0, 0,das/2)
def_nccond_dphio(0,0, das/2,0)
-- Geschwindigkeit:
set_speed(30000)
-- Presssitz:
x1,y1 = pd2c(dir/2,45)
set_overlap(x1, y1, 0.015)
calc_mech_pressfit()
color_displacement(0,0,tot,0,0,0,model_name.."_mech.ps")
sleep(1)
---------------------------------------------
-- Thermisches Modell berechnen -------------
---------------------------------------------
--Eisen
lossdensity_fe = 50000
x,y = pd2c(das/2-1,30)
def_mat_therm(x,y, "darkblue", 7700, 24, 480, 1)
def_loss_density(x,y, "darkblue", lossdensity_fe)
x,y = pd2c(dis/2+1,30)
def_mat_therm(x,y, "darkblue", 7700, 24, 480, 1)
def_loss_density(x,y, "darkblue", lossdensity_fe)
x,y = pd2c(dir/2+1,30)
def_mat_therm(x,y, "darkblue", 7700, 24, 480, 1)
x,y = pd2c(dir/2-1,30)
def_mat_therm(x,y, "darkblue", 7700, 24, 480, 1)
--Magnete
x,y = pd2c(dar/2-1,45)
def_mat_therm(x,y, "darkgreen", 7500, 8, 440, 1)
--Wicklung
lossdensity_cu = 500000
x,y = pd2c(dis/2+slot_height/2,15)
def_mat_therm(x,y, "darkyellow", 3500, 4, 150, 1)
def_loss_density(x,y, "darkyellow", lossdensity_cu)
x,y = pd2c(dis/2+slot_height/2,45)
def_mat_therm(x,y, "darkyellow", 3500, 4, 150, 1)
def_loss_density(x,y, "darkyellow", lossdensity_cu)
x,y = pd2c(dis/2+slot_height/2,75)
def_mat_therm(x,y, "darkyellow", 3500, 4, 150, 1)
def_loss_density(x,y, "darkyellow", lossdensity_cu)
--Isolation
x,y = dis/2+slot_height/2, tooth_width/2+0.5
def_insulation(x,y, "darkred", 0.1, 1430, 0.31, 1100)
-- Luftspalt
x,y = pd2c(airgapradius,45)
def_mat_therm(x,y, "skyblue", 1.2, 0.2, 1005, 1)
x,y = pd2c(airgapradius+airgap/3,45)
def_mat_therm(x,y, "skyblue", 1.2, 0.2, 1005, 1)
x,y = pd2c(airgapradius-airgap/3,45)
def_mat_therm(x,y, "skyblue", 1.2, 0.2, 1005, 1)
x,y = pd2c(dar/2-1,1)
def_mat_therm(x,y, "skyblue", 1.2, 0.2, 1005, 1)
x,y = pd2c(dar/2-1,89)
def_mat_therm(x,y, "skyblue", 1.2, 0.2, 1005, 1)
-- Wärmeübergang
x,y = pd2c(das/2+0.5,45)
def_heat_transfer(x,y, "magenta", 25.0, 20.0)
-- Randbedinungen
del_bcond()
x1,y1 = pd2c(diw/2,0)
x2,y2 = pd2c(das/2+1,0)
x3,y3 = pd2c(das/2+1,90)
x4,y4 = pd2c(diw/2,90)
def_bcond_to(x2,y2, x3,y3)
def_bcond_to(x4,y4, x1,y1)
def_bcond_tp(x1,y1, x2,y2, x3,y3, x4,y4, 4)
calc_therm_field(100, 1.0e-9)
color_gradation_th(0,0,tot,Temp,0,0,model_name.."_therm.ps")
save_model('cont')