ocs-calculators 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +95 -0
- package/README.md +46 -40
- package/README_EN.md +131 -23
- package/dist/bvalue/index.cjs +2 -2
- package/dist/bvalue/index.d.cts +1 -1
- package/dist/bvalue/index.d.ts +1 -1
- package/dist/bvalue/index.js +1 -1
- package/dist/{chunk-D5F5ES2R.js → chunk-2HYOBL6M.js} +8 -6
- package/dist/chunk-2HYOBL6M.js.map +1 -0
- package/dist/{chunk-IUENDAAJ.js → chunk-53ONNIVL.js} +9 -3
- package/dist/chunk-53ONNIVL.js.map +1 -0
- package/dist/{chunk-X25CXRVE.cjs → chunk-DHJGNVCI.cjs} +8 -6
- package/dist/chunk-DHJGNVCI.cjs.map +1 -0
- package/dist/{chunk-3GREMF76.js → chunk-DN6BVPCQ.js} +3 -4
- package/dist/chunk-DN6BVPCQ.js.map +1 -0
- package/dist/{chunk-IQR3SRCD.js → chunk-ES3AQ52A.js} +43 -26
- package/dist/chunk-ES3AQ52A.js.map +1 -0
- package/dist/{chunk-J2UXRMTU.cjs → chunk-FHPRIOTM.cjs} +24 -25
- package/dist/chunk-FHPRIOTM.cjs.map +1 -0
- package/dist/{chunk-MTAYG3U2.cjs → chunk-FRYBXJCM.cjs} +43 -26
- package/dist/chunk-FRYBXJCM.cjs.map +1 -0
- package/dist/{chunk-KOSC6EA3.js → chunk-G5ZI24PW.js} +3 -2
- package/dist/chunk-G5ZI24PW.js.map +1 -0
- package/dist/{chunk-RVP3IU2L.cjs → chunk-NSVETJYA.cjs} +9 -3
- package/dist/chunk-NSVETJYA.cjs.map +1 -0
- package/dist/{chunk-5Q6IASB2.cjs → chunk-TXFBPGHR.cjs} +3 -2
- package/dist/{chunk-5Q6IASB2.cjs.map → chunk-TXFBPGHR.cjs.map} +1 -1
- package/dist/{chunk-4UU7WA7N.cjs → chunk-VPW4T6YN.cjs} +7 -6
- package/dist/chunk-VPW4T6YN.cjs.map +1 -0
- package/dist/{chunk-UO2PHBC3.js → chunk-XQBTMD7W.js} +24 -25
- package/dist/chunk-XQBTMD7W.js.map +1 -0
- package/dist/{chunk-IFVYGNT3.js → chunk-XRSWKYS6.js} +7 -6
- package/dist/chunk-XRSWKYS6.js.map +1 -0
- package/dist/{chunk-HXALVJ4G.cjs → chunk-YGTESFOQ.cjs} +3 -4
- package/dist/chunk-YGTESFOQ.cjs.map +1 -0
- package/dist/copper/index.cjs +2 -2
- package/dist/copper/index.d.cts +24 -4
- package/dist/copper/index.d.ts +24 -4
- package/dist/copper/index.js +1 -1
- package/dist/cross-span/index.cjs +2 -2
- package/dist/cross-span/index.d.cts +4 -1
- package/dist/cross-span/index.d.ts +4 -1
- package/dist/cross-span/index.js +1 -1
- package/dist/curve-stagger/index.cjs +2 -2
- package/dist/curve-stagger/index.d.cts +6 -5
- package/dist/curve-stagger/index.d.ts +6 -5
- package/dist/curve-stagger/index.js +1 -1
- package/dist/dropper/index.cjs +2 -2
- package/dist/dropper/index.d.cts +21 -13
- package/dist/dropper/index.d.ts +21 -13
- package/dist/dropper/index.js +1 -1
- package/dist/index.cjs +14 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -14
- package/dist/index.d.ts +11 -14
- package/dist/index.js +13 -11
- package/dist/index.js.map +1 -1
- package/dist/stroke/index.cjs +2 -2
- package/dist/stroke/index.js +1 -1
- package/dist/voltage-drop/index.cjs +2 -2
- package/dist/voltage-drop/index.d.cts +6 -0
- package/dist/voltage-drop/index.d.ts +6 -0
- package/dist/voltage-drop/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-3GREMF76.js.map +0 -1
- package/dist/chunk-4UU7WA7N.cjs.map +0 -1
- package/dist/chunk-D5F5ES2R.js.map +0 -1
- package/dist/chunk-HXALVJ4G.cjs.map +0 -1
- package/dist/chunk-IFVYGNT3.js.map +0 -1
- package/dist/chunk-IQR3SRCD.js.map +0 -1
- package/dist/chunk-IUENDAAJ.js.map +0 -1
- package/dist/chunk-J2UXRMTU.cjs.map +0 -1
- package/dist/chunk-KOSC6EA3.js.map +0 -1
- package/dist/chunk-MTAYG3U2.cjs.map +0 -1
- package/dist/chunk-RVP3IU2L.cjs.map +0 -1
- package/dist/chunk-UO2PHBC3.js.map +0 -1
- package/dist/chunk-X25CXRVE.cjs.map +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
COPPER_ALPHA_PER_DEG_C,
|
|
2
3
|
resistanceAtTempOhmPerKm
|
|
3
4
|
} from "./chunk-YHDO6XVM.js";
|
|
4
5
|
|
|
@@ -8,7 +9,8 @@ var voltageDropMeta = {
|
|
|
8
9
|
nameEn: "Voltage Drop Check",
|
|
9
10
|
summary: "\u6309\u6E29\u5EA6\u4FEE\u6B63\u540E\u7684\u5355\u4F4D\u7535\u963B\u8BA1\u7B97\u4F9B\u7535\u81C2\u7535\u538B\u635F\u5931 \u0394U \u4E0E\u672B\u7AEF\u7535\u538B\uFF0C\u7528\u4E8E\u4F9B\u7535\u81C2\u957F\u5EA6\u4E0E\u5BFC\u7EBF\u622A\u9762\u6821\u6838\u3002",
|
|
10
11
|
formula: [
|
|
11
|
-
"\u5355\u4F4D\u7535\u963B\u6E29\u5EA6\u4FEE\u6B63\uFF1Ar_T = r\u2082\u2080\xB7[1 + \u03B1\xB7(T \u2212 20)]\
|
|
12
|
+
"\u5355\u4F4D\u7535\u963B\u6E29\u5EA6\u4FEE\u6B63\uFF1Ar_T = r\u2082\u2080\xB7[1 + \u03B1\xB7(T \u2212 20)]\uFF0C\u03B1 \u987B\u4E0E r\u2082\u2080 \u5BF9\u5E94\u6750\u8D28\u914D\u5957",
|
|
13
|
+
"\u6E29\u4FEE\u6309\u5404\u6750\u8D28\u771F\u503C \u03B1\uFF08TB/T 2809-2026 6.10\uFF09\uFF1A\u94F6 0.00380 / \u9521 0.00320 / \u9541 0.00270 / \u94EC\u9506 0.00290\uFF1B\u7F3A\u7701\u7EAF\u94DC 0.00393 \u4F9B\u65E0\u578B\u53F7\u573A\u666F",
|
|
12
14
|
"\u5E76\u8054 n \u8DEF\u65F6\uFF1Ar_T / n",
|
|
13
15
|
"\u7535\u538B\u635F\u5931\uFF1A\u0394U = I \xB7 r_T \xB7 L\uFF08r_T \u5355\u4F4D \u03A9/km\uFF0CL \u5355\u4F4D km\uFF09",
|
|
14
16
|
"\u672B\u7AEF\u7535\u538B\uFF1AU_end = U\u2080 \u2212 \u0394U\uFF1B\u538B\u964D\u7387 = \u0394U / U\u2080"
|
|
@@ -47,7 +49,11 @@ function voltageDropCheck(input) {
|
|
|
47
49
|
throw new RangeError(`\u5E76\u8054\u5BFC\u7EBF\u6570\u5FC5\u987B\u4E3A\u6B63\u6574\u6570\uFF0C\u6536\u5230 ${parallelCount}`);
|
|
48
50
|
}
|
|
49
51
|
const minEndVoltageV = input.minEndVoltageV ?? DEFAULT_MIN_END_VOLTAGE_V;
|
|
50
|
-
const rT = resistanceAtTempOhmPerKm(
|
|
52
|
+
const rT = resistanceAtTempOhmPerKm(
|
|
53
|
+
r20OhmPerKm,
|
|
54
|
+
input.tempDegC ?? 25,
|
|
55
|
+
input.alphaPerDegC ?? COPPER_ALPHA_PER_DEG_C
|
|
56
|
+
) / parallelCount;
|
|
51
57
|
const voltageDropV = currentA * rT * feederLengthKm;
|
|
52
58
|
const endVoltageV = busVoltageV - voltageDropV;
|
|
53
59
|
return {
|
|
@@ -64,4 +70,4 @@ export {
|
|
|
64
70
|
DEFAULT_MIN_END_VOLTAGE_V,
|
|
65
71
|
voltageDropCheck
|
|
66
72
|
};
|
|
67
|
-
//# sourceMappingURL=chunk-
|
|
73
|
+
//# sourceMappingURL=chunk-53ONNIVL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/voltage-drop/meta.ts","../src/voltage-drop/index.ts"],"sourcesContent":["import type { CalculatorMeta } from '../types';\n\nexport const voltageDropMeta: CalculatorMeta = {\n name: '电压降校核',\n nameEn: 'Voltage Drop Check',\n summary:\n '按温度修正后的单位电阻计算供电臂电压损失 ΔU 与末端电压,用于供电臂长度与导线截面校核。',\n formula: [\n '单位电阻温度修正:r_T = r₂₀·[1 + α·(T − 20)],α 须与 r₂₀ 对应材质配套',\n '温修按各材质真值 α(TB/T 2809-2026 6.10):银 0.00380 / 锡 0.00320 / 镁 0.00270 / 铬锆 0.00290;缺省纯铜 0.00393 供无型号场景',\n '并联 n 路时:r_T / n',\n '电压损失:ΔU = I · r_T · L(r_T 单位 Ω/km,L 单位 km)',\n '末端电压:U_end = U₀ − ΔU;压降率 = ΔU / U₀',\n ],\n references: [\n '依据本站 供电计算 / 电气设计 条目',\n '末端电压限值:25kV 体系常按 20kV 掌握;实际限值以设计文件与供电计算书为准',\n ],\n scope: [\n '母线电压 U₀:20000 ~ 30000 V',\n '持续电流 I:10 ~ 3000 A',\n '单位电阻 r₂₀:0.05 ~ 1 Ω/km',\n '供电臂等效长度 L:1 ~ 60 km',\n '环境温度:−40 ~ 80 ℃',\n '单回路集中负荷模型,未考虑负荷沿供电臂分布与再生制动',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/voltage-drop/',\n};\n","export { voltageDropMeta } from './meta';\n\n/** 25kV 体系常用的末端电压下限,V */\nexport const DEFAULT_MIN_END_VOLTAGE_V = 20000;\n\n// 电阻温度修正统一来自 src/common/resistance.ts(copper 与 voltage-drop 共用)\nimport { COPPER_ALPHA_PER_DEG_C, resistanceAtTempOhmPerKm } from '../common/resistance';\n\nexport interface VoltageDropInput {\n /** 变电所母线电压 U₀,V */\n readonly busVoltageV: number;\n /** 持续电流 I,A */\n readonly currentA: number;\n /** 20℃ 单位电阻 r₂₀,Ω/km */\n readonly r20OhmPerKm: number;\n /** 供电臂等效长度 L,km */\n readonly feederLengthKm: number;\n /** 环境温度 T,℃。缺省 25 */\n readonly tempDegC?: number;\n /** 并联导线数。缺省 1 */\n readonly parallelCount?: number;\n /** 末端最低允许电压,V。缺省 20000 */\n readonly minEndVoltageV?: number;\n /**\n * 电阻温度系数 α,1/℃(2026-09-19 实装,修复批 D)。\n * 须与 r₂₀ 对应材质配套(TB/T 2809-2026 6.10):银 0.00380 / 锡 0.00320 /\n * 镁 0.00270 / 铬锆 0.00290。缺省纯铜 0.00393(供无型号场景)。\n */\n readonly alphaPerDegC?: number;\n}\n\nexport interface VoltageDropResult {\n /** 温度修正(并含并联折减)后的单位电阻 r_T,Ω/km */\n readonly rTOhmPerKm: number;\n /** 电压损失 ΔU,V */\n readonly voltageDropV: number;\n /** 末端电压 U_end,V */\n readonly endVoltageV: number;\n /** 压降率,% */\n readonly dropPercent: number;\n /** 末端电压是否满足要求 */\n readonly passes: boolean;\n}\n\n/**\n * 电压降校核:ΔU = I·r_T·L(并联 n 路时 r_T/n),U_end = U₀ − ΔU。\n */\nexport function voltageDropCheck(input: VoltageDropInput): VoltageDropResult {\n const { busVoltageV, currentA, r20OhmPerKm, feederLengthKm } = input;\n\n if (!(busVoltageV > 0)) {\n throw new RangeError(`母线电压必须为正数,收到 ${busVoltageV} V`);\n }\n if (!(currentA > 0)) {\n throw new RangeError(`持续电流必须为正数,收到 ${currentA} A`);\n }\n if (!(feederLengthKm > 0)) {\n throw new RangeError(`供电臂长度必须为正数,收到 ${feederLengthKm} km`);\n }\n\n const parallelCount = input.parallelCount ?? 1;\n if (!(parallelCount > 0) || !Number.isInteger(parallelCount)) {\n throw new RangeError(`并联导线数必须为正整数,收到 ${parallelCount}`);\n }\n\n const minEndVoltageV = input.minEndVoltageV ?? DEFAULT_MIN_END_VOLTAGE_V;\n\n const rT =\n resistanceAtTempOhmPerKm(\n r20OhmPerKm,\n input.tempDegC ?? 25,\n input.alphaPerDegC ?? COPPER_ALPHA_PER_DEG_C,\n ) / parallelCount;\n const voltageDropV = currentA * rT * feederLengthKm;\n const endVoltageV = busVoltageV - voltageDropV;\n\n return {\n rTOhmPerKm: rT,\n voltageDropV,\n endVoltageV,\n dropPercent: (voltageDropV / busVoltageV) * 100,\n passes: endVoltageV >= minEndVoltageV,\n };\n}\n"],"mappings":";;;;;;AAEO,IAAM,kBAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SACE;AAAA,EACF,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV;AAAA,IACA;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY;AAAA,EACZ,QAAQ;AACV;;;ACzBO,IAAM,4BAA4B;AA4ClC,SAAS,iBAAiB,OAA4C;AAC3E,QAAM,EAAE,aAAa,UAAU,aAAa,eAAe,IAAI;AAE/D,MAAI,EAAE,cAAc,IAAI;AACtB,UAAM,IAAI,WAAW,4EAAgB,WAAW,IAAI;AAAA,EACtD;AACA,MAAI,EAAE,WAAW,IAAI;AACnB,UAAM,IAAI,WAAW,4EAAgB,QAAQ,IAAI;AAAA,EACnD;AACA,MAAI,EAAE,iBAAiB,IAAI;AACzB,UAAM,IAAI,WAAW,kFAAiB,cAAc,KAAK;AAAA,EAC3D;AAEA,QAAM,gBAAgB,MAAM,iBAAiB;AAC7C,MAAI,EAAE,gBAAgB,MAAM,CAAC,OAAO,UAAU,aAAa,GAAG;AAC5D,UAAM,IAAI,WAAW,wFAAkB,aAAa,EAAE;AAAA,EACxD;AAEA,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,QAAM,KACJ;AAAA,IACE;AAAA,IACA,MAAM,YAAY;AAAA,IAClB,MAAM,gBAAgB;AAAA,EACxB,IAAI;AACN,QAAM,eAAe,WAAW,KAAK;AACrC,QAAM,cAAc,cAAc;AAElC,SAAO;AAAA,IACL,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA,aAAc,eAAe,cAAe;AAAA,IAC5C,QAAQ,eAAe;AAAA,EACzB;AACF;","names":[]}
|
|
@@ -15,7 +15,8 @@ var crossSpanMeta = {
|
|
|
15
15
|
references: [
|
|
16
16
|
"\u6559\u6750\u8D1F\u8F7D\u8BA1\u7B97\u6CD5\uFF08\u8F6F\u6A2A\u8DE8\uFF09\uFF0C\u8282\u70B9\u8D1F\u8F7D\u6309\u5927\u7AD9 65 kg / \u5C0F\u7AD9 45 kg \u53D6\u503C",
|
|
17
17
|
"\u629B\u7269\u7EBF\u8FD1\u4F3C\uFF0C\u9002\u7528\u4E8E\u5F1B\u8DE8\u6BD4 f/L \u2264 1/10 \u5DE5\u51B5",
|
|
18
|
-
"2026-09-14 \u7AD9\u957F\u63D0\u4F9B\u6587\u672C\u6838\u5BF9\uFF08\u8D1F\u8F7D\u8BA1\u7B97\u6CD5\uFF09"
|
|
18
|
+
"2026-09-14 \u7AD9\u957F\u63D0\u4F9B\u6587\u672C\u6838\u5BF9\uFF08\u8D1F\u8F7D\u8BA1\u7B97\u6CD5\uFF09",
|
|
19
|
+
"2026-09-19 \u4E0E\u7AD9\u70B9\u9875\u9762\u5B9E\u73B0\u5BF9\u9F50\uFF1A\u8282\u70B9\u5BF9\u79F0\u5E03\u8BBE x\u2081=(L\u2212(N\u22121)a)/2\u3001x_i=x\u2081+(i\u22121)a\uFF0C\u7EA6\u675F L>(N\u22121)a"
|
|
19
20
|
],
|
|
20
21
|
scope: [
|
|
21
22
|
"\u8282\u70B9\u6570 N\uFF1A2 ~ 20",
|
|
@@ -76,16 +77,17 @@ function crossSpanAnalyze(input) {
|
|
|
76
77
|
if (!(P >= 0)) {
|
|
77
78
|
throw new RangeError(`\u7EDD\u7F18\u5B50\u4E32\u5206\u644A\u8D1F\u8F7D\u4E0D\u80FD\u4E3A\u8D1F\uFF0C\u6536\u5230 ${P} kg`);
|
|
78
79
|
}
|
|
79
|
-
const
|
|
80
|
-
if (!(
|
|
80
|
+
const spanNeed = (nodeCount - 1) * a;
|
|
81
|
+
if (!(L > spanNeed)) {
|
|
81
82
|
throw new RangeError(
|
|
82
|
-
`\
|
|
83
|
+
`\u8DE8\u8DDD\u5E94\u5927\u4E8E (N\u22121)\xD7a = ${spanNeed} m\uFF0C\u6536\u5230 L = ${L} m\uFF0C\u8BF7\u51CF\u5C0F\u8282\u70B9\u6570\u6216\u80A1\u9053\u95F4\u8DDD`
|
|
83
84
|
);
|
|
84
85
|
}
|
|
85
86
|
const Q = J + n * q0 * a + P + gc * a;
|
|
86
87
|
const nodeX = [];
|
|
88
|
+
const x1 = (L - spanNeed) / 2;
|
|
87
89
|
for (let i = 0; i < nodeCount; i++) {
|
|
88
|
-
nodeX.push(
|
|
90
|
+
nodeX.push(x1 + i * a);
|
|
89
91
|
}
|
|
90
92
|
const nodeQ = nodeX.map(() => Q);
|
|
91
93
|
const nodeSag = nodeX.map((x) => {
|
|
@@ -160,4 +162,4 @@ function crossSpanAnalyze(input) {
|
|
|
160
162
|
|
|
161
163
|
|
|
162
164
|
exports.crossSpanMeta = crossSpanMeta; exports.crossSpanAnalyze = crossSpanAnalyze;
|
|
163
|
-
//# sourceMappingURL=chunk-
|
|
165
|
+
//# sourceMappingURL=chunk-DHJGNVCI.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-DHJGNVCI.cjs","../src/cross-span/meta.ts","../src/cross-span/index.ts"],"names":[],"mappings":"AAAA;ACEO,IAAM,cAAA,EAAgC;AAAA,EAC3C,IAAA,EAAM,4CAAA;AAAA,EACN,MAAA,EAAQ,kCAAA;AAAA,EACR,OAAA,EACE,4UAAA;AAAA,EACF,OAAA,EAAS;AAAA,IACP,sIAAA;AAAA,IACA,iQAAA;AAAA,IACA,+MAAA;AAAA,IACA,qHAAA;AAAA,IACA,0EAAA;AAAA,IACA,8HAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,kKAAA;AAAA,IACA,uGAAA;AAAA,IACA,uGAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,KAAA,EAAO;AAAA,IACL,kCAAA;AAAA,IACA,yCAAA;AAAA,IACA,+BAAA;AAAA,IACA,4CAAA;AAAA,IACA,wEAAA;AAAA,IACA,uCAAA;AAAA,IACA,mFAAA;AAAA,IACA,2HAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY,sKAAA;AAAA,EACZ,MAAA,EAAQ;AACV,CAAA;ADDA;AACA;AEiCO,SAAS,gBAAA,CAAiB,KAAA,EAA4C;AAC3E,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,QAAA,EAAU,CAAA;AAAA,IACV,UAAA,EAAY,CAAA;AAAA,IACZ,iBAAA,EAAmB,EAAA;AAAA,IACnB,OAAA,EAAS,IAAA;AAAA,IACT,UAAA,EAAY,CAAA;AAAA,IACZ,sBAAA,EAAwB,EAAA;AAAA,IACxB,gBAAA,EAAkB,CAAA;AAAA,IAClB,iBAAA,EAAmB,EAAA;AAAA,IACnB,sBAAA,EAAwB;AAAA,EAC1B,EAAA,EAAI,KAAA;AAEJ,EAAA,GAAA,CAAI,CAAC,MAAA,CAAO,SAAA,CAAU,SAAS,EAAA,GAAK,CAAA,CAAE,UAAA,GAAa,CAAA,CAAA,EAAI;AACrD,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,wFAAA,EAAqB,SAAS,CAAA,CAAA;AACrD,EAAA;AACc,EAAA;AAC8B,IAAA;AAC5C,EAAA;AACc,EAAA;AAC4B,IAAA;AAC1C,EAAA;AACyB,EAAA;AACF,IAAA;AACvB,EAAA;AACiB,EAAA;AAC8B,IAAA;AAC/C,EAAA;AACe,EAAA;AAC6B,IAAA;AAC5C,EAAA;AACgB,EAAA;AACkC,IAAA;AAClD,EAAA;AACc,EAAA;AAC8B,IAAA;AAC5C,EAAA;AACgB,EAAA;AACiC,IAAA;AACjD,EAAA;AACe,EAAA;AACiC,IAAA;AAChD,EAAA;AAGmC,EAAA;AACd,EAAA;AACT,IAAA;AACiC,MAAA;AAC3C,IAAA;AACF,EAAA;AAEoC,EAAA;AAEX,EAAA;AACG,EAAA;AACQ,EAAA;AACb,IAAA;AACvB,EAAA;AAEyC,EAAA;AACE,EAAA;AACZ,IAAA;AACmB,IAAA;AACjD,EAAA;AAGgC,EAAA;AACO,EAAA;AAClB,IAAA;AACI,IAAA;AACkB,IAAA;AACE,MAAA;AAC5C,IAAA;AACe,IAAA;AACyB,IAAA;AAC1C,EAAA;AAGkB,EAAA;AACE,EAAA;AACsB,EAAA;AACZ,IAAA;AAC9B,EAAA;AACuC,EAAA;AAEH,EAAA;AACI,EAAA;AACQ,EAAA;AAClB,IAAA;AAC9B,EAAA;AACqB,EAAA;AAC+B,EAAA;AAEnC,EAAA;AAC4B,EAAA;AACA,EAAA;AAGjC,EAAA;AACwB,EAAA;AACjB,IAAA;AACA,IAAA;AACuB,IAAA;AACJ,MAAA;AACpC,IAAA;AACyB,IAAA;AAC3B,EAAA;AACqB,EAAA;AACe,EAAA;AACjB,IAAA;AACA,IAAA;AACuB,IAAA;AACJ,MAAA;AACpC,IAAA;AACY,IAAA;AACU,MAAA;AACtB,IAAA;AACF,EAAA;AACmC,EAAA;AAEjB,EAAA;AACoB,EAAA;AAEoB,EAAA;AAEnD,EAAA;AACL,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACF;AFhD8H;AACA;AACA;AACA;AACA","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-DHJGNVCI.cjs","sourcesContent":[null,"import type { CalculatorMeta } from '../types';\n\nexport const crossSpanMeta: CalculatorMeta = {\n name: '软横跨负载计算',\n nameEn: 'Soft Cross-Span Load Calculation',\n summary:\n '按负载计算法(教材口径)计算软横跨各节点垂直负载、抛物线节点弛度、水平张力与总索长,用于接触网软横跨设计校核。',\n formula: [\n '节点垂直负载(均匀间距简化):Q_i = J + n·q₀·a + P + g_c·a',\n '节点弛度(抛物线分布,最低点在 l₁):f_i = f_max·(1 − ((x_i−l₁)/c_i)²),c_i = l₁(x_i≤l₁)或 L−l₁(x_i>l₁)',\n '水平张力(精确式):H = M(l₁)/f_max,M(l₁) 为悬挂负载对最低点截面(简支梁)弯矩',\n '水平张力(简化式对照):H′ = ΣQ_i·l₁/(2·f_max)',\n '分段索长:b_i ≈ a + (f_{i+1}−f_i)²/(2a)',\n '支柱锚固段:b_end = x₁ + f₁²/(2·x₁),支柱端弛度为 0',\n '总索长:Σb = b_endL + Σb_i + b_endR',\n ],\n references: [\n '教材负载计算法(软横跨),节点负载按大站 65 kg / 小站 45 kg 取值',\n '抛物线近似,适用于弛跨比 f/L ≤ 1/10 工况',\n '2026-09-14 站长提供文本核对(负载计算法)',\n '2026-09-19 与站点页面实现对齐:节点对称布设 x₁=(L−(N−1)a)/2、x_i=x₁+(i−1)a,约束 L>(N−1)a',\n ],\n scope: [\n '节点数 N:2 ~ 20',\n '股道间距 a:4 ~ 8 m',\n '跨距 L:15 ~ 80 m',\n '节点负载 J:45 / 65 kg',\n '接触悬挂单位重 q₀:1.0 ~ 3.0 kg/m',\n '悬挂组数 n:1 ~ 3',\n '横承索 + 定位索单位重 g_c:0.2 ~ 1.5 kg/m',\n '最大弛度 f_max:1 ~ 6 m,须小于最低点两侧悬挂高度',\n '未计入温度对索长与张力的影响、横承索弧垂非线性修正',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/cross-span/',\n};\n","export { crossSpanMeta } from './meta';\n\n/** 软横跨负载计算(负载计算法)的输入参数 */\nexport interface CrossSpanNodeInput {\n /** 股道悬挂节点数 N */\n readonly nodeCount: number;\n /** 股道间距 a,m(节点对称均匀布设,x₁=(L−(N−1)a)/2) */\n readonly spacingM: number;\n /** 横承索跨距 L,m */\n readonly spanTotalM: number;\n /** 最低点距左支柱距离 l₁,m */\n readonly lowPointFromLeftM: number;\n /** 最大弛度 f_max,m(最低点弛度) */\n readonly maxSagM: number;\n /** 节点负载 J,kg(大站 65 / 小站 45) */\n readonly nodeLoadKg: number;\n /** 接触悬挂单位重 q₀,kg/m */\n readonly suspensionWeightKgPerM: number;\n /** 每节点悬挂组数 n */\n readonly suspensionGroups: number;\n /** 横承索 + 定位索单位重 g_c,kg/m */\n readonly cableWeightKgPerM: number;\n /** 绝缘子串分摊负载 P,kg */\n readonly insulatorDistributedKg: number;\n}\n\n/** 软横跨负载计算结果 */\nexport interface CrossSpanResult {\n /** 各节点距左支柱距离 x_i,m */\n readonly nodeX: readonly number[];\n /** 各节点垂直负载 Q_i,kg */\n readonly nodeQ: readonly number[];\n /** 各节点弛度 f_i,m */\n readonly nodeSag: readonly number[];\n /** 相邻节点间分段索长 b_i,m(共 N−1 段) */\n readonly segmentLength: readonly number[];\n /** 左端支柱锚固段索长,m */\n readonly endLeftM: number;\n /** 右端支柱锚固段索长,m */\n readonly endRightM: number;\n /** 总索长 Σb,m */\n readonly totalLengthM: number;\n /** 水平张力(力矩平衡精确式)H = M(l₁)/f_max,kg */\n readonly horizontalForceKg: number;\n /** 水平张力(简化式对照)H' = ΣQ_i·l₁/(2·f_max),kg */\n readonly horizontalForceSimpleKg: number;\n /** 总垂直负载 ΣQ,kg */\n readonly totalLoadKg: number;\n}\n\n/**\n * 软横跨负载计算(负载计算法,教材口径)。\n *\n * 节点对称布设(与站点 /calculator/cross-span/ 页面实现一致,2026-09-19 对齐):\n * 约束 L > (N−1)·a;x₁ = (L−(N−1)·a)/2,x_i = x₁+(i−1)·a\n *\n * 节点垂直负载(均匀间距简化):\n * Q_i = J + n·q₀·a + P + g_c·a\n *\n * 节点弛度(抛物线分布,最低点在 l₁):\n * f_i = f_max·(1 − ((x_i−l₁)/c_i)²),c_i = l₁(x_i≤l₁)或 L−l₁(x_i>l₁)\n *\n * 水平张力:精确式 H = M(l₁)/f_max,其中 M(l₁) 为悬挂负载对最低点截面的\n * 简支梁弯矩;简化式对照 H' = ΣQ_i·l₁/(2·f_max)。\n *\n * 分段索长:b_i ≈ a + (f_{i+1}−f_i)²/(2a);两端支柱锚固段\n * b_end = x₁ + f₁²/(2·x₁)(支柱端弛度为 0)。\n */\nexport function crossSpanAnalyze(input: CrossSpanNodeInput): CrossSpanResult {\n const {\n nodeCount,\n spacingM: a,\n spanTotalM: L,\n lowPointFromLeftM: l1,\n maxSagM: fMax,\n nodeLoadKg: J,\n suspensionWeightKgPerM: q0,\n suspensionGroups: n,\n cableWeightKgPerM: gc,\n insulatorDistributedKg: P,\n } = input;\n\n if (!Number.isInteger(nodeCount) || !(nodeCount >= 2)) {\n throw new RangeError(`节点数须为不小于 2 的整数,收到 ${nodeCount}`);\n }\n if (!(a > 0)) {\n throw new RangeError(`股道间距必须为正数,收到 ${a} m`);\n }\n if (!(L > 0)) {\n throw new RangeError(`跨距必须为正数,收到 ${L} m`);\n }\n if (!(l1 > 0 && l1 < L)) {\n throw new RangeError(`最低点距左支柱距离须在 (0, L) 内,收到 ${l1} m`);\n }\n if (!(fMax > 0)) {\n throw new RangeError(`最大弛度必须为正数,收到 ${fMax} m`);\n }\n if (!(J >= 0)) {\n throw new RangeError(`节点负载不能为负,收到 ${J} kg`);\n }\n if (!(q0 >= 0)) {\n throw new RangeError(`接触悬挂单位重不能为负,收到 ${q0} kg/m`);\n }\n if (!(n > 0)) {\n throw new RangeError(`每节点悬挂组数须为正数,收到 ${n}`);\n }\n if (!(gc >= 0)) {\n throw new RangeError(`横承索单位重不能为负,收到 ${gc} kg/m`);\n }\n if (!(P >= 0)) {\n throw new RangeError(`绝缘子串分摊负载不能为负,收到 ${P} kg`);\n }\n\n // 节点对称布设(站点页面口径):L > (N−1)·a,x₁ = (L−(N−1)·a)/2,x_i = x₁+(i−1)·a\n const spanNeed = (nodeCount - 1) * a;\n if (!(L > spanNeed)) {\n throw new RangeError(\n `跨距应大于 (N−1)×a = ${spanNeed} m,收到 L = ${L} m,请减小节点数或股道间距`,\n );\n }\n\n const Q = J + n * q0 * a + P + gc * a;\n\n const nodeX: number[] = [];\n const x1 = (L - spanNeed) / 2;\n for (let i = 0; i < nodeCount; i++) {\n nodeX.push(x1 + i * a);\n }\n\n const nodeQ: number[] = nodeX.map(() => Q);\n const nodeSag: number[] = nodeX.map((x) => {\n const c = x <= l1 ? l1 : L - l1;\n return fMax * (1 - ((x - l1) / c) * ((x - l1) / c));\n });\n\n // 相邻节点间分段索长 b_i = a + (f_{i+1}−f_i)²/(2a)\n const segmentLength: number[] = [];\n for (let i = 0; i < nodeCount - 1; i++) {\n const fi = nodeSag[i];\n const fj = nodeSag[i + 1];\n if (fi === undefined || fj === undefined) {\n throw new Error(`缺少节点 ${i} 或 ${i + 1} 的弛度`);\n }\n const d = fj - fi;\n segmentLength.push(a + (d * d) / (2 * a));\n }\n\n // 两端支柱锚固段(支柱端弛度为 0)\n const x0 = nodeX[0];\n const f0 = nodeSag[0];\n if (x0 === undefined || f0 === undefined) {\n throw new Error('缺少首节点位置或弛度');\n }\n const endLeftM = x0 + (f0 * f0) / (2 * x0);\n\n const xLast = nodeX[nodeX.length - 1];\n const fLast = nodeSag[nodeSag.length - 1];\n if (xLast === undefined || fLast === undefined) {\n throw new Error('缺少末节点位置或弛度');\n }\n const gapRight = L - xLast;\n const endRightM = gapRight + (fLast * fLast) / (2 * gapRight);\n\n let segmentSum = 0;\n for (const b of segmentLength) segmentSum += b;\n const totalLengthM = endLeftM + segmentSum + endRightM;\n\n // 水平张力(力矩平衡精确式):以左右支柱为简支梁,求最低点截面弯矩\n let rLeft = 0;\n for (let i = 0; i < nodeCount; i++) {\n const x = nodeX[i];\n const q = nodeQ[i];\n if (x === undefined || q === undefined) {\n throw new Error(`缺少节点 ${i} 的位置或负载`);\n }\n rLeft += (q * (L - x)) / L;\n }\n let moment = rLeft * l1;\n for (let i = 0; i < nodeCount; i++) {\n const x = nodeX[i];\n const q = nodeQ[i];\n if (x === undefined || q === undefined) {\n throw new Error(`缺少节点 ${i} 的位置或负载`);\n }\n if (x < l1) {\n moment -= q * (l1 - x);\n }\n }\n const horizontalForceKg = moment / fMax;\n\n let totalLoadKg = 0;\n for (const q of nodeQ) totalLoadKg += q;\n\n const horizontalForceSimpleKg = (totalLoadKg * l1) / (2 * fMax);\n\n return {\n nodeX,\n nodeQ,\n nodeSag,\n segmentLength,\n endLeftM,\n endRightM,\n totalLengthM,\n horizontalForceKg,\n horizontalForceSimpleKg,\n totalLoadKg,\n };\n}\n"]}
|
|
@@ -6,7 +6,7 @@ var bvalueMeta = {
|
|
|
6
6
|
formula: [
|
|
7
7
|
"b_x = b_min + n\xB7\u03B1\xB7L\xB7(t_max \u2212 t_x)",
|
|
8
8
|
"\u5760\u7823\u4FA7\u884C\u7A0B\u53D8\u5316 n\xB7\u0394L\uFF0C\u0394L = \u03B1\xB7L\xB7(t_max \u2212 t_x)",
|
|
9
|
-
"\u5760\u7823\
|
|
9
|
+
"\u5760\u7823\u603B\u8D28\u91CF W = T\xB71000/(n\xB79.81) kg\uFF08T \u4E3A\u5F20\u529B kN\uFF0Cn \u4E3A\u4F20\u52A8\u6BD4\u500D\u6570\uFF1B\u4E0E\u7AD9\u70B9\u6362\u7B97\u53E3\u5F84\u4E00\u81F4\uFF09"
|
|
10
10
|
],
|
|
11
11
|
references: [
|
|
12
12
|
"\u9650\u503C\u53E3\u5F84\uFF1A\u8FD0\u884C \u2265200 mm\u3001\u504F\u5DEE \xB1100 mm\uFF08TB 10421-2018 \u7B2C 5.22.3 \u6761\uFF09",
|
|
@@ -31,8 +31,7 @@ function bValue(params) {
|
|
|
31
31
|
let weightKg = null;
|
|
32
32
|
if (tensionKN !== void 0) {
|
|
33
33
|
if (!(tensionKN > 0)) throw new RangeError("\u989D\u5B9A\u5F20\u529B\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + tensionKN);
|
|
34
|
-
|
|
35
|
-
weightKg = WKN * 102;
|
|
34
|
+
weightKg = tensionKN * 1e3 / (ratio * 9.81);
|
|
36
35
|
}
|
|
37
36
|
return { bMM, stretchMM, strokeMM, weightKg };
|
|
38
37
|
}
|
|
@@ -41,4 +40,4 @@ export {
|
|
|
41
40
|
bvalueMeta,
|
|
42
41
|
bValue
|
|
43
42
|
};
|
|
44
|
-
//# sourceMappingURL=chunk-
|
|
43
|
+
//# sourceMappingURL=chunk-DN6BVPCQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/bvalue/meta.ts","../src/bvalue/index.ts"],"sourcesContent":["import type { CalculatorMeta } from '../types';\n\nexport const bvalueMeta: CalculatorMeta = {\n name: 'b值(坠砣高度)安装曲线',\n nameEn: 'B-Value (Balance Weight) Installation Curve',\n summary: '按 b_x = b_min + n·α·L·(t_max − t_x) 计算任一温度下坠砣底面距地面高度,用于坠砣安装与检调定位。',\n formula: [\n 'b_x = b_min + n·α·L·(t_max − t_x)',\n '坠砣侧行程变化 n·ΔL,ΔL = α·L·(t_max − t_x)',\n '坠砣总质量 W = T·1000/(n·9.81) kg(T 为张力 kN,n 为传动比倍数;与站点换算口径一致)',\n ],\n references: [\n '限值口径:运行 ≥200 mm、偏差 ±100 mm(TB 10421-2018 第 5.22.3 条)',\n '设计 ≥300 mm(期刊引铁运〔2007〕69 号)',\n '传动比倍数 n:1:3 即 n=3',\n ],\n scope: ['b_min:50~1000 mm', '半锚段 L:50000~900000 mm', '温度差:0~100 ℃', '传动比:2~4'],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/bvalue/',\n};\n","export { bvalueMeta } from './meta';\n\n/** b 值(坠砣底面距地面高度)计算参数。单位:长度 mm、温度 ℃、张力 kN。 */\nexport interface BValueInput {\n /** 设计最小 b 值 b_min,mm(最高温度时坠砣最低位) */\n readonly minBMM: number;\n /** 传动比倍数 n(1:3 取 3) */\n readonly ratio: number;\n /** 线膨胀系数 α,1/℃(铜合金约 1.7e-5) */\n readonly expansionCoeff: number;\n /** 半锚段长度 L,mm */\n readonly halfSpanMM: number;\n /** 最高工作温度 t_max,℃ */\n readonly maxTempC: number;\n /** 安装/检调温度 t_x,℃ */\n readonly targetTempC: number;\n /** 额定张力 T,kN(用于坠砣重量换算) */\n readonly tensionKN?: number;\n}\n\nexport interface BValueResult {\n /** 当前温度 b 值 b_x,mm */\n readonly bMM: number;\n /** 温度伸缩量 ΔL = α·L·(t_max − t_x),mm */\n readonly stretchMM: number;\n /** 坠砣侧行程变化 n·ΔL,mm */\n readonly strokeMM: number;\n /** 坠砣总质量 W = T·1000/(n·9.81),kg(对齐站点 /calculator/bvalue/ 换算口径) */\n readonly weightKg: number | null;\n}\n\n/** b 值计算:b_x = b_min + n·α·L·(t_max − t_x) */\nexport function bValue(params: BValueInput): BValueResult {\n const { minBMM, ratio, expansionCoeff, halfSpanMM, maxTempC, targetTempC, tensionKN } = params;\n if (!(minBMM >= 0)) throw new RangeError('b_min 不能为负,收到 ' + minBMM);\n if (!(ratio > 0)) throw new RangeError('传动比倍数必须为正,收到 ' + ratio);\n if (!(halfSpanMM > 0)) throw new RangeError('半锚段长度必须为正,收到 ' + halfSpanMM);\n const dt = maxTempC - targetTempC;\n const stretchMM = expansionCoeff * halfSpanMM * dt;\n const strokeMM = ratio * stretchMM;\n const bMM = minBMM + strokeMM;\n let weightKg: number | null = null;\n if (tensionKN !== undefined) {\n if (!(tensionKN > 0)) throw new RangeError('额定张力必须为正,收到 ' + tensionKN);\n // W = T·1000/(n·9.81):kN→N 后按 g=9.81 m/s² 折算质量(站点页面同式)\n weightKg = (tensionKN * 1000) / (ratio * 9.81);\n }\n return { bMM, stretchMM, strokeMM, weightKg };\n}\n"],"mappings":";AAEO,IAAM,aAA6B;AAAA,EACxC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,OAAO,CAAC,yBAAoB,6CAAyB,wCAAe,6BAAS;AAAA,EAC7E,YAAY;AAAA,EACZ,QAAQ;AACV;;;ACaO,SAAS,OAAO,QAAmC;AACxD,QAAM,EAAE,QAAQ,OAAO,gBAAgB,YAAY,UAAU,aAAa,UAAU,IAAI;AACxF,MAAI,EAAE,UAAU,GAAI,OAAM,IAAI,WAAW,sDAAmB,MAAM;AAClE,MAAI,EAAE,QAAQ,GAAI,OAAM,IAAI,WAAW,8EAAkB,KAAK;AAC9D,MAAI,EAAE,aAAa,GAAI,OAAM,IAAI,WAAW,8EAAkB,UAAU;AACxE,QAAM,KAAK,WAAW;AACtB,QAAM,YAAY,iBAAiB,aAAa;AAChD,QAAM,WAAW,QAAQ;AACzB,QAAM,MAAM,SAAS;AACrB,MAAI,WAA0B;AAC9B,MAAI,cAAc,QAAW;AAC3B,QAAI,EAAE,YAAY,GAAI,OAAM,IAAI,WAAW,wEAAiB,SAAS;AAErE,eAAY,YAAY,OAAS,QAAQ;AAAA,EAC3C;AACA,SAAO,EAAE,KAAK,WAAW,UAAU,SAAS;AAC9C;","names":[]}
|
|
@@ -8,13 +8,14 @@ var copperMeta = {
|
|
|
8
8
|
nameEn: "Contact Wire Parameter Lookup",
|
|
9
9
|
summary: "\u5185\u7F6E CTMH / CTAH / CTS \u7CFB\u5217 120/150 mm\xB2 \u63A5\u89E6\u7EBF\u53C2\u6570\u8868\uFF0C\u6309\u957F\u5EA6\u4E0E\u73AF\u5883\u6E29\u5EA6\u7ED9\u51FA\u603B\u91CD\u91CF\u4E0E\u6E29\u5EA6\u4FEE\u6B63\u7535\u963B\u3002",
|
|
10
10
|
formula: [
|
|
11
|
-
"\u7535\u963B\u6E29\u5EA6\u4FEE\u6B63\uFF08\u03B1
|
|
11
|
+
"\u7535\u963B\u6E29\u5EA6\u4FEE\u6B63\uFF08\u03B1 \u6309\u578B\u53F7\u53D6\u771F\u503C\uFF09\uFF1Ar_T = r\u2082\u2080\xB7[1 + \u03B1\xB7(T \u2212 20)]",
|
|
12
|
+
"\u6E29\u4FEE\u6309\u5404\u6750\u8D28\u771F\u503C \u03B1\uFF08TB/T 2809-2026 6.10\uFF09\uFF1A\u94F6\uFF08CTAH\uFF090.00380 / \u9521\uFF08CTS\uFF090.00320 / \u9541\uFF08CTMH\uFF090.00270",
|
|
12
13
|
"\u603B\u91CD\u91CF\uFF1AW = w\u2080 \xD7 l\uFF08w\u2080 \u5355\u4F4D\u91CD\u91CF kg/km\uFF0Cl \u957F\u5EA6 km\uFF09"
|
|
13
14
|
],
|
|
14
15
|
references: [
|
|
15
16
|
"\u5185\u7F6E\u53C2\u6570\u8868\u6765\u6E90 TB/T 2809-2017\u300A\u7535\u6C14\u5316\u94C1\u8DEF\u7528\u94DC\u53CA\u94DC\u5408\u91D1\u63A5\u89E6\u7EBF\u300B\uFF082018-05-01 \u5B9E\u65BD\uFF09",
|
|
16
17
|
"\u5355\u4F4D\u91CD\u91CF\u4E3A\u6807\u79F0\u503C",
|
|
17
|
-
"\u8F7D\u6D41\u91CF\u4E3A 150\u2103 \u6301\u7EED\u503C\
|
|
18
|
+
"\u8F7D\u6D41\u91CF\u4E3A 150\u2103 \u6301\u7EED\u503C\uFF1A\u5BA4\u5185\u4E3B\u503C\u6309 TB/T 2809-2026 \u88685\uFF0C`ampacityIndoor150A2017` \u4E3A 2017 \u88685 \u540C\u70B9\u4F4D\u5BF9\u7167\uFF08\u65E2\u6709\u7EBF\u5386\u53F2\u91C7\u8D2D\u53C2\u7167\uFF09\uFF1B\u5BA4\u5916\u503C\u4E24\u7248\u540C\u503C",
|
|
18
19
|
"r\u2082\u2080 \u9664 CTMH-120 \u53D6\u7ED9\u5B9A\u503C\u5916\uFF0C\u5747\u6309\u5BFC\u7535\u7387\u53CD\u7B97\u4F30\u7B97\uFF08IACS \u6807\u51C6\u7535\u963B\u7387 0.017241 \u03A9\xB7mm\xB2/m \xF7 \u5BFC\u7535\u7387 \xF7 \u622A\u9762\u79EF\uFF1B0.017241 = 1/58\uFF09",
|
|
19
20
|
"\u6B63\u5F0F\u5DE5\u7A0B\u4EE5\u4EA7\u54C1\u6807\u51C6\u4E0E\u51FA\u5382\u68C0\u9A8C\u5355\u4E3A\u51C6"
|
|
20
21
|
],
|
|
@@ -30,46 +31,58 @@ var copperMeta = {
|
|
|
30
31
|
// src/copper/index.ts
|
|
31
32
|
var TB2809_WIRE_PARAMS = {
|
|
32
33
|
"CTMH-120": {
|
|
33
|
-
unitWeightKgPerKm:
|
|
34
|
-
r20OhmPerKm: 0.
|
|
35
|
-
|
|
34
|
+
unitWeightKgPerKm: 1076,
|
|
35
|
+
r20OhmPerKm: 0.2211,
|
|
36
|
+
resistanceAlphaPerDegC: 27e-4,
|
|
37
|
+
ampacityIndoor150A: 442,
|
|
38
|
+
ampacityIndoor150A2017: 430,
|
|
36
39
|
ampacityOutdoor150A: 560,
|
|
37
|
-
note: "\u53D6\u6807\u51C6 CTMH \u884C\uFF08\u9AD8\u5F3A\u5EA6\u94DC\u9541\u5408\u91D1\uFF09\
|
|
40
|
+
note: "\u53D6\u6807\u51C6 CTMH \u884C\uFF08\u9AD8\u5F3A\u5EA6\u94DC\u9541\u5408\u91D1\uFF09\uFF0Cr20 = \u03C1 \u4E0A\u9650 0.02653 \xF7 120\uFF082026-09-19 \u66F4\u6B63\uFF1A\u65E7\u503C 0.2113 \u8BEF\u7528 0.02535 \u6863\uFF09\uFF0C\u03B1=0.00270\uFF082026 \u7248 6.10 \u9541\uFF09"
|
|
38
41
|
},
|
|
39
42
|
"CTMH-150": {
|
|
40
|
-
unitWeightKgPerKm:
|
|
41
|
-
r20OhmPerKm: 0.
|
|
42
|
-
|
|
43
|
+
unitWeightKgPerKm: 1342,
|
|
44
|
+
r20OhmPerKm: 0.1769,
|
|
45
|
+
resistanceAlphaPerDegC: 27e-4,
|
|
46
|
+
ampacityIndoor150A: 524,
|
|
47
|
+
ampacityIndoor150A2017: 500,
|
|
43
48
|
ampacityOutdoor150A: 650,
|
|
44
|
-
note: "\u53D6\u6807\u51C6 CTMH \u884C\uFF08\u9AD8\u5F3A\u5EA6\u94DC\u9541\u5408\u91D1\uFF09"
|
|
49
|
+
note: "\u53D6\u6807\u51C6 CTMH \u884C\uFF08\u9AD8\u5F3A\u5EA6\u94DC\u9541\u5408\u91D1\uFF09\uFF0Cr20 = 0.02653 \xF7 150\uFF082026-09-19 \u66F4\u6B63\uFF1A\u65E7\u503C 0.169 \u8BEF\u7528 0.02535 \u6863\uFF09\uFF0C\u03B1=0.00270\uFF082026 \u7248 6.10 \u9541\uFF09"
|
|
45
50
|
},
|
|
46
51
|
"CTAH-120": {
|
|
47
|
-
unitWeightKgPerKm:
|
|
52
|
+
unitWeightKgPerKm: 1076,
|
|
48
53
|
r20OhmPerKm: 0.1481,
|
|
49
|
-
|
|
54
|
+
resistanceAlphaPerDegC: 38e-4,
|
|
55
|
+
ampacityIndoor150A: 509,
|
|
56
|
+
ampacityIndoor150A2017: 515,
|
|
50
57
|
ampacityOutdoor150A: 680,
|
|
51
|
-
note: "\u53D6\u6807\u51C6 CTA \u884C\uFF08\u94DC\u94F6\u5408\u91D1\uFF09\uFF0C\u03C1 \u2264 0.01777"
|
|
58
|
+
note: "\u53D6\u6807\u51C6 CTA \u884C\uFF08\u94DC\u94F6\u5408\u91D1\uFF09\uFF0C\u03C1 \u2264 0.01777\uFF0C\u03B1=0.00380\uFF082026 \u7248 6.10 \u94F6\uFF09"
|
|
52
59
|
},
|
|
53
60
|
"CTAH-150": {
|
|
54
|
-
unitWeightKgPerKm:
|
|
61
|
+
unitWeightKgPerKm: 1342,
|
|
55
62
|
r20OhmPerKm: 0.1185,
|
|
56
|
-
|
|
63
|
+
resistanceAlphaPerDegC: 38e-4,
|
|
64
|
+
ampacityIndoor150A: 593,
|
|
65
|
+
ampacityIndoor150A2017: 620,
|
|
57
66
|
ampacityOutdoor150A: 785,
|
|
58
|
-
note: "\u53D6\u6807\u51C6 CTA \u884C\uFF08\u94DC\u94F6\u5408\u91D1\uFF09"
|
|
67
|
+
note: "\u53D6\u6807\u51C6 CTA \u884C\uFF08\u94DC\u94F6\u5408\u91D1\uFF09\uFF0C\u03B1=0.00380\uFF082026 \u7248 6.10 \u94F6\uFF09"
|
|
59
68
|
},
|
|
60
69
|
"CTS-120": {
|
|
61
|
-
unitWeightKgPerKm:
|
|
62
|
-
r20OhmPerKm: 0.
|
|
63
|
-
|
|
70
|
+
unitWeightKgPerKm: 1079,
|
|
71
|
+
r20OhmPerKm: 0.1545,
|
|
72
|
+
resistanceAlphaPerDegC: 32e-4,
|
|
73
|
+
ampacityIndoor150A: 511,
|
|
74
|
+
ampacityIndoor150A2017: 515,
|
|
64
75
|
ampacityOutdoor150A: 680,
|
|
65
|
-
note: "\u53D6\u6807\u51C6 CTS \u884C\uFF08\u94DC\u9521\u5408\u91D1\uFF09\uFF0C\u8F7D\u6D41\u91CF\u6309 CTS \u884C\u53D6\u503C"
|
|
76
|
+
note: "\u53D6\u6807\u51C6 CTS \u884C\uFF08\u94DC\u9521\u5408\u91D1\uFF09\uFF0Cr20 = \u03C1 \u4E0A\u9650 0.01854 \xF7 120\uFF082026-09-19 \u66F4\u6B63\uFF1A\u65E7\u503C 0.1916 \u8BEF\u7528 0.02299 \u6863\uFF09\uFF0C\u8F7D\u6D41\u91CF\u6309 CTS \u884C\u53D6\u503C\uFF0C\u03B1=0.00320\uFF082026 \u7248 6.10 \u9521\uFF09"
|
|
66
77
|
},
|
|
67
78
|
"CTS-150": {
|
|
68
|
-
unitWeightKgPerKm:
|
|
69
|
-
r20OhmPerKm: 0.
|
|
70
|
-
|
|
79
|
+
unitWeightKgPerKm: 1347,
|
|
80
|
+
r20OhmPerKm: 0.1236,
|
|
81
|
+
resistanceAlphaPerDegC: 32e-4,
|
|
82
|
+
ampacityIndoor150A: 590,
|
|
83
|
+
ampacityIndoor150A2017: 620,
|
|
71
84
|
ampacityOutdoor150A: 790,
|
|
72
|
-
note: "\u53D6\u6807\u51C6 CTS \u884C\uFF08\u94DC\u9521\u5408\u91D1\uFF09\uFF0C\u8F7D\u6D41\u91CF\u6309 CTS \u884C\u53D6\u503C"
|
|
85
|
+
note: "\u53D6\u6807\u51C6 CTS \u884C\uFF08\u94DC\u9521\u5408\u91D1\uFF09\uFF0Cr20 = 0.01854 \xF7 150\uFF082026-09-19 \u66F4\u6B63\uFF1A\u65E7\u503C 0.1533 \u8BEF\u7528 0.02299 \u6863\uFF09\uFF0C\u8F7D\u6D41\u91CF\u6309 CTS \u884C\u53D6\u503C\uFF0C\u03B1=0.00320\uFF082026 \u7248 6.10 \u9521\uFF09"
|
|
73
86
|
}
|
|
74
87
|
};
|
|
75
88
|
function wireLookup(input) {
|
|
@@ -84,7 +97,11 @@ function wireLookup(input) {
|
|
|
84
97
|
if (ambientTempDegC < -40 || ambientTempDegC > 90) {
|
|
85
98
|
throw new RangeError(`\u9002\u7528\u6E29\u5EA6\u4E3A \u221240 ~ 90 \u2103\uFF0C\u6536\u5230 ${ambientTempDegC} \u2103`);
|
|
86
99
|
}
|
|
87
|
-
const rT = resistanceAtTempOhmPerKm(
|
|
100
|
+
const rT = resistanceAtTempOhmPerKm(
|
|
101
|
+
params.r20OhmPerKm,
|
|
102
|
+
ambientTempDegC,
|
|
103
|
+
params.resistanceAlphaPerDegC
|
|
104
|
+
);
|
|
88
105
|
return {
|
|
89
106
|
model,
|
|
90
107
|
...params,
|
|
@@ -99,4 +116,4 @@ export {
|
|
|
99
116
|
TB2809_WIRE_PARAMS,
|
|
100
117
|
wireLookup
|
|
101
118
|
};
|
|
102
|
-
//# sourceMappingURL=chunk-
|
|
119
|
+
//# sourceMappingURL=chunk-ES3AQ52A.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/copper/meta.ts","../src/copper/index.ts"],"sourcesContent":["import type { CalculatorMeta } from '../types';\n\nexport const copperMeta: CalculatorMeta = {\n name: '接触线参数速查',\n nameEn: 'Contact Wire Parameter Lookup',\n summary:\n '内置 CTMH / CTAH / CTS 系列 120/150 mm² 接触线参数表,按长度与环境温度给出总重量与温度修正电阻。',\n formula: [\n '电阻温度修正(α 按型号取真值):r_T = r₂₀·[1 + α·(T − 20)]',\n '温修按各材质真值 α(TB/T 2809-2026 6.10):银(CTAH)0.00380 / 锡(CTS)0.00320 / 镁(CTMH)0.00270',\n '总重量:W = w₀ × l(w₀ 单位重量 kg/km,l 长度 km)',\n ],\n references: [\n '内置参数表来源 TB/T 2809-2017《电气化铁路用铜及铜合金接触线》(2018-05-01 实施)',\n '单位重量为标称值',\n '载流量为 150℃ 持续值:室内主值按 TB/T 2809-2026 表5,`ampacityIndoor150A2017` 为 2017 表5 同点位对照(既有线历史采购参照);室外值两版同值',\n 'r₂₀ 除 CTMH-120 取给定值外,均按导电率反算估算(IACS 标准电阻率 0.017241 Ω·mm²/m ÷ 导电率 ÷ 截面积;0.017241 = 1/58)',\n '正式工程以产品标准与出厂检验单为准',\n ],\n scope: [\n '温度修正仅覆盖电阻,未修正单位重量与载流量',\n '适用温度 −40 ~ 90 ℃',\n '载流量为 150℃ 允许温度下的持续值,未做环境温度修正',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/copper/',\n};\n","export { copperMeta } from './meta';\n\n// 电阻温度修正与铜常数统一放在 src/common/resistance.ts(copper 与 voltage-drop 共用),\n// 由根 index 统一导出,此处仅内部引用,避免重复导出同名符号。\nimport { resistanceAtTempOhmPerKm } from '../common/resistance';\n\n/** 站点计算器内置的 6 个型号 */\nexport type CopperWireModel =\n | 'CTMH-120'\n | 'CTMH-150'\n | 'CTAH-120'\n | 'CTAH-150'\n | 'CTS-120'\n | 'CTS-150';\n\nexport interface WireParamEntry {\n /** 单位重量,kg/km(标称值) */\n readonly unitWeightKgPerKm: number;\n /** 20℃ 直流电阻,Ω/km */\n readonly r20OhmPerKm: number;\n /** 电阻温度系数 α,1/℃(按材质真值,TB/T 2809-2026 6.10) */\n readonly resistanceAlphaPerDegC: number;\n /** 150℃ 持续载流量,室内口径,A(主值 = TB/T 2809-2026 表5) */\n readonly ampacityIndoor150A: number;\n /** 150℃ 持续载流量,室内口径,A(TB/T 2809-2017 表5 同点位对照值,既有线历史采购参照) */\n readonly ampacityIndoor150A2017: number;\n /** 150℃ 持续载流量,室外口径,A(两版标准同值) */\n readonly ampacityOutdoor150A: number;\n /** 口径说明:本行实际对应标准中的哪一行 */\n readonly note: string;\n}\n\n/**\n * 接触线参数表,来源 TB/T 2809-2017。\n *\n * 载流量为 150℃ 持续值(室内/室外双口径,标准表5)。\n *\n * r₂₀ 口径 = 各材质 20℃ 电阻率上限 ÷ 标称截面。2026-09-19 全表复核:\n * 更正 CTMH-120/150(旧值误用 0.02535 档,应 0.02653)与\n * CTS-120/150(旧值误用 0.02299 档,应 0.01854)四行错档值,\n * 已随站点 `/calculator/assets/calc-core.js` 同批修正。\n *\n * 注:站点曾因显示层 `fmt()` 的尾零剥离正则把载流量渲染成 43/56(应为 430/560),\n * 已于 R38 之后修复。若再遇渲染值与本表不符,先确认是否为显示层问题:\n * 本表与服务端数据源始终一致。\n *\n * 单位重量口径(2026-09-19 更正):六行 unitWeightKgPerKm 已按 TB/T 2809-2017\n * 表3 参考单位质量逐项更正——CTMH-120 1082→1076、CTMH-150 1350→1342、\n * CTAH-120 1070→1076、CTAH-150 1330→1342、CTS-120 1080→1079、CTS-150 1345→1347\n * (旧值混入了 TB/T 2810 纯铜表 1082 及近似凑整值)。站点 `calc-core.js` 的\n * COPPER_TABLE 已于 2026-09-19 同值更正(1076 系),两侧一致;r₂₀/载流量两列不受影响。\n *\n * ⚠️ 注意型号口径:CTMH / CTAH / CTS 是站点计算器的型号代码,与标准中的\n * CTMH / CTA / CTS 并非同名对应。`note` 字段说明各行实际取自标准的哪一行,\n * 交叉引用 TB/T 2809-2017 时请以 note 为准。\n *\n * 载流量 150℃ 室内主值 = TB/T 2809-2026 表5(2026-09-19 据正版文本核入),\n * `ampacityIndoor150A2017` 对照字段为 2017 表5 同点位值(既有线历史采购参照);\n * 室外值两版同值。\n *\n * 电阻温度系数口径(2026-09-19 实装,修复批 D):每行 resistanceAlphaPerDegC\n * 按各材质真值取(TB/T 2809-2026 6.10)——银(CTAH)0.00380、锡(CTS)0.00320、\n * 镁(CTMH)0.00270;旧版统一用纯铜 0.00393 系「纯铜近似」(偏保守),已废弃。\n */\nexport const TB2809_WIRE_PARAMS: Record<CopperWireModel, WireParamEntry> = {\n 'CTMH-120': {\n unitWeightKgPerKm: 1076,\n r20OhmPerKm: 0.2211,\n resistanceAlphaPerDegC: 0.0027,\n ampacityIndoor150A: 442,\n ampacityIndoor150A2017: 430,\n ampacityOutdoor150A: 560,\n note: '取标准 CTMH 行(高强度铜镁合金),r20 = ρ 上限 0.02653 ÷ 120(2026-09-19 更正:旧值 0.2113 误用 0.02535 档),α=0.00270(2026 版 6.10 镁)',\n },\n 'CTMH-150': {\n unitWeightKgPerKm: 1342,\n r20OhmPerKm: 0.1769,\n resistanceAlphaPerDegC: 0.0027,\n ampacityIndoor150A: 524,\n ampacityIndoor150A2017: 500,\n ampacityOutdoor150A: 650,\n note: '取标准 CTMH 行(高强度铜镁合金),r20 = 0.02653 ÷ 150(2026-09-19 更正:旧值 0.169 误用 0.02535 档),α=0.00270(2026 版 6.10 镁)',\n },\n 'CTAH-120': {\n unitWeightKgPerKm: 1076,\n r20OhmPerKm: 0.1481,\n resistanceAlphaPerDegC: 0.0038,\n ampacityIndoor150A: 509,\n ampacityIndoor150A2017: 515,\n ampacityOutdoor150A: 680,\n note: '取标准 CTA 行(铜银合金),ρ ≤ 0.01777,α=0.00380(2026 版 6.10 银)',\n },\n 'CTAH-150': {\n unitWeightKgPerKm: 1342,\n r20OhmPerKm: 0.1185,\n resistanceAlphaPerDegC: 0.0038,\n ampacityIndoor150A: 593,\n ampacityIndoor150A2017: 620,\n ampacityOutdoor150A: 785,\n note: '取标准 CTA 行(铜银合金),α=0.00380(2026 版 6.10 银)',\n },\n 'CTS-120': {\n unitWeightKgPerKm: 1079,\n r20OhmPerKm: 0.1545,\n resistanceAlphaPerDegC: 0.0032,\n ampacityIndoor150A: 511,\n ampacityIndoor150A2017: 515,\n ampacityOutdoor150A: 680,\n note: '取标准 CTS 行(铜锡合金),r20 = ρ 上限 0.01854 ÷ 120(2026-09-19 更正:旧值 0.1916 误用 0.02299 档),载流量按 CTS 行取值,α=0.00320(2026 版 6.10 锡)',\n },\n 'CTS-150': {\n unitWeightKgPerKm: 1347,\n r20OhmPerKm: 0.1236,\n resistanceAlphaPerDegC: 0.0032,\n ampacityIndoor150A: 590,\n ampacityIndoor150A2017: 620,\n ampacityOutdoor150A: 790,\n note: '取标准 CTS 行(铜锡合金),r20 = 0.01854 ÷ 150(2026-09-19 更正:旧值 0.1533 误用 0.02299 档),载流量按 CTS 行取值,α=0.00320(2026 版 6.10 锡)',\n },\n};\n\nexport interface CopperLookupInput {\n readonly model: CopperWireModel;\n /** 长度 l,km */\n readonly lengthKm: number;\n /** 环境温度 T,℃ */\n readonly ambientTempDegC: number;\n}\n\nexport interface CopperLookupResult extends WireParamEntry {\n readonly model: CopperWireModel;\n /** 总重量 W = w₀ × l,kg */\n readonly totalWeightKg: number;\n /** 温度修正电阻 r_T,Ω/km */\n readonly rTOhmPerKm: number;\n /** 全长温度修正电阻,Ω */\n readonly totalResistanceOhm: number;\n}\n\n/**\n * 按型号、长度与环境温度给出接触线参数速查结果。\n */\nexport function wireLookup(input: CopperLookupInput): CopperLookupResult {\n const { model, lengthKm, ambientTempDegC } = input;\n\n const params = TB2809_WIRE_PARAMS[model];\n if (params === undefined) {\n throw new RangeError(`未知型号:${model}`);\n }\n if (!(lengthKm > 0)) {\n throw new RangeError(`长度必须为正数,收到 ${lengthKm} km`);\n }\n if (ambientTempDegC < -40 || ambientTempDegC > 90) {\n throw new RangeError(`适用温度为 −40 ~ 90 ℃,收到 ${ambientTempDegC} ℃`);\n }\n\n // 温修按各材质真值 α(TB/T 2809-2026 6.10),不再用纯铜 0.00393 近似\n const rT = resistanceAtTempOhmPerKm(\n params.r20OhmPerKm,\n ambientTempDegC,\n params.resistanceAlphaPerDegC,\n );\n\n return {\n model,\n ...params,\n totalWeightKg: params.unitWeightKgPerKm * lengthKm,\n rTOhmPerKm: rT,\n totalResistanceOhm: rT * lengthKm,\n };\n}\n"],"mappings":";;;;;AAEO,IAAM,aAA6B;AAAA,EACxC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SACE;AAAA,EACF,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY;AAAA,EACZ,QAAQ;AACV;;;ACsCO,IAAM,qBAA8D;AAAA,EACzE,YAAY;AAAA,IACV,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,wBAAwB;AAAA,IACxB,oBAAoB;AAAA,IACpB,wBAAwB;AAAA,IACxB,qBAAqB;AAAA,IACrB,MAAM;AAAA,EACR;AAAA,EACA,YAAY;AAAA,IACV,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,wBAAwB;AAAA,IACxB,oBAAoB;AAAA,IACpB,wBAAwB;AAAA,IACxB,qBAAqB;AAAA,IACrB,MAAM;AAAA,EACR;AAAA,EACA,YAAY;AAAA,IACV,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,wBAAwB;AAAA,IACxB,oBAAoB;AAAA,IACpB,wBAAwB;AAAA,IACxB,qBAAqB;AAAA,IACrB,MAAM;AAAA,EACR;AAAA,EACA,YAAY;AAAA,IACV,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,wBAAwB;AAAA,IACxB,oBAAoB;AAAA,IACpB,wBAAwB;AAAA,IACxB,qBAAqB;AAAA,IACrB,MAAM;AAAA,EACR;AAAA,EACA,WAAW;AAAA,IACT,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,wBAAwB;AAAA,IACxB,oBAAoB;AAAA,IACpB,wBAAwB;AAAA,IACxB,qBAAqB;AAAA,IACrB,MAAM;AAAA,EACR;AAAA,EACA,WAAW;AAAA,IACT,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,wBAAwB;AAAA,IACxB,oBAAoB;AAAA,IACpB,wBAAwB;AAAA,IACxB,qBAAqB;AAAA,IACrB,MAAM;AAAA,EACR;AACF;AAuBO,SAAS,WAAW,OAA8C;AACvE,QAAM,EAAE,OAAO,UAAU,gBAAgB,IAAI;AAE7C,QAAM,SAAS,mBAAmB,KAAK;AACvC,MAAI,WAAW,QAAW;AACxB,UAAM,IAAI,WAAW,iCAAQ,KAAK,EAAE;AAAA,EACtC;AACA,MAAI,EAAE,WAAW,IAAI;AACnB,UAAM,IAAI,WAAW,gEAAc,QAAQ,KAAK;AAAA,EAClD;AACA,MAAI,kBAAkB,OAAO,kBAAkB,IAAI;AACjD,UAAM,IAAI,WAAW,yEAAuB,eAAe,SAAI;AAAA,EACjE;AAGA,QAAM,KAAK;AAAA,IACT,OAAO;AAAA,IACP;AAAA,IACA,OAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA,GAAG;AAAA,IACH,eAAe,OAAO,oBAAoB;AAAA,IAC1C,YAAY;AAAA,IACZ,oBAAoB,KAAK;AAAA,EAC3B;AACF;","names":[]}
|
|
@@ -4,22 +4,23 @@ var dropperMeta = {
|
|
|
4
4
|
nameEn: "Dropper Length Calculator",
|
|
5
5
|
summary: "\u6309\u629B\u7269\u7EBF\u5F1B\u5EA6\u516C\u5F0F\u8BA1\u7B97\u94FE\u5F62\u60AC\u6302\u5404\u540A\u5F26\u957F\u5EA6\uFF0C\u652F\u6301\u7B80\u5355\u94FE\u5F62\u4E0E\u5F39\u6027\u94FE\u5F62\u4E24\u79CD\u60AC\u6302\u7C7B\u578B\u3002",
|
|
6
6
|
formula: [
|
|
7
|
-
"\
|
|
8
|
-
"\
|
|
9
|
-
"\u7B80\u5355\u94FE\u5F62\uFF1Al_i = H \u2212
|
|
10
|
-
"\u5F39\u6027\u94FE\u5F62\uFF08\u8BA1\u5165\
|
|
11
|
-
"\u8DE8\u4E2D\u6700\u5927\u5F1B\u5EA6\uFF1Af_max = q_c\xB7L\xB2 / (8\xB7T_c)"
|
|
7
|
+
"\u627F\u529B\u7D22\u5F1B\u5EA6\uFF08\u629B\u7269\u7EBF\u8FD1\u4F3C\uFF0C\u603B\u8377\u8F7D\u53E3\u5F84\uFF09\uFF1Af_m(x) = 4\xB7f_m_max\xB7x\xB7(L\u2212x) / L\xB2\uFF0Cf_m_max = w\xB7L\xB2 / (8\xB7T_m)\uFF0Cw = q_c + q_m",
|
|
8
|
+
"\u63A5\u89E6\u7EBF\u5F1B\u5EA6\uFF08\u5F39\u6027\u94FE\u5F62\uFF09\uFF1Af_c(x) = 4\xB7f_c_max\xB7x\xB7(L\u2212x) / L\xB2\uFF0Cf_c_max = q_c\xB7L\xB2 / (8\xB7T_c)",
|
|
9
|
+
"\u7B80\u5355\u94FE\u5F62\uFF1Al_i = H \u2212 f_m(x_i)",
|
|
10
|
+
"\u5F39\u6027\u94FE\u5F62\uFF08\u8BA1\u5165\u63A5\u89E6\u7EBF\u5F1B\u5EA6\uFF09\uFF1Al_i = H \u2212 f_m(x_i) + f_c(x_i)"
|
|
12
11
|
],
|
|
13
12
|
references: [
|
|
14
13
|
"\u629B\u7269\u7EBF\u8FD1\u4F3C\uFF0C\u9002\u7528\u4E8E f/L \u2264 1/10 \u7684\u5C0F\u5F1B\u5EA6\u5DE5\u51B5",
|
|
15
|
-
"\u540A\u5F26\
|
|
16
|
-
"\
|
|
14
|
+
"\u627F\u529B\u7D22\u4E0B\u5782\u4F7F\u540A\u5F26\u53D8\u77ED\u3001\u63A5\u89E6\u7EBF\uFF08\u76F8\u5BF9\u6C34\u5E73\uFF09\u4E0B\u5782\u4F7F\u540A\u5F26\u53D8\u957F\uFF0C\u6545 l = C \u2212 f_m + f_c\uFF082026-09-19 \u53E3\u5F84\u66F4\u6B63\uFF0C\u65E7\u7248\u5C06\u4E24\u7EBF\u5F1B\u5EA6\u89D2\u8272\u5199\u53CD\uFF09",
|
|
15
|
+
"w = q_c + q_m \u4E3A\u627F\u529B\u7D22\u627F\u62C5\u7684\u603B\u5355\u4F4D\u8377\u8F7D\uFF08\u542B\u7ECF\u540A\u5F26\u4F20\u9012\u7684\u63A5\u89E6\u7EBF\u8377\u8F7D\uFF09\uFF0Cq_c \u540C\u65F6\u8FDB\u5165\u603B\u8377\u8F7D\u4E0E\u63A5\u89E6\u7EBF\u5F1B\u5EA6\u4E24\u9879",
|
|
16
|
+
"\u540A\u5F26\u95F4\u8DDD\u987B\u80FD\u6574\u9664\u8DE8\u8DDD\uFF1B\u5B9E\u9645\u540A\u5F26\u5E03\u7F6E\u4EE5\u8BBE\u8BA1\u6587\u4EF6\u4E3A\u51C6"
|
|
17
17
|
],
|
|
18
18
|
scope: [
|
|
19
19
|
"\u8DE8\u8DDD L\uFF1A5 ~ 80 m",
|
|
20
|
-
"\u63A5\u89E6\u7EBF\u5F20\u529B T_c\uFF1A1 ~ 40 kN",
|
|
20
|
+
"\u63A5\u89E6\u7EBF\u5F20\u529B T_c\uFF1A1 ~ 40 kN\uFF08\u5F39\u6027\u94FE\u5F62\u7528\uFF09",
|
|
21
|
+
"\u627F\u529B\u7D22\u5F20\u529B T_m\uFF1A1 ~ 40 kN\uFF08\u4E24\u79CD\u60AC\u6302\u7C7B\u578B\u5747\u9700\u8981\uFF09",
|
|
21
22
|
"\u7ED3\u6784\u9AD8\u5EA6 H\uFF1A0.3 ~ 3 m",
|
|
22
|
-
"\u63A5\u89E6\u7EBF\u5355\u4F4D\u8377\u8F7D q_c\uFF1A0.001 ~ 0.1 kN/m",
|
|
23
|
+
"\u63A5\u89E6\u7EBF\u5355\u4F4D\u8377\u8F7D q_c\u3001\u627F\u529B\u7D22\u5355\u4F4D\u8377\u8F7D q_m\uFF1A0.001 ~ 0.1 kN/m",
|
|
23
24
|
"\u540A\u5F26\u95F4\u8DDD d\uFF1A1 ~ 15 m\uFF0C\u987B\u80FD\u6574\u9664\u8DE8\u8DDD",
|
|
24
25
|
"\u629B\u7269\u7EBF\u8FD1\u4F3C\uFF0C\u5927\u5F1B\u5EA6\u5DE5\u51B5\u8BEF\u5DEE\u589E\u5927",
|
|
25
26
|
"\u672A\u8BA1\u5165\u540A\u5F26\u81EA\u8EAB\u4F38\u957F\u3001\u6E29\u5EA6\u53D8\u5316\u4E0E\u96F6\u90E8\u4EF6\u5236\u9020\u516C\u5DEE"
|
|
@@ -75,26 +76,23 @@ function dropperLengths(input) {
|
|
|
75
76
|
if (!(structureHeightM > 0)) {
|
|
76
77
|
throw new RangeError(`\u7ED3\u6784\u9AD8\u5EA6\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${structureHeightM} m`);
|
|
77
78
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
throw new RangeError("\u627F\u529B\u7D22\u5F20\u529B\u4E0E\u5355\u4F4D\u8377\u8F7D\u5FC5\u987B\u4E3A\u6B63\u6570");
|
|
85
|
-
}
|
|
79
|
+
const messenger = input.messenger;
|
|
80
|
+
if (!messenger) {
|
|
81
|
+
throw new RangeError("\u5FC5\u987B\u63D0\u4F9B\u627F\u529B\u7D22\u53C2\u6570\uFF08messenger\uFF09\u2014\u2014\u627F\u529B\u7D22\u5F1B\u5EA6\u6309\u603B\u8377\u8F7D w = q_c + q_m \u8BA1\u7B97\uFF0C\u4E24\u79CD\u60AC\u6302\u7C7B\u578B\u5747\u9700\u8981");
|
|
82
|
+
}
|
|
83
|
+
if (!(messenger.tensionKN > 0) || !(messenger.loadKNPerM > 0)) {
|
|
84
|
+
throw new RangeError("\u627F\u529B\u7D22\u5F20\u529B\u4E0E\u5355\u4F4D\u8377\u8F7D\u5FC5\u987B\u4E3A\u6B63\u6570");
|
|
86
85
|
}
|
|
87
86
|
const positions = dropperPositionsM(spanM, spacingM);
|
|
88
|
-
const messenger = suspension === "elastic" ? input.messenger : null;
|
|
89
87
|
const points = positions.map((xM, index) => {
|
|
90
|
-
const
|
|
88
|
+
const messengerSag = parabolaSagM(
|
|
91
89
|
xM,
|
|
92
90
|
spanM,
|
|
93
|
-
contactLoadKNPerM,
|
|
94
|
-
|
|
91
|
+
contactLoadKNPerM + messenger.loadKNPerM,
|
|
92
|
+
messenger.tensionKN
|
|
95
93
|
);
|
|
96
|
-
const
|
|
97
|
-
const dropperLengthM = structureHeightM -
|
|
94
|
+
const contactSag = suspension === "elastic" ? parabolaSagM(xM, spanM, contactLoadKNPerM, contactTensionKN) : 0;
|
|
95
|
+
const dropperLengthM = structureHeightM - messengerSag + contactSag;
|
|
98
96
|
if (dropperLengthM <= 0) {
|
|
99
97
|
throw new RangeError(
|
|
100
98
|
`x = ${xM} m \u5904\u540A\u5F26\u957F\u5EA6\u975E\u6B63\uFF08${dropperLengthM.toFixed(4)} m\uFF09\uFF1A\u7ED3\u6784\u9AD8\u5EA6 ${structureHeightM} m \u4E0D\u8DB3\uFF0C\u8BF7\u590D\u6838\u8F93\u5165`
|
|
@@ -105,7 +103,8 @@ function dropperLengths(input) {
|
|
|
105
103
|
let maxSagM = 0;
|
|
106
104
|
let shortestDropperM = Number.POSITIVE_INFINITY;
|
|
107
105
|
for (const p of points) {
|
|
108
|
-
|
|
106
|
+
const effectiveSag = p.messengerSagM - p.contactSagM;
|
|
107
|
+
if (effectiveSag > maxSagM) maxSagM = effectiveSag;
|
|
109
108
|
if (p.dropperLengthM < shortestDropperM) shortestDropperM = p.dropperLengthM;
|
|
110
109
|
}
|
|
111
110
|
return {
|
|
@@ -123,4 +122,4 @@ function dropperLengths(input) {
|
|
|
123
122
|
|
|
124
123
|
|
|
125
124
|
exports.dropperMeta = dropperMeta; exports.parabolaSagM = parabolaSagM; exports.maxParabolaSagM = maxParabolaSagM; exports.dropperPositionsM = dropperPositionsM; exports.dropperLengths = dropperLengths;
|
|
126
|
-
//# sourceMappingURL=chunk-
|
|
125
|
+
//# sourceMappingURL=chunk-FHPRIOTM.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-FHPRIOTM.cjs","../src/dropper/meta.ts","../src/dropper/index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-FHPRIOTM.cjs","sourcesContent":[null,"import type { CalculatorMeta } from '../types';\n\nexport const dropperMeta: CalculatorMeta = {\n name: '吊弦长度计算',\n nameEn: 'Dropper Length Calculator',\n summary:\n '按抛物线弛度公式计算链形悬挂各吊弦长度,支持简单链形与弹性链形两种悬挂类型。',\n formula: [\n '承力索弛度(抛物线近似,总荷载口径):f_m(x) = 4·f_m_max·x·(L−x) / L²,f_m_max = w·L² / (8·T_m),w = q_c + q_m',\n '接触线弛度(弹性链形):f_c(x) = 4·f_c_max·x·(L−x) / L²,f_c_max = q_c·L² / (8·T_c)',\n '简单链形:l_i = H − f_m(x_i)',\n '弹性链形(计入接触线弛度):l_i = H − f_m(x_i) + f_c(x_i)',\n ],\n references: [\n '抛物线近似,适用于 f/L ≤ 1/10 的小弛度工况',\n '承力索下垂使吊弦变短、接触线(相对水平)下垂使吊弦变长,故 l = C − f_m + f_c(2026-09-19 口径更正,旧版将两线弛度角色写反)',\n 'w = q_c + q_m 为承力索承担的总单位荷载(含经吊弦传递的接触线荷载),q_c 同时进入总荷载与接触线弛度两项',\n '吊弦间距须能整除跨距;实际吊弦布置以设计文件为准',\n ],\n scope: [\n '跨距 L:5 ~ 80 m',\n '接触线张力 T_c:1 ~ 40 kN(弹性链形用)',\n '承力索张力 T_m:1 ~ 40 kN(两种悬挂类型均需要)',\n '结构高度 H:0.3 ~ 3 m',\n '接触线单位荷载 q_c、承力索单位荷载 q_m:0.001 ~ 0.1 kN/m',\n '吊弦间距 d:1 ~ 15 m,须能整除跨距',\n '抛物线近似,大弛度工况误差增大',\n '未计入吊弦自身伸长、温度变化与零部件制造公差',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/dropper/',\n};\n","export { dropperMeta } from './meta';\n\n/** 悬挂类型 */\nexport type SuspensionType = 'simple' | 'elastic';\n\nexport interface DropperInput {\n /** 悬挂类型 */\n readonly suspension: SuspensionType;\n /** 跨距 L,m */\n readonly spanM: number;\n /** 接触线张力 T_c,kN(弹性链形计算接触线弛度 f_c 用;简单链形不参与计算但保留正值校验) */\n readonly contactTensionKN: number;\n /** 结构高度 H,m */\n readonly structureHeightM: number;\n /** 接触线单位荷载 q_c,kN/m */\n readonly contactLoadKNPerM: number;\n /** 吊弦间距 d,m,须能整除跨距 */\n readonly dropperSpacingM: number;\n /**\n * 承力索参数,两种悬挂类型均必填(2026-09-19 口径更正):\n * 承力索弛度按总单位荷载 w = q_c + q_m(含经吊弦传递的接触线荷载)\n * 与承力索张力 T_m 计算,简单链形同样需要。\n */\n readonly messenger: {\n /** 承力索张力 T_m,kN */\n readonly tensionKN: number;\n /** 承力索单位荷载 q_m,kN/m */\n readonly loadKNPerM: number;\n };\n}\n\n/** 单个吊弦点的计算结果 */\nexport interface DropperPoint {\n /** 序号 i(0 为起始端) */\n readonly index: number;\n /** 距起始端的距离 x,m */\n readonly positionM: number;\n /** 接触线弛度 f_c(x),m(简单链形恒为 0;使吊弦变长) */\n readonly contactSagM: number;\n /** 承力索弛度 f_m(x),m(按总荷载 w = q_c + q_m 口径;使吊弦变短) */\n readonly messengerSagM: number;\n /** 吊弦长度 l,m */\n readonly dropperLengthM: number;\n}\n\nexport interface DropperResult {\n readonly points: readonly DropperPoint[];\n /** 跨中最大有效弛度 f_m − f_c,m */\n readonly maxSagM: number;\n /** 最短吊弦长度,m(位于跨中) */\n readonly shortestDropperM: number;\n /** 吊弦数量(含两端) */\n readonly count: number;\n}\n\n/**\n * 抛物线弛度:f(x) = q·x·(L−x) / (2·T) = 4·f_max·x·(L−x) / L²。\n *\n * 对接触线和承力索通用,区别只在传哪一组 q / T。\n *\n * @param xM 距起始端距离,m\n * @param spanM 跨距 L,m\n * @param loadKNPerM 单位荷载 q,kN/m\n * @param tensionKN 张力 T,kN\n * @returns 该点弛度,m\n */\nexport function parabolaSagM(\n xM: number,\n spanM: number,\n loadKNPerM: number,\n tensionKN: number,\n): number {\n if (!(tensionKN > 0)) {\n throw new RangeError(`张力必须为正数,收到 ${tensionKN} kN`);\n }\n if (xM < 0 || xM > spanM) {\n throw new RangeError(`位置 x = ${xM} m 超出跨距 0 ~ ${spanM} m`);\n }\n return (loadKNPerM * xM * (spanM - xM)) / (2 * tensionKN);\n}\n\n/**\n * 跨中最大弛度:f_max = q·L² / (8·T)\n */\nexport function maxParabolaSagM(\n spanM: number,\n loadKNPerM: number,\n tensionKN: number,\n): number {\n return (loadKNPerM * spanM * spanM) / (8 * tensionKN);\n}\n\n/**\n * 生成吊弦点位(含两端)。\n * @param spanM 跨距 L,m\n * @param spacingM 吊弦间距 d,m,须能整除跨距\n * @returns 各点位距起始端的距离,m\n */\nexport function dropperPositionsM(spanM: number, spacingM: number): number[] {\n if (!(spanM > 0)) {\n throw new RangeError(`跨距必须为正数,收到 ${spanM} m`);\n }\n if (!(spacingM > 0)) {\n throw new RangeError(`吊弦间距必须为正数,收到 ${spacingM} m`);\n }\n const intervals = spanM / spacingM;\n const rounded = Math.round(intervals);\n if (Math.abs(intervals - rounded) > 1e-9 || rounded < 1) {\n throw new RangeError(\n `吊弦间距 ${spacingM} m 不能整除跨距 ${spanM} m(得到 ${intervals} 段)`,\n );\n }\n return Array.from({ length: rounded + 1 }, (_, i) => i * spacingM);\n}\n\n/**\n * 计算整跨各吊弦长度(2026-09-19 口径更正)。\n *\n * 承力索下垂使吊弦变短、接触线(相对水平)下垂使吊弦变长:\n *\n * - 承力索弛度(总荷载口径):f_m(x) = 4·f_m_max·x(L−x)/L²,\n * f_m_max = w·L²/(8·T_m),w = q_c + q_m(承力索承担的总单位荷载)\n * - 接触线弛度(弹性链形):f_c(x) = 4·f_c_max·x(L−x)/L²,\n * f_c_max = q_c·L²/(8·T_c)\n *\n * 简单链形:l_i = H − f_m(x_i)\n * 弹性链形:l_i = H − f_m(x_i) + f_c(x_i)\n */\nexport function dropperLengths(input: DropperInput): DropperResult {\n const {\n suspension,\n spanM,\n contactTensionKN,\n structureHeightM,\n contactLoadKNPerM,\n dropperSpacingM: spacingM,\n } = input;\n\n if (!(contactTensionKN > 0)) {\n throw new RangeError(`接触线张力必须为正数,收到 ${contactTensionKN} kN`);\n }\n if (!(contactLoadKNPerM > 0)) {\n throw new RangeError(`接触线单位荷载必须为正数,收到 ${contactLoadKNPerM} kN/m`);\n }\n if (!(structureHeightM > 0)) {\n throw new RangeError(`结构高度必须为正数,收到 ${structureHeightM} m`);\n }\n\n const messenger = input.messenger;\n if (!messenger) {\n throw new RangeError('必须提供承力索参数(messenger)——承力索弛度按总荷载 w = q_c + q_m 计算,两种悬挂类型均需要');\n }\n if (!(messenger.tensionKN > 0) || !(messenger.loadKNPerM > 0)) {\n throw new RangeError('承力索张力与单位荷载必须为正数');\n }\n\n const positions = dropperPositionsM(spanM, spacingM);\n\n const points: DropperPoint[] = positions.map((xM, index) => {\n // 承力索弛度:总荷载口径 w = q_c + q_m(含经吊弦传给承力索的接触线荷载)\n const messengerSag = parabolaSagM(\n xM,\n spanM,\n contactLoadKNPerM + messenger.loadKNPerM,\n messenger.tensionKN,\n );\n // 接触线弛度:仅弹性链形计入(相对水平的下垂使吊弦变长)\n const contactSag =\n suspension === 'elastic'\n ? parabolaSagM(xM, spanM, contactLoadKNPerM, contactTensionKN)\n : 0;\n\n const dropperLengthM = structureHeightM - messengerSag + contactSag;\n if (dropperLengthM <= 0) {\n throw new RangeError(\n `x = ${xM} m 处吊弦长度非正(${dropperLengthM.toFixed(4)} m):` +\n `结构高度 ${structureHeightM} m 不足,请复核输入`,\n );\n }\n\n return { index, positionM: xM, contactSagM: contactSag, messengerSagM: messengerSag, dropperLengthM };\n });\n\n let maxSagM = 0;\n let shortestDropperM = Number.POSITIVE_INFINITY;\n for (const p of points) {\n const effectiveSag = p.messengerSagM - p.contactSagM;\n if (effectiveSag > maxSagM) maxSagM = effectiveSag;\n if (p.dropperLengthM < shortestDropperM) shortestDropperM = p.dropperLengthM;\n }\n\n return {\n points,\n maxSagM,\n shortestDropperM,\n count: points.length,\n };\n}\n"]}
|
|
@@ -8,13 +8,14 @@ var copperMeta = {
|
|
|
8
8
|
nameEn: "Contact Wire Parameter Lookup",
|
|
9
9
|
summary: "\u5185\u7F6E CTMH / CTAH / CTS \u7CFB\u5217 120/150 mm\xB2 \u63A5\u89E6\u7EBF\u53C2\u6570\u8868\uFF0C\u6309\u957F\u5EA6\u4E0E\u73AF\u5883\u6E29\u5EA6\u7ED9\u51FA\u603B\u91CD\u91CF\u4E0E\u6E29\u5EA6\u4FEE\u6B63\u7535\u963B\u3002",
|
|
10
10
|
formula: [
|
|
11
|
-
"\u7535\u963B\u6E29\u5EA6\u4FEE\u6B63\uFF08\u03B1
|
|
11
|
+
"\u7535\u963B\u6E29\u5EA6\u4FEE\u6B63\uFF08\u03B1 \u6309\u578B\u53F7\u53D6\u771F\u503C\uFF09\uFF1Ar_T = r\u2082\u2080\xB7[1 + \u03B1\xB7(T \u2212 20)]",
|
|
12
|
+
"\u6E29\u4FEE\u6309\u5404\u6750\u8D28\u771F\u503C \u03B1\uFF08TB/T 2809-2026 6.10\uFF09\uFF1A\u94F6\uFF08CTAH\uFF090.00380 / \u9521\uFF08CTS\uFF090.00320 / \u9541\uFF08CTMH\uFF090.00270",
|
|
12
13
|
"\u603B\u91CD\u91CF\uFF1AW = w\u2080 \xD7 l\uFF08w\u2080 \u5355\u4F4D\u91CD\u91CF kg/km\uFF0Cl \u957F\u5EA6 km\uFF09"
|
|
13
14
|
],
|
|
14
15
|
references: [
|
|
15
16
|
"\u5185\u7F6E\u53C2\u6570\u8868\u6765\u6E90 TB/T 2809-2017\u300A\u7535\u6C14\u5316\u94C1\u8DEF\u7528\u94DC\u53CA\u94DC\u5408\u91D1\u63A5\u89E6\u7EBF\u300B\uFF082018-05-01 \u5B9E\u65BD\uFF09",
|
|
16
17
|
"\u5355\u4F4D\u91CD\u91CF\u4E3A\u6807\u79F0\u503C",
|
|
17
|
-
"\u8F7D\u6D41\u91CF\u4E3A 150\u2103 \u6301\u7EED\u503C\
|
|
18
|
+
"\u8F7D\u6D41\u91CF\u4E3A 150\u2103 \u6301\u7EED\u503C\uFF1A\u5BA4\u5185\u4E3B\u503C\u6309 TB/T 2809-2026 \u88685\uFF0C`ampacityIndoor150A2017` \u4E3A 2017 \u88685 \u540C\u70B9\u4F4D\u5BF9\u7167\uFF08\u65E2\u6709\u7EBF\u5386\u53F2\u91C7\u8D2D\u53C2\u7167\uFF09\uFF1B\u5BA4\u5916\u503C\u4E24\u7248\u540C\u503C",
|
|
18
19
|
"r\u2082\u2080 \u9664 CTMH-120 \u53D6\u7ED9\u5B9A\u503C\u5916\uFF0C\u5747\u6309\u5BFC\u7535\u7387\u53CD\u7B97\u4F30\u7B97\uFF08IACS \u6807\u51C6\u7535\u963B\u7387 0.017241 \u03A9\xB7mm\xB2/m \xF7 \u5BFC\u7535\u7387 \xF7 \u622A\u9762\u79EF\uFF1B0.017241 = 1/58\uFF09",
|
|
19
20
|
"\u6B63\u5F0F\u5DE5\u7A0B\u4EE5\u4EA7\u54C1\u6807\u51C6\u4E0E\u51FA\u5382\u68C0\u9A8C\u5355\u4E3A\u51C6"
|
|
20
21
|
],
|
|
@@ -30,46 +31,58 @@ var copperMeta = {
|
|
|
30
31
|
// src/copper/index.ts
|
|
31
32
|
var TB2809_WIRE_PARAMS = {
|
|
32
33
|
"CTMH-120": {
|
|
33
|
-
unitWeightKgPerKm:
|
|
34
|
-
r20OhmPerKm: 0.
|
|
35
|
-
|
|
34
|
+
unitWeightKgPerKm: 1076,
|
|
35
|
+
r20OhmPerKm: 0.2211,
|
|
36
|
+
resistanceAlphaPerDegC: 27e-4,
|
|
37
|
+
ampacityIndoor150A: 442,
|
|
38
|
+
ampacityIndoor150A2017: 430,
|
|
36
39
|
ampacityOutdoor150A: 560,
|
|
37
|
-
note: "\u53D6\u6807\u51C6 CTMH \u884C\uFF08\u9AD8\u5F3A\u5EA6\u94DC\u9541\u5408\u91D1\uFF09\
|
|
40
|
+
note: "\u53D6\u6807\u51C6 CTMH \u884C\uFF08\u9AD8\u5F3A\u5EA6\u94DC\u9541\u5408\u91D1\uFF09\uFF0Cr20 = \u03C1 \u4E0A\u9650 0.02653 \xF7 120\uFF082026-09-19 \u66F4\u6B63\uFF1A\u65E7\u503C 0.2113 \u8BEF\u7528 0.02535 \u6863\uFF09\uFF0C\u03B1=0.00270\uFF082026 \u7248 6.10 \u9541\uFF09"
|
|
38
41
|
},
|
|
39
42
|
"CTMH-150": {
|
|
40
|
-
unitWeightKgPerKm:
|
|
41
|
-
r20OhmPerKm: 0.
|
|
42
|
-
|
|
43
|
+
unitWeightKgPerKm: 1342,
|
|
44
|
+
r20OhmPerKm: 0.1769,
|
|
45
|
+
resistanceAlphaPerDegC: 27e-4,
|
|
46
|
+
ampacityIndoor150A: 524,
|
|
47
|
+
ampacityIndoor150A2017: 500,
|
|
43
48
|
ampacityOutdoor150A: 650,
|
|
44
|
-
note: "\u53D6\u6807\u51C6 CTMH \u884C\uFF08\u9AD8\u5F3A\u5EA6\u94DC\u9541\u5408\u91D1\uFF09"
|
|
49
|
+
note: "\u53D6\u6807\u51C6 CTMH \u884C\uFF08\u9AD8\u5F3A\u5EA6\u94DC\u9541\u5408\u91D1\uFF09\uFF0Cr20 = 0.02653 \xF7 150\uFF082026-09-19 \u66F4\u6B63\uFF1A\u65E7\u503C 0.169 \u8BEF\u7528 0.02535 \u6863\uFF09\uFF0C\u03B1=0.00270\uFF082026 \u7248 6.10 \u9541\uFF09"
|
|
45
50
|
},
|
|
46
51
|
"CTAH-120": {
|
|
47
|
-
unitWeightKgPerKm:
|
|
52
|
+
unitWeightKgPerKm: 1076,
|
|
48
53
|
r20OhmPerKm: 0.1481,
|
|
49
|
-
|
|
54
|
+
resistanceAlphaPerDegC: 38e-4,
|
|
55
|
+
ampacityIndoor150A: 509,
|
|
56
|
+
ampacityIndoor150A2017: 515,
|
|
50
57
|
ampacityOutdoor150A: 680,
|
|
51
|
-
note: "\u53D6\u6807\u51C6 CTA \u884C\uFF08\u94DC\u94F6\u5408\u91D1\uFF09\uFF0C\u03C1 \u2264 0.01777"
|
|
58
|
+
note: "\u53D6\u6807\u51C6 CTA \u884C\uFF08\u94DC\u94F6\u5408\u91D1\uFF09\uFF0C\u03C1 \u2264 0.01777\uFF0C\u03B1=0.00380\uFF082026 \u7248 6.10 \u94F6\uFF09"
|
|
52
59
|
},
|
|
53
60
|
"CTAH-150": {
|
|
54
|
-
unitWeightKgPerKm:
|
|
61
|
+
unitWeightKgPerKm: 1342,
|
|
55
62
|
r20OhmPerKm: 0.1185,
|
|
56
|
-
|
|
63
|
+
resistanceAlphaPerDegC: 38e-4,
|
|
64
|
+
ampacityIndoor150A: 593,
|
|
65
|
+
ampacityIndoor150A2017: 620,
|
|
57
66
|
ampacityOutdoor150A: 785,
|
|
58
|
-
note: "\u53D6\u6807\u51C6 CTA \u884C\uFF08\u94DC\u94F6\u5408\u91D1\uFF09"
|
|
67
|
+
note: "\u53D6\u6807\u51C6 CTA \u884C\uFF08\u94DC\u94F6\u5408\u91D1\uFF09\uFF0C\u03B1=0.00380\uFF082026 \u7248 6.10 \u94F6\uFF09"
|
|
59
68
|
},
|
|
60
69
|
"CTS-120": {
|
|
61
|
-
unitWeightKgPerKm:
|
|
62
|
-
r20OhmPerKm: 0.
|
|
63
|
-
|
|
70
|
+
unitWeightKgPerKm: 1079,
|
|
71
|
+
r20OhmPerKm: 0.1545,
|
|
72
|
+
resistanceAlphaPerDegC: 32e-4,
|
|
73
|
+
ampacityIndoor150A: 511,
|
|
74
|
+
ampacityIndoor150A2017: 515,
|
|
64
75
|
ampacityOutdoor150A: 680,
|
|
65
|
-
note: "\u53D6\u6807\u51C6 CTS \u884C\uFF08\u94DC\u9521\u5408\u91D1\uFF09\uFF0C\u8F7D\u6D41\u91CF\u6309 CTS \u884C\u53D6\u503C"
|
|
76
|
+
note: "\u53D6\u6807\u51C6 CTS \u884C\uFF08\u94DC\u9521\u5408\u91D1\uFF09\uFF0Cr20 = \u03C1 \u4E0A\u9650 0.01854 \xF7 120\uFF082026-09-19 \u66F4\u6B63\uFF1A\u65E7\u503C 0.1916 \u8BEF\u7528 0.02299 \u6863\uFF09\uFF0C\u8F7D\u6D41\u91CF\u6309 CTS \u884C\u53D6\u503C\uFF0C\u03B1=0.00320\uFF082026 \u7248 6.10 \u9521\uFF09"
|
|
66
77
|
},
|
|
67
78
|
"CTS-150": {
|
|
68
|
-
unitWeightKgPerKm:
|
|
69
|
-
r20OhmPerKm: 0.
|
|
70
|
-
|
|
79
|
+
unitWeightKgPerKm: 1347,
|
|
80
|
+
r20OhmPerKm: 0.1236,
|
|
81
|
+
resistanceAlphaPerDegC: 32e-4,
|
|
82
|
+
ampacityIndoor150A: 590,
|
|
83
|
+
ampacityIndoor150A2017: 620,
|
|
71
84
|
ampacityOutdoor150A: 790,
|
|
72
|
-
note: "\u53D6\u6807\u51C6 CTS \u884C\uFF08\u94DC\u9521\u5408\u91D1\uFF09\uFF0C\u8F7D\u6D41\u91CF\u6309 CTS \u884C\u53D6\u503C"
|
|
85
|
+
note: "\u53D6\u6807\u51C6 CTS \u884C\uFF08\u94DC\u9521\u5408\u91D1\uFF09\uFF0Cr20 = 0.01854 \xF7 150\uFF082026-09-19 \u66F4\u6B63\uFF1A\u65E7\u503C 0.1533 \u8BEF\u7528 0.02299 \u6863\uFF09\uFF0C\u8F7D\u6D41\u91CF\u6309 CTS \u884C\u53D6\u503C\uFF0C\u03B1=0.00320\uFF082026 \u7248 6.10 \u9521\uFF09"
|
|
73
86
|
}
|
|
74
87
|
};
|
|
75
88
|
function wireLookup(input) {
|
|
@@ -84,7 +97,11 @@ function wireLookup(input) {
|
|
|
84
97
|
if (ambientTempDegC < -40 || ambientTempDegC > 90) {
|
|
85
98
|
throw new RangeError(`\u9002\u7528\u6E29\u5EA6\u4E3A \u221240 ~ 90 \u2103\uFF0C\u6536\u5230 ${ambientTempDegC} \u2103`);
|
|
86
99
|
}
|
|
87
|
-
const rT = _chunkDGO2DCO5cjs.resistanceAtTempOhmPerKm.call(void 0,
|
|
100
|
+
const rT = _chunkDGO2DCO5cjs.resistanceAtTempOhmPerKm.call(void 0,
|
|
101
|
+
params.r20OhmPerKm,
|
|
102
|
+
ambientTempDegC,
|
|
103
|
+
params.resistanceAlphaPerDegC
|
|
104
|
+
);
|
|
88
105
|
return {
|
|
89
106
|
model,
|
|
90
107
|
...params,
|
|
@@ -99,4 +116,4 @@ function wireLookup(input) {
|
|
|
99
116
|
|
|
100
117
|
|
|
101
118
|
exports.copperMeta = copperMeta; exports.TB2809_WIRE_PARAMS = TB2809_WIRE_PARAMS; exports.wireLookup = wireLookup;
|
|
102
|
-
//# sourceMappingURL=chunk-
|
|
119
|
+
//# sourceMappingURL=chunk-FRYBXJCM.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-FRYBXJCM.cjs","../src/copper/meta.ts","../src/copper/index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-FRYBXJCM.cjs","sourcesContent":[null,"import type { CalculatorMeta } from '../types';\n\nexport const copperMeta: CalculatorMeta = {\n name: '接触线参数速查',\n nameEn: 'Contact Wire Parameter Lookup',\n summary:\n '内置 CTMH / CTAH / CTS 系列 120/150 mm² 接触线参数表,按长度与环境温度给出总重量与温度修正电阻。',\n formula: [\n '电阻温度修正(α 按型号取真值):r_T = r₂₀·[1 + α·(T − 20)]',\n '温修按各材质真值 α(TB/T 2809-2026 6.10):银(CTAH)0.00380 / 锡(CTS)0.00320 / 镁(CTMH)0.00270',\n '总重量:W = w₀ × l(w₀ 单位重量 kg/km,l 长度 km)',\n ],\n references: [\n '内置参数表来源 TB/T 2809-2017《电气化铁路用铜及铜合金接触线》(2018-05-01 实施)',\n '单位重量为标称值',\n '载流量为 150℃ 持续值:室内主值按 TB/T 2809-2026 表5,`ampacityIndoor150A2017` 为 2017 表5 同点位对照(既有线历史采购参照);室外值两版同值',\n 'r₂₀ 除 CTMH-120 取给定值外,均按导电率反算估算(IACS 标准电阻率 0.017241 Ω·mm²/m ÷ 导电率 ÷ 截面积;0.017241 = 1/58)',\n '正式工程以产品标准与出厂检验单为准',\n ],\n scope: [\n '温度修正仅覆盖电阻,未修正单位重量与载流量',\n '适用温度 −40 ~ 90 ℃',\n '载流量为 150℃ 允许温度下的持续值,未做环境温度修正',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/copper/',\n};\n","export { copperMeta } from './meta';\n\n// 电阻温度修正与铜常数统一放在 src/common/resistance.ts(copper 与 voltage-drop 共用),\n// 由根 index 统一导出,此处仅内部引用,避免重复导出同名符号。\nimport { resistanceAtTempOhmPerKm } from '../common/resistance';\n\n/** 站点计算器内置的 6 个型号 */\nexport type CopperWireModel =\n | 'CTMH-120'\n | 'CTMH-150'\n | 'CTAH-120'\n | 'CTAH-150'\n | 'CTS-120'\n | 'CTS-150';\n\nexport interface WireParamEntry {\n /** 单位重量,kg/km(标称值) */\n readonly unitWeightKgPerKm: number;\n /** 20℃ 直流电阻,Ω/km */\n readonly r20OhmPerKm: number;\n /** 电阻温度系数 α,1/℃(按材质真值,TB/T 2809-2026 6.10) */\n readonly resistanceAlphaPerDegC: number;\n /** 150℃ 持续载流量,室内口径,A(主值 = TB/T 2809-2026 表5) */\n readonly ampacityIndoor150A: number;\n /** 150℃ 持续载流量,室内口径,A(TB/T 2809-2017 表5 同点位对照值,既有线历史采购参照) */\n readonly ampacityIndoor150A2017: number;\n /** 150℃ 持续载流量,室外口径,A(两版标准同值) */\n readonly ampacityOutdoor150A: number;\n /** 口径说明:本行实际对应标准中的哪一行 */\n readonly note: string;\n}\n\n/**\n * 接触线参数表,来源 TB/T 2809-2017。\n *\n * 载流量为 150℃ 持续值(室内/室外双口径,标准表5)。\n *\n * r₂₀ 口径 = 各材质 20℃ 电阻率上限 ÷ 标称截面。2026-09-19 全表复核:\n * 更正 CTMH-120/150(旧值误用 0.02535 档,应 0.02653)与\n * CTS-120/150(旧值误用 0.02299 档,应 0.01854)四行错档值,\n * 已随站点 `/calculator/assets/calc-core.js` 同批修正。\n *\n * 注:站点曾因显示层 `fmt()` 的尾零剥离正则把载流量渲染成 43/56(应为 430/560),\n * 已于 R38 之后修复。若再遇渲染值与本表不符,先确认是否为显示层问题:\n * 本表与服务端数据源始终一致。\n *\n * 单位重量口径(2026-09-19 更正):六行 unitWeightKgPerKm 已按 TB/T 2809-2017\n * 表3 参考单位质量逐项更正——CTMH-120 1082→1076、CTMH-150 1350→1342、\n * CTAH-120 1070→1076、CTAH-150 1330→1342、CTS-120 1080→1079、CTS-150 1345→1347\n * (旧值混入了 TB/T 2810 纯铜表 1082 及近似凑整值)。站点 `calc-core.js` 的\n * COPPER_TABLE 已于 2026-09-19 同值更正(1076 系),两侧一致;r₂₀/载流量两列不受影响。\n *\n * ⚠️ 注意型号口径:CTMH / CTAH / CTS 是站点计算器的型号代码,与标准中的\n * CTMH / CTA / CTS 并非同名对应。`note` 字段说明各行实际取自标准的哪一行,\n * 交叉引用 TB/T 2809-2017 时请以 note 为准。\n *\n * 载流量 150℃ 室内主值 = TB/T 2809-2026 表5(2026-09-19 据正版文本核入),\n * `ampacityIndoor150A2017` 对照字段为 2017 表5 同点位值(既有线历史采购参照);\n * 室外值两版同值。\n *\n * 电阻温度系数口径(2026-09-19 实装,修复批 D):每行 resistanceAlphaPerDegC\n * 按各材质真值取(TB/T 2809-2026 6.10)——银(CTAH)0.00380、锡(CTS)0.00320、\n * 镁(CTMH)0.00270;旧版统一用纯铜 0.00393 系「纯铜近似」(偏保守),已废弃。\n */\nexport const TB2809_WIRE_PARAMS: Record<CopperWireModel, WireParamEntry> = {\n 'CTMH-120': {\n unitWeightKgPerKm: 1076,\n r20OhmPerKm: 0.2211,\n resistanceAlphaPerDegC: 0.0027,\n ampacityIndoor150A: 442,\n ampacityIndoor150A2017: 430,\n ampacityOutdoor150A: 560,\n note: '取标准 CTMH 行(高强度铜镁合金),r20 = ρ 上限 0.02653 ÷ 120(2026-09-19 更正:旧值 0.2113 误用 0.02535 档),α=0.00270(2026 版 6.10 镁)',\n },\n 'CTMH-150': {\n unitWeightKgPerKm: 1342,\n r20OhmPerKm: 0.1769,\n resistanceAlphaPerDegC: 0.0027,\n ampacityIndoor150A: 524,\n ampacityIndoor150A2017: 500,\n ampacityOutdoor150A: 650,\n note: '取标准 CTMH 行(高强度铜镁合金),r20 = 0.02653 ÷ 150(2026-09-19 更正:旧值 0.169 误用 0.02535 档),α=0.00270(2026 版 6.10 镁)',\n },\n 'CTAH-120': {\n unitWeightKgPerKm: 1076,\n r20OhmPerKm: 0.1481,\n resistanceAlphaPerDegC: 0.0038,\n ampacityIndoor150A: 509,\n ampacityIndoor150A2017: 515,\n ampacityOutdoor150A: 680,\n note: '取标准 CTA 行(铜银合金),ρ ≤ 0.01777,α=0.00380(2026 版 6.10 银)',\n },\n 'CTAH-150': {\n unitWeightKgPerKm: 1342,\n r20OhmPerKm: 0.1185,\n resistanceAlphaPerDegC: 0.0038,\n ampacityIndoor150A: 593,\n ampacityIndoor150A2017: 620,\n ampacityOutdoor150A: 785,\n note: '取标准 CTA 行(铜银合金),α=0.00380(2026 版 6.10 银)',\n },\n 'CTS-120': {\n unitWeightKgPerKm: 1079,\n r20OhmPerKm: 0.1545,\n resistanceAlphaPerDegC: 0.0032,\n ampacityIndoor150A: 511,\n ampacityIndoor150A2017: 515,\n ampacityOutdoor150A: 680,\n note: '取标准 CTS 行(铜锡合金),r20 = ρ 上限 0.01854 ÷ 120(2026-09-19 更正:旧值 0.1916 误用 0.02299 档),载流量按 CTS 行取值,α=0.00320(2026 版 6.10 锡)',\n },\n 'CTS-150': {\n unitWeightKgPerKm: 1347,\n r20OhmPerKm: 0.1236,\n resistanceAlphaPerDegC: 0.0032,\n ampacityIndoor150A: 590,\n ampacityIndoor150A2017: 620,\n ampacityOutdoor150A: 790,\n note: '取标准 CTS 行(铜锡合金),r20 = 0.01854 ÷ 150(2026-09-19 更正:旧值 0.1533 误用 0.02299 档),载流量按 CTS 行取值,α=0.00320(2026 版 6.10 锡)',\n },\n};\n\nexport interface CopperLookupInput {\n readonly model: CopperWireModel;\n /** 长度 l,km */\n readonly lengthKm: number;\n /** 环境温度 T,℃ */\n readonly ambientTempDegC: number;\n}\n\nexport interface CopperLookupResult extends WireParamEntry {\n readonly model: CopperWireModel;\n /** 总重量 W = w₀ × l,kg */\n readonly totalWeightKg: number;\n /** 温度修正电阻 r_T,Ω/km */\n readonly rTOhmPerKm: number;\n /** 全长温度修正电阻,Ω */\n readonly totalResistanceOhm: number;\n}\n\n/**\n * 按型号、长度与环境温度给出接触线参数速查结果。\n */\nexport function wireLookup(input: CopperLookupInput): CopperLookupResult {\n const { model, lengthKm, ambientTempDegC } = input;\n\n const params = TB2809_WIRE_PARAMS[model];\n if (params === undefined) {\n throw new RangeError(`未知型号:${model}`);\n }\n if (!(lengthKm > 0)) {\n throw new RangeError(`长度必须为正数,收到 ${lengthKm} km`);\n }\n if (ambientTempDegC < -40 || ambientTempDegC > 90) {\n throw new RangeError(`适用温度为 −40 ~ 90 ℃,收到 ${ambientTempDegC} ℃`);\n }\n\n // 温修按各材质真值 α(TB/T 2809-2026 6.10),不再用纯铜 0.00393 近似\n const rT = resistanceAtTempOhmPerKm(\n params.r20OhmPerKm,\n ambientTempDegC,\n params.resistanceAlphaPerDegC,\n );\n\n return {\n model,\n ...params,\n totalWeightKg: params.unitWeightKgPerKm * lengthKm,\n rTOhmPerKm: rT,\n totalResistanceOhm: rT * lengthKm,\n };\n}\n"]}
|
|
@@ -14,9 +14,10 @@ var strokeMeta = {
|
|
|
14
14
|
"\u8865\u507F\u88C5\u7F6E\u4EA7\u54C1\u8981\u6C42\u89C1 TB/T 2075.12-2024\uFF08\u6ED1\u8F6E\u8865\u507F\u88C5\u7F6E\uFF09\u3001TB/T 2075.13-2024\uFF08\u68D8\u8F6E\u8865\u507F\u88C5\u7F6E\uFF09\u4E0E TB/T 2073-2020\uFF08\u96F6\u90E8\u4EF6\u6280\u672F\u6761\u4EF6\uFF09"
|
|
15
15
|
],
|
|
16
16
|
scope: [
|
|
17
|
-
"\u951A\u6BB5\u957F\u5EA6 L \
|
|
17
|
+
"\u951A\u6BB5\u957F\u5EA6 L \u6309\u534A\u951A\u6BB5\u53D6\u503C\uFF08\u4E2D\u5FC3\u951A\u7ED3\u81F3\u8865\u507F\u5668\uFF09",
|
|
18
18
|
"\u8BBE\u8BA1\u6E29\u5DEE \u0394t \u4E3A\u6700\u9AD8\u4E0E\u6700\u4F4E\u8BBE\u8BA1\u6E29\u5EA6\u4E4B\u5DEE",
|
|
19
19
|
"\u94DC\u5408\u91D1\u7EBF\u81A8\u80C0\u7CFB\u6570\u7EA6 1.7\xD710\u207B\u2075/\u2103\uFF08EN 50149 \u94DC\u9521\u63A5\u89E6\u7EBF\u6570\u636E\u8868\uFF09",
|
|
20
|
+
"\u951A\u6BB5\u957F\u5EA6\u6309\u534A\u951A\u6BB5\u53E3\u5F84\u8F93\u5165\uFF08\u4E2D\u5FC3\u951A\u7ED3\u81F3\u8865\u507F\u5668\uFF09\uFF1A\u53CC\u8FB9\u8865\u507F\u65F6\u6BCF\u4FA7\u8865\u507F\u88C5\u7F6E\u4EC5\u670D\u52A1\u534A\u951A\u6BB5\uFF082026-09-19 \u53E3\u5F84\u66F4\u6B63\uFF09",
|
|
20
21
|
"\u5168\u8865\u507F\u951A\u6BB5\u627F\u529B\u7D22\u4FA7\u987B\u53E6\u884C\u8BA1\u7B97",
|
|
21
22
|
"\u53C2\u6570\u53D6\u503C\u4EE5\u8BBE\u8BA1\u89C4\u7A0B\u4E3A\u51C6"
|
|
22
23
|
],
|
|
@@ -98,4 +99,4 @@ export {
|
|
|
98
99
|
requiredStrokeMM,
|
|
99
100
|
strokeCheck
|
|
100
101
|
};
|
|
101
|
-
//# sourceMappingURL=chunk-
|
|
102
|
+
//# sourceMappingURL=chunk-G5ZI24PW.js.map
|