! Подбор сечений фермы по СНиП II-23-81*
! предполагаются прямоугольные сечения элементов равной ширины
finish
/clear
/cwd,e:\AnsysWorks\ferma_podbor_h
/filname,podbor_sec_fermi,on
Hferm=3 ! высота фермы, м
Lpan=6 ! ширина панели, м
KolPan=3 ! количество панелей
Iferm=0 ! уклон верхнего пояса
Aferm=6 ! шаг ферм, м
pp=1000 ! нагрузка от покрытия (перекрытия), кг/м2
Est=206e6 ! модуль упругости стали, кПа
Ry=300000 ! расч. сопротивл. по пределу текучести, табл. 51* СНиП, кПа
Ru=450000 ! расч. сопротивл. по временному сопротивл., табл. 51* СНиП, кПа
gct=0.95 ! коэф. условий работы для расянутых элементов
gcc=0.95 ! ... для сжатых элементов
b=0.03 ! ширина поперечного сечения элементов, м
mu=0.9 ! коэф. приведенной длины по табл. 11 СНиП
/prep7
!
! 1) создание шарнирной модели фермы
!------ геометрия фермы ------
! Фермы с параллельными поясами или трапециедальные двускатныя (имена макросов):
! ferma1,arg1,arg2,arg3,arg4 - с треуг. решеткой и доп. стойками
! ferma2,arg1,arg2,arg3,arg4 - с раскосной решеткой
! ferma3,arg1,arg2,arg3,arg4 - с треугольной решеткой
! ferma4,arg1,arg2,arg3,arg4 - с перекрестной решеткой
! arg1 - высота фермы
! arg2 - ширина панели
! arg3 - количество панелей
! arg4 - уклон верхнего пояса
ferma1,Hferm,Lpan,KolPan,Iferm
! После выполнения макроса на выходе имеем следующие параметры:
! kpnp(i) - массив номеров узловых точек нижнего пояса
! kpvp(i) - массив номеров узловых точек верхнего пояса
! lnnp(i) - массив номеров стержней нижнего пояса
! lnvp(i) - массив номеров стержней верхнего пояса
! lnra(i) - массив номеров стержней раскосов
! lnst(i) - массив номеров стержней стоек
!------ генерация КЭ-модели ------
et,1,link1
r,1,0.01 ! предварительная площадь сечения всех элементов = 0.01 м2
mp,ex,1,Est
lesize,all,,,1,1,1
lmesh,all
finish
/solu
!------ закрепления ------
*get,npkol,parm,kpnp,dim,1 ! количество узловых точек н.п.
kpdof1=kpnp(1)
kpdof2=kpnp(npkol)
dk,kpdof1,,,,0,ux,uy ! закрепление
dk,kpdof2,,,,0,uy
!------ узловая нагрузка ------
*get,vpkol,parm,kpvp,dim,1 ! количество узловых точек в.п.
*dim,ff,array,vpkol ! массив узловой нагрузки
! нагрузка на крайние узловые точки
ff(1)=pp*Aferm*(kx(kpvp(2))-kx(kpvp(1)))*0.5
fk,kpvp(1),fy,-ff(1)
ff(vpkol)=pp*Aferm*(kx(kpvp(vpkol))-kx(kpvp(vpkol-1)))*0.5
fk,kpvp(vpkol),fy,-ff(vpkol)
! нагрузка на рядовые узловые точки
*do,i,2,(vpkol-1)
ff(i)=pp*Aferm*(kx(kpvp(i+1))-kx(kpvp(i-1)))*0.5
fk,kpvp(i),fy,-ff(i)
*enddo
!------ расчет ------
solve
finish
/post1
!
! 2) определение расчетных усилий
etable,N_kg,smisc,1 ! расчетные усилия в элементах, кг
smult,N_kN,N_kg,,(9.81/1000) ! усилия в кН
*get,elkol,elem,,count ! количество элементов
*dim,Nf,array,elkol ! массив с усилиями (индекс=номер элемента)
*do,i,1,elkol
*get,Nf(i),etab,2,elem,i
*enddo
!
! 3) подбор сечений по СНиП
*dim,h,array,elkol ! принятая высота сечения элемента
*dim,hform,array,elkol ! высота сечения элемента из формул 5-10 СПиП
*dim,hflex,array,elkol ! то же по предельной гибкости из табл. 19*, 20* СНиП
*dim,L,array,elkol ! геом. длина стержня
*dim,Lef,array,elkol ! расчетная длина стержня
*dim,Nu,array,elkol ! несущая способность стержня
*do,i,1,elkol ! начало цикла опередления геом. и расч. длин
*get,L(i),elem,i,leng ! геом. длина эемента
! определение расчетной длины по табл.11 СНиП
! для этого проверяю совпадают ли номера узловых точек раскосов и стоек с
! номерами опорных узловых точек kpdof1 и kpdof2, т.о. определяю опорные
! раскосы и стойки
!------ расч. длины для раскосов ------
*get,kolrask,parm,lnra,dim,1
*do,ii,1,kolrask
*if,i,eq,lnra(ii),then
*get,kp1,line,lnra(ii),kp,1
*get,kp2,line,lnra(ii),kp,2
*if,kp1,eq,kpdof1,or,kp1,eq,kpdof2,then
Lef(i)=L(i)
*elseif,kp2,eq,kpdof1,or,kp2,eq,kpdof2
Lef(i)=L(i)
*else
Lef(i)=mu*L(i)
*endif
*endif
*enddo
!------ расч. длины для стоек ------
*get,kolst,parm,lnst,dim,1
*do,ii,1,kolst
*if,i,eq,lnst(ii),then
*get,kp1,line,lnst(ii),kp,1
*get,kp2,line,lnst(ii),kp,2
*if,kp1,eq,kpdof1,or,kp1,eq,kpdof2,then
Lef(i)=L(i)
*elseif,kp2,eq,kpdof1,or,kp2,eq,kpdof2
Lef(i)=L(i)
*else
Lef(i)=mu*L(i)
*endif
*endif
*enddo
!------ расч. длины для н.п. ------
*get,kolnp,parm,lnnp,dim,1
*do,ii,1,kolnp
*if,i,eq,lnnp(ii),then
Lef(i)=L(i)
*endif
*enddo
!------ расч. длины для в.п. ------
*get,kolvp,parm,lnvp,dim,1
*do,ii,1,kolvp
*if,i,eq,lnvp(ii),then
Lef(i)=L(i)
*endif
*enddo
*enddo ! конец цикла опередления геом. и расч. длин
*do,i,1,elkol ! начало цикла подбора h
*if,Nf(i),ge,0,then
! подбор высоты сечений растянутых элементов, м
*if,(Ru/1.3),gt,Ry,then
hform(i)=Nf(i)/(b*Ru*gct)*1.3 ! из формулы 6
Nu(i)=hform(i)*b*Ru*gct/1.3 ! несущая способность
*else
hform(i)=Nf(i)/(b*Ry*gct) ! из формулы 5
Nu(i)=hform(i)*b*Ry*gct ! несущая способность
*endif
*else
! подбор высоты сечений сжатых элементов
! Задаемся начальным значением h=0.1 мм
! и выполняем перебор с шагом 0.1 мм до h=1 м
hform(i)=0.0001 ! предварительная высота
*do,j,1,10000
flex=Lef(i)/(hform(i)/sqrt(12)) ! гибкость элемента
rflex=flex*sqrt(Ry/Est) ! условная гибкость
! вычисление коэф. продольного изгиба "фи"
*if,rflex,le,2.5,then
phi=1-(0.073-5.53*Ry/Est)*rflex*sqrt(rflex)
*endif
*if,rflex,gt,2.5,and,rflex,LE,4.5,then
phi=1.47-13*Ry/Est-(0.371-27.3*Ry/Est)*rflex+(0.0275-5.53*Ry/Est)*rflex**2
*endif
*if,rflex,gt,4.5,then
phi=332/(rflex**2*(51-rflex))
*endif
! этот блок отсеивает лишние корни
*if,phi,ge,1,then
hform(i)=hform(i)+0.0001
*cycle
*endif
Nu(i)=-1*phi*b*hform(i)*Ry*gcc ! несущая способность на сжатие
*if,Nu(i),le,Nf(i),then
*exit
*endif
hform(i)=hform(i)+0.0001
*enddo
*endif
*enddo ! конец цикла подбора h
*do,i,1,elkol ! начало цикла проверки сечений по предельной гибкости
*if,Nf(i),ge,0,then ! для растянутых элементов и нулевых
hflex(i)=Lef(i)/(400/sqrt(12))
*else ! для сжатых элементов
*do,ii,1,kolnp ! для н.п.
*if,i,eq,lnnp(ii),then
hflex(i)=Lef(i)/(120/sqrt(12))
*endif
*enddo
*do,ii,1,kolvp ! для в.п.
*if,i,eq,lnvp(ii),then
hflex(i)=Lef(i)/(120/sqrt(12))
*endif
*enddo
*do,ii,1,kolrask ! для раскосов
*if,i,eq,lnra(ii),then
*get,kp1,line,lnra(ii),kp,1
*get,kp2,line,lnra(ii),kp,2
*if,kp1,eq,kpdof1,or,kp1,eq,kpdof2,then
hflex(i)=Lef(i)/(120/sqrt(12)) ! опорных
*elseif,kp2,eq,kpdof1,or,kp2,eq,kpdof2
hflex(i)=Lef(i)/(120/sqrt(12))
*else
hflex(i)=Lef(i)/(150/sqrt(12)) ! прочих
*endif
*endif
*enddo
*do,ii,1,kolst ! для стоек
*if,i,eq,lnst(ii),then
*get,kp1,line,lnst(ii),kp,1
*get,kp2,line,lnst(ii),kp,2
*if,kp1,eq,kpdof1,or,kp1,eq,kpdof2,then
hflex(i)=Lef(i)/(120/sqrt(12)) ! опорных
*elseif,kp2,eq,kpdof1,or,kp2,eq,kpdof2
hflex(i)=Lef(i)/(120/sqrt(12))
*else
hflex(i)=Lef(i)/(150/sqrt(12)) ! прочих
*endif
*endif
*enddo
*endif
*if,hflex(i),ge,hform(i),then
h(i)=hflex(i)
*else
h(i)=hform(i)
*endif
*enddo ! конец цикла проверки сечений по предельной гибкости
*do,i,1,elkol ! перерасчет несущей способности по h
*if,Nf(i),ge,0,then ! для растянутых элементов
*if,(Ru/1.3),gt,Ry,then
Nu(i)=h(i)*b*Ru*gct/1.3
*else
Nu(i)=h(i)*b*Ry*gct
*endif
*else ! для сжатых элементов
flex=Lef(i)/(hform(i)/sqrt(12))
rflex=flex*sqrt(Ry/Est)
*if,rflex,le,2.5,then
phi=1-(0.073-5.53*Ry/Est)*rflex*sqrt(rflex)
*endif
*if,rflex,gt,2.5,and,rflex,LE,4.5,then
phi=1.47-13*Ry/Est-(0.371-27.3*Ry/Est)*rflex+(0.0275-5.53*Ry/Est)*rflex**2
*endif
*if,rflex,gt,4.5,then
phi=332/(rflex**2*(51-rflex))
*endif
Nu(i)=-1*phi*b*h(i)*Ry*gcc
*endif
*enddo
! формирование отчета
/output,Nf-h-Nu_step_01mm,out
/com,Расчетная нагрузка от покрытия/перекрытия, кг/м2:
*vwrite,pp
(F8.0)
/com,
/com,Расчетные сопротивления стали по табл. 51 СНиП, кПа.
/com,------------------------------
/com,| Ru | Ru/1.3 | Ry |
/com,------------------------------
*vwrite,Ru,(Ru/1.3),Ry
(' ',F8.0,' ',F8.0,' ',F8.0)
/com,------------------------------
/com,
/com,Результаты расчетов.
/com,============================================================================
/com,| ╧ элем. | Nf, кН | h1, м | h2, м | h, м | Nu, кН | L, м | Lef, м |
/com,============================================================================
*vwrite,sequ,Nf(1),hform(1),hflex(1),h(1),Nu(1),L(1),Lef(1)
(' ',F3.0,' ',F8.2,' ',F8.4,' ',F8.4,' ',F8.4,' ',F8.2,' ',F8.3,' ',F8.3)
/com,============================================================================
/com,Nf - расчетное усилие;
/com,h1 - высота поперечного сечения определенная по формулам 5-10 СНиП;
/com,h2 - то же из условия предельной гибкости по табл. 19* и 20* СНиП;
/com,h - окончательное значение высоты поперечного сечения;
/com,Nu - несущая способность;
/com,L - геометрическая длина элемента;
/com,Lef - расчетная длина элемента.
/com,
/com,Примечание.
/com,Растянутые элементы рассчитываются по формуле 6 СНиП, если Ru/1.3 > Ry.
/output |