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

期刊 论文 出书
国内外/中英文/全学科 学术服务
相关阅读