燃气管网水力计算的任务是根据燃气的计算流量和允许的压力降来确定管径;在有些情况下,已知管径和压力降,求管道的通过能力。总之,通过水力计算,来确定管道的投资和金属耗量,及保证管网工作的可靠性。
第一节 水力计算的基本公式
一、摩擦阻力 1.基本公式
在通常情况下的一小段时间内,燃气管道中的燃气流动可视为稳定流。将摩擦阻力公式、连续性方程和气体状态方程组成方程组:
dPw2dxd2wAconst (4-1) PZRT为了对摩擦阻力公式进行积分,由连续性方程得:
wA0Q0
由气体状态方程得:
0PTZ0 PT0Z0代入摩擦阻力公式,在管径不变的管段中A4d2,整理得:
2Q0TZPdP250P0dx (4-2)
T0Z0d8假设燃气在管道中是等温流动,则λ和T均为常数,考虑管道压力变化不太大,Z也可
视为常数。通过积分,得高、中压燃气管道的单位长度摩擦阻力损失为:
2Q0P12P22TZ 4-3) 1.6250P0LT0Z0d式中 P1——燃气管道始端的绝对压力(Pa);
P2——燃气管道末端的绝对压力(Pa); P0——标准大气压,P0=101325Pa; λ——燃气管道的摩擦阻力系数;
Q0——燃气管道的计算流量(Nm3/s) d——管道内径(m);
ρ0——标准状态下的燃气密度(kg/Nm3);
T0——标准状态下的绝对温度(273.15K); T——燃气的绝对温度(K);
Z0——标准状态下的气体压缩因子; Z——气体压缩因子;
L——燃气管道的计算长度(m)
22对低压燃气管道,P1P2P1P2P1P2P2Pm
式中 PmP0,代入1P22为管道1、2断面压力的算术平均值,对低压管道,PmP式(4-3),得低压燃气管道的单位长度摩擦阻力损失为:
PQ20TZL0.81d50T 0Z0若采用工程中常用单位,则高、中压燃气管道的单位长度摩擦阻力损失为:P21P22Q20L1.271010TZd50T 0式中 Z——气体压缩因子,当燃气压力小于1.2MPa(表压)时,Z取1。
P、Q0、d、L的单位分别是KPa、Nm3/h、mm、km。 低压燃气管道的单位长度摩擦阻力损失为:
Pl6.26107Q20Td50T 0式中 P、l的单位分别是Pa、m。
根据燃气在管道中不同的流动状态,λ分别采用下列经验及半经验公式。 低压燃气管道:
(1)层流状态(Re2100)
64Re
Pl1.131010Q0Td4T 0(2)临界状态(Re2100~3500)
0.03Re210065Re105
P11.8Q4260710dQ0Tl1.910123Q5010dd5T 0(3)紊流状态(Re3500)
12lgK2.5l3.7dRe 由于是隐函数,工程中常采用适合于一定管材的专用公式:
1)钢管
(4-4)(4-5)(4-6)(4-7)(4-8)(4-9)
K680.11dRe0.25
0.25KPd6.9106192.2lQ0d2)铸铁管
Q02T (4-10) 05T0d1d0.1022365158dQ01Pd6.41065158lQ0d0.284
2Q0T (4-11) 05T0d0.2843)塑料管
公式同式(4-10)。
式中 Re——雷诺数,Re=wd/υ; w——燃气流速(m/s);
υ——标准状态下的燃气运动粘度(m2/s); K——管壁内表面的当量绝对粗糙度(mm),钢管一般取0.1~0.2mm,塑料管一般取0.01mm
次高压和中压燃气管道: 1)钢管
K680.11dRe0.25
0.252Q0T (4-12) 05T0dKP12P22d1.4109192.2LQ0d2)铸铁管
1d0.1022365158dQ01P12P22d1.31095158dLQ00.284
2Q0T (4-13) 05Td00.2843)塑料管
公式同式(4-12)。
高压燃气管道的单位长度摩擦阻力损失,宜按现行的国家标准《输气管道工程设计规范》GB50251有关规定计算。
2.燃气管道水力计算图
在实际的水力计算中,直接用水力计算公式进行计算是一项极为繁重的工作,为简化计算,根据上述水力计算公式绘制成水力计算图,如图4-1~4-4所示。
其编制条件是:燃气温度为0℃,密度ρ0=1kg/Nm3;运动粘度:天然气υ=15×10-6m2/s,人工煤气υ=25×10-6m2/s;钢管的当量粗糙度K=0.17mm。
由于计算图是在燃气特定的参数下绘制的,当实际参数与计算图上的参数不同时,要进行修正。
例如密度和温度的修正:由于单位长度摩擦阻力损失和燃气的密度、温度成正比,因此 低压管道:
PP0T1T0 (4-14) ll01高、中压管道:
P12P12P12P120T1T0 (4-15) LL10[例4-1]已知天然气密度ρ0=0.73kg/Nm3,运动粘度υ=15×10-6m2/s,当流量Q0=1000m3/h、温
度t=15℃时,100m长的低压燃气管道压力降为85Pa,求该管道的管径。取钢管绝对粗糙度K=0.17mm。 [解法1]公式法
由于流量较大,流动假定在紊流状态:
KPd6.9106192.2dlQ0代入数据:
0.25Q02T 05Td085d1510660.176.910192.21001000d解上式得d=259mm,取标准管径d=260mm
校核:
0.2510002288.150.73 5273.15dRewd4Q04100090733 d0.26360015106因Re>3500,管内燃气的流动为紊流状态,计算有效。 [解法2]图表法
密度和温度的修正:
Pl01P85T0273.15l1001.10Pa/m
0T0.73288.15P1.10 Pa/m附近,查得管径d=273×7,即l01查图4-2,由流量Q0=1000m3/h、在d=260mm。
二、局部阻力
在进行燃气管网的水力计算时,干管和配气管网由于局部阻力占总阻力的比例不大,一般按摩擦总阻力的5%~10%进行估算;但对庭院管道和室内管道,由于部件较多,局部阻力占总阻力的比例较大,要逐个进行详细计算,工厂内、站区内的燃气管道也要计算局部阻力。 局部阻力损失公式:
w2P (4-16)
2式中 ζ——管道局部阻力系数,通常由实验测得,有表或图可查。
局部阻力损失常有两种计算方法: 1.查局部阻力损失计算表
实际工程中,产生局部阻力处的流动常处于紊流的粗糙区,它只与管件、部件或设备的形状、尺寸等几何参数及材料(粗糙度)有关,故一般由实验方法确定而制成表格,如表4-1。
局部阻力系数ζ值 表4-1 局部阻力名称 管径相差一级的骤缩变径管 三通直流 三通分流 四通直流 四通分流 90°光滑弯头 ζ 0.35① 1.0② 1.5② 2.0② 3.0② 0.3 局部阻力名称 不同直径(mm)的ζ值 15 2.2 4 11 20 2.1 2 7 25 2.0 2 6 32 1.8 2 6 40 1.6 2 6 d≥300 0.15 ≥50 1.1 2 5 90°直角弯头 旋塞 截止阀 闸板阀 d=50~100 0.5 d=175~200 0.25 注:①——ζ对应于较小管径的管段; ②——ζ对应于燃气流量较小的管段。
如果将式(4-16)改写成:
2 (4-17) PQ0其中
2d24024.45104 d4式中ρ0=0.71kg/Nm2,Q0、d的单位分别是m3/h、mm。可见α值与管径、燃气密度有关。 对应各种管径的α值如表4-2所示。
局部阻力的α值 表4-2
管径(mm) α 管径(mm) α 15 0.879 75 1.41×10-3 20 0.278 100 4.45×10-4 25 0.114 150 8.79×10-5 82 0.0424 200 2.78×10-5 40 0.0174 250 1.14×10-5 50 0.00712 300 5.49×10-6
利用α值和流量Q0可求出局部阻力。
如果燃气密度ρ0≠0.71kg/Nm2、T≠T0,则表中α值要进行修正。
表2.当量长度法
0T0.71273.15
L2w2w2由 P 2d2得 L2dl2 (4-18)
式中 L2——局部阻力的当量长度(m);
l2——相对于ζ=1时的局部阻力当量长度(m),l2=d/λ。
l2与管道内径d和不同流态的λ有关,表4-3给出了相对于ζ=1时各种直径管子的当量长度。
ζ=1时各种直径管子的当量长度 表4-3 管径(mm)
这样,局部阻力就等于当量长度的摩擦阻力。计算含有局部阻力的总阻力时,管段的计算长度L为:
15 20 0.6 25 0.8 32 1.0 38 1.5 50 2.5 75 4.0 100 5.0 150 8.0 200 250 当量长度l2(m) 0.4 12.0 16.0 LL1L2 (4-19)
式中 L1——管段的实际长度(m)
利用燃气管道水力计算图,查出当量长度摩擦阻力损失,再乘以管段的计算长度L,就可求出管段的总阻力(包括摩擦阻力和局部阻力)。
三、附加压头
由于燃气管道内的燃气与室外空气的密度不同,因此当管道的高程有变化时,管道中将产生附加压头ΔP,公式为:
PagH2H1 (4-20)
式中 ρa——当地空气的密度(kg/m3); ρ——燃气的密度(kg/m3); g——重力加速度(m/s2); H1——管道初端的标高(m); H2——管道末端的标高(m)
附加压头有正有负,正值相当于动力,例如天然气、人工煤气(密度小于空气)的向上输运;负值相当于阻力,例如液化石油气(密度大于空气)的向上输运。管道总阻力等于摩擦阻力损失和局部阻力损失减去附加压头。因此在计算室内燃气管道时,附加压头相对较大,不可忽视,特别是高层建筑。
第二节 枝状管网的水力计算
管网基本上可分为枝状管网和环状管网。城市燃气干管一般都设计成环状管网,而自干管接出的配气管及室内燃气管道一般都是枝状管网。本节讲述枝状管网的水力计算。
一、室外枝状管网
室外枝状管网的水力计算,一般按以下步骤进行: 先对管道的节点依次进行编号;根据布置好的管线图和用气情况,确定各管段的计算流量。计算流量按同时工作系数法进行计算,表4-4是居民生活用燃具的同时工作系数k。
居民生活用燃具的同时工作系数k 表4-4 同类型燃具数目N 1 2 3 4 5 6 7 8 9 10 15 20 25 30
然后选取枝状管网的干管(最不利管线),根据给定的允许压力降及由高程差而产生的附加压头来确定管道的单位长度允许压力降;根据管段的计算流量及单位长度允许压力降来选择标准管径;根据所选的标准管径,求出各管段实际阻力损失(摩擦阻力损失和局部阻力损失),进而求得干管总的阻力损失。
在计算支管之前,先检查干管的计算结果,若总阻力损失趋近允许压力降,则认为计算合格;否则要适当变动某些管径,再进行计算,直到符合要求为止。
最后对支管进行水力计算。
[例4-2]如图4-5所示,天然气密度ρ0=0.73kg/Nm3,每户的用具为一个燃气双眼灶和一个快速热水器,额定流量分别是0.7m3/h和1.7m3/h,此管道允许压力降为350Pa,求各管段的管径。
燃气双眼灶 1.00 1.00 0.85 0.75 0.68 0.64 0.60 0.58 0.56 0.54 0.48 0.45 0.43 0.40 燃气双眼灶和快速热水器 1.00 0.56 0.44 0.38 0.35 0.31 0.29 0.27 0.26 0.25 0.22 0.21 0.20 0.19 同类型燃具数目N 40 50 60 70 80 90 100 200 300 400 500 700 1000 2000 燃气双眼灶 0.39 0.38 0.37 0.36 0.35 0.345 0.34 0.31 0.30 0.29 0.28 0.26 0.25 0.24 燃气双眼灶和快速热水器 0.18 0.178 0.176 0.174 0.172 0.171 0.17 0.16 0.15 0.14 0.138 0.134 0.13 0.12
[解]将各管段依次进行节点编号,取管段1-2-3-4-5为干管,总长150m,根据给定的允许压力降350Pa,考虑局部阻力取10%,单位长度摩擦损失为:
P3502.1Pa/m l1501.1以4-5管段为例,额定流量q=2.4m3/h,用户数N=50户,查表4-4得同时工作系数k=0.178,
管段计算流量为:
Q2.4500.17821.36m3/h
为了利用图4-2进行水力计算,要进行密度修正。
Pl2.1P2.88Pa/m l0.73010由Q=21.36m3/h,在PPPa/m附近查得d=50mm,2.882.50Pa/m;l01l01P2.500.731.83Pa/m,该管段长40m,l对应实际密度下的单位长度摩擦阻力损失
摩擦阻力损失P11.834073.2Pa。
干管各管段计算结果列表于表4-5,从表中可见干管总阻力损失为349.36Pa,趋近允许压力降350Pa。如果不适合,则要调整某些管径,再次计算。
支管的水力计算有两种方法:全压法和等压降法,此处采用全压降法。由于支管3-6与干管3-4-5并联,其允许压力降P单位长度摩擦阻力1P34573.296.4169.6Pa,损失
P169.61.70 Pa/m。仿照干管的水力计算,得管径d=80mm,实际摩擦阻力损l100失P1161.0Pa,趋近允许压力降169.6Pa,见表4-5。
如用等压降法进行水力计算,即各支管允许压力降均取相等的数值。两种设计各有利弊:全压降法充分利用允许压力降,减小管径,提高设计经济性,但在管网发生故障时,由于干管压力变化而影响支管压力,特别是支管末端的压力偏低,而等压降法正好相反。
枝状管网水力计算表 表4-5 管段号 4-5 3-4 2-3 1-2 3-6 额定流量用户数同时工计算流量管径d实际ΔP/lq(m3/h) N(户) 作系数k Q(m3/h) (mm) (Pa/m) 2.4 2.4 2.4 50 120 150 0.178 0.168 0.165 21.36 81.36 140.76 189.14 59.40 50 80 100 100 80 1.83 2.40 1.75 2.60 1.61 管段长摩擦阻力损总阻力损度l(m) 失ΔP1(Pa) 失ΔP(Pa) 40 40 40 30 100 73.2 96.4 70.0 78.0 合计 317.6 161.0 317.6×1.1 =349.36
二、室内燃气管道
室内燃气管道是指从引入管到管道末端燃具前的管道,其阻力损失应不大于表4-6的规定。
低压燃气管道允许的阻力损失 表4-6 燃气种类 人工煤气、矿井气、液化石油气混空气 天然气、油田伴生气 液化石油气 从建筑物引入管至管道末端阻力损失(Pa) 单层建筑 150 250 350 多层建筑 250 350 600 注:阻力损失包括燃气计量装置的损失。
在水力计算前,必须根据燃气用具的数量和布置的位置,画出管道平面图和系统图,以后的步骤与室外枝状管网基本相同。室内管道部件较多,局部阻力要一一计算,由于高程变化大,管道的附加压头也要计算在内。
[例4-3]如图4-6所示的某六层居民住宅,天然气密度ρ0=0.73kg/Nm3,每户的用具为一个燃气双眼灶和一个快速热水器,额定流量分别是0.7m3/h和1.7m3/h,此管道允许压力降为250Pa,求各管段的管径。
[解]将各管段进行节点编号,标出各管段的长度;根据各管段的用具数及同时工作系数,计算管段的计算流量;估计室内管道的局部阻力为摩擦阻力的50%,根据允许压力降250Pa和最不利管线长35m,得单位长度平均摩擦损失为:
P2504.76Pa/m L351.5取0-9为计算管段(最不利管线)。以0-1管段为例:热水器额定流量q=1.7m3/h,对一
户而言,同时工作系数k=1.00,计算流量为Q=1.7 m3/h,为了利用图4-2进行水力计算,要进行密度修正:
PL4.76P6.52Pa/m 00.73L01由Q=1.7 m3/h,在P(天然气支管管径不得小于6.52Pa/m附近查得管径d=15mmL0115mm),PP6.500.734.75Pa/m。 6.50Pa/m;对应实际密度下的LL01采用当量长度法计算局部阻力损失:度l2=0.4m,则当量长度L2降P19.4。查表4-3知,d=15mm、ζ=1时的当量长
l23.76m,管段计算长度LL1L27.36m,管段压
PL34.96Pa。 LP2agH1.290.739.81.26.59Pa
高程差(沿流动方向)ΔH=-1.2m,附加压头
该管段实际压力损失PP(与0-1管段并联的1P234.966.5941.50Pa0’-1管段P17.78Pa,故只考虑0-1管段的压力损失),最后计算表明,9-8-7-6-5-4-3-2-1-0管段的总压力损失为121.19Pa。
为得出谁是最不利管线,再计算6-6’-6”管段,得到9-8-7-6-6’-6”管段的总压力损失为107.61Pa,因此系统的计算压力降为121.19Pa,考虑燃气表的压力降在80~100Pa,系统总压力降趋近允许压力降250Pa。如果不合适,则要适当调整个别管段的管径。
全部计算列表于表4-7(其它未计算管段均与所对应的计算管段相同)。 很多城市将燃气表出户安装。由于天然气管道不需要保温,对多层建筑(高层建筑除外),引入管可直接进入户外集中表箱,从各燃气表引出管线,分别从外墙进入各户厨房。这样的管道布置及水力计算就更简单了。
室内燃气管道水力计算表 表4-7 额定用户流量 数 管段号 q N (m3/h) (户) 0-1 (0’-1) 1-2 2-3 3-4 4-5 5-6 6-7 7-8 8-9 1.7 0.7 2.4 2.4 2.4 2.4 2.4 2.4 2.4 2.4 1 1 1 2 3 4 5 6 11 12 同时工作系数 k 1.00 1.00 1.00 0.56 0.44 0.38 0.35 0.31 0.24 0.23 计算管径 流量 ΔP/L d Q (Pa/m) (mm) (m3/h) 1.7 0.7 2.4 2.69 3.17 3.65 4.2 4.46 6.34 6.65 15 15 20 20 20 20 20 25 32 32 4.75 1.68 2.41 2.77 4.38 6.21 7.50 2.85 1.53 1.68 管段长度 L1 (m) 3.6 1.5 3.4 2.9 2.9 2.9 2.3 8 0.5 8.5 l2 (m) 局部阻力系数 Σζ 9.4 12.1 9.3 1 1 1 1.5 5.5 1 9 当量长度 L2 (m) 3.76 4.84 5.58 0.6 0.6 0.6 0.9 4.4 1 9 计算长度 L (m) 7.36 6.34 8.89 3.5 3.5 3.5 3.2 12.4 1.5 17.5 阻力损失 ΔP1 (Pa) 34.96 10.65 21.64 9.71 15.33 21.74 24.00 35.34 2.30 29.40 高程差 ΔH (m) -1.2 -1.3 2.9 2.9 2.9 2.9 2.3 - 0.5 3.2 附加压头 ΔP2 (Pa) -6.59 -7.13 15.92 15.92 15.92 15.92 - 2.74 实际阻力 ΔP (Pa) 41.55 17.78 5.73 局部阻力名称及系数 0.4 0.4 0.6 0.6 0.6 0.6 0.6 0.8 1 1 90°弯头ζ=2×2.2,三通直流ζ=1,旋塞ζ=4 90°弯头ζ=3×2.2,三通分流ζ=1.5,旋塞ζ=4 90°弯头ζ=3×2.1,三通直流ζ=1,旋塞ζ=2 -6.21 三通直流ζ=1 -0.59 三通直流ζ=1 5.82 三通直流ζ=1 12.62 11.38 三通分流ζ=1.5 35.34 90°弯头ζ=2×2,三通分流ζ=1.5 -0.44 三通直流ζ=1 17.56 11.84 90°弯头ζ=5×1.8 90°弯头ζ=3×2.1,三通分流ζ=1.5,旋塞ζ=2 90°弯头ζ=2×2.2,三通直流ζ=1,旋塞ζ=4 9-8-7-6-5-4-3-2-1-0实际阻力损失ΔP=121.19Pa 6-6’ 6’-6” 2.4 1.7 1 1 1.00 1.00 2.4 1.7 20 15 2.41 4.75 1 3.6 0.6 0.4 9.8 9.4 5.88 3.76 6.88 7.36 16.58 34.96 -0.5 -1.2 -2.74 -6.59 19.32 41.55 9-8-7-6-6’-6” 实际阻力损失ΔP=107.61Pa
第三节 环状管网的水力计算
环状管网可保证管网工作的可靠性,但是如果改变环状管网某一管段的管径,不仅引起其它管段流量的重新分配,还改变了管网各点的压力值。其水力计算不但要确定管径,还要进行平差计算,确保在均衡的工况下运行,因此它比枝状管网的水力计算要复杂得多。环状管网分高、中压环状管网和低压环状管网。
一、管段计算流量的确定 1.途泄流量
城市环网是一个输配管网,既有输运作用,又有分配功能,我们把沿管段直接分配给用户的流量叫途泄流量。一般低压管网和某些有分配流量的中压管网都有途泄流量,管网的计算流量中包括途泄流量。将管段的途泄流量设为Q1,由此管段输往后面管段的转输流量设为Q2,很显然,管段的计算流量既不是Q=Q1+Q2,也不是Q=Q2,这是一个变流量管段的水力计算。假定沿管段均匀输出流量,由该管段起点A的流量Q1+Q2,均匀减少到终点B的流量Q2,用一个假想不变得流量Q,使它产生的管段压力降与实际压力降相等,此流量Q就是该变流量管段的计算流量,如图4-7所示。从图上可以看出:
QQ1Q2
式中 α——流量折算系数,它与途泄流量及转输流量的比值以及燃气沿途输出的均匀程度有关。经过分析,当管段上的支管数不少于5~10根,Q1/Q的值在0.3~1.0时,α=0.5~0.6,在实际计算时可取其平均值α=0.55,则:
Q0.55Q1Q2 (4-21)
2.途泄流量的计算
式(4-21)是建立在沿管段均匀输出流量的基础上,对沿管线的大量居民用户、小型商业、工业用户的流量基本上可满足这个条件,对用气大的用户,可把该点作为集中流量的节点。
以图4-8所示的管网为例:
(1)根据该区域的布局,划分小区A、B、C、D、E,并布置配气管段1-2、2-3、1-5……根据气源点的位置,决定或假设各管段燃气的流向;
(2)根据小区的燃气用气量,计算各管段的单位长度途泄流量:
q1iQ1i (4-22) Li式中 q1i——第i小区管道的单位长度途泄流量(m3/h·m);
Q1i——第i小区内各类用户的小时计算流量,即途泄流量(m3/h); Li——第i小区管道总长度(m)。 例如:
q1Aq1B
Q1AL12L23L43L54L15Q1BL12L26
(3)计算各管段的途泄流量
管段的途泄流量等于单位长度途泄流量乘以该管段的长度,如果该管段是两个小区的公共管段,并同时向两侧供气,则单位长度途泄流量是管道两侧单位途泄流量之和,例如:
15Q1q1AL1512Q1q1Aq1BL12
途泄流量求出后,管段的计算流量就可由式(4-21)确定了。
3.节点流量
环网的水力计算有好几种方法,其中有一种方法就是节点流量法,就是把途泄流量转化为节点流量来表示。如果把各节点比作调压站,低压管网就像高、中压管网一样,沿管线不再由流量流出,而只有输送给调压站的恒定流量,把途泄流量转化为节点流量,特别适合计算机的运算。由式(4-21)可知,管道的计算途泄流量为αQ1,也可以看作是流入管段末端节点的途泄流量是αQ1,对整个途泄流量而言,(1-α)Q1应分摊到管段始端,即流出端的节点。取α=0.55,则分摊到流入端节点的途泄流量是0.55 Q1,流出端节点的途泄流量是0.45 Q1,例如在图4-8中,各节点分摊到的途泄流量q1i分别为:
1215q110.45Q10.45Q112q120.55Q10.45Q1230.45Q126
如果取α=0.5,则分摊到流入、流出端节点的途泄流量均为0.5Q1。
对于管段上所接的大型集中用户,可将该点的用气量按离该管段两端节点的距离,反比例地分摊在两端节点上;或者就将此点作为节点,其用气量就是该节点的集中流量q2i。
二、环状管网水力计算的特点
环状管网的水力计算,有手工计算和计算机计算,不论采用何种方法,都要满足两个条件:
(1)每一节点处流量的代数和为零,即流入量等于流出量。
Q0 (4-23)
i(2)对每一个环,如果设按顺时针方向流动的管段压力降定为正值,逆时针方向流动的管段压力降定为负值,则环网的压力降之和为零,即:
P0 (4-24)
i要做到管网的闭合差ε<10%)。
对高、中压管网:
P0,实际上是很困难的,常规定一个精度要求
iε(如
P0.5P22100% (4-25)
式中 δP2——管段的压力平方差。
对低压管网:
P100% (4-26) 0.5P式中ΔP——管段的压力差。
如果未达到精度要求,则必须进行流量的再分配,即采用校正流量来消除环网的闭合差。各环的校正流量ΔQ可近似地由两项表示:
QQ'Q\" (4-27)
式中 ΔQ’——未考虑邻环校正流量对计算环的影响而得到的第一个校正流量;
ΔQ”——考虑邻环校正流量对计算环的影响而得到的第二个校正流量,它是ΔQ’的附加项,使校正流量精确些。 对高、中压管网:
PQ'P2Q22
P2Qnn'QnsQ\" 2PQ式中 Qnn'——邻环校正流量的第一个近似值;
P2P2Q——与该邻环共用管段的Q值。 ns对低压管网:
Q'P
P1.75QPQ'nnQns Q\"PQ式中 PP——与该邻环共用管段的值。 QQns如果校正后闭合差仍未达到精度要求,则需要再次计算校正流量,直到达到精度要求为
止。
三、手工计算环状管网水力计算的示例
在手工计算中,常有表格法和图上作业法,现以一个例题介绍这两种方法。
[例4-4]有一低压环网,如图4-9所示,节点2、6、9处是集中用户处,调压站出口压力为3100Pa,管网中允许压力降为800Pa,天然气对空气的相对密度S为0.55,求管网中各管段的管径,并进行平差计算。
[解]本环网有三个环,分别为Ⅰ、Ⅱ、Ⅲ环,给各节点依次编号,将每个环距调压站最远处的点假定为压力最低点,简称零点,图中的4、7、9点定为零点。由节点处
Q0,从
i零点以及调压站两端开始决定气流方向,如果有的管段气流方向确定不了,可先假设。 1.表格法
(1)计算各管段的途泄流量Q1,方法见途泄流量的计算。为突出后面的平差过程,此题的
途泄流量直接给出,并由Q0.55Q1Q2,得到管段的计算流量,见表4-8。
计算流量 表4-8
管段长度 途泄流量 0.55 Q1 转输流量 环号 管段号 33l(m) Q( (m3/h) Q( 1m/h)2m/h)1-8 Ⅰ 8-9 1-2 2-9 1-6 Ⅱ 6-7 1-8 8-7 1-2 2-3 Ⅲ 3-4 1-6 6-5 5-4 600 350 350 600 450 600 600 450 350 400 450 450 400 350 574 155 341 265 471 308 574 231 341 213 240 471 213 187 316 85 188 146 259 170 316 127 188 117 132 259 117 103 436 50 818 50 758 0 436 0 818 240 0 758 187 0 计算流量 Q (m3/h) 752 135 1006 196 1017 170 752 127 1006 357 132 1017 304 103 说明 节点9的用气量由管段2-9及8-9各供气50m3/h (2)由各环的单位长度平均压力降(局部阻力损失取摩擦阻力损失的10%)及各管段的计算流量来选择管径,并得出管段的压力降。 (a)各环的单位长度平均压力降:
P8000.77Pa/m l9501.1P800Ⅱ环 0.69Pa/m
l10501.1P800Ⅲ环 0.61Pa/m
l12001.1Ⅰ环
(b)选择管径和计算管段的压力降
此处采用低压管网中常用的普尔(Pole)公式,它实际上是将式(4-6)具体化的另一种表达式:
d5PQ0.316K (4-28)
SlK1式中 K——依管径而异,对于一般d≥15cm,K取0.707(d=12.5cm,k取0.67);
S——燃气的相对密度;
K1——考虑局部阻力损失占摩擦阻力损失的10%,K1取1.1。 Q、d、ΔP、l分别取m3/h、cm、Pa、m。
由计算流量Q及单位长度平均压力降ΔP/l代入式(4-28),解出管径,再标准化,得到初选管径,并求得管段的压力降。
以管段1-8为例:Q=752m3/h、将Ⅰ环的ΔP/l=0.77Pa/m,Ⅱ环的ΔP/l=0.69Pa/m取平均,按ΔP/l=0.73Pa/m代入式(4-28),解出d=24.8cm,再标准化,得到初选管径d=25cm,将d=25cm代入式(4-28),求得该管段压降为421Pa,其它计算见表4-9。
低压环网水力计算表 表4-9 管段 环号 管段号 邻长度 环l 号 (m) 600 350 350 600 450 600 600 450 350 400 450 450 400 350 流量 Q (m3/h) 752 135 -1006 -196 1017 170 -752 -127 1006 357 132 -1017 -304 -103 初步计算 管径 d (cm) 25 12.5 25 15 25 15 25 12.5 25 20 15 25 20 15 压力降 ΔP (Pa) 421 253 -440 -368 -18 (-18.1%) 578 277 -421 -288 146 (18.7%) 440 193 125 -578 -140 -59 -19 (-2.5%) 校正流量(m3/h) 第一次校正计算 第二次校正计算 校正流量 ΔP’ 校正后流量 Q1 775 143 -1000 -188 1000 156 -775 -141 1000 359 134 -1000 -302 -101 P Q0.56 1.87 0.44 1.88 4.75 0.57 1.63 0.56 2.27 5.03 0.44 0.54 0.95 0.57 0.46 0.57 3.53 ΔQ’ ΔQ” ΔQ 校正流量 ΔQ1 22.63 8.19 5.78 8.19 -16.85 -14.44 -22.63 -14.44 -5.78 2.41 2.41 16.85 2.41 2.41 P' Q10.58 1.99 0.43 1.80 4.80 0.56 1.49 0.58 2.52 5.15 0.43 0.44 0.96 0.56 0.46 0.56 3.14 ΔQ’ ΔQ” ΔQ 校正流量 ΔQ2 2.31 3.76 3.78 3.76 1.47 1.45 -2.31 1.45 -3.78 -0.02 -0.02 -1.47 -0.02 -0.02 校正后流量 Q2 777 147 -996 -184 1001 157 -777 -139 996 359 134 -1001 -302 -101 实际压力降 ΔP” 450 300 -431 -324 -5 (-0.7%) 560 236 -450 -345 1 (0.1%) 431 195 129 -560 -138 -57 0 (0%) 1-8 Ⅱ 8-9 Ⅰ 2-9 合计 6-7 Ⅱ 8-7 合计 2-3 3-4 Ⅲ 6-5 5-4 合计 1-2 Ⅲ 447 284 -434 -338 -31 (-4.1%) 559 233 -447 -355 -10 (-1.3%) 434 195 129 -559 -138 -57 4 (0.5%) 16.12 -7.93 8.19 3.69 0.07 3.76 1-6 Ⅲ 1-8 Ⅰ -16.59 2.15 -14.44 1.11 0.34 1.45 1-2 Ⅰ 1-6 Ⅱ 3.08 -0.67 2.41 -0.67 0.65 -0.02 (3)平差计算
从表中可见,初步计算中,Ⅰ、Ⅱ环闭合差的精度大于10%,需进行校正。第一次校正后,Ⅱ环的P187447355802Pa,超过允许压力降;虽然3个环闭合差的精度均小于10%,但对于允许压力降大于100Pa的环网,闭合差不能采用精度ε<10%的标准,而应采用闭合差小于10Pa的精度标准。第一次校正后,Ⅰ环的闭合差大于10Pa,因此再进行第二次校正,第二次校正后,各环的闭合差均小于10Pa。 校核从调压站至零点的压力降:
Ⅰ环 P189450300750Pa
P129431324755Pa
Ⅱ环 P167560236796Pa
P187450345795Pa
Ⅲ环 P1234431195129755Pa
P165456013857755Pa
均小于管网允许压力降800Pa,计算结束。 2.图上作业法
采用节点流量法计算: (1)把途泄流量Q1按0.45Q1和0.55Q1分摊到管段的流出端节点和流入端节点,得节点流量。例如第9节点,管段2-9、8-9的途泄流量是265m3/h和155m3/h,考虑第9节点还有100m3/h的集中用气量,该节点的流量为Q9=(265+155)×0.55+100=331m3/h。
节点流量加上转输流量等于管段的计算流量,其中连接零点的管段计算流量是按相邻管段的长度正比例进行分摊,见表4-10,并把这些参数标在草图上(图4-10)。
管段计算流量表 表4-10 管段号 2-9 8-9 8-7 6-7 3-4 5-4 2-3 6-5 1-8 1-2 1-6 节点流量(m3/h) 331(节点9) 331(节点9) 297(节点7) 297(节点7) 235(节点4) 235(节点4) 225(节点3) 201(节点5) 489(节点8) 453(节点2) 544(节点6) 624(节点1) 转输流量(m3/h) 0 0 0 0 0 0 132 103 122+127=249 209+357=566 170+304=474 管段计算流量(m3/h) 331×6/9.5=209 331×3.5/9.5=122 297×4.5/10.5=127 297×6/10.5=170 235×4.5/8=132 235×3.5/8=103 357 304 738 1019 1018
(2)仿照表格法中的方法选择管径及管段的压力降,也把这些参数标在草图上(4-10) (3)平差计算
将各环的压力降ΔP(Pa),按顺时针方向为正,逆时针方向为负,得: Ⅰ环 -869 613 Ⅱ环 -694 856 Ⅲ环 -778 769 各环的闭合差:
Ⅰ环
P100%25634.5% 0.5P741同理:Ⅱ环为20.9%;Ⅲ环为1.2%
Ⅰ、Ⅱ环闭合差超过10%,并超过管网允许压力降,需进行校正。
从图4-10上看,管径设置是合理的,故不必调整管径,只调整流量。如果加大管段1-8的流量将增大Ⅰ环正压及Ⅱ环的负压,有利于闭合差的减小,所以将管段1-8的流量由738m3/h,提高到768m3/h(因为离精度要求很远,可一次加的流量较大),分摊到管段8-9、8-7上;Ⅲ环的闭合精度较好,但管段1-8流量的增加势必减少了管段1-2、1-6的流量,而降低了Ⅲ环的压力降,故适当增加Ⅲ环中独立管段的流量,见草图(图4-10)中的①。
Ⅰ环 -783 719 Ⅱ环 -774 790 Ⅲ环 -767 764
第一次校正后,各环闭合差精度均小于10%,但Ⅰ、Ⅱ环的闭合差均大于10Pa,故再进行第二次校正(微调),见草图(图4-10)中的②。
Ⅰ环 -766 768 Ⅱ环 -768 768 Ⅲ环 -769 769
至此三个环的闭合差最多只有2Pa,调压站至各零点的压力降基本相等(766~769Pa),均在允许压力降(800Pa)范围内,将结果作在正式图上,见图4-11,其中各节点还标出节点流量和节点压力,便于对从该节点接出的支管进行水利计算。
两种方法比较一下。表格法:计算过程清楚,适合初学者;图上作业法:直观,较容易进行流量分配,平差效果比表格法好,但需要有一定的平差经验。
四、计算机在管网水力计算中的应用
手工计算,无论是表格法还是图上作业法,计算量很大,如果环数再多,可能难以计算。随着计算机技术的迅速发展和普及,克服了以往手工计算燃气管网时工作量大的困难。现在应用普通微型计算机,就可以在数十秒内求得有数千节点和管段的大型管网计算结果。 计算机在燃气管网计算中的运用主要是根据燃气管网流动的规律(有压管道、流态、阻力等)和已知条件(节点流量、管网的拓扑关系等),得出管网的流量分配、各管段的燃气流动方向、管径、管段的压降等。燃气管网平差计算的方法有多种,本书计算程序采用解节点方程法。解节点方程法的最大优点是输入数据少,大部分工作均可由计算机程序自动完成。因而使用极为方便,是目前应用最广的一种计算方法。
任何管网图形都是由一些节点和管段连接起来的几何图形,因为燃气流动有一定的方
向,所以是有向图。它可以用数学模式来描述,其目的是表达管网结构的信息。表达管网图形性质的有力工具是矩阵,可以用关联矩阵和节点间关系矩阵来表示管网图形。
节点间关系矩阵的行数等于节点个数,列数等于节点个数,节点间关系矩阵的元素bij
具有如下特点:
ij;nbij0 ij不连接; (4-29)
1ij连接例如图4-13所示管网图的节点间关系矩阵为:
21001000012100000001310100000B10000000001200100003101010141100101301001103100001312
关联矩阵是表示管网中每一节点与所有管段的联系关系,矩阵的行数为管网节点数N,而列数为管段数M。管网图中的管段和节点可以任意编号,编号为i的节点,其信息记在i行,编号为j的管段,其信息记在j列。矩阵中元素aij的表示方法为:
表示管段j与节点i相关联,且流出节点i;1i; aij1 表示管段j与节点i相关联,且流进节点 (4-30)
0表示管段j与节点i不关联。由元素aij构成的一个N×M阶矩阵,称为管网图的完全关联矩阵。由图论可知,作为
环状管网,其本身就是一个约束,因此完全关联矩阵的秩是N-1,在管网计算中要舍去一个节点作为参考点(一般取气源点作为参考点),得到的矩阵称为关联矩阵,记为A(N-1)×M。例如图4-13所示管网图的完全关联矩阵为:
1001000000001100000000000110100000000A00000000000100010001000000000100101100000000000100010100100100110100011
燃气管网的流量分配有多种方法:均匀法、节点累计法、截面法、最短树法或最短路线法、最小平方和法等,本节采用了最小平方和法。该法是将分配后的各管段流量取平方
和,然后求其最小值。事先无需规定管段的水流方向,因此可用于复杂的管网。其特点是使管网起点附近流量较大的管段,流量分配比较均匀。
假设管网的管段数为P,连接在节点i的各管段流量为qij,使目标函数Ω为最小:
2qij (4-31)
1P约束条件为各节点满足节点流量平衡条件,即流向任一节点i的流量须等于流离该节
点的流量。 因目标函数为非线性,约束条件为线性,可用拉格朗日法求解。引入未定乘数λi,得下式:
1P2qiji21qijQi (4-32)
式中Qi——节点i的的流量。
将式(4-32)中qij偏微分,并令其等于零。解线性方程组,因式(4-32)对qij为凸函数,可求得Ω的最小值。由
0,得: qijqijij0 (4-33)
共P个管段方程。将式(4-33)对λi偏微分,并令其等于零。由
ni0,得: iqjIijQi0 (4-34)
式中I——与第i节点相连接的管段集合。
由式(4-33)和(4-34)得:
niijQi (4-35)
jI式中ni——与第i节点相连接的管段数。
式(4-34)中的J-1个方程独立,所以式(4-35)也只有J-1个方程线性独立。 式(4-35)可写成矩阵的方程式:
AQ (4-36)
式中A为节点间关系矩阵,考虑到式(4-35)只有J-1个方程线性独立,所以必须删去一个方程,消除A矩阵的第一行第一列,得到A0矩阵,删除λ、Q列向量的第一个元素,形成λ0、Q0,则有:
A00Q0 (4-37)
采用主元素消去法解方程,可求得λ0及λ1,再由式(4-33)求得初分流量qijji,若qij0。则气流从i节点流向j节点,反之qij0,则气流从j节点流向i节点。
解节点方程法的关键就是如何将以管段流量为自变量的节点方程转换为以节点气压为
自变量的表达式,并线性化。将管段压降方程代入到连续性方程可得:
AGPQ0 (4-38)
式中 G——导纳矩阵,G1; n1SqA——关联矩阵;
S——阻力系数对角矩阵; q——管段流量向量; Q——节点流量向量。
再将式PATP代入到式(4-38)中得:
AGATPQ0 (4-39)
式(4-39)即是解节点方程法的主要公式,而且是一个线性表达式。向量G中含有管段流量q,因此须采用迭代法求解。根据所拟订的初始流量计算出管段的G值,从而由计算机程序解出各节点压力P,由此得出各管段两端节点压力,继而计算各管段流量,并按前后两次迭代所得管段流量的平均值重新计算G值,再次形成式(4-39),重新求解节点压力,如此反复迭代,直到前后两次迭代所求得的同一管段流量之差的最大值小于给定精度为止。
本节采用了Visual LISP语言编制程序完成管网的水力计算。LISP是List Processor(表处理程序)的缩写,主要用于人工智能(AI)领域。借助AutoLISP,用户可以用适合编写图形应用程序的强大的高级语言来编写宏程序和函数,并开发各种软件包。Visual LISP既是LISP编辑器又是编译器,它提供一套简单的可视环境去开发和维护原有的AutoLISP源程序。
程序由以下几个部分组成:
1.管网拓扑关系的自动搜索。利用Visual LISP强大的图形交互能力和访问底端数据库的能力,自动生成关联矩阵,同时自动判别出节点和管段之间的关系,进而生成节点间关系矩阵。根据节点和管段的数据结构,对管网中的节点和管段依次自动编号,方便后面的水力计算。
2.管网原始数据的输入。通过调用外部文本获得各管段的管长和各节点的节点流量。 3.管段流量的初分和管径的选择。管段流量的初分采用了最小平方和法,管径的选择和手工计算时管径的确定方法相同。
4.管网的水力计算。管网的水力计算采用了解节点方程法,其过程如图4-12所示。 5.气流方向和水力计算结果的标注。程序利用Visual LISP图形处理的能力,根据计算结果分析出气流的方向,采用箭头标注出气流的方向;同时根据计算出的节点气压、管段流量等数据自动标注在管网图形中。使得计算结果更加直观化。
平差程序的流程图如下所示:
[例4-5]如图4-13所示的中压管网,A、B两点为气源点,其出口压力为0.5×105Pa,管网的最低压力不低于0.2×105Pa,燃气密度为0.73kg/m3。管网中各调压器的流量列于图中,求各管段燃气流量及各节点压力。
[解]这是一个中压环网的例子,水力计算要采用压力平方差公式(采用绝对压强)。根据图4-13,先计算出节点流量,然后只要输入管长、节点流量和控制压降即可。计算结果如下:
节点数据 表4-11 节点号 1 2 3 4 5 6 7 8 9
节点流量(m3/h) 8100 2000 2500 2000 2000 3000 2000 2500 7900 节点压力(105Pa) 1.500 1.438 1.267 1.230 1.393 1.293 1.364 1.365 1.462 管段数据 表4-12
管段编号 1 2 3 4 5 6 7 8 9 10 11 12 管段流量(m3/h) 4334.4 2334.4 117.4 3765.6 283.0 1882.6 1659.1 479.8 106.5 1144.1 4362.4 3537.6 管段直径(mm) 350 250 100 300 150 225 225 150 100 225 350 300 管段压力平方差(1010Pa) 0.2816 0.461 0.0937 0.3091 0.0653 0.3465 0.2692 0.1875 0.0771 0.1921 0.2775 0.2728
计算结果图如下所示:
1.438200025.-3--0-2569.311268013--2502334.3956--0.46121.267250032--150283.0265---0.065322--100117.4221--0.0937331.23200042--2251882.5779---0.346541.5-8100343413765.62--304400--0.30913641.393200055106.51.36525002--2251659.0815--0.2691771.293300062--150479.7968---0.1874981.3642000图例:72--150479.7968---0.187491.36420008522--0.-3-82-4.1441111092111.462-790035--0-3-47-7.326431774510.2702--100.07706229--982--3003537.6253--0.2728312管长(km)管径(mm)管段编号103管段流量(m /s)管段压降平方差(10 pa)5节点气压(10 pa)3节点流量(m /s)9节点号图4-14
程序如下所示: (vl-load-com) (defun gj (par_q) (setq ll (cond ((and (< par_q 338.75) (> par_q 40.70)) 100) ((and (< par_q 40.70) (> par_q 9.05)) 150) ((and (< par_q 9.05) (> par_q 4.89)) 200) ((and (< par_q 4.89) (> par_q 2.82)) 225) ((and (< par_q 2.82) (> par_q 1.09)) 250) ((and (< par_q 1.09) (> par_q 0.486)) 300) ((and (< par_q 0.486) (> par_q 0.242)) 350) ((and (< par_q 0.242) (> par_q 0.131)) 400) ((and (< par_q 0.131) (> par_q 0.0753)) 450) ((and (< par_q 0.0753) (> par_q 0.0291)) 500) ((and (< par_q 0.0291) (> par_q 0.0130)) 600) ((and (< par_q 0.0130) (> par_q 0.00646)) 700) ((and (< par_q 0.00646) (> par_q 0.00349)) 800) ) ) )
(setq compd '(100 150 200 225 250 300 350 400 450 500 600 700 800 900 1000 1200))
(setq comparfa '(338.75 40.70 9.05 4.89 2.82 1.09 0.486 0.242 0.131 0.0753 0.0291 0.0130 0.00646 0.00349 0.00201 0.0007764)) (defun zh (p)
(setq m1 (rtos (car p) 2 2)) (setq m2 (rtos (cadr p) 2 2)) (setq m3 (rtos (caddr p) 2 2)) (strcat m1 \)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;把坐标转化为字符串的形式 /////////////////////////////////////////////////////////////////////////// (defun zh1 (p)
(setq m1 (rtos (car p) 2 2)) (setq m2 (rtos (cadr p) 2 2)) (setq m3 (rtos (caddr p) 2 2)) (strcat m1 \" \" m2 \" \" m3) )
/////////////////////////////////////////////////////////////////////////// (defun c:yww8 ()
(setq totalpipe (ssget \"x\" (list (cons 0 \"line\")))) //////////totalpipe所有管线的集合 (setq lenofpipe (sslength totalpipe)) //////////////////////lenofpipe管段数 (setq totalpoint '())
(setq n1 0)
(repeat lenofpipe
(setq pipe (ssname totalpipe n1))
(setq p1 (cdr (assoc 10 (entget pipe)))) (if (= (vl-position p1 totalpoint) nil) (setq totalpoint (cons p1 totalpoint)) )
(setq p2 (cdr (assoc 11 (entget pipe)))) (if (= (vl-position p2 totalpoint) nil) (setq totalpoint (cons p2 totalpoint)) )
(setq n1 (1+ n1)) )
(setq lenofpoint (length totalpoint)) (setq num1 (- lenofpoint 1)) (setq n2 0) (setq list2 '()) (repeat lenofpoint
(setq p3 (nth n2 totalpoint)) (setq str1 (zh p3)) (setq n2 (1+ n2))
(setq list2 (cons (cons n2 p3) list2)) )
(setq dfn1 (open \"f:/程序设计/管网计算/wen3.txt\" \"w\")) (setq n3 0)
(setq pipe_point '()) (repeat lenofpipe (setq ass0 '()) (setq n4 0) (setq n5 0)
(setq s1 (ssname totalpipe n3)) (setq sn3 (rtos (+ 1 n3) 2 0))
(setq p1 (cdr (assoc 10 (entget s1)))) (repeat lenofpoint
(setq plist2 (nth n4 list2))
(if (and (= (nth 1 plist2) (nth 0 p1)) (= (nth 2 plist2) (nth 1 p1)) (= (nth 3 plist2) (nth 2 p1)) ) (progn (setq sp1 (rtos (nth 0 plist2) 2 0)) (setq ass2 (nth 0 plist2)) ) )
(setq n4 (1+ n4))
)
(setq p2 (cdr (assoc 11 (entget s1)))) (repeat lenofpoint
(setq plist2 (nth n5 list2))
(if (and (= (nth 1 plist2) (nth 0 p2)) (= (nth 2 plist2) (nth 1 p2)) (= (nth 3 plist2) (nth 2 p2)) ) (progn (setq sp2 (rtos (nth 0 plist2) 2 0)) (setq ass3 (nth 0 plist2)) ) )
(setq n5 (1+ n5)) )
(setq str2 (strcat sn3 \" \" sp1 \" \" sp2)) (setq ass0 (cons ass3 ass0)) (setq ass0 (cons ass2 ass0)) (setq ass0 (cons n3 ass0))
(setq pipe_point (cons ass0 pipe_point)) (write-line str2 dfn1) (setq n3 (1+ n3)) )
(setq np_point '()) (setq n16 lenofpipe) (repeat lenofpipe
(setq n17 (- lenofpipe n16))
(setq ass15 (nth 1 (nth n17 pipe_point))) (setq ass16 (nth 2 (nth n17 pipe_point))) (setq ass14 '())
(setq ass14 (cons ass16 ass14)) (setq ass14 (cons ass15 ass14)) (setq ass14 (cons n16 ass14))
(setq np_point (cons ass14 np_point)) (setq n16 (1- n16)) )
(setq n1 lenofpoint) (setq point_pipe '()) (repeat lenofpoint
(setq n2 (- lenofpipe 1)) (setq ass2 '()) (repeat lenofpipe
(setq ass1 (nth n2 np_point))
(if (or (= (nth 1 ass1) n1) (= (nth 2 ass1) n1)) (progn (setq ass3 (nth 0 ass1))
(setq ass2 (cons ass3 ass2)) ) )
(setq n2 (- n2 1)) )
(setq ass2 (cons n1 ass2))
(setq point_pipe (cons ass2 point_pipe)) (setq n1 (- n1 1)) )
(setq join (vlax-make-safearray vlax-vbdouble (cons 1 lenofpoint) (cons 1 lenofpipe) ) )
(setq n3 0) (setq n5 1)
(repeat lenofpoint
(setq ass4 (nth n3 point_pipe)) (setq len3 (- (length ass4) 1)) (setq n4 1) (repeat len3
(setq ass5 (nth n4 ass4))
(setq ass6 (nth (- ass5 1) np_point)) (setq ass7 (nth 1 ass6)) (if (= ass7 n5) (vlax-safearray-put-element join n5 ass5 1) (vlax-safearray-put-element join n5 ass5 -1) )
(setq n4 (1+ n4)) )
(setq n5 (1+ n5)) (setq n3 (1+ n3)) )
(setq zjoin (vlax-make-safearray vlax-vbdouble (cons 1 lenofpipe) (cons 1 lenofpoint) ) )
(setq n8 1)
(repeat lenofpipe (setq n9 1)
(repeat lenofpoint
(setq ass12 (vlax-safearray-get-element join n9 n8)) (vlax-safearray-put-element zjoin n8 n9 ass12) (setq n9 (1+ n9)) )
(setq n8 (1+ n8)) )
(setq longofpipe (vlax-make-safearray vlax-vbdouble (cons 1 lenofpipe)) )////////////////////////////////////////////////定义管段长度数组 (setq q_node1 (vlax-make-safearray vlax-vbdouble (cons 1 lenofpoint)) )////////////////////////////////////////////////定义节点流量 (setq q_node (vlax-make-safearray vlax-vbdouble (cons 1 lenofpoint)) ) )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;管网拓扑信息的提取 (defun c:yww1 () //////////pipe n1
lenofpipe totalpoint p1 p2 p0 ang1
(command \"-layer\" \"s\" \"管段号\" \"\") (setq n1 0)
(repeat lenofpipe
(setq pipe (ssname totalpipe n1))
(setq p1 (cdr (assoc 10 (entget pipe)))) (setq p2 (cdr (assoc 11 (entget pipe))))
(setq p0 (mapcar '(lambda (x y) (/ (+ x y) 2)) p1 p2)) (setq pipe (vlax-ename->vla-object pipe)) (setq ang1 (* (/ 180 pi) (vla-get-angle pipe))) (if (and(> ang1 90)(< ang1 270)) (setq ang1 (- ang1 180)) )
(if(= ang1 180) (setq ang1 0) )
(if(= ang1 270) (setq ang1 90)
)
(setq n1 (1+ n1))
(command \"text\" p0 35 ang1 (rtos n1 2 0)) ) )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;管段编号并标注 (defun c:yww2 () ////////dfn lenofpoint n2 p3 str1
(setvar \"cmdecho\" 0)
(command \"-layer\" \"s\" \"节点号\" \"\")
(setq dfn (open \"f:/程序设计/管网计算/wen1.txt\" \"w\")) ///////输入节点坐标到文本中 (setq n2 0)
(repeat lenofpoint
(setq p3 (nth n2 totalpoint)) (command \"circle\" p3 35) (setq str1 (zh1 p3))
(setq str1 (strcat (rtos (1+ n2) 2 0) \" \" str1)) (write-line str1 dfn) (setq n2 (1+ n2))
(command \"text\" \"j\" \"mc\" p3 30 0 (rtos n2 2 0)) ) )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;节点编号并标注 (defun c:yww11() (initget 1 \"A B\")
(setq ass1 (getkword \"选择方式/A(调用文本)/B(用户输入):\")) (if(= ass1 \"A\")
(progn(setq filename (getfiled \"原始数据文本\" \"\" \"txt\" 2)) (setq ptfile (open filename \"r\")) (setq n1 1)
(repeat lenofpipe
(setq pp (read-line ptfile))
(setq pp1 (read(strcat \"(\" pp \")\"))) (vlax-safearray-put-element longofpipe n1 (nth 4 pp1)) (setq n1 (1+ n1)) ) )
(progn(setq n2 1)
(repeat lenofpipe
(setq ass2 (rtos n2 2 2)) (setq ass3 (getreal (strcat \"\\n输入\" ass2 \"管长:\" ))) (vlax-safearray-put-element diaofpipe n2 ass1) (vlax-safearray-put-element longofpipe n2 ass3) (setq n2 (1+ n2)) ) ) )
//////////////////////////////////////////////得出管段长度数组longofpipe );;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;管段长度的获得 (defun c:yww23()
(setq filename1 (getfiled \"节点流量文本\" \"\" \"txt\" 2)) (setq ptfile1 (open filename1 \"r\")) (setq n1 1)
(repeat lenofpoint
(setq pp1 (read-line ptfile1))
(setq pp0 (read(strcat \"(\" pp1 \")\")))
(vlax-safearray-put-element q_node n1 (nth 4 pp0)) (vlax-safearray-put-element q_node1 n1 (nth 4 pp0)) (setq n1 (1+ n1)) )
);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;调用文本得到节点流量 (defun c:yww3()//////n1 n2 n3 ss1 main s_joint p2 p3 sub (setq diaofpipe (vlax-make-safearray vlax-vbdouble (cons 1 lenofpipe)) )
(setq coma (vlax-make-safearray vlax-vbdouble (cons 1 lenofpipe))) (setq pipearfa (vlax-make-safearray vlax-vbdouble (cons 1 lenofpipe))) (setq n1 1)
(setq ylen (1+ lenofpoint))
(setq amatrix (vlax-make-safearray vlax-vbdouble (cons 1 lenofpoint)(cons 1 ylen))) (repeat lenofpoint (setq n2 (- n1 1))
(setq p1 (nth n2 totalpoint))
(setq ss1 (ssget \"x\" (list (cons -4 \" (cons -4 \" ) ) ) (setq main (sslength ss1)) (setq n3 0) (repeat main (setq s_joint (ssname ss1 n3)) (setq n3 (1+ n3)) (setq p2 (cdr(assoc 10 (entget s_joint)))) (setq p3 (cdr(assoc 11 (entget s_joint)))) (if (or(/= (car p1)(car p2))(/= (cadr p1)(cadr p2))) (progn(setq sub (vl-position p2 totalpoint)) (setq sub (1+ sub)) (vlax-safearray-put-element amatrix n1 sub -1) ) ) (if (or(/= (car p1)(car p3))(/= (cadr p1)(cadr p3))) (progn(setq sub (vl-position p3 totalpoint)) (setq sub (1+ sub)) (vlax-safearray-put-element amatrix n1 sub -1) ) ) ) (vlax-safearray-put-element amatrix n1 n1 main) (setq n1 (1+ n1)) ) (setq n4 1) (setq num1 (- lenofpoint 1)) (setq bmatrix (vlax-make-safearray vlax-vbdouble (cons 1 num1)(cons 1 lenofpoint))) (setq n1 1) (repeat lenofpoint (setq ass1 (vlax-safearray-get-element q_node n1)) (vlax-safearray-put-element amatrix n1 ylen ass1) (setq n1 (1+ n1)) ) (setq n14 1) (repeat num1 (setq n15 1) (repeat lenofpoint (setq ass10 (vlax-safearray-get-element amatrix (1+ n14) (1+ n15))) (vlax-safearray-put-element bmatrix n14 n15 ass10) (setq n15 (1+ n15)) ) (setq n14 (1+ n14)) ) (setq n4 1) (setq num2 (- num1 1)) (repeat num2 (setq maxa 0) (setq len1 (- lenofpoint n4)) (setq n6 n4) (repeat len1 (if (> (abs(vlax-safearray-get-element bmatrix n6 n4)) maxa) (progn(setq maxa (abs(vlax-safearray-get-element bmatrix n6 n4))) (setq n5 n6) ) ) (setq n6 (1+ n6)) ) (if(/= n5 n4) (progn(setq n7 1) (repeat lenofpoint (setq ass1 (vlax-safearray-get-element bmatrix n4 n7)) (vlax-safearray-put-element bmatrix n4 n7 (vlax-safearray-get-element bmatrix n5 n7)) (vlax-safearray-put-element bmatrix n5 n7 ass1) (setq n7 (1+ n7)) ) ) ) (setq n8 (+ n4 1)) (setq len2 (- num1 n4)) (setq len4 (+ 1 len2)) (repeat len2 (setq n9 (1+ n4)) (setq ass3 (vlax-safearray-get-element bmatrix n8 n4)) (setq ass4 (vlax-safearray-get-element bmatrix n4 n4)) (repeat len4 (setq ass1 (vlax-safearray-get-element bmatrix n8 n9)) (setq ass2 (vlax-safearray-get-element bmatrix n4 n9)) (setq ass5 (- ass1 (/ (* ass2 ass3) ass4))) (vlax-safearray-put-element bmatrix n8 n9 ass5) (setq n9 (1+ n9)) ) (vlax-safearray-put-element bmatrix n8 n4 0) (setq n8 (1+ n8)) ) (setq n4 (1+ n4)) ) (setq cf_node (vlax-make-safearray vlax-vbdouble (cons 1 lenofpoint))) (setq ass6 (/ (vlax-safearray-get-element bmatrix num1 lenofpoint) (vlax-safearray-get-element bmatrix num1 num1))) (vlax-safearray-put-element cf_node lenofpoint ass6) (setq n12 num2) (repeat num2 (setq ass7 0) (setq len2 (- num1 n12)) (setq n13 (1+ n12)) (repeat len2 (setq ass8 (* (vlax-safearray-get-element bmatrix n12 n13) (vlax-safearray-get-element cf_node (1+ n13)))) (setq ass7 (+ ass8 ass7)) (setq n13 (1+ n13)) ) (setq ass9 (/ (- (vlax-safearray-get-element bmatrix n12 lenofpoint) ass7) (vlax-safearray-get-element bmatrix n12 n12))) (vlax-safearray-put-element cf_node (1+ n12) ass9) (setq n12 (- n12 1)) ) (setq cf_pipe (vlax-make-safearray vlax-vbdouble (cons 1 lenofpipe))) (setq n14 (- lenofpipe 1)) (setq n15 1) (repeat lenofpipe (setq ass10 (nth 1 (nth n14 pipe_point))) (setq ass11 (nth 2 (nth n14 pipe_point))) (setq ass12 (- (vlax-safearray-get-element cf_node ass11) (vlax-safearray-get-element cf_node ass10))) (setq ass13 (vlax-safearray-put-element cf_pipe n15 ass12)) (setq n14 (- n14 1)) (setq n15 (1+ n15)) )/////////////////////////////////得出管段初分流量的数组cf_pipe (setq presure 1.5) (setq presure1 1.2) (setq arfa (/ (- (expt presure 2) (expt presure1 2)) 10)) (setq n1 1) (repeat lenofpipe (setq ass1 (/ (abs (vlax-safearray-get-element cf_pipe n1)) 10000)) (setq ass2 (expt ass1 2)) (setq ass3 (/ arfa ass2)) (setq ass9 (vlax-safearray-put-element pipearfa n1 ass3)) (setq ass4 (gj ass3)) (setq ass5 (vlax-safearray-put-element diaofpipe n1 ass4)) (setq ass6 (vl-position ass5 compd)) (setq ass7 (nth ass6 comparfa)) (setq ass8 (vlax-safearray-put-element coma n1 ass7)) (setq n1 (1+ n1)) ) (setq cp_point '()) (setq n16 lenofpipe) (repeat lenofpipe (setq ass14 (vlax-safearray-get-element cf_pipe n16)) (setq n17 (- lenofpipe n16)) (setq ass15 (nth 1 (nth n17 pipe_point))) (setq ass16 (nth 2 (nth n17 pipe_point))) (if(< ass14 0) (progn (setq ass14 '()) (setq ass14 (cons ass15 ass14)) (setq ass14 (cons ass16 ass14)) (setq ass14 (cons n16 ass14)) (setq cp_point (cons ass14 cp_point)) ) (progn (setq ass17 '()) (setq ass17 (cons ass16 ass17)) (setq ass17 (cons ass15 ass17)) (setq ass17 (cons n16 ass17)) (setq cp_point (cons ass17 cp_point)) ) ) (setq n16 (1- n16)) ) );;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;用最小平方和法初分流量 (defun c:yww4 () (setq n100 1) (setq pnode (vlax-make-safearray vlax-vbdouble (cons 1 lenofpoint))) (setq h (vlax-make-safearray vlax-vbdouble (cons 1 lenofpipe))) (setq qmatrix (vlax-make-safearray vlax-vbdouble (cons 1 lenofpipe))) (setq qmatrix1 (vlax-make-safearray vlax-vbdouble (cons 1 lenofpipe))) (setq n0 1) (repeat lenofpipe (setq ass0 (/ (vlax-safearray-get-element cf_pipe n0) 10000)) (vlax-safearray-put-element qmatrix1 n0 ass0) (setq n0 (1+ n0)) ) (setq hmatrix (vlax-make-safearray vlax-vbdouble (cons 1 lenofpipe))) (setq eps 0.0001) (setq cmatrix (vlax-make-safearray vlax-vbdouble (cons 1 lenofpipe) (cons 1 lenofpipe) ) ) (setq matrix2 (vlax-make-safearray vlax-vbdouble (cons 1 num1) (cons 1 lenofpoint) ) ) (setq matrix4 (vlax-make-safearray vlax-vbdouble (cons 1 lenofpoint))) (setq rmatrix (vlax-make-safearray vlax-vbdouble (cons 1 lenofpoint) (cons 1 lenofpoint) ) ) (setq matrix1 (vlax-make-safearray vlax-vbdouble (cons 1 lenofpoint) (cons 1 lenofpipe) ) ) (vlax-safearray-put-element matrix4 1 0) (while (progn (setq n1 1) (repeat lenofpipe (setq ass1 (vlax-safearray-get-element longofpipe n1)) (setq ass2 (abs (vlax-safearray-get-element qmatrix1 n1))) (setq ass3 (vlax-safearray-get-element coma n1)) (setq ass4 (* ass3 ass2 ass1)) (setq ass5 (/ 1.0 ass4)) (vlax-safearray-put-element cmatrix n1 n1 ass5) ///////////////得出G矩阵 (setq n1 (1+ n1)) ) (setq n2 1) (repeat lenofpoint (setq n3 1) (repeat lenofpipe (setq n4 1) (setq ass10 0) (repeat lenofpipe (setq ass8 (vlax-safearray-get-element join n2 n4)) (setq ass9 (vlax-safearray-get-element cmatrix n4 n3)) (setq ass10 (+ ass10 (* ass8 ass9))) (setq n4 (1+ n4)) ) (vlax-safearray-put-element matrix1 n2 n3 ass10) (setq n3 (1+ n3)) ) (setq n2 (1+ n2)) ) (setq n5 1) (repeat lenofpoint (setq n6 1) (repeat lenofpoint (setq n7 1) (setq ass11 0) (repeat lenofpipe (setq ass12 (vlax-safearray-get-element matrix1 n5 n7)) (setq ass13 (vlax-safearray-get-element zjoin n7 n6)) (setq ass11 (+ ass11 (* ass12 ass13))) (setq n7 (1+ n7)) ) (vlax-safearray-put-element rmatrix n5 n6 ass11) (setq n6 (1+ n6)) ) (setq n5 (1+ n5)) ) (setq num1 (- lenofpoint 1)) (setq n14 1) (repeat num1 (setq n15 1) (repeat num1 (setq ass10 (vlax-safearray-get-element rmatrix (1+ n14) (1+ n15)) ) (vlax-safearray-put-element matrix2 n14 n15 ass10) (setq n15 (1+ n15)) ) (setq n14 (1+ n14)) ) (setq n16 1) (repeat num1 (setq ass11 (/ (- 0 (vlax-safearray-get-element q_node (1+ n16))) 10000 ) ) (vlax-safearray-put-element matrix2 n16 lenofpoint ass11) (setq n16 (1+ n16)) ) (setq n4 1) (setq num2 (- num1 1)) (repeat num2 (setq maxa 0) (setq len1 (- lenofpoint n4)) (setq n6 n4) (repeat len1 (if (> (abs (vlax-safearray-get-element matrix2 n6 n4)) maxa) (progn (setq maxa (abs (vlax-safearray-get-element matrix2 n6 n4)) ) (setq n5 n6) ) ) (setq n6 (1+ n6)) ) (if (/= n5 n4) (progn (setq n7 1) (repeat lenofpoint (setq ass1 (vlax-safearray-get-element matrix2 n4 n7)) (vlax-safearray-put-element matrix2 n4 n7 (vlax-safearray-get-element matrix2 n5 n7) ) (vlax-safearray-put-element matrix2 n5 n7 ass1) (setq n7 (1+ n7)) ) ) ) (setq n8 (+ n4 1)) (setq len2 (- num1 n4)) (setq len4 (+ 1 len2)) (repeat len2 (setq n9 (1+ n4)) (setq ass3 (vlax-safearray-get-element matrix2 n8 n4)) (setq ass4 (vlax-safearray-get-element matrix2 n4 n4)) (repeat len4 (setq ass1 (vlax-safearray-get-element matrix2 n8 n9)) (setq ass2 (vlax-safearray-get-element matrix2 n4 n9)) (setq ass5 (- ass1 (/ (* ass2 ass3) ass4))) (vlax-safearray-put-element matrix2 n8 n9 ass5) (setq n9 (1+ n9)) ) (vlax-safearray-put-element matrix2 n8 n4 0) (setq n8 (1+ n8)) ) (setq n4 (1+ n4)) ) ///////////////////////////////////////////主元素消去法解方程组 (setq ass6 (/ (vlax-safearray-get-element matrix2 num1 lenofpoint) (vlax-safearray-get-element matrix2 num1 num1) ) ) (vlax-safearray-put-element matrix4 lenofpoint ass6) (setq n12 num2) (repeat num2 (setq ass7 0) (setq len2 (- num1 n12)) (setq n13 (1+ n12)) (repeat len2 (setq ass8 (* (vlax-safearray-get-element matrix2 n12 n13) (vlax-safearray-get-element matrix4 (1+ n13)) ) ) (setq ass7 (+ ass8 ass7)) (setq n13 (1+ n13)) ) (setq ass9 (/ (- (vlax-safearray-get-element matrix2 n12 lenofpoint) ass7 ) (vlax-safearray-get-element matrix2 n12 n12) ) ) (vlax-safearray-put-element matrix4 (1+ n12) ass9) (setq n12 (- n12 1)) ) /////////////////////////////////求得matrix4为节点气压数组 (setq n1 1) (repeat lenofpipe (setq ass1 (nth 1 (nth (- n1 1) np_point))) (setq ass2 (nth 2 (nth (- n1 1) np_point))) (setq ass3 (vlax-safearray-get-element matrix4 ass1)) (setq ass4 (vlax-safearray-get-element matrix4 ass2)) (setq ass5 (vlax-safearray-get-element cmatrix n1 n1)) (vlax-safearray-put-element hmatrix n1 (- ass3 ass4)) (setq ass6 (* (- ass3 ass4) ass5)) (vlax-safearray-put-element qmatrix n1 ass6) (setq n1 (1+ n1)) ) (setq n0 1) (setq maxb 0) (repeat lenofpipe (setq ass1 (vlax-safearray-get-element qmatrix n0)) (setq ass2 (vlax-safearray-get-element qmatrix1 n0)) (setq ass3 (abs (- ass1 ass2))) (if (> ass3 maxb) (setq maxb ass3) ) (setq n0 (1+ n0)) ) (> maxb eps) ) (setq n1 1) (repeat lenofpipe (setq ass1 (vlax-safearray-get-element qmatrix n1)) (setq ass2 (vlax-safearray-get-element qmatrix1 n1)) (setq ass3 (/ (+ ass1 ass2) 2)) (vlax-safearray-put-element qmatrix1 n1 ass3) (setq n1 (1+ n1)) ) (setq n100 (1+ n100)) ) (setq listma4 '()) (setq n3 lenofpoint) (repeat lenofpoint (setq ass1 (vlax-safearray-get-element matrix4 n3)) (setq listma4 (cons ass1 listma4)) (setq n3 (1- n3)) ) (setq listma41 (vl-sort-i listma4 '>)) (setq maxhnode (1+(nth 0 listma41))) (setq n2 1) (setq ass2 (vlax-safearray-get-element matrix4 maxhnode)) (repeat lenofpoint (setq ass1 (vlax-safearray-get-element matrix4 n2)) (setq ass4 (expt presure 2)) (setq ass3 (+ ass4 (- ass1 ass2))) (vlax-safearray-put-element pnode n2 (expt ass3 0.5)) (setq n2 (1+ n2)) );;;;;;;;;;;;;;;;;;;;;;;;;;获得节点气压 ///////////////////////////////////////// (setq nnp_point '()) (setq n16 lenofpipe) (repeat lenofpipe (setq ass13 (vlax-safearray-get-element qmatrix n16)) (setq ass15 (nth 1 (nth (1- n16) np_point))) (setq ass16 (nth 2 (nth (1- n16) np_point))) (if (< ass13 0) (progn (setq ass14 '()) (setq ass14 (cons ass15 ass14)) (setq ass14 (cons ass16 ass14)) (setq ass14 (cons n16 ass14)) (setq nnp_point (cons ass14 nnp_point)) ) (progn (setq ass17 '()) (setq ass17 (cons ass16 ass17)) (setq ass17 (cons ass15 ass17)) (setq ass17 (cons n16 ass17)) (setq nnp_point (cons ass17 nnp_point)) ) ) (setq n16 (1- n16)) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;用节点法进行平差计算 (defun c:b2() (setq p1 (getpoint \"\\n确定节点1:\")) (setq p2 (list(+ 40 (car p1)) (+ 50 (cadr p1)))) (setq p3 (list(+ 40 (car p2)) (cadr p2))) (setq p6 (list(car p2) (- (cadr p2) 20))) (command \"pline\" p1 p2 p3 \"\") (command \"attdef\" \"\" \"1\" \"2\" \"3\" p2 20 0 \"\") (command \"attdef\" \"\" \"4\" \"5\" \"6\" p6 20 0 \"\") (setq p4 (getpoint \"\\n选择一点:\")) (setq p5 (getpoint \"\\n选择另一点:\")) (setq ss (ssget \"c\" p4 p5)) (command \"block\" \"jie8\" p1 ss \"\") ) (defun c:yww10() (command \"-layer\" \"s\" \"图形标注\" \"\") (setq n1 0) (repeat lenofpoint (setq ass1 (vlax-safearray-get-element pnode (- lenofpoint n1))) (setq ass2 (vlax-safearray-get-element q_node1 (- lenofpoint n1))) (setq sn1 (rtos ass1 2 3)) (setq sn2 (rtos ass2 2 3)) (setq p7 (cdr (nth n1 list2))) (command \"-insert\" \"jie8\" p7 1 1 0 sn2 sn1 \"\") (setq n1 (1+ n1)) ) (setq n1 0) (repeat lenofpipe (setq pipe (ssname totalpipe n1)) (setq p1 (cdr (assoc 10 (entget pipe)))) (setq p2 (cdr (assoc 11 (entget pipe)))) (setq p0 (mapcar '(lambda (x y) (/ (+ x y) 2)) p1 p2)) /////线段的中点 (setq pipe (vlax-ename->vla-object pipe)) (setq ang1 (* (/ 180 pi) (vla-get-angle pipe))) (if (and(> ang1 90)(< ang1 270)) (setq ang1 (- ang1 180)) ) (if(= ang1 180) (setq ang1 0) ) (if(= ang1 270) (setq ang1 90) ) (setq n1 (1+ n1)) (setq ass3 (vlax-safearray-get-element longofpipe n1)) (setq ass4 (vlax-safearray-get-element diaofpipe n1)) (setq sn3 (rtos ass3 2 2)) (setq sn4 (rtos ass4 2 2)) (setq sn5 (strcat sn3 \"--\" sn4)) (setq ass5 (* 10000 (abs(vlax-safearray-get-element qmatrix n1)))) (setq ass6 (vlax-safearray-get-element hmatrix n1)) (setq sn6 (rtos ass5 2 4)) (setq sn7 (rtos ass6 2 5)) (setq sn8 (strcat sn6 \"--\" sn7)) (command \"text\" \"j\" \"bc\" p0 20 ang1 sn5) (command \"text\" \"j\" \"tc\" p0 20 ang1 sn8) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;节点和管段数据的图形标注 ////////////////////////////////////////////////////////////////////////////// (defun c:b1 () (setq ass1 (getreal \"\\n输入标示箭头长度:\")) (setq ass2 (getpoint \"\\n输入箭头起点:\")) (setq ass3 (getreal \"\\n输入起点宽度:\")) (setq ass4 (list (+ (car ass2) ass1) (cadr ass2))) (command \"pline\" ass2 \"w\" ass3 0 ass4 \"\") (command \"block\" \"block1\" ass2 (entlast) \"\") ) (defun c:yww7 () (command \"-layer\" \"s\" \"流向标注\" \"\") (setq n1 0) (repeat lenofpipe (setq pipe1 (ssname totalpipe n1)) (setq p1 (cdr (assoc 10 (entget pipe1)))) (setq p2 (cdr (assoc 11 (entget pipe1)))) (setq p3x (/ (+ (car p1) (car p2)) 2)) (setq p3y (/ (+ (cadr p1) (cadr p2)) 2)) (setq p3 (list p3x p3y)) (setq pipe2 (vlax-ename->vla-object pipe1)) (setq ass2 (* (/ 180 pi) (vla-get-angle pipe2))) (setq ass3 (nth 1 (nth (- lenofpipe n1 1) pipe_point))) (setq ass4 (nth 1 (nth n1 nnp_point))) (if (= ass3 ass4) (setq ass5 ass2) (setq ass5 (- 0 (- 180 ass2))) ) (command \"-insert\" \"block1\" p3 1 1 ass5) (setq n1 (1+ n1)) ) );;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;管段流量方向的标注 除了本节所介绍的Visual LISP编程语言外,还有多种计算机编程语言可以解决燃气管网的计算问题,如MATLAB等,有兴趣的读者可参考相关书籍。 [参考文献] 1.姜正侯主编.燃气工程技术手册.上海:同济大学出版社,1993 2.席德粹,刘松林,王可仁编著.城市燃气管网设计与施工.上海:上海科学技术出版社,1999 3.段长贵主编.燃气输配(第三版).北京:中国建筑工业出版社,2001 4.城镇燃气设计规范(2002年版).北京:中国计划出版社,2003 5.陈伯雄,冯伟.Visual LISP程序设计——技巧与范例.北京:人民邮电出版社,2002 因篇幅问题不能全部显示,请点此查看更多更全内容