Гармоническое магнитное поле · Плоскопараллельная
Трёхфазный шинопровод с проводящим экраном
В трёхфазном шинопроводе фазовые токи могут иметь нулевую сумму, но каждый создаёт локальное поле и потери. Проводящий экран меняет поле снаружи, а его собственные вихревые токи добавляют активную мощность. Работа отделяет потери фазных шин от потерь экрана и показывает значение комплексного фазового соглашения.
Три медные шины сечением 6×15 мм расположены на x=−20, 0 и +20 мм. Амплитуды токов по 100 А, фазы 0°, −120° и +120°. Экран — немагнитная оболочка с радиусами 75 и 80 мм и проводимостью 35 МСм/м. Рассматриваются 50, 500 и 2000 Гц. В контрольном варианте оболочка имеет нулевую проводимость и магнитно эквивалентна воздуху.
Самостоятельная учебная модель FEMM 5: от физических соотношений к полевому решению и проверке результата.
Допущения и устройство учебной модели
Все размеры, свойства материалов и условия возбуждения заданы ниже. Численные результаты относятся к опубликованной версии модели FEMM 5.
Физическая и математическая постановка
Почему сумма фаз не устраняет поле
Равенство IA+IB+IC=0 относится к комплексным полным токам. Оно не означает нулевую индукцию во всех точках, поскольку проводники находятся в разных местах. Поле между шинами вызывает дополнительное вытеснение тока, а переменный поток в экране возбуждает замкнутые распределённые токи.
Экрану назначено нулевое значение внешнего полного тока. Это позволяет ему нести вихревые токи с нулевой суммой по сечению, но запрещает независимый заданный продольный ток. Данное условие необходимо отличать от прикладывания нулевого напряжения к отдельному массивному проводнику.
Баланс и инженерная интерпретация
На каждой частоте расчёт повторяется без проводящего экрана и с ним. Внутри каждой семьи используются три сетки. Проверяются комплексная сумма фазных токов и совпадение полной объёмной мощности с мощностью электрических цепей. Отдельный интеграл по группе оболочки даёт её собственные потери.
Сравните не только полную мощность, но и долю, рассеиваемую в экране. Снижение поля вне шинопровода может сопровождаться увеличением суммарного нагрева. Для оценки допустимого тока необходим тепловой расчёт с отдельным охлаждением шин и оболочки. При моделировании реального шинопровода также потребуется уточнить электрическое соединение экрана, расположение заземлений, магнитные крепления и конечные участки.
Исходные данные
Плоскопараллельная
| Параметр | Значение | Единица | Происхождение |
|---|---|---|---|
| Сечение фазной шины | 6 × 15 | мм | Заданный параметр самостоятельной учебной модели |
| Координаты фазных шин | −20; 0; +20 | мм | Заданный параметр самостоятельной учебной модели |
| Амплитуда фазного тока | 100 | А | Заданный параметр самостоятельной учебной модели |
| Фазы | 0; −120; +120 | ° | Заданный параметр самостоятельной учебной модели |
| Радиусы экрана | 75; 80 | мм | Заданный параметр самостоятельной учебной модели |
| Частоты | 50; 500; 2000 | Гц | Заданный параметр самостоятельной учебной модели |
Порядок воспроизведения
- До запуска запишите уравнение контрольной величины и ожидаемое направление изменения при вариации параметра. Согласуйте миллиметры геометрии с единицами СИ в формулах. Создайте отдельную папку и откройте reproduce.py во встроенном редакторе Python FEMM 5. Команды mi_* и mo_* в этой среде уже доступны глобально.
- Выполните программу целиком. Она создаёт новый calculated-NN, строит каждую модель с русскими именами материалов и цепей, сохраняет файл FEM, закрывает его и повторно открывает перед решением. Поэтому проверка относится к точному записанному варианту модели и охватывает сохранение кириллицы.
- Изучите result.json: records хранит численные результаты всех режимов и трёх сеток, checks — названия проверок, измеренные отклонения, допуски и итог. Откройте модель и решение финальной сетки; сопоставьте материалы, направление токов и характерные размеры с таблицей параметров.
- Составьте отчёт с физическим объяснением, таблицей сходимости и независимым контрольным расчётом. Затем измените один параметр и выполните новую серию. Сохраняйте предыдущую серию для сравнения; успешное завершение решателя само по себе не заменяет проверки физического масштаба и сеточной устойчивости.
Скачайте нужные файлы по отдельным ссылкам ниже в одну рабочую папку, затем откройте reproduce.py во встроенном Python FEMM 5 и выполните его. Сохраните имена файлов и структуру подпапок. Условия конкретного запуска и путь новых результатов указаны в комментариях программы.
Программа встроенного Python FEMM 5
"""Собственная учебная лабораторная FEMM 5: встроенный Python.
Команды FEMM доступны глобально, внешний пакет femm не используется.
Каждая сетка сохраняется в отдельный FEM, закрывается, открывается повторно
и решается с русскими именами свойств. Новый запуск создаёт calculated-NN.
Опубликованные модели и квитанции не изменяются. Размеры: мм; результаты: СИ.
"""
import os
import sys
import math
import json
CONFIG = {'I': 100, 'sigma': 57000000.0, 'variants': [50, 500, 2000]}
MODE = 'threephase'
saved=globals().get('__file__','') or (sys.argv[0] if sys.argv else '')
base=os.path.dirname(os.path.abspath(saved)) if saved else os.getcwd()
index=1
while os.path.exists(base+'/calculated-%02d'%index):index+=1
directory=base+'/calculated-%02d'%index
os.mkdir(directory)
records=[]
checks=[]
MU0=4*math.pi*1e-7
def real(x):
if isinstance(x,(list,tuple)):x=x[0]
return complex(x).real
def check(name,value,limit):
checks.append({'name':name,'value':value,'limit':limit,'passed':math.isfinite(value) and value<=limit})
def material(name,mu=1,sigma=0):
mi_addmaterial(name,mu,mu,0,0,sigma/1e6)
def label(x,y,name,mesh,group=1,circuit='<None>',turns=1):
mi_addblocklabel(x,y);mi_selectlabel(x,y)
mi_setblockprop(name,0,mesh,circuit,0,group,turns);mi_clearselected()
def polygon(points,boundary=None,spacing=0):
for x,y in points:mi_addnode(x,y)
for i,(x,y) in enumerate(points):
x2,y2=points[(i+1)%len(points)];mi_addsegment(x,y,x2,y2)
if boundary:
mi_selectsegment((x+x2)/2,(y+y2)/2)
mi_setsegmentprop(boundary,spacing,0,0,0);mi_clearselected()
def rect(x1,y1,x2,y2):polygon([(x1,y1),(x2,y1),(x2,y2),(x1,y2)])
def circle(x,y,r,angle,boundary=None):
mi_addnode(x-r,y);mi_addnode(x+r,y)
mi_addarc(x-r,y,x+r,y,180,angle);mi_addarc(x+r,y,x-r,y,180,angle)
if boundary:
mi_selectarcsegment(x,y-r);mi_selectarcsegment(x,y+r)
mi_setarcsegmentprop(angle,boundary,0,0);mi_clearselected()
def halfcircle(r,angle,boundary=None):
mi_addnode(0,-r);mi_addnode(0,r)
mi_addarc(0,-r,0,r,180,angle)
if boundary:
mi_selectarcsegment(r,0);mi_setarcsegmentprop(angle,boundary,0,0);mi_clearselected()
def start(axis,f,outer,level,uniform=0):
newdocument(0)
mi_probdef(f,'millimeters','axi' if axis else 'planar',1e-10,1000,30,0)
material('Воздух')
# Коэффициенты пространственной функции A вводятся на миллиметр геометрии.
mi_addboundprop('Внешняя граница',0,uniform/2000 if axis else 0,0 if axis else uniform/1000,0,0,0,0,0,0)
if axis:
# Ось r=0, z снизу вверх: исходные координаты библиотек не используются.
halfcircle(outer,4/(2**level),'Внешняя граница')
mi_addsegment(0,-outer,0,outer)
else:circle(0,0,outer,4/(2**level),'Внешняя граница')
def close_axis():
# FEMM автоматически разбивает осевой отрезок вершинами внутренних дуг.
pass
def coil(r,z,width,height,current,turns,mesh,num):
name='Обмотка %d'%num
mi_addcircprop(name,current,1)
rect(r-width/2,z-height/2,r+width/2,z+height/2)
label(r,z,'Медь обмотки',mesh,10+num,name,turns)
return name
def solve(level,variant,tag=''):
name='model-%s-%02d%s.fem'%(str(variant).replace('.','p'),level+1,tag)
mi_saveas(directory+'/'+name);mi_close();opendocument(directory+'/'+name)
mi_analyze(1);mi_loadsolution();mo_smooth('off')
mo_groupselectblock();energy=real(mo_blockintegral(2));loss=real(mo_blockintegral(4));mo_clearblock()
return {'model':name,'level':level+1,'variant':variant,'nodes':mo_numnodes(),'elements':mo_numelements(),'energy_J':energy,'ohmic_loss_W':loss,'saved_reopened_solved':True}
def finish():mo_close();mi_close()
def loop_field(r,z,turns,current,position):
r*=0.001;dz=(position-z)*0.001
return MU0*turns*current*r*r/(2*(r*r+dz*dz)**1.5)
def bessel(n,z):
term=(z/2)**n
total=term
for k in range(1,100):
term*=-(z*z/4)/(k*(k+n));total+=term
if abs(term)<1e-15*max(1,abs(total)):break
return total
def skin_resistance(radius,sigma,f):
a=radius*.001
if f==0:return 1/(math.pi*a*a*sigma)
delta=math.sqrt(2/(2*math.pi*f*MU0*sigma));k=(1-1j)/delta
return (k*bessel(0,k*a)/(2*math.pi*a*sigma*bessel(1,k*a))).real
def circuit_values(name):
i,v,psi=mo_getcircuitproperties(name)
return complex(i),complex(v),complex(psi)
def magnetic_b(x,y):
mo_smooth('on')
values=mo_getpointvalues(x,y)
mo_smooth('off')
return values[1],values[2]
def asinh(x):return math.log(x+math.sqrt(x*x+1))
def energy_identity(row,circuits,frequency):
power=0;fluxenergy=0
for name in circuits:
i,v,psi=circuit_values(name)
power+=(v*i.conjugate()).real/2
fluxenergy+=(psi*i.conjugate()).real/(4 if frequency else 2)
row['circuit_active_power_W']=power
row['circuit_energy_J']=fluxenergy
if frequency:
error=abs(power-row['ohmic_loss_W'])/max(abs(power),1e-20)
row['power_balance_relative']=error
check('Баланс активной мощности '+row['model'],error,0.015)
else:
error=abs(fluxenergy-row['energy_J'])/max(abs(fluxenergy),1e-20)
row['energy_identity_relative']=error
check('Энергия и потокосцепление '+row['model'],error,0.012/(2**(row['level']-1)))
if MODE=='slot':
for variant in CONFIG['variants']:
for enclosed in (0,1):
for level in range(3):
start(False,variant,300,level);material('Медь проводника',1,CONFIG['sigma']);material('Материал паза',1000 if enclosed else 1,0)
polygon([(-20,-25),(20,-25),(20,25),(8,25),(8,-10),(-8,-10),(-8,25),(-20,25)])
label(0,-18,'Материал паза',2/(2**level),5)
names=[]
for num,(x,current) in enumerate(((0,CONFIG['I']),(70,-CONFIG['I'])),1):
name='Цепь проводника %d'%num;mi_addcircprop(name,current,1);names.append(name)
rect(x-3,-6,x+3,6);label(x,0,'Медь проводника',.8/(2**level),10+num,name)
circle(0,0,110,3/(2**level));label(0,70,'Воздух',3/(2**level),3);label(0,220,'Воздух',25/(2**level))
row=solve(level,variant,'-core%d'%enclosed);row['core']=enclosed
energy_identity(row,names,variant);row['R_loop_ohm']=2*row['ohmic_loss_W']/CONFIG['I']**2;row['primary']=row['R_loop_ohm']
dc=2/(CONFIG['sigma']*.006*.012)
check('Нижняя DC-граница '+row['model'],max(0,dc/row['R_loop_ohm']-1),.01)
row['shape']=str(enclosed);records.append(row);finish()
elif MODE=='lamination':
for variant in CONFIG['variants']:
for level in range(3):
f=CONFIG['f'];thickness=variant;width=20;mesh=thickness/5/(2**level)
newdocument(0);mi_probdef(f,'millimeters','planar',1e-11,1000,30,0)
material('Электротехническая пластина',CONFIG['mu'],CONFIG['sigma'])
aa=CONFIG['B']*thickness*.001/2
mi_addboundprop('Потенциал верхней поверхности',aa,0,0,0,0,0,0,0,0)
mi_addboundprop('Потенциал нижней поверхности',-aa,0,0,0,0,0,0,0,0)
# Осевой повторяющийся фрагмент с нулевым потоком через боковые торцы.
rect(-width/2,-thickness/2,width/2,thickness/2)
for y,name in ((thickness/2,'Потенциал верхней поверхности'),(-thickness/2,'Потенциал нижней поверхности')):
mi_selectsegment(0,y);mi_setsegmentprop(name,1,0,0,0);mi_clearselected()
label(0,0,'Электротехническая пластина',mesh,5)
row=solve(level,variant)
volume=width*thickness*1e-6
thin=math.pi**2/6*CONFIG['sigma']*f*f*CONFIG['B']**2*(thickness*.001)**2*volume
row.update({'thin_sheet_loss_W':thin,'volume_m3':volume,'loss_density_W_m3':row['ohmic_loss_W']/volume,'primary':row['ohmic_loss_W']})
check('Тонколистовое аналитическое решение '+row['model'],abs(row['ohmic_loss_W']/thin-1),.025)
records.append(row);finish()
elif MODE=='litz':
for variant in CONFIG['variants']:
for balanced in (0,1):
for level in range(3):
start(False,variant,50,level);material('Медь изолированных жил',1,CONFIG['sigma'])
positions=[(0,0)]+[(math.cos(k*math.pi/3),math.sin(k*math.pi/3)) for k in range(6)]
names=[]
if not balanced:
mi_addcircprop('Общие выводы пучка',CONFIG['I'],0);names.append('Общие выводы пучка')
for num,(x,y) in enumerate(positions):
name='Ток жилы %d'%(num+1) if balanced else 'Общие выводы пучка'
if balanced:mi_addcircprop(name,CONFIG['I']/7,1);names.append(name)
circle(x,y,.4,4/(2**level));label(x,y,'Медь изолированных жил',.1/(2**level),10+num,name)
mi_addcircprop('Обратный провод',-CONFIG['I'],1);names.append('Обратный провод')
circle(10,0,.4*math.sqrt(7),4/(2**level));label(10,0,'Медь изолированных жил',.15/(2**level),30,'Обратный провод')
circle(0,0,15,4/(2**level));label(0,7,'Воздух',.5/(2**level),3);label(0,35,'Воздух',5/(2**level))
row=solve(level,variant,'-balanced%d'%balanced);row['balanced']=balanced
energy_identity(row,names,variant)
currents=[]
for num in range(7):
mo_groupselectblock(10+num);currents.append(complex(mo_blockintegral(7)));mo_clearblock()
check('Суммарный ток семи жил '+row['model'],abs(sum(currents)-CONFIG['I'])/CONFIG['I'],1e-6)
row['strand_current_amplitudes_A']=[abs(i) for i in currents]
row['current_spread_relative']=(max(abs(i) for i in currents)-min(abs(i) for i in currents))/(CONFIG['I']/7)
row['primary']=row['ohmic_loss_W'];row['shape']=str(balanced)
records.append(row);finish()
elif MODE=='threephase':
for variant in CONFIG['variants']:
for shield in (0,1):
for level in range(3):
start(False,variant,350,level);material('Медь фазных шин',1,CONFIG['sigma']);material('Материал экрана',1,35e6 if shield else 0)
circle(0,0,75,3/(2**level));circle(0,0,80,3/(2**level));label(77,0,'Материал экрана',1/(2**level),5)
names=[];current_sum=0j
for num,(x,phase) in enumerate(((-20,0),(0,-120),(20,120))):
name=('A','B','C')[num]+' — фазная шина';current=CONFIG['I']*complex(math.cos(phase*math.pi/180),math.sin(phase*math.pi/180))
mi_addcircprop(name,current,1);names.append(name);current_sum+=current
rect(x-3,-7.5,x+3,7.5);label(x,0,'Медь фазных шин',1/(2**level),10+num,name)
if shield:
mi_addcircprop('Экран без внешнего тока',0,1);mi_selectlabel(77,0);mi_setblockprop('Материал экрана',0,1/(2**level),'Экран без внешнего тока',0,5,1);mi_clearselected();names.append('Экран без внешнего тока')
label(0,40,'Воздух',3/(2**level),3);label(0,200,'Воздух',30/(2**level))
row=solve(level,variant,'-shield%d'%shield);row['shield']=shield;row['shape']=str(shield)
energy_identity(row,names,variant);check('Баланс фазных токов '+row['model'],abs(current_sum)/CONFIG['I'],1e-12)
mo_groupselectblock(5);row['shield_loss_W']=real(mo_blockintegral(4));mo_clearblock()
row['primary']=row['ohmic_loss_W'];records.append(row);finish()
elif MODE=='line-matrix':
for variant in CONFIG['variants']:
for level in range(3):
start(False,0,800,level);material('Немагнитные провода')
names=[]
for num,x in enumerate((-30,-10,10,30)):
name=('A','B','C','N')[num]+' — провод линии'
current=1 if num==variant else (-1 if num==3 else 0)
mi_addcircprop(name,current,1);names.append(name)
circle(x,0,3,3/(2**level));label(x,0,'Немагнитные провода',.5/(2**level),10+num,name)
circle(0,0,100,3/(2**level));label(0,70,'Воздух',3/(2**level),3);label(0,600,'Воздух',50/(2**level))
row=solve(level,variant);energy_identity(row,names,0)
flux=[circuit_values(n)[2].real for n in names]
column=[flux[k]-flux[3] for k in range(3)];row['matrix_column_H_per_m']=column
row['self_L_H_per_m']=column[variant];row['primary']=column[variant]
distance=abs((-30,-10,10)[variant]-30);exact=MU0/math.pi*(math.log(distance/3)+.25)
row['analytic_self_H_per_m']=exact
check('Аналитическая петля с нейтралью '+row['model'],abs(column[variant]/exact-1),.025)
records.append(row);finish()
matrix=[[0,0,0] for _ in range(3)]
for row in records:
if row['level']==3:
for k in range(3):matrix[k][row['variant']]=row['matrix_column_H_per_m'][k]
for i in range(3):
for j in range(3):check('Взаимность матрицы L%d%d'%(i,j),abs(matrix[i][j]-matrix[j][i])/math.sqrt(matrix[i][i]*matrix[j][j]),.002)
for i in range(3):
for j in range(i):check('Положительность главного минора L%d%d'%(i,j),max(0,matrix[i][j]**2/(matrix[i][i]*matrix[j][j])-1),1e-8)
average=[[sum(matrix[(i+k)%3][(j+k)%3] for k in range(3))/3 for j in range(3)] for i in range(3)]
records.append({'measurement':'matrix_and_ideal_transposition','matrix_H_per_m':matrix,'transposed_average_H_per_m':average})
elif MODE=='earth':
delta=math.sqrt(2/(2*math.pi*CONFIG['f']*MU0*CONFIG['sigma']))
for variant in CONFIG['variants']:
for level in range(3):
outer=delta*variant*1000
start(False,CONFIG['f'],outer,level);material('Медь надземного провода',1,57e6);material('Проводящая среда возврата',1,CONFIG['sigma'])
mi_addnode(-outer,0);mi_addnode(outer,0);mi_addsegment(-outer,0,outer,0)
# Две смежные области грунта — один проводник с ОБЩИМ полным током.
# Параллельный тип делит ток по областям вместо повторения -I в каждой.
mi_addcircprop('Надземный провод',CONFIG['I'],1);mi_addcircprop('Возврат через среду',-CONFIG['I'],0)
circle(0,2000,20,4/(2**level));label(0,2000,'Медь надземного провода',2/(2**level),10,'Надземный провод')
circle(0,0,20000,4/(2**level))
label(0,10000,'Воздух',500/(2**level),3)
label(0,-10000,'Проводящая среда возврата',1000/(2**level),5,'Возврат через среду')
label(0,outer*.7,'Воздух',outer/16/(2**level),1)
label(0,-outer*.7,'Проводящая среда возврата',delta*1000/8/(2**level),6,'Возврат через среду')
row=solve(level,variant);energy_identity(row,['Надземный провод','Возврат через среду'],CONFIG['f'])
i,v,p=circuit_values('Надземный провод');ig,vg,pg=circuit_values('Возврат через среду')
zz=(v-vg)/i
row.update({'skin_depth_m':delta,'outer_radius_m':outer*.001,'loop_Zreal_ohm_per_m':zz.real,'loop_Zimag_ohm_per_m':zz.imag,'primary':zz.real})
ground_current=0j
for group in (5,6):
mo_groupselectblock(group);ground_current+=complex(mo_blockintegral(7));mo_clearblock()
row['integrated_ground_current_real_A']=ground_current.real
row['integrated_ground_current_imag_A']=ground_current.imag
check('Интегральный баланс токов провод — среда '+row['model'],abs(i+ground_current)/CONFIG['I'],1e-6)
records.append(row);finish()
finest=[r for r in records if r['level']==3]
check('Удаление внешней границы от6δдо8δ',abs(finest[-1]['primary']/finest[-2]['primary']-1),.03)
elif MODE=='pipe-joint':
for variant in CONFIG['variants']:
for level in range(3):
start(True,CONFIG['f'],600,level);material('Медь обмотки');material('Основной металл трубы',1,6e6);material('Кольцевая зона трубы',1,6e6*variant)
name=coil(48,0,4,20,CONFIG['I'],CONFIG['N'],1/(2**level),1)
for lo,hi,mat,group in ((-40,-4,'Основной металл трубы',5),(-4,4,'Кольцевая зона трубы',6),(4,40,'Основной металл трубы',5)):
rect(35,lo,40,hi);label(37,(lo+hi)/2,mat,.5/(2**level),group)
label(0.5,0,'Воздух',2/(2**level),3);label(300,0,'Воздух',30/(2**level),1)
row=solve(level,variant);energy_identity(row,[name],CONFIG['f'])
for group,key in ((5,'bulk_loss_W'),(6,'joint_loss_W')):
mo_groupselectblock(group);row[key]=real(mo_blockintegral(4));mo_clearblock()
check('Сумма потерь зон трубы '+row['model'],abs((row['bulk_loss_W']+row['joint_loss_W'])/row['ohmic_loss_W']-1),1e-8)
row['joint_loss_density_W_m3']=row['joint_loss_W']/(math.pi*(.04**2-.035**2)*.008)
row['primary']=row['joint_loss_W'];records.append(row);finish()
elif MODE=='particle':
for variant in CONFIG['variants']:
for level in range(3):
start(True,0,400,level);material('Медь обмотки');material('Ферромагнитная частица',CONFIG['mu'])
name=coil(20,0,2,2,CONFIG['I'],CONFIG['N'],.5/(2**level),1)
for radius in (1,3):
mi_addnode(0,variant-radius);mi_addnode(0,variant+radius);mi_addarc(0,variant-radius,0,variant+radius,180,2/(2**level))
label(.5,variant,'Ферромагнитная частица',.2/(2**level),5)
label(2,variant,'Воздух',.2/(2**level),6)
rect(0,-50,60,80);label(40,0,'Воздух',1.5/(2**level),3);label(200,0,'Воздух',25/(2**level))
row=solve(level,variant);energy_identity(row,[name],0)
mo_groupselectblock(5);force=real(mo_blockintegral(19));volume=real(mo_blockintegral(10));mo_clearblock()
r=.02;z=variant*.001;b=MU0*CONFIG['N']*CONFIG['I']*r*r/(2*(r*r+z*z)**1.5);deriv=-3*z/(r*r+z*z)*b
exact=3*(4/3*math.pi*.001**3)*(CONFIG['mu']-1)/(CONFIG['mu']+2)/MU0*b*deriv
row.update({'Fz_N':force,'dipole_force_N':exact,'particle_volume_m3':volume,'primary':force})
check('Дипольная оценка малой сферы '+row['model'],abs(force/exact-1),.04)
check('Сила направлена к катушке '+row['model'],max(0,force),0)
records.append(row);finish()
# Сходимость по трём сеткам проверяется отдельно для каждого физического режима.
groups={}
for row in records:
if 'level' not in row:continue
key=str(row['variant'])+str(row.get('shape',''))+str(row.get('excitation',''))
if key not in groups:groups[key]=[]
groups[key].append(row)
for key,rows in groups.items():
rows.sort(key=lambda row:row['level'])
value=abs(rows[-1]['primary']/rows[-2]['primary']-1)
check('Сходимость измеряемой величины, режим '+key,value,0.025 if MODE in ('slot','lamination','litz','threephase','line-matrix','earth','pipe-joint','particle') else 0.012)
result={'runtime':'FEMM 5; embedded MicroPython','case_id':'three-phase-busbar-shield','records':records,'checks':checks,'passed':all(c['passed'] for c in checks),'scope':'Самостоятельная учебная 2D/осесимметричная модель; численные проверки относятся к указанным параметрам.'}
with open(directory+'/result.json','w') as stream:json.dump(result,stream)
print(json.dumps(result))
assert result['passed']
Картина рассчитанного поля
Окна FEMM 5
Снимки интерфейса FEMM показывают геометрию, настройки и работу с результатами в FEMM 5. Откройте изображение, чтобы рассмотреть подписи и значения в полном размере.
Результаты и численные проверки
Сохранено решений FEMM: 18. Выполнено проверок: 42. Полная точность чисел и условия сравнения доступны в таблицах результатов JSON.
| Частота, Гц | Файл модели | Сохранение, открытие и решение | Мощность потерь экрана, Вт | Проводящий экран: 0 — нет, 1 — есть | Число узлов | Энергия по потокосцеплениям, Дж | Уровень сетки | Средняя джоулева мощность, Вт | Относительная ошибка баланса мощности | Активная мощность цепей, Вт | Число элементов | Основной численный результат | Энергия поля, Дж | Контрольный вариант |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 50 | model-50-01-shield0.fem | Да | 0 | 0 | 11796 | 0,0025364713 | 1 | 2,933917 | 1,6254972 × 10⁻¹² | 2,933917 | 23394 | 2,933917 | 0,0025364713 | 0 |
| 50 | model-50-02-shield0.fem | Да | 0 | 0 | 29460 | 0,0025481133 | 2 | 2,934018 | 34,219785 × 10⁻¹² | 2,934018 | 58733 | 2,934018 | 0,0025481133 | 0 |
| 50 | model-50-03-shield0.fem | Да | 0 | 0 | 102133 | 0,0025531475 | 3 | 2,9340401 | 1,6715931 × 10⁻¹² | 2,9340401 | 203904 | 2,9340401 | 0,0025531475 | 0 |
| 50 | model-50-01-shield1.fem | Да | 0,021580394 | 1 | 11796 | 0,0024520598 | 1 | 2,9551597 | 4,1044849 × 10⁻¹² | 2,9551597 | 23394 | 2,9551597 | 0,0024520598 | 1 |
| 50 | model-50-02-shield1.fem | Да | 0,021554514 | 1 | 29460 | 0,002463734 | 2 | 2,9552342 | 1,7143039 × 10⁻¹² | 2,9552342 | 58733 | 2,9552342 | 0,002463734 | 1 |
| 50 | model-50-03-shield1.fem | Да | 0,021553989 | 1 | 102133 | 0,0024686637 | 3 | 2,9552553 | 1,7184993 × 10⁻¹² | 2,9552553 | 203904 | 2,9552553 | 0,0024686637 | 1 |
| 500 | model-500-01-shield0.fem | Да | 0 | 0 | 11796 | 0,0024731041 | 1 | 3,6619679 | 2,1541305 × 10⁻¹² | 3,6619679 | 23394 | 3,6619679 | 0,0024731041 | 0 |
| 500 | model-500-02-shield0.fem | Да | 0 | 0 | 29460 | 0,0024835479 | 2 | 3,6624034 | 89,870385 × 10⁻¹² | 3,6624034 | 58733 | 3,6624034 | 0,0024835479 | 0 |
| 500 | model-500-03-shield0.fem | Да | 0 | 0 | 102133 | 0,0024882204 | 3 | 3,6612782 | 23,17676 × 10⁻¹² | 3,6612782 | 203904 | 3,6612782 | 0,0024882204 | 0 |
| 500 | model-500-01-shield1.fem | Да | 0,030435051 | 1 | 11796 | 0,0023770839 | 1 | 3,6621993 | 18,077036 × 10⁻¹² | 3,6621993 | 23394 | 3,6621993 | 0,0023770839 | 1 |
| 500 | model-500-02-shield1.fem | Да | 0,030351624 | 1 | 29460 | 0,0023876152 | 2 | 3,6627867 | 817,18144 × 10⁻¹⁵ | 3,6627867 | 58733 | 3,6627867 | 0,0023876152 | 1 |
| 500 | model-500-03-shield1.fem | Да | 0,030330578 | 1 | 102133 | 0,0023922134 | 3 | 3,661706 | 49,876727 × 10⁻¹² | 3,661706 | 203904 | 3,661706 | 0,0023922134 | 1 |
| 2000 | model-2000-01-shield0.fem | Да | 0 | 0 | 11796 | 0,0023163816 | 1 | 6,5771546 | 90,536028 × 10⁻¹² | 6,5771546 | 23394 | 6,5771546 | 0,0023163816 | 0 |
| 2000 | model-2000-02-shield0.fem | Да | 0 | 0 | 29460 | 0,0023277623 | 2 | 6,5194775 | 16,618714 × 10⁻¹² | 6,5194775 | 58733 | 6,5194775 | 0,0023277623 | 0 |
| 2000 | model-2000-03-shield0.fem | Да | 0 | 0 | 102133 | 0,0023329896 | 3 | 6,4896432 | 83,056365 × 10⁻¹² | 6,4896432 | 203904 | 6,4896432 | 0,0023329896 | 0 |
| 2000 | model-2000-01-shield1.fem | Да | 0,062812291 | 1 | 11796 | 0,0022253691 | 1 | 6,5173242 | 71,544481 × 10⁻¹² | 6,5173242 | 23394 | 6,5173242 | 0,0022253691 | 1 |
| 2000 | model-2000-02-shield1.fem | Да | 0,061588224 | 1 | 29460 | 0,0022367295 | 2 | 6,4614843 | 48,824296 × 10⁻¹² | 6,4614843 | 58733 | 6,4614843 | 0,0022367295 | 1 |
| 2000 | model-2000-03-shield1.fem | Да | 0,061282132 | 1 | 102133 | 0,0022418485 | 3 | 6,4325061 | 24,959136 × 10⁻¹² | 6,4325061 | 203904 | 6,4325061 | 0,0022418485 | 1 |
| Критерий | Получено | Допуск или ожидаемое значение | Итог |
|---|---|---|---|
| Баланс активной мощности model-50-01-shield0.fem | 1,625 × 10⁻¹² | 0,015 | Выполнен |
| Баланс фазных токов model-50-01-shield0.fem | 426,3 × 10⁻¹⁸ | 1e-12 | Выполнен |
| Баланс активной мощности model-50-02-shield0.fem | 34,22 × 10⁻¹² | 0,015 | Выполнен |
| Баланс фазных токов model-50-02-shield0.fem | 426,3 × 10⁻¹⁸ | 1e-12 | Выполнен |
| Баланс активной мощности model-50-03-shield0.fem | 1,672 × 10⁻¹² | 0,015 | Выполнен |
| Баланс фазных токов model-50-03-shield0.fem | 426,3 × 10⁻¹⁸ | 1e-12 | Выполнен |
| Баланс активной мощности model-50-01-shield1.fem | 4,104 × 10⁻¹² | 0,015 | Выполнен |
| Баланс фазных токов model-50-01-shield1.fem | 426,3 × 10⁻¹⁸ | 1e-12 | Выполнен |
| Баланс активной мощности model-50-02-shield1.fem | 1,714 × 10⁻¹² | 0,015 | Выполнен |
| Баланс фазных токов model-50-02-shield1.fem | 426,3 × 10⁻¹⁸ | 1e-12 | Выполнен |
| Баланс активной мощности model-50-03-shield1.fem | 1,718 × 10⁻¹² | 0,015 | Выполнен |
| Баланс фазных токов model-50-03-shield1.fem | 426,3 × 10⁻¹⁸ | 1e-12 | Выполнен |
| Баланс активной мощности model-500-01-shield0.fem | 2,154 × 10⁻¹² | 0,015 | Выполнен |
| Баланс фазных токов model-500-01-shield0.fem | 426,3 × 10⁻¹⁸ | 1e-12 | Выполнен |
| Баланс активной мощности model-500-02-shield0.fem | 89,87 × 10⁻¹² | 0,015 | Выполнен |
| Баланс фазных токов model-500-02-shield0.fem | 426,3 × 10⁻¹⁸ | 1e-12 | Выполнен |
| Баланс активной мощности model-500-03-shield0.fem | 23,18 × 10⁻¹² | 0,015 | Выполнен |
| Баланс фазных токов model-500-03-shield0.fem | 426,3 × 10⁻¹⁸ | 1e-12 | Выполнен |
| Баланс активной мощности model-500-01-shield1.fem | 18,08 × 10⁻¹² | 0,015 | Выполнен |
| Баланс фазных токов model-500-01-shield1.fem | 426,3 × 10⁻¹⁸ | 1e-12 | Выполнен |
| Баланс активной мощности model-500-02-shield1.fem | 817,2 × 10⁻¹⁵ | 0,015 | Выполнен |
| Баланс фазных токов model-500-02-shield1.fem | 426,3 × 10⁻¹⁸ | 1e-12 | Выполнен |
| Баланс активной мощности model-500-03-shield1.fem | 49,88 × 10⁻¹² | 0,015 | Выполнен |
| Баланс фазных токов model-500-03-shield1.fem | 426,3 × 10⁻¹⁸ | 1e-12 | Выполнен |
| Баланс активной мощности model-2000-01-shield0.fem | 90,54 × 10⁻¹² | 0,015 | Выполнен |
| Баланс фазных токов model-2000-01-shield0.fem | 426,3 × 10⁻¹⁸ | 1e-12 | Выполнен |
| Баланс активной мощности model-2000-02-shield0.fem | 16,62 × 10⁻¹² | 0,015 | Выполнен |
| Баланс фазных токов model-2000-02-shield0.fem | 426,3 × 10⁻¹⁸ | 1e-12 | Выполнен |
| Баланс активной мощности model-2000-03-shield0.fem | 83,06 × 10⁻¹² | 0,015 | Выполнен |
| Баланс фазных токов model-2000-03-shield0.fem | 426,3 × 10⁻¹⁸ | 1e-12 | Выполнен |
| Баланс активной мощности model-2000-01-shield1.fem | 71,54 × 10⁻¹² | 0,015 | Выполнен |
| Баланс фазных токов model-2000-01-shield1.fem | 426,3 × 10⁻¹⁸ | 1e-12 | Выполнен |
| Баланс активной мощности model-2000-02-shield1.fem | 48,82 × 10⁻¹² | 0,015 | Выполнен |
| Баланс фазных токов model-2000-02-shield1.fem | 426,3 × 10⁻¹⁸ | 1e-12 | Выполнен |
| Баланс активной мощности model-2000-03-shield1.fem | 24,96 × 10⁻¹² | 0,015 | Выполнен |
| Баланс фазных токов model-2000-03-shield1.fem | 426,3 × 10⁻¹⁸ | 1e-12 | Выполнен |
| Сходимость измеряемой величины, режим 500 | 7,548 × 10⁻⁶ | 0,025 | Выполнен |
| Сходимость измеряемой величины, режим 501 | 7,125 × 10⁻⁶ | 0,025 | Выполнен |
| Сходимость измеряемой величины, режим 20000 | 0,004576 | 0,025 | Выполнен |
| Сходимость измеряемой величины, режим 20001 | 0,004485 | 0,025 | Выполнен |
| Сходимость измеряемой величины, режим 5000 | 307,2 × 10⁻⁶ | 0,025 | Выполнен |
| Сходимость измеряемой величины, режим 5001 | 295 × 10⁻⁶ | 0,025 | Выполнен |
Допуски относятся к указанной учебной задаче и способу сравнения. Число показанных цифр не означает такой же физической точности.
Модели, решения и программа
Для нового расчёта сохраните программу, модели и необходимые данные в одну рабочую папку, сохраняя структуру подпапок.
- Файл результатов: README.md6603 байт
- Магнитное решение: model-2000-01-shield0.ans1690174 байт
- Магнитная модель: model-2000-01-shield0.fem3024 байт
- Магнитное решение: model-2000-01-shield1.ans1689907 байт
- Магнитная модель: model-2000-01-shield1.fem3197 байт
- Магнитное решение: model-2000-02-shield0.ans4348953 байт
- Магнитная модель: model-2000-02-shield0.fem3042 байт
- Магнитное решение: model-2000-02-shield1.ans4347911 байт
- Магнитная модель: model-2000-02-shield1.fem3215 байт
- Магнитное решение: model-2000-03-shield0.ans15291307 байт
- Магнитная модель: model-2000-03-shield0.fem3052 байт
- Магнитное решение: model-2000-03-shield1.ans15287985 байт
- Магнитная модель: model-2000-03-shield1.fem3225 байт
- Магнитное решение: model-50-01-shield0.ans1690276 байт
- Магнитная модель: model-50-01-shield0.fem3022 байт
- Магнитное решение: model-50-01-shield1.ans1690830 байт
- Магнитная модель: model-50-01-shield1.fem3195 байт
- Магнитное решение: model-50-02-shield0.ans4349028 байт
- Магнитная модель: model-50-02-shield0.fem3040 байт
- Магнитное решение: model-50-02-shield1.ans4350269 байт
- Магнитная модель: model-50-02-shield1.fem3213 байт
- Магнитное решение: model-50-03-shield0.ans15291677 байт
- Магнитная модель: model-50-03-shield0.fem3050 байт
- Магнитное решение: model-50-03-shield1.ans15295538 байт
- Магнитная модель: model-50-03-shield1.fem3223 байт
- Магнитное решение: model-500-01-shield0.ans1690224 байт
- Магнитная модель: model-500-01-shield0.fem3023 байт
- Магнитное решение: model-500-01-shield1.ans1690226 байт
- Магнитная модель: model-500-01-shield1.fem3196 байт
- Магнитное решение: model-500-02-shield0.ans4349053 байт
- Магнитная модель: model-500-02-shield0.fem3041 байт
- Магнитное решение: model-500-02-shield1.ans4348829 байт
- Магнитная модель: model-500-02-shield1.fem3214 байт
- Магнитное решение: model-500-03-shield0.ans15291226 байт
- Магнитная модель: model-500-03-shield0.fem3051 байт
- Магнитное решение: model-500-03-shield1.ans15290626 байт
- Магнитная модель: model-500-03-shield1.fem3224 байт
- Программа встроенного Python: reproduce.py20090 байт
Границы применимости
- Бесконечно длинная линия с немагнитным проводящим экраном. Соединения оболочки, заземления, конструкционные детали и температура не рассчитываются.
- Проверены точные учебные файлы и численные критерии. Физические измерения и снимки интерфейса FEMM относятся к отдельным проходам.