ocs-calculators 0.2.2 → 0.3.1
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 +83 -0
- package/README.md +36 -28
- package/README_EN.md +131 -23
- package/dist/anchor-length/index.cjs +2 -2
- package/dist/anchor-length/index.js +1 -1
- 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-CSLI5HEJ.cjs → chunk-JJR7ROMG.cjs} +6 -1
- package/dist/chunk-JJR7ROMG.cjs.map +1 -0
- package/dist/{chunk-75EGROQB.js → chunk-L7JKLVQW.js} +6 -1
- package/dist/{chunk-75EGROQB.js.map → chunk-L7JKLVQW.js.map} +1 -1
- 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 +17 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +26 -24
- 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-CSLI5HEJ.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
package/dist/index.d.ts
CHANGED
|
@@ -144,6 +144,9 @@ declare function weightOfPresetNPerM(spec: WireSpec): number;
|
|
|
144
144
|
/**
|
|
145
145
|
* TB/T 2809-2017 表5 持续载流量参考值(A)。
|
|
146
146
|
*
|
|
147
|
+
* ⚠️ 2017 版表5 历史参考(全 9 材质);2026 版现行口径见 TB2809_WIRE_PARAMS
|
|
148
|
+
* 双字段(src/copper/index.ts:ampacityIndoor150A 主值 / ampacityIndoor150A2017 对照)。
|
|
149
|
+
*
|
|
147
150
|
* 来源:itswe.com 标准规范库,据 TB/T 2809-2017 无水印全文扫描件逐格复核。
|
|
148
151
|
*
|
|
149
152
|
* 查表语义:
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
DEFAULT_MIN_END_VOLTAGE_V,
|
|
12
12
|
voltageDropCheck,
|
|
13
13
|
voltageDropMeta
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-53ONNIVL.js";
|
|
15
15
|
import {
|
|
16
16
|
DEFAULT_WARN_THRESHOLD,
|
|
17
17
|
kmHToMPerS,
|
|
@@ -20,6 +20,12 @@ import {
|
|
|
20
20
|
waveSpeedCheck,
|
|
21
21
|
wavespeedMeta
|
|
22
22
|
} from "./chunk-VAHQDIMW.js";
|
|
23
|
+
import {
|
|
24
|
+
DEFAULT_REPLACEMENT_THRESHOLD_PERCENT,
|
|
25
|
+
sectionFromDiameterMM2,
|
|
26
|
+
wearMeta,
|
|
27
|
+
wearRatio
|
|
28
|
+
} from "./chunk-LDSV3U4M.js";
|
|
23
29
|
import {
|
|
24
30
|
AIR_DENSITY_KG_PER_M3,
|
|
25
31
|
windClearanceCheck,
|
|
@@ -27,12 +33,6 @@ import {
|
|
|
27
33
|
windLoadNPerM,
|
|
28
34
|
windMeta
|
|
29
35
|
} from "./chunk-RVG3LEZQ.js";
|
|
30
|
-
import {
|
|
31
|
-
DEFAULT_REPLACEMENT_THRESHOLD_PERCENT,
|
|
32
|
-
sectionFromDiameterMM2,
|
|
33
|
-
wearMeta,
|
|
34
|
-
wearRatio
|
|
35
|
-
} from "./chunk-LDSV3U4M.js";
|
|
36
36
|
import {
|
|
37
37
|
DEFAULT_PANTOGRAPH_HEIGHT_M,
|
|
38
38
|
STANDARD_GAUGE_M,
|
|
@@ -40,7 +40,14 @@ import {
|
|
|
40
40
|
curveStaggerCheck,
|
|
41
41
|
curveStaggerMeta,
|
|
42
42
|
versineM
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-XRSWKYS6.js";
|
|
44
|
+
import {
|
|
45
|
+
dropperLengths,
|
|
46
|
+
dropperMeta,
|
|
47
|
+
dropperPositionsM,
|
|
48
|
+
maxParabolaSagM,
|
|
49
|
+
parabolaSagM
|
|
50
|
+
} from "./chunk-XQBTMD7W.js";
|
|
44
51
|
import {
|
|
45
52
|
REF_TARGET_COEFF,
|
|
46
53
|
REF_TARGET_OFFSET_N,
|
|
@@ -56,13 +63,6 @@ import {
|
|
|
56
63
|
icingCheck,
|
|
57
64
|
icingMeta
|
|
58
65
|
} from "./chunk-GN6QNOUL.js";
|
|
59
|
-
import {
|
|
60
|
-
dropperLengths,
|
|
61
|
-
dropperMeta,
|
|
62
|
-
dropperPositionsM,
|
|
63
|
-
maxParabolaSagM,
|
|
64
|
-
parabolaSagM
|
|
65
|
-
} from "./chunk-UO2PHBC3.js";
|
|
66
66
|
import {
|
|
67
67
|
STEEL_POLE_SERIES_KNM,
|
|
68
68
|
TEST_MOMENT_FACTOR,
|
|
@@ -88,7 +88,7 @@ import {
|
|
|
88
88
|
requiredStrokeMM,
|
|
89
89
|
strokeCheck,
|
|
90
90
|
strokeMeta
|
|
91
|
-
} from "./chunk-
|
|
91
|
+
} from "./chunk-G5ZI24PW.js";
|
|
92
92
|
import {
|
|
93
93
|
DEFAULT_BASE_AMBIENT_TEMP_DEG_C,
|
|
94
94
|
ampacityDeratingFactor,
|
|
@@ -101,21 +101,21 @@ import {
|
|
|
101
101
|
TENSION_DIFF_RATIO,
|
|
102
102
|
anchorLengthCheck,
|
|
103
103
|
anchorLengthMeta
|
|
104
|
-
} from "./chunk-
|
|
104
|
+
} from "./chunk-L7JKLVQW.js";
|
|
105
|
+
import {
|
|
106
|
+
bValue,
|
|
107
|
+
bvalueMeta
|
|
108
|
+
} from "./chunk-DN6BVPCQ.js";
|
|
105
109
|
import {
|
|
106
110
|
ASSEMBLY_TOLERANCE_MM,
|
|
107
111
|
cantileverCut,
|
|
108
112
|
cantileverMeta
|
|
109
113
|
} from "./chunk-HZWNKKIB.js";
|
|
110
|
-
import {
|
|
111
|
-
bValue,
|
|
112
|
-
bvalueMeta
|
|
113
|
-
} from "./chunk-3GREMF76.js";
|
|
114
114
|
import {
|
|
115
115
|
TB2809_WIRE_PARAMS,
|
|
116
116
|
copperMeta,
|
|
117
117
|
wireLookup
|
|
118
|
-
} from "./chunk-
|
|
118
|
+
} from "./chunk-ES3AQ52A.js";
|
|
119
119
|
import {
|
|
120
120
|
COPPER_ALPHA_PER_DEG_C,
|
|
121
121
|
IACS_RESISTIVITY_OHM_MM2_PER_M,
|
|
@@ -131,7 +131,7 @@ import {
|
|
|
131
131
|
import {
|
|
132
132
|
crossSpanAnalyze,
|
|
133
133
|
crossSpanMeta
|
|
134
|
-
} from "./chunk-
|
|
134
|
+
} from "./chunk-2HYOBL6M.js";
|
|
135
135
|
|
|
136
136
|
// src/data/wire-specs.ts
|
|
137
137
|
var REFERENCE_DENSITY_G_PER_CM3 = 8.94;
|
|
@@ -174,7 +174,9 @@ var WIRE_PRESETS = [
|
|
|
174
174
|
nameEn: "CTAH-120 (CuAg 120 mm\xB2)",
|
|
175
175
|
crossSectionMM2: 120,
|
|
176
176
|
calculatedSectionMM2: 121,
|
|
177
|
-
|
|
177
|
+
// 铜银合金 E=117 GPa,对齐站点 /calculator/tension/ 预设(2026-09-19 审计更正,
|
|
178
|
+
// 旧值 120 误沿用铜镁档)
|
|
179
|
+
elasticModulusGPa: 117,
|
|
178
180
|
expansionPerDegC: COPPER_ALLOY_ALPHA_PER_DEG_C,
|
|
179
181
|
linearMassKgPerM: unitWeightToKgPerM(STANDARD_UNIT_WEIGHT_KG_PER_KM.ctha120)
|
|
180
182
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/wire-specs.ts","../src/data/tb2809-ampacity.ts"],"sourcesContent":["import { G0 } from '../types';\n\n/**\n * 接触线线材参数预设。\n *\n * ⚠️ 全部为标称参考值,实际取值以产品技术条件与设计文件为准。\n * ⚠️ 本站计算器的参数界面支持手工覆盖这些值 —— 那才是工程上正确的用法。\n *\n * 自重口径(2026-08-31 已确定):\n * 线密度取标准「参考单位质量」表值,而非由标称截面推算。标准表分两列:\n * 型号|标称截面|计算截面|参考单位质量\n * CT 120|120|121|1082 kg/km\n * 注:参考单位质量按密度 8.94 g/cm³ 计算\n * 即标准的 8.94 g/cm³ 是配「计算截面」(把尺寸公差计入后的截面)用的,\n * 不是配「标称截面」用的:121 × 8.94 × 1e-3 = 1.0817 ≈ 1.082 kg/m。\n * 因此 CTMH-120 自重 g = 1.082 × 9.81 = 10.61442 N/m,\n * 与站点 /calculator/tension/ 预设 rho=1.082、COPPER_TABLE.unitWeight=1082 一致。\n * 早期版本用标称截面 120 直接推算得 1.0728 kg/m,偏低约 0.85%,已废弃。\n *\n * 依据:TB/T 2810-2017(纯铜)、TB/T 2821-2017(铜银)规格尺寸表;\n * CTMH/CTAH 型号口径与 TB/T 2809-2017 的对应关系见 copper 模块 note 字段。\n */\n\nexport interface WireSpec {\n /** 唯一标识 */\n readonly id: WirePresetId;\n /** 中文名 */\n readonly name: string;\n /** 英文名 */\n readonly nameEn: string;\n /** 标称截面积 A,mm² */\n readonly crossSectionMM2: number;\n /** 计算截面积,mm²(标准表列,自重按此值 × 8.94 g/cm³ 计) */\n readonly calculatedSectionMM2: number;\n /** 弹性模量 E,GPa(标称参考值) */\n readonly elasticModulusGPa: number;\n /** 线膨胀系数 α,1/℃(标称参考值) */\n readonly expansionPerDegC: number;\n /** 线密度,kg/m(标准参考单位质量) */\n readonly linearMassKgPerM: number;\n}\n\n/** 参考密度,g/cm³(标准注:参考单位质量按此密度计) */\nexport const REFERENCE_DENSITY_G_PER_CM3 = 8.94;\n\n/** 线材预设 id */\nexport type WirePresetId = 'cthm120' | 'cthm150' | 'ctha120';\n\n/**\n * 标准「参考单位质量」表,kg/km。\n * 与 `src/copper/index.ts` 的 TB2809_WIRE_PARAMS.unitWeightKgPerKm 同源\n * (站点 /calculator/assets/calc-core.js 的 COPPER_TABLE)。\n */\nexport const STANDARD_UNIT_WEIGHT_KG_PER_KM: Readonly<Record<WirePresetId, number>> = {\n cthm120: 1082,\n cthm150: 1350,\n ctha120: 1070,\n};\n\n/** 由标准参考单位质量换算线密度,kg/m */\nexport function unitWeightToKgPerM(kgPerKm: number): number {\n return kgPerKm / 1000;\n}\n\n/**\n * 由截面积与密度反算线密度。\n *\n * ⚠️ 传入的必须是「计算截面」而非「标称截面」,否则结果偏低约 0.85%。\n * 120 mm² 标称对应计算截面 121 mm²;150 mm² 标称对应 151 mm²。\n *\n * @param crossSectionMM2 计算截面积,mm²\n * @param densityGPerCm3 密度,g/cm³\n * @returns 线密度,kg/m\n */\nexport function deriveLinearMassKgPerM(\n crossSectionMM2: number,\n densityGPerCm3: number = REFERENCE_DENSITY_G_PER_CM3,\n): number {\n // A[mm²] × 1e-6 [m²/mm²] × ρ[g/cm³] × 1000 [kg/m³ per g/cm³]\n return crossSectionMM2 * 1e-6 * densityGPerCm3 * 1000;\n}\n\n/** 铜及铜合金接触线的常用线膨胀系数,1/℃ */\nexport const COPPER_ALLOY_ALPHA_PER_DEG_C = 1.7e-5;\n\nexport const WIRE_PRESETS: readonly WireSpec[] = [\n {\n id: 'cthm120',\n name: 'CTMH-120(铜镁 120)',\n nameEn: 'CTMH-120 (CuMg 120 mm²)',\n crossSectionMM2: 120,\n calculatedSectionMM2: 121,\n elasticModulusGPa: 120,\n expansionPerDegC: COPPER_ALLOY_ALPHA_PER_DEG_C,\n linearMassKgPerM: unitWeightToKgPerM(STANDARD_UNIT_WEIGHT_KG_PER_KM.cthm120),\n },\n {\n id: 'cthm150',\n name: 'CTMH-150(铜镁 150)',\n nameEn: 'CTMH-150 (CuMg 150 mm²)',\n crossSectionMM2: 150,\n calculatedSectionMM2: 151,\n elasticModulusGPa: 120,\n expansionPerDegC: COPPER_ALLOY_ALPHA_PER_DEG_C,\n linearMassKgPerM: unitWeightToKgPerM(STANDARD_UNIT_WEIGHT_KG_PER_KM.cthm150),\n },\n {\n id: 'ctha120',\n name: 'CTAH-120(铜银 120)',\n nameEn: 'CTAH-120 (CuAg 120 mm²)',\n crossSectionMM2: 120,\n calculatedSectionMM2: 121,\n elasticModulusGPa: 120,\n expansionPerDegC: COPPER_ALLOY_ALPHA_PER_DEG_C,\n linearMassKgPerM: unitWeightToKgPerM(STANDARD_UNIT_WEIGHT_KG_PER_KM.ctha120),\n },\n];\n\n/** 按 id 取线材预设,找不到返回 undefined */\nexport function findWirePreset(id: string): WireSpec | undefined {\n return WIRE_PRESETS.find((w) => w.id === id);\n}\n\n/**\n * 由线密度求单位自重荷载 g,N/m。\n * @param linearMassKgPerM 线密度,kg/m\n */\nexport function weightPerLengthNPerM(linearMassKgPerM: number): number {\n return linearMassKgPerM * G0;\n}\n\n/**\n * 由线材预设直接取单位自重荷载 g,N/m。\n */\nexport function weightOfPresetNPerM(spec: WireSpec): number {\n return weightPerLengthNPerM(spec.linearMassKgPerM);\n}\n","/**\n * TB/T 2809-2017 表5 持续载流量参考值(A)。\n *\n * 来源:itswe.com 标准规范库,据 TB/T 2809-2017 无水印全文扫描件逐格复核。\n *\n * 查表语义:\n * - 返回数值:该项载流量\n * - 返回 null:该 (材质, 截面) 规格存在,但该工况按标准原文注\"不需要考核\"\n * (如纯铜接触线不考核 150℃ 工况)\n * - 返回 undefined:该材质无此截面规格(如铜铬锆无 120 mm²)\n *\n * ⚠️ 表中为室内(无风无日照试验条件)值与室外值;工程取值请以标准原文与\n * 产品技术条件为准。高海拔、隧道内等场景须另行叠加散热修正。\n */\n\nexport type ContactWireTypeCode =\n | 'CT'\n | 'CTA'\n | 'CTS'\n | 'CTSM'\n | 'CTSH'\n | 'CTM'\n | 'CTMM'\n | 'CTMH'\n | 'CTCZ';\n\n/** 载流量考核工况 */\nexport type AmpacityCondition = 'indoor-95' | 'outdoor-95' | 'indoor-150' | 'outdoor-150';\n\nexport type CrossSectionMM2 = 120 | 150;\n\n/** 按截面索引的载流量对,[120 mm², 150 mm²] */\ntype SectionPair = readonly [number | null, number | null];\n\nexport interface AmpacityEntry {\n readonly type: ContactWireTypeCode;\n readonly materialZh: string;\n /** 标称截面,mm² */\n readonly crossSectionMM2: CrossSectionMM2;\n readonly condition: AmpacityCondition;\n /** 持续载流量,A。null 表示该项不需要考核 */\n readonly ampacityA: number | null;\n}\n\nconst M = (\n type: ContactWireTypeCode,\n materialZh: string,\n sections: readonly CrossSectionMM2[],\n indoor95: SectionPair,\n outdoor95: SectionPair,\n indoor150: SectionPair,\n outdoor150: SectionPair,\n): AmpacityEntry[] => {\n const conditions: ReadonlyArray<readonly [AmpacityCondition, SectionPair]> = [\n ['indoor-95', indoor95],\n ['outdoor-95', outdoor95],\n ['indoor-150', indoor150],\n ['outdoor-150', outdoor150],\n ];\n const out: AmpacityEntry[] = [];\n for (const section of sections) {\n for (const [condition, pair] of conditions) {\n const value = section === 120 ? pair[0] : pair[1];\n out.push({\n type,\n materialZh,\n crossSectionMM2: section,\n condition,\n ampacityA: value ?? null,\n });\n }\n }\n return out;\n};\n\nexport const TB2809_AMPACITY_A: readonly AmpacityEntry[] = [\n ...M('CT', '铜', [120, 150], [360, 425], [495, 570], [null, null], [null, null]),\n ...M('CTA', '铜银', [120, 150], [360, 425], [495, 570], [515, 620], [680, 785]),\n ...M('CTS', '铜锡', [120, 150], [360, 425], [490, 565], [515, 620], [680, 790]),\n ...M('CTSM', '铜锡', [120, 150], [330, 400], [455, 525], [490, 560], [630, 730]),\n ...M('CTSH', '铜锡', [120, 150], [310, 360], [420, 480], [450, 520], [580, 670]),\n ...M('CTM', '铜镁', [120, 150], [330, 400], [455, 525], [490, 560], [630, 730]),\n ...M('CTMM', '铜镁', [120, 150], [310, 360], [420, 480], [450, 520], [580, 670]),\n ...M('CTMH', '铜镁', [120, 150], [300, 340], [410, 460], [430, 500], [560, 650]),\n ...M('CTCZ', '铜铬锆', [150], [null, 395], [null, 505], [null, 580], [null, 710]),\n];\n\n/**\n * 查表。\n * @returns 载流量 A;该规格存在但不考核时为 null;该材质无此截面时为 undefined\n */\nexport function findAmpacityA(params: {\n type: ContactWireTypeCode;\n crossSectionMM2: CrossSectionMM2;\n condition: AmpacityCondition;\n}): number | null | undefined {\n const row = TB2809_AMPACITY_A.find(\n (e) =>\n e.type === params.type &&\n e.crossSectionMM2 === params.crossSectionMM2 &&\n e.condition === params.condition,\n );\n return row === undefined ? undefined : row.ampacityA;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/data/wire-specs.ts","../src/data/tb2809-ampacity.ts"],"sourcesContent":["import { G0 } from '../types';\n\n/**\n * 接触线线材参数预设。\n *\n * ⚠️ 全部为标称参考值,实际取值以产品技术条件与设计文件为准。\n * ⚠️ 本站计算器的参数界面支持手工覆盖这些值 —— 那才是工程上正确的用法。\n *\n * 自重口径(2026-08-31 已确定):\n * 线密度取标准「参考单位质量」表值,而非由标称截面推算。标准表分两列:\n * 型号|标称截面|计算截面|参考单位质量\n * CT 120|120|121|1082 kg/km\n * 注:参考单位质量按密度 8.94 g/cm³ 计算\n * 即标准的 8.94 g/cm³ 是配「计算截面」(把尺寸公差计入后的截面)用的,\n * 不是配「标称截面」用的:121 × 8.94 × 1e-3 = 1.0817 ≈ 1.082 kg/m。\n * 因此 CTMH-120 自重 g = 1.082 × 9.81 = 10.61442 N/m,\n * 与站点 /calculator/tension/ 预设 rho=1.082、COPPER_TABLE.unitWeight=1082 一致。\n * 早期版本用标称截面 120 直接推算得 1.0728 kg/m,偏低约 0.85%,已废弃。\n *\n * 依据:TB/T 2810-2017(纯铜)、TB/T 2821-2017(铜银)规格尺寸表;\n * CTMH/CTAH 型号口径与 TB/T 2809-2017 的对应关系见 copper 模块 note 字段。\n */\n\nexport interface WireSpec {\n /** 唯一标识 */\n readonly id: WirePresetId;\n /** 中文名 */\n readonly name: string;\n /** 英文名 */\n readonly nameEn: string;\n /** 标称截面积 A,mm² */\n readonly crossSectionMM2: number;\n /** 计算截面积,mm²(标准表列,自重按此值 × 8.94 g/cm³ 计) */\n readonly calculatedSectionMM2: number;\n /** 弹性模量 E,GPa(标称参考值) */\n readonly elasticModulusGPa: number;\n /** 线膨胀系数 α,1/℃(标称参考值) */\n readonly expansionPerDegC: number;\n /** 线密度,kg/m(标准参考单位质量) */\n readonly linearMassKgPerM: number;\n}\n\n/** 参考密度,g/cm³(标准注:参考单位质量按此密度计) */\nexport const REFERENCE_DENSITY_G_PER_CM3 = 8.94;\n\n/** 线材预设 id */\nexport type WirePresetId = 'cthm120' | 'cthm150' | 'ctha120';\n\n/**\n * 标准「参考单位质量」表,kg/km。\n * 与 `src/copper/index.ts` 的 TB2809_WIRE_PARAMS.unitWeightKgPerKm 同源\n * (站点 /calculator/assets/calc-core.js 的 COPPER_TABLE)。\n */\nexport const STANDARD_UNIT_WEIGHT_KG_PER_KM: Readonly<Record<WirePresetId, number>> = {\n cthm120: 1082,\n cthm150: 1350,\n ctha120: 1070,\n};\n\n/** 由标准参考单位质量换算线密度,kg/m */\nexport function unitWeightToKgPerM(kgPerKm: number): number {\n return kgPerKm / 1000;\n}\n\n/**\n * 由截面积与密度反算线密度。\n *\n * ⚠️ 传入的必须是「计算截面」而非「标称截面」,否则结果偏低约 0.85%。\n * 120 mm² 标称对应计算截面 121 mm²;150 mm² 标称对应 151 mm²。\n *\n * @param crossSectionMM2 计算截面积,mm²\n * @param densityGPerCm3 密度,g/cm³\n * @returns 线密度,kg/m\n */\nexport function deriveLinearMassKgPerM(\n crossSectionMM2: number,\n densityGPerCm3: number = REFERENCE_DENSITY_G_PER_CM3,\n): number {\n // A[mm²] × 1e-6 [m²/mm²] × ρ[g/cm³] × 1000 [kg/m³ per g/cm³]\n return crossSectionMM2 * 1e-6 * densityGPerCm3 * 1000;\n}\n\n/** 铜及铜合金接触线的常用线膨胀系数,1/℃ */\nexport const COPPER_ALLOY_ALPHA_PER_DEG_C = 1.7e-5;\n\nexport const WIRE_PRESETS: readonly WireSpec[] = [\n {\n id: 'cthm120',\n name: 'CTMH-120(铜镁 120)',\n nameEn: 'CTMH-120 (CuMg 120 mm²)',\n crossSectionMM2: 120,\n calculatedSectionMM2: 121,\n elasticModulusGPa: 120,\n expansionPerDegC: COPPER_ALLOY_ALPHA_PER_DEG_C,\n linearMassKgPerM: unitWeightToKgPerM(STANDARD_UNIT_WEIGHT_KG_PER_KM.cthm120),\n },\n {\n id: 'cthm150',\n name: 'CTMH-150(铜镁 150)',\n nameEn: 'CTMH-150 (CuMg 150 mm²)',\n crossSectionMM2: 150,\n calculatedSectionMM2: 151,\n elasticModulusGPa: 120,\n expansionPerDegC: COPPER_ALLOY_ALPHA_PER_DEG_C,\n linearMassKgPerM: unitWeightToKgPerM(STANDARD_UNIT_WEIGHT_KG_PER_KM.cthm150),\n },\n {\n id: 'ctha120',\n name: 'CTAH-120(铜银 120)',\n nameEn: 'CTAH-120 (CuAg 120 mm²)',\n crossSectionMM2: 120,\n calculatedSectionMM2: 121,\n // 铜银合金 E=117 GPa,对齐站点 /calculator/tension/ 预设(2026-09-19 审计更正,\n // 旧值 120 误沿用铜镁档)\n elasticModulusGPa: 117,\n expansionPerDegC: COPPER_ALLOY_ALPHA_PER_DEG_C,\n linearMassKgPerM: unitWeightToKgPerM(STANDARD_UNIT_WEIGHT_KG_PER_KM.ctha120),\n },\n];\n\n/** 按 id 取线材预设,找不到返回 undefined */\nexport function findWirePreset(id: string): WireSpec | undefined {\n return WIRE_PRESETS.find((w) => w.id === id);\n}\n\n/**\n * 由线密度求单位自重荷载 g,N/m。\n * @param linearMassKgPerM 线密度,kg/m\n */\nexport function weightPerLengthNPerM(linearMassKgPerM: number): number {\n return linearMassKgPerM * G0;\n}\n\n/**\n * 由线材预设直接取单位自重荷载 g,N/m。\n */\nexport function weightOfPresetNPerM(spec: WireSpec): number {\n return weightPerLengthNPerM(spec.linearMassKgPerM);\n}\n","/**\n * TB/T 2809-2017 表5 持续载流量参考值(A)。\n *\n * ⚠️ 2017 版表5 历史参考(全 9 材质);2026 版现行口径见 TB2809_WIRE_PARAMS\n * 双字段(src/copper/index.ts:ampacityIndoor150A 主值 / ampacityIndoor150A2017 对照)。\n *\n * 来源:itswe.com 标准规范库,据 TB/T 2809-2017 无水印全文扫描件逐格复核。\n *\n * 查表语义:\n * - 返回数值:该项载流量\n * - 返回 null:该 (材质, 截面) 规格存在,但该工况按标准原文注\"不需要考核\"\n * (如纯铜接触线不考核 150℃ 工况)\n * - 返回 undefined:该材质无此截面规格(如铜铬锆无 120 mm²)\n *\n * ⚠️ 表中为室内(无风无日照试验条件)值与室外值;工程取值请以标准原文与\n * 产品技术条件为准。高海拔、隧道内等场景须另行叠加散热修正。\n */\n\nexport type ContactWireTypeCode =\n | 'CT'\n | 'CTA'\n | 'CTS'\n | 'CTSM'\n | 'CTSH'\n | 'CTM'\n | 'CTMM'\n | 'CTMH'\n | 'CTCZ';\n\n/** 载流量考核工况 */\nexport type AmpacityCondition = 'indoor-95' | 'outdoor-95' | 'indoor-150' | 'outdoor-150';\n\nexport type CrossSectionMM2 = 120 | 150;\n\n/** 按截面索引的载流量对,[120 mm², 150 mm²] */\ntype SectionPair = readonly [number | null, number | null];\n\nexport interface AmpacityEntry {\n readonly type: ContactWireTypeCode;\n readonly materialZh: string;\n /** 标称截面,mm² */\n readonly crossSectionMM2: CrossSectionMM2;\n readonly condition: AmpacityCondition;\n /** 持续载流量,A。null 表示该项不需要考核 */\n readonly ampacityA: number | null;\n}\n\nconst M = (\n type: ContactWireTypeCode,\n materialZh: string,\n sections: readonly CrossSectionMM2[],\n indoor95: SectionPair,\n outdoor95: SectionPair,\n indoor150: SectionPair,\n outdoor150: SectionPair,\n): AmpacityEntry[] => {\n const conditions: ReadonlyArray<readonly [AmpacityCondition, SectionPair]> = [\n ['indoor-95', indoor95],\n ['outdoor-95', outdoor95],\n ['indoor-150', indoor150],\n ['outdoor-150', outdoor150],\n ];\n const out: AmpacityEntry[] = [];\n for (const section of sections) {\n for (const [condition, pair] of conditions) {\n const value = section === 120 ? pair[0] : pair[1];\n out.push({\n type,\n materialZh,\n crossSectionMM2: section,\n condition,\n ampacityA: value ?? null,\n });\n }\n }\n return out;\n};\n\nexport const TB2809_AMPACITY_A: readonly AmpacityEntry[] = [\n ...M('CT', '铜', [120, 150], [360, 425], [495, 570], [null, null], [null, null]),\n ...M('CTA', '铜银', [120, 150], [360, 425], [495, 570], [515, 620], [680, 785]),\n ...M('CTS', '铜锡', [120, 150], [360, 425], [490, 565], [515, 620], [680, 790]),\n ...M('CTSM', '铜锡', [120, 150], [330, 400], [455, 525], [490, 560], [630, 730]),\n ...M('CTSH', '铜锡', [120, 150], [310, 360], [420, 480], [450, 520], [580, 670]),\n ...M('CTM', '铜镁', [120, 150], [330, 400], [455, 525], [490, 560], [630, 730]),\n ...M('CTMM', '铜镁', [120, 150], [310, 360], [420, 480], [450, 520], [580, 670]),\n ...M('CTMH', '铜镁', [120, 150], [300, 340], [410, 460], [430, 500], [560, 650]),\n ...M('CTCZ', '铜铬锆', [150], [null, 395], [null, 505], [null, 580], [null, 710]),\n];\n\n/**\n * 查表。\n * @returns 载流量 A;该规格存在但不考核时为 null;该材质无此截面时为 undefined\n */\nexport function findAmpacityA(params: {\n type: ContactWireTypeCode;\n crossSectionMM2: CrossSectionMM2;\n condition: AmpacityCondition;\n}): number | null | undefined {\n const row = TB2809_AMPACITY_A.find(\n (e) =>\n e.type === params.type &&\n e.crossSectionMM2 === params.crossSectionMM2 &&\n e.condition === params.condition,\n );\n return row === undefined ? undefined : row.ampacityA;\n}\n"],"mappings":"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","names":[]}
|
package/dist/stroke/index.cjs
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunkTXFBPGHRcjs = require('../chunk-TXFBPGHR.cjs');
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
@@ -15,5 +15,5 @@ var _chunk5Q6IASB2cjs = require('../chunk-5Q6IASB2.cjs');
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
exports.CONVENTIONAL_MARGIN_MM =
|
|
18
|
+
exports.CONVENTIONAL_MARGIN_MM = _chunkTXFBPGHRcjs.CONVENTIONAL_MARGIN_MM; exports.MIN_MARGIN_MM = _chunkTXFBPGHRcjs.MIN_MARGIN_MM; exports.TRANSMISSION_RATIOS = _chunkTXFBPGHRcjs.TRANSMISSION_RATIOS; exports.elongationMM = _chunkTXFBPGHRcjs.elongationMM; exports.requiredStrokeMM = _chunkTXFBPGHRcjs.requiredStrokeMM; exports.strokeCheck = _chunkTXFBPGHRcjs.strokeCheck; exports.strokeMeta = _chunkTXFBPGHRcjs.strokeMeta;
|
|
19
19
|
//# sourceMappingURL=index.cjs.map
|
package/dist/stroke/index.js
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var _chunkNSVETJYAcjs = require('../chunk-NSVETJYA.cjs');
|
|
6
6
|
require('../chunk-DGO2DCO5.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
exports.DEFAULT_MIN_END_VOLTAGE_V =
|
|
11
|
+
exports.DEFAULT_MIN_END_VOLTAGE_V = _chunkNSVETJYAcjs.DEFAULT_MIN_END_VOLTAGE_V; exports.voltageDropCheck = _chunkNSVETJYAcjs.voltageDropCheck; exports.voltageDropMeta = _chunkNSVETJYAcjs.voltageDropMeta;
|
|
12
12
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -19,6 +19,12 @@ interface VoltageDropInput {
|
|
|
19
19
|
readonly parallelCount?: number;
|
|
20
20
|
/** 末端最低允许电压,V。缺省 20000 */
|
|
21
21
|
readonly minEndVoltageV?: number;
|
|
22
|
+
/**
|
|
23
|
+
* 电阻温度系数 α,1/℃(2026-09-19 实装,修复批 D)。
|
|
24
|
+
* 须与 r₂₀ 对应材质配套(TB/T 2809-2026 6.10):银 0.00380 / 锡 0.00320 /
|
|
25
|
+
* 镁 0.00270 / 铬锆 0.00290。缺省纯铜 0.00393(供无型号场景)。
|
|
26
|
+
*/
|
|
27
|
+
readonly alphaPerDegC?: number;
|
|
22
28
|
}
|
|
23
29
|
interface VoltageDropResult {
|
|
24
30
|
/** 温度修正(并含并联折减)后的单位电阻 r_T,Ω/km */
|
|
@@ -19,6 +19,12 @@ interface VoltageDropInput {
|
|
|
19
19
|
readonly parallelCount?: number;
|
|
20
20
|
/** 末端最低允许电压,V。缺省 20000 */
|
|
21
21
|
readonly minEndVoltageV?: number;
|
|
22
|
+
/**
|
|
23
|
+
* 电阻温度系数 α,1/℃(2026-09-19 实装,修复批 D)。
|
|
24
|
+
* 须与 r₂₀ 对应材质配套(TB/T 2809-2026 6.10):银 0.00380 / 锡 0.00320 /
|
|
25
|
+
* 镁 0.00270 / 铬锆 0.00290。缺省纯铜 0.00393(供无型号场景)。
|
|
26
|
+
*/
|
|
27
|
+
readonly alphaPerDegC?: number;
|
|
22
28
|
}
|
|
23
29
|
interface VoltageDropResult {
|
|
24
30
|
/** 温度修正(并含并联折减)后的单位电阻 r_T,Ω/km */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ocs-calculators",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "铁路接触网(OCS)工程计算工具集 —— 张力、弛度、吊弦、风偏移等计算,零依赖纯函数实现 / Railway overhead contact system (OCS) engineering calculators as zero-dependency pure functions",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"catenary",
|
|
@@ -1 +0,0 @@
|
|
|
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/n,对应坠砣总质量 m ≈ 102·W kg',\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/n,m≈102·W,g 取 9.81 m/s²),kg */\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 const WKN = tensionKN / ratio;\n weightKg = WKN * 102; // 1 kN ≈ 102 kg(g=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;AACrE,UAAM,MAAM,YAAY;AACxB,eAAW,MAAM;AAAA,EACnB;AACA,SAAO,EAAE,KAAK,WAAW,UAAU,SAAS;AAC9C;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-4UU7WA7N.cjs","../src/curve-stagger/meta.ts","../src/curve-stagger/index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-4UU7WA7N.cjs","sourcesContent":[null,"import type { CalculatorMeta } from '../types';\n\nexport const curveStaggerMeta: CalculatorMeta = {\n name: '曲线拉出值校核',\n nameEn: 'Curve Stagger Clearance Check',\n summary:\n '计算曲线区段跨中综合偏移(拉出值均值、曲线矢度、风偏的组合),与受电弓容许偏移比较给出判定。',\n formula: [\n '平均拉出值:ā = (a₁ + a₂) / 2',\n '曲线矢度:c = l² / (8R)(直线段 R = ∞ 时 c = 0)',\n '超高横移:δ = H·h / l₀',\n '跨中风偏:p_w = (½·ρ·v²·d·α) · l² / (8T)(取风向垂直线路的最不利工况)',\n '综合偏移:e = max(|ā + c|, |ā − c|) + p_w ≤ [e]',\n ],\n references: [\n '依据本站 拉出值设计 条目',\n '风偏取风向垂直线路的最不利工况(sin²θ = 1)',\n '容许偏移 [e] 按受电弓动态包络线取值,以设计文件为准',\n ],\n scope: [\n '曲线半径 R:0 ~ 20000 m(直线传 0 或 Infinity)',\n '跨距 l:20 ~ 80 m',\n '拉出值 a₁/a₂:−0.6 ~ 0.6 m(曲线内侧为正)',\n '风速 v:0 ~ 60 m/s',\n '线索直径 d:1 ~ 30 mm',\n '风载体型系数 α:0.5 ~ 2',\n '张力 T:5 ~ 40 kN',\n '滑板面距轨面 H:4 ~ 8 m;外轨超高 h:0 ~ 0.25 m;轨距 l₀ 默认 1.435 m',\n '⚠️ 站点源码的 JSDoc 写明综合偏移含超高横移项 ∓δ,但实现中 δ 仅计算返回、未参与 e 的合成。本库按实现行为对齐,详见测试中的说明',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/curve-stagger/',\n};\n","export { curveStaggerMeta } from './meta';\n\n/** 标准轨距,m */\nexport const STANDARD_GAUGE_M = 1.435;\n\n/** 滑板面距轨面的常用值,m */\nexport const DEFAULT_PANTOGRAPH_HEIGHT_M = 6.0;\n\nexport interface CurveStaggerInput {\n /** 曲线半径 R,m。直线段传 0 或 Infinity */\n readonly curveRadiusM: number;\n /** 跨距 l,m */\n readonly spanM: number;\n /** 定位点 1 拉出值 a₁,m(曲线内侧为正) */\n readonly stagger1M: number;\n /** 定位点 2 拉出值 a₂,m(曲线内侧为正) */\n readonly stagger2M: number;\n /** 风速 v,m/s */\n readonly windSpeedMPerS: number;\n /** 线索直径 d,m */\n readonly wireDiameterM: number;\n /** 风载体型系数 α */\n readonly dragCoefficient: number;\n /** 线索张力 T,N */\n readonly tensionN: number;\n /** 容许偏移 [e],m */\n readonly allowableOffsetM: number;\n /** 滑板面距轨面 H,m。缺省 6.0 */\n readonly pantographHeightM?: number;\n /** 外轨超高 h,m。缺省 0 */\n readonly cantM?: number;\n /** 轨距 l₀,m。缺省 1.435 */\n readonly gaugeM?: number;\n}\n\nexport interface CurveStaggerResult {\n /** 平均拉出值 ā,m */\n readonly meanStaggerM: number;\n /** 曲线矢度 c = l²/(8R),m。直线段为 0 */\n readonly versineM: number;\n /** 超高横移 δ = H·h/l₀,m */\n readonly cantShiftM: number;\n /** 跨中风偏 p_w,m */\n readonly windOffsetM: number;\n /** 矢度与拉出值同向时的偏移,m */\n readonly offsetPlusM: number;\n /** 矢度与拉出值反向时的偏移,m */\n readonly offsetMinusM: number;\n /** 取两者较大值,m */\n readonly maxOffsetM: number;\n /** 是否满足容许偏移 */\n readonly passes: boolean;\n}\n\n/**\n * 曲线矢度:c = l² / (8R),m。\n * 直线段(R = 0 或 Infinity)返回 0。\n */\nexport function versineM(spanM: number, curveRadiusM: number): number {\n if (!(spanM > 0)) {\n throw new RangeError(`跨距必须为正数,收到 ${spanM} m`);\n }\n if (!(curveRadiusM > 0) || !Number.isFinite(curveRadiusM)) {\n return 0;\n }\n return (spanM * spanM) / (8 * curveRadiusM);\n}\n\n/**\n * 超高横移:δ = H·h / l₀,m。\n *\n * @param cantM 外轨超高 h,m\n * @param pantographHeightM 滑板面距轨面 H,m\n * @param gaugeM 轨距 l₀,m\n */\nexport function cantShiftM(\n cantM: number,\n pantographHeightM: number = DEFAULT_PANTOGRAPH_HEIGHT_M,\n gaugeM: number = STANDARD_GAUGE_M,\n): number {\n if (!(cantM >= 0)) {\n throw new RangeError(`外轨超高不能为负,收到 ${cantM} m`);\n }\n if (!(pantographHeightM > 0)) {\n throw new RangeError(`滑板面距轨面必须为正数,收到 ${pantographHeightM} m`);\n }\n if (!(gaugeM > 0)) {\n throw new RangeError(`轨距必须为正数,收到 ${gaugeM} m`);\n }\n return (pantographHeightM * cantM) / gaugeM;\n}\n\n/**\n * 曲线区段跨中综合偏移校核。\n *\n * 风偏取风向垂直线路的最不利工况(sin²θ = 1)。\n *\n * ⚠️ 与站点源码一致:超高横移 δ 会计算并返回,但**不参与** e 的合成。\n * 站点 JSDoc 描述的公式为 `e = |ā ± c ∓ δ| + p_w`,与其实现不符;\n * 若站点后续修正,本库的 offsetPlusM / offsetMinusM 需同步调整。\n */\nexport function curveStaggerCheck(input: CurveStaggerInput): CurveStaggerResult {\n const { spanM, stagger1M, stagger2M, wireDiameterM, dragCoefficient, tensionN } = input;\n\n if (!(tensionN > 0)) {\n throw new RangeError(`张力必须为正数,收到 ${tensionN} N`);\n }\n if (!(wireDiameterM > 0)) {\n throw new RangeError(`线索直径必须为正数,收到 ${wireDiameterM} m`);\n }\n if (!(dragCoefficient > 0)) {\n throw new RangeError(`风载体型系数必须为正数,收到 ${dragCoefficient}`);\n }\n if (!(input.windSpeedMPerS >= 0)) {\n throw new RangeError(`风速不能为负,收到 ${input.windSpeedMPerS} m/s`);\n }\n if (!(input.allowableOffsetM > 0)) {\n throw new RangeError(`容许偏移必须为正数,收到 ${input.allowableOffsetM} m`);\n }\n\n const meanStaggerM = (stagger1M + stagger2M) / 2;\n const c = versineM(spanM, input.curveRadiusM);\n const delta = cantShiftM(\n input.cantM ?? 0,\n input.pantographHeightM ?? DEFAULT_PANTOGRAPH_HEIGHT_M,\n input.gaugeM ?? STANDARD_GAUGE_M,\n );\n\n // 单位风荷载 p = ½·ρ·v²·d·α·sin²θ,取 sin²θ = 1(风向垂直线路最不利)\n const rhoAir = 1.225;\n const windLoadNPerM =\n 0.5 * rhoAir * input.windSpeedMPerS * input.windSpeedMPerS * wireDiameterM * dragCoefficient;\n const pw = (windLoadNPerM * spanM * spanM) / (8 * tensionN);\n\n const offsetPlusM = Math.abs(meanStaggerM + c) + pw;\n const offsetMinusM = Math.abs(meanStaggerM - c) + pw;\n const maxOffsetM = Math.max(offsetPlusM, offsetMinusM);\n\n return {\n meanStaggerM,\n versineM: c,\n cantShiftM: delta,\n windOffsetM: pw,\n offsetPlusM,\n offsetMinusM,\n maxOffsetM,\n passes: maxOffsetM <= input.allowableOffsetM,\n };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-CSLI5HEJ.cjs","../src/anchor-length/meta.ts","../src/anchor-length/index.ts"],"names":[],"mappings":"AAAA;ACEO,IAAM,iBAAA,EAAmC;AAAA,EAC9C,IAAA,EAAM,wDAAA;AAAA,EACN,MAAA,EAAQ,sCAAA;AAAA,EACR,OAAA,EAAS,sOAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACP,8DAAA;AAAA,IACA,yFAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,yKAAA;AAAA,IACA,4IAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,KAAA,EAAO,CAAC,4CAAA,EAAqB,2CAAA,EAAoB,sCAAA,EAAoB,6BAAc,CAAA;AAAA,EACnF,UAAA,EAAY,sKAAA;AAAA,EACZ,MAAA,EAAQ;AACV,CAAA;ADAA;AACA;AEjBO,IAAM,mBAAA,EAAqB,GAAA;AAwC3B,SAAS,iBAAA,CAAkB,KAAA,EAA8C;AAC9E,EAAA,MAAM,EAAE,OAAA,EAAS,eAAe,EAAA,EAAI,KAAA;AACpC,EAAA,GAAA,CAAI,CAAA,CAAE,eAAA,EAAiB,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,sEAAA,EAAiB,eAAA,EAAiB,KAAK,CAAA;AACvF,EAAA,IAAI,MAAA;AACJ,EAAA,GAAA,CAAI,QAAA,IAAY,OAAA,EAAS;AACvB,IAAA,MAAM,EAAE,YAAA,EAAc,gBAAA,EAAkB,eAAe,EAAA,EAAI,KAAA;AAC3D,IAAA,GAAA,CAAI,CAAA,CAAE,aAAA,GAAgB,aAAA,EAAe,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,kDAAU,CAAA;AACxE,IAAA,GAAA,CAAI,CAAA,CAAE,iBAAA,GAAoB,iBAAA,EAAmB,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,wDAAW,CAAA;AACjF,IAAA,MAAM,EAAA,mBAAI,cAAA,UAAkB,GAAA;AAC5B,IAAA,MAAM,IAAA,EAAO,iBAAA,EAAmB,eAAA,EAAiB,IAAA,EAAO,YAAA;AACxD,IAAA,OAAA,EAAS,IAAA,EAAM,CAAA;AAAA,EACjB,EAAA,KAAO;AACL,IAAA,MAAM,EAAE,SAAA,EAAW,KAAA,EAAO,cAAA,EAAgB,gBAAA,EAAkB,cAAA,EAAgB,WAAW,EAAA,EAAI,KAAA;AAC3F,IAAA,GAAA,CAAI,CAAA,CAAE,UAAA,GAAa,UAAA,EAAY,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,wDAAW,CAAA;AACnE,IAAA,GAAA,CAAI,CAAA,CAAE,MAAA,GAAS,MAAA,EAAQ,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,sCAAQ,CAAA;AACxD,IAAA,GAAA,CAAI,CAAA,CAAE,eAAA,GAAkB,eAAA,EAAiB,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,kDAAU,CAAA;AAC5E,IAAA,GAAA,CAAI,iBAAA,IAAqB,KAAA,EAAA,GAAa,eAAA,IAAmB,KAAA,EAAA,GAAa,WAAA,IAAe,KAAA,CAAA,EAAW;AAC9F,MAAA,MAAM,IAAI,UAAA,CAAW,yEAAkB,CAAA;AAAA,IACzC;AAEA,IAAA,OAAA,EAAU,UAAA,EAAA,CAAa,UAAA,EAAY,KAAA,EAAA,EAAS,iBAAA,EAAmB,eAAA,EAAiB,WAAA,EAAA,CAAe,EAAA,EAAI,cAAA,EAAA,EAAkB,GAAA;AAAA,EACvH;AACA,EAAA,MAAM,OAAA,EAAS,mBAAA,EAAqB,eAAA,EAAiB,GAAA;AACrD,EAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQ,OAAA,GAAU,OAAO,CAAA;AAC5E;AFrBA;AACA;AACE;AACA;AACA;AACF,4IAAC","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-CSLI5HEJ.cjs","sourcesContent":[null,"import type { CalculatorMeta } from '../types';\n\nexport const anchorLengthMeta: CalculatorMeta = {\n name: '锚段长度张力差校核',\n nameEn: 'Anchor Span Tension Difference Check',\n summary: '计算接触线张力增量(曲线定位器项、直线吊弦项,教材口径)并按张力差判据校核。',\n formula: [\n '曲线定位器项:T_jw = d·T_jm/R',\n '直线吊弦项:T_jd = L(L−l)·g_j·α·Δt/(2c)',\n '判据:ΔT ≤ 10%·T_N(TB 10009-2016 第 5.4.7 条)',\n ],\n references: [\n '判据:接触线、承力索张力差均不得大于额定张力 10%(TB 10009-2016 5.4.7)',\n '教材口径(于万聚《电气化铁道接触网设计》体系)',\n '直线吊弦项量纲:m²·kN/m·(1/℃)·℃/m = kN,2026-09-13 复核自洽',\n ],\n scope: ['曲线半径 R:100~4000 m', '定位器长 d:0.5~2.5 m', '半锚段 L:100~2000 m', '跨距 l:30~90 m'],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/anchor-length/',\n};\n","export { anchorLengthMeta } from './meta';\n\n/** 张力增量判据(TB 10009-2016 第 5.4.7 条) */\nexport const TENSION_DIFF_RATIO = 0.10;\n\n/** 锚段张力增量计算参数(教材口径,直线吊弦项量纲已复核)。单位:m、kN、1/℃、℃。 */\nexport interface AnchorLengthInput {\n /** 区段类型:'line' 直线 | 'curve' 曲线 */\n readonly section: 'line' | 'curve';\n /** 接触线额定张力 T_N,kN(判据基准) */\n readonly ratedTensionKN: number;\n /** 半锚段长度 L(中心锚结至补偿器),m */\n readonly halfSpanM?: number;\n /** 曲线半径 R,m(曲线区段) */\n readonly curveRadiusM?: number;\n /** 定位器长度 d,m(曲线区段) */\n readonly regulatorLengthM?: number;\n /** 定位器数量 n(曲线区段) */\n readonly regulatorCount?: number;\n /** 跨距 l,m(直线吊弦项) */\n readonly spanM?: number;\n /** 吊弦平均长度 c,m(直线吊弦项) */\n readonly dropperLengthM?: number;\n /** 接触线单位重 g_j,kN/m(直线吊弦项) */\n readonly wireWeightKNPerM?: number;\n /** 线胀系数 α,1/℃(直线吊弦项) */\n readonly expansionCoeff?: number;\n /** 计算温差 Δt,℃(直线吊弦项) */\n readonly tempDeltaC?: number;\n}\n\nexport interface AnchorLengthResult {\n /** 张力增量,N */\n readonly deltaN: number;\n /** 判据限值 10%·T_N,N */\n readonly limitN: number;\n /** 张力差占额定张力比例 */\n readonly ratio: number;\n /** 是否合格(ΔT ≤ 10%·T_N) */\n readonly passes: boolean;\n}\n\n/** 锚段张力增量(教材口径)与 10% 判据校核 */\nexport function anchorLengthCheck(input: AnchorLengthInput): AnchorLengthResult {\n const { section, ratedTensionKN } = input;\n if (!(ratedTensionKN > 0)) throw new RangeError('额定张力必须为正,收到 ' + ratedTensionKN + ' kN');\n let deltaN: number;\n if (section === 'curve') {\n const { curveRadiusM, regulatorLengthM, regulatorCount } = input;\n if (!(curveRadiusM && curveRadiusM > 0)) throw new RangeError('曲线半径必须为正');\n if (!(regulatorLengthM && regulatorLengthM > 0)) throw new RangeError('定位器长度必须为正');\n const n = regulatorCount ?? 1;\n const one = (regulatorLengthM * ratedTensionKN * 1e3) / curveRadiusM; // T_jw = d·T_jm/R\n deltaN = one * n;\n } else {\n const { halfSpanM, spanM, dropperLengthM, wireWeightKNPerM, expansionCoeff, tempDeltaC } = input;\n if (!(halfSpanM && halfSpanM > 0)) throw new RangeError('半锚段长度必须为正');\n if (!(spanM && spanM > 0)) throw new RangeError('跨距必须为正');\n if (!(dropperLengthM && dropperLengthM > 0)) throw new RangeError('吊弦长度必须为正');\n if (wireWeightKNPerM === undefined || expansionCoeff === undefined || tempDeltaC === undefined) {\n throw new RangeError('直线区段需提供 g_j、α、Δt');\n }\n // T_jd = L(L−l)·g_j·α·Δt/(2c),kN → N\n deltaN = (halfSpanM * (halfSpanM - spanM) * wireWeightKNPerM * expansionCoeff * tempDeltaC) / (2 * dropperLengthM) * 1e3;\n }\n const limitN = TENSION_DIFF_RATIO * ratedTensionKN * 1e3;\n return { deltaN, limitN, ratio: deltaN / limitN, passes: deltaN <= limitN };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cross-span/meta.ts","../src/cross-span/index.ts"],"sourcesContent":["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 ],\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(节点近似均匀分布,起点距支柱 a) */\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 * 节点垂直负载(均匀间距简化):\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 // 节点均匀分布:第 i 个节点距左支柱 x = a·(i+1),须全部落在跨内\n const lastX = a * nodeCount;\n if (!(lastX < L)) {\n throw new RangeError(\n `末节点位置 ${lastX} m 超出跨距 ${L} m,请减小节点数或股道间距`,\n );\n }\n\n const Q = J + n * q0 * a + P + gc * a;\n\n const nodeX: number[] = [];\n for (let i = 0; i < nodeCount; i++) {\n nodeX.push(a * (i + 1));\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"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-HXALVJ4G.cjs","../src/bvalue/meta.ts","../src/bvalue/index.ts"],"names":[],"mappings":"AAAA;ACEO,IAAM,WAAA,EAA6B;AAAA,EACxC,IAAA,EAAM,qEAAA;AAAA,EACN,MAAA,EAAQ,6CAAA;AAAA,EACR,OAAA,EAAS,4OAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACP,sDAAA;AAAA,IACA,0GAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,oIAAA;AAAA,IACA,8FAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,KAAA,EAAO,CAAC,uBAAA,EAAoB,2CAAA,EAAyB,sCAAA,EAAe,6BAAS,CAAA;AAAA,EAC7E,UAAA,EAAY,sKAAA;AAAA,EACZ,MAAA,EAAQ;AACV,CAAA;ADAA;AACA;AEYO,SAAS,MAAA,CAAO,MAAA,EAAmC;AACxD,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,cAAA,EAAgB,UAAA,EAAY,QAAA,EAAU,WAAA,EAAa,UAAU,EAAA,EAAI,MAAA;AACxF,EAAA,GAAA,CAAI,CAAA,CAAE,OAAA,GAAU,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,oDAAA,EAAmB,MAAM,CAAA;AAClE,EAAA,GAAA,CAAI,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,4EAAA,EAAkB,KAAK,CAAA;AAC9D,EAAA,GAAA,CAAI,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,4EAAA,EAAkB,UAAU,CAAA;AACxE,EAAA,MAAM,GAAA,EAAK,SAAA,EAAW,WAAA;AACtB,EAAA,MAAM,UAAA,EAAY,eAAA,EAAiB,WAAA,EAAa,EAAA;AAChD,EAAA,MAAM,SAAA,EAAW,MAAA,EAAQ,SAAA;AACzB,EAAA,MAAM,IAAA,EAAM,OAAA,EAAS,QAAA;AACrB,EAAA,IAAI,SAAA,EAA0B,IAAA;AAC9B,EAAA,GAAA,CAAI,UAAA,IAAc,KAAA,CAAA,EAAW;AAC3B,IAAA,GAAA,CAAI,CAAA,CAAE,UAAA,EAAY,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,sEAAA,EAAiB,SAAS,CAAA;AACrE,IAAA,MAAM,IAAA,EAAM,UAAA,EAAY,KAAA;AACxB,IAAA,SAAA,EAAW,IAAA,EAAM,GAAA;AAAA,EACnB;AACA,EAAA,OAAO,EAAE,GAAA,EAAK,SAAA,EAAW,QAAA,EAAU,SAAS,CAAA;AAC9C;AFVA;AACA;AACE;AACA;AACF,yDAAC","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-HXALVJ4G.cjs","sourcesContent":[null,"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/n,对应坠砣总质量 m ≈ 102·W kg',\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/n,m≈102·W,g 取 9.81 m/s²),kg */\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 const WKN = tensionKN / ratio;\n weightKg = WKN * 102; // 1 kN ≈ 102 kg(g=9.81)\n }\n return { bMM, stretchMM, strokeMM, weightKg };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/curve-stagger/meta.ts","../src/curve-stagger/index.ts"],"sourcesContent":["import type { CalculatorMeta } from '../types';\n\nexport const curveStaggerMeta: CalculatorMeta = {\n name: '曲线拉出值校核',\n nameEn: 'Curve Stagger Clearance Check',\n summary:\n '计算曲线区段跨中综合偏移(拉出值均值、曲线矢度、风偏的组合),与受电弓容许偏移比较给出判定。',\n formula: [\n '平均拉出值:ā = (a₁ + a₂) / 2',\n '曲线矢度:c = l² / (8R)(直线段 R = ∞ 时 c = 0)',\n '超高横移:δ = H·h / l₀',\n '跨中风偏:p_w = (½·ρ·v²·d·α) · l² / (8T)(取风向垂直线路的最不利工况)',\n '综合偏移:e = max(|ā + c|, |ā − c|) + p_w ≤ [e]',\n ],\n references: [\n '依据本站 拉出值设计 条目',\n '风偏取风向垂直线路的最不利工况(sin²θ = 1)',\n '容许偏移 [e] 按受电弓动态包络线取值,以设计文件为准',\n ],\n scope: [\n '曲线半径 R:0 ~ 20000 m(直线传 0 或 Infinity)',\n '跨距 l:20 ~ 80 m',\n '拉出值 a₁/a₂:−0.6 ~ 0.6 m(曲线内侧为正)',\n '风速 v:0 ~ 60 m/s',\n '线索直径 d:1 ~ 30 mm',\n '风载体型系数 α:0.5 ~ 2',\n '张力 T:5 ~ 40 kN',\n '滑板面距轨面 H:4 ~ 8 m;外轨超高 h:0 ~ 0.25 m;轨距 l₀ 默认 1.435 m',\n '⚠️ 站点源码的 JSDoc 写明综合偏移含超高横移项 ∓δ,但实现中 δ 仅计算返回、未参与 e 的合成。本库按实现行为对齐,详见测试中的说明',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/curve-stagger/',\n};\n","export { curveStaggerMeta } from './meta';\n\n/** 标准轨距,m */\nexport const STANDARD_GAUGE_M = 1.435;\n\n/** 滑板面距轨面的常用值,m */\nexport const DEFAULT_PANTOGRAPH_HEIGHT_M = 6.0;\n\nexport interface CurveStaggerInput {\n /** 曲线半径 R,m。直线段传 0 或 Infinity */\n readonly curveRadiusM: number;\n /** 跨距 l,m */\n readonly spanM: number;\n /** 定位点 1 拉出值 a₁,m(曲线内侧为正) */\n readonly stagger1M: number;\n /** 定位点 2 拉出值 a₂,m(曲线内侧为正) */\n readonly stagger2M: number;\n /** 风速 v,m/s */\n readonly windSpeedMPerS: number;\n /** 线索直径 d,m */\n readonly wireDiameterM: number;\n /** 风载体型系数 α */\n readonly dragCoefficient: number;\n /** 线索张力 T,N */\n readonly tensionN: number;\n /** 容许偏移 [e],m */\n readonly allowableOffsetM: number;\n /** 滑板面距轨面 H,m。缺省 6.0 */\n readonly pantographHeightM?: number;\n /** 外轨超高 h,m。缺省 0 */\n readonly cantM?: number;\n /** 轨距 l₀,m。缺省 1.435 */\n readonly gaugeM?: number;\n}\n\nexport interface CurveStaggerResult {\n /** 平均拉出值 ā,m */\n readonly meanStaggerM: number;\n /** 曲线矢度 c = l²/(8R),m。直线段为 0 */\n readonly versineM: number;\n /** 超高横移 δ = H·h/l₀,m */\n readonly cantShiftM: number;\n /** 跨中风偏 p_w,m */\n readonly windOffsetM: number;\n /** 矢度与拉出值同向时的偏移,m */\n readonly offsetPlusM: number;\n /** 矢度与拉出值反向时的偏移,m */\n readonly offsetMinusM: number;\n /** 取两者较大值,m */\n readonly maxOffsetM: number;\n /** 是否满足容许偏移 */\n readonly passes: boolean;\n}\n\n/**\n * 曲线矢度:c = l² / (8R),m。\n * 直线段(R = 0 或 Infinity)返回 0。\n */\nexport function versineM(spanM: number, curveRadiusM: number): number {\n if (!(spanM > 0)) {\n throw new RangeError(`跨距必须为正数,收到 ${spanM} m`);\n }\n if (!(curveRadiusM > 0) || !Number.isFinite(curveRadiusM)) {\n return 0;\n }\n return (spanM * spanM) / (8 * curveRadiusM);\n}\n\n/**\n * 超高横移:δ = H·h / l₀,m。\n *\n * @param cantM 外轨超高 h,m\n * @param pantographHeightM 滑板面距轨面 H,m\n * @param gaugeM 轨距 l₀,m\n */\nexport function cantShiftM(\n cantM: number,\n pantographHeightM: number = DEFAULT_PANTOGRAPH_HEIGHT_M,\n gaugeM: number = STANDARD_GAUGE_M,\n): number {\n if (!(cantM >= 0)) {\n throw new RangeError(`外轨超高不能为负,收到 ${cantM} m`);\n }\n if (!(pantographHeightM > 0)) {\n throw new RangeError(`滑板面距轨面必须为正数,收到 ${pantographHeightM} m`);\n }\n if (!(gaugeM > 0)) {\n throw new RangeError(`轨距必须为正数,收到 ${gaugeM} m`);\n }\n return (pantographHeightM * cantM) / gaugeM;\n}\n\n/**\n * 曲线区段跨中综合偏移校核。\n *\n * 风偏取风向垂直线路的最不利工况(sin²θ = 1)。\n *\n * ⚠️ 与站点源码一致:超高横移 δ 会计算并返回,但**不参与** e 的合成。\n * 站点 JSDoc 描述的公式为 `e = |ā ± c ∓ δ| + p_w`,与其实现不符;\n * 若站点后续修正,本库的 offsetPlusM / offsetMinusM 需同步调整。\n */\nexport function curveStaggerCheck(input: CurveStaggerInput): CurveStaggerResult {\n const { spanM, stagger1M, stagger2M, wireDiameterM, dragCoefficient, tensionN } = input;\n\n if (!(tensionN > 0)) {\n throw new RangeError(`张力必须为正数,收到 ${tensionN} N`);\n }\n if (!(wireDiameterM > 0)) {\n throw new RangeError(`线索直径必须为正数,收到 ${wireDiameterM} m`);\n }\n if (!(dragCoefficient > 0)) {\n throw new RangeError(`风载体型系数必须为正数,收到 ${dragCoefficient}`);\n }\n if (!(input.windSpeedMPerS >= 0)) {\n throw new RangeError(`风速不能为负,收到 ${input.windSpeedMPerS} m/s`);\n }\n if (!(input.allowableOffsetM > 0)) {\n throw new RangeError(`容许偏移必须为正数,收到 ${input.allowableOffsetM} m`);\n }\n\n const meanStaggerM = (stagger1M + stagger2M) / 2;\n const c = versineM(spanM, input.curveRadiusM);\n const delta = cantShiftM(\n input.cantM ?? 0,\n input.pantographHeightM ?? DEFAULT_PANTOGRAPH_HEIGHT_M,\n input.gaugeM ?? STANDARD_GAUGE_M,\n );\n\n // 单位风荷载 p = ½·ρ·v²·d·α·sin²θ,取 sin²θ = 1(风向垂直线路最不利)\n const rhoAir = 1.225;\n const windLoadNPerM =\n 0.5 * rhoAir * input.windSpeedMPerS * input.windSpeedMPerS * wireDiameterM * dragCoefficient;\n const pw = (windLoadNPerM * spanM * spanM) / (8 * tensionN);\n\n const offsetPlusM = Math.abs(meanStaggerM + c) + pw;\n const offsetMinusM = Math.abs(meanStaggerM - c) + pw;\n const maxOffsetM = Math.max(offsetPlusM, offsetMinusM);\n\n return {\n meanStaggerM,\n versineM: c,\n cantShiftM: delta,\n windOffsetM: pw,\n offsetPlusM,\n offsetMinusM,\n maxOffsetM,\n passes: maxOffsetM <= input.allowableOffsetM,\n };\n}\n"],"mappings":";AAEO,IAAM,mBAAmC;AAAA,EAC9C,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,IACA;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY;AAAA,EACZ,QAAQ;AACV;;;AC7BO,IAAM,mBAAmB;AAGzB,IAAM,8BAA8B;AAoDpC,SAAS,SAAS,OAAe,cAA8B;AACpE,MAAI,EAAE,QAAQ,IAAI;AAChB,UAAM,IAAI,WAAW,gEAAc,KAAK,IAAI;AAAA,EAC9C;AACA,MAAI,EAAE,eAAe,MAAM,CAAC,OAAO,SAAS,YAAY,GAAG;AACzD,WAAO;AAAA,EACT;AACA,SAAQ,QAAQ,SAAU,IAAI;AAChC;AASO,SAAS,WACd,OACA,oBAA4B,6BAC5B,SAAiB,kBACT;AACR,MAAI,EAAE,SAAS,IAAI;AACjB,UAAM,IAAI,WAAW,sEAAe,KAAK,IAAI;AAAA,EAC/C;AACA,MAAI,EAAE,oBAAoB,IAAI;AAC5B,UAAM,IAAI,WAAW,wFAAkB,iBAAiB,IAAI;AAAA,EAC9D;AACA,MAAI,EAAE,SAAS,IAAI;AACjB,UAAM,IAAI,WAAW,gEAAc,MAAM,IAAI;AAAA,EAC/C;AACA,SAAQ,oBAAoB,QAAS;AACvC;AAWO,SAAS,kBAAkB,OAA8C;AAC9E,QAAM,EAAE,OAAO,WAAW,WAAW,eAAe,iBAAiB,SAAS,IAAI;AAElF,MAAI,EAAE,WAAW,IAAI;AACnB,UAAM,IAAI,WAAW,gEAAc,QAAQ,IAAI;AAAA,EACjD;AACA,MAAI,EAAE,gBAAgB,IAAI;AACxB,UAAM,IAAI,WAAW,4EAAgB,aAAa,IAAI;AAAA,EACxD;AACA,MAAI,EAAE,kBAAkB,IAAI;AAC1B,UAAM,IAAI,WAAW,wFAAkB,eAAe,EAAE;AAAA,EAC1D;AACA,MAAI,EAAE,MAAM,kBAAkB,IAAI;AAChC,UAAM,IAAI,WAAW,0DAAa,MAAM,cAAc,MAAM;AAAA,EAC9D;AACA,MAAI,EAAE,MAAM,mBAAmB,IAAI;AACjC,UAAM,IAAI,WAAW,4EAAgB,MAAM,gBAAgB,IAAI;AAAA,EACjE;AAEA,QAAM,gBAAgB,YAAY,aAAa;AAC/C,QAAM,IAAI,SAAS,OAAO,MAAM,YAAY;AAC5C,QAAM,QAAQ;AAAA,IACZ,MAAM,SAAS;AAAA,IACf,MAAM,qBAAqB;AAAA,IAC3B,MAAM,UAAU;AAAA,EAClB;AAGA,QAAM,SAAS;AACf,QAAM,gBACJ,MAAM,SAAS,MAAM,iBAAiB,MAAM,iBAAiB,gBAAgB;AAC/E,QAAM,KAAM,gBAAgB,QAAQ,SAAU,IAAI;AAElD,QAAM,cAAc,KAAK,IAAI,eAAe,CAAC,IAAI;AACjD,QAAM,eAAe,KAAK,IAAI,eAAe,CAAC,IAAI;AAClD,QAAM,aAAa,KAAK,IAAI,aAAa,YAAY;AAErD,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,cAAc,MAAM;AAAA,EAC9B;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
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 '电阻温度修正(α = 0.00393 /℃):r_T = r₂₀·[1 + α·(T − 20)]',\n '总重量:W = w₀ × l(w₀ 单位重量 kg/km,l 长度 km)',\n ],\n references: [\n '内置参数表来源 TB/T 2809-2017《电气化铁路用铜及铜合金接触线》(2018-05-01 实施)',\n '单位重量为标称值',\n '载流量为 150℃ 持续值,室内/室外双口径按标准表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 /** 150℃ 持续载流量,室内口径,A */\n readonly ampacityIndoor150A: 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 * 已与站点 `/calculator/assets/calc-core.js` 中的 COPPER_TABLE 逐项比对,\n * 6 个型号 × 4 项参数完全一致。\n *\n * 注:站点曾因显示层 `fmt()` 的尾零剥离正则把载流量渲染成 43/56(应为 430/560),\n * 已于 R38 之后修复。若再遇渲染值与本表不符,先确认是否为显示层问题:\n * 本表与服务端数据源始终一致。\n *\n * ⚠️ 注意型号口径:CTMH / CTAH / CTS 是站点计算器的型号代码,与标准中的\n * CTMH / CTA / CTS 并非同名对应。`note` 字段说明各行实际取自标准的哪一行,\n * 交叉引用 TB/T 2809-2017 时请以 note 为准。\n */\nexport const TB2809_WIRE_PARAMS: Record<CopperWireModel, WireParamEntry> = {\n 'CTMH-120': {\n unitWeightKgPerKm: 1082,\n r20OhmPerKm: 0.2113,\n ampacityIndoor150A: 430,\n ampacityOutdoor150A: 560,\n note: '取标准 CTMH 行(高强度铜镁合金),ρ 按标准上限 0.02535 计算',\n },\n 'CTMH-150': {\n unitWeightKgPerKm: 1350,\n r20OhmPerKm: 0.169,\n ampacityIndoor150A: 500,\n ampacityOutdoor150A: 650,\n note: '取标准 CTMH 行(高强度铜镁合金)',\n },\n 'CTAH-120': {\n unitWeightKgPerKm: 1070,\n r20OhmPerKm: 0.1481,\n ampacityIndoor150A: 515,\n ampacityOutdoor150A: 680,\n note: '取标准 CTA 行(铜银合金),ρ ≤ 0.01777',\n },\n 'CTAH-150': {\n unitWeightKgPerKm: 1330,\n r20OhmPerKm: 0.1185,\n ampacityIndoor150A: 620,\n ampacityOutdoor150A: 785,\n note: '取标准 CTA 行(铜银合金)',\n },\n 'CTS-120': {\n unitWeightKgPerKm: 1080,\n r20OhmPerKm: 0.1916,\n ampacityIndoor150A: 515,\n ampacityOutdoor150A: 680,\n note: '取标准 CTS 行(铜锡合金),载流量按 CTS 行取值',\n },\n 'CTS-150': {\n unitWeightKgPerKm: 1345,\n r20OhmPerKm: 0.1533,\n ampacityIndoor150A: 620,\n ampacityOutdoor150A: 790,\n note: '取标准 CTS 行(铜锡合金),载流量按 CTS 行取值',\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 const rT = resistanceAtTempOhmPerKm(params.r20OhmPerKm, ambientTempDegC);\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,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;;;ACmBO,IAAM,qBAA8D;AAAA,EACzE,YAAY;AAAA,IACV,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,MAAM;AAAA,EACR;AAAA,EACA,YAAY;AAAA,IACV,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,MAAM;AAAA,EACR;AAAA,EACA,YAAY;AAAA,IACV,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,MAAM;AAAA,EACR;AAAA,EACA,YAAY;AAAA,IACV,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,MAAM;AAAA,EACR;AAAA,EACA,WAAW;AAAA,IACT,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,MAAM;AAAA,EACR;AAAA,EACA,WAAW;AAAA,IACT,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,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;AAEA,QAAM,KAAK,yBAAyB,OAAO,aAAa,eAAe;AAEvE,SAAO;AAAA,IACL;AAAA,IACA,GAAG;AAAA,IACH,eAAe,OAAO,oBAAoB;AAAA,IAC1C,YAAY;AAAA,IACZ,oBAAoB,KAAK;AAAA,EAC3B;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
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)](α = 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 { 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\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(r20OhmPerKm, input.tempDegC ?? 25) / 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,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;;;ACxBO,IAAM,4BAA4B;AAsClC,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,yBAAyB,aAAa,MAAM,YAAY,EAAE,IAAI;AAChE,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":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-J2UXRMTU.cjs","../src/dropper/meta.ts","../src/dropper/index.ts"],"names":[],"mappings":"AAAA;ACEO,IAAM,YAAA,EAA8B;AAAA,EACzC,IAAA,EAAM,sCAAA;AAAA,EACN,MAAA,EAAQ,2BAAA;AAAA,EACR,OAAA,EACE,sOAAA;AAAA,EACF,OAAA,EAAS;AAAA,IACP,4HAAA;AAAA,IACA,kFAAA;AAAA,IACA,uDAAA;AAAA,IACA,wHAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,6GAAA;AAAA,IACA,kJAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,KAAA,EAAO;AAAA,IACL,8BAAA;AAAA,IACA,mDAAA;AAAA,IACA,2CAAA;AAAA,IACA,sEAAA;AAAA,IACA,oFAAA;AAAA,IACA,4FAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY,sKAAA;AAAA,EACZ,MAAA,EAAQ;AACV,CAAA;ADDA;AACA;AEmCO,SAAS,YAAA,CACd,EAAA,EACA,KAAA,EACA,UAAA,EACA,SAAA,EACQ;AACR,EAAA,GAAA,CAAI,CAAA,CAAE,UAAA,EAAY,CAAA,CAAA,EAAI;AACpB,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,6DAAA,EAAc,SAAS,CAAA,GAAA,CAAK,CAAA;AAAA,EACnD;AACA,EAAA,GAAA,CAAI,GAAA,EAAK,EAAA,GAAK,GAAA,EAAK,KAAA,EAAO;AACxB,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,iBAAA,EAAU,EAAE,CAAA,gCAAA,EAAe,KAAK,CAAA,EAAA,CAAI,CAAA;AAAA,EAC3D;AACA,EAAA,OAAQ,WAAA,EAAa,GAAA,EAAA,CAAM,MAAA,EAAQ,EAAA,EAAA,EAAA,CAAQ,EAAA,EAAI,SAAA,CAAA;AACjD;AAKO,SAAS,eAAA,CACd,KAAA,EACA,UAAA,EACA,SAAA,EACQ;AACR,EAAA,OAAQ,WAAA,EAAa,MAAA,EAAQ,MAAA,EAAA,CAAU,EAAA,EAAI,SAAA,CAAA;AAC7C;AAQO,SAAS,iBAAA,CAAkB,KAAA,EAAe,QAAA,EAA4B;AAC3E,EAAA,GAAA,CAAI,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAA,EAAI;AAChB,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,6DAAA,EAAc,KAAK,CAAA,EAAA,CAAI,CAAA;AAAA,EAC9C;AACA,EAAA,GAAA,CAAI,CAAA,CAAE,SAAA,EAAW,CAAA,CAAA,EAAI;AACnB,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,yEAAA,EAAgB,QAAQ,CAAA,EAAA,CAAI,CAAA;AAAA,EACnD;AACA,EAAA,MAAM,UAAA,EAAY,MAAA,EAAQ,QAAA;AAC1B,EAAA,MAAM,QAAA,EAAU,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AACpC,EAAA,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,OAAO,EAAA,EAAI,KAAA,GAAQ,QAAA,EAAU,CAAA,EAAG;AACvD,IAAA,MAAM,IAAI,UAAA;AAAA,MACR,CAAA,yBAAA,EAAQ,QAAQ,CAAA,wCAAA,EAAa,KAAK,CAAA,qBAAA,EAAS,SAAS,CAAA,aAAA;AAAA,IACtD,CAAA;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,QAAA,EAAU,EAAE,CAAA,EAAG,CAAC,CAAA,EAAG,CAAA,EAAA,GAAM,EAAA,EAAI,QAAQ,CAAA;AACnE;AAQO,SAAS,cAAA,CAAe,KAAA,EAAoC;AACjE,EAAA,MAAM;AAAA,IACJ,UAAA;AAAA,IACA,KAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA,EAAiB;AAAA,EACnB,EAAA,EAAI,KAAA;AAEJ,EAAA,GAAA,CAAI,CAAA,CAAE,iBAAA,EAAmB,CAAA,CAAA,EAAI;AAC3B,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,+EAAA,EAAiB,gBAAgB,CAAA,GAAA,CAAK,CAAA;AAAA,EAC7D;AACA,EAAA,GAAA,CAAI,CAAA,CAAE,kBAAA,EAAoB,CAAA,CAAA,EAAI;AAC5B,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,2FAAA,EAAmB,iBAAiB,CAAA,KAAA,CAAO,CAAA;AAAA,EAClE;AACA,EAAA,GAAA,CAAI,CAAA,CAAE,iBAAA,EAAmB,CAAA,CAAA,EAAI;AAC3B,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,yEAAA,EAAgB,gBAAgB,CAAA,EAAA,CAAI,CAAA;AAAA,EAC3D;AAEA,EAAA,GAAA,CAAI,WAAA,IAAe,SAAA,EAAW;AAC5B,IAAA,MAAM,EAAA,EAAI,KAAA,CAAM,SAAA;AAChB,IAAA,GAAA,CAAI,CAAC,CAAA,EAAG;AACN,MAAA,MAAM,IAAI,UAAA,CAAW,iHAA4B,CAAA;AAAA,IACnD;AACA,IAAA,GAAA,CAAI,CAAA,CAAE,CAAA,CAAE,UAAA,EAAY,CAAA,EAAA,GAAM,CAAA,CAAE,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,EAAI;AAC7C,MAAA,MAAM,IAAI,UAAA,CAAW,4FAAiB,CAAA;AAAA,IACxC;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,EAAY,iBAAA,CAAkB,KAAA,EAAO,QAAQ,CAAA;AACnD,EAAA,MAAM,UAAA,EAAY,WAAA,IAAe,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,IAAA;AAE/D,EAAA,MAAM,OAAA,EAAyB,SAAA,CAAU,GAAA,CAAI,CAAC,EAAA,EAAI,KAAA,EAAA,GAAU;AAC1D,IAAA,MAAM,WAAA,EAAa,YAAA;AAAA,MACjB,EAAA;AAAA,MACA,KAAA;AAAA,MACA,iBAAA;AAAA,MACA;AAAA,IACF,CAAA;AACA,IAAA,MAAM,aAAA,EACJ,UAAA,GAAa,UAAA,IAAc,KAAA,EACvB,YAAA,CAAa,EAAA,EAAI,KAAA,EAAO,SAAA,CAAU,UAAA,EAAY,SAAA,CAAU,SAAS,EAAA,EACjE,CAAA;AAEN,IAAA,MAAM,eAAA,EAAiB,iBAAA,EAAmB,WAAA,EAAa,YAAA;AACvD,IAAA,GAAA,CAAI,eAAA,GAAkB,CAAA,EAAG;AACvB,MAAA,MAAM,IAAI,UAAA;AAAA,QACR,CAAA,IAAA,EAAO,EAAE,CAAA,mDAAA,EAAc,cAAA,CAAe,OAAA,CAAQ,CAAC,CAAC,CAAA,uCAAA,EACtC,gBAAgB,CAAA,mDAAA;AAAA,MAC5B,CAAA;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,KAAA,EAAO,SAAA,EAAW,EAAA,EAAI,WAAA,EAAa,UAAA,EAAY,aAAA,EAAe,YAAA,EAAc,eAAe,CAAA;AAAA,EACtG,CAAC,CAAA;AAED,EAAA,IAAI,QAAA,EAAU,CAAA;AACd,EAAA,IAAI,iBAAA,EAAmB,MAAA,CAAO,iBAAA;AAC9B,EAAA,IAAA,CAAA,MAAW,EAAA,GAAK,MAAA,EAAQ;AACtB,IAAA,GAAA,CAAI,CAAA,CAAE,YAAA,EAAc,OAAA,EAAS,QAAA,EAAU,CAAA,CAAE,WAAA;AACzC,IAAA,GAAA,CAAI,CAAA,CAAE,eAAA,EAAiB,gBAAA,EAAkB,iBAAA,EAAmB,CAAA,CAAE,cAAA;AAAA,EAChE;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,OAAA;AAAA,IACA,gBAAA;AAAA,IACA,KAAA,EAAO,MAAA,CAAO;AAAA,EAChB,CAAA;AACF;AFxEA;AACA;AACE;AACA;AACA;AACA;AACA;AACF,0MAAC","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-J2UXRMTU.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_c(x) = q_c·x·(L−x) / (2·T_c)',\n '承力索弛度:f_m(x) = q_m·x·(L−x) / (2·T_m)',\n '简单链形:l_i = H − f_c(x_i)',\n '弹性链形(计入承力索弛度):l_i = H − f_c(x_i) + f_m(x_i)',\n '跨中最大弛度:f_max = q_c·L² / (8·T_c)',\n ],\n references: [\n '抛物线近似,适用于 f/L ≤ 1/10 的小弛度工况',\n '吊弦间距须能整除跨距;实际吊弦布置以设计文件为准',\n '弹性链形悬挂须同时提供承力索张力与单位荷载',\n ],\n scope: [\n '跨距 L:5 ~ 80 m',\n '接触线张力 T_c:1 ~ 40 kN',\n '结构高度 H:0.3 ~ 3 m',\n '接触线单位荷载 q_c: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 /** 悬挂类型。弹性链形须同时提供 messenger 参数 */\n readonly suspension: SuspensionType;\n /** 跨距 L,m */\n readonly spanM: number;\n /** 接触线张力 T_c,kN */\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 * 承力索参数。弹性链形悬挂('elastic')必填,\n * 简单链形悬挂传 null 或不传。\n */\n readonly messenger?: {\n /** 承力索张力 T_m,kN */\n readonly tensionKN: number;\n /** 承力索单位荷载 q_m,kN/m */\n readonly loadKNPerM: number;\n } | null;\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 */\n readonly contactSagM: number;\n /** 承力索弛度 f_m(x),m(简单链形恒为 0) */\n readonly messengerSagM: number;\n /** 吊弦长度 l,m */\n readonly dropperLengthM: number;\n}\n\nexport interface DropperResult {\n readonly points: readonly DropperPoint[];\n /** 跨中最大弛度 f_max,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)\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 * 计算整跨各吊弦长度。\n *\n * 简单链形:l_i = H − f_c(x_i)\n * 弹性链形:l_i = H − f_c(x_i) + f_m(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 if (suspension === 'elastic') {\n const m = input.messenger;\n if (!m) {\n throw new RangeError('弹性链形悬挂必须提供承力索参数(messenger)');\n }\n if (!(m.tensionKN > 0) || !(m.loadKNPerM > 0)) {\n throw new RangeError('承力索张力与单位荷载必须为正数');\n }\n }\n\n const positions = dropperPositionsM(spanM, spacingM);\n const messenger = suspension === 'elastic' ? input.messenger : null;\n\n const points: DropperPoint[] = positions.map((xM, index) => {\n const contactSag = parabolaSagM(\n xM,\n spanM,\n contactLoadKNPerM,\n contactTensionKN,\n );\n const messengerSag =\n messenger && messenger !== null\n ? parabolaSagM(xM, spanM, messenger.loadKNPerM, messenger.tensionKN)\n : 0;\n\n const dropperLengthM = structureHeightM - contactSag + messengerSag;\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 if (p.contactSagM > maxSagM) maxSagM = p.contactSagM;\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"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/stroke/meta.ts","../src/stroke/index.ts"],"sourcesContent":["import type { CalculatorMeta } from '../types';\n\nexport const strokeMeta: CalculatorMeta = {\n name: '补偿行程',\n nameEn: 'Compensation Stroke',\n summary:\n '按温度伸缩量公式计算锚段线索伸缩量与补偿装置所需行程,可对照装置许用行程校核。',\n formula: [\n '温度伸缩量:ΔL = α·L·Δt',\n '补偿行程设计值(含裕度):S = n·ΔL + S₀',\n ],\n references: [\n '全补偿锚段接触线与承力索须分别计算(各自 α/L 不同);半补偿仅计算接触线侧',\n '传动比常见规格:滑轮组 1:2/1:3(主流)、1:4 见于教材案例,无标准统一档位表',\n '安装裕度可参照补偿器 a/b 值:任何情况下不小于 200mm(原铁运〔2007〕69号第87条,已由铁总运〔2017〕9号承接);设计取值惯例不小于 300mm,属教材/设计惯例而非规程条款',\n '补偿装置产品要求见 TB/T 2075.12-2024(滑轮补偿装置)、TB/T 2075.13-2024(棘轮补偿装置)与 TB/T 2073-2020(零部件技术条件)',\n ],\n scope: [\n '锚段长度 L 为两端锚固点之间长度',\n '设计温差 Δt 为最高与最低设计温度之差',\n '铜合金线膨胀系数约 1.7×10⁻⁵/℃(EN 50149 铜锡接触线数据表)',\n '全补偿锚段承力索侧须另行计算',\n '参数取值以设计规程为准',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/stroke/',\n};\n","export { strokeMeta } from './meta';\n\n/** 补偿装置传动比(滑轮组/棘轮),n:1 中的 n */\nexport type TransmissionRatio = 2 | 3 | 4;\n\n/** 常见传动比档位 */\nexport const TRANSMISSION_RATIOS: readonly TransmissionRatio[] = [2, 3, 4];\n\n/** 安装裕度规程下限,mm(原铁运〔2007〕69号第87条) */\nexport const MIN_MARGIN_MM = 200;\n\n/** 安装裕度设计惯例值,mm(教材/设计惯例,非规程条款) */\nexport const CONVENTIONAL_MARGIN_MM = 300;\n\nexport interface StrokeInput {\n /** 锚段长度 L,m(两端锚固点之间) */\n readonly anchorLengthM: number;\n /** 设计温差 Δt,℃(最高与最低设计温度之差) */\n readonly tempRangeDegC: number;\n /** 线膨胀系数 α,1/℃(铜合金约 1.7e-5) */\n readonly expansionPerDegC: number;\n /** 补偿传动比 n(1:2 / 1:3 / 1:4) */\n readonly transmissionRatio: TransmissionRatio;\n /** 安装裕度 S₀,mm */\n readonly marginMM: number;\n /** 装置许用行程,mm。传 null 则不判定 */\n readonly allowableStrokeMM: number | null;\n}\n\nexport interface StrokeResult {\n /** 每℃伸缩量 α·L,mm/℃ */\n readonly perDegreeMM: number;\n /** 总伸缩量 ΔL = α·L·Δt,mm */\n readonly elongationMM: number;\n /** 所需行程 S = n·ΔL + S₀,mm */\n readonly requiredStrokeMM: number;\n readonly allowableStrokeMM: number | null;\n /** 富余量 = 许用行程 − 所需行程,mm。未提供许用行程时为 null */\n readonly marginMM: number | null;\n readonly verdict: 'pass' | 'fail' | 'not-assessed';\n}\n\n/**\n * 温度伸缩量:ΔL = α·L·Δt,mm。\n *\n * @param expansionPerDegC 线膨胀系数 α,1/℃\n * @param anchorLengthM 锚段长度 L,m\n * @param tempRangeDegC 设计温差 Δt,℃\n * @returns 伸缩量,mm\n */\nexport function elongationMM(\n expansionPerDegC: number,\n anchorLengthM: number,\n tempRangeDegC: number,\n): number {\n if (!(expansionPerDegC > 0)) {\n throw new RangeError(`线膨胀系数必须为正数,收到 ${expansionPerDegC} 1/℃`);\n }\n if (!(anchorLengthM > 0)) {\n throw new RangeError(`锚段长度必须为正数,收到 ${anchorLengthM} m`);\n }\n if (!(tempRangeDegC > 0)) {\n throw new RangeError(`设计温差必须为正数,收到 ${tempRangeDegC} ℃`);\n }\n return expansionPerDegC * anchorLengthM * tempRangeDegC * 1000;\n}\n\n/**\n * 补偿行程设计值(含裕度):S = n·ΔL + S₀,mm。\n *\n * @param elongation 总伸缩量 ΔL,mm\n * @param ratio 传动比 n\n * @param marginMM 安装裕度 S₀,mm\n */\nexport function requiredStrokeMM(\n elongation: number,\n ratio: TransmissionRatio,\n marginMM: number,\n): number {\n if (!(elongation >= 0)) {\n throw new RangeError(`伸缩量不能为负,收到 ${elongation} mm`);\n }\n if (!(marginMM >= 0)) {\n throw new RangeError(`安装裕度不能为负,收到 ${marginMM} mm`);\n }\n return ratio * elongation + marginMM;\n}\n\n/**\n * 计算锚段伸缩量与补偿装置所需行程,并可选对照许用行程校核。\n *\n * ⚠️ 全补偿锚段接触线与承力索须分别计算;本函数单次只算一根线索。\n */\nexport function strokeCheck(input: StrokeInput): StrokeResult {\n const { transmissionRatio, allowableStrokeMM } = input;\n\n if (!(TRANSMISSION_RATIOS as readonly number[]).includes(transmissionRatio)) {\n throw new RangeError(\n `传动比应为 ${TRANSMISSION_RATIOS.map((r) => `1:${r}`).join(' / ')},收到 1:${transmissionRatio}`,\n );\n }\n if (!(input.marginMM >= 0)) {\n throw new RangeError(`安装裕度不能为负,收到 ${input.marginMM} mm`);\n }\n\n const elongation = elongationMM(\n input.expansionPerDegC,\n input.anchorLengthM,\n input.tempRangeDegC,\n );\n const perDegreeMM = elongation / input.tempRangeDegC;\n const required = requiredStrokeMM(elongation, transmissionRatio, input.marginMM);\n\n if (allowableStrokeMM === null) {\n return {\n perDegreeMM,\n elongationMM: elongation,\n requiredStrokeMM: required,\n allowableStrokeMM: null,\n marginMM: null,\n verdict: 'not-assessed',\n };\n }\n\n if (!(allowableStrokeMM > 0)) {\n throw new RangeError(`装置许用行程必须为正数,收到 ${allowableStrokeMM} mm`);\n }\n\n return {\n perDegreeMM,\n elongationMM: elongation,\n requiredStrokeMM: required,\n allowableStrokeMM,\n marginMM: allowableStrokeMM - required,\n verdict: required <= allowableStrokeMM ? 'pass' : 'fail',\n };\n}\n"],"mappings":";AAEO,IAAM,aAA6B;AAAA,EACxC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SACE;AAAA,EACF,SAAS;AAAA,IACP;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY;AAAA,EACZ,QAAQ;AACV;;;ACpBO,IAAM,sBAAoD,CAAC,GAAG,GAAG,CAAC;AAGlE,IAAM,gBAAgB;AAGtB,IAAM,yBAAyB;AAsC/B,SAAS,aACd,kBACA,eACA,eACQ;AACR,MAAI,EAAE,mBAAmB,IAAI;AAC3B,UAAM,IAAI,WAAW,kFAAiB,gBAAgB,WAAM;AAAA,EAC9D;AACA,MAAI,EAAE,gBAAgB,IAAI;AACxB,UAAM,IAAI,WAAW,4EAAgB,aAAa,IAAI;AAAA,EACxD;AACA,MAAI,EAAE,gBAAgB,IAAI;AACxB,UAAM,IAAI,WAAW,4EAAgB,aAAa,SAAI;AAAA,EACxD;AACA,SAAO,mBAAmB,gBAAgB,gBAAgB;AAC5D;AASO,SAAS,iBACd,YACA,OACA,UACQ;AACR,MAAI,EAAE,cAAc,IAAI;AACtB,UAAM,IAAI,WAAW,gEAAc,UAAU,KAAK;AAAA,EACpD;AACA,MAAI,EAAE,YAAY,IAAI;AACpB,UAAM,IAAI,WAAW,sEAAe,QAAQ,KAAK;AAAA,EACnD;AACA,SAAO,QAAQ,aAAa;AAC9B;AAOO,SAAS,YAAY,OAAkC;AAC5D,QAAM,EAAE,mBAAmB,kBAAkB,IAAI;AAEjD,MAAI,CAAE,oBAA0C,SAAS,iBAAiB,GAAG;AAC3E,UAAM,IAAI;AAAA,MACR,kCAAS,oBAAoB,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,EAAE,KAAK,KAAK,CAAC,wBAAS,iBAAiB;AAAA,IACzF;AAAA,EACF;AACA,MAAI,EAAE,MAAM,YAAY,IAAI;AAC1B,UAAM,IAAI,WAAW,sEAAe,MAAM,QAAQ,KAAK;AAAA,EACzD;AAEA,QAAM,aAAa;AAAA,IACjB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACA,QAAM,cAAc,aAAa,MAAM;AACvC,QAAM,WAAW,iBAAiB,YAAY,mBAAmB,MAAM,QAAQ;AAE/E,MAAI,sBAAsB,MAAM;AAC9B,WAAO;AAAA,MACL;AAAA,MACA,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,UAAU;AAAA,MACV,SAAS;AAAA,IACX;AAAA,EACF;AAEA,MAAI,EAAE,oBAAoB,IAAI;AAC5B,UAAM,IAAI,WAAW,wFAAkB,iBAAiB,KAAK;AAAA,EAC/D;AAEA,SAAO;AAAA,IACL;AAAA,IACA,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB;AAAA,IACA,UAAU,oBAAoB;AAAA,IAC9B,SAAS,YAAY,oBAAoB,SAAS;AAAA,EACpD;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-MTAYG3U2.cjs","../src/copper/meta.ts","../src/copper/index.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACFO,IAAM,WAAA,EAA6B;AAAA,EACxC,IAAA,EAAM,4CAAA;AAAA,EACN,MAAA,EAAQ,+BAAA;AAAA,EACR,OAAA,EACE,qOAAA;AAAA,EACF,OAAA,EAAS;AAAA,IACP,oIAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,8LAAA;AAAA,IACA,kDAAA;AAAA,IACA,iIAAA;AAAA,IACA,0QAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,KAAA,EAAO;AAAA,IACL,gIAAA;AAAA,IACA,+CAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY,sKAAA;AAAA,EACZ,MAAA,EAAQ;AACV,CAAA;ADGA;AACA;AEeO,IAAM,mBAAA,EAA8D;AAAA,EACzE,UAAA,EAAY;AAAA,IACV,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa,MAAA;AAAA,IACb,kBAAA,EAAoB,GAAA;AAAA,IACpB,mBAAA,EAAqB,GAAA;AAAA,IACrB,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa,KAAA;AAAA,IACb,kBAAA,EAAoB,GAAA;AAAA,IACpB,mBAAA,EAAqB,GAAA;AAAA,IACrB,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa,MAAA;AAAA,IACb,kBAAA,EAAoB,GAAA;AAAA,IACpB,mBAAA,EAAqB,GAAA;AAAA,IACrB,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa,MAAA;AAAA,IACb,kBAAA,EAAoB,GAAA;AAAA,IACpB,mBAAA,EAAqB,GAAA;AAAA,IACrB,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA,SAAA,EAAW;AAAA,IACT,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa,MAAA;AAAA,IACb,kBAAA,EAAoB,GAAA;AAAA,IACpB,mBAAA,EAAqB,GAAA;AAAA,IACrB,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA,SAAA,EAAW;AAAA,IACT,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa,MAAA;AAAA,IACb,kBAAA,EAAoB,GAAA;AAAA,IACpB,mBAAA,EAAqB,GAAA;AAAA,IACrB,IAAA,EAAM;AAAA,EACR;AACF,CAAA;AAuBO,SAAS,UAAA,CAAW,KAAA,EAA8C;AACvE,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,gBAAgB,EAAA,EAAI,KAAA;AAE7C,EAAA,MAAM,OAAA,EAAS,kBAAA,CAAmB,KAAK,CAAA;AACvC,EAAA,GAAA,CAAI,OAAA,IAAW,KAAA,CAAA,EAAW;AACxB,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,8BAAA,EAAQ,KAAK,CAAA,CAAA;AACpC,EAAA;AACqB,EAAA;AACE,IAAA;AACvB,EAAA;AACmD,EAAA;AAC5B,IAAA;AACvB,EAAA;AAEwD,EAAA;AAEjD,EAAA;AACL,IAAA;AACG,IAAA;AACuC,IAAA;AAC9B,IAAA;AACa,IAAA;AAC3B,EAAA;AACF;AFtCgE;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-MTAYG3U2.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 '电阻温度修正(α = 0.00393 /℃):r_T = r₂₀·[1 + α·(T − 20)]',\n '总重量:W = w₀ × l(w₀ 单位重量 kg/km,l 长度 km)',\n ],\n references: [\n '内置参数表来源 TB/T 2809-2017《电气化铁路用铜及铜合金接触线》(2018-05-01 实施)',\n '单位重量为标称值',\n '载流量为 150℃ 持续值,室内/室外双口径按标准表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 /** 150℃ 持续载流量,室内口径,A */\n readonly ampacityIndoor150A: 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 * 已与站点 `/calculator/assets/calc-core.js` 中的 COPPER_TABLE 逐项比对,\n * 6 个型号 × 4 项参数完全一致。\n *\n * 注:站点曾因显示层 `fmt()` 的尾零剥离正则把载流量渲染成 43/56(应为 430/560),\n * 已于 R38 之后修复。若再遇渲染值与本表不符,先确认是否为显示层问题:\n * 本表与服务端数据源始终一致。\n *\n * ⚠️ 注意型号口径:CTMH / CTAH / CTS 是站点计算器的型号代码,与标准中的\n * CTMH / CTA / CTS 并非同名对应。`note` 字段说明各行实际取自标准的哪一行,\n * 交叉引用 TB/T 2809-2017 时请以 note 为准。\n */\nexport const TB2809_WIRE_PARAMS: Record<CopperWireModel, WireParamEntry> = {\n 'CTMH-120': {\n unitWeightKgPerKm: 1082,\n r20OhmPerKm: 0.2113,\n ampacityIndoor150A: 430,\n ampacityOutdoor150A: 560,\n note: '取标准 CTMH 行(高强度铜镁合金),ρ 按标准上限 0.02535 计算',\n },\n 'CTMH-150': {\n unitWeightKgPerKm: 1350,\n r20OhmPerKm: 0.169,\n ampacityIndoor150A: 500,\n ampacityOutdoor150A: 650,\n note: '取标准 CTMH 行(高强度铜镁合金)',\n },\n 'CTAH-120': {\n unitWeightKgPerKm: 1070,\n r20OhmPerKm: 0.1481,\n ampacityIndoor150A: 515,\n ampacityOutdoor150A: 680,\n note: '取标准 CTA 行(铜银合金),ρ ≤ 0.01777',\n },\n 'CTAH-150': {\n unitWeightKgPerKm: 1330,\n r20OhmPerKm: 0.1185,\n ampacityIndoor150A: 620,\n ampacityOutdoor150A: 785,\n note: '取标准 CTA 行(铜银合金)',\n },\n 'CTS-120': {\n unitWeightKgPerKm: 1080,\n r20OhmPerKm: 0.1916,\n ampacityIndoor150A: 515,\n ampacityOutdoor150A: 680,\n note: '取标准 CTS 行(铜锡合金),载流量按 CTS 行取值',\n },\n 'CTS-150': {\n unitWeightKgPerKm: 1345,\n r20OhmPerKm: 0.1533,\n ampacityIndoor150A: 620,\n ampacityOutdoor150A: 790,\n note: '取标准 CTS 行(铜锡合金),载流量按 CTS 行取值',\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 const rT = resistanceAtTempOhmPerKm(params.r20OhmPerKm, ambientTempDegC);\n\n return {\n model,\n ...params,\n totalWeightKg: params.unitWeightKgPerKm * lengthKm,\n rTOhmPerKm: rT,\n totalResistanceOhm: rT * lengthKm,\n };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-RVP3IU2L.cjs","../src/voltage-drop/meta.ts","../src/voltage-drop/index.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACFO,IAAM,gBAAA,EAAkC;AAAA,EAC7C,IAAA,EAAM,gCAAA;AAAA,EACN,MAAA,EAAQ,oBAAA;AAAA,EACR,OAAA,EACE,iQAAA;AAAA,EACF,OAAA,EAAS;AAAA,IACP,gJAAA;AAAA,IACA,0CAAA;AAAA,IACA,wHAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,2FAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,KAAA,EAAO;AAAA,IACL,uDAAA;AAAA,IACA,6CAAA;AAAA,IACA,gEAAA;AAAA,IACA,6DAAA;AAAA,IACA,oDAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY,sKAAA;AAAA,EACZ,MAAA,EAAQ;AACV,CAAA;ADGA;AACA;AE5BO,IAAM,0BAAA,EAA4B,GAAA;AAsClC,SAAS,gBAAA,CAAiB,KAAA,EAA4C;AAC3E,EAAA,MAAM,EAAE,WAAA,EAAa,QAAA,EAAU,WAAA,EAAa,eAAe,EAAA,EAAI,KAAA;AAE/D,EAAA,GAAA,CAAI,CAAA,CAAE,YAAA,EAAc,CAAA,CAAA,EAAI;AACtB,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,yEAAA,EAAgB,WAAW,CAAA,EAAA,CAAI,CAAA;AAAA,EACtD;AACA,EAAA,GAAA,CAAI,CAAA,CAAE,SAAA,EAAW,CAAA,CAAA,EAAI;AACnB,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,yEAAA,EAAgB,QAAQ,CAAA,EAAA,CAAI,CAAA;AAAA,EACnD;AACA,EAAA,GAAA,CAAI,CAAA,CAAE,eAAA,EAAiB,CAAA,CAAA,EAAI;AACzB,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,+EAAA,EAAiB,cAAc,CAAA,GAAA,CAAK,CAAA;AAAA,EAC3D;AAEA,EAAA,MAAM,cAAA,mBAAgB,KAAA,CAAM,aAAA,UAAiB,GAAA;AAC7C,EAAA,GAAA,CAAI,CAAA,CAAE,cAAA,EAAgB,CAAA,EAAA,GAAM,CAAC,MAAA,CAAO,SAAA,CAAU,aAAa,CAAA,EAAG;AAC5D,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,qFAAA,EAAkB,aAAa,CAAA,CAAA;AACtD,EAAA;AAE+C,EAAA;AAGiB,EAAA;AAC3B,EAAA;AACH,EAAA;AAE3B,EAAA;AACO,IAAA;AACZ,IAAA;AACA,IAAA;AAC4C,IAAA;AACrB,IAAA;AACzB,EAAA;AACF;AFb+H;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-RVP3IU2L.cjs","sourcesContent":[null,"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)](α = 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 { 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\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(r20OhmPerKm, input.tempDegC ?? 25) / 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"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dropper/meta.ts","../src/dropper/index.ts"],"sourcesContent":["import type { CalculatorMeta } from '../types';\n\nexport const dropperMeta: CalculatorMeta = {\n name: '吊弦长度计算',\n nameEn: 'Dropper Length Calculator',\n summary:\n '按抛物线弛度公式计算链形悬挂各吊弦长度,支持简单链形与弹性链形两种悬挂类型。',\n formula: [\n '接触线弛度(抛物线近似):f_c(x) = q_c·x·(L−x) / (2·T_c)',\n '承力索弛度:f_m(x) = q_m·x·(L−x) / (2·T_m)',\n '简单链形:l_i = H − f_c(x_i)',\n '弹性链形(计入承力索弛度):l_i = H − f_c(x_i) + f_m(x_i)',\n '跨中最大弛度:f_max = q_c·L² / (8·T_c)',\n ],\n references: [\n '抛物线近似,适用于 f/L ≤ 1/10 的小弛度工况',\n '吊弦间距须能整除跨距;实际吊弦布置以设计文件为准',\n '弹性链形悬挂须同时提供承力索张力与单位荷载',\n ],\n scope: [\n '跨距 L:5 ~ 80 m',\n '接触线张力 T_c:1 ~ 40 kN',\n '结构高度 H:0.3 ~ 3 m',\n '接触线单位荷载 q_c: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 /** 悬挂类型。弹性链形须同时提供 messenger 参数 */\n readonly suspension: SuspensionType;\n /** 跨距 L,m */\n readonly spanM: number;\n /** 接触线张力 T_c,kN */\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 * 承力索参数。弹性链形悬挂('elastic')必填,\n * 简单链形悬挂传 null 或不传。\n */\n readonly messenger?: {\n /** 承力索张力 T_m,kN */\n readonly tensionKN: number;\n /** 承力索单位荷载 q_m,kN/m */\n readonly loadKNPerM: number;\n } | null;\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 */\n readonly contactSagM: number;\n /** 承力索弛度 f_m(x),m(简单链形恒为 0) */\n readonly messengerSagM: number;\n /** 吊弦长度 l,m */\n readonly dropperLengthM: number;\n}\n\nexport interface DropperResult {\n readonly points: readonly DropperPoint[];\n /** 跨中最大弛度 f_max,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)\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 * 计算整跨各吊弦长度。\n *\n * 简单链形:l_i = H − f_c(x_i)\n * 弹性链形:l_i = H − f_c(x_i) + f_m(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 if (suspension === 'elastic') {\n const m = input.messenger;\n if (!m) {\n throw new RangeError('弹性链形悬挂必须提供承力索参数(messenger)');\n }\n if (!(m.tensionKN > 0) || !(m.loadKNPerM > 0)) {\n throw new RangeError('承力索张力与单位荷载必须为正数');\n }\n }\n\n const positions = dropperPositionsM(spanM, spacingM);\n const messenger = suspension === 'elastic' ? input.messenger : null;\n\n const points: DropperPoint[] = positions.map((xM, index) => {\n const contactSag = parabolaSagM(\n xM,\n spanM,\n contactLoadKNPerM,\n contactTensionKN,\n );\n const messengerSag =\n messenger && messenger !== null\n ? parabolaSagM(xM, spanM, messenger.loadKNPerM, messenger.tensionKN)\n : 0;\n\n const dropperLengthM = structureHeightM - contactSag + messengerSag;\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 if (p.contactSagM > maxSagM) maxSagM = p.contactSagM;\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"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-X25CXRVE.cjs","../src/cross-span/meta.ts","../src/cross-span/index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-X25CXRVE.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 ],\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(节点近似均匀分布,起点距支柱 a) */\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 * 节点垂直负载(均匀间距简化):\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 // 节点均匀分布:第 i 个节点距左支柱 x = a·(i+1),须全部落在跨内\n const lastX = a * nodeCount;\n if (!(lastX < L)) {\n throw new RangeError(\n `末节点位置 ${lastX} m 超出跨距 ${L} m,请减小节点数或股道间距`,\n );\n }\n\n const Q = J + n * q0 * a + P + gc * a;\n\n const nodeX: number[] = [];\n for (let i = 0; i < nodeCount; i++) {\n nodeX.push(a * (i + 1));\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"]}
|