yjwht 发表于 2025-3-12 19:50:32

蛇形敷设长度系数计算

社区内建筑、水工、机械的比较多,咱们变电这个赛道比较冷门,蛇形敷设长度系数的计算虽然简单,但肯定没人写过这个代码。
电缆路径一般比较长,这个系数虽然不大,但还是不能拍脑袋的。之前是用EXCEL表格来算的。


代码中多段线绘制的command分多次书写,至少我感觉有些稀奇。获取多段线长度的这一句刚从本社区学会。(defun c:y_sinx(/ L1 B1 x y list1 p1 curve tlen)
;绘制正弦函数曲线的蛇形弧
(vl-load-com)
(setq v1(getvar "osmode"))
(setq v2(getvar "cmdecho"))
(setq v3(getvar "blipmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq L1 (getint "\n请输入半个蛇形长度(mm):"))
(setq B1 (getint "\n请输入蛇形弧幅宽(mm):"))
(setq x 0.0) ;设置x初始值
(setq list1 '()) ;设置空列表
(while (<= x 360) ;x坐标从0°~360°
    (setq y (* (sin (* x (/ pi 180))) (* B1 0.5)))
    (setq p1 (list (/ (* x L1) 180) y))                  
    (setq list1 (cons p1 list1)) ;将p1点加入到列表中
    (setq x (1+ x)) ;x加1
) ;结束while
(command "pline") ;绘制多段线
(foreach point list1 ;从列表中逐个获取的点坐标赋值给point
    (command point) ;延续pline命令,将point作为直线的下一个端点添加
) ;结束foreach
(command "") ;结束当前的AutoCAD命令
(setq curve (vlax-ename->vla-object (entlast)))
(setq tlen (vlax-curve-getdistatparam
   curve
   (vlax-curve-getendparam curve)
       )
)
(princ "\n蛇形敷设系数为:")
(princ (/ tlen L1 2))
(setvar "osmode" v1)
(setvar "cmdecho" v2)
(setvar "blipmode" v3)
(princ)
)

yjwht 发表于 2025-3-14 20:00:22

练习二 拾取电缆回路编号 适用变电二次专业
框选拾取电缆回路编号,自动排序、自动复制到系统剪贴板,只需要粘贴到电缆清册的单元格中即可。(defun c:sqbh (/ textList textString ss n i)

(setq textList '())
(setq textString "")
;--------------框选拾取文本的方式-------------------
(setq ss (ssget '((0 . "TEXT"))))
(setq n (sslength ss))
(setq i 0)
(while (< i n)
(setq obj (ssname ss i))
(setq textVal (cdr (assoc 1 (entget obj))))
(setq textList (cons textVal textList))
(setq i (1+ i))
)
(setq textList (acad_strlsort textList))
(foreach itemtextList
    (if(not (= textString ""))
      (setq textString (strcat textString ";" item))
      (setq textString item)
    )
)
(princ textString)
(set-clip-string textString)
(princ)
)
;;;=================================================================*
;;;功能:向系统剪贴板写入文字 ;下面这段代码在本社区复制而来                                     *
(defun set-clip-string (str / html result)
    (and (= (type str) 'str)
   (setq html (vlax-create-object "htmlfile"))
   (setq result (vlax-invoke
      (vlax-get (vlax-get html 'parentwindow)
            'clipboarddata
      )
      'setdata
      "text"
      str
          )
   )
   (vlax-release-object html)
    )
)
;;;=================================================================*

yjwht 发表于 2025-3-16 20:41:13

练习三 接头最小接触面积计算 变电一次

tou_area:dialog{
label="接头最小接触面积计算";
:column{
    :edit_box{
    label="工作电流(A)";
    key="Ieg";
}
:row{
    :text{label="无镀层接头材质";}
    :popup_list{key="pop_mat";edit_width=8;
      list="铜-铜\n铝-铝";}
}
:concatenation{
    :text_part{label="电流密度【";}
    :text{width=6;key="txt_den";}
    :text_part{label="】(A/mm2)";}
}
:concatenation{
    :text_part{label="最小接触面积【";}
    :text{width=6;key="txt_area";}
    :text_part{label="】(mm2)";}
}
spacer_1;
:text{label="注:铜-铝接头按铝-铝接头计算。";}
}
spacer_1;
:row{
    alignment="centered";
    :button{label="计算";key="but_cal";
    width=6;fixed_width=true;
}
cancel_button;
}
}
(defun c:tou_area ()
(setq k1 1.0 k2 0.12)
(dcl_tou_area)
(prin1)
)
(defun dcl_tou_area ()
(setq dcl_id (load_dialog "我的lisp\\tou_area"))
(new_dialog "tou_area" dcl_id)
(action_tile "pop_mat" "(sub_pop $value)")
(action_tile "but_cal" "(area_cal)")
(action_tile "cancel" "(done_dialog 0)")
(setq dd (start_dialog))
)
(defun area_cal()
(ini_1)
(setq i1 (atof (get_tile "Ieg")))
(cond ((< i1 200) (setq k2 0.31))
    ((<= i1 2000)
      (setq k2 (- 0.31 (* (- i1 200) 1.05 0.0001))))
    ((> i1 2000) (setq k2 0.12))
)
(setq k (* k1 k2))
(setq area1 (/ i1 k))
(setq str1 (rtos area1 2 0))
(set_tile "txt_den" (rtos k 2 2))
(set_tile "txt_area" str1)
(princ)
)
(defun sub_pop (vvs)
(ini_1)
(cond ((= vvs "0") (setq k1 1.0))
      ((= vvs "1") (setq k1 0.78))
)
)
(defun ini_1()
(set_tile "txt_den" "")
(set_tile "txt_area" "")
)
(princ)

yjwht 发表于 3 天前

练习4 绘制灯具的配光曲线图

;绘制配光曲线
(defun c:tt()
(setq v1(getvar "osmode"))
(setq v2(getvar "cmdecho"))
(setq v3(getvar "blipmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq d1 (/ pi 36))
(setq list1 '(278 280 290 306 323 339 344 328 288 214
    131 57 23 10 5 2 1 0 0))
(setq list2 '(278 277 269 259 248 234 218 200 181 160
    138 114 90 66 44 28 16 7 1))
(setq p1 '(0 0))
(setq i 0)
(command "pline")
(while (< i (length list2))
    (if (= (nth i list2) 0)
      (setq p2 '(0 0))
      (setq p2 (polar p1 (+ (* pi -0.5) (* d1 i)) (nth i list2)))
    )
    (command p2)
    (setq i (1+ i))
)
(command "")
(command "mirror" (entlast) "" '(0 0) '(0 100) "N")
(setvar "osmode" v1)
(setvar "cmdecho" v2)
(setvar "blipmode" v3)
(princ)
)

lea丶丶 发表于 3 天前

我现在也在做变电一次设计,之前做配电、输电线路

只会艾迪西 发表于 前天 09:18

楼主 同电力设计行业,能群探讨下,变配电这块如何二次开发吗

lea丶丶 发表于 前天 09:26

这是按一次手册做的等高避雷,按50064不知道怎么通过查表来,我看天正是按50064来的。

yjwht 发表于 前天 09:55

lea丶丶 发表于 2025-4-16 17:21
我现在也在做变电一次设计,之前做配电、输电线路

我之前做变电二次,现在做变电一次,另外电缆设计也做。幸会

yjwht 发表于 5 小时前

双针等高,绘制防雷保护范围;根据双针距离D、实际计算出的bx、rx,绘制等高避雷针保护范围
(defun c:EE17();szdg即双针等高
(setq p1 (getpoint "\n指定1#避雷针的位置:"))
(setq p2 (getpoint "\n指定2#避雷针的位置:"))
(setq D1 (distance p1 p2))
(setq p3 (polar p1 (angle p1 p2) (/ D1 2)))
(setq bx (getdist p3 "\n输入双针保护最小宽度bx:"))
(setq rx (getdist p1 "\n输入单针保护半径rx:"))
(setq p4 (polar p3 (+ (angle p3 p1) (/ pi 2)) bx))
(setq p5 (polar p3 (+ (angle p3 p2) (/ pi 2)) bx))
(if (< rx (distance p1 p4))
(progn
    (setq p6 (polar p1 (- (angle p1 p4) (acos (/ rx (distance p1 p4)))) rx))
    (setq p7 (polar p1 (+ (angle p1 p5) (acos (/ rx (distance p1 p5)))) rx))
    (command "pline" p5 p7 "a" p6 "l" p4 "")
    (command "mirror" (ssget "L") "" p5 p4 "n")
)
(princ "\n双针不能联合,请检查输入数据是否有误!")
)
(princ)
)
;定义反余弦函数,返回角度的弧度值
;反余弦函数的定义域为[-1, 1],值域为
(defun acos(x)
(cond
((= x 0.0) (* pi 0.5))
((and (> x 0.0) (<= x 1.0))
    (atan (/ (sqrt (- 1 (* x x))) x)))
((and (>= x -1.0) (< x 0.0))
    (+ (atan (/ (sqrt (- 1 (* x x))) x)) pi)
    )
(T (progn
   (princ "输入值超出反余弦函数的定义域。")
   nil))
)
)

yjwht 发表于 5 小时前

只会艾迪西 发表于 2025-4-17 09:18
楼主 同电力设计行业,能群探讨下,变配电这块如何二次开发吗

我也只是业余爱好lsp,做设计的都很忙,按需学习才是现实的
页: [1]
查看完整版本: 蛇形敷设长度系数计算