finish
/clear
/cwd,E:\AnsysWorks\balka_po_snip
/filname,balka_po_snip,on
!*************************************************
! Расчет многопролетной балки:
! определение расчетных усилий
! и подбор сечения
!*************************************************
!------ загрузка сортамента ----------------------
! имена профилей
*dim,I_B_name,char,28
*vread,I_B_name(1),'E:\AnsysWorks\sortament\I_B_name_GOST26020-83',txt,,,,,,2
(A8)
! имена параментров
*dim,I_B_parm,char,14
*vread,I_B_parm(1),'E:\AnsysWorks\sortament\I_B_parm_GOST26020-83',txt,,,,,,2
(A8)
! размерности параметров
*dim,I_B_unit,char,14
*vread,I_B_unit(1),'E:\AnsysWorks\sortament\I_B_unit_GOST26020-83',txt,,,,,,2
(A8)
! значения параметров
*dim,I_B_data,table,28,14
*tread,I_B_data,'E:\AnsysWorks\sortament\I_B_data_GOST26020-83',txt,,2
!------ параметризация ---------------------------
N_pr=3 ! количество пролетов
L_pr=600 ! длина пролета, см
! Начальное сечение балки двут. 30Б1
*do,i,1,28 ! 28 - количество наименований профилей в сортаменте
*if,'30B1',eq,I_B_name(i),then
index1=i
*endif
*enddo
*do,i,1,14 ! 14 - количество параметров в сортаменте
*if,'A',eq,I_B_parm(i),then
index2=i
*endif
*enddo
*do,i,1,14
*if,'Jy',eq,I_B_parm(i),then
index3=i
*endif
*enddo
*do,i,1,14
*if,'h',eq,I_B_parm(i),then
index4=i
*endif
*enddo
Abalk=I_B_data(index1,index2) ! площадь сечени, см2
Jbalk=I_B_data(index1,index3) ! момент инерции, см4
Hbalk=I_B_data(index1,index4)/10 ! высота, см
! характеристики материала
Ebalk=2100000 ! сталь, кг/см2
puas=0.3 ! коэф. Пуассона
Ry=2450 ! расчетное сопростивление стали, кг/см2
gc=0.9 ! коэффициент условий работы
n0=200 ! 1/n0=1/200 - предельный относительный прогиб
! нагрузки
pn=43.8 ! нормативная постоянная нагрузка, кг/см
pr=48.96 ! расчетная постоянная нагрузка, кг/см
vn=27 ! нормативная временная нагрузка, кг/см
vr=32.1 ! расчетная временная нагрузка, кг/см
! доп. параметры
lediv=10 ! кол-во элементов генерируемых на одной линии
!********************************************
! Геометрия равнопролетной балки
!********************************************
! Входные параметры:
! arg1 - количество пролетов
! arg2 - длина пролета
!********************************************
! Выходные данные:
! kpbalka(i) - массив узловых точек,
! где i = номер оси
! lnbalka(j) - массив балок,
! где j = номер пролета
!********************************************
balka,N_pr,L_pr
!------ генерация КЭ -----------------------------
et,1,beam3
r,1,Abalk,Jbalk,Hbalk
mp,ex,1,Ebalk
mp,nuxy,1,puas
lesize,all,,,lediv
lmesh,all
finish
/solu
!------ закрепления и нагрузки -------------------
time,1 ! шаг нагружения 1 - нагрузка по всем пролетам
dk,kpbalka(1),ux,0
ksel,s,,,kpbalka(1),kpbalka(N_pr+1)
dk,all,uy,0
allsel
sfbeam,all,,pres,vn ! распред. нагрузка на элементы, кгс/см
solve
! картинка с вариантом нагружения
/color,u,whit
/color,elem,whit
/triad,off
/pbc,u,,1
/window,1,ltop
eplot
/psf,pres,norm,2,,on
/replot
/window,1,off
/noerase
!
time,2 ! шаг нагружения 2 - нагрузка в крайних пролетах
sfedele,all,all,all
lsel,s,,,lnbalka(1),lnbalka(3),2
esll,s
sfbeam,all,,pres,vn
allsel
solve
/window,2,rtop
/replot
/window,2,off
!
time,3 ! шаг нагружения 3 - нагрузка в среднем пролете
sfedele,all,all,all
lsel,s,,,lnbalka(2)
esll,s
sfbeam,all,,pres,vn
allsel
solve
/window,3,lbot
/replot
/window,3,off
!
time,4 ! шаг нагружения 4 - нагрузка в крайнем и среднем пролетах
sfedele,all,all,all
lsel,s,,,lnbalka(1),lnbalka(2)
esll,s
sfbeam,all,,pres,vn
allsel
solve
/window,4,rbot
/replot
/window,4,off
/image,save,'E:\AnsysWorks\balka_po_snip\LC',bmp
/erase
finish
/post1
!----- комбинации нагружений ---------------------
lcdef,1,1 $ lcfact,1,pr/vn ! вариант нагружения 1 с масштабным коэф. pr/vn
lcdef,2,1 $ lcfact,2,vr/vn
lcdef,3,2 $ lcfact,3,vr/vn
lcdef,4,3 $ lcfact,4,vr/vn
lcdef,5,4 $ lcfact,5,vr/vn
k=0
*do,i,2,5
k=k+1
lcase,1 ! загрузка варианта нагружения в базу данных
lcoper,add,i ! вар. нагруж. 1 + вар. нагруж. i
rappnd,1%i%,4+k ! добавить результат в файл результатов
! считывание усилий в элементую таблицу
set,1%i%
etable,M%k%i,smisc,6 ! моменты, кг*см
etable,M%k%j,smisc,12
smult,M%k%i_tm,M%k%i,,-1/100000,1 ! преобразовать в т*м и перевернуть, т.е.
smult,M%k%j_tm,M%k%j,,-1/100000,1 ! строить эпюру на растянутых волокнах
etable,Q%k%i,smisc,2 ! поперечные силы, кг
etable,Q%k%j,smisc,8
smult,Q%k%i_t,Q%k%i,,-1/1000,1
smult,Q%k%j_t,Q%k%j,,-1/1000,1
*enddo
/gformat,f,12,2 ! округление до сотых
/plopts,info,0
/udoc,1,date,off
/replot,fast
*get,ElemCount,elem,,count
*dim,MQij,,ElemCount,16
k=0
*do,i,1,13,4
k=k+1
*vget,MQij(1,i),elem,1,etab,M%k%i_tm,,2
*vget,MQij(1,i+1),elem,1,etab,M%k%j_tm,,2
*vget,MQij(1,i+2),elem,1,etab,Q%k%i_t,,2
*vget,MQij(1,i+3),elem,1,etab,Q%k%j_t,,2
*enddo
k=0
*do,i,1,13,4
k=k+1
M%k%i_max=MQij(1,i)
M%k%i_min=MQij(1,i)
eM%k%_max=1
eM%k%_min=1
*enddo
k=0
*do,j,1,13,4
k=k+1
*do,i,2,ElemCount
*if,MQij(i,j),gt,M%k%i_max,then
M%k%i_max=MQij(i,j) $ eM%k%_max=i
*endif
*if,MQij(i,j),lt,M%k%i_min,then
M%k%i_min=MQij(i,j) $ eM%k%_min=i
*endif
*enddo
*enddo
contblac,9 ! отображать эпюры черным цветом
/window,1,ltop
/an3d,text,centrx(eM1_max),200,0,%M1i_max%
/an3d,text,centrx(eM1_min),-250,0,%M1i_min%
plls,M1i_tm,M1j_tm ! нарисовать эпюры моментов
/replot
/window,1,off
/noerase
/window,2,rtop
/annot,dele
/an3d,text,centrx(eM2_max),200,0,%M2i_max%
/an3d,text,centrx(eM2_min),-250,0,%M2i_min%
plls,M2i_tm,M2j_tm
/window,2,off
/window,3,lbot
/annot,dele
/an3d,text,centrx(eM3_max),200,0,%M3i_max%
/an3d,text,centrx(eM3_min),-250,0,%M3i_min%
plls,M3i_tm,M3j_tm
/window,3,off
/window,4,rbot
/annot,dele
/an3d,text,centrx(eM4_max),200,0,%M4i_max%
/an3d,text,centrx(eM4_min),-250,0,%M4i_min%
plls,M4i_tm,M4j_tm
/window,4,off
/image,save,'E:\AnsysWorks\balka_po_snip\M',bmp
/annot,dele
! Поиск максимального по абсолютной величине
! изгибающего момента
M_max=MQij(1,1) $ eM_max=1 $ NumLoad=1
*do,i,1,ElemCount
*do,j,1,13,4
*if,MQij(i,j),abgt,M_max,then
M_max=MQij(i,j) $ eM_max=i $ NumLoad=j
*endif
*enddo
*enddo
!------ подбор сечения ---------------------------
W_tr=M_max*1000*100/(Ry*gc) ! требуемый момент сопротивления сечения, см3
*do,i,1,14
*if,'Wy',eq,I_B_parm(i),then
indexWy=i ! номер столбца с характеристиками Wy
*endif
*enddo
*do,i,1,28
*if,W_tr,le,I_B_data(i,indexWy),then
indexPN=i ! номер строки ближайшего значения Wy >= W_tr
*exit
*endif
*enddo
ProfN=I_B_name(indexPN) ! имя профиля |