AutoLISP在梁上墙载计算中的应用__墨水学术,论文发表,发表论文,
所属栏目:推荐论文发布时间:2011-02-25浏览量:134
副标题#e# 摘要:结构设计人员在进行结构设计时,首先就需要计算梁上墙荷载并录入结构计算软件中,计算过程虽然简单,但比较枯燥,而且不便校对、容易出错。本文针对此问题,给出了用AutoLISP程序进行梁上墙载计算的方法,并给出了源程序。
关键词:AutoLISP 梁上墙载 计算 源程序
引言:
AutoDesk公司从AutoCAD R14开始就加入了对AutoLISP的支持,用来扩展AutoCAD的功能。作为一种高级编程语言,AutoLISP具有与AutoCAD结合紧密、兼容性好、语法简单易学等特点。笔者在从事结构设计的过程中,感觉对一栋建筑物来说,其梁上墙载的计算比较枯燥繁琐,出现错误也难以发现。而目前大多数常用的结构计算软件,如PKPM、广厦等,对于梁上墙载的计算,也还都停留在人工手算后再电脑录入的阶段,效率不高,耗费了设计人员大量的时间。因此设计人员为了简便,往往采取以下二种简化算法:一种是干脆忽略墙上门窗洞口的存在,全部按实墙计算,这种方法会导致计算出来的梁上墙载偏大;第二种是不论门窗洞口的大小,凡是墙上有门窗洞口的,均对按全部实墙计算出来的墙载乘以一个折减系数。不论采用以上那种方法,均仍然脱离不了繁琐枯燥的手算过程,并没有从根本上解决问题。也有设计人员采用Visual BASIC等语言编制相关程序进行计算,但计算结果无法保存,不能输出,导致校对困难。因此笔者在本文中将给出利用AutoLISP程序来快速高效的计算梁上墙载的方法,可有效解决以上各种计算方法遇到的问题,供各位同行参考。
一、原理及公式
梁上墙荷载是一种均布荷载,其计算公式可归纳为:
……(1)
式中:
Q——梁上均布墙线荷载(KN/m);
Pw——墙的面荷载(KN/㎡);
L——墙的总长度(m);
H——墙的总高度(m);
Pc——墙上门窗的面荷载(KN/㎡);
bci、hci分别为墙上各个门窗洞口对应的宽和高,单位均为m。
墙的面荷载Pw、门窗的面荷载Pc均与所采用的材料有关,具体可查《建筑结构荷载规范》(GB50009-2001)。
二、梁上墙载计算的AutoLISP源程序
AutoLISP的语法、规则等相关资料可参见AutoCAD中的帮助文件或相关文献资料,在此不再赘述。下面直接给出计算梁上墙载的AutoLISP源程序,本程序在AutoCAD R14及以上版本均可用。程序中采用了如下假定:
1、假定一面墙上只有1个门或窗。如果墙上门窗多于1个,可合并输入,比如2个1.5m×1.5m的窗可以合并成一个3m×1.5m的窗来输入。
2、假定建筑平面图是按1:100,单位为毫米绘制的。即图中1图形单元=1毫米。
若实际情况不符合以上假定,则需要对源程序进行相应的修改。
;;;----------------------源程序开始----------------------------
;;;梁上墙载计算标注程序
(defun c:lzjs (/ pw_old osm_old lay_old wall_p1
wall_p2 wall_l wall_h wall_p window_b
window_h window_p wall_area window_area
&n#p#副标题#e#bsp; Qw txt_ag tp1 txt_p ltchk
laychk
)
;;;保存系统变量
(setq pw_old (getvar "plinewid"))
(setq osm_old (getvar "osmode"))
(setq lay_old (getvar "clayer"))
;;;相关参数输入部分
(setvar "osmode" 545)
(princ "\n请点取墙的两端点:")
(initget 1)
(setq wall_p1 (getpoint "\n第一点:"))
(initget 1)
(setq wall_p2 (getpoint wall_p1 "\n第二点:"))
(setq wall_l (/ (distance wall_p1 wall_p2) 1000.0))
(if (= *wall_h0* nil)
(setq *wall_h0* 3.0)
)
(if (= *wall_p0* nil)
(setq *wall_p0* 4.0)
)
(if (= *window_p0* nil)
(setq *window_p0* 0.5)
)
(princ
(strcat "\n请输入墙高(单位:m)<" (rtos *wall_h0* 2 3) ">:")
)
(initget 4)
(setq wall_h (getreal))
(if (= wall_h nil)
(setq wall_h *wall_h0*)
(setq *wall_h0* wall_h)
)
(initget 4)
(princ (strcat "\n请输入墙面荷载(单位:KN/㎡)<"
(rtos *wall_p0* 2 3)
">:"
)
)
(setq wall_p (getreal))
(if (= wall_p nil)
(setq wall_p *wall_p0*)
(setq *wall_p0* wall_p)
)
(initget 4)
(princ "\n请输入门窗宽(单位:m)<0.0>:")
(setq window_b (getreal))
(if (= window_b nil)
(setq window_b 0.0)
)
(initget 4)
(princ "\n请输入门窗高(单位:m)<0.0>:")
(setq window_h (getreal))
(if (= window_h nil)
(setq window_h 0.0)
)
(initget 4)
(princ (strcat "\n请输入门窗面荷载(单位:KN/㎡)<"
(rtos *window_p0* 2 3)
">:"
p#副标题#e#nbsp;)
)
(setq window_p (getreal))
(if (= window_p nil)
(setq window_p *window_p0*)
(setq *window_p0* window_p)
)
;;;公式计算部分
(setq wall_area (* wall_l wall_h))
(setq window_area (* window_b window_h))
(setq Qw (/ (+ (* (- wall_area window_area) wall_p)
(* window_area window_p)
)
wall_l
)
)
;;;标注输出部分(梁上墙载的输出结果已四舍五入为整数)
(setq txt_ag (angle wall_p1 wall_p2))
(setq tp1 (polar wall_p1 txt_ag (* wall_l 500.0)))
(setq txt_p (polar tp1 (+ txt_ag (/ pi 2.0)) 100.0))
(setq txt_ag (/ (* 180.0 txt_ag) pi))
(setq ltchk (tblsearch "LTYPE" "continuous"))
(if (not ltchk)
(command "-linetype" "l" "continuous" "acad" "")
)
(setq laychk (tblsearch "LAYER" "梁荷载"))
(if (not laychk)
(command "-layer" "new" "梁荷载" "l" "continuous"
"梁荷载" "c" "red" "梁荷载" ""
)
)
(setvar "clayer" "梁荷载")
(setq Qw_t (strcat (rtos Qw 2 0) "(" (rtos *wall_p0* 2 1) ")"))
(setvar "plinewid" 50.0)
(setvar "osmode" 0)
(command "PLINE" wall_p1 wall_p2 "")
(command "_text" "j" "c" txt_p 300.0 txt_ag Qw_t)
;;;恢复系统变量
(setvar "plinewid" pw_old)
(setvar "osmode" osm_old)
(setvar "clayer" lay_old)
(princ)
)
(princ "\n梁上墙载计算程序已加载,启动命令:LZJS")
;;;----------------------源程序结束----------------------------
使用该程序的方法:将“源程序开始”和“源程序结束”之间的所有内容输入到记事本中,保存为“LZJS.LSP”文件。运行AutoCAD,打开建筑平面图,把“LZJS.LSP”文件加载进来,键入“LZJS”命令就可以启动本程序。
三、本方法的优点
下图为使用本程序计#p#副标题#e#算并标注的某建筑平面图局部,括号外面的数值是计算出来的梁上墙载,括号内的数值是计算该段墙载时所用的墙面荷载值。
可以看到,这种方法具有以下优点:
1、计算出来的梁上墙载准确;
2、标注出来的梁上墙载非常直观,均标注在墙所在位置,校对方便;
3、便于打印和录入。所有梁上墙载计算标注完毕后,可以打印出来,在结构计算软件中对照录入,不易出错;
4、标注中的粗线和数值文字均在“梁荷载”图层上,可以关闭,对建筑平面图没有影响;
5、如果建筑平面图发生改动,可以很快速直观地看到修改的地方,便于结构设计人员做出相应的修改;
6、快速、高效,使用本程序计算和标注梁上墙载,几乎不再需要使用计算器,对一般建筑物,几分钟就可以计算标注完一个建筑平面,可以为结构设计人员节省大量的手算时间。
四、存在问题和改进方向
1、通用性不足,未考虑其他绘图比例和单位的情况,未考虑对弧梁的支持;
2、程序未考虑容错,对输入数据未做检验,因此要求设计人员输入时一定要仔细;
3、命令行输入数据的方法不够直观,如果改成结合DCL对话框的方式来输入相关参数,则更符合使用习惯及发展趋势,也便于对已输入参数进行修改。
4、需要输入的参数偏多,如果能结合天正建筑、斯维尔建筑等三维建筑平面绘制软件,直接提取其墙体的高度、长度、厚度和门窗的宽度、高度参数,则对效率的提高有更大帮助。
5、如果加入相关结构计算软件的接口程序,能将本程序计算出来的结果直接导入到相关结构计算软件中,则连录入的步骤都可以省略,效率更高。
五、结语
以上是AutoLISP在结构设计中的一个简单应用。笔者不揣浅陋,将其写出,目的是为了抛砖引玉,把结构设计中的一些有用的技巧及能够提高效率的方法提出来共享。AutoLISP语言是一种比较简单易学的高级编程语言,文献[2]中对其在结构设计中的应用有更为详尽的叙述。作为结构设计人员,如果能将其熟练掌握并应用到自己的工作中,将能大大缩短设计周期、提高设计效率,从而获得较好的社会经济效益。
参考文献:
[1]、《建筑结构荷载规范》(2006年版)(GB50009-2001),中国建筑工业出版社,2006
[2]、《AutoLISP在建筑结构设计中的应用》,刘立平,人民邮电出版社,2003
期刊 论文 出书
国内外/中英文/全学科 学术服务