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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-JJR7ROMG.cjs","../src/anchor-length/meta.ts","../src/anchor-length/index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-JJR7ROMG.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 if (!(n >= 1)) throw new RangeError('定位器数量必须不小于 1,收到 ' + n);\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 if (!(wireWeightKNPerM > 0)) throw new RangeError('接触线单位重必须为正,收到 ' + wireWeightKNPerM + ' kN/m');\n if (!(expansionCoeff > 0)) throw new RangeError('线胀系数必须为正,收到 ' + expansionCoeff + ' 1/℃');\n if (!(tempDeltaC > 0)) throw new RangeError('计算温差必须为正,收到 ' + tempDeltaC + ' ℃');\n if (spanM >= halfSpanM) throw new RangeError('跨距必须小于半锚段长度,收到 l=' + spanM + ' m、L=' + halfSpanM + ' m');\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"]}
|
|
@@ -29,6 +29,7 @@ function anchorLengthCheck(input) {
|
|
|
29
29
|
if (!(curveRadiusM && curveRadiusM > 0)) throw new RangeError("\u66F2\u7EBF\u534A\u5F84\u5FC5\u987B\u4E3A\u6B63");
|
|
30
30
|
if (!(regulatorLengthM && regulatorLengthM > 0)) throw new RangeError("\u5B9A\u4F4D\u5668\u957F\u5EA6\u5FC5\u987B\u4E3A\u6B63");
|
|
31
31
|
const n = regulatorCount ?? 1;
|
|
32
|
+
if (!(n >= 1)) throw new RangeError("\u5B9A\u4F4D\u5668\u6570\u91CF\u5FC5\u987B\u4E0D\u5C0F\u4E8E 1\uFF0C\u6536\u5230 " + n);
|
|
32
33
|
const one = regulatorLengthM * ratedTensionKN * 1e3 / curveRadiusM;
|
|
33
34
|
deltaN = one * n;
|
|
34
35
|
} else {
|
|
@@ -39,6 +40,10 @@ function anchorLengthCheck(input) {
|
|
|
39
40
|
if (wireWeightKNPerM === void 0 || expansionCoeff === void 0 || tempDeltaC === void 0) {
|
|
40
41
|
throw new RangeError("\u76F4\u7EBF\u533A\u6BB5\u9700\u63D0\u4F9B g_j\u3001\u03B1\u3001\u0394t");
|
|
41
42
|
}
|
|
43
|
+
if (!(wireWeightKNPerM > 0)) throw new RangeError("\u63A5\u89E6\u7EBF\u5355\u4F4D\u91CD\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + wireWeightKNPerM + " kN/m");
|
|
44
|
+
if (!(expansionCoeff > 0)) throw new RangeError("\u7EBF\u80C0\u7CFB\u6570\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + expansionCoeff + " 1/\u2103");
|
|
45
|
+
if (!(tempDeltaC > 0)) throw new RangeError("\u8BA1\u7B97\u6E29\u5DEE\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + tempDeltaC + " \u2103");
|
|
46
|
+
if (spanM >= halfSpanM) throw new RangeError("\u8DE8\u8DDD\u5FC5\u987B\u5C0F\u4E8E\u534A\u951A\u6BB5\u957F\u5EA6\uFF0C\u6536\u5230 l=" + spanM + " m\u3001L=" + halfSpanM + " m");
|
|
42
47
|
deltaN = halfSpanM * (halfSpanM - spanM) * wireWeightKNPerM * expansionCoeff * tempDeltaC / (2 * dropperLengthM) * 1e3;
|
|
43
48
|
}
|
|
44
49
|
const limitN = TENSION_DIFF_RATIO * ratedTensionKN * 1e3;
|
|
@@ -50,4 +55,4 @@ export {
|
|
|
50
55
|
TENSION_DIFF_RATIO,
|
|
51
56
|
anchorLengthCheck
|
|
52
57
|
};
|
|
53
|
-
//# sourceMappingURL=chunk-
|
|
58
|
+
//# sourceMappingURL=chunk-L7JKLVQW.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/anchor-length/meta.ts","../src/anchor-length/index.ts"],"sourcesContent":["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"],"mappings":";AAEO,IAAM,mBAAmC;AAAA,EAC9C,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,8CAAqB,6CAAoB,wCAAoB,6BAAc;AAAA,EACnF,YAAY;AAAA,EACZ,QAAQ;AACV;;;AChBO,IAAM,qBAAqB;AAwC3B,SAAS,kBAAkB,OAA8C;AAC9E,QAAM,EAAE,SAAS,eAAe,IAAI;AACpC,MAAI,EAAE,iBAAiB,GAAI,OAAM,IAAI,WAAW,wEAAiB,iBAAiB,KAAK;AACvF,MAAI;AACJ,MAAI,YAAY,SAAS;AACvB,UAAM,EAAE,cAAc,kBAAkB,eAAe,IAAI;AAC3D,QAAI,EAAE,gBAAgB,eAAe,GAAI,OAAM,IAAI,WAAW,kDAAU;AACxE,QAAI,EAAE,oBAAoB,mBAAmB,GAAI,OAAM,IAAI,WAAW,wDAAW;AACjF,UAAM,IAAI,kBAAkB;AAC5B,UAAM,MAAO,mBAAmB,iBAAiB,MAAO;AACxD,aAAS,MAAM;AAAA,EACjB,OAAO;AACL,UAAM,EAAE,WAAW,OAAO,gBAAgB,kBAAkB,gBAAgB,WAAW,IAAI;AAC3F,QAAI,EAAE,aAAa,YAAY,GAAI,OAAM,IAAI,WAAW,wDAAW;AACnE,QAAI,EAAE,SAAS,QAAQ,GAAI,OAAM,IAAI,WAAW,sCAAQ;AACxD,QAAI,EAAE,kBAAkB,iBAAiB,GAAI,OAAM,IAAI,WAAW,kDAAU;AAC5E,QAAI,qBAAqB,UAAa,mBAAmB,UAAa,eAAe,QAAW;AAC9F,YAAM,IAAI,WAAW,yEAAkB;AAAA,IACzC;
|
|
1
|
+
{"version":3,"sources":["../src/anchor-length/meta.ts","../src/anchor-length/index.ts"],"sourcesContent":["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 if (!(n >= 1)) throw new RangeError('定位器数量必须不小于 1,收到 ' + n);\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 if (!(wireWeightKNPerM > 0)) throw new RangeError('接触线单位重必须为正,收到 ' + wireWeightKNPerM + ' kN/m');\n if (!(expansionCoeff > 0)) throw new RangeError('线胀系数必须为正,收到 ' + expansionCoeff + ' 1/℃');\n if (!(tempDeltaC > 0)) throw new RangeError('计算温差必须为正,收到 ' + tempDeltaC + ' ℃');\n if (spanM >= halfSpanM) throw new RangeError('跨距必须小于半锚段长度,收到 l=' + spanM + ' m、L=' + halfSpanM + ' m');\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"],"mappings":";AAEO,IAAM,mBAAmC;AAAA,EAC9C,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,8CAAqB,6CAAoB,wCAAoB,6BAAc;AAAA,EACnF,YAAY;AAAA,EACZ,QAAQ;AACV;;;AChBO,IAAM,qBAAqB;AAwC3B,SAAS,kBAAkB,OAA8C;AAC9E,QAAM,EAAE,SAAS,eAAe,IAAI;AACpC,MAAI,EAAE,iBAAiB,GAAI,OAAM,IAAI,WAAW,wEAAiB,iBAAiB,KAAK;AACvF,MAAI;AACJ,MAAI,YAAY,SAAS;AACvB,UAAM,EAAE,cAAc,kBAAkB,eAAe,IAAI;AAC3D,QAAI,EAAE,gBAAgB,eAAe,GAAI,OAAM,IAAI,WAAW,kDAAU;AACxE,QAAI,EAAE,oBAAoB,mBAAmB,GAAI,OAAM,IAAI,WAAW,wDAAW;AACjF,UAAM,IAAI,kBAAkB;AAC5B,QAAI,EAAE,KAAK,GAAI,OAAM,IAAI,WAAW,sFAAqB,CAAC;AAC1D,UAAM,MAAO,mBAAmB,iBAAiB,MAAO;AACxD,aAAS,MAAM;AAAA,EACjB,OAAO;AACL,UAAM,EAAE,WAAW,OAAO,gBAAgB,kBAAkB,gBAAgB,WAAW,IAAI;AAC3F,QAAI,EAAE,aAAa,YAAY,GAAI,OAAM,IAAI,WAAW,wDAAW;AACnE,QAAI,EAAE,SAAS,QAAQ,GAAI,OAAM,IAAI,WAAW,sCAAQ;AACxD,QAAI,EAAE,kBAAkB,iBAAiB,GAAI,OAAM,IAAI,WAAW,kDAAU;AAC5E,QAAI,qBAAqB,UAAa,mBAAmB,UAAa,eAAe,QAAW;AAC9F,YAAM,IAAI,WAAW,yEAAkB;AAAA,IACzC;AACA,QAAI,EAAE,mBAAmB,GAAI,OAAM,IAAI,WAAW,oFAAmB,mBAAmB,OAAO;AAC/F,QAAI,EAAE,iBAAiB,GAAI,OAAM,IAAI,WAAW,wEAAiB,iBAAiB,WAAM;AACxF,QAAI,EAAE,aAAa,GAAI,OAAM,IAAI,WAAW,wEAAiB,aAAa,SAAI;AAC9E,QAAI,SAAS,UAAW,OAAM,IAAI,WAAW,4FAAsB,QAAQ,eAAU,YAAY,IAAI;AAErG,aAAU,aAAa,YAAY,SAAS,mBAAmB,iBAAiB,cAAe,IAAI,kBAAkB;AAAA,EACvH;AACA,QAAM,SAAS,qBAAqB,iBAAiB;AACrD,SAAO,EAAE,QAAQ,QAAQ,OAAO,SAAS,QAAQ,QAAQ,UAAU,OAAO;AAC5E;","names":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
|
|
2
2
|
|
|
3
|
+
|
|
3
4
|
var _chunkDGO2DCO5cjs = require('./chunk-DGO2DCO5.cjs');
|
|
4
5
|
|
|
5
6
|
// src/voltage-drop/meta.ts
|
|
@@ -8,7 +9,8 @@ var voltageDropMeta = {
|
|
|
8
9
|
nameEn: "Voltage Drop Check",
|
|
9
10
|
summary: "\u6309\u6E29\u5EA6\u4FEE\u6B63\u540E\u7684\u5355\u4F4D\u7535\u963B\u8BA1\u7B97\u4F9B\u7535\u81C2\u7535\u538B\u635F\u5931 \u0394U \u4E0E\u672B\u7AEF\u7535\u538B\uFF0C\u7528\u4E8E\u4F9B\u7535\u81C2\u957F\u5EA6\u4E0E\u5BFC\u7EBF\u622A\u9762\u6821\u6838\u3002",
|
|
10
11
|
formula: [
|
|
11
|
-
"\u5355\u4F4D\u7535\u963B\u6E29\u5EA6\u4FEE\u6B63\uFF1Ar_T = r\u2082\u2080\xB7[1 + \u03B1\xB7(T \u2212 20)]\
|
|
12
|
+
"\u5355\u4F4D\u7535\u963B\u6E29\u5EA6\u4FEE\u6B63\uFF1Ar_T = r\u2082\u2080\xB7[1 + \u03B1\xB7(T \u2212 20)]\uFF0C\u03B1 \u987B\u4E0E r\u2082\u2080 \u5BF9\u5E94\u6750\u8D28\u914D\u5957",
|
|
13
|
+
"\u6E29\u4FEE\u6309\u5404\u6750\u8D28\u771F\u503C \u03B1\uFF08TB/T 2809-2026 6.10\uFF09\uFF1A\u94F6 0.00380 / \u9521 0.00320 / \u9541 0.00270 / \u94EC\u9506 0.00290\uFF1B\u7F3A\u7701\u7EAF\u94DC 0.00393 \u4F9B\u65E0\u578B\u53F7\u573A\u666F",
|
|
12
14
|
"\u5E76\u8054 n \u8DEF\u65F6\uFF1Ar_T / n",
|
|
13
15
|
"\u7535\u538B\u635F\u5931\uFF1A\u0394U = I \xB7 r_T \xB7 L\uFF08r_T \u5355\u4F4D \u03A9/km\uFF0CL \u5355\u4F4D km\uFF09",
|
|
14
16
|
"\u672B\u7AEF\u7535\u538B\uFF1AU_end = U\u2080 \u2212 \u0394U\uFF1B\u538B\u964D\u7387 = \u0394U / U\u2080"
|
|
@@ -47,7 +49,11 @@ function voltageDropCheck(input) {
|
|
|
47
49
|
throw new RangeError(`\u5E76\u8054\u5BFC\u7EBF\u6570\u5FC5\u987B\u4E3A\u6B63\u6574\u6570\uFF0C\u6536\u5230 ${parallelCount}`);
|
|
48
50
|
}
|
|
49
51
|
const minEndVoltageV = _nullishCoalesce(input.minEndVoltageV, () => ( DEFAULT_MIN_END_VOLTAGE_V));
|
|
50
|
-
const rT = _chunkDGO2DCO5cjs.resistanceAtTempOhmPerKm.call(void 0,
|
|
52
|
+
const rT = _chunkDGO2DCO5cjs.resistanceAtTempOhmPerKm.call(void 0,
|
|
53
|
+
r20OhmPerKm,
|
|
54
|
+
_nullishCoalesce(input.tempDegC, () => ( 25)),
|
|
55
|
+
_nullishCoalesce(input.alphaPerDegC, () => ( _chunkDGO2DCO5cjs.COPPER_ALPHA_PER_DEG_C))
|
|
56
|
+
) / parallelCount;
|
|
51
57
|
const voltageDropV = currentA * rT * feederLengthKm;
|
|
52
58
|
const endVoltageV = busVoltageV - voltageDropV;
|
|
53
59
|
return {
|
|
@@ -64,4 +70,4 @@ function voltageDropCheck(input) {
|
|
|
64
70
|
|
|
65
71
|
|
|
66
72
|
exports.voltageDropMeta = voltageDropMeta; exports.DEFAULT_MIN_END_VOLTAGE_V = DEFAULT_MIN_END_VOLTAGE_V; exports.voltageDropCheck = voltageDropCheck;
|
|
67
|
-
//# sourceMappingURL=chunk-
|
|
73
|
+
//# sourceMappingURL=chunk-NSVETJYA.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-NSVETJYA.cjs","../src/voltage-drop/meta.ts","../src/voltage-drop/index.ts"],"names":[],"mappings":"AAAA;AACE;AACA;AACF,wDAA6B;AAC7B;AACA;ACHO,IAAM,gBAAA,EAAkC;AAAA,EAC7C,IAAA,EAAM,gCAAA;AAAA,EACN,MAAA,EAAQ,oBAAA;AAAA,EACR,OAAA,EACE,iQAAA;AAAA,EACF,OAAA,EAAS;AAAA,IACP,wLAAA;AAAA,IACA,gPAAA;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;ADIA;AACA;AE9BO,IAAM,0BAAA,EAA4B,GAAA;AA4ClC,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;AAG7C,EAAA;AACE,IAAA;AACkB,qBAAA;AACI,qBAAA;AACpB,EAAA;AAC+B,EAAA;AACH,EAAA;AAE3B,EAAA;AACO,IAAA;AACZ,IAAA;AACA,IAAA;AAC4C,IAAA;AACrB,IAAA;AACzB,EAAA;AACF;AFjB+H;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-NSVETJYA.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)],α 须与 r₂₀ 对应材质配套',\n '温修按各材质真值 α(TB/T 2809-2026 6.10):银 0.00380 / 锡 0.00320 / 镁 0.00270 / 铬锆 0.00290;缺省纯铜 0.00393 供无型号场景',\n '并联 n 路时:r_T / n',\n '电压损失:ΔU = I · r_T · L(r_T 单位 Ω/km,L 单位 km)',\n '末端电压:U_end = U₀ − ΔU;压降率 = ΔU / U₀',\n ],\n references: [\n '依据本站 供电计算 / 电气设计 条目',\n '末端电压限值:25kV 体系常按 20kV 掌握;实际限值以设计文件与供电计算书为准',\n ],\n scope: [\n '母线电压 U₀:20000 ~ 30000 V',\n '持续电流 I:10 ~ 3000 A',\n '单位电阻 r₂₀:0.05 ~ 1 Ω/km',\n '供电臂等效长度 L:1 ~ 60 km',\n '环境温度:−40 ~ 80 ℃',\n '单回路集中负荷模型,未考虑负荷沿供电臂分布与再生制动',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/voltage-drop/',\n};\n","export { voltageDropMeta } from './meta';\n\n/** 25kV 体系常用的末端电压下限,V */\nexport const DEFAULT_MIN_END_VOLTAGE_V = 20000;\n\n// 电阻温度修正统一来自 src/common/resistance.ts(copper 与 voltage-drop 共用)\nimport { COPPER_ALPHA_PER_DEG_C, resistanceAtTempOhmPerKm } from '../common/resistance';\n\nexport interface VoltageDropInput {\n /** 变电所母线电压 U₀,V */\n readonly busVoltageV: number;\n /** 持续电流 I,A */\n readonly currentA: number;\n /** 20℃ 单位电阻 r₂₀,Ω/km */\n readonly r20OhmPerKm: number;\n /** 供电臂等效长度 L,km */\n readonly feederLengthKm: number;\n /** 环境温度 T,℃。缺省 25 */\n readonly tempDegC?: number;\n /** 并联导线数。缺省 1 */\n readonly parallelCount?: number;\n /** 末端最低允许电压,V。缺省 20000 */\n readonly minEndVoltageV?: number;\n /**\n * 电阻温度系数 α,1/℃(2026-09-19 实装,修复批 D)。\n * 须与 r₂₀ 对应材质配套(TB/T 2809-2026 6.10):银 0.00380 / 锡 0.00320 /\n * 镁 0.00270 / 铬锆 0.00290。缺省纯铜 0.00393(供无型号场景)。\n */\n readonly alphaPerDegC?: number;\n}\n\nexport interface VoltageDropResult {\n /** 温度修正(并含并联折减)后的单位电阻 r_T,Ω/km */\n readonly rTOhmPerKm: number;\n /** 电压损失 ΔU,V */\n readonly voltageDropV: number;\n /** 末端电压 U_end,V */\n readonly endVoltageV: number;\n /** 压降率,% */\n readonly dropPercent: number;\n /** 末端电压是否满足要求 */\n readonly passes: boolean;\n}\n\n/**\n * 电压降校核:ΔU = I·r_T·L(并联 n 路时 r_T/n),U_end = U₀ − ΔU。\n */\nexport function voltageDropCheck(input: VoltageDropInput): VoltageDropResult {\n const { busVoltageV, currentA, r20OhmPerKm, feederLengthKm } = input;\n\n if (!(busVoltageV > 0)) {\n throw new RangeError(`母线电压必须为正数,收到 ${busVoltageV} V`);\n }\n if (!(currentA > 0)) {\n throw new RangeError(`持续电流必须为正数,收到 ${currentA} A`);\n }\n if (!(feederLengthKm > 0)) {\n throw new RangeError(`供电臂长度必须为正数,收到 ${feederLengthKm} km`);\n }\n\n const parallelCount = input.parallelCount ?? 1;\n if (!(parallelCount > 0) || !Number.isInteger(parallelCount)) {\n throw new RangeError(`并联导线数必须为正整数,收到 ${parallelCount}`);\n }\n\n const minEndVoltageV = input.minEndVoltageV ?? DEFAULT_MIN_END_VOLTAGE_V;\n\n const rT =\n resistanceAtTempOhmPerKm(\n r20OhmPerKm,\n input.tempDegC ?? 25,\n input.alphaPerDegC ?? COPPER_ALPHA_PER_DEG_C,\n ) / parallelCount;\n const voltageDropV = currentA * rT * feederLengthKm;\n const endVoltageV = busVoltageV - voltageDropV;\n\n return {\n rTOhmPerKm: rT,\n voltageDropV,\n endVoltageV,\n dropPercent: (voltageDropV / busVoltageV) * 100,\n passes: endVoltageV >= minEndVoltageV,\n };\n}\n"]}
|
|
@@ -14,9 +14,10 @@ var strokeMeta = {
|
|
|
14
14
|
"\u8865\u507F\u88C5\u7F6E\u4EA7\u54C1\u8981\u6C42\u89C1 TB/T 2075.12-2024\uFF08\u6ED1\u8F6E\u8865\u507F\u88C5\u7F6E\uFF09\u3001TB/T 2075.13-2024\uFF08\u68D8\u8F6E\u8865\u507F\u88C5\u7F6E\uFF09\u4E0E TB/T 2073-2020\uFF08\u96F6\u90E8\u4EF6\u6280\u672F\u6761\u4EF6\uFF09"
|
|
15
15
|
],
|
|
16
16
|
scope: [
|
|
17
|
-
"\u951A\u6BB5\u957F\u5EA6 L \
|
|
17
|
+
"\u951A\u6BB5\u957F\u5EA6 L \u6309\u534A\u951A\u6BB5\u53D6\u503C\uFF08\u4E2D\u5FC3\u951A\u7ED3\u81F3\u8865\u507F\u5668\uFF09",
|
|
18
18
|
"\u8BBE\u8BA1\u6E29\u5DEE \u0394t \u4E3A\u6700\u9AD8\u4E0E\u6700\u4F4E\u8BBE\u8BA1\u6E29\u5EA6\u4E4B\u5DEE",
|
|
19
19
|
"\u94DC\u5408\u91D1\u7EBF\u81A8\u80C0\u7CFB\u6570\u7EA6 1.7\xD710\u207B\u2075/\u2103\uFF08EN 50149 \u94DC\u9521\u63A5\u89E6\u7EBF\u6570\u636E\u8868\uFF09",
|
|
20
|
+
"\u951A\u6BB5\u957F\u5EA6\u6309\u534A\u951A\u6BB5\u53E3\u5F84\u8F93\u5165\uFF08\u4E2D\u5FC3\u951A\u7ED3\u81F3\u8865\u507F\u5668\uFF09\uFF1A\u53CC\u8FB9\u8865\u507F\u65F6\u6BCF\u4FA7\u8865\u507F\u88C5\u7F6E\u4EC5\u670D\u52A1\u534A\u951A\u6BB5\uFF082026-09-19 \u53E3\u5F84\u66F4\u6B63\uFF09",
|
|
20
21
|
"\u5168\u8865\u507F\u951A\u6BB5\u627F\u529B\u7D22\u4FA7\u987B\u53E6\u884C\u8BA1\u7B97",
|
|
21
22
|
"\u53C2\u6570\u53D6\u503C\u4EE5\u8BBE\u8BA1\u89C4\u7A0B\u4E3A\u51C6"
|
|
22
23
|
],
|
|
@@ -98,4 +99,4 @@ function strokeCheck(input) {
|
|
|
98
99
|
|
|
99
100
|
|
|
100
101
|
exports.strokeMeta = strokeMeta; exports.TRANSMISSION_RATIOS = TRANSMISSION_RATIOS; exports.MIN_MARGIN_MM = MIN_MARGIN_MM; exports.CONVENTIONAL_MARGIN_MM = CONVENTIONAL_MARGIN_MM; exports.elongationMM = elongationMM; exports.requiredStrokeMM = requiredStrokeMM; exports.strokeCheck = strokeCheck;
|
|
101
|
-
//# sourceMappingURL=chunk-
|
|
102
|
+
//# sourceMappingURL=chunk-TXFBPGHR.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-TXFBPGHR.cjs","../src/stroke/meta.ts","../src/stroke/index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-TXFBPGHR.cjs","sourcesContent":[null,"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 '锚段长度按半锚段口径输入(中心锚结至补偿器):双边补偿时每侧补偿装置仅服务半锚段(2026-09-19 口径更正)',\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"]}
|
|
@@ -2,17 +2,18 @@
|
|
|
2
2
|
var curveStaggerMeta = {
|
|
3
3
|
name: "\u66F2\u7EBF\u62C9\u51FA\u503C\u6821\u6838",
|
|
4
4
|
nameEn: "Curve Stagger Clearance Check",
|
|
5
|
-
summary: "\u8BA1\u7B97\u66F2\u7EBF\u533A\u6BB5\u8DE8\u4E2D\u7EFC\u5408\u504F\u79FB\uFF08\u62C9\u51FA\u503C\u5747\u503C\u3001\u66F2\u7EBF\u77E2\u5EA6\u3001\u98CE\u504F\u7684\u7EC4\u5408\uFF09\uFF0C\u4E0E\u53D7\u7535\u5F13\u5BB9\u8BB8\u504F\u79FB\u6BD4\u8F83\u7ED9\u51FA\u5224\u5B9A\u3002",
|
|
5
|
+
summary: "\u8BA1\u7B97\u66F2\u7EBF\u533A\u6BB5\u8DE8\u4E2D\u7EFC\u5408\u504F\u79FB\uFF08\u62C9\u51FA\u503C\u5747\u503C\u3001\u66F2\u7EBF\u77E2\u5EA6\u3001\u8D85\u9AD8\u6A2A\u79FB\u3001\u98CE\u504F\u7684\u7EC4\u5408\uFF09\uFF0C\u4E0E\u53D7\u7535\u5F13\u5BB9\u8BB8\u504F\u79FB\u6BD4\u8F83\u7ED9\u51FA\u5224\u5B9A\u3002",
|
|
6
6
|
formula: [
|
|
7
7
|
"\u5E73\u5747\u62C9\u51FA\u503C\uFF1A\u0101 = (a\u2081 + a\u2082) / 2",
|
|
8
8
|
"\u66F2\u7EBF\u77E2\u5EA6\uFF1Ac = l\xB2 / (8R)\uFF08\u76F4\u7EBF\u6BB5 R = \u221E \u65F6 c = 0\uFF09",
|
|
9
9
|
"\u8D85\u9AD8\u6A2A\u79FB\uFF1A\u03B4 = H\xB7h / l\u2080",
|
|
10
10
|
"\u8DE8\u4E2D\u98CE\u504F\uFF1Ap_w = (\xBD\xB7\u03C1\xB7v\xB2\xB7d\xB7\u03B1) \xB7 l\xB2 / (8T)\uFF08\u53D6\u98CE\u5411\u5782\u76F4\u7EBF\u8DEF\u7684\u6700\u4E0D\u5229\u5DE5\u51B5\uFF09",
|
|
11
|
-
"\u7EFC\u5408\u504F\u79FB\uFF1Ae = max(|\u0101 + c|, |\u0101 \u2212 c|) + p_w \u2264 [e]"
|
|
11
|
+
"\u7EFC\u5408\u504F\u79FB\uFF08\u4E24\u98CE\u5411\u53D6\u5927\uFF09\uFF1Ae = max(|\u0101 + c \u2212 \u03B4|, |\u0101 \u2212 c + \u03B4|) + p_w \u2264 [e]"
|
|
12
12
|
],
|
|
13
13
|
references: [
|
|
14
14
|
"\u4F9D\u636E\u672C\u7AD9 \u62C9\u51FA\u503C\u8BBE\u8BA1 \u6761\u76EE",
|
|
15
15
|
"\u98CE\u504F\u53D6\u98CE\u5411\u5782\u76F4\u7EBF\u8DEF\u7684\u6700\u4E0D\u5229\u5DE5\u51B5\uFF08sin\xB2\u03B8 = 1\uFF09",
|
|
16
|
+
"\u8D85\u9AD8\u6A2A\u79FB \u03B4 \u4E8E 2026-09-19 \u7EB3\u5165\u7EFC\u5408\u504F\u79FB\u5408\u6210\uFF08\u4E0E\u7AD9\u70B9 calc-core.js \u540C\u6279\u66F4\u6B63\uFF1B\u65E7\u7248\u4EC5\u8BA1\u7B97\u8FD4\u56DE\u3001\u672A\u53C2\u4E0E e\uFF09",
|
|
16
17
|
"\u5BB9\u8BB8\u504F\u79FB [e] \u6309\u53D7\u7535\u5F13\u52A8\u6001\u5305\u7EDC\u7EBF\u53D6\u503C\uFF0C\u4EE5\u8BBE\u8BA1\u6587\u4EF6\u4E3A\u51C6"
|
|
17
18
|
],
|
|
18
19
|
scope: [
|
|
@@ -24,7 +25,7 @@ var curveStaggerMeta = {
|
|
|
24
25
|
"\u98CE\u8F7D\u4F53\u578B\u7CFB\u6570 \u03B1\uFF1A0.5 ~ 2",
|
|
25
26
|
"\u5F20\u529B T\uFF1A5 ~ 40 kN",
|
|
26
27
|
"\u6ED1\u677F\u9762\u8DDD\u8F68\u9762 H\uFF1A4 ~ 8 m\uFF1B\u5916\u8F68\u8D85\u9AD8 h\uFF1A0 ~ 0.25 m\uFF1B\u8F68\u8DDD l\u2080 \u9ED8\u8BA4 1.435 m",
|
|
27
|
-
"\
|
|
28
|
+
"\u03B4 \u7EB3\u5165\u5408\u6210\u540E\uFF0C\u5916\u8F68\u8D85\u9AD8 h \u76F4\u63A5\u5F71\u54CD\u5224\u5B9A\u7ED3\u679C\uFF08h \u589E\u5927 \u2192 e\u208B \u589E\u5927\uFF09"
|
|
28
29
|
],
|
|
29
30
|
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",
|
|
30
31
|
online: "https://www.itswe.com/calculator/curve-stagger/"
|
|
@@ -81,8 +82,8 @@ function curveStaggerCheck(input) {
|
|
|
81
82
|
const rhoAir = 1.225;
|
|
82
83
|
const windLoadNPerM = 0.5 * rhoAir * input.windSpeedMPerS * input.windSpeedMPerS * wireDiameterM * dragCoefficient;
|
|
83
84
|
const pw = windLoadNPerM * spanM * spanM / (8 * tensionN);
|
|
84
|
-
const offsetPlusM = Math.abs(meanStaggerM + c) + pw;
|
|
85
|
-
const offsetMinusM = Math.abs(meanStaggerM - c) + pw;
|
|
85
|
+
const offsetPlusM = Math.abs(meanStaggerM + c - delta) + pw;
|
|
86
|
+
const offsetMinusM = Math.abs(meanStaggerM - c + delta) + pw;
|
|
86
87
|
const maxOffsetM = Math.max(offsetPlusM, offsetMinusM);
|
|
87
88
|
return {
|
|
88
89
|
meanStaggerM,
|
|
@@ -104,4 +105,4 @@ function curveStaggerCheck(input) {
|
|
|
104
105
|
|
|
105
106
|
|
|
106
107
|
exports.curveStaggerMeta = curveStaggerMeta; exports.STANDARD_GAUGE_M = STANDARD_GAUGE_M; exports.DEFAULT_PANTOGRAPH_HEIGHT_M = DEFAULT_PANTOGRAPH_HEIGHT_M; exports.versineM = versineM; exports.cantShiftM = cantShiftM; exports.curveStaggerCheck = curveStaggerCheck;
|
|
107
|
-
//# sourceMappingURL=chunk-
|
|
108
|
+
//# sourceMappingURL=chunk-VPW4T6YN.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-VPW4T6YN.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-VPW4T6YN.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 '超高横移 δ 于 2026-09-19 纳入综合偏移合成(与站点 calc-core.js 同批更正;旧版仅计算返回、未参与 e)',\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 'δ 纳入合成后,外轨超高 h 直接影响判定结果(h 增大 → 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 /** 矢度与拉出值同向、超高横移反向的偏移 |ā + c − δ| + p_w,m */\n readonly offsetPlusM: number;\n /** 矢度与拉出值反向、超高横移同向的偏移 |ā − c + δ| + p_w,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 * 2026-09-19 更正(修复批 D):超高横移 δ 纳入综合偏移合成——\n * e₊ = |ā + c − δ| + p_w(矢度与拉出值同向、超高横移反向)\n * e₋ = |ā − c + δ| + p_w\n * 与站点 calc-core.js curveStaggerCheck 同批修正(旧注释「δ 不参与合成」已删除)。\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 // 2026-09-19 更正:δ 纳入合成,两风向取大\n const offsetPlusM = Math.abs(meanStaggerM + c - delta) + pw;\n const offsetMinusM = Math.abs(meanStaggerM - c + delta) + 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"]}
|
|
@@ -4,22 +4,23 @@ var dropperMeta = {
|
|
|
4
4
|
nameEn: "Dropper Length Calculator",
|
|
5
5
|
summary: "\u6309\u629B\u7269\u7EBF\u5F1B\u5EA6\u516C\u5F0F\u8BA1\u7B97\u94FE\u5F62\u60AC\u6302\u5404\u540A\u5F26\u957F\u5EA6\uFF0C\u652F\u6301\u7B80\u5355\u94FE\u5F62\u4E0E\u5F39\u6027\u94FE\u5F62\u4E24\u79CD\u60AC\u6302\u7C7B\u578B\u3002",
|
|
6
6
|
formula: [
|
|
7
|
-
"\
|
|
8
|
-
"\
|
|
9
|
-
"\u7B80\u5355\u94FE\u5F62\uFF1Al_i = H \u2212
|
|
10
|
-
"\u5F39\u6027\u94FE\u5F62\uFF08\u8BA1\u5165\
|
|
11
|
-
"\u8DE8\u4E2D\u6700\u5927\u5F1B\u5EA6\uFF1Af_max = q_c\xB7L\xB2 / (8\xB7T_c)"
|
|
7
|
+
"\u627F\u529B\u7D22\u5F1B\u5EA6\uFF08\u629B\u7269\u7EBF\u8FD1\u4F3C\uFF0C\u603B\u8377\u8F7D\u53E3\u5F84\uFF09\uFF1Af_m(x) = 4\xB7f_m_max\xB7x\xB7(L\u2212x) / L\xB2\uFF0Cf_m_max = w\xB7L\xB2 / (8\xB7T_m)\uFF0Cw = q_c + q_m",
|
|
8
|
+
"\u63A5\u89E6\u7EBF\u5F1B\u5EA6\uFF08\u5F39\u6027\u94FE\u5F62\uFF09\uFF1Af_c(x) = 4\xB7f_c_max\xB7x\xB7(L\u2212x) / L\xB2\uFF0Cf_c_max = q_c\xB7L\xB2 / (8\xB7T_c)",
|
|
9
|
+
"\u7B80\u5355\u94FE\u5F62\uFF1Al_i = H \u2212 f_m(x_i)",
|
|
10
|
+
"\u5F39\u6027\u94FE\u5F62\uFF08\u8BA1\u5165\u63A5\u89E6\u7EBF\u5F1B\u5EA6\uFF09\uFF1Al_i = H \u2212 f_m(x_i) + f_c(x_i)"
|
|
12
11
|
],
|
|
13
12
|
references: [
|
|
14
13
|
"\u629B\u7269\u7EBF\u8FD1\u4F3C\uFF0C\u9002\u7528\u4E8E f/L \u2264 1/10 \u7684\u5C0F\u5F1B\u5EA6\u5DE5\u51B5",
|
|
15
|
-
"\u540A\u5F26\
|
|
16
|
-
"\
|
|
14
|
+
"\u627F\u529B\u7D22\u4E0B\u5782\u4F7F\u540A\u5F26\u53D8\u77ED\u3001\u63A5\u89E6\u7EBF\uFF08\u76F8\u5BF9\u6C34\u5E73\uFF09\u4E0B\u5782\u4F7F\u540A\u5F26\u53D8\u957F\uFF0C\u6545 l = C \u2212 f_m + f_c\uFF082026-09-19 \u53E3\u5F84\u66F4\u6B63\uFF0C\u65E7\u7248\u5C06\u4E24\u7EBF\u5F1B\u5EA6\u89D2\u8272\u5199\u53CD\uFF09",
|
|
15
|
+
"w = q_c + q_m \u4E3A\u627F\u529B\u7D22\u627F\u62C5\u7684\u603B\u5355\u4F4D\u8377\u8F7D\uFF08\u542B\u7ECF\u540A\u5F26\u4F20\u9012\u7684\u63A5\u89E6\u7EBF\u8377\u8F7D\uFF09\uFF0Cq_c \u540C\u65F6\u8FDB\u5165\u603B\u8377\u8F7D\u4E0E\u63A5\u89E6\u7EBF\u5F1B\u5EA6\u4E24\u9879",
|
|
16
|
+
"\u540A\u5F26\u95F4\u8DDD\u987B\u80FD\u6574\u9664\u8DE8\u8DDD\uFF1B\u5B9E\u9645\u540A\u5F26\u5E03\u7F6E\u4EE5\u8BBE\u8BA1\u6587\u4EF6\u4E3A\u51C6"
|
|
17
17
|
],
|
|
18
18
|
scope: [
|
|
19
19
|
"\u8DE8\u8DDD L\uFF1A5 ~ 80 m",
|
|
20
|
-
"\u63A5\u89E6\u7EBF\u5F20\u529B T_c\uFF1A1 ~ 40 kN",
|
|
20
|
+
"\u63A5\u89E6\u7EBF\u5F20\u529B T_c\uFF1A1 ~ 40 kN\uFF08\u5F39\u6027\u94FE\u5F62\u7528\uFF09",
|
|
21
|
+
"\u627F\u529B\u7D22\u5F20\u529B T_m\uFF1A1 ~ 40 kN\uFF08\u4E24\u79CD\u60AC\u6302\u7C7B\u578B\u5747\u9700\u8981\uFF09",
|
|
21
22
|
"\u7ED3\u6784\u9AD8\u5EA6 H\uFF1A0.3 ~ 3 m",
|
|
22
|
-
"\u63A5\u89E6\u7EBF\u5355\u4F4D\u8377\u8F7D q_c\uFF1A0.001 ~ 0.1 kN/m",
|
|
23
|
+
"\u63A5\u89E6\u7EBF\u5355\u4F4D\u8377\u8F7D q_c\u3001\u627F\u529B\u7D22\u5355\u4F4D\u8377\u8F7D q_m\uFF1A0.001 ~ 0.1 kN/m",
|
|
23
24
|
"\u540A\u5F26\u95F4\u8DDD d\uFF1A1 ~ 15 m\uFF0C\u987B\u80FD\u6574\u9664\u8DE8\u8DDD",
|
|
24
25
|
"\u629B\u7269\u7EBF\u8FD1\u4F3C\uFF0C\u5927\u5F1B\u5EA6\u5DE5\u51B5\u8BEF\u5DEE\u589E\u5927",
|
|
25
26
|
"\u672A\u8BA1\u5165\u540A\u5F26\u81EA\u8EAB\u4F38\u957F\u3001\u6E29\u5EA6\u53D8\u5316\u4E0E\u96F6\u90E8\u4EF6\u5236\u9020\u516C\u5DEE"
|
|
@@ -75,26 +76,23 @@ function dropperLengths(input) {
|
|
|
75
76
|
if (!(structureHeightM > 0)) {
|
|
76
77
|
throw new RangeError(`\u7ED3\u6784\u9AD8\u5EA6\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${structureHeightM} m`);
|
|
77
78
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
throw new RangeError("\u627F\u529B\u7D22\u5F20\u529B\u4E0E\u5355\u4F4D\u8377\u8F7D\u5FC5\u987B\u4E3A\u6B63\u6570");
|
|
85
|
-
}
|
|
79
|
+
const messenger = input.messenger;
|
|
80
|
+
if (!messenger) {
|
|
81
|
+
throw new RangeError("\u5FC5\u987B\u63D0\u4F9B\u627F\u529B\u7D22\u53C2\u6570\uFF08messenger\uFF09\u2014\u2014\u627F\u529B\u7D22\u5F1B\u5EA6\u6309\u603B\u8377\u8F7D w = q_c + q_m \u8BA1\u7B97\uFF0C\u4E24\u79CD\u60AC\u6302\u7C7B\u578B\u5747\u9700\u8981");
|
|
82
|
+
}
|
|
83
|
+
if (!(messenger.tensionKN > 0) || !(messenger.loadKNPerM > 0)) {
|
|
84
|
+
throw new RangeError("\u627F\u529B\u7D22\u5F20\u529B\u4E0E\u5355\u4F4D\u8377\u8F7D\u5FC5\u987B\u4E3A\u6B63\u6570");
|
|
86
85
|
}
|
|
87
86
|
const positions = dropperPositionsM(spanM, spacingM);
|
|
88
|
-
const messenger = suspension === "elastic" ? input.messenger : null;
|
|
89
87
|
const points = positions.map((xM, index) => {
|
|
90
|
-
const
|
|
88
|
+
const messengerSag = parabolaSagM(
|
|
91
89
|
xM,
|
|
92
90
|
spanM,
|
|
93
|
-
contactLoadKNPerM,
|
|
94
|
-
|
|
91
|
+
contactLoadKNPerM + messenger.loadKNPerM,
|
|
92
|
+
messenger.tensionKN
|
|
95
93
|
);
|
|
96
|
-
const
|
|
97
|
-
const dropperLengthM = structureHeightM -
|
|
94
|
+
const contactSag = suspension === "elastic" ? parabolaSagM(xM, spanM, contactLoadKNPerM, contactTensionKN) : 0;
|
|
95
|
+
const dropperLengthM = structureHeightM - messengerSag + contactSag;
|
|
98
96
|
if (dropperLengthM <= 0) {
|
|
99
97
|
throw new RangeError(
|
|
100
98
|
`x = ${xM} m \u5904\u540A\u5F26\u957F\u5EA6\u975E\u6B63\uFF08${dropperLengthM.toFixed(4)} m\uFF09\uFF1A\u7ED3\u6784\u9AD8\u5EA6 ${structureHeightM} m \u4E0D\u8DB3\uFF0C\u8BF7\u590D\u6838\u8F93\u5165`
|
|
@@ -105,7 +103,8 @@ function dropperLengths(input) {
|
|
|
105
103
|
let maxSagM = 0;
|
|
106
104
|
let shortestDropperM = Number.POSITIVE_INFINITY;
|
|
107
105
|
for (const p of points) {
|
|
108
|
-
|
|
106
|
+
const effectiveSag = p.messengerSagM - p.contactSagM;
|
|
107
|
+
if (effectiveSag > maxSagM) maxSagM = effectiveSag;
|
|
109
108
|
if (p.dropperLengthM < shortestDropperM) shortestDropperM = p.dropperLengthM;
|
|
110
109
|
}
|
|
111
110
|
return {
|
|
@@ -123,4 +122,4 @@ export {
|
|
|
123
122
|
dropperPositionsM,
|
|
124
123
|
dropperLengths
|
|
125
124
|
};
|
|
126
|
-
//# sourceMappingURL=chunk-
|
|
125
|
+
//# sourceMappingURL=chunk-XQBTMD7W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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_m(x) = 4·f_m_max·x·(L−x) / L²,f_m_max = w·L² / (8·T_m),w = q_c + q_m',\n '接触线弛度(弹性链形):f_c(x) = 4·f_c_max·x·(L−x) / L²,f_c_max = q_c·L² / (8·T_c)',\n '简单链形:l_i = H − f_m(x_i)',\n '弹性链形(计入接触线弛度):l_i = H − f_m(x_i) + f_c(x_i)',\n ],\n references: [\n '抛物线近似,适用于 f/L ≤ 1/10 的小弛度工况',\n '承力索下垂使吊弦变短、接触线(相对水平)下垂使吊弦变长,故 l = C − f_m + f_c(2026-09-19 口径更正,旧版将两线弛度角色写反)',\n 'w = q_c + q_m 为承力索承担的总单位荷载(含经吊弦传递的接触线荷载),q_c 同时进入总荷载与接触线弛度两项',\n '吊弦间距须能整除跨距;实际吊弦布置以设计文件为准',\n ],\n scope: [\n '跨距 L:5 ~ 80 m',\n '接触线张力 T_c:1 ~ 40 kN(弹性链形用)',\n '承力索张力 T_m:1 ~ 40 kN(两种悬挂类型均需要)',\n '结构高度 H:0.3 ~ 3 m',\n '接触线单位荷载 q_c、承力索单位荷载 q_m:0.001 ~ 0.1 kN/m',\n '吊弦间距 d:1 ~ 15 m,须能整除跨距',\n '抛物线近似,大弛度工况误差增大',\n '未计入吊弦自身伸长、温度变化与零部件制造公差',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/dropper/',\n};\n","export { dropperMeta } from './meta';\n\n/** 悬挂类型 */\nexport type SuspensionType = 'simple' | 'elastic';\n\nexport interface DropperInput {\n /** 悬挂类型 */\n readonly suspension: SuspensionType;\n /** 跨距 L,m */\n readonly spanM: number;\n /** 接触线张力 T_c,kN(弹性链形计算接触线弛度 f_c 用;简单链形不参与计算但保留正值校验) */\n readonly contactTensionKN: number;\n /** 结构高度 H,m */\n readonly structureHeightM: number;\n /** 接触线单位荷载 q_c,kN/m */\n readonly contactLoadKNPerM: number;\n /** 吊弦间距 d,m,须能整除跨距 */\n readonly dropperSpacingM: number;\n /**\n * 承力索参数,两种悬挂类型均必填(2026-09-19 口径更正):\n * 承力索弛度按总单位荷载 w = q_c + q_m(含经吊弦传递的接触线荷载)\n * 与承力索张力 T_m 计算,简单链形同样需要。\n */\n readonly messenger: {\n /** 承力索张力 T_m,kN */\n readonly tensionKN: number;\n /** 承力索单位荷载 q_m,kN/m */\n readonly loadKNPerM: number;\n };\n}\n\n/** 单个吊弦点的计算结果 */\nexport interface DropperPoint {\n /** 序号 i(0 为起始端) */\n readonly index: number;\n /** 距起始端的距离 x,m */\n readonly positionM: number;\n /** 接触线弛度 f_c(x),m(简单链形恒为 0;使吊弦变长) */\n readonly contactSagM: number;\n /** 承力索弛度 f_m(x),m(按总荷载 w = q_c + q_m 口径;使吊弦变短) */\n readonly messengerSagM: number;\n /** 吊弦长度 l,m */\n readonly dropperLengthM: number;\n}\n\nexport interface DropperResult {\n readonly points: readonly DropperPoint[];\n /** 跨中最大有效弛度 f_m − f_c,m */\n readonly maxSagM: number;\n /** 最短吊弦长度,m(位于跨中) */\n readonly shortestDropperM: number;\n /** 吊弦数量(含两端) */\n readonly count: number;\n}\n\n/**\n * 抛物线弛度:f(x) = q·x·(L−x) / (2·T) = 4·f_max·x·(L−x) / L²。\n *\n * 对接触线和承力索通用,区别只在传哪一组 q / T。\n *\n * @param xM 距起始端距离,m\n * @param spanM 跨距 L,m\n * @param loadKNPerM 单位荷载 q,kN/m\n * @param tensionKN 张力 T,kN\n * @returns 该点弛度,m\n */\nexport function parabolaSagM(\n xM: number,\n spanM: number,\n loadKNPerM: number,\n tensionKN: number,\n): number {\n if (!(tensionKN > 0)) {\n throw new RangeError(`张力必须为正数,收到 ${tensionKN} kN`);\n }\n if (xM < 0 || xM > spanM) {\n throw new RangeError(`位置 x = ${xM} m 超出跨距 0 ~ ${spanM} m`);\n }\n return (loadKNPerM * xM * (spanM - xM)) / (2 * tensionKN);\n}\n\n/**\n * 跨中最大弛度:f_max = q·L² / (8·T)\n */\nexport function maxParabolaSagM(\n spanM: number,\n loadKNPerM: number,\n tensionKN: number,\n): number {\n return (loadKNPerM * spanM * spanM) / (8 * tensionKN);\n}\n\n/**\n * 生成吊弦点位(含两端)。\n * @param spanM 跨距 L,m\n * @param spacingM 吊弦间距 d,m,须能整除跨距\n * @returns 各点位距起始端的距离,m\n */\nexport function dropperPositionsM(spanM: number, spacingM: number): number[] {\n if (!(spanM > 0)) {\n throw new RangeError(`跨距必须为正数,收到 ${spanM} m`);\n }\n if (!(spacingM > 0)) {\n throw new RangeError(`吊弦间距必须为正数,收到 ${spacingM} m`);\n }\n const intervals = spanM / spacingM;\n const rounded = Math.round(intervals);\n if (Math.abs(intervals - rounded) > 1e-9 || rounded < 1) {\n throw new RangeError(\n `吊弦间距 ${spacingM} m 不能整除跨距 ${spanM} m(得到 ${intervals} 段)`,\n );\n }\n return Array.from({ length: rounded + 1 }, (_, i) => i * spacingM);\n}\n\n/**\n * 计算整跨各吊弦长度(2026-09-19 口径更正)。\n *\n * 承力索下垂使吊弦变短、接触线(相对水平)下垂使吊弦变长:\n *\n * - 承力索弛度(总荷载口径):f_m(x) = 4·f_m_max·x(L−x)/L²,\n * f_m_max = w·L²/(8·T_m),w = q_c + q_m(承力索承担的总单位荷载)\n * - 接触线弛度(弹性链形):f_c(x) = 4·f_c_max·x(L−x)/L²,\n * f_c_max = q_c·L²/(8·T_c)\n *\n * 简单链形:l_i = H − f_m(x_i)\n * 弹性链形:l_i = H − f_m(x_i) + f_c(x_i)\n */\nexport function dropperLengths(input: DropperInput): DropperResult {\n const {\n suspension,\n spanM,\n contactTensionKN,\n structureHeightM,\n contactLoadKNPerM,\n dropperSpacingM: spacingM,\n } = input;\n\n if (!(contactTensionKN > 0)) {\n throw new RangeError(`接触线张力必须为正数,收到 ${contactTensionKN} kN`);\n }\n if (!(contactLoadKNPerM > 0)) {\n throw new RangeError(`接触线单位荷载必须为正数,收到 ${contactLoadKNPerM} kN/m`);\n }\n if (!(structureHeightM > 0)) {\n throw new RangeError(`结构高度必须为正数,收到 ${structureHeightM} m`);\n }\n\n const messenger = input.messenger;\n if (!messenger) {\n throw new RangeError('必须提供承力索参数(messenger)——承力索弛度按总荷载 w = q_c + q_m 计算,两种悬挂类型均需要');\n }\n if (!(messenger.tensionKN > 0) || !(messenger.loadKNPerM > 0)) {\n throw new RangeError('承力索张力与单位荷载必须为正数');\n }\n\n const positions = dropperPositionsM(spanM, spacingM);\n\n const points: DropperPoint[] = positions.map((xM, index) => {\n // 承力索弛度:总荷载口径 w = q_c + q_m(含经吊弦传给承力索的接触线荷载)\n const messengerSag = parabolaSagM(\n xM,\n spanM,\n contactLoadKNPerM + messenger.loadKNPerM,\n messenger.tensionKN,\n );\n // 接触线弛度:仅弹性链形计入(相对水平的下垂使吊弦变长)\n const contactSag =\n suspension === 'elastic'\n ? parabolaSagM(xM, spanM, contactLoadKNPerM, contactTensionKN)\n : 0;\n\n const dropperLengthM = structureHeightM - messengerSag + contactSag;\n if (dropperLengthM <= 0) {\n throw new RangeError(\n `x = ${xM} m 处吊弦长度非正(${dropperLengthM.toFixed(4)} m):` +\n `结构高度 ${structureHeightM} m 不足,请复核输入`,\n );\n }\n\n return { index, positionM: xM, contactSagM: contactSag, messengerSagM: messengerSag, dropperLengthM };\n });\n\n let maxSagM = 0;\n let shortestDropperM = Number.POSITIVE_INFINITY;\n for (const p of points) {\n const effectiveSag = p.messengerSagM - p.contactSagM;\n if (effectiveSag > maxSagM) maxSagM = effectiveSag;\n if (p.dropperLengthM < shortestDropperM) shortestDropperM = p.dropperLengthM;\n }\n\n return {\n points,\n maxSagM,\n shortestDropperM,\n count: points.length,\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -2,17 +2,18 @@
|
|
|
2
2
|
var curveStaggerMeta = {
|
|
3
3
|
name: "\u66F2\u7EBF\u62C9\u51FA\u503C\u6821\u6838",
|
|
4
4
|
nameEn: "Curve Stagger Clearance Check",
|
|
5
|
-
summary: "\u8BA1\u7B97\u66F2\u7EBF\u533A\u6BB5\u8DE8\u4E2D\u7EFC\u5408\u504F\u79FB\uFF08\u62C9\u51FA\u503C\u5747\u503C\u3001\u66F2\u7EBF\u77E2\u5EA6\u3001\u98CE\u504F\u7684\u7EC4\u5408\uFF09\uFF0C\u4E0E\u53D7\u7535\u5F13\u5BB9\u8BB8\u504F\u79FB\u6BD4\u8F83\u7ED9\u51FA\u5224\u5B9A\u3002",
|
|
5
|
+
summary: "\u8BA1\u7B97\u66F2\u7EBF\u533A\u6BB5\u8DE8\u4E2D\u7EFC\u5408\u504F\u79FB\uFF08\u62C9\u51FA\u503C\u5747\u503C\u3001\u66F2\u7EBF\u77E2\u5EA6\u3001\u8D85\u9AD8\u6A2A\u79FB\u3001\u98CE\u504F\u7684\u7EC4\u5408\uFF09\uFF0C\u4E0E\u53D7\u7535\u5F13\u5BB9\u8BB8\u504F\u79FB\u6BD4\u8F83\u7ED9\u51FA\u5224\u5B9A\u3002",
|
|
6
6
|
formula: [
|
|
7
7
|
"\u5E73\u5747\u62C9\u51FA\u503C\uFF1A\u0101 = (a\u2081 + a\u2082) / 2",
|
|
8
8
|
"\u66F2\u7EBF\u77E2\u5EA6\uFF1Ac = l\xB2 / (8R)\uFF08\u76F4\u7EBF\u6BB5 R = \u221E \u65F6 c = 0\uFF09",
|
|
9
9
|
"\u8D85\u9AD8\u6A2A\u79FB\uFF1A\u03B4 = H\xB7h / l\u2080",
|
|
10
10
|
"\u8DE8\u4E2D\u98CE\u504F\uFF1Ap_w = (\xBD\xB7\u03C1\xB7v\xB2\xB7d\xB7\u03B1) \xB7 l\xB2 / (8T)\uFF08\u53D6\u98CE\u5411\u5782\u76F4\u7EBF\u8DEF\u7684\u6700\u4E0D\u5229\u5DE5\u51B5\uFF09",
|
|
11
|
-
"\u7EFC\u5408\u504F\u79FB\uFF1Ae = max(|\u0101 + c|, |\u0101 \u2212 c|) + p_w \u2264 [e]"
|
|
11
|
+
"\u7EFC\u5408\u504F\u79FB\uFF08\u4E24\u98CE\u5411\u53D6\u5927\uFF09\uFF1Ae = max(|\u0101 + c \u2212 \u03B4|, |\u0101 \u2212 c + \u03B4|) + p_w \u2264 [e]"
|
|
12
12
|
],
|
|
13
13
|
references: [
|
|
14
14
|
"\u4F9D\u636E\u672C\u7AD9 \u62C9\u51FA\u503C\u8BBE\u8BA1 \u6761\u76EE",
|
|
15
15
|
"\u98CE\u504F\u53D6\u98CE\u5411\u5782\u76F4\u7EBF\u8DEF\u7684\u6700\u4E0D\u5229\u5DE5\u51B5\uFF08sin\xB2\u03B8 = 1\uFF09",
|
|
16
|
+
"\u8D85\u9AD8\u6A2A\u79FB \u03B4 \u4E8E 2026-09-19 \u7EB3\u5165\u7EFC\u5408\u504F\u79FB\u5408\u6210\uFF08\u4E0E\u7AD9\u70B9 calc-core.js \u540C\u6279\u66F4\u6B63\uFF1B\u65E7\u7248\u4EC5\u8BA1\u7B97\u8FD4\u56DE\u3001\u672A\u53C2\u4E0E e\uFF09",
|
|
16
17
|
"\u5BB9\u8BB8\u504F\u79FB [e] \u6309\u53D7\u7535\u5F13\u52A8\u6001\u5305\u7EDC\u7EBF\u53D6\u503C\uFF0C\u4EE5\u8BBE\u8BA1\u6587\u4EF6\u4E3A\u51C6"
|
|
17
18
|
],
|
|
18
19
|
scope: [
|
|
@@ -24,7 +25,7 @@ var curveStaggerMeta = {
|
|
|
24
25
|
"\u98CE\u8F7D\u4F53\u578B\u7CFB\u6570 \u03B1\uFF1A0.5 ~ 2",
|
|
25
26
|
"\u5F20\u529B T\uFF1A5 ~ 40 kN",
|
|
26
27
|
"\u6ED1\u677F\u9762\u8DDD\u8F68\u9762 H\uFF1A4 ~ 8 m\uFF1B\u5916\u8F68\u8D85\u9AD8 h\uFF1A0 ~ 0.25 m\uFF1B\u8F68\u8DDD l\u2080 \u9ED8\u8BA4 1.435 m",
|
|
27
|
-
"\
|
|
28
|
+
"\u03B4 \u7EB3\u5165\u5408\u6210\u540E\uFF0C\u5916\u8F68\u8D85\u9AD8 h \u76F4\u63A5\u5F71\u54CD\u5224\u5B9A\u7ED3\u679C\uFF08h \u589E\u5927 \u2192 e\u208B \u589E\u5927\uFF09"
|
|
28
29
|
],
|
|
29
30
|
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",
|
|
30
31
|
online: "https://www.itswe.com/calculator/curve-stagger/"
|
|
@@ -81,8 +82,8 @@ function curveStaggerCheck(input) {
|
|
|
81
82
|
const rhoAir = 1.225;
|
|
82
83
|
const windLoadNPerM = 0.5 * rhoAir * input.windSpeedMPerS * input.windSpeedMPerS * wireDiameterM * dragCoefficient;
|
|
83
84
|
const pw = windLoadNPerM * spanM * spanM / (8 * tensionN);
|
|
84
|
-
const offsetPlusM = Math.abs(meanStaggerM + c) + pw;
|
|
85
|
-
const offsetMinusM = Math.abs(meanStaggerM - c) + pw;
|
|
85
|
+
const offsetPlusM = Math.abs(meanStaggerM + c - delta) + pw;
|
|
86
|
+
const offsetMinusM = Math.abs(meanStaggerM - c + delta) + pw;
|
|
86
87
|
const maxOffsetM = Math.max(offsetPlusM, offsetMinusM);
|
|
87
88
|
return {
|
|
88
89
|
meanStaggerM,
|
|
@@ -104,4 +105,4 @@ export {
|
|
|
104
105
|
cantShiftM,
|
|
105
106
|
curveStaggerCheck
|
|
106
107
|
};
|
|
107
|
-
//# sourceMappingURL=chunk-
|
|
108
|
+
//# sourceMappingURL=chunk-XRSWKYS6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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 '超高横移 δ 于 2026-09-19 纳入综合偏移合成(与站点 calc-core.js 同批更正;旧版仅计算返回、未参与 e)',\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 'δ 纳入合成后,外轨超高 h 直接影响判定结果(h 增大 → 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 /** 矢度与拉出值同向、超高横移反向的偏移 |ā + c − δ| + p_w,m */\n readonly offsetPlusM: number;\n /** 矢度与拉出值反向、超高横移同向的偏移 |ā − c + δ| + p_w,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 * 2026-09-19 更正(修复批 D):超高横移 δ 纳入综合偏移合成——\n * e₊ = |ā + c − δ| + p_w(矢度与拉出值同向、超高横移反向)\n * e₋ = |ā − c + δ| + p_w\n * 与站点 calc-core.js curveStaggerCheck 同批修正(旧注释「δ 不参与合成」已删除)。\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 // 2026-09-19 更正:δ 纳入合成,两风向取大\n const offsetPlusM = Math.abs(meanStaggerM + c - delta) + pw;\n const offsetMinusM = Math.abs(meanStaggerM - c + delta) + 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,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;;;AC9BO,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;AAYO,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;AAGlD,QAAM,cAAc,KAAK,IAAI,eAAe,IAAI,KAAK,IAAI;AACzD,QAAM,eAAe,KAAK,IAAI,eAAe,IAAI,KAAK,IAAI;AAC1D,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":[]}
|
|
@@ -6,7 +6,7 @@ var bvalueMeta = {
|
|
|
6
6
|
formula: [
|
|
7
7
|
"b_x = b_min + n\xB7\u03B1\xB7L\xB7(t_max \u2212 t_x)",
|
|
8
8
|
"\u5760\u7823\u4FA7\u884C\u7A0B\u53D8\u5316 n\xB7\u0394L\uFF0C\u0394L = \u03B1\xB7L\xB7(t_max \u2212 t_x)",
|
|
9
|
-
"\u5760\u7823\
|
|
9
|
+
"\u5760\u7823\u603B\u8D28\u91CF W = T\xB71000/(n\xB79.81) kg\uFF08T \u4E3A\u5F20\u529B kN\uFF0Cn \u4E3A\u4F20\u52A8\u6BD4\u500D\u6570\uFF1B\u4E0E\u7AD9\u70B9\u6362\u7B97\u53E3\u5F84\u4E00\u81F4\uFF09"
|
|
10
10
|
],
|
|
11
11
|
references: [
|
|
12
12
|
"\u9650\u503C\u53E3\u5F84\uFF1A\u8FD0\u884C \u2265200 mm\u3001\u504F\u5DEE \xB1100 mm\uFF08TB 10421-2018 \u7B2C 5.22.3 \u6761\uFF09",
|
|
@@ -31,8 +31,7 @@ function bValue(params) {
|
|
|
31
31
|
let weightKg = null;
|
|
32
32
|
if (tensionKN !== void 0) {
|
|
33
33
|
if (!(tensionKN > 0)) throw new RangeError("\u989D\u5B9A\u5F20\u529B\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + tensionKN);
|
|
34
|
-
|
|
35
|
-
weightKg = WKN * 102;
|
|
34
|
+
weightKg = tensionKN * 1e3 / (ratio * 9.81);
|
|
36
35
|
}
|
|
37
36
|
return { bMM, stretchMM, strokeMM, weightKg };
|
|
38
37
|
}
|
|
@@ -41,4 +40,4 @@ function bValue(params) {
|
|
|
41
40
|
|
|
42
41
|
|
|
43
42
|
exports.bvalueMeta = bvalueMeta; exports.bValue = bValue;
|
|
44
|
-
//# sourceMappingURL=chunk-
|
|
43
|
+
//# sourceMappingURL=chunk-YGTESFOQ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-YGTESFOQ.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;AAErE,IAAA,SAAA,EAAY,UAAA,EAAY,IAAA,EAAA,CAAS,MAAA,EAAQ,IAAA,CAAA;AAAA,EAC3C;AACA,EAAA,OAAO,EAAE,GAAA,EAAK,SAAA,EAAW,QAAA,EAAU,SAAS,CAAA;AAC9C;AFXA;AACA;AACE;AACA;AACF,yDAAC","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-YGTESFOQ.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·1000/(n·9.81) kg(T 为张力 kN,n 为传动比倍数;与站点换算口径一致)',\n ],\n references: [\n '限值口径:运行 ≥200 mm、偏差 ±100 mm(TB 10421-2018 第 5.22.3 条)',\n '设计 ≥300 mm(期刊引铁运〔2007〕69 号)',\n '传动比倍数 n:1:3 即 n=3',\n ],\n scope: ['b_min:50~1000 mm', '半锚段 L:50000~900000 mm', '温度差:0~100 ℃', '传动比:2~4'],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/bvalue/',\n};\n","export { bvalueMeta } from './meta';\n\n/** b 值(坠砣底面距地面高度)计算参数。单位:长度 mm、温度 ℃、张力 kN。 */\nexport interface BValueInput {\n /** 设计最小 b 值 b_min,mm(最高温度时坠砣最低位) */\n readonly minBMM: number;\n /** 传动比倍数 n(1:3 取 3) */\n readonly ratio: number;\n /** 线膨胀系数 α,1/℃(铜合金约 1.7e-5) */\n readonly expansionCoeff: number;\n /** 半锚段长度 L,mm */\n readonly halfSpanMM: number;\n /** 最高工作温度 t_max,℃ */\n readonly maxTempC: number;\n /** 安装/检调温度 t_x,℃ */\n readonly targetTempC: number;\n /** 额定张力 T,kN(用于坠砣重量换算) */\n readonly tensionKN?: number;\n}\n\nexport interface BValueResult {\n /** 当前温度 b 值 b_x,mm */\n readonly bMM: number;\n /** 温度伸缩量 ΔL = α·L·(t_max − t_x),mm */\n readonly stretchMM: number;\n /** 坠砣侧行程变化 n·ΔL,mm */\n readonly strokeMM: number;\n /** 坠砣总质量 W = T·1000/(n·9.81),kg(对齐站点 /calculator/bvalue/ 换算口径) */\n readonly weightKg: number | null;\n}\n\n/** b 值计算:b_x = b_min + n·α·L·(t_max − t_x) */\nexport function bValue(params: BValueInput): BValueResult {\n const { minBMM, ratio, expansionCoeff, halfSpanMM, maxTempC, targetTempC, tensionKN } = params;\n if (!(minBMM >= 0)) throw new RangeError('b_min 不能为负,收到 ' + minBMM);\n if (!(ratio > 0)) throw new RangeError('传动比倍数必须为正,收到 ' + ratio);\n if (!(halfSpanMM > 0)) throw new RangeError('半锚段长度必须为正,收到 ' + halfSpanMM);\n const dt = maxTempC - targetTempC;\n const stretchMM = expansionCoeff * halfSpanMM * dt;\n const strokeMM = ratio * stretchMM;\n const bMM = minBMM + strokeMM;\n let weightKg: number | null = null;\n if (tensionKN !== undefined) {\n if (!(tensionKN > 0)) throw new RangeError('额定张力必须为正,收到 ' + tensionKN);\n // W = T·1000/(n·9.81):kN→N 后按 g=9.81 m/s² 折算质量(站点页面同式)\n weightKg = (tensionKN * 1000) / (ratio * 9.81);\n }\n return { bMM, stretchMM, strokeMM, weightKg };\n}\n"]}
|
package/dist/copper/index.cjs
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var _chunkFRYBXJCMcjs = require('../chunk-FRYBXJCM.cjs');
|
|
6
6
|
require('../chunk-DGO2DCO5.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
exports.TB2809_WIRE_PARAMS =
|
|
11
|
+
exports.TB2809_WIRE_PARAMS = _chunkFRYBXJCMcjs.TB2809_WIRE_PARAMS; exports.copperMeta = _chunkFRYBXJCMcjs.copperMeta; exports.wireLookup = _chunkFRYBXJCMcjs.wireLookup;
|
|
12
12
|
//# sourceMappingURL=index.cjs.map
|
package/dist/copper/index.d.cts
CHANGED
|
@@ -9,9 +9,13 @@ interface WireParamEntry {
|
|
|
9
9
|
readonly unitWeightKgPerKm: number;
|
|
10
10
|
/** 20℃ 直流电阻,Ω/km */
|
|
11
11
|
readonly r20OhmPerKm: number;
|
|
12
|
-
/**
|
|
12
|
+
/** 电阻温度系数 α,1/℃(按材质真值,TB/T 2809-2026 6.10) */
|
|
13
|
+
readonly resistanceAlphaPerDegC: number;
|
|
14
|
+
/** 150℃ 持续载流量,室内口径,A(主值 = TB/T 2809-2026 表5) */
|
|
13
15
|
readonly ampacityIndoor150A: number;
|
|
14
|
-
/** 150℃
|
|
16
|
+
/** 150℃ 持续载流量,室内口径,A(TB/T 2809-2017 表5 同点位对照值,既有线历史采购参照) */
|
|
17
|
+
readonly ampacityIndoor150A2017: number;
|
|
18
|
+
/** 150℃ 持续载流量,室外口径,A(两版标准同值) */
|
|
15
19
|
readonly ampacityOutdoor150A: number;
|
|
16
20
|
/** 口径说明:本行实际对应标准中的哪一行 */
|
|
17
21
|
readonly note: string;
|
|
@@ -21,16 +25,32 @@ interface WireParamEntry {
|
|
|
21
25
|
*
|
|
22
26
|
* 载流量为 150℃ 持续值(室内/室外双口径,标准表5)。
|
|
23
27
|
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
28
|
+
* r₂₀ 口径 = 各材质 20℃ 电阻率上限 ÷ 标称截面。2026-09-19 全表复核:
|
|
29
|
+
* 更正 CTMH-120/150(旧值误用 0.02535 档,应 0.02653)与
|
|
30
|
+
* CTS-120/150(旧值误用 0.02299 档,应 0.01854)四行错档值,
|
|
31
|
+
* 已随站点 `/calculator/assets/calc-core.js` 同批修正。
|
|
26
32
|
*
|
|
27
33
|
* 注:站点曾因显示层 `fmt()` 的尾零剥离正则把载流量渲染成 43/56(应为 430/560),
|
|
28
34
|
* 已于 R38 之后修复。若再遇渲染值与本表不符,先确认是否为显示层问题:
|
|
29
35
|
* 本表与服务端数据源始终一致。
|
|
30
36
|
*
|
|
37
|
+
* 单位重量口径(2026-09-19 更正):六行 unitWeightKgPerKm 已按 TB/T 2809-2017
|
|
38
|
+
* 表3 参考单位质量逐项更正——CTMH-120 1082→1076、CTMH-150 1350→1342、
|
|
39
|
+
* CTAH-120 1070→1076、CTAH-150 1330→1342、CTS-120 1080→1079、CTS-150 1345→1347
|
|
40
|
+
* (旧值混入了 TB/T 2810 纯铜表 1082 及近似凑整值)。站点 `calc-core.js` 的
|
|
41
|
+
* COPPER_TABLE 已于 2026-09-19 同值更正(1076 系),两侧一致;r₂₀/载流量两列不受影响。
|
|
42
|
+
*
|
|
31
43
|
* ⚠️ 注意型号口径:CTMH / CTAH / CTS 是站点计算器的型号代码,与标准中的
|
|
32
44
|
* CTMH / CTA / CTS 并非同名对应。`note` 字段说明各行实际取自标准的哪一行,
|
|
33
45
|
* 交叉引用 TB/T 2809-2017 时请以 note 为准。
|
|
46
|
+
*
|
|
47
|
+
* 载流量 150℃ 室内主值 = TB/T 2809-2026 表5(2026-09-19 据正版文本核入),
|
|
48
|
+
* `ampacityIndoor150A2017` 对照字段为 2017 表5 同点位值(既有线历史采购参照);
|
|
49
|
+
* 室外值两版同值。
|
|
50
|
+
*
|
|
51
|
+
* 电阻温度系数口径(2026-09-19 实装,修复批 D):每行 resistanceAlphaPerDegC
|
|
52
|
+
* 按各材质真值取(TB/T 2809-2026 6.10)——银(CTAH)0.00380、锡(CTS)0.00320、
|
|
53
|
+
* 镁(CTMH)0.00270;旧版统一用纯铜 0.00393 系「纯铜近似」(偏保守),已废弃。
|
|
34
54
|
*/
|
|
35
55
|
declare const TB2809_WIRE_PARAMS: Record<CopperWireModel, WireParamEntry>;
|
|
36
56
|
interface CopperLookupInput {
|