ocs-calculators 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +45 -4
- package/README.md +47 -5
- package/README_EN.md +11 -5
- package/dist/ampacity/index.cjs +17 -0
- package/dist/ampacity/index.cjs.map +1 -0
- package/dist/ampacity/index.d.cts +68 -0
- package/dist/ampacity/index.d.ts +68 -0
- package/dist/ampacity/index.js +17 -0
- package/dist/ampacity/index.js.map +1 -0
- package/dist/chunk-3ERFRRHZ.cjs +119 -0
- package/dist/chunk-3ERFRRHZ.cjs.map +1 -0
- package/dist/chunk-4UU7WA7N.cjs +107 -0
- package/dist/chunk-4UU7WA7N.cjs.map +1 -0
- package/dist/chunk-5INEDXRY.cjs +69 -0
- package/dist/chunk-5INEDXRY.cjs.map +1 -0
- package/dist/chunk-5Q6IASB2.cjs +101 -0
- package/dist/chunk-5Q6IASB2.cjs.map +1 -0
- package/dist/chunk-746H65EQ.js +91 -0
- package/dist/chunk-746H65EQ.js.map +1 -0
- package/dist/chunk-CVA4EH2K.js +102 -0
- package/dist/chunk-CVA4EH2K.js.map +1 -0
- package/dist/chunk-DGO2DCO5.cjs +19 -0
- package/dist/chunk-DGO2DCO5.cjs.map +1 -0
- package/dist/chunk-FVESJBUD.cjs +95 -0
- package/dist/chunk-FVESJBUD.cjs.map +1 -0
- package/dist/chunk-GN6QNOUL.js +91 -0
- package/dist/chunk-GN6QNOUL.js.map +1 -0
- package/dist/chunk-IFVYGNT3.js +107 -0
- package/dist/chunk-IFVYGNT3.js.map +1 -0
- package/dist/chunk-IUENDAAJ.js +67 -0
- package/dist/chunk-IUENDAAJ.js.map +1 -0
- package/dist/chunk-J2UXRMTU.cjs +126 -0
- package/dist/chunk-J2UXRMTU.cjs.map +1 -0
- package/dist/chunk-KOSC6EA3.js +101 -0
- package/dist/chunk-KOSC6EA3.js.map +1 -0
- package/dist/chunk-LDSV3U4M.js +69 -0
- package/dist/chunk-LDSV3U4M.js.map +1 -0
- package/dist/chunk-MZBQ4546.cjs +102 -0
- package/dist/chunk-MZBQ4546.cjs.map +1 -0
- package/dist/chunk-NBFOB2PI.cjs +91 -0
- package/dist/chunk-NBFOB2PI.cjs.map +1 -0
- package/dist/chunk-NBHEOJ5A.cjs +88 -0
- package/dist/chunk-NBHEOJ5A.cjs.map +1 -0
- package/dist/chunk-P6KUGPHD.cjs +91 -0
- package/dist/chunk-P6KUGPHD.cjs.map +1 -0
- package/dist/chunk-QTPXTDGY.js +119 -0
- package/dist/chunk-QTPXTDGY.js.map +1 -0
- package/dist/chunk-RPKDEFSJ.cjs +78 -0
- package/dist/chunk-RPKDEFSJ.cjs.map +1 -0
- package/dist/chunk-RVG3LEZQ.js +95 -0
- package/dist/chunk-RVG3LEZQ.js.map +1 -0
- package/dist/chunk-RVP3IU2L.cjs +67 -0
- package/dist/chunk-RVP3IU2L.cjs.map +1 -0
- package/dist/chunk-UO2PHBC3.js +126 -0
- package/dist/chunk-UO2PHBC3.js.map +1 -0
- package/dist/chunk-VAHQDIMW.js +88 -0
- package/dist/chunk-VAHQDIMW.js.map +1 -0
- package/dist/chunk-WPMKM6NL.js +78 -0
- package/dist/chunk-WPMKM6NL.js.map +1 -0
- package/dist/chunk-YHDO6XVM.js +19 -0
- package/dist/chunk-YHDO6XVM.js.map +1 -0
- package/dist/copper/index.cjs +12 -0
- package/dist/copper/index.cjs.map +1 -0
- package/dist/copper/index.d.cts +57 -0
- package/dist/copper/index.d.ts +57 -0
- package/dist/copper/index.js +12 -0
- package/dist/copper/index.js.map +1 -0
- package/dist/curve-stagger/index.cjs +17 -0
- package/dist/curve-stagger/index.cjs.map +1 -0
- package/dist/curve-stagger/index.d.cts +77 -0
- package/dist/curve-stagger/index.d.ts +77 -0
- package/dist/curve-stagger/index.js +17 -0
- package/dist/curve-stagger/index.js.map +1 -0
- package/dist/dropper/index.cjs +15 -0
- package/dist/dropper/index.cjs.map +1 -0
- package/dist/dropper/index.d.cts +84 -0
- package/dist/dropper/index.d.ts +84 -0
- package/dist/dropper/index.js +15 -0
- package/dist/dropper/index.js.map +1 -0
- package/dist/force/index.cjs +17 -0
- package/dist/force/index.cjs.map +1 -0
- package/dist/force/index.d.cts +69 -0
- package/dist/force/index.d.ts +69 -0
- package/dist/force/index.js +17 -0
- package/dist/force/index.js.map +1 -0
- package/dist/icing/index.cjs +9 -0
- package/dist/icing/index.cjs.map +1 -0
- package/dist/icing/index.d.cts +43 -0
- package/dist/icing/index.d.ts +43 -0
- package/dist/icing/index.js +9 -0
- package/dist/icing/index.js.map +1 -0
- package/dist/index.cjs +162 -1220
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +47 -775
- package/dist/index.d.ts +47 -775
- package/dist/index.js +108 -1063
- package/dist/index.js.map +1 -1
- package/dist/stroke/index.cjs +19 -0
- package/dist/stroke/index.cjs.map +1 -0
- package/dist/stroke/index.d.cts +63 -0
- package/dist/stroke/index.d.ts +63 -0
- package/dist/stroke/index.js +19 -0
- package/dist/stroke/index.js.map +1 -0
- package/dist/tension/index.cjs +19 -0
- package/dist/tension/index.cjs.map +1 -0
- package/dist/tension/index.d.cts +85 -0
- package/dist/tension/index.d.ts +85 -0
- package/dist/tension/index.js +19 -0
- package/dist/tension/index.js.map +1 -0
- package/dist/types-C2OanO8N.d.cts +33 -0
- package/dist/types-C2OanO8N.d.ts +33 -0
- package/dist/voltage-drop/index.cjs +12 -0
- package/dist/voltage-drop/index.cjs.map +1 -0
- package/dist/voltage-drop/index.d.cts +40 -0
- package/dist/voltage-drop/index.d.ts +40 -0
- package/dist/voltage-drop/index.js +12 -0
- package/dist/voltage-drop/index.js.map +1 -0
- package/dist/wavespeed/index.cjs +17 -0
- package/dist/wavespeed/index.cjs.map +1 -0
- package/dist/wavespeed/index.d.cts +58 -0
- package/dist/wavespeed/index.d.ts +58 -0
- package/dist/wavespeed/index.js +17 -0
- package/dist/wavespeed/index.js.map +1 -0
- package/dist/wear/index.cjs +13 -0
- package/dist/wear/index.cjs.map +1 -0
- package/dist/wear/index.d.cts +55 -0
- package/dist/wear/index.d.ts +55 -0
- package/dist/wear/index.js +13 -0
- package/dist/wear/index.js.map +1 -0
- package/dist/wind/index.cjs +15 -0
- package/dist/wind/index.cjs.map +1 -0
- package/dist/wind/index.d.cts +66 -0
- package/dist/wind/index.d.ts +66 -0
- package/dist/wind/index.js +15 -0
- package/dist/wind/index.js.map +1 -0
- package/package.json +64 -3
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// src/wavespeed/meta.ts
|
|
2
|
+
var wavespeedMeta = {
|
|
3
|
+
name: "\u6CE2\u901F\u5229\u7528\u7387",
|
|
4
|
+
nameEn: "Wave Propagation Speed Utilisation",
|
|
5
|
+
summary: "\u7531\u63A5\u89E6\u7EBF\u5F20\u529B\u4E0E\u7EBF\u5BC6\u5EA6\u6C42\u6CE2\u4F20\u64AD\u901F\u5EA6 c \u4E0E\u6CE2\u901F\u5229\u7528\u7387 \u03B2 = v/c\uFF0C\u7ED9\u51FA\u8DE8\u8DDD\u524D\u4E09\u9636\u56FA\u6709\u9891\u7387\u4E0E\u4E00\u9636\u5171\u632F\u8F66\u901F\u3002",
|
|
6
|
+
formula: [
|
|
7
|
+
"\u6CE2\u4F20\u64AD\u901F\u5EA6\uFF1Ac = \u221A(T/\u03C1)\uFF08T \u53D6 N\uFF0C\u03C1 \u53D6 kg/m\uFF09",
|
|
8
|
+
"\u6CE2\u901F\u5229\u7528\u7387\uFF1A\u03B2 = v / c\uFF08v \u6362\u7B97\u4E3A m/s\uFF09",
|
|
9
|
+
"\u4E24\u7AEF\u56FA\u5B9A\u5F26\u56FA\u6709\u9891\u7387\uFF1Af_n = n/(2L)\xB7\u221A(T/\u03C1)",
|
|
10
|
+
"\u4E00\u9636\u5171\u632F\u8F66\u901F\uFF1Av_res = f\u2081\xB7L = c/2\uFF08\u8DE8\u8DDD\u901A\u8FC7\u9891\u7387 v/L \u4E0E f\u2081 \u76F8\u9047\uFF09"
|
|
11
|
+
],
|
|
12
|
+
references: [
|
|
13
|
+
"\u4F9D\u636E\u672C\u7AD9 \u5F13\u7F51\u5173\u7CFB / \u6CE2\u4F20\u64AD \u6761\u76EE",
|
|
14
|
+
"\u03B2 \u8FBE 0.7 \u65F6\u63D0\u793A\u63A5\u8FD1\u5171\u632F\u533A\uFF0C\u8BE5\u9608\u503C\u5C5E\u5DE5\u7A0B\u7ECF\u9A8C\u503C\uFF0C\u8BF7\u4EE5\u8BBE\u8BA1\u6587\u4EF6\u4E3A\u51C6"
|
|
15
|
+
],
|
|
16
|
+
scope: [
|
|
17
|
+
"\u5F20\u529B T\uFF1A5 ~ 40 kN",
|
|
18
|
+
"\u7EBF\u5BC6\u5EA6 \u03C1\uFF1A0.5 ~ 3 kg/m",
|
|
19
|
+
"\u901F\u5EA6 v\uFF1A20 ~ 500 km/h",
|
|
20
|
+
"\u8DE8\u8DDD l\uFF1A30 ~ 90 m",
|
|
21
|
+
"\u4E24\u7AEF\u56FA\u5B9A\u5F26\u6A21\u578B\uFF0C\u672A\u8003\u8651\u5F39\u6027\u652F\u627F\u4E0E\u963B\u5C3C",
|
|
22
|
+
"\u672A\u8003\u8651\u627F\u529B\u7D22\u4E0E\u540A\u5F26\u5BF9\u6CE2\u4F20\u64AD\u7684\u5F71\u54CD"
|
|
23
|
+
],
|
|
24
|
+
disclaimer: "\u672C\u5DE5\u5177\u7ED3\u679C\u4EC5\u4F9B\u53C2\u8003\uFF0C\u5DE5\u7A0B\u5E94\u7528\u4EE5\u8BBE\u8BA1\u6587\u4EF6\u4E3A\u51C6\u3002\u8BE6\u89C1 DISCLAIMER.md\u3002",
|
|
25
|
+
online: "https://www.itswe.com/calculator/wavespeed/"
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// src/wavespeed/index.ts
|
|
29
|
+
var DEFAULT_WARN_THRESHOLD = 0.7;
|
|
30
|
+
function wavePropagationSpeedMPerS(tensionKN, linearMassKgPerM) {
|
|
31
|
+
if (!(tensionKN > 0)) {
|
|
32
|
+
throw new RangeError(`\u5F20\u529B\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${tensionKN} kN`);
|
|
33
|
+
}
|
|
34
|
+
if (!(linearMassKgPerM > 0)) {
|
|
35
|
+
throw new RangeError(`\u7EBF\u5BC6\u5EA6\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${linearMassKgPerM} kg/m`);
|
|
36
|
+
}
|
|
37
|
+
return Math.sqrt(tensionKN * 1e3 / linearMassKgPerM);
|
|
38
|
+
}
|
|
39
|
+
function naturalFrequencyHz(n, spanM, waveSpeedMPerS) {
|
|
40
|
+
if (!Number.isInteger(n) || n < 1) {
|
|
41
|
+
throw new RangeError(`\u9636\u6B21\u5FC5\u987B\u4E3A\u6B63\u6574\u6570\uFF0C\u6536\u5230 ${n}`);
|
|
42
|
+
}
|
|
43
|
+
if (!(spanM > 0)) {
|
|
44
|
+
throw new RangeError(`\u8DE8\u8DDD\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${spanM} m`);
|
|
45
|
+
}
|
|
46
|
+
if (!(waveSpeedMPerS > 0)) {
|
|
47
|
+
throw new RangeError(`\u6CE2\u901F\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${waveSpeedMPerS} m/s`);
|
|
48
|
+
}
|
|
49
|
+
return n / (2 * spanM) * waveSpeedMPerS;
|
|
50
|
+
}
|
|
51
|
+
function kmHToMPerS(speedKmH) {
|
|
52
|
+
return speedKmH / 3.6;
|
|
53
|
+
}
|
|
54
|
+
function waveSpeedCheck(input) {
|
|
55
|
+
const { tensionKN, linearMassKgPerM, speedKmH, spanM } = input;
|
|
56
|
+
if (!(speedKmH >= 0)) {
|
|
57
|
+
throw new RangeError(`\u901F\u5EA6\u4E0D\u80FD\u4E3A\u8D1F\uFF0C\u6536\u5230 ${speedKmH} km/h`);
|
|
58
|
+
}
|
|
59
|
+
if (!(spanM > 0)) {
|
|
60
|
+
throw new RangeError(`\u8DE8\u8DDD\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${spanM} m`);
|
|
61
|
+
}
|
|
62
|
+
const c = wavePropagationSpeedMPerS(tensionKN, linearMassKgPerM);
|
|
63
|
+
const beta = kmHToMPerS(speedKmH) / c;
|
|
64
|
+
const fns = [1, 2, 3].map((n) => naturalFrequencyHz(n, spanM, c));
|
|
65
|
+
const f1 = fns[0];
|
|
66
|
+
if (f1 === void 0) {
|
|
67
|
+
throw new Error("\u56FA\u6709\u9891\u7387\u8BA1\u7B97\u5931\u8D25");
|
|
68
|
+
}
|
|
69
|
+
const threshold = input.warnThreshold ?? DEFAULT_WARN_THRESHOLD;
|
|
70
|
+
return {
|
|
71
|
+
waveSpeedMPerS: c,
|
|
72
|
+
beta,
|
|
73
|
+
betaPercent: beta * 100,
|
|
74
|
+
naturalFrequenciesHz: fns,
|
|
75
|
+
resonanceSpeedKmH: f1 * spanM * 3.6,
|
|
76
|
+
warn: beta >= threshold
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export {
|
|
81
|
+
wavespeedMeta,
|
|
82
|
+
DEFAULT_WARN_THRESHOLD,
|
|
83
|
+
wavePropagationSpeedMPerS,
|
|
84
|
+
naturalFrequencyHz,
|
|
85
|
+
kmHToMPerS,
|
|
86
|
+
waveSpeedCheck
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=chunk-VAHQDIMW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/wavespeed/meta.ts","../src/wavespeed/index.ts"],"sourcesContent":["import type { CalculatorMeta } from '../types';\n\nexport const wavespeedMeta: CalculatorMeta = {\n name: '波速利用率',\n nameEn: 'Wave Propagation Speed Utilisation',\n summary:\n '由接触线张力与线密度求波传播速度 c 与波速利用率 β = v/c,给出跨距前三阶固有频率与一阶共振车速。',\n formula: [\n '波传播速度:c = √(T/ρ)(T 取 N,ρ 取 kg/m)',\n '波速利用率:β = v / c(v 换算为 m/s)',\n '两端固定弦固有频率:f_n = n/(2L)·√(T/ρ)',\n '一阶共振车速:v_res = f₁·L = c/2(跨距通过频率 v/L 与 f₁ 相遇)',\n ],\n references: [\n '依据本站 弓网关系 / 波传播 条目',\n 'β 达 0.7 时提示接近共振区,该阈值属工程经验值,请以设计文件为准',\n ],\n scope: [\n '张力 T:5 ~ 40 kN',\n '线密度 ρ:0.5 ~ 3 kg/m',\n '速度 v:20 ~ 500 km/h',\n '跨距 l:30 ~ 90 m',\n '两端固定弦模型,未考虑弹性支承与阻尼',\n '未考虑承力索与吊弦对波传播的影响',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/wavespeed/',\n};\n","export { wavespeedMeta } from './meta';\n\n/** 波速利用率告警阈值(工程经验值) */\nexport const DEFAULT_WARN_THRESHOLD = 0.7;\n\nexport interface WaveSpeedInput {\n /** 接触线张力 T,kN */\n readonly tensionKN: number;\n /** 线密度 ρ,kg/m */\n readonly linearMassKgPerM: number;\n /** 列车速度 v,km/h */\n readonly speedKmH: number;\n /** 跨距 l,m */\n readonly spanM: number;\n /** 告警阈值 β。缺省 0.7 */\n readonly warnThreshold?: number;\n}\n\nexport interface WaveSpeedResult {\n /** 波传播速度 c = √(T/ρ),m/s */\n readonly waveSpeedMPerS: number;\n /** 波速利用率 β = v/c,无量纲 */\n readonly beta: number;\n /** 波速利用率,% */\n readonly betaPercent: number;\n /** 前三阶固有频率 f₁ ~ f₃,Hz */\n readonly naturalFrequenciesHz: readonly number[];\n /** 一阶共振车速 v_res = f₁·l,km/h */\n readonly resonanceSpeedKmH: number;\n /** β 是否达到告警阈值 */\n readonly warn: boolean;\n}\n\n/**\n * 波传播速度:c = √(T/ρ),m/s。\n *\n * @param tensionKN 接触线张力 T,kN\n * @param linearMassKgPerM 线密度 ρ,kg/m\n */\nexport function wavePropagationSpeedMPerS(\n tensionKN: number,\n linearMassKgPerM: number,\n): number {\n if (!(tensionKN > 0)) {\n throw new RangeError(`张力必须为正数,收到 ${tensionKN} kN`);\n }\n if (!(linearMassKgPerM > 0)) {\n throw new RangeError(`线密度必须为正数,收到 ${linearMassKgPerM} kg/m`);\n }\n return Math.sqrt((tensionKN * 1e3) / linearMassKgPerM);\n}\n\n/**\n * 两端固定弦第 n 阶固有频率:f_n = n/(2L)·√(T/ρ) = n·c/(2L),Hz。\n *\n * @param n 阶次,正整数\n * @param spanM 跨距 L,m\n * @param waveSpeedMPerS 波速 c,m/s\n */\nexport function naturalFrequencyHz(\n n: number,\n spanM: number,\n waveSpeedMPerS: number,\n): number {\n if (!Number.isInteger(n) || n < 1) {\n throw new RangeError(`阶次必须为正整数,收到 ${n}`);\n }\n if (!(spanM > 0)) {\n throw new RangeError(`跨距必须为正数,收到 ${spanM} m`);\n }\n if (!(waveSpeedMPerS > 0)) {\n throw new RangeError(`波速必须为正数,收到 ${waveSpeedMPerS} m/s`);\n }\n return (n / (2 * spanM)) * waveSpeedMPerS;\n}\n\n/** km/h → m/s */\nexport function kmHToMPerS(speedKmH: number): number {\n return speedKmH / 3.6;\n}\n\n/**\n * 波速利用率校核。\n *\n * β = v/c;β 越接近 1 越接近共振区,达到阈值(默认 0.7)时告警。\n * 一阶共振车速 v_res 为跨距通过频率与一阶固有频率相遇时的车速。\n */\nexport function waveSpeedCheck(input: WaveSpeedInput): WaveSpeedResult {\n const { tensionKN, linearMassKgPerM, speedKmH, spanM } = input;\n\n if (!(speedKmH >= 0)) {\n throw new RangeError(`速度不能为负,收到 ${speedKmH} km/h`);\n }\n if (!(spanM > 0)) {\n throw new RangeError(`跨距必须为正数,收到 ${spanM} m`);\n }\n\n const c = wavePropagationSpeedMPerS(tensionKN, linearMassKgPerM);\n const beta = kmHToMPerS(speedKmH) / c;\n const fns = [1, 2, 3].map((n) => naturalFrequencyHz(n, spanM, c));\n const f1 = fns[0];\n if (f1 === undefined) {\n throw new Error('固有频率计算失败');\n }\n\n const threshold = input.warnThreshold ?? DEFAULT_WARN_THRESHOLD;\n\n return {\n waveSpeedMPerS: c,\n beta,\n betaPercent: beta * 100,\n naturalFrequenciesHz: fns,\n resonanceSpeedKmH: f1 * spanM * 3.6,\n warn: beta >= threshold,\n };\n}\n"],"mappings":";AAEO,IAAM,gBAAgC;AAAA,EAC3C,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,yBAAyB;AAoC/B,SAAS,0BACd,WACA,kBACQ;AACR,MAAI,EAAE,YAAY,IAAI;AACpB,UAAM,IAAI,WAAW,gEAAc,SAAS,KAAK;AAAA,EACnD;AACA,MAAI,EAAE,mBAAmB,IAAI;AAC3B,UAAM,IAAI,WAAW,sEAAe,gBAAgB,OAAO;AAAA,EAC7D;AACA,SAAO,KAAK,KAAM,YAAY,MAAO,gBAAgB;AACvD;AASO,SAAS,mBACd,GACA,OACA,gBACQ;AACR,MAAI,CAAC,OAAO,UAAU,CAAC,KAAK,IAAI,GAAG;AACjC,UAAM,IAAI,WAAW,sEAAe,CAAC,EAAE;AAAA,EACzC;AACA,MAAI,EAAE,QAAQ,IAAI;AAChB,UAAM,IAAI,WAAW,gEAAc,KAAK,IAAI;AAAA,EAC9C;AACA,MAAI,EAAE,iBAAiB,IAAI;AACzB,UAAM,IAAI,WAAW,gEAAc,cAAc,MAAM;AAAA,EACzD;AACA,SAAQ,KAAK,IAAI,SAAU;AAC7B;AAGO,SAAS,WAAW,UAA0B;AACnD,SAAO,WAAW;AACpB;AAQO,SAAS,eAAe,OAAwC;AACrE,QAAM,EAAE,WAAW,kBAAkB,UAAU,MAAM,IAAI;AAEzD,MAAI,EAAE,YAAY,IAAI;AACpB,UAAM,IAAI,WAAW,0DAAa,QAAQ,OAAO;AAAA,EACnD;AACA,MAAI,EAAE,QAAQ,IAAI;AAChB,UAAM,IAAI,WAAW,gEAAc,KAAK,IAAI;AAAA,EAC9C;AAEA,QAAM,IAAI,0BAA0B,WAAW,gBAAgB;AAC/D,QAAM,OAAO,WAAW,QAAQ,IAAI;AACpC,QAAM,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,mBAAmB,GAAG,OAAO,CAAC,CAAC;AAChE,QAAM,KAAK,IAAI,CAAC;AAChB,MAAI,OAAO,QAAW;AACpB,UAAM,IAAI,MAAM,kDAAU;AAAA,EAC5B;AAEA,QAAM,YAAY,MAAM,iBAAiB;AAEzC,SAAO;AAAA,IACL,gBAAgB;AAAA,IAChB;AAAA,IACA,aAAa,OAAO;AAAA,IACpB,sBAAsB;AAAA,IACtB,mBAAmB,KAAK,QAAQ;AAAA,IAChC,MAAM,QAAQ;AAAA,EAChB;AACF;","names":[]}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// src/force/meta.ts
|
|
2
|
+
var forceMeta = {
|
|
3
|
+
name: "\u5F13\u7F51\u63A5\u89E6\u529B\u7EDF\u8BA1\u8BC4\u4EF7",
|
|
4
|
+
nameEn: "Pantograph-Catenary Contact Force Statistical Assessment",
|
|
5
|
+
summary: "\u6309 EN 50367 \u7EDF\u8BA1\u8BC4\u4EF7\u4F53\u7CFB\uFF0C\u7531\u5E73\u5747\u63A5\u89E6\u529B Fm \u4E0E\u6807\u51C6\u5DEE \u03C3 \u8BA1\u7B97 Fmax=Fm+3\u03C3\u3001Fmin=Fm\u22123\u03C3\uFF0C\u5BF9\u7167\u9A8C\u6536\u9650\u503C\u7ED9\u51FA\u5224\u5B9A\uFF0C\u9002\u7528\u4E8E C1 \u68C0\u6D4B\u6570\u636E\u8BC4\u4EF7\u3002",
|
|
6
|
+
formula: [
|
|
7
|
+
"\u7EDF\u8BA1\u8BC4\u4EF7\uFF1AFmax = Fm + 3\u03C3\uFF0CFmin = Fm \u2212 3\u03C3",
|
|
8
|
+
"\u53C2\u8003\u76EE\u6807\u529B\uFF08AC \u4F53\u7CFB\uFF09\uFF1AFref = 0.00097\xB7v\xB2 + 70\uFF08v \u5355\u4F4D km/h\uFF09",
|
|
9
|
+
"DC 3kV \u4F53\u7CFB\uFF1AFref = 0.00097\xB7v\xB2 + 110",
|
|
10
|
+
"DC 1.5kV \u4F53\u7CFB\uFF1AFref = 0.00097\xB7v\xB2 + 140"
|
|
11
|
+
],
|
|
12
|
+
references: [
|
|
13
|
+
"\u7EDF\u8BA1\u8BC4\u4EF7\u6846\u67B6\u4F9D\u636E EN 50367\uFF1B\u6D4B\u91CF\u65B9\u6CD5\u89C1 EN 50317",
|
|
14
|
+
"AC \u4F53\u7CFB\u5E38\u6570\u5F15\u81EA EN 50367 \u88686\uFF1BDC \u4F53\u7CFB\u5E38\u6570\u5F15\u81EA TSI ENE 2011/274/EU",
|
|
15
|
+
"\u9A8C\u6536\u4E0A\u4E0B\u9650\u987B\u6309\u73B0\u884C\u9A8C\u6536\u5927\u7EB2/\u5408\u540C\u586B\u5199\uFF0C\u672C\u6A21\u5757\u4E0D\u5185\u7F6E\u9650\u503C",
|
|
16
|
+
"v = 200 km/h \u65F6 AC \u4F53\u7CFB Fref = 108.8 N"
|
|
17
|
+
],
|
|
18
|
+
scope: [
|
|
19
|
+
"Fm \u4E0E \u03C3 \u5E94\u53D6\u81EA\u540C\u4E00\u68C0\u6D4B\u533A\u6BB5\u7684\u7EDF\u8BA1\u503C\uFF08C1 \u68C0\u6D4B\u6570\u636E\uFF09",
|
|
20
|
+
"3\u03C3 \u51C6\u5219\u662F\u7EDF\u8BA1\u6781\u503C\u8FD1\u4F3C\uFF0C\u4E0D\u66FF\u4EE3\u9010\u70B9\u8D85\u9650\u7EDF\u8BA1",
|
|
21
|
+
"\u672A\u8003\u8651\u79BB\u7EBF\u7387\u3001\u71C3\u5F27\u7387\u7B49\u5176\u4ED6\u63A5\u89E6\u8D28\u91CF\u6307\u6807",
|
|
22
|
+
"\u5206\u6863\u8868\u503C\u4E0E\u5141\u5DEE\u5E26\u4EE5\u6807\u51C6\u539F\u6587\u4E3A\u51C6"
|
|
23
|
+
],
|
|
24
|
+
disclaimer: "\u672C\u5DE5\u5177\u7ED3\u679C\u4EC5\u4F9B\u53C2\u8003\uFF0C\u5DE5\u7A0B\u5E94\u7528\u4EE5\u8BBE\u8BA1\u6587\u4EF6\u4E3A\u51C6\u3002\u8BE6\u89C1 DISCLAIMER.md\u3002",
|
|
25
|
+
online: "https://www.itswe.com/calculator/force/"
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// src/force/index.ts
|
|
29
|
+
var REF_TARGET_COEFF = 97e-5;
|
|
30
|
+
var REF_TARGET_OFFSET_N = {
|
|
31
|
+
ac: 70,
|
|
32
|
+
dc3kv: 110,
|
|
33
|
+
dc15kv: 140
|
|
34
|
+
};
|
|
35
|
+
function referenceTargetForceN(speedKmH, system = "ac") {
|
|
36
|
+
if (!(speedKmH >= 0)) {
|
|
37
|
+
throw new RangeError(`\u901F\u5EA6\u4E0D\u80FD\u4E3A\u8D1F\uFF0C\u6536\u5230 ${speedKmH} km/h`);
|
|
38
|
+
}
|
|
39
|
+
return REF_TARGET_COEFF * speedKmH * speedKmH + REF_TARGET_OFFSET_N[system];
|
|
40
|
+
}
|
|
41
|
+
function statisticalForcesN(meanForceN, stdDevN) {
|
|
42
|
+
if (!(meanForceN > 0)) {
|
|
43
|
+
throw new RangeError(`\u5E73\u5747\u63A5\u89E6\u529B\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${meanForceN} N`);
|
|
44
|
+
}
|
|
45
|
+
if (!(stdDevN >= 0)) {
|
|
46
|
+
throw new RangeError(`\u6807\u51C6\u5DEE\u4E0D\u80FD\u4E3A\u8D1F\uFF0C\u6536\u5230 ${stdDevN} N`);
|
|
47
|
+
}
|
|
48
|
+
const threeSigma = 3 * stdDevN;
|
|
49
|
+
return { maxN: meanForceN + threeSigma, minN: meanForceN - threeSigma };
|
|
50
|
+
}
|
|
51
|
+
function assessContactForce(input) {
|
|
52
|
+
const { meanForceN, stdDevN, speedKmH, maxLimitN, minLimitN } = input;
|
|
53
|
+
const { maxN, minN } = statisticalForcesN(meanForceN, stdDevN);
|
|
54
|
+
const referenceTargetN = speedKmH === null ? null : referenceTargetForceN(speedKmH, input.system ?? "ac");
|
|
55
|
+
const meanDeviationN = referenceTargetN === null ? null : meanForceN - referenceTargetN;
|
|
56
|
+
const maxVerdict = maxLimitN === null ? "not-assessed" : maxN <= maxLimitN ? "pass" : "fail";
|
|
57
|
+
const minVerdict = minLimitN === null ? "not-assessed" : minN >= minLimitN ? "pass" : "fail";
|
|
58
|
+
return {
|
|
59
|
+
meanForceN,
|
|
60
|
+
stdDevN,
|
|
61
|
+
maxForceN: maxN,
|
|
62
|
+
minForceN: minN,
|
|
63
|
+
referenceTargetN,
|
|
64
|
+
meanDeviationN,
|
|
65
|
+
maxVerdict,
|
|
66
|
+
minVerdict
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export {
|
|
71
|
+
forceMeta,
|
|
72
|
+
REF_TARGET_COEFF,
|
|
73
|
+
REF_TARGET_OFFSET_N,
|
|
74
|
+
referenceTargetForceN,
|
|
75
|
+
statisticalForcesN,
|
|
76
|
+
assessContactForce
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=chunk-WPMKM6NL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/force/meta.ts","../src/force/index.ts"],"sourcesContent":["import type { CalculatorMeta } from '../types';\n\nexport const forceMeta: CalculatorMeta = {\n name: '弓网接触力统计评价',\n nameEn: 'Pantograph-Catenary Contact Force Statistical Assessment',\n summary:\n '按 EN 50367 统计评价体系,由平均接触力 Fm 与标准差 σ 计算 Fmax=Fm+3σ、Fmin=Fm−3σ,对照验收限值给出判定,适用于 C1 检测数据评价。',\n formula: [\n '统计评价:Fmax = Fm + 3σ,Fmin = Fm − 3σ',\n '参考目标力(AC 体系):Fref = 0.00097·v² + 70(v 单位 km/h)',\n 'DC 3kV 体系:Fref = 0.00097·v² + 110',\n 'DC 1.5kV 体系:Fref = 0.00097·v² + 140',\n ],\n references: [\n '统计评价框架依据 EN 50367;测量方法见 EN 50317',\n 'AC 体系常数引自 EN 50367 表6;DC 体系常数引自 TSI ENE 2011/274/EU',\n '验收上下限须按现行验收大纲/合同填写,本模块不内置限值',\n 'v = 200 km/h 时 AC 体系 Fref = 108.8 N',\n ],\n scope: [\n 'Fm 与 σ 应取自同一检测区段的统计值(C1 检测数据)',\n '3σ 准则是统计极值近似,不替代逐点超限统计',\n '未考虑离线率、燃弧率等其他接触质量指标',\n '分档表值与允差带以标准原文为准',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/force/',\n};\n","export { forceMeta } from './meta';\n\n/** 供电制式,决定参考目标力 Fref 的常数项 */\nexport type PowerSystem = 'ac' | 'dc3kv' | 'dc15kv';\n\n/** 限值判定结果 */\nexport type LimitVerdict = 'pass' | 'fail' | 'not-assessed';\n\n/** Fref = 0.00097·v² + offset,offset 按供电制式取值 */\nexport const REF_TARGET_COEFF = 0.00097;\n\n/** 参考目标力常数项,N。AC 引自 EN 50367 表6,DC 引自 TSI ENE 2011/274/EU */\nexport const REF_TARGET_OFFSET_N: Record<PowerSystem, number> = {\n ac: 70,\n dc3kv: 110,\n dc15kv: 140,\n};\n\nexport interface ContactForceInput {\n /** 平均接触力 Fm,N(同一 C1 检测区段统计均值) */\n readonly meanForceN: number;\n /** 标准差 σ,N(同一区段统计标准差) */\n readonly stdDevN: number;\n /** 速度 v,km/h。传 null 则不输出参考目标力 */\n readonly speedKmH: number | null;\n /** 验收上限 Fmax,lim,N。传 null 则不判定 */\n readonly maxLimitN: number | null;\n /** 验收下限 Fmin,lim,N。传 null 则不判定 */\n readonly minLimitN: number | null;\n /** 供电制式。缺省为交流 */\n readonly system?: PowerSystem;\n}\n\nexport interface ContactForceResult {\n readonly meanForceN: number;\n readonly stdDevN: number;\n /** 统计最大力 Fmax = Fm + 3σ,N */\n readonly maxForceN: number;\n /** 统计最小力 Fmin = Fm − 3σ,N */\n readonly minForceN: number;\n /** 参考目标力 Fref,N。未提供速度时为 null */\n readonly referenceTargetN: number | null;\n /** 均值对参考目标的偏差 Fm − Fref,N。未提供速度时为 null */\n readonly meanDeviationN: number | null;\n /** 上限判定 */\n readonly maxVerdict: LimitVerdict;\n /** 下限判定 */\n readonly minVerdict: LimitVerdict;\n}\n\n/**\n * 参考目标力 Fref,N。\n *\n * Fref = 0.00097·v² + offset\n *\n * @param speedKmH 速度 v,km/h\n * @param system 供电制式,缺省 'ac'\n * @returns 参考目标力,N\n */\nexport function referenceTargetForceN(\n speedKmH: number,\n system: PowerSystem = 'ac',\n): number {\n if (!(speedKmH >= 0)) {\n throw new RangeError(`速度不能为负,收到 ${speedKmH} km/h`);\n }\n return REF_TARGET_COEFF * speedKmH * speedKmH + REF_TARGET_OFFSET_N[system];\n}\n\n/**\n * 统计极值:Fmax = Fm + 3σ,Fmin = Fm − 3σ。\n *\n * @returns 统计最大力与最小力,N\n */\nexport function statisticalForcesN(\n meanForceN: number,\n stdDevN: number,\n): { readonly maxN: number; readonly minN: number } {\n if (!(meanForceN > 0)) {\n throw new RangeError(`平均接触力必须为正数,收到 ${meanForceN} N`);\n }\n if (!(stdDevN >= 0)) {\n throw new RangeError(`标准差不能为负,收到 ${stdDevN} N`);\n }\n const threeSigma = 3 * stdDevN;\n return { maxN: meanForceN + threeSigma, minN: meanForceN - threeSigma };\n}\n\n/**\n * 弓网接触力统计评价(EN 50367 框架)。\n *\n * 上下限传 null 表示该侧不参与判定,对应判定结果为 'not-assessed'。\n */\nexport function assessContactForce(input: ContactForceInput): ContactForceResult {\n const { meanForceN, stdDevN, speedKmH, maxLimitN, minLimitN } = input;\n\n const { maxN, minN } = statisticalForcesN(meanForceN, stdDevN);\n\n const referenceTargetN = speedKmH === null ? null : referenceTargetForceN(speedKmH, input.system ?? 'ac');\n const meanDeviationN =\n referenceTargetN === null ? null : meanForceN - referenceTargetN;\n\n const maxVerdict: LimitVerdict =\n maxLimitN === null ? 'not-assessed' : maxN <= maxLimitN ? 'pass' : 'fail';\n const minVerdict: LimitVerdict =\n minLimitN === null ? 'not-assessed' : minN >= minLimitN ? 'pass' : 'fail';\n\n return {\n meanForceN,\n stdDevN,\n maxForceN: maxN,\n minForceN: minN,\n referenceTargetN,\n meanDeviationN,\n maxVerdict,\n minVerdict,\n };\n}\n"],"mappings":";AAEO,IAAM,YAA4B;AAAA,EACvC,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,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY;AAAA,EACZ,QAAQ;AACV;;;AClBO,IAAM,mBAAmB;AAGzB,IAAM,sBAAmD;AAAA,EAC9D,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,QAAQ;AACV;AA2CO,SAAS,sBACd,UACA,SAAsB,MACd;AACR,MAAI,EAAE,YAAY,IAAI;AACpB,UAAM,IAAI,WAAW,0DAAa,QAAQ,OAAO;AAAA,EACnD;AACA,SAAO,mBAAmB,WAAW,WAAW,oBAAoB,MAAM;AAC5E;AAOO,SAAS,mBACd,YACA,SACkD;AAClD,MAAI,EAAE,aAAa,IAAI;AACrB,UAAM,IAAI,WAAW,kFAAiB,UAAU,IAAI;AAAA,EACtD;AACA,MAAI,EAAE,WAAW,IAAI;AACnB,UAAM,IAAI,WAAW,gEAAc,OAAO,IAAI;AAAA,EAChD;AACA,QAAM,aAAa,IAAI;AACvB,SAAO,EAAE,MAAM,aAAa,YAAY,MAAM,aAAa,WAAW;AACxE;AAOO,SAAS,mBAAmB,OAA8C;AAC/E,QAAM,EAAE,YAAY,SAAS,UAAU,WAAW,UAAU,IAAI;AAEhE,QAAM,EAAE,MAAM,KAAK,IAAI,mBAAmB,YAAY,OAAO;AAE7D,QAAM,mBAAmB,aAAa,OAAO,OAAO,sBAAsB,UAAU,MAAM,UAAU,IAAI;AACxG,QAAM,iBACJ,qBAAqB,OAAO,OAAO,aAAa;AAElD,QAAM,aACJ,cAAc,OAAO,iBAAiB,QAAQ,YAAY,SAAS;AACrE,QAAM,aACJ,cAAc,OAAO,iBAAiB,QAAQ,YAAY,SAAS;AAErE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// src/common/resistance.ts
|
|
2
|
+
var COPPER_ALPHA_PER_DEG_C = 393e-5;
|
|
3
|
+
var IACS_RESISTIVITY_OHM_MM2_PER_M = 0.017241;
|
|
4
|
+
function resistanceAtTempOhmPerKm(r20OhmPerKm, tempDegC, alphaPerDegC = COPPER_ALPHA_PER_DEG_C) {
|
|
5
|
+
if (!(r20OhmPerKm > 0)) {
|
|
6
|
+
throw new RangeError(`20\u2103 \u5355\u4F4D\u7535\u963B\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${r20OhmPerKm} \u03A9/km`);
|
|
7
|
+
}
|
|
8
|
+
if (!(alphaPerDegC > 0)) {
|
|
9
|
+
throw new RangeError(`\u7535\u963B\u6E29\u5EA6\u7CFB\u6570\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${alphaPerDegC} /\u2103`);
|
|
10
|
+
}
|
|
11
|
+
return r20OhmPerKm * (1 + alphaPerDegC * (tempDegC - 20));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export {
|
|
15
|
+
COPPER_ALPHA_PER_DEG_C,
|
|
16
|
+
IACS_RESISTIVITY_OHM_MM2_PER_M,
|
|
17
|
+
resistanceAtTempOhmPerKm
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=chunk-YHDO6XVM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/resistance.ts"],"sourcesContent":["/**\n * 电阻温度修正 —— copper 与 voltage-drop 共用。\n *\n * ⚠️ 注意别与线膨胀系数混淆:\n * - 本文件的 α = 0.00393 /℃ 是**电阻**温度系数\n * - wire-specs 的 COPPER_ALLOY_ALPHA_PER_DEG_C = 1.7e-5 /℃ 是**热膨胀**系数\n * 两者相差两个数量级,混用会导致结果严重偏离。\n */\n\n/** 铜的电阻温度系数,1/℃ */\nexport const COPPER_ALPHA_PER_DEG_C = 0.00393;\n\n/** IACS 退火铜 20℃ 标准电阻率,Ω·mm²/m(= 1/58) */\nexport const IACS_RESISTIVITY_OHM_MM2_PER_M = 0.017241;\n\n/**\n * 单位电阻温度修正:r_T = r₂₀·[1 + α·(T − 20)]。\n *\n * @param r20OhmPerKm 20℃ 单位电阻,Ω/km\n * @param tempDegC 环境温度,℃\n * @param alphaPerDegC 电阻温度系数,1/℃。缺省铜 0.00393\n * @returns 该温度下的单位电阻,Ω/km\n */\nexport function resistanceAtTempOhmPerKm(\n r20OhmPerKm: number,\n tempDegC: number,\n alphaPerDegC: number = COPPER_ALPHA_PER_DEG_C,\n): number {\n if (!(r20OhmPerKm > 0)) {\n throw new RangeError(`20℃ 单位电阻必须为正数,收到 ${r20OhmPerKm} Ω/km`);\n }\n if (!(alphaPerDegC > 0)) {\n throw new RangeError(`电阻温度系数必须为正数,收到 ${alphaPerDegC} /℃`);\n }\n return r20OhmPerKm * (1 + alphaPerDegC * (tempDegC - 20));\n}\n"],"mappings":";AAUO,IAAM,yBAAyB;AAG/B,IAAM,iCAAiC;AAUvC,SAAS,yBACd,aACA,UACA,eAAuB,wBACf;AACR,MAAI,EAAE,cAAc,IAAI;AACtB,UAAM,IAAI,WAAW,qFAAoB,WAAW,YAAO;AAAA,EAC7D;AACA,MAAI,EAAE,eAAe,IAAI;AACvB,UAAM,IAAI,WAAW,wFAAkB,YAAY,UAAK;AAAA,EAC1D;AACA,SAAO,eAAe,IAAI,gBAAgB,WAAW;AACvD;","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _chunkMZBQ4546cjs = require('../chunk-MZBQ4546.cjs');
|
|
6
|
+
require('../chunk-DGO2DCO5.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
exports.TB2809_WIRE_PARAMS = _chunkMZBQ4546cjs.TB2809_WIRE_PARAMS; exports.copperMeta = _chunkMZBQ4546cjs.copperMeta; exports.wireLookup = _chunkMZBQ4546cjs.wireLookup;
|
|
12
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/copper/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B;AACE;AACA;AACA;AACF,wKAAC","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/copper/index.cjs"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { C as CalculatorMeta } from '../types-C2OanO8N.cjs';
|
|
2
|
+
|
|
3
|
+
declare const copperMeta: CalculatorMeta;
|
|
4
|
+
|
|
5
|
+
/** 站点计算器内置的 6 个型号 */
|
|
6
|
+
type CopperWireModel = 'CTHM-120' | 'CTHM-150' | 'CTHA-120' | 'CTHA-150' | 'CTHS-120' | 'CTHS-150';
|
|
7
|
+
interface WireParamEntry {
|
|
8
|
+
/** 单位重量,kg/km(标称值) */
|
|
9
|
+
readonly unitWeightKgPerKm: number;
|
|
10
|
+
/** 20℃ 直流电阻,Ω/km */
|
|
11
|
+
readonly r20OhmPerKm: number;
|
|
12
|
+
/** 150℃ 持续载流量,室内口径,A */
|
|
13
|
+
readonly ampacityIndoor150A: number;
|
|
14
|
+
/** 150℃ 持续载流量,室外口径,A */
|
|
15
|
+
readonly ampacityOutdoor150A: number;
|
|
16
|
+
/** 口径说明:本行实际对应标准中的哪一行 */
|
|
17
|
+
readonly note: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 接触线参数表,来源 TB/T 2809-2017。
|
|
21
|
+
*
|
|
22
|
+
* 载流量为 150℃ 持续值(室内/室外双口径,标准表5)。
|
|
23
|
+
*
|
|
24
|
+
* 已与站点 `/calculator/assets/calc-core.js` 中的 COPPER_TABLE 逐项比对,
|
|
25
|
+
* 6 个型号 × 4 项参数完全一致。
|
|
26
|
+
*
|
|
27
|
+
* 注:站点曾因显示层 `fmt()` 的尾零剥离正则把载流量渲染成 43/56(应为 430/560),
|
|
28
|
+
* 已于 R38 之后修复。若再遇渲染值与本表不符,先确认是否为显示层问题:
|
|
29
|
+
* 本表与服务端数据源始终一致。
|
|
30
|
+
*
|
|
31
|
+
* ⚠️ 注意型号口径:CTHM / CTHA / CTHS 是站点计算器的型号代码,与标准中的
|
|
32
|
+
* CTMH / CTA / CTS 并非同名对应。`note` 字段说明各行实际取自标准的哪一行,
|
|
33
|
+
* 交叉引用 TB/T 2809-2017 时请以 note 为准。
|
|
34
|
+
*/
|
|
35
|
+
declare const TB2809_WIRE_PARAMS: Record<CopperWireModel, WireParamEntry>;
|
|
36
|
+
interface CopperLookupInput {
|
|
37
|
+
readonly model: CopperWireModel;
|
|
38
|
+
/** 长度 l,km */
|
|
39
|
+
readonly lengthKm: number;
|
|
40
|
+
/** 环境温度 T,℃ */
|
|
41
|
+
readonly ambientTempDegC: number;
|
|
42
|
+
}
|
|
43
|
+
interface CopperLookupResult extends WireParamEntry {
|
|
44
|
+
readonly model: CopperWireModel;
|
|
45
|
+
/** 总重量 W = w₀ × l,kg */
|
|
46
|
+
readonly totalWeightKg: number;
|
|
47
|
+
/** 温度修正电阻 r_T,Ω/km */
|
|
48
|
+
readonly rTOhmPerKm: number;
|
|
49
|
+
/** 全长温度修正电阻,Ω */
|
|
50
|
+
readonly totalResistanceOhm: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 按型号、长度与环境温度给出接触线参数速查结果。
|
|
54
|
+
*/
|
|
55
|
+
declare function wireLookup(input: CopperLookupInput): CopperLookupResult;
|
|
56
|
+
|
|
57
|
+
export { type CopperLookupInput, type CopperLookupResult, type CopperWireModel, TB2809_WIRE_PARAMS, type WireParamEntry, copperMeta, wireLookup };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { C as CalculatorMeta } from '../types-C2OanO8N.js';
|
|
2
|
+
|
|
3
|
+
declare const copperMeta: CalculatorMeta;
|
|
4
|
+
|
|
5
|
+
/** 站点计算器内置的 6 个型号 */
|
|
6
|
+
type CopperWireModel = 'CTHM-120' | 'CTHM-150' | 'CTHA-120' | 'CTHA-150' | 'CTHS-120' | 'CTHS-150';
|
|
7
|
+
interface WireParamEntry {
|
|
8
|
+
/** 单位重量,kg/km(标称值) */
|
|
9
|
+
readonly unitWeightKgPerKm: number;
|
|
10
|
+
/** 20℃ 直流电阻,Ω/km */
|
|
11
|
+
readonly r20OhmPerKm: number;
|
|
12
|
+
/** 150℃ 持续载流量,室内口径,A */
|
|
13
|
+
readonly ampacityIndoor150A: number;
|
|
14
|
+
/** 150℃ 持续载流量,室外口径,A */
|
|
15
|
+
readonly ampacityOutdoor150A: number;
|
|
16
|
+
/** 口径说明:本行实际对应标准中的哪一行 */
|
|
17
|
+
readonly note: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 接触线参数表,来源 TB/T 2809-2017。
|
|
21
|
+
*
|
|
22
|
+
* 载流量为 150℃ 持续值(室内/室外双口径,标准表5)。
|
|
23
|
+
*
|
|
24
|
+
* 已与站点 `/calculator/assets/calc-core.js` 中的 COPPER_TABLE 逐项比对,
|
|
25
|
+
* 6 个型号 × 4 项参数完全一致。
|
|
26
|
+
*
|
|
27
|
+
* 注:站点曾因显示层 `fmt()` 的尾零剥离正则把载流量渲染成 43/56(应为 430/560),
|
|
28
|
+
* 已于 R38 之后修复。若再遇渲染值与本表不符,先确认是否为显示层问题:
|
|
29
|
+
* 本表与服务端数据源始终一致。
|
|
30
|
+
*
|
|
31
|
+
* ⚠️ 注意型号口径:CTHM / CTHA / CTHS 是站点计算器的型号代码,与标准中的
|
|
32
|
+
* CTMH / CTA / CTS 并非同名对应。`note` 字段说明各行实际取自标准的哪一行,
|
|
33
|
+
* 交叉引用 TB/T 2809-2017 时请以 note 为准。
|
|
34
|
+
*/
|
|
35
|
+
declare const TB2809_WIRE_PARAMS: Record<CopperWireModel, WireParamEntry>;
|
|
36
|
+
interface CopperLookupInput {
|
|
37
|
+
readonly model: CopperWireModel;
|
|
38
|
+
/** 长度 l,km */
|
|
39
|
+
readonly lengthKm: number;
|
|
40
|
+
/** 环境温度 T,℃ */
|
|
41
|
+
readonly ambientTempDegC: number;
|
|
42
|
+
}
|
|
43
|
+
interface CopperLookupResult extends WireParamEntry {
|
|
44
|
+
readonly model: CopperWireModel;
|
|
45
|
+
/** 总重量 W = w₀ × l,kg */
|
|
46
|
+
readonly totalWeightKg: number;
|
|
47
|
+
/** 温度修正电阻 r_T,Ω/km */
|
|
48
|
+
readonly rTOhmPerKm: number;
|
|
49
|
+
/** 全长温度修正电阻,Ω */
|
|
50
|
+
readonly totalResistanceOhm: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 按型号、长度与环境温度给出接触线参数速查结果。
|
|
54
|
+
*/
|
|
55
|
+
declare function wireLookup(input: CopperLookupInput): CopperLookupResult;
|
|
56
|
+
|
|
57
|
+
export { type CopperLookupInput, type CopperLookupResult, type CopperWireModel, TB2809_WIRE_PARAMS, type WireParamEntry, copperMeta, wireLookup };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
var _chunk4UU7WA7Ncjs = require('../chunk-4UU7WA7N.cjs');
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
exports.DEFAULT_PANTOGRAPH_HEIGHT_M = _chunk4UU7WA7Ncjs.DEFAULT_PANTOGRAPH_HEIGHT_M; exports.STANDARD_GAUGE_M = _chunk4UU7WA7Ncjs.STANDARD_GAUGE_M; exports.cantShiftM = _chunk4UU7WA7Ncjs.cantShiftM; exports.curveStaggerCheck = _chunk4UU7WA7Ncjs.curveStaggerCheck; exports.curveStaggerMeta = _chunk4UU7WA7Ncjs.curveStaggerMeta; exports.versineM = _chunk4UU7WA7Ncjs.versineM;
|
|
17
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/curve-stagger/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,qXAAC","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/curve-stagger/index.cjs"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { C as CalculatorMeta } from '../types-C2OanO8N.cjs';
|
|
2
|
+
|
|
3
|
+
declare const curveStaggerMeta: CalculatorMeta;
|
|
4
|
+
|
|
5
|
+
/** 标准轨距,m */
|
|
6
|
+
declare const STANDARD_GAUGE_M = 1.435;
|
|
7
|
+
/** 滑板面距轨面的常用值,m */
|
|
8
|
+
declare const DEFAULT_PANTOGRAPH_HEIGHT_M = 6;
|
|
9
|
+
interface CurveStaggerInput {
|
|
10
|
+
/** 曲线半径 R,m。直线段传 0 或 Infinity */
|
|
11
|
+
readonly curveRadiusM: number;
|
|
12
|
+
/** 跨距 l,m */
|
|
13
|
+
readonly spanM: number;
|
|
14
|
+
/** 定位点 1 拉出值 a₁,m(曲线内侧为正) */
|
|
15
|
+
readonly stagger1M: number;
|
|
16
|
+
/** 定位点 2 拉出值 a₂,m(曲线内侧为正) */
|
|
17
|
+
readonly stagger2M: number;
|
|
18
|
+
/** 风速 v,m/s */
|
|
19
|
+
readonly windSpeedMPerS: number;
|
|
20
|
+
/** 线索直径 d,m */
|
|
21
|
+
readonly wireDiameterM: number;
|
|
22
|
+
/** 风载体型系数 α */
|
|
23
|
+
readonly dragCoefficient: number;
|
|
24
|
+
/** 线索张力 T,N */
|
|
25
|
+
readonly tensionN: number;
|
|
26
|
+
/** 容许偏移 [e],m */
|
|
27
|
+
readonly allowableOffsetM: number;
|
|
28
|
+
/** 滑板面距轨面 H,m。缺省 6.0 */
|
|
29
|
+
readonly pantographHeightM?: number;
|
|
30
|
+
/** 外轨超高 h,m。缺省 0 */
|
|
31
|
+
readonly cantM?: number;
|
|
32
|
+
/** 轨距 l₀,m。缺省 1.435 */
|
|
33
|
+
readonly gaugeM?: number;
|
|
34
|
+
}
|
|
35
|
+
interface CurveStaggerResult {
|
|
36
|
+
/** 平均拉出值 ā,m */
|
|
37
|
+
readonly meanStaggerM: number;
|
|
38
|
+
/** 曲线矢度 c = l²/(8R),m。直线段为 0 */
|
|
39
|
+
readonly versineM: number;
|
|
40
|
+
/** 超高横移 δ = H·h/l₀,m */
|
|
41
|
+
readonly cantShiftM: number;
|
|
42
|
+
/** 跨中风偏 p_w,m */
|
|
43
|
+
readonly windOffsetM: number;
|
|
44
|
+
/** 矢度与拉出值同向时的偏移,m */
|
|
45
|
+
readonly offsetPlusM: number;
|
|
46
|
+
/** 矢度与拉出值反向时的偏移,m */
|
|
47
|
+
readonly offsetMinusM: number;
|
|
48
|
+
/** 取两者较大值,m */
|
|
49
|
+
readonly maxOffsetM: number;
|
|
50
|
+
/** 是否满足容许偏移 */
|
|
51
|
+
readonly passes: boolean;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 曲线矢度:c = l² / (8R),m。
|
|
55
|
+
* 直线段(R = 0 或 Infinity)返回 0。
|
|
56
|
+
*/
|
|
57
|
+
declare function versineM(spanM: number, curveRadiusM: number): number;
|
|
58
|
+
/**
|
|
59
|
+
* 超高横移:δ = H·h / l₀,m。
|
|
60
|
+
*
|
|
61
|
+
* @param cantM 外轨超高 h,m
|
|
62
|
+
* @param pantographHeightM 滑板面距轨面 H,m
|
|
63
|
+
* @param gaugeM 轨距 l₀,m
|
|
64
|
+
*/
|
|
65
|
+
declare function cantShiftM(cantM: number, pantographHeightM?: number, gaugeM?: number): number;
|
|
66
|
+
/**
|
|
67
|
+
* 曲线区段跨中综合偏移校核。
|
|
68
|
+
*
|
|
69
|
+
* 风偏取风向垂直线路的最不利工况(sin²θ = 1)。
|
|
70
|
+
*
|
|
71
|
+
* ⚠️ 与站点源码一致:超高横移 δ 会计算并返回,但**不参与** e 的合成。
|
|
72
|
+
* 站点 JSDoc 描述的公式为 `e = |ā ± c ∓ δ| + p_w`,与其实现不符;
|
|
73
|
+
* 若站点后续修正,本库的 offsetPlusM / offsetMinusM 需同步调整。
|
|
74
|
+
*/
|
|
75
|
+
declare function curveStaggerCheck(input: CurveStaggerInput): CurveStaggerResult;
|
|
76
|
+
|
|
77
|
+
export { type CurveStaggerInput, type CurveStaggerResult, DEFAULT_PANTOGRAPH_HEIGHT_M, STANDARD_GAUGE_M, cantShiftM, curveStaggerCheck, curveStaggerMeta, versineM };
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { C as CalculatorMeta } from '../types-C2OanO8N.js';
|
|
2
|
+
|
|
3
|
+
declare const curveStaggerMeta: CalculatorMeta;
|
|
4
|
+
|
|
5
|
+
/** 标准轨距,m */
|
|
6
|
+
declare const STANDARD_GAUGE_M = 1.435;
|
|
7
|
+
/** 滑板面距轨面的常用值,m */
|
|
8
|
+
declare const DEFAULT_PANTOGRAPH_HEIGHT_M = 6;
|
|
9
|
+
interface CurveStaggerInput {
|
|
10
|
+
/** 曲线半径 R,m。直线段传 0 或 Infinity */
|
|
11
|
+
readonly curveRadiusM: number;
|
|
12
|
+
/** 跨距 l,m */
|
|
13
|
+
readonly spanM: number;
|
|
14
|
+
/** 定位点 1 拉出值 a₁,m(曲线内侧为正) */
|
|
15
|
+
readonly stagger1M: number;
|
|
16
|
+
/** 定位点 2 拉出值 a₂,m(曲线内侧为正) */
|
|
17
|
+
readonly stagger2M: number;
|
|
18
|
+
/** 风速 v,m/s */
|
|
19
|
+
readonly windSpeedMPerS: number;
|
|
20
|
+
/** 线索直径 d,m */
|
|
21
|
+
readonly wireDiameterM: number;
|
|
22
|
+
/** 风载体型系数 α */
|
|
23
|
+
readonly dragCoefficient: number;
|
|
24
|
+
/** 线索张力 T,N */
|
|
25
|
+
readonly tensionN: number;
|
|
26
|
+
/** 容许偏移 [e],m */
|
|
27
|
+
readonly allowableOffsetM: number;
|
|
28
|
+
/** 滑板面距轨面 H,m。缺省 6.0 */
|
|
29
|
+
readonly pantographHeightM?: number;
|
|
30
|
+
/** 外轨超高 h,m。缺省 0 */
|
|
31
|
+
readonly cantM?: number;
|
|
32
|
+
/** 轨距 l₀,m。缺省 1.435 */
|
|
33
|
+
readonly gaugeM?: number;
|
|
34
|
+
}
|
|
35
|
+
interface CurveStaggerResult {
|
|
36
|
+
/** 平均拉出值 ā,m */
|
|
37
|
+
readonly meanStaggerM: number;
|
|
38
|
+
/** 曲线矢度 c = l²/(8R),m。直线段为 0 */
|
|
39
|
+
readonly versineM: number;
|
|
40
|
+
/** 超高横移 δ = H·h/l₀,m */
|
|
41
|
+
readonly cantShiftM: number;
|
|
42
|
+
/** 跨中风偏 p_w,m */
|
|
43
|
+
readonly windOffsetM: number;
|
|
44
|
+
/** 矢度与拉出值同向时的偏移,m */
|
|
45
|
+
readonly offsetPlusM: number;
|
|
46
|
+
/** 矢度与拉出值反向时的偏移,m */
|
|
47
|
+
readonly offsetMinusM: number;
|
|
48
|
+
/** 取两者较大值,m */
|
|
49
|
+
readonly maxOffsetM: number;
|
|
50
|
+
/** 是否满足容许偏移 */
|
|
51
|
+
readonly passes: boolean;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 曲线矢度:c = l² / (8R),m。
|
|
55
|
+
* 直线段(R = 0 或 Infinity)返回 0。
|
|
56
|
+
*/
|
|
57
|
+
declare function versineM(spanM: number, curveRadiusM: number): number;
|
|
58
|
+
/**
|
|
59
|
+
* 超高横移:δ = H·h / l₀,m。
|
|
60
|
+
*
|
|
61
|
+
* @param cantM 外轨超高 h,m
|
|
62
|
+
* @param pantographHeightM 滑板面距轨面 H,m
|
|
63
|
+
* @param gaugeM 轨距 l₀,m
|
|
64
|
+
*/
|
|
65
|
+
declare function cantShiftM(cantM: number, pantographHeightM?: number, gaugeM?: number): number;
|
|
66
|
+
/**
|
|
67
|
+
* 曲线区段跨中综合偏移校核。
|
|
68
|
+
*
|
|
69
|
+
* 风偏取风向垂直线路的最不利工况(sin²θ = 1)。
|
|
70
|
+
*
|
|
71
|
+
* ⚠️ 与站点源码一致:超高横移 δ 会计算并返回,但**不参与** e 的合成。
|
|
72
|
+
* 站点 JSDoc 描述的公式为 `e = |ā ± c ∓ δ| + p_w`,与其实现不符;
|
|
73
|
+
* 若站点后续修正,本库的 offsetPlusM / offsetMinusM 需同步调整。
|
|
74
|
+
*/
|
|
75
|
+
declare function curveStaggerCheck(input: CurveStaggerInput): CurveStaggerResult;
|
|
76
|
+
|
|
77
|
+
export { type CurveStaggerInput, type CurveStaggerResult, DEFAULT_PANTOGRAPH_HEIGHT_M, STANDARD_GAUGE_M, cantShiftM, curveStaggerCheck, curveStaggerMeta, versineM };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DEFAULT_PANTOGRAPH_HEIGHT_M,
|
|
3
|
+
STANDARD_GAUGE_M,
|
|
4
|
+
cantShiftM,
|
|
5
|
+
curveStaggerCheck,
|
|
6
|
+
curveStaggerMeta,
|
|
7
|
+
versineM
|
|
8
|
+
} from "../chunk-IFVYGNT3.js";
|
|
9
|
+
export {
|
|
10
|
+
DEFAULT_PANTOGRAPH_HEIGHT_M,
|
|
11
|
+
STANDARD_GAUGE_M,
|
|
12
|
+
cantShiftM,
|
|
13
|
+
curveStaggerCheck,
|
|
14
|
+
curveStaggerMeta,
|
|
15
|
+
versineM
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunkJ2UXRMTUcjs = require('../chunk-J2UXRMTU.cjs');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
exports.dropperLengths = _chunkJ2UXRMTUcjs.dropperLengths; exports.dropperMeta = _chunkJ2UXRMTUcjs.dropperMeta; exports.dropperPositionsM = _chunkJ2UXRMTUcjs.dropperPositionsM; exports.maxParabolaSagM = _chunkJ2UXRMTUcjs.maxParabolaSagM; exports.parabolaSagM = _chunkJ2UXRMTUcjs.parabolaSagM;
|
|
15
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/dropper/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACF,oSAAC","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/dropper/index.cjs"}
|