☰
架空线应力弧垂MATLAB计算:比载、状态方程与临界档距
2026/11/5 2:46:28 网站建设 项目流程

简介:面向电力线路设计与运行分析人员、高校电气类专业师生,这份MATLAB程序脚本用于输电线路比载、应力与弧垂的联动计算,适合在课程设计、线路参数校核和多种工况模拟中作为辅助工具。压缩包仅含1个.m文件,体积约3KB,轻量易取,导入MATLAB后可按脚本中的数据输入、自重与风冰荷载下的比载计算、应力分析、弧垂求解及结果展示等环节逐步查看和调整。其价值在于把导线参数、荷载组合、温度变化与张力设置串成一套可复算的流程,便于读者观察比载对弧垂和应力分布的影响,并据此开展参数对比与方案优化;脚本结构紧凑,也适合作为二次开发的基础框架。已有430人学习,适合具备MATLAB基础、希望快速搭建输电线路计算流程的读者参考。

1. 一条线路的三个数:最大应力、弧垂与杆塔裕度

导线选型定下来、气象区划清楚之后,设计桌上其实只剩三个必须回答的数:最大应力出现在哪个工况、某个档距下弧垂到底多少、杆塔定位要留多少裕度。这三个数手算一遍要大半天,最容易翻车的地方往往不在状态方程本身,而在比载的单位——N/(m·mm²) 和 kg/(m·mm²) 混一次,结果能差三个数量级。这份 MATLAB 程序把比载表、状态方程式、临界档距判定、应力弧垂曲线串成了一条流水线,改几个参数就能从头跑到尾。适合做线路电气设计的、做杆塔荷载提资的,以及课程设计要交一整条弧垂曲线的同学。

2. 比载与状态方程:七类荷载和一个三次方程怎么落地

架空线的力学计算之所以要绕到「比载」这个概念,是因为不同导线的截面积不一样。同样一根导线,挂 1 km 的荷载是多少牛,这个数对 300 mm² 和 400 mm² 没有可比性;但把荷载除以长度再除以截面积,得到的量纲是 N/(m·mm²),就能直接和应力 N/mm²(也就是 MPa)做加减。整套程序的骨架就建立在这个统一量纲上,比载算错,后面无论状态方程写得多漂亮都是白搭。

2.1 七类比载的公式、量纲与系数来源

线路计算里固定用七个别载符号,顺序是行业习惯,不建议在程序里改:

编号名称计算式说明
γ1自重比载9.80665·m0·10⁻³/Am0 为计算质量 kg/km
γ2冰重比载27.73·b(b+d)·10⁻³/Ab 冰厚 mm,d 外径 mm
γ3垂直总比载γ1 + γ2覆冰工况的垂直分量
γ4无冰风压比载0.6128·α·μsc·βc·d·v²·10⁻³/Av 为风速 m/s
γ5覆冰风压比载0.6128·α·μsc·βc·(d+2b)·v²·10⁻³/A受风面积按覆冰后外径
γ6无冰综合比载√(γ1² + γ4²)矢量合成
γ7覆冰综合比载√(γ3² + γ5²)矢量合成

系数 27.73 的来历是冰密度 0.9 g/cm³ 乘重力加速度再乘 π,化到 mm、m、N 这套单位后落下来的常数;0.6128 则是空气密度 1.2256 kg/m³ 的一半再取整。这两个数在规范手册里都是定值,抄进去就行,别自己重新推一遍再四舍五入,容易在第 4 位小数上和别人对不上账。

提示:γ1 到 γ7 的单位必须全部是 N/(m·mm²)。如果手上数据是 daN/(m·mm²) 或者 kgf/(m·mm²),先在本函数入口处统一换算,不要留到状态方程里再补。

写成函数比写成脚本好,原因是后面批量扫档距时会被反复调用:

function g = calc_loads(A, d, m0, b, v, alpha_f, mu_sc, beta_c) % 计算导线七类比载,输出行向量 g(1..7),单位 N/(m*mm^2) % A 导线计算截面积, mm^2 % d 导线外径, mm % m0 导线计算质量, kg/km % b 覆冰厚度, mm % v 风速, m/s % alpha_f 风压不均匀系数 % mu_sc 导线体型系数, d<17mm 取 1.2, d>=17mm 取 1.1 % beta_c 风荷载调整系数, 一般取 1.0 g = zeros(1,7); g(1) = 9.80665 * m0 * 1e-3 / A; % 自重比载 g(2) = 27.73 * b * (b + d) * 1e-3 / A; % 冰重比载 g(3) = g(1) + g(2); % 垂直总比载 g(4) = 0.6128 * alpha_f * mu_sc * beta_c * d * v^2 * 1e-3 / A; g(5) = 0.6128 * alpha_f * mu_sc * beta_c * (d + 2*b) * v^2 * 1e-3 / A; g(6) = hypot(g(1), g(4)); % 无冰综合比载 g(7) = hypot(g(3), g(5)); % 覆冰综合比载 end

几处容易忽略的点:1e-3是把 mm 换算成 m 时产生的,少了它结果放大一千倍;hypot比sqrt(a^2+b^2)在极端数值下更稳,虽然这里差距不大,但养成习惯没坏处;mu_sc按外径分档,覆冰后外径变大,理论上体型系数可以降一档,工程上多数按无冰外径统一取,程序里默认不区分。

2.2 状态方程式:从三次方程到控制条件判据

导线在某个气象条件下的应力,不是孤立算出来的,而是和一个已知状态绑在一起。状态方程的标准形式是:

σn − γn²l²E/(24σn²) = σm − γm²l²E/(24σm²) − αE(tn − tm)

左边是待求工况 n,右边是已知工况 m,l 是档距,E 是弹性模量,α 是线膨胀系数。把等式右边整体记成一个常数 K,方程就变成 σ³ − Bσ² − C = 0 的形式,B = K − αEtn,C = γn²l²E/24,一个三次方程,用roots求根后取唯一的正实根即可。

真正的难点在 K 怎么定。工程上不是随便挑一个工况当已知状态,而是要先找「控制气象条件」——也就是在该档距下,应力恰好顶到允许值的那个工况。判定方法我一般用包络法,不查表也不画图:

对每个候选工况 i,计算 Ki = σi,max − γi²l²E/(24σi,max²) + αE·ti,取 K 最大的那个作为控制条件,再用它的 K 值去解其余工况的应力。

这么做的依据是:函数 σ − γ²l²E/(24σ²) + αEt 对 σ 单调递增,K 值越大说明该工况能承受的应力水平越高,一旦它先顶到限制,其他工况自然都在限值以下。传统的临界档距排序法要算两两临界档距再排有效区间,档距分段一多就容易出错,包络法一个循环就解决。

function sigma = solve_state(l, gam, t, K, E, alpha) % 由控制条件常数 K 反解某工况应力 % 方程: sigma - gam^2*l^2*E/(24*sigma^2) = K - alpha*E*t B = K - alpha*E*t; C = gam^2 * l^2 * E / 24; r = roots([1, -B, 0, -C]); % sigma^3 - B*sigma^2 - C = 0 r = r(abs(imag(r)) < 1e-9 & real(r) > 1e-3); % 只留正实根 sigma = min(real(r)); % 物理上只有一个正根, 取最小值防御 end

solve_state的两个参数需要解释:l是档距(m),gam是该工况对应的比载(N/(m·mm²)),注意传进来的是 γ4 还是 γ7 取决于工况性质,覆冰工况传 γ7,最大风工况传 γ4,不能混。K由外层控制条件判定得出,一旦确定,同一档距下所有工况共用。

如果要单独算两工况的临界档距做校核,用一个短函数就够:

function lcr = critical_span(sm, gm, tm, sn, gn, tn, E, alpha) % 两气象条件的临界档距, 返回 NaN 表示无交替点 num = 24 * (sm - sn + alpha*E*(tm - tn)); den = E * ((gm/sm)^2 - (gn/sn)^2); if abs(den) < 1e-10 lcr = Inf; % 比载应力比相同, 永不交替 else lcr = sqrt(num / den); if ~isreal(lcr), lcr = NaN; end % 根号内为负, 两条件无交点 end end

这两个函数加起来不到 20 行,却覆盖了整套程序 80% 的物理逻辑。剩下的工作是把气象组合、参数表、出图拼接起来。有一个容易误用的地方:critical_span只是诊断工具,别用它替代max(K)判据。临界档距是成对比较,工况一多就要组合爆炸,而包络法对所有工况一次性完成排序。

2.3 手算对账:三个数验证程序有没有跑偏

程序跑完第一次,别急着看曲线,先手算三个数对账。以 400/35 型钢芯铝绞线为例,A = 434.3 mm²、d = 26.8 mm、m0 = 1349 kg/km、覆冰 10 mm、风速 30 m/s、α = 0.75、μsc = 1.1、βc = 1.0:

  • γ1 = 9.80665 × 1349 × 10⁻³ / 434.3 ≈ 0.03046 N/(m·mm²)
  • γ4 = 0.6128 × 0.75 × 1.1 × 1.0 × 26.8 × 900 × 10⁻³ / 434.3 ≈ 0.02808
  • γ6 = √(0.03046² + 0.02808²) ≈ 0.04143

这三个数如果和程序输出对不上,先查单位再查系数,九成是1e-3漏了或者m0填成了 kg/m。另外提醒一句,γ6 一定大于 γ1 和 γ4 中任何一个,如果算出来反而小了,那是合成时把加号写成了减号。

还有一个反直觉的检查点:覆冰工况的综合比载 γ7 未必比无冰工况的 γ6 大很多。上例中 b = 10 mm、覆冰风速 10 m/s 时 γ7 ≈ 0.0543,比 γ6 大约三成。但如果覆冰风速取 15 m/s,两者会迅速靠近。这直接影响控制条件的判定结果,也是第 5 章要专门讲的一类坑。

3. 程序结构拆解:参数表、主循环与出图脚本怎么对上

拿到一个 .rar 拆开,第一件事不是急着点运行,而是按功能给文件分堆。线路计算类程序的写法五花八门,但骨架基本固定:一个数据入口、一组力学函数、一个主循环、若干出图或导表脚本。把这三堆分清楚,改参数的时候就不会在十几个 .m 文件里瞎找。

3.1 解包后的文件分三类:入口、算法、出图

常见做法是按下表对号入座,文件名各家不同,但看前几行注释和输入参数就能判断:

类别识别特征处理顺序
数据入口顶部一整段赋值语句,全是数字和字符串第一个改,也是唯一该改的文件
力学函数有输入参数、有返回值,函数体里出现 γ、σ、E一般不动,核对公式即可
主循环有for l = ...或档距数组,内部调用力学函数第二个看,确认调用顺序
出图脚本大量plot、xlabel、legend、print最后跑,出图前先看数据

判断入口文件有个笨办法:在目录里搜哪个文件里出现了A =或d =这类裸赋值,且没有function关键字,基本就是它。力学函数则以function开头,参数表里必然出现l(档距)和gam(比载)。

注意:有些包里入口脚本和主循环写在一起,改参数和改逻辑混在一个文件。这种结构不建议重构,风险大于收益,把入口段单独复制出来保存成自己的参数文件更稳妥。

拆包后建议先建一个工作副本,原包保持不动。线路计算最怕的是改着改着忘了原始值,等结果不对时没有后悔药。

3.2 数据入口怎么填:一张参数表对应哪几个变量

入口脚本要填的东西看着多,其实就四组:

  1. 导线参数:A、d、m0、E、α、计算拉断力。前四个决定比载,E 和 α 进状态方程,拉断力用来推允许应力。
  2. 气象参数:覆冰厚度 b、最大风速 v、各工况气温 t。这几个直接决定工况组合。
  3. 安全系数:最大使用应力占比、年平均应力占比。常见取法是最大应力不超过拉断力的 40%,年平均不超过 25%。
  4. 计算范围:档距起止和步长。

允许应力不要手填具体数值,从拉断力推:

Tp = 103900; % 计算拉断力, N A = 434.3; % 计算截面积, mm^2 smax = 0.40 * Tp / A; % 最大使用应力, MPa savg = 0.25 * Tp / A; % 年平均运行应力, MPa

这样改导线型号时只改Tp和A两个数,其余自动跟着变。手填 95.7 这种数值的做法,换一根导线就全错,而且错得不明显——程序照跑,曲线照画,只是每一条都偏了。

气象组合按规范习惯配:最低温用 γ1、最大风用 γ4、覆冰用 γ7、年平均温用 γ1、最高温用 γ1。其中前四个是控制条件候选,最高温只作为待求工况参与弧垂计算,不参与控制判定。这个区分很关键,把最高温也塞进候选集,会在大档距段抢到控制权,导致全线应力偏低。

3.3 批量扫描档距并落盘:出图与导表

单点计算没意义,线路设计要的是整条曲线。主循环的结构大致是这样:

Q = struct('name',{},'t',{},'g',{}); % 待求工况集合 Q(1) = struct('name','最低温','t',-20,'g',g(1)); Q(2) = struct('name','最大风','t', 5,'g',g(4)); Q(3) = struct('name','覆冰', 't', -5,'g',g(7)); Q(4) = struct('name','年平均','t', 15,'g',g(1)); Q(5) = struct('name','最高温','t', 40,'g',g(1)); lList = 50:25:1000; % 档距扫描范围, m S = zeros(numel(lList), numel(Q)); % 应力结果矩阵 for k = 1:numel(lList) l = lList(k); Kv = zeros(1,4); for i = 1:4 % 仅前四个参与控制判定 Kv(i) = smax_i(i) - Q(i).g^2*l^2*E/(24*smax_i(i)^2) + alpha*E*Q(i).t; end Kc = max(Kv); for j = 1:numel(Q) S(k,j) = solve_state(l, Q(j).g, Q(j).t, Kc, E, alpha); end end

smax_i是四个候选工况各自的允许应力,覆冰、最大风、最低温都取smax,年平均取savg。这个数组必须和Q(1:4)一一对应,顺序错了会出现「年平均工况按 95.7 MPa 控制」这种明显不合理的结果,但程序不会报错。

落盘部分用一行writematrix就够,比截图靠谱:

T = array2table([lList', S], 'VariableNames', ... {'档距','最低温','最大风','覆冰','年平均','最高温'}); writetable(T, 'stress_result.csv');

弧垂单独算,公式 f = γl²/(8σ),抛物线近似在常规档距下误差小于千分之三,够用。要精确可以上悬链线 f = σ/γ·(cosh(γl/(2σ)) − 1),但计算量翻几倍,一般只在特大档距才需要。

4. 一次完整复现:400 mm² 导线从参数到弧垂曲线

前面拆的是零件,这一章装成整机。选一组具体参数从头跑到尾,中间每一步都给出该看什么、正常值大概落在哪个区间,方便对照自己的结果。

4.1 一组能复现的算例参数

导线用 400/35 型钢芯铝绞线,参数如下表。这些是公开的产品计算参数,不同厂家会有微小差异,差个百分之一对结论没影响,但如果要出正式计算书,还是按实际订货参数填。

参数符号取值单位
计算截面积A434.3mm²
外径d26.8mm
计算质量m01349kg/km
弹性模量E65000MPa
线膨胀系数α20.5×10⁻⁶1/℃
计算拉断力Tp103900N
覆冰厚度b10mm
最大风速v30m/s
覆冰风速vb10m/s

气象工况五组:最低温 −20 ℃、最大风 5 ℃、覆冰 −5 ℃、年平均 15 ℃、最高温 40 ℃。允许应力按 40% 和 25% 折算,得到 smax = 95.7 MPa、savg = 59.8 MPa。

4.2 从零跑通:主循环与结果合理性检查

把 2.1 的calc_loads、2.2 的solve_state、3.3 的主循环拼起来,一次跑完,先看四个数:

g = calc_loads(434.3, 26.8, 1349, 10, 30, 0.75, 1.1, 1.0); fprintf('gamma1=%.5f gamma4=%.5f gamma6=%.5f gamma7=%.5f\n', ... g(1), g(4), g(6), g(7)); % 期望输出: gamma1≈0.03046 gamma4≈0.02808 gamma6≈0.04143 gamma7≈0.05427

gamma7这里用的是覆冰风速 10 m/s 算的,如果直接把 30 m/s 代进去,会得到 0.065 左右的偏大值,这是新手最常见的输入错误——覆冰和最大风不是同时发生的工况,风速必须分开给。

接着看应力随档距的变化趋势,三条检查规则:

  • 小档距段(50~150 m)应力应接近但不超过 smax,控制条件通常是最低温;
  • 随着档距增大,应力逐渐下降,在中档距段趋于平缓;
  • 大档距段(700 m 以上)年平均工况往往接管控制权,此时最大风工况应力要低于 smax。

如果第一条就不满足,比如 50 m 档距算出 120 MPa,超过允许值 25%,那基本是控制条件判定写错了,或者smax_i数组和工况顺序没对上。这个错误很隐蔽,因为程序不报错,图和正常结果长得还挺像。

弧垂用最高温工况算,400 m 档距下大致落在 10~13 m 区间:

[~, iHot] = max([Q.t]); f = Q(iHot).g .* lList.^2 ./ (8 * S(:, iHot));

400 m 档距、σ ≈ 55 MPa 时,f = 0.03046 × 160000 / (8 × 55) ≈ 11.1 m。这个数如果算出来是 111 m,回头查1e-3;算出来是 1.1 m,查l是不是用了千米。

4.3 把应力弧垂曲线接到杆塔定位

曲线出来只是中间产物,真正要用的是定位时的两个量:任一点弧垂和挂点不平衡张力。前者直接查表,后者用相邻档距的弧垂差乘比载:

ΔT ≈ γ·(f1 − f2)·A

这里 f1、f2 是同一挂点两侧档距在该气象条件下的弧垂。用最高温工况算出来的不平衡张力偏小,实际校核要按覆冰或者最大风工况取,程序里把工况循环打开,每算完一个工况就调一次这个式子,比手工挑工况可靠。

还有一点容易被忽略:杆塔定位用的弧垂曲线要按「最大弧垂」工况,不一定出现在最高温。覆冰工况比载大但温度低,有些气象区里覆冰工况的弧垂反而超过最高温。程序把五个工况全算出来,取每条档距上的最大值,这才是能直接交付的定位曲线。

5. 常见问题排查:五类跑飞结果的现象、原因与改法

这套计算最容易出问题的地方,往往不在于公式写错,而在于参数填错、单位不统一、工况搭配错误:程序照常运行、照常出图,结果却全错。下面五条都是实际遇到过的,按「现象 → 原因 → 解决」写,对着症状找就行。

5.1 现象:应力随档距增大反而上升

正常规律是档距越大、应力越小。如果曲线尾部翘起来,第一嫌疑是控制条件被固定成了最低温工况。有些程序里控制条件写死成一个下标,只在 50 m 附近对,档距一大就完全失真。

第二个可能:solve_state里K用了当前工况自己的值,而不是控制条件的值。这样每个工况都在解自己的方程,得到的不是同一档距下的真实应力分布。

解决办法是把控制判定放进档距循环内部,每换一个档距重算一次Kv,取max。不要为了省算力把控制条件提到循环外面,那点性能换不来正确性。

5.2 现象:临界档距出现虚数或判据失效

调critical_span时返回NaN或者Inf,多数是两种工况的 γ/σ 比值几乎相同。典型场景是覆冰工况和最大风工况在某个气象区里比载接近,分母趋近于零。

这不是程序 bug,是物理上两种条件确实没有交替点。处理方式是设阈值,分母绝对值小于 1e-10 时直接返回Inf,并在输出里标注「无交替」。别为了让结果好看强行加一个 0.001 的偏置,那会把整段控制区间的边界挪走。

另一种情况:温度项写成了tm - tn而公式要求tn - tm,符号反了会导致临界档距整体偏移,但不会报错。

5.3 现象:弧垂曲线在高温段突然下折

三次方程求根时取了错误的根。roots返回三个根,正常情况一正两负(或者一正两复),但数值误差可能让某个负根带上极小的虚部,被abs(imag) < 1e-9放过,然后min正好挑中它。

改法是先做两层过滤:虚部阈值收紧到 1e-12,再强制real(r) > 1e-3,最后用min而不是max。取最小正根的依据是三次方程在这里只有一个正根,取最小值纯粹是防御性写法。

还有一种下折来自弧垂公式用错了工况:最高温工况的比载应该用 γ1,如果误用了 γ7,曲线会在低温段异常抬高、高温段相对下折,看起来像下折,实际是整条线错位。

5.4 现象:比载放大一千倍,弧垂大得离谱

最经典的单位坑。m0在不同资料里有 kg/km 和 kg/m 两种写法,公式按 kg/km 推的,填了 kg/m 就小一千倍;反过来,A用 cm² 而不是 mm²,比载会小一百倍。这两种错误叠加时,反而可能得到一个「看起来还行」的中间值,最难查。

排查办法是记住自重比载的量级:常规钢芯铝绞线 γ1 在 0.03~0.04 N/(m·mm²) 之间,大截面导线偏小,小截面偏大。脱离这个区间就是单位问题,不用往下看。

应力侧同理,MPa 和 Pa 差六个数量级,E 填 65000 还是 6.5e10,取决于应力用什么单位。整套程序里 E、σ、γ 三者的单位必须自洽,最稳的做法是在入口处统一到 mm-N-MPa 体系,中间不做任何换算。

5.5 现象:覆冰工况的不平衡张力明显偏大

覆冰工况本该用 γ7(垂直加水平矢量合成),如果误用了 γ3(只有垂直分量),比载变小,算出的弧垂偏小,但挂点两侧弧垂差被放大,不平衡张力反而算大。这个错误方向反直觉,容易误导判断。

另一个来源是覆冰风速。用最大风速 30 m/s 去算覆冰风压,γ5 会大出好几倍,γ7 跟着虚高。覆冰工况的风速按规范单独取,常见 10 m/s,和最大风速不是一回事。

还有一种:不平衡张力的公式里 γ 用了综合比载,但弧垂差应该按垂直分量取。垂直线路的不平衡张力主要由垂直荷载差产生,水平风荷载不参与。这一条在程序里如果没分开处理,覆冰工况的结果会系统性偏大三成左右。

6. 进阶用法:把单次计算改成批量校核与临界档距表

单条线路算完,下一步多半是「换几种导线比一比」或者「把整条线的控制条件列成表」。这两件事都能在现有代码上小改完成,不用重写。

批量校核的思路是把导线参数做成结构体数组,外层再套一层循环:

cases = {'400/35', 434.3, 26.8, 1349, 103900; '300/40', 338.99, 23.94, 1133, 92220}; for c = 1:size(cases,1) g = calc_loads(cases{c,2}, cases{c,3}, cases{c,4}, 10, 30, 0.75, 1.1, 1.0); smax = 0.40 * cases{c,5} / cases{c,2}; % 后续主循环照旧, 结果按 c 索引存进三维数组 end

外层循环里唯一要跟着变的是smax,其余照抄。结果存成三维数组后,画图时用hold on叠在一起,一眼能看出哪种导线在大档距段应力更富裕。

临界档距表更简单,两两调用critical_span后排序,把有效区间列出来:

条件对临界档距 (m)有效区间
最低温 / 最大风约 3200~320 由最低温控制
最大风 / 年平均约 610320~610 由最大风控制
年平均 / 覆冰无交替610 以上由年平均控制

这张表的价值在于交付时能写清楚「本线路在 610 m 以上档距由年平均应力控制」,比只给一张曲线图专业得多。生成时注意剔除NaN和Inf,否则排序会乱。

我自己的习惯是每次改完参数,先不跑全量,挑 50 m、300 m、800 m 三个档距单点验证,确认三个控制条件各出现一次,再放开扫全档距。有一次偷懒跳过了这步,直接出了 200 页计算书,回头发现smax_i数组顺序和工况顺序错位,全部作废重跑,那半天算是白干。从那以后,三个特征档距的单点验证我每次都强制走一遍,再急也不省。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询