ocs-calculators 0.1.2 → 0.2.0

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.
Files changed (100) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +3 -3
  3. package/README_EN.md +1 -1
  4. package/dist/anchor-length/index.cjs +11 -0
  5. package/dist/anchor-length/index.cjs.map +1 -0
  6. package/dist/anchor-length/index.d.cts +45 -0
  7. package/dist/anchor-length/index.d.ts +45 -0
  8. package/dist/anchor-length/index.js +11 -0
  9. package/dist/anchor-length/index.js.map +1 -0
  10. package/dist/bvalue/index.cjs +9 -0
  11. package/dist/bvalue/index.cjs.map +1 -0
  12. package/dist/bvalue/index.d.cts +35 -0
  13. package/dist/bvalue/index.d.ts +35 -0
  14. package/dist/bvalue/index.js +9 -0
  15. package/dist/bvalue/index.js.map +1 -0
  16. package/dist/cantilever/index.cjs +11 -0
  17. package/dist/cantilever/index.cjs.map +1 -0
  18. package/dist/cantilever/index.d.cts +31 -0
  19. package/dist/cantilever/index.d.ts +31 -0
  20. package/dist/cantilever/index.js +11 -0
  21. package/dist/cantilever/index.js.map +1 -0
  22. package/dist/chunk-3GREMF76.js +44 -0
  23. package/dist/chunk-3GREMF76.js.map +1 -0
  24. package/dist/chunk-4344WWAF.cjs +58 -0
  25. package/dist/chunk-4344WWAF.cjs.map +1 -0
  26. package/dist/chunk-57J7I6JA.cjs +116 -0
  27. package/dist/chunk-57J7I6JA.cjs.map +1 -0
  28. package/dist/chunk-75EGROQB.js +53 -0
  29. package/dist/chunk-75EGROQB.js.map +1 -0
  30. package/dist/chunk-C2XU3XKP.js +46 -0
  31. package/dist/chunk-C2XU3XKP.js.map +1 -0
  32. package/dist/chunk-CLVLOLUJ.js +45 -0
  33. package/dist/chunk-CLVLOLUJ.js.map +1 -0
  34. package/dist/chunk-CSLI5HEJ.cjs +53 -0
  35. package/dist/chunk-CSLI5HEJ.cjs.map +1 -0
  36. package/dist/chunk-D5F5ES2R.js +163 -0
  37. package/dist/chunk-D5F5ES2R.js.map +1 -0
  38. package/dist/chunk-HXALVJ4G.cjs +44 -0
  39. package/dist/chunk-HXALVJ4G.cjs.map +1 -0
  40. package/dist/chunk-HZWNKKIB.js +42 -0
  41. package/dist/chunk-HZWNKKIB.js.map +1 -0
  42. package/dist/{chunk-CVA4EH2K.js → chunk-IQR3SRCD.js} +9 -9
  43. package/dist/chunk-IQR3SRCD.js.map +1 -0
  44. package/dist/chunk-LBGUOTCJ.cjs +45 -0
  45. package/dist/chunk-LBGUOTCJ.cjs.map +1 -0
  46. package/dist/{chunk-MZBQ4546.cjs → chunk-MTAYG3U2.cjs} +9 -9
  47. package/dist/chunk-MTAYG3U2.cjs.map +1 -0
  48. package/dist/chunk-PYNVEHGR.cjs +46 -0
  49. package/dist/chunk-PYNVEHGR.cjs.map +1 -0
  50. package/dist/chunk-TO46PTS3.js +116 -0
  51. package/dist/chunk-TO46PTS3.js.map +1 -0
  52. package/dist/chunk-VXVTT6WS.js +58 -0
  53. package/dist/chunk-VXVTT6WS.js.map +1 -0
  54. package/dist/chunk-WGTOBRYV.cjs +42 -0
  55. package/dist/chunk-WGTOBRYV.cjs.map +1 -0
  56. package/dist/chunk-X25CXRVE.cjs +163 -0
  57. package/dist/chunk-X25CXRVE.cjs.map +1 -0
  58. package/dist/copper/index.cjs +2 -2
  59. package/dist/copper/index.d.cts +2 -2
  60. package/dist/copper/index.d.ts +2 -2
  61. package/dist/copper/index.js +1 -1
  62. package/dist/creepage/index.cjs +15 -0
  63. package/dist/creepage/index.cjs.map +1 -0
  64. package/dist/creepage/index.d.cts +40 -0
  65. package/dist/creepage/index.d.ts +40 -0
  66. package/dist/creepage/index.js +15 -0
  67. package/dist/creepage/index.js.map +1 -0
  68. package/dist/cross-span/index.cjs +9 -0
  69. package/dist/cross-span/index.cjs.map +1 -0
  70. package/dist/cross-span/index.d.cts +68 -0
  71. package/dist/cross-span/index.d.ts +68 -0
  72. package/dist/cross-span/index.js +9 -0
  73. package/dist/cross-span/index.js.map +1 -0
  74. package/dist/index.cjs +83 -15
  75. package/dist/index.cjs.map +1 -1
  76. package/dist/index.d.cts +10 -2
  77. package/dist/index.d.ts +10 -2
  78. package/dist/index.js +92 -24
  79. package/dist/index.js.map +1 -1
  80. package/dist/pole-capacity/index.cjs +13 -0
  81. package/dist/pole-capacity/index.cjs.map +1 -0
  82. package/dist/pole-capacity/index.d.cts +47 -0
  83. package/dist/pole-capacity/index.d.ts +47 -0
  84. package/dist/pole-capacity/index.js +13 -0
  85. package/dist/pole-capacity/index.js.map +1 -0
  86. package/dist/sag/index.cjs +13 -0
  87. package/dist/sag/index.cjs.map +1 -0
  88. package/dist/sag/index.d.cts +21 -0
  89. package/dist/sag/index.d.ts +21 -0
  90. package/dist/sag/index.js +13 -0
  91. package/dist/sag/index.js.map +1 -0
  92. package/dist/steady-arm/index.cjs +11 -0
  93. package/dist/steady-arm/index.cjs.map +1 -0
  94. package/dist/steady-arm/index.d.cts +66 -0
  95. package/dist/steady-arm/index.d.ts +66 -0
  96. package/dist/steady-arm/index.js +11 -0
  97. package/dist/steady-arm/index.js.map +1 -0
  98. package/package.json +43 -3
  99. package/dist/chunk-CVA4EH2K.js.map +0 -1
  100. package/dist/chunk-MZBQ4546.cjs.map +0 -1
@@ -6,7 +6,7 @@ import {
6
6
  var copperMeta = {
7
7
  name: "\u63A5\u89E6\u7EBF\u53C2\u6570\u901F\u67E5",
8
8
  nameEn: "Contact Wire Parameter Lookup",
9
- summary: "\u5185\u7F6E CTHM / CTHA / CTHS \u7CFB\u5217 120/150 mm\xB2 \u63A5\u89E6\u7EBF\u53C2\u6570\u8868\uFF0C\u6309\u957F\u5EA6\u4E0E\u73AF\u5883\u6E29\u5EA6\u7ED9\u51FA\u603B\u91CD\u91CF\u4E0E\u6E29\u5EA6\u4FEE\u6B63\u7535\u963B\u3002",
9
+ summary: "\u5185\u7F6E CTMH / CTAH / CTS \u7CFB\u5217 120/150 mm\xB2 \u63A5\u89E6\u7EBF\u53C2\u6570\u8868\uFF0C\u6309\u957F\u5EA6\u4E0E\u73AF\u5883\u6E29\u5EA6\u7ED9\u51FA\u603B\u91CD\u91CF\u4E0E\u6E29\u5EA6\u4FEE\u6B63\u7535\u963B\u3002",
10
10
  formula: [
11
11
  "\u7535\u963B\u6E29\u5EA6\u4FEE\u6B63\uFF08\u03B1 = 0.00393 /\u2103\uFF09\uFF1Ar_T = r\u2082\u2080\xB7[1 + \u03B1\xB7(T \u2212 20)]",
12
12
  "\u603B\u91CD\u91CF\uFF1AW = w\u2080 \xD7 l\uFF08w\u2080 \u5355\u4F4D\u91CD\u91CF kg/km\uFF0Cl \u957F\u5EA6 km\uFF09"
@@ -15,7 +15,7 @@ var copperMeta = {
15
15
  "\u5185\u7F6E\u53C2\u6570\u8868\u6765\u6E90 TB/T 2809-2017\u300A\u7535\u6C14\u5316\u94C1\u8DEF\u7528\u94DC\u53CA\u94DC\u5408\u91D1\u63A5\u89E6\u7EBF\u300B\uFF082018-05-01 \u5B9E\u65BD\uFF09",
16
16
  "\u5355\u4F4D\u91CD\u91CF\u4E3A\u6807\u79F0\u503C",
17
17
  "\u8F7D\u6D41\u91CF\u4E3A 150\u2103 \u6301\u7EED\u503C\uFF0C\u5BA4\u5185/\u5BA4\u5916\u53CC\u53E3\u5F84\u6309\u6807\u51C6\u88685",
18
- "r\u2082\u2080 \u9664 CTHM-120 \u53D6\u7ED9\u5B9A\u503C\u5916\uFF0C\u5747\u6309\u5BFC\u7535\u7387\u53CD\u7B97\u4F30\u7B97\uFF08IACS \u6807\u51C6\u7535\u963B\u7387 0.017241 \u03A9\xB7mm\xB2/m \xF7 \u5BFC\u7535\u7387 \xF7 \u622A\u9762\u79EF\uFF1B0.017241 = 1/58\uFF09",
18
+ "r\u2082\u2080 \u9664 CTMH-120 \u53D6\u7ED9\u5B9A\u503C\u5916\uFF0C\u5747\u6309\u5BFC\u7535\u7387\u53CD\u7B97\u4F30\u7B97\uFF08IACS \u6807\u51C6\u7535\u963B\u7387 0.017241 \u03A9\xB7mm\xB2/m \xF7 \u5BFC\u7535\u7387 \xF7 \u622A\u9762\u79EF\uFF1B0.017241 = 1/58\uFF09",
19
19
  "\u6B63\u5F0F\u5DE5\u7A0B\u4EE5\u4EA7\u54C1\u6807\u51C6\u4E0E\u51FA\u5382\u68C0\u9A8C\u5355\u4E3A\u51C6"
20
20
  ],
21
21
  scope: [
@@ -29,42 +29,42 @@ var copperMeta = {
29
29
 
30
30
  // src/copper/index.ts
31
31
  var TB2809_WIRE_PARAMS = {
32
- "CTHM-120": {
32
+ "CTMH-120": {
33
33
  unitWeightKgPerKm: 1082,
34
34
  r20OhmPerKm: 0.2113,
35
35
  ampacityIndoor150A: 430,
36
36
  ampacityOutdoor150A: 560,
37
37
  note: "\u53D6\u6807\u51C6 CTMH \u884C\uFF08\u9AD8\u5F3A\u5EA6\u94DC\u9541\u5408\u91D1\uFF09\uFF0C\u03C1 \u6309\u6807\u51C6\u4E0A\u9650 0.02535 \u8BA1\u7B97"
38
38
  },
39
- "CTHM-150": {
39
+ "CTMH-150": {
40
40
  unitWeightKgPerKm: 1350,
41
41
  r20OhmPerKm: 0.169,
42
42
  ampacityIndoor150A: 500,
43
43
  ampacityOutdoor150A: 650,
44
44
  note: "\u53D6\u6807\u51C6 CTMH \u884C\uFF08\u9AD8\u5F3A\u5EA6\u94DC\u9541\u5408\u91D1\uFF09"
45
45
  },
46
- "CTHA-120": {
46
+ "CTAH-120": {
47
47
  unitWeightKgPerKm: 1070,
48
48
  r20OhmPerKm: 0.1481,
49
49
  ampacityIndoor150A: 515,
50
50
  ampacityOutdoor150A: 680,
51
51
  note: "\u53D6\u6807\u51C6 CTA \u884C\uFF08\u94DC\u94F6\u5408\u91D1\uFF09\uFF0C\u03C1 \u2264 0.01777"
52
52
  },
53
- "CTHA-150": {
53
+ "CTAH-150": {
54
54
  unitWeightKgPerKm: 1330,
55
55
  r20OhmPerKm: 0.1185,
56
56
  ampacityIndoor150A: 620,
57
57
  ampacityOutdoor150A: 785,
58
58
  note: "\u53D6\u6807\u51C6 CTA \u884C\uFF08\u94DC\u94F6\u5408\u91D1\uFF09"
59
59
  },
60
- "CTHS-120": {
60
+ "CTS-120": {
61
61
  unitWeightKgPerKm: 1080,
62
62
  r20OhmPerKm: 0.1916,
63
63
  ampacityIndoor150A: 515,
64
64
  ampacityOutdoor150A: 680,
65
65
  note: "\u53D6\u6807\u51C6 CTS \u884C\uFF08\u94DC\u9521\u5408\u91D1\uFF09\uFF0C\u8F7D\u6D41\u91CF\u6309 CTS \u884C\u53D6\u503C"
66
66
  },
67
- "CTHS-150": {
67
+ "CTS-150": {
68
68
  unitWeightKgPerKm: 1345,
69
69
  r20OhmPerKm: 0.1533,
70
70
  ampacityIndoor150A: 620,
@@ -99,4 +99,4 @@ export {
99
99
  TB2809_WIRE_PARAMS,
100
100
  wireLookup
101
101
  };
102
- //# sourceMappingURL=chunk-CVA4EH2K.js.map
102
+ //# sourceMappingURL=chunk-IQR3SRCD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/copper/meta.ts","../src/copper/index.ts"],"sourcesContent":["import type { CalculatorMeta } from '../types';\n\nexport const copperMeta: CalculatorMeta = {\n name: '接触线参数速查',\n nameEn: 'Contact Wire Parameter Lookup',\n summary:\n '内置 CTMH / CTAH / CTS 系列 120/150 mm² 接触线参数表,按长度与环境温度给出总重量与温度修正电阻。',\n formula: [\n '电阻温度修正(α = 0.00393 /℃):r_T = r₂₀·[1 + α·(T − 20)]',\n '总重量:W = w₀ × l(w₀ 单位重量 kg/km,l 长度 km)',\n ],\n references: [\n '内置参数表来源 TB/T 2809-2017《电气化铁路用铜及铜合金接触线》(2018-05-01 实施)',\n '单位重量为标称值',\n '载流量为 150℃ 持续值,室内/室外双口径按标准表5',\n 'r₂₀ 除 CTMH-120 取给定值外,均按导电率反算估算(IACS 标准电阻率 0.017241 Ω·mm²/m ÷ 导电率 ÷ 截面积;0.017241 = 1/58)',\n '正式工程以产品标准与出厂检验单为准',\n ],\n scope: [\n '温度修正仅覆盖电阻,未修正单位重量与载流量',\n '适用温度 −40 ~ 90 ℃',\n '载流量为 150℃ 允许温度下的持续值,未做环境温度修正',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/copper/',\n};\n","export { copperMeta } from './meta';\n\n// 电阻温度修正与铜常数统一放在 src/common/resistance.ts(copper 与 voltage-drop 共用),\n// 由根 index 统一导出,此处仅内部引用,避免重复导出同名符号。\nimport { resistanceAtTempOhmPerKm } from '../common/resistance';\n\n/** 站点计算器内置的 6 个型号 */\nexport type CopperWireModel =\n | 'CTMH-120'\n | 'CTMH-150'\n | 'CTAH-120'\n | 'CTAH-150'\n | 'CTS-120'\n | 'CTS-150';\n\nexport interface WireParamEntry {\n /** 单位重量,kg/km(标称值) */\n readonly unitWeightKgPerKm: number;\n /** 20℃ 直流电阻,Ω/km */\n readonly r20OhmPerKm: number;\n /** 150℃ 持续载流量,室内口径,A */\n readonly ampacityIndoor150A: number;\n /** 150℃ 持续载流量,室外口径,A */\n readonly ampacityOutdoor150A: number;\n /** 口径说明:本行实际对应标准中的哪一行 */\n readonly note: string;\n}\n\n/**\n * 接触线参数表,来源 TB/T 2809-2017。\n *\n * 载流量为 150℃ 持续值(室内/室外双口径,标准表5)。\n *\n * 已与站点 `/calculator/assets/calc-core.js` 中的 COPPER_TABLE 逐项比对,\n * 6 个型号 × 4 项参数完全一致。\n *\n * 注:站点曾因显示层 `fmt()` 的尾零剥离正则把载流量渲染成 43/56(应为 430/560),\n * 已于 R38 之后修复。若再遇渲染值与本表不符,先确认是否为显示层问题:\n * 本表与服务端数据源始终一致。\n *\n * ⚠️ 注意型号口径:CTMH / CTAH / CTS 是站点计算器的型号代码,与标准中的\n * CTMH / CTA / CTS 并非同名对应。`note` 字段说明各行实际取自标准的哪一行,\n * 交叉引用 TB/T 2809-2017 时请以 note 为准。\n */\nexport const TB2809_WIRE_PARAMS: Record<CopperWireModel, WireParamEntry> = {\n 'CTMH-120': {\n unitWeightKgPerKm: 1082,\n r20OhmPerKm: 0.2113,\n ampacityIndoor150A: 430,\n ampacityOutdoor150A: 560,\n note: '取标准 CTMH 行(高强度铜镁合金),ρ 按标准上限 0.02535 计算',\n },\n 'CTMH-150': {\n unitWeightKgPerKm: 1350,\n r20OhmPerKm: 0.169,\n ampacityIndoor150A: 500,\n ampacityOutdoor150A: 650,\n note: '取标准 CTMH 行(高强度铜镁合金)',\n },\n 'CTAH-120': {\n unitWeightKgPerKm: 1070,\n r20OhmPerKm: 0.1481,\n ampacityIndoor150A: 515,\n ampacityOutdoor150A: 680,\n note: '取标准 CTA 行(铜银合金),ρ ≤ 0.01777',\n },\n 'CTAH-150': {\n unitWeightKgPerKm: 1330,\n r20OhmPerKm: 0.1185,\n ampacityIndoor150A: 620,\n ampacityOutdoor150A: 785,\n note: '取标准 CTA 行(铜银合金)',\n },\n 'CTS-120': {\n unitWeightKgPerKm: 1080,\n r20OhmPerKm: 0.1916,\n ampacityIndoor150A: 515,\n ampacityOutdoor150A: 680,\n note: '取标准 CTS 行(铜锡合金),载流量按 CTS 行取值',\n },\n 'CTS-150': {\n unitWeightKgPerKm: 1345,\n r20OhmPerKm: 0.1533,\n ampacityIndoor150A: 620,\n ampacityOutdoor150A: 790,\n note: '取标准 CTS 行(铜锡合金),载流量按 CTS 行取值',\n },\n};\n\nexport interface CopperLookupInput {\n readonly model: CopperWireModel;\n /** 长度 l,km */\n readonly lengthKm: number;\n /** 环境温度 T,℃ */\n readonly ambientTempDegC: number;\n}\n\nexport interface CopperLookupResult extends WireParamEntry {\n readonly model: CopperWireModel;\n /** 总重量 W = w₀ × l,kg */\n readonly totalWeightKg: number;\n /** 温度修正电阻 r_T,Ω/km */\n readonly rTOhmPerKm: number;\n /** 全长温度修正电阻,Ω */\n readonly totalResistanceOhm: number;\n}\n\n/**\n * 按型号、长度与环境温度给出接触线参数速查结果。\n */\nexport function wireLookup(input: CopperLookupInput): CopperLookupResult {\n const { model, lengthKm, ambientTempDegC } = input;\n\n const params = TB2809_WIRE_PARAMS[model];\n if (params === undefined) {\n throw new RangeError(`未知型号:${model}`);\n }\n if (!(lengthKm > 0)) {\n throw new RangeError(`长度必须为正数,收到 ${lengthKm} km`);\n }\n if (ambientTempDegC < -40 || ambientTempDegC > 90) {\n throw new RangeError(`适用温度为 −40 ~ 90 ℃,收到 ${ambientTempDegC} ℃`);\n }\n\n const rT = resistanceAtTempOhmPerKm(params.r20OhmPerKm, ambientTempDegC);\n\n return {\n model,\n ...params,\n totalWeightKg: params.unitWeightKgPerKm * lengthKm,\n rTOhmPerKm: rT,\n totalResistanceOhm: rT * lengthKm,\n };\n}\n"],"mappings":";;;;;AAEO,IAAM,aAA6B;AAAA,EACxC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SACE;AAAA,EACF,SAAS;AAAA,IACP;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY;AAAA,EACZ,QAAQ;AACV;;;ACmBO,IAAM,qBAA8D;AAAA,EACzE,YAAY;AAAA,IACV,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,MAAM;AAAA,EACR;AAAA,EACA,YAAY;AAAA,IACV,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,MAAM;AAAA,EACR;AAAA,EACA,YAAY;AAAA,IACV,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,MAAM;AAAA,EACR;AAAA,EACA,YAAY;AAAA,IACV,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,MAAM;AAAA,EACR;AAAA,EACA,WAAW;AAAA,IACT,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,MAAM;AAAA,EACR;AAAA,EACA,WAAW;AAAA,IACT,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,MAAM;AAAA,EACR;AACF;AAuBO,SAAS,WAAW,OAA8C;AACvE,QAAM,EAAE,OAAO,UAAU,gBAAgB,IAAI;AAE7C,QAAM,SAAS,mBAAmB,KAAK;AACvC,MAAI,WAAW,QAAW;AACxB,UAAM,IAAI,WAAW,iCAAQ,KAAK,EAAE;AAAA,EACtC;AACA,MAAI,EAAE,WAAW,IAAI;AACnB,UAAM,IAAI,WAAW,gEAAc,QAAQ,KAAK;AAAA,EAClD;AACA,MAAI,kBAAkB,OAAO,kBAAkB,IAAI;AACjD,UAAM,IAAI,WAAW,yEAAuB,eAAe,SAAI;AAAA,EACjE;AAEA,QAAM,KAAK,yBAAyB,OAAO,aAAa,eAAe;AAEvE,SAAO;AAAA,IACL;AAAA,IACA,GAAG;AAAA,IACH,eAAe,OAAO,oBAAoB;AAAA,IAC1C,YAAY;AAAA,IACZ,oBAAoB,KAAK;AAAA,EAC3B;AACF;","names":[]}
@@ -0,0 +1,45 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }// src/creepage/meta.ts
2
+ var creepageMeta = {
3
+ name: "\u7EDD\u7F18\u5B50\u722C\u7535\u8DDD\u79BB\u9009\u578B\u6821\u6838",
4
+ nameEn: "Insulator Creepage Distance Check",
5
+ summary: "\u6309 TB 10009-2016 \u7B2C 5.3.2 \u6761\u5E95\u7EBF\u5224\u5B9A\u63A5\u89E6\u7F51\u7EDD\u7F18\u6700\u5C0F\u722C\u7535\u8DDD\u79BB\uFF0C\u9644 GB/T 32586 \u6BD4\u8DDD\u4E09\u6863\u5BF9\u7167\u3002",
6
+ formula: [
7
+ "\u5E95\u7EBF\uFF1A\u4E00\u822C\u533A\u6BB5 \u22651400 mm\uFF1BV \u5F62\u5929\u7A97\u4E0A\u3001\u4E0B\u884C\u6B63\u7EBF\u95F4\u5206\u6BB5\u4E32 \u22651600 mm",
8
+ "GB/T 32586 \u7EDF\u4E00\u722C\u7535\u6BD4\u8DDD\u4E09\u6863\uFF1A\u6B63\u5E38 24~33\u3001\u975E\u6B63\u5E38 36~40\u3001\u82DB\u523B >48 mm/kV"
9
+ ],
10
+ references: [
11
+ "TB 10009-2016 \u7B2C 5.3.2 \u6761\u7B2C 1 \u6B3E\uFF08\u7EDD\u5BF9\u5E95\u7EBF\uFF09",
12
+ "GB/T 32586-2016 \u7B2C 4.4 \u6761\uFF08\u7EDF\u4E00\u722C\u7535\u6BD4\u8DDD\u4E09\u6863\uFF0C\u6309\u7CFB\u7EDF\u6700\u9AD8\u6301\u7EED\u7535\u538B\u6298\u7B97\uFF09",
13
+ "\u94C1\u8DEF\u4F53\u7CFB\u4EE5\u7EDD\u5BF9\u503C\u95E8\u69DB\u5224\u5B9A\uFF0C\u6BD4\u8DDD\u6CD5\u4EC5\u4F5C\u5BF9\u7167"
14
+ ],
15
+ scope: ["\u722C\u7535\u8DDD\u79BB\uFF1A600~2500 mm", "\u7CFB\u7EDF\u6700\u9AD8\u7535\u538B\uFF1A27.5~31 kV"],
16
+ 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",
17
+ online: "https://www.itswe.com/calculator/creepage/"
18
+ };
19
+
20
+ // src/creepage/index.ts
21
+ var CREEPAGE_FLOOR_GENERAL = 1400;
22
+ var CREEPAGE_FLOOR_VCUT = 1600;
23
+ var USCD_BANDS = [
24
+ { label: "\u6B63\u5E38", min: 24, max: 33 },
25
+ { label: "\u975E\u6B63\u5E38", min: 36, max: 40 },
26
+ { label: "\u82DB\u523B", min: 48, max: Infinity }
27
+ ];
28
+ function creepageCheck(input) {
29
+ const floorMM = input.scenario === "vcut" ? CREEPAGE_FLOOR_VCUT : CREEPAGE_FLOOR_GENERAL;
30
+ const kv = _nullishCoalesce(input.maxVoltageKV, () => ( 29));
31
+ const uscdBands = USCD_BANDS.map((b) => ({
32
+ label: b.label,
33
+ mm: b.max === Infinity ? Math.round(b.min * kv) : Math.round(b.min * kv)
34
+ }));
35
+ return { floorMM, passes: input.creepageMM >= floorMM, uscdBands };
36
+ }
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+ exports.creepageMeta = creepageMeta; exports.CREEPAGE_FLOOR_GENERAL = CREEPAGE_FLOOR_GENERAL; exports.CREEPAGE_FLOOR_VCUT = CREEPAGE_FLOOR_VCUT; exports.USCD_BANDS = USCD_BANDS; exports.creepageCheck = creepageCheck;
45
+ //# sourceMappingURL=chunk-LBGUOTCJ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-LBGUOTCJ.cjs","../src/creepage/meta.ts","../src/creepage/index.ts"],"names":[],"mappings":"AAAA;ACEO,IAAM,aAAA,EAA+B;AAAA,EAC1C,IAAA,EAAM,oEAAA;AAAA,EACN,MAAA,EAAQ,mCAAA;AAAA,EACR,OAAA,EAAS,sMAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACP,8JAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,sFAAA;AAAA,IACA,uKAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,KAAA,EAAO,CAAC,2CAAA,EAAoB,sDAAmB,CAAA;AAAA,EAC/C,UAAA,EAAY,sKAAA;AAAA,EACZ,MAAA,EAAQ;AACV,CAAA;ADAA;AACA;AEhBO,IAAM,uBAAA,EAAyB,IAAA;AAE/B,IAAM,oBAAA,EAAsB,IAAA;AAG5B,IAAM,WAAA,EAAa;AAAA,EACxB,EAAE,KAAA,EAAO,cAAA,EAAM,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,GAAG,CAAA;AAAA,EAChC,EAAE,KAAA,EAAO,oBAAA,EAAO,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,GAAG,CAAA;AAAA,EACjC,EAAE,KAAA,EAAO,cAAA,EAAM,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,SAAS;AACxC,CAAA;AAGO,SAAS,aAAA,CAAc,KAAA,EAS5B;AACA,EAAA,MAAM,QAAA,EAAW,KAAA,CAAM,SAAA,IAAa,OAAA,EAAS,oBAAA,EAAsB,sBAAA;AACnE,EAAA,MAAM,GAAA,mBAAK,KAAA,CAAM,YAAA,UAAgB,IAAA;AACjC,EAAA,MAAM,UAAA,EAAY,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,EAAA,GAAA,CAAO;AAAA,IACvC,KAAA,EAAO,CAAA,CAAE,KAAA;AAAA,IACT,EAAA,EAAI,CAAA,CAAE,IAAA,IAAQ,SAAA,EAAW,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,IAAA,EAAM,EAAE,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,IAAA,EAAM,EAAE;AAAA,EACzE,CAAA,CAAE,CAAA;AACF,EAAA,OAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,KAAA,CAAM,WAAA,GAAc,OAAA,EAAS,UAAU,CAAA;AACnE;AFIA;AACA;AACE;AACA;AACA;AACA;AACA;AACF,wNAAC","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-LBGUOTCJ.cjs","sourcesContent":[null,"import type { CalculatorMeta } from '../types';\n\nexport const creepageMeta: CalculatorMeta = {\n name: '绝缘子爬电距离选型校核',\n nameEn: 'Insulator Creepage Distance Check',\n summary: '按 TB 10009-2016 第 5.3.2 条底线判定接触网绝缘最小爬电距离,附 GB/T 32586 比距三档对照。',\n formula: [\n '底线:一般区段 ≥1400 mm;V 形天窗上、下行正线间分段串 ≥1600 mm',\n 'GB/T 32586 统一爬电比距三档:正常 24~33、非正常 36~40、苛刻 >48 mm/kV',\n ],\n references: [\n 'TB 10009-2016 第 5.3.2 条第 1 款(绝对底线)',\n 'GB/T 32586-2016 第 4.4 条(统一爬电比距三档,按系统最高持续电压折算)',\n '铁路体系以绝对值门槛判定,比距法仅作对照',\n ],\n scope: ['爬电距离:600~2500 mm', '系统最高电压:27.5~31 kV'],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/creepage/',\n};\n","export { creepageMeta } from './meta';\n\n/** 接触网绝缘爬电距离底线(TB 10009-2016 第 5.3.2 条第 1 款),mm */\nexport const CREEPAGE_FLOOR_GENERAL = 1400;\n/** V 形天窗区段上、下行正线间分段绝缘子串底线,mm */\nexport const CREEPAGE_FLOOR_VCUT = 1600;\n\n/** GB/T 32586 统一爬电比距三档(第 4.4 条,按系统最高持续电压折算) */\nexport const USCD_BANDS = [\n { label: '正常', min: 24, max: 33 },\n { label: '非正常', min: 36, max: 40 },\n { label: '苛刻', min: 48, max: Infinity },\n] as const;\n\n/** 爬电距离校核 */\nexport function creepageCheck(input: {\n /** 绝缘子实际爬电距离,mm */\n readonly creepageMM: number;\n /** 使用场景:'general' 一般 | 'vcut' V 形天窗分段串 */\n readonly scenario?: 'general' | 'vcut';\n /** 系统最高电压,kV(GB/T 32586 折算用,默认 29) */\n readonly maxVoltageKV?: number;\n}): {\n floorMM: number; passes: boolean; uscdBands: { label: string; mm: number }[];\n} {\n const floorMM = (input.scenario === 'vcut' ? CREEPAGE_FLOOR_VCUT : CREEPAGE_FLOOR_GENERAL);\n const kv = input.maxVoltageKV ?? 29;\n const uscdBands = USCD_BANDS.map((b) => ({\n label: b.label,\n mm: b.max === Infinity ? Math.round(b.min * kv) : Math.round(b.min * kv),\n }));\n return { floorMM, passes: input.creepageMM >= floorMM, uscdBands };\n}\n"]}
@@ -6,7 +6,7 @@ var _chunkDGO2DCO5cjs = require('./chunk-DGO2DCO5.cjs');
6
6
  var copperMeta = {
7
7
  name: "\u63A5\u89E6\u7EBF\u53C2\u6570\u901F\u67E5",
8
8
  nameEn: "Contact Wire Parameter Lookup",
9
- summary: "\u5185\u7F6E CTHM / CTHA / CTHS \u7CFB\u5217 120/150 mm\xB2 \u63A5\u89E6\u7EBF\u53C2\u6570\u8868\uFF0C\u6309\u957F\u5EA6\u4E0E\u73AF\u5883\u6E29\u5EA6\u7ED9\u51FA\u603B\u91CD\u91CF\u4E0E\u6E29\u5EA6\u4FEE\u6B63\u7535\u963B\u3002",
9
+ summary: "\u5185\u7F6E CTMH / CTAH / CTS \u7CFB\u5217 120/150 mm\xB2 \u63A5\u89E6\u7EBF\u53C2\u6570\u8868\uFF0C\u6309\u957F\u5EA6\u4E0E\u73AF\u5883\u6E29\u5EA6\u7ED9\u51FA\u603B\u91CD\u91CF\u4E0E\u6E29\u5EA6\u4FEE\u6B63\u7535\u963B\u3002",
10
10
  formula: [
11
11
  "\u7535\u963B\u6E29\u5EA6\u4FEE\u6B63\uFF08\u03B1 = 0.00393 /\u2103\uFF09\uFF1Ar_T = r\u2082\u2080\xB7[1 + \u03B1\xB7(T \u2212 20)]",
12
12
  "\u603B\u91CD\u91CF\uFF1AW = w\u2080 \xD7 l\uFF08w\u2080 \u5355\u4F4D\u91CD\u91CF kg/km\uFF0Cl \u957F\u5EA6 km\uFF09"
@@ -15,7 +15,7 @@ var copperMeta = {
15
15
  "\u5185\u7F6E\u53C2\u6570\u8868\u6765\u6E90 TB/T 2809-2017\u300A\u7535\u6C14\u5316\u94C1\u8DEF\u7528\u94DC\u53CA\u94DC\u5408\u91D1\u63A5\u89E6\u7EBF\u300B\uFF082018-05-01 \u5B9E\u65BD\uFF09",
16
16
  "\u5355\u4F4D\u91CD\u91CF\u4E3A\u6807\u79F0\u503C",
17
17
  "\u8F7D\u6D41\u91CF\u4E3A 150\u2103 \u6301\u7EED\u503C\uFF0C\u5BA4\u5185/\u5BA4\u5916\u53CC\u53E3\u5F84\u6309\u6807\u51C6\u88685",
18
- "r\u2082\u2080 \u9664 CTHM-120 \u53D6\u7ED9\u5B9A\u503C\u5916\uFF0C\u5747\u6309\u5BFC\u7535\u7387\u53CD\u7B97\u4F30\u7B97\uFF08IACS \u6807\u51C6\u7535\u963B\u7387 0.017241 \u03A9\xB7mm\xB2/m \xF7 \u5BFC\u7535\u7387 \xF7 \u622A\u9762\u79EF\uFF1B0.017241 = 1/58\uFF09",
18
+ "r\u2082\u2080 \u9664 CTMH-120 \u53D6\u7ED9\u5B9A\u503C\u5916\uFF0C\u5747\u6309\u5BFC\u7535\u7387\u53CD\u7B97\u4F30\u7B97\uFF08IACS \u6807\u51C6\u7535\u963B\u7387 0.017241 \u03A9\xB7mm\xB2/m \xF7 \u5BFC\u7535\u7387 \xF7 \u622A\u9762\u79EF\uFF1B0.017241 = 1/58\uFF09",
19
19
  "\u6B63\u5F0F\u5DE5\u7A0B\u4EE5\u4EA7\u54C1\u6807\u51C6\u4E0E\u51FA\u5382\u68C0\u9A8C\u5355\u4E3A\u51C6"
20
20
  ],
21
21
  scope: [
@@ -29,42 +29,42 @@ var copperMeta = {
29
29
 
30
30
  // src/copper/index.ts
31
31
  var TB2809_WIRE_PARAMS = {
32
- "CTHM-120": {
32
+ "CTMH-120": {
33
33
  unitWeightKgPerKm: 1082,
34
34
  r20OhmPerKm: 0.2113,
35
35
  ampacityIndoor150A: 430,
36
36
  ampacityOutdoor150A: 560,
37
37
  note: "\u53D6\u6807\u51C6 CTMH \u884C\uFF08\u9AD8\u5F3A\u5EA6\u94DC\u9541\u5408\u91D1\uFF09\uFF0C\u03C1 \u6309\u6807\u51C6\u4E0A\u9650 0.02535 \u8BA1\u7B97"
38
38
  },
39
- "CTHM-150": {
39
+ "CTMH-150": {
40
40
  unitWeightKgPerKm: 1350,
41
41
  r20OhmPerKm: 0.169,
42
42
  ampacityIndoor150A: 500,
43
43
  ampacityOutdoor150A: 650,
44
44
  note: "\u53D6\u6807\u51C6 CTMH \u884C\uFF08\u9AD8\u5F3A\u5EA6\u94DC\u9541\u5408\u91D1\uFF09"
45
45
  },
46
- "CTHA-120": {
46
+ "CTAH-120": {
47
47
  unitWeightKgPerKm: 1070,
48
48
  r20OhmPerKm: 0.1481,
49
49
  ampacityIndoor150A: 515,
50
50
  ampacityOutdoor150A: 680,
51
51
  note: "\u53D6\u6807\u51C6 CTA \u884C\uFF08\u94DC\u94F6\u5408\u91D1\uFF09\uFF0C\u03C1 \u2264 0.01777"
52
52
  },
53
- "CTHA-150": {
53
+ "CTAH-150": {
54
54
  unitWeightKgPerKm: 1330,
55
55
  r20OhmPerKm: 0.1185,
56
56
  ampacityIndoor150A: 620,
57
57
  ampacityOutdoor150A: 785,
58
58
  note: "\u53D6\u6807\u51C6 CTA \u884C\uFF08\u94DC\u94F6\u5408\u91D1\uFF09"
59
59
  },
60
- "CTHS-120": {
60
+ "CTS-120": {
61
61
  unitWeightKgPerKm: 1080,
62
62
  r20OhmPerKm: 0.1916,
63
63
  ampacityIndoor150A: 515,
64
64
  ampacityOutdoor150A: 680,
65
65
  note: "\u53D6\u6807\u51C6 CTS \u884C\uFF08\u94DC\u9521\u5408\u91D1\uFF09\uFF0C\u8F7D\u6D41\u91CF\u6309 CTS \u884C\u53D6\u503C"
66
66
  },
67
- "CTHS-150": {
67
+ "CTS-150": {
68
68
  unitWeightKgPerKm: 1345,
69
69
  r20OhmPerKm: 0.1533,
70
70
  ampacityIndoor150A: 620,
@@ -99,4 +99,4 @@ function wireLookup(input) {
99
99
 
100
100
 
101
101
  exports.copperMeta = copperMeta; exports.TB2809_WIRE_PARAMS = TB2809_WIRE_PARAMS; exports.wireLookup = wireLookup;
102
- //# sourceMappingURL=chunk-MZBQ4546.cjs.map
102
+ //# sourceMappingURL=chunk-MTAYG3U2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-MTAYG3U2.cjs","../src/copper/meta.ts","../src/copper/index.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACFO,IAAM,WAAA,EAA6B;AAAA,EACxC,IAAA,EAAM,4CAAA;AAAA,EACN,MAAA,EAAQ,+BAAA;AAAA,EACR,OAAA,EACE,qOAAA;AAAA,EACF,OAAA,EAAS;AAAA,IACP,oIAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,8LAAA;AAAA,IACA,kDAAA;AAAA,IACA,iIAAA;AAAA,IACA,0QAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,KAAA,EAAO;AAAA,IACL,gIAAA;AAAA,IACA,+CAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY,sKAAA;AAAA,EACZ,MAAA,EAAQ;AACV,CAAA;ADGA;AACA;AEeO,IAAM,mBAAA,EAA8D;AAAA,EACzE,UAAA,EAAY;AAAA,IACV,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa,MAAA;AAAA,IACb,kBAAA,EAAoB,GAAA;AAAA,IACpB,mBAAA,EAAqB,GAAA;AAAA,IACrB,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa,KAAA;AAAA,IACb,kBAAA,EAAoB,GAAA;AAAA,IACpB,mBAAA,EAAqB,GAAA;AAAA,IACrB,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa,MAAA;AAAA,IACb,kBAAA,EAAoB,GAAA;AAAA,IACpB,mBAAA,EAAqB,GAAA;AAAA,IACrB,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa,MAAA;AAAA,IACb,kBAAA,EAAoB,GAAA;AAAA,IACpB,mBAAA,EAAqB,GAAA;AAAA,IACrB,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA,SAAA,EAAW;AAAA,IACT,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa,MAAA;AAAA,IACb,kBAAA,EAAoB,GAAA;AAAA,IACpB,mBAAA,EAAqB,GAAA;AAAA,IACrB,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA,SAAA,EAAW;AAAA,IACT,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa,MAAA;AAAA,IACb,kBAAA,EAAoB,GAAA;AAAA,IACpB,mBAAA,EAAqB,GAAA;AAAA,IACrB,IAAA,EAAM;AAAA,EACR;AACF,CAAA;AAuBO,SAAS,UAAA,CAAW,KAAA,EAA8C;AACvE,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,gBAAgB,EAAA,EAAI,KAAA;AAE7C,EAAA,MAAM,OAAA,EAAS,kBAAA,CAAmB,KAAK,CAAA;AACvC,EAAA,GAAA,CAAI,OAAA,IAAW,KAAA,CAAA,EAAW;AACxB,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,8BAAA,EAAQ,KAAK,CAAA,CAAA;AACpC,EAAA;AACqB,EAAA;AACE,IAAA;AACvB,EAAA;AACmD,EAAA;AAC5B,IAAA;AACvB,EAAA;AAEwD,EAAA;AAEjD,EAAA;AACL,IAAA;AACG,IAAA;AACuC,IAAA;AAC9B,IAAA;AACa,IAAA;AAC3B,EAAA;AACF;AFtCgE;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-MTAYG3U2.cjs","sourcesContent":[null,"import type { CalculatorMeta } from '../types';\n\nexport const copperMeta: CalculatorMeta = {\n name: '接触线参数速查',\n nameEn: 'Contact Wire Parameter Lookup',\n summary:\n '内置 CTMH / CTAH / CTS 系列 120/150 mm² 接触线参数表,按长度与环境温度给出总重量与温度修正电阻。',\n formula: [\n '电阻温度修正(α = 0.00393 /℃):r_T = r₂₀·[1 + α·(T − 20)]',\n '总重量:W = w₀ × l(w₀ 单位重量 kg/km,l 长度 km)',\n ],\n references: [\n '内置参数表来源 TB/T 2809-2017《电气化铁路用铜及铜合金接触线》(2018-05-01 实施)',\n '单位重量为标称值',\n '载流量为 150℃ 持续值,室内/室外双口径按标准表5',\n 'r₂₀ 除 CTMH-120 取给定值外,均按导电率反算估算(IACS 标准电阻率 0.017241 Ω·mm²/m ÷ 导电率 ÷ 截面积;0.017241 = 1/58)',\n '正式工程以产品标准与出厂检验单为准',\n ],\n scope: [\n '温度修正仅覆盖电阻,未修正单位重量与载流量',\n '适用温度 −40 ~ 90 ℃',\n '载流量为 150℃ 允许温度下的持续值,未做环境温度修正',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/copper/',\n};\n","export { copperMeta } from './meta';\n\n// 电阻温度修正与铜常数统一放在 src/common/resistance.ts(copper 与 voltage-drop 共用),\n// 由根 index 统一导出,此处仅内部引用,避免重复导出同名符号。\nimport { resistanceAtTempOhmPerKm } from '../common/resistance';\n\n/** 站点计算器内置的 6 个型号 */\nexport type CopperWireModel =\n | 'CTMH-120'\n | 'CTMH-150'\n | 'CTAH-120'\n | 'CTAH-150'\n | 'CTS-120'\n | 'CTS-150';\n\nexport interface WireParamEntry {\n /** 单位重量,kg/km(标称值) */\n readonly unitWeightKgPerKm: number;\n /** 20℃ 直流电阻,Ω/km */\n readonly r20OhmPerKm: number;\n /** 150℃ 持续载流量,室内口径,A */\n readonly ampacityIndoor150A: number;\n /** 150℃ 持续载流量,室外口径,A */\n readonly ampacityOutdoor150A: number;\n /** 口径说明:本行实际对应标准中的哪一行 */\n readonly note: string;\n}\n\n/**\n * 接触线参数表,来源 TB/T 2809-2017。\n *\n * 载流量为 150℃ 持续值(室内/室外双口径,标准表5)。\n *\n * 已与站点 `/calculator/assets/calc-core.js` 中的 COPPER_TABLE 逐项比对,\n * 6 个型号 × 4 项参数完全一致。\n *\n * 注:站点曾因显示层 `fmt()` 的尾零剥离正则把载流量渲染成 43/56(应为 430/560),\n * 已于 R38 之后修复。若再遇渲染值与本表不符,先确认是否为显示层问题:\n * 本表与服务端数据源始终一致。\n *\n * ⚠️ 注意型号口径:CTMH / CTAH / CTS 是站点计算器的型号代码,与标准中的\n * CTMH / CTA / CTS 并非同名对应。`note` 字段说明各行实际取自标准的哪一行,\n * 交叉引用 TB/T 2809-2017 时请以 note 为准。\n */\nexport const TB2809_WIRE_PARAMS: Record<CopperWireModel, WireParamEntry> = {\n 'CTMH-120': {\n unitWeightKgPerKm: 1082,\n r20OhmPerKm: 0.2113,\n ampacityIndoor150A: 430,\n ampacityOutdoor150A: 560,\n note: '取标准 CTMH 行(高强度铜镁合金),ρ 按标准上限 0.02535 计算',\n },\n 'CTMH-150': {\n unitWeightKgPerKm: 1350,\n r20OhmPerKm: 0.169,\n ampacityIndoor150A: 500,\n ampacityOutdoor150A: 650,\n note: '取标准 CTMH 行(高强度铜镁合金)',\n },\n 'CTAH-120': {\n unitWeightKgPerKm: 1070,\n r20OhmPerKm: 0.1481,\n ampacityIndoor150A: 515,\n ampacityOutdoor150A: 680,\n note: '取标准 CTA 行(铜银合金),ρ ≤ 0.01777',\n },\n 'CTAH-150': {\n unitWeightKgPerKm: 1330,\n r20OhmPerKm: 0.1185,\n ampacityIndoor150A: 620,\n ampacityOutdoor150A: 785,\n note: '取标准 CTA 行(铜银合金)',\n },\n 'CTS-120': {\n unitWeightKgPerKm: 1080,\n r20OhmPerKm: 0.1916,\n ampacityIndoor150A: 515,\n ampacityOutdoor150A: 680,\n note: '取标准 CTS 行(铜锡合金),载流量按 CTS 行取值',\n },\n 'CTS-150': {\n unitWeightKgPerKm: 1345,\n r20OhmPerKm: 0.1533,\n ampacityIndoor150A: 620,\n ampacityOutdoor150A: 790,\n note: '取标准 CTS 行(铜锡合金),载流量按 CTS 行取值',\n },\n};\n\nexport interface CopperLookupInput {\n readonly model: CopperWireModel;\n /** 长度 l,km */\n readonly lengthKm: number;\n /** 环境温度 T,℃ */\n readonly ambientTempDegC: number;\n}\n\nexport interface CopperLookupResult extends WireParamEntry {\n readonly model: CopperWireModel;\n /** 总重量 W = w₀ × l,kg */\n readonly totalWeightKg: number;\n /** 温度修正电阻 r_T,Ω/km */\n readonly rTOhmPerKm: number;\n /** 全长温度修正电阻,Ω */\n readonly totalResistanceOhm: number;\n}\n\n/**\n * 按型号、长度与环境温度给出接触线参数速查结果。\n */\nexport function wireLookup(input: CopperLookupInput): CopperLookupResult {\n const { model, lengthKm, ambientTempDegC } = input;\n\n const params = TB2809_WIRE_PARAMS[model];\n if (params === undefined) {\n throw new RangeError(`未知型号:${model}`);\n }\n if (!(lengthKm > 0)) {\n throw new RangeError(`长度必须为正数,收到 ${lengthKm} km`);\n }\n if (ambientTempDegC < -40 || ambientTempDegC > 90) {\n throw new RangeError(`适用温度为 −40 ~ 90 ℃,收到 ${ambientTempDegC} ℃`);\n }\n\n const rT = resistanceAtTempOhmPerKm(params.r20OhmPerKm, ambientTempDegC);\n\n return {\n model,\n ...params,\n totalWeightKg: params.unitWeightKgPerKm * lengthKm,\n rTOhmPerKm: rT,\n totalResistanceOhm: rT * lengthKm,\n };\n}\n"]}
@@ -0,0 +1,46 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/sag/meta.ts
2
+ var sagMeta = {
3
+ name: "\u5F1B\u5EA6\u901F\u7B97\uFF08\u5F1B\u5EA6-\u5F20\u529B\u4E92\u7B97\uFF09",
4
+ nameEn: "Sag Quick Calculation",
5
+ summary: "\u7B49\u9AD8\u60AC\u6302\u629B\u7269\u7EBF\u8FD1\u4F3C\uFF08\u5C0F\u5F1B\u5EA6\u5047\u8BBE\uFF09\u4E0B\u5F1B\u5EA6\u3001\u5F20\u529B\u4E0E\u6700\u5927\u8DE8\u8DDD\u4E92\u7B97\u3002",
6
+ formula: [
7
+ "\u5F1B\u5EA6 f = g\xB7l\xB2/(8T)",
8
+ "\u53CD\u7B97\u5F20\u529B T = g\xB7l\xB2/(8\xB7f)",
9
+ "\u53CD\u7B97\u8DE8\u8DDD\u4E0A\u9650 l_max = \u221A(8\xB7T\xB7f_max/g)"
10
+ ],
11
+ references: [
12
+ "\u9650\u503C\uFF08TB 10009-2016 \u7B2C 5.1.9 \u6761\uFF0C\u63A8\u8350\u6027\u300C\u4E0D\u5B9C\u5927\u4E8E\u300D\u53E3\u5F84\uFF09\uFF1A\u94FE\u5F62\u60AC\u6302\u63A5\u89E6\u7EBF 150 mm\u3001\u7B80\u5355\u60AC\u6302 250 mm\u3001\u4F4E\u901F\u533A\u6BB5 350 mm",
13
+ "\u7B49\u9AD8\u60AC\u6302\u629B\u7269\u7EBF\u8FD1\u4F3C\uFF0C\u9002\u7528\u4E8E f/l \u2264 1/10"
14
+ ],
15
+ scope: ["\u5F20\u529B T\uFF1A1~40 kN", "\u8DE8\u8DDD l\uFF1A5~80 m", "\u5355\u4F4D\u91CD g\uFF1A5~25 N/m"],
16
+ 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",
17
+ online: "https://www.itswe.com/calculator/sag/"
18
+ };
19
+
20
+ // src/sag/index.ts
21
+ function sagMM(input) {
22
+ const { tensionKN, spanM, weightNPerM } = input;
23
+ if (!(tensionKN > 0)) throw new RangeError("\u5F20\u529B\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + tensionKN + " kN");
24
+ if (!(spanM > 0)) throw new RangeError("\u8DE8\u8DDD\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + spanM + " m");
25
+ if (!(weightNPerM >= 0)) throw new RangeError("\u5355\u4F4D\u91CD\u4E0D\u80FD\u4E3A\u8D1F\uFF0C\u6536\u5230 " + weightNPerM + " N/m");
26
+ const sagM = weightNPerM * spanM * spanM / (8 * tensionKN * 1e3);
27
+ return sagM * 1e3;
28
+ }
29
+ function tensionFromSagKN(weightNPerM, spanM, sagMM2) {
30
+ if (!(sagMM2 > 0)) throw new RangeError("\u5F1B\u5EA6\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + sagMM2 + " mm");
31
+ const sagM = sagMM2 / 1e3;
32
+ return weightNPerM * spanM * spanM / (8 * sagM) / 1e3;
33
+ }
34
+ function maxSpanFromSagM(weightNPerM, tensionKN, sagLimitMM) {
35
+ if (!(sagLimitMM > 0)) throw new RangeError("\u9650\u503C\u5F1B\u5EA6\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + sagLimitMM + " mm");
36
+ const sagM = sagLimitMM / 1e3;
37
+ return Math.sqrt(8 * tensionKN * 1e3 * sagM / weightNPerM);
38
+ }
39
+
40
+
41
+
42
+
43
+
44
+
45
+ exports.sagMeta = sagMeta; exports.sagMM = sagMM; exports.tensionFromSagKN = tensionFromSagKN; exports.maxSpanFromSagM = maxSpanFromSagM;
46
+ //# sourceMappingURL=chunk-PYNVEHGR.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-PYNVEHGR.cjs","../src/sag/meta.ts","../src/sag/index.ts"],"names":["sagMM"],"mappings":"AAAA;ACEO,IAAM,QAAA,EAA0B;AAAA,EACrC,IAAA,EAAM,2EAAA;AAAA,EACN,MAAA,EAAQ,uBAAA;AAAA,EACR,OAAA,EAAS,sLAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACP,kCAAA;AAAA,IACA,kDAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,oQAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,KAAA,EAAO,CAAC,6BAAA,EAAgB,4BAAA,EAAe,oCAAgB,CAAA;AAAA,EACvD,UAAA,EAAY,sKAAA;AAAA,EACZ,MAAA,EAAQ;AACV,CAAA;ADAA;AACA;AENO,SAAS,KAAA,CAAM,KAAA,EAAyB;AAC7C,EAAA,MAAM,EAAE,SAAA,EAAW,KAAA,EAAO,YAAY,EAAA,EAAI,KAAA;AAC1C,EAAA,GAAA,CAAI,CAAA,CAAE,UAAA,EAAY,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,0DAAA,EAAe,UAAA,EAAY,KAAK,CAAA;AAC3E,EAAA,GAAA,CAAI,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,0DAAA,EAAe,MAAA,EAAQ,IAAI,CAAA;AAClE,EAAA,GAAA,CAAI,CAAA,CAAE,YAAA,GAAe,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,gEAAA,EAAgB,YAAA,EAAc,MAAM,CAAA;AAClF,EAAA,MAAM,KAAA,EAAQ,YAAA,EAAc,MAAA,EAAQ,MAAA,EAAA,CAAU,EAAA,EAAI,UAAA,EAAY,GAAA,CAAA;AAC9D,EAAA,OAAO,KAAA,EAAO,GAAA;AAChB;AAGO,SAAS,gBAAA,CAAiB,WAAA,EAAqB,KAAA,EAAeA,MAAAA,EAAuB;AAC1F,EAAA,GAAA,CAAI,CAAA,CAAEA,OAAAA,EAAQ,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,0DAAA,EAAeA,OAAAA,EAAQ,KAAK,CAAA;AACnE,EAAA,MAAM,KAAA,EAAOA,OAAAA,EAAQ,GAAA;AACrB,EAAA,OAAQ,YAAA,EAAc,MAAA,EAAQ,MAAA,EAAA,CAAU,EAAA,EAAI,IAAA,EAAA,EAAQ,GAAA;AACtD;AAGO,SAAS,eAAA,CAAgB,WAAA,EAAqB,SAAA,EAAmB,UAAA,EAA4B;AAClG,EAAA,GAAA,CAAI,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,sEAAA,EAAiB,WAAA,EAAa,KAAK,CAAA;AAC/E,EAAA,MAAM,KAAA,EAAO,WAAA,EAAa,GAAA;AAC1B,EAAA,OAAO,IAAA,CAAK,IAAA,CAAM,EAAA,EAAI,UAAA,EAAY,IAAA,EAAM,KAAA,EAAQ,WAAW,CAAA;AAC7D;AFIA;AACA;AACE;AACA;AACA;AACA;AACF,yIAAC","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-PYNVEHGR.cjs","sourcesContent":[null,"import type { CalculatorMeta } from '../types';\n\nexport const sagMeta: CalculatorMeta = {\n name: '弛度速算(弛度-张力互算)',\n nameEn: 'Sag Quick Calculation',\n summary: '等高悬挂抛物线近似(小弛度假设)下弛度、张力与最大跨距互算。',\n formula: [\n '弛度 f = g·l²/(8T)',\n '反算张力 T = g·l²/(8·f)',\n '反算跨距上限 l_max = √(8·T·f_max/g)',\n ],\n references: [\n '限值(TB 10009-2016 第 5.1.9 条,推荐性「不宜大于」口径):链形悬挂接触线 150 mm、简单悬挂 250 mm、低速区段 350 mm',\n '等高悬挂抛物线近似,适用于 f/l ≤ 1/10',\n ],\n scope: ['张力 T:1~40 kN', '跨距 l:5~80 m', '单位重 g:5~25 N/m'],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/sag/',\n};\n","export { sagMeta } from './meta';\n\n/** 弛度计算参数。单位:张力 kN、跨距 m、单位重 N/m。 */\nexport interface SagInput {\n /** 接触线/承力索张力 T,kN */\n readonly tensionKN: number;\n /** 跨距 l,m */\n readonly spanM: number;\n /** 单位长度重量 g,N/m */\n readonly weightNPerM: number;\n}\n\n/** 弛度 f = g·l²/(8T),mm */\nexport function sagMM(input: SagInput): number {\n const { tensionKN, spanM, weightNPerM } = input;\n if (!(tensionKN > 0)) throw new RangeError('张力必须为正,收到 ' + tensionKN + ' kN');\n if (!(spanM > 0)) throw new RangeError('跨距必须为正,收到 ' + spanM + ' m');\n if (!(weightNPerM >= 0)) throw new RangeError('单位重不能为负,收到 ' + weightNPerM + ' N/m');\n const sagM = (weightNPerM * spanM * spanM) / (8 * tensionKN * 1e3);\n return sagM * 1e3;\n}\n\n/** 反算张力:给定弛度求张力 T = g·l²/(8·f),kN */\nexport function tensionFromSagKN(weightNPerM: number, spanM: number, sagMM: number): number {\n if (!(sagMM > 0)) throw new RangeError('弛度必须为正,收到 ' + sagMM + ' mm');\n const sagM = sagMM / 1e3;\n return (weightNPerM * spanM * spanM) / (8 * sagM) / 1e3;\n}\n\n/** 反算最大跨距:给定张力与限值弛度 l_max = √(8·T·f_max/g),m */\nexport function maxSpanFromSagM(weightNPerM: number, tensionKN: number, sagLimitMM: number): number {\n if (!(sagLimitMM > 0)) throw new RangeError('限值弛度必须为正,收到 ' + sagLimitMM + ' mm');\n const sagM = sagLimitMM / 1e3;\n return Math.sqrt((8 * tensionKN * 1e3 * sagM) / weightNPerM);\n}\n"]}
@@ -0,0 +1,116 @@
1
+ // src/steady-arm/meta.ts
2
+ var steadyArmMeta = {
3
+ name: "\u5B9A\u4F4D\u5668\u5761\u5EA6\u6821\u6838",
4
+ nameEn: "Steady Arm Slope Check",
5
+ summary: "\u8BA1\u7B97\u5B9A\u4F4D\u5668\u6240\u53D7\u6C34\u5E73\u529B\uFF08\u76F4\u7EBF\u4E4B\u5B57\u529B / \u66F2\u7EBF\u529B\uFF09\u4E0E\u5782\u76F4\u529B\uFF0C\u6C42\u5761\u5EA6\u89D2\u4E0E\u5761\u5EA6\u6BD4\uFF0C\u5E76\u6309\u76F4\u7EBF/\u66F2\u7EBF\u9650\u503C\u5224\u5B9A\u662F\u5426\u6EE1\u8DB3\u5761\u5EA6\u8981\u6C42\u3002",
6
+ formula: [
7
+ "\u76F4\u7EBF\u4E4B\u5B57\u529B\uFF1AFz = 4\xB7T\xB7a/l\uFF08a \u4E3A\u62C9\u51FA\u503C\uFF0Cmm \u6362\u7B97 m\uFF09",
8
+ "\u66F2\u7EBF\u529B\uFF1AFq = T\xB7l/R",
9
+ "\u66F2\u7EBF\u5408\u6210\uFF1AFs = |Fq \u2212 Fz|\uFF1B\u76F4\u7EBF\u533A\u6BB5 Fs = Fz",
10
+ "\u5782\u76F4\u529B\uFF1AFc = g_j\xB7l\u2081 + G_d",
11
+ "\u5761\u5EA6\u89D2\uFF1A\u03B8 = atan(Fc/Fs)\uFF0C\u5F27\u5EA6\u8F6C\u5EA6",
12
+ "\u5761\u5EA6\u6BD4\uFF08\u5782\u76F4\u2236\u6C34\u5E73\uFF09= 1\u2236n\uFF0Cn = Fs/Fc",
13
+ "\u9650\u503C\uFF08\u76F4\u7EBF \u03B8 \u2265 8\xB0\uFF1B\u66F2\u7EBF 6\xB0 \u2264 \u03B8 \u2264 16\xB0\uFF09"
14
+ ],
15
+ references: [
16
+ "\u6559\u6750\u901A\u884C\u8FD1\u4F3C\uFF1A\u4E4B\u5B57\u529B Fz = 4\xB7T\xB7a/l\u3001\u66F2\u7EBF\u529B Fq = T\xB7l/R",
17
+ "\u7F57\u5065\u7B49\u300A\u9AD8\u901F\u94C1\u8DEF\u63A5\u89E6\u7F51\u5B9A\u4F4D\u5668\u5761\u5EA6\u95EE\u9898\u7684\u6DF1\u5316\u7814\u7A76\u300B\uFF0C\u94C1\u9053\u5DE5\u7A0B\u5B66\u62A5 2013, 30(1): 76-80\uFF08300 km/h \u53CA\u4EE5\u4E0A\u5761\u5EA6\u9650\u503C\u53E3\u5F84\uFF09",
18
+ "\u5728\u7EBF\u53C2\u8003\uFF1Ahttps://www.itswe.com/calculator/steady-arm/"
19
+ ],
20
+ scope: [
21
+ "\u63A5\u89E6\u7EBF\u5F20\u529B T\uFF1A1 ~ 40 kN",
22
+ "\u62C9\u51FA\u503C a\uFF1A50 ~ 500 mm",
23
+ "\u8DE8\u8DDD l\uFF1A5 ~ 80 m",
24
+ "\u66F2\u7EBF\u534A\u5F84 R\uFF1A500 ~ 12000 m\uFF08undefined \u8868\u793A\u76F4\u7EBF\uFF09",
25
+ "\u63A5\u89E6\u7EBF\u5355\u4F4D\u91CD g_j\uFF1A0.001 ~ 0.1 kN/m",
26
+ "\u5B9A\u4F4D\u5668\u81EA\u91CD G_d\uFF1A0 ~ 0.5 kN",
27
+ "\u9650\u503C\u9002\u7528\u4E8E 300 km/h \u53CA\u4EE5\u4E0A\u9AD8\u94C1\uFF1B\u4E2D\u4F4E\u901F\u7EBF\u8DEF\u5761\u5EA6\u9650\u503C\u53EF\u4E0D\u540C",
28
+ "\u672A\u8BA1\u5165\u98CE\u8377\u8F7D\u3001\u5B9A\u4F4D\u5668\u957F\u5EA6\u65B9\u5411\u503E\u659C\u4E0E\u96F6\u90E8\u4EF6\u516C\u5DEE"
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",
31
+ online: "https://www.itswe.com/calculator/steady-arm/"
32
+ };
33
+
34
+ // src/steady-arm/index.ts
35
+ function steadyArmAngleDeg(input) {
36
+ const {
37
+ contactWireTensionKN: T,
38
+ staggerMM,
39
+ spanM: l,
40
+ curveRadiusM,
41
+ firstDropperOffsetM: l1,
42
+ wireWeightKNPerM: gJ,
43
+ regulatorSelfWeightKN: gD
44
+ } = input;
45
+ if (!(T > 0)) {
46
+ throw new RangeError(`\u63A5\u89E6\u7EBF\u5F20\u529B\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${T} kN`);
47
+ }
48
+ if (!(staggerMM > 0)) {
49
+ throw new RangeError(`\u62C9\u51FA\u503C\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${staggerMM} mm`);
50
+ }
51
+ if (!(l > 0)) {
52
+ throw new RangeError(`\u8DE8\u8DDD\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${l} m`);
53
+ }
54
+ if (curveRadiusM !== void 0 && !(curveRadiusM > 0)) {
55
+ throw new RangeError(`\u66F2\u7EBF\u534A\u5F84\u5FC5\u987B\u4E3A\u6B63\u6570\uFF0C\u6536\u5230 ${curveRadiusM} m`);
56
+ }
57
+ if (!(l1 >= 0)) {
58
+ throw new RangeError(`\u7B2C\u4E00\u540A\u5F26\u8DDD\u5B9A\u4F4D\u70B9\u8DDD\u79BB\u4E0D\u80FD\u4E3A\u8D1F\uFF0C\u6536\u5230 ${l1} m`);
59
+ }
60
+ if (!(gJ >= 0)) {
61
+ throw new RangeError(`\u63A5\u89E6\u7EBF\u5355\u4F4D\u91CD\u4E0D\u80FD\u4E3A\u8D1F\uFF0C\u6536\u5230 ${gJ} kN/m`);
62
+ }
63
+ if (!(gD >= 0)) {
64
+ throw new RangeError(`\u5B9A\u4F4D\u5668\u81EA\u91CD\u4E0D\u80FD\u4E3A\u8D1F\uFF0C\u6536\u5230 ${gD} kN`);
65
+ }
66
+ const isStraight = curveRadiusM === void 0;
67
+ const aM = staggerMM * 1e-3;
68
+ const fz = 4 * T * aM / l;
69
+ let fq = 0;
70
+ let fs = fz;
71
+ if (!isStraight) {
72
+ const R = curveRadiusM;
73
+ fq = T * l / R;
74
+ fs = Math.abs(fq - fz);
75
+ }
76
+ const fc = gJ * l1 + gD;
77
+ if (!(fs > 0)) {
78
+ throw new RangeError(
79
+ `\u6C34\u5E73\u5408\u6210\u529B Fs = ${fs} kN \u987B\u4E3A\u6B63\u6570\uFF08\u66F2\u7EBF\u529B\u4E0E\u4E4B\u5B57\u529B\u76F8\u7B49\u65F6\u5761\u5EA6\u65E0\u610F\u4E49\uFF09\uFF0C\u8BF7\u590D\u6838\u8F93\u5165`
80
+ );
81
+ }
82
+ if (!(fc > 0)) {
83
+ throw new RangeError(
84
+ `\u5782\u76F4\u529B Fc = ${fc} kN \u987B\u4E3A\u6B63\u6570\uFF0C\u8BF7\u590D\u6838\u63A5\u89E6\u7EBF\u5355\u4F4D\u91CD / \u5B9A\u4F4D\u5668\u81EA\u91CD`
85
+ );
86
+ }
87
+ const angleDeg = Math.atan(fc / fs) * 180 / Math.PI;
88
+ const slopeRatio = fs / fc;
89
+ return {
90
+ staggerForceKN: fz,
91
+ curveForceKN: fq,
92
+ horizontalForceKN: fs,
93
+ verticalForceKN: fc,
94
+ angleDeg,
95
+ slopeRatio,
96
+ isStraight
97
+ };
98
+ }
99
+ function steadyArmCheck(input) {
100
+ const base = steadyArmAngleDeg(input);
101
+ if (base.isStraight) {
102
+ const passes2 = base.angleDeg >= 8;
103
+ const reason2 = passes2 ? `\u76F4\u7EBF\u533A\u6BB5\uFF1A\u03B8 = ${base.angleDeg.toFixed(4)}\xB0 \u2265 8\xB0\uFF0C\u6EE1\u8DB3\u5761\u5EA6\u8981\u6C42` : `\u76F4\u7EBF\u533A\u6BB5\uFF1A\u03B8 = ${base.angleDeg.toFixed(4)}\xB0 < 8\xB0\uFF0C\u4E0D\u6EE1\u8DB3\u5761\u5EA6\u8981\u6C42\uFF08\u9700 \u2265 8\xB0\uFF09`;
104
+ return { ...base, passes: passes2, reason: reason2 };
105
+ }
106
+ const passes = base.angleDeg >= 6 && base.angleDeg <= 16;
107
+ const reason = passes ? `\u66F2\u7EBF\u533A\u6BB5\uFF1A\u03B8 = ${base.angleDeg.toFixed(4)}\xB0 \u4F4D\u4E8E 6\xB0 ~ 16\xB0 \u533A\u95F4\uFF0C\u6EE1\u8DB3\u5761\u5EA6\u8981\u6C42` : `\u66F2\u7EBF\u533A\u6BB5\uFF1A\u03B8 = ${base.angleDeg.toFixed(4)}\xB0 \u8D85\u51FA 6\xB0 ~ 16\xB0 \u533A\u95F4\uFF0C\u4E0D\u6EE1\u8DB3\u5761\u5EA6\u8981\u6C42`;
108
+ return { ...base, passes, reason };
109
+ }
110
+
111
+ export {
112
+ steadyArmMeta,
113
+ steadyArmAngleDeg,
114
+ steadyArmCheck
115
+ };
116
+ //# sourceMappingURL=chunk-TO46PTS3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/steady-arm/meta.ts","../src/steady-arm/index.ts"],"sourcesContent":["import type { CalculatorMeta } from '../types';\n\nexport const steadyArmMeta: CalculatorMeta = {\n name: '定位器坡度校核',\n nameEn: 'Steady Arm Slope Check',\n summary:\n '计算定位器所受水平力(直线之字力 / 曲线力)与垂直力,求坡度角与坡度比,并按直线/曲线限值判定是否满足坡度要求。',\n formula: [\n '直线之字力:Fz = 4·T·a/l(a 为拉出值,mm 换算 m)',\n '曲线力:Fq = T·l/R',\n '曲线合成:Fs = |Fq − Fz|;直线区段 Fs = Fz',\n '垂直力:Fc = g_j·l₁ + G_d',\n '坡度角:θ = atan(Fc/Fs),弧度转度',\n '坡度比(垂直∶水平)= 1∶n,n = Fs/Fc',\n '限值(直线 θ ≥ 8°;曲线 6° ≤ θ ≤ 16°)',\n ],\n references: [\n '教材通行近似:之字力 Fz = 4·T·a/l、曲线力 Fq = T·l/R',\n '罗健等《高速铁路接触网定位器坡度问题的深化研究》,铁道工程学报 2013, 30(1): 76-80(300 km/h 及以上坡度限值口径)',\n '在线参考:https://www.itswe.com/calculator/steady-arm/',\n ],\n scope: [\n '接触线张力 T:1 ~ 40 kN',\n '拉出值 a:50 ~ 500 mm',\n '跨距 l:5 ~ 80 m',\n '曲线半径 R:500 ~ 12000 m(undefined 表示直线)',\n '接触线单位重 g_j:0.001 ~ 0.1 kN/m',\n '定位器自重 G_d:0 ~ 0.5 kN',\n '限值适用于 300 km/h 及以上高铁;中低速线路坡度限值可不同',\n '未计入风荷载、定位器长度方向倾斜与零部件公差',\n ],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/steady-arm/',\n};\n","export { steadyArmMeta } from './meta';\n\n/** 定位器坡度校核的输入参数 */\nexport interface SteadyArmInput {\n /** 接触线张力 T,kN */\n readonly contactWireTensionKN: number;\n /** 拉出值 a,mm(内部换算 m) */\n readonly staggerMM: number;\n /** 跨距 l,m */\n readonly spanM: number;\n /** 曲线半径 R,m。undefined 表示直线区段 */\n readonly curveRadiusM?: number;\n /** 第一吊弦距定位点距离 l₁,m */\n readonly firstDropperOffsetM: number;\n /** 接触线单位重 g_j,kN/m */\n readonly wireWeightKNPerM: number;\n /** 定位器自重 G_d,kN */\n readonly regulatorSelfWeightKN: number;\n}\n\n/** 定位器受力与坡度角计算结果 */\nexport interface SteadyArmAngleResult {\n /** 直线之字力 Fz,kN */\n readonly staggerForceKN: number;\n /** 曲线力 Fq,kN(直线区段为 0) */\n readonly curveForceKN: number;\n /** 水平合成力 Fs,kN(直线为 Fz;曲线为 |Fq − Fz|) */\n readonly horizontalForceKN: number;\n /** 垂直力 Fc,kN */\n readonly verticalForceKN: number;\n /** 坡度角 θ = atan(Fc/Fs),度 */\n readonly angleDeg: number;\n /** 坡度比(垂直∶水平)= 1∶n,n = Fs/Fc */\n readonly slopeRatio: number;\n /** 是否为直线区段 */\n readonly isStraight: boolean;\n}\n\n/** 定位器坡度校核结果 */\nexport interface SteadyArmCheckResult extends SteadyArmAngleResult {\n /** 是否满足限值要求 */\n readonly passes: boolean;\n /** 判定理由 */\n readonly reason: string;\n}\n\n/**\n * 定位器坡度计算(纯函数):\n * Fz = 4·T·a/l (直线之字力,a 由 mm 换算 m)\n * Fq = T·l/R (曲线力)\n * Fs = |Fq − Fz| (曲线合成,直线时 Fs = Fz)\n * Fc = g_j·l₁ + G_d (垂直力)\n * θ = atan(Fc/Fs) (坡度角,弧度转度)\n * n = Fs/Fc (坡度比 1∶n)\n */\nexport function steadyArmAngleDeg(input: SteadyArmInput): SteadyArmAngleResult {\n const {\n contactWireTensionKN: T,\n staggerMM,\n spanM: l,\n curveRadiusM,\n firstDropperOffsetM: l1,\n wireWeightKNPerM: gJ,\n regulatorSelfWeightKN: gD,\n } = input;\n\n if (!(T > 0)) {\n throw new RangeError(`接触线张力必须为正数,收到 ${T} kN`);\n }\n if (!(staggerMM > 0)) {\n throw new RangeError(`拉出值必须为正数,收到 ${staggerMM} mm`);\n }\n if (!(l > 0)) {\n throw new RangeError(`跨距必须为正数,收到 ${l} m`);\n }\n if (curveRadiusM !== undefined && !(curveRadiusM > 0)) {\n throw new RangeError(`曲线半径必须为正数,收到 ${curveRadiusM} m`);\n }\n if (!(l1 >= 0)) {\n throw new RangeError(`第一吊弦距定位点距离不能为负,收到 ${l1} m`);\n }\n if (!(gJ >= 0)) {\n throw new RangeError(`接触线单位重不能为负,收到 ${gJ} kN/m`);\n }\n if (!(gD >= 0)) {\n throw new RangeError(`定位器自重不能为负,收到 ${gD} kN`);\n }\n\n const isStraight = curveRadiusM === undefined;\n\n const aM = staggerMM * 1e-3;\n const fz = (4 * T * aM) / l;\n\n let fq = 0;\n let fs = fz;\n if (!isStraight) {\n const R = curveRadiusM as number;\n fq = (T * l) / R;\n fs = Math.abs(fq - fz);\n }\n\n const fc = gJ * l1 + gD;\n\n if (!(fs > 0)) {\n throw new RangeError(\n `水平合成力 Fs = ${fs} kN 须为正数(曲线力与之字力相等时坡度无意义),请复核输入`,\n );\n }\n if (!(fc > 0)) {\n throw new RangeError(\n `垂直力 Fc = ${fc} kN 须为正数,请复核接触线单位重 / 定位器自重`,\n );\n }\n\n const angleDeg = (Math.atan(fc / fs) * 180) / Math.PI;\n const slopeRatio = fs / fc;\n\n return {\n staggerForceKN: fz,\n curveForceKN: fq,\n horizontalForceKN: fs,\n verticalForceKN: fc,\n angleDeg,\n slopeRatio,\n isStraight,\n };\n}\n\n/**\n * 定位器坡度限值校核。\n *\n * 限值(300 km/h 及以上高铁期刊口径,罗健等《高速铁路接触网定位器坡度问题的深化研究》,\n * 铁道工程学报 2013,30(1):76-80):\n * - 直线区段:θ ≥ 8°\n * - 曲线区段:6° ≤ θ ≤ 16°\n */\nexport function steadyArmCheck(input: SteadyArmInput): SteadyArmCheckResult {\n const base = steadyArmAngleDeg(input);\n\n if (base.isStraight) {\n const passes = base.angleDeg >= 8;\n const reason = passes\n ? `直线区段:θ = ${base.angleDeg.toFixed(4)}° ≥ 8°,满足坡度要求`\n : `直线区段:θ = ${base.angleDeg.toFixed(4)}° < 8°,不满足坡度要求(需 ≥ 8°)`;\n return { ...base, passes, reason };\n }\n\n const passes = base.angleDeg >= 6 && base.angleDeg <= 16;\n const reason = passes\n ? `曲线区段:θ = ${base.angleDeg.toFixed(4)}° 位于 6° ~ 16° 区间,满足坡度要求`\n : `曲线区段:θ = ${base.angleDeg.toFixed(4)}° 超出 6° ~ 16° 区间,不满足坡度要求`;\n return { ...base, passes, reason };\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,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY;AAAA,EACZ,QAAQ;AACV;;;ACsBO,SAAS,kBAAkB,OAA6C;AAC7E,QAAM;AAAA,IACJ,sBAAsB;AAAA,IACtB;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,qBAAqB;AAAA,IACrB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,EACzB,IAAI;AAEJ,MAAI,EAAE,IAAI,IAAI;AACZ,UAAM,IAAI,WAAW,kFAAiB,CAAC,KAAK;AAAA,EAC9C;AACA,MAAI,EAAE,YAAY,IAAI;AACpB,UAAM,IAAI,WAAW,sEAAe,SAAS,KAAK;AAAA,EACpD;AACA,MAAI,EAAE,IAAI,IAAI;AACZ,UAAM,IAAI,WAAW,gEAAc,CAAC,IAAI;AAAA,EAC1C;AACA,MAAI,iBAAiB,UAAa,EAAE,eAAe,IAAI;AACrD,UAAM,IAAI,WAAW,4EAAgB,YAAY,IAAI;AAAA,EACvD;AACA,MAAI,EAAE,MAAM,IAAI;AACd,UAAM,IAAI,WAAW,0GAAqB,EAAE,IAAI;AAAA,EAClD;AACA,MAAI,EAAE,MAAM,IAAI;AACd,UAAM,IAAI,WAAW,kFAAiB,EAAE,OAAO;AAAA,EACjD;AACA,MAAI,EAAE,MAAM,IAAI;AACd,UAAM,IAAI,WAAW,4EAAgB,EAAE,KAAK;AAAA,EAC9C;AAEA,QAAM,aAAa,iBAAiB;AAEpC,QAAM,KAAK,YAAY;AACvB,QAAM,KAAM,IAAI,IAAI,KAAM;AAE1B,MAAI,KAAK;AACT,MAAI,KAAK;AACT,MAAI,CAAC,YAAY;AACf,UAAM,IAAI;AACV,SAAM,IAAI,IAAK;AACf,SAAK,KAAK,IAAI,KAAK,EAAE;AAAA,EACvB;AAEA,QAAM,KAAK,KAAK,KAAK;AAErB,MAAI,EAAE,KAAK,IAAI;AACb,UAAM,IAAI;AAAA,MACR,uCAAc,EAAE;AAAA,IAClB;AAAA,EACF;AACA,MAAI,EAAE,KAAK,IAAI;AACb,UAAM,IAAI;AAAA,MACR,2BAAY,EAAE;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,WAAY,KAAK,KAAK,KAAK,EAAE,IAAI,MAAO,KAAK;AACnD,QAAM,aAAa,KAAK;AAExB,SAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAUO,SAAS,eAAe,OAA6C;AAC1E,QAAM,OAAO,kBAAkB,KAAK;AAEpC,MAAI,KAAK,YAAY;AACnB,UAAMA,UAAS,KAAK,YAAY;AAChC,UAAMC,UAASD,UACX,0CAAY,KAAK,SAAS,QAAQ,CAAC,CAAC,gEACpC,0CAAY,KAAK,SAAS,QAAQ,CAAC,CAAC;AACxC,WAAO,EAAE,GAAG,MAAM,QAAAA,SAAQ,QAAAC,QAAO;AAAA,EACnC;AAEA,QAAM,SAAS,KAAK,YAAY,KAAK,KAAK,YAAY;AACtD,QAAM,SAAS,SACX,0CAAY,KAAK,SAAS,QAAQ,CAAC,CAAC,4FACpC,0CAAY,KAAK,SAAS,QAAQ,CAAC,CAAC;AACxC,SAAO,EAAE,GAAG,MAAM,QAAQ,OAAO;AACnC;","names":["passes","reason"]}
@@ -0,0 +1,58 @@
1
+ // src/pole-capacity/meta.ts
2
+ var poleCapacityMeta = {
3
+ name: "\u652F\u67F1\u5BB9\u91CF\u9009\u578B\u6821\u6838",
4
+ nameEn: "Mast Capacity Selection Check",
5
+ summary: "\u5BB9\u91CF\u6BD4\u8F83\u6CD5\uFF1A\u60AC\u6302\u6C34\u5E73\u529B\u4E0E\u652F\u67F1\u98CE\u8F7D\u5408\u6210\u5DE5\u4F5C\u5F2F\u77E9\uFF0C\u5BF9\u7167 GB/T 25020.1 \u94A2\u652F\u67F1\u68C0\u9A8C\u5F2F\u77E9\u7CFB\u5217\u9009\u578B\u3002",
6
+ formula: [
7
+ "\u76F4\u7EBF\u4E4B\u5B57\u529B F_z = 4(T_j+T_c)\xB7a/l\uFF1B\u66F2\u7EBF\u529B F_q = (T_j+T_c)\xB7l/R",
8
+ "\u5DE5\u4F5C\u5F2F\u77E9 M = F_h\xB7h_e + P\xB7b\xB7h\xB2/2 + F_wl\xB7h_e",
9
+ "\u627F\u8F7D\u529B\u68C0\u9A8C\u5F2F\u77E9 = 1.5 \xD7 \u6807\u79F0\u5BB9\u91CF\uFF0825020.1 \u8868 A.2 \u8868\u503C\u89C4\u5F8B\uFF09"
10
+ ],
11
+ references: [
12
+ "\u94A2\u67F1\u76F4\u63A5\u4F9D\u636E\uFF1AGB/T 25020.1-2025 \u7B2C 5.1.1 \u6761 + \u9644\u5F55 A \u68C0\u9A8C\u5F2F\u77E9\u7CFB\u5217",
13
+ "\u540C\u53E3\u5F84\u6DF7\u51DD\u571F\u67F1\u6761\u6B3E\uFF1ATB/T 2286-2020 \u7B2C 5.9.2 \u6761\uFF08\u8377\u8F7D\u77E2\u91CF\u7EC4\u5408\u4E0D\u5927\u4E8E\u68C0\u9A8C\u5F2F\u77E9\uFF09",
14
+ "\u5206\u9879\u7CFB\u6570\u6781\u9650\u72B6\u6001\u6CD5\uFF08GB/T 32578-2016 6.3.3 \u8868 15\uFF09\u4E3A\u8BBE\u8BA1\u6B63\u5F0F\u53E3\u5F84\uFF0C\u4E0D\u53EF\u6DF7\u7528"
15
+ ],
16
+ scope: ["\u5F20\u529B\uFF1A5~45 kN", "\u8DE8\u8DDD\uFF1A30~90 m", "\u98CE\u538B\uFF1A100~1500 Pa", "\u652F\u67F1\u9AD8\uFF1A5~20 m"],
17
+ 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",
18
+ online: "https://www.itswe.com/calculator/pole-capacity/"
19
+ };
20
+
21
+ // src/pole-capacity/index.ts
22
+ var STEEL_POLE_SERIES_KNM = [150, 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 750, 900, 1050, 1200, 1500];
23
+ var TEST_MOMENT_FACTOR = 1.5;
24
+ function poleCapacityCheck(input) {
25
+ const { section, contactWireTensionKN, messengerTensionKN, staggerMM, spanM, resultantHeightM, windPressurePa, poleWidthM, poleHeightM, wireWindLoadN } = input;
26
+ if (!(contactWireTensionKN >= 0) || !(messengerTensionKN >= 0)) throw new RangeError("\u5F20\u529B\u4E0D\u80FD\u4E3A\u8D1F");
27
+ const T = contactWireTensionKN + messengerTensionKN;
28
+ const a = staggerMM / 1e3;
29
+ const Fz = 4 * T * a / spanM;
30
+ let Fh;
31
+ if (section === "curve") {
32
+ if (!(input.curveRadiusM && input.curveRadiusM > 0)) throw new RangeError("\u66F2\u7EBF\u534A\u5F84\u5FC5\u987B\u4E3A\u6B63");
33
+ const Fq = T * spanM / input.curveRadiusM;
34
+ Fh = Math.abs(Fq - Fz);
35
+ } else {
36
+ Fh = Fz;
37
+ }
38
+ const M1 = Fh * resultantHeightM;
39
+ const M2 = windPressurePa * poleWidthM * Math.pow(poleHeightM, 2) / 2 / 1e3;
40
+ const M3 = (wireWindLoadN ?? 0) * resultantHeightM / 1e3;
41
+ const M = M1 + M2 + M3;
42
+ const nomNeed = M / TEST_MOMENT_FACTOR;
43
+ const pick = STEEL_POLE_SERIES_KNM.find((n) => n >= nomNeed) ?? null;
44
+ return {
45
+ horizontalForceN: Fh * 1e3,
46
+ workMomentKNM: M,
47
+ nominalNeedKNM: nomNeed,
48
+ selection: pick ? "G" + pick : null
49
+ };
50
+ }
51
+
52
+ export {
53
+ poleCapacityMeta,
54
+ STEEL_POLE_SERIES_KNM,
55
+ TEST_MOMENT_FACTOR,
56
+ poleCapacityCheck
57
+ };
58
+ //# sourceMappingURL=chunk-VXVTT6WS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pole-capacity/meta.ts","../src/pole-capacity/index.ts"],"sourcesContent":["import type { CalculatorMeta } from '../types';\n\nexport const poleCapacityMeta: CalculatorMeta = {\n name: '支柱容量选型校核',\n nameEn: 'Mast Capacity Selection Check',\n summary: '容量比较法:悬挂水平力与支柱风载合成工作弯矩,对照 GB/T 25020.1 钢支柱检验弯矩系列选型。',\n formula: [\n '直线之字力 F_z = 4(T_j+T_c)·a/l;曲线力 F_q = (T_j+T_c)·l/R',\n '工作弯矩 M = F_h·h_e + P·b·h²/2 + F_wl·h_e',\n '承载力检验弯矩 = 1.5 × 标称容量(25020.1 表 A.2 表值规律)',\n ],\n references: [\n '钢柱直接依据:GB/T 25020.1-2025 第 5.1.1 条 + 附录 A 检验弯矩系列',\n '同口径混凝土柱条款:TB/T 2286-2020 第 5.9.2 条(荷载矢量组合不大于检验弯矩)',\n '分项系数极限状态法(GB/T 32578-2016 6.3.3 表 15)为设计正式口径,不可混用',\n ],\n scope: ['张力:5~45 kN', '跨距:30~90 m', '风压:100~1500 Pa', '支柱高:5~20 m'],\n disclaimer: '本工具结果仅供参考,工程应用以设计文件为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/pole-capacity/',\n};\n","export { poleCapacityMeta } from './meta';\n\n/** GB/T 25020.1-2025 格构式钢支柱标称容量系列(表 A.2),kN·m */\nexport const STEEL_POLE_SERIES_KNM = [150, 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 750, 900, 1050, 1200, 1500] as const;\n\n/** 承载力检验弯矩 = 1.5 × 标称容量(25020.1 表 A.2 表值规律) */\nexport const TEST_MOMENT_FACTOR = 1.5;\n\n/** 支柱容量校核输入。单位:kN、m、mm、Pa。 */\nexport interface PoleCapacityInput {\n /** 区段类型 */\n readonly section: 'line' | 'curve';\n /** 接触线张力 T_j,kN */\n readonly contactWireTensionKN: number;\n /** 承力索张力 T_c,kN */\n readonly messengerTensionKN: number;\n /** 拉出值 a,mm */\n readonly staggerMM: number;\n /** 跨距 l,m */\n readonly spanM: number;\n /** 曲线半径 R,m(曲线区段) */\n readonly curveRadiusM?: number;\n /** 水平力合力作用高度 h_e,m */\n readonly resultantHeightM: number;\n /** 设计最大风压 P,Pa */\n readonly windPressurePa: number;\n /** 支柱迎风宽度 b,m */\n readonly poleWidthM: number;\n /** 支柱高度 h,m */\n readonly poleHeightM: number;\n /** 线索风载 F_wl,N */\n readonly wireWindLoadN?: number;\n}\n\nexport interface PoleCapacityResult {\n /** 悬挂水平力 F_h,N */\n readonly horizontalForceN: number;\n /** 工作弯矩 M,kN·m */\n readonly workMomentKNM: number;\n /** 折合标称容量(÷1.5),kN·m */\n readonly nominalNeedKNM: number;\n /** 选型结果 */\n readonly selection: string | null;\n}\n\n/** 支柱容量选型(容量比较法,TB/T 2286 5.9.2 检验弯矩口径;钢柱 25020.1 5.1.1+附录A) */\nexport function poleCapacityCheck(input: PoleCapacityInput): PoleCapacityResult {\n const { section, contactWireTensionKN, messengerTensionKN, staggerMM, spanM, resultantHeightM, windPressurePa, poleWidthM, poleHeightM, wireWindLoadN } = input;\n if (!(contactWireTensionKN >= 0) || !(messengerTensionKN >= 0)) throw new RangeError('张力不能为负');\n const T = contactWireTensionKN + messengerTensionKN;\n const a = staggerMM / 1e3;\n const Fz = (4 * T * a) / spanM; // kN\n let Fh: number;\n if (section === 'curve') {\n if (!(input.curveRadiusM && input.curveRadiusM > 0)) throw new RangeError('曲线半径必须为正');\n const Fq = (T * spanM) / input.curveRadiusM;\n Fh = Math.abs(Fq - Fz);\n } else {\n Fh = Fz;\n }\n const M1 = Fh * resultantHeightM; // 悬挂水平力矩 kN·m\n const M2 = (windPressurePa * poleWidthM * Math.pow(poleHeightM, 2) / 2) / 1e3; // 支柱风载矩\n const M3 = ((wireWindLoadN ?? 0) * resultantHeightM) / 1e3;\n const M = M1 + M2 + M3;\n const nomNeed = M / TEST_MOMENT_FACTOR;\n const pick = STEEL_POLE_SERIES_KNM.find((n) => n >= nomNeed) ?? null;\n return {\n horizontalForceN: Fh * 1e3,\n workMomentKNM: M,\n nominalNeedKNM: nomNeed,\n selection: pick ? 'G' + pick : null,\n };\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,6BAAc,6BAAc,iCAAkB,gCAAY;AAAA,EAClE,YAAY;AAAA,EACZ,QAAQ;AACV;;;AChBO,IAAM,wBAAwB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,IAAI;AAGhH,IAAM,qBAAqB;AAwC3B,SAAS,kBAAkB,OAA8C;AAC9E,QAAM,EAAE,SAAS,sBAAsB,oBAAoB,WAAW,OAAO,kBAAkB,gBAAgB,YAAY,aAAa,cAAc,IAAI;AAC1J,MAAI,EAAE,wBAAwB,MAAM,EAAE,sBAAsB,GAAI,OAAM,IAAI,WAAW,sCAAQ;AAC7F,QAAM,IAAI,uBAAuB;AACjC,QAAM,IAAI,YAAY;AACtB,QAAM,KAAM,IAAI,IAAI,IAAK;AACzB,MAAI;AACJ,MAAI,YAAY,SAAS;AACvB,QAAI,EAAE,MAAM,gBAAgB,MAAM,eAAe,GAAI,OAAM,IAAI,WAAW,kDAAU;AACpF,UAAM,KAAM,IAAI,QAAS,MAAM;AAC/B,SAAK,KAAK,IAAI,KAAK,EAAE;AAAA,EACvB,OAAO;AACL,SAAK;AAAA,EACP;AACA,QAAM,KAAK,KAAK;AAChB,QAAM,KAAM,iBAAiB,aAAa,KAAK,IAAI,aAAa,CAAC,IAAI,IAAK;AAC1E,QAAM,MAAO,iBAAiB,KAAK,mBAAoB;AACvD,QAAM,IAAI,KAAK,KAAK;AACpB,QAAM,UAAU,IAAI;AACpB,QAAM,OAAO,sBAAsB,KAAK,CAAC,MAAM,KAAK,OAAO,KAAK;AAChE,SAAO;AAAA,IACL,kBAAkB,KAAK;AAAA,IACvB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,WAAW,OAAO,MAAM,OAAO;AAAA,EACjC;AACF;","names":[]}
@@ -0,0 +1,42 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }// src/cantilever/meta.ts
2
+ var cantileverMeta = {
3
+ name: "\u8155\u81C2\u9884\u914D\uFF08\u659C\u8155\u81C2\u52FE\u80A1\u4E0B\u6599\uFF09",
4
+ nameEn: "Cantilever Pre-assembly (Pythagorean)",
5
+ summary: "\u6309\u52FE\u80A1\u51E0\u4F55\u8BA1\u7B97\u659C\u8155\u81C2\u4E0B\u6599\u957F\u5EA6\u4E0E\u5B9A\u4F4D\u73AF\u5B89\u88C5\u4F4D\u7F6E\uFF0C\u9644 TB 10758 \u9884\u914D\u5141\u5DEE\u3002",
6
+ formula: [
7
+ "\u659C\u8155\u81C2\u7BA1\u957F L = \u221A(h\xB2+d\xB2) \u2212 \u0394c",
8
+ "\u5B9A\u4F4D\u73AF\u4F4D\u7F6E s = (y_d/h)\xB7\u221A(h\xB2+d\xB2)",
9
+ "\u9884\u914D\u5141\u5DEE \xB15 mm\uFF08TB 10758-2018 \u7B2C 5.10.1 \u6761\uFF09\uFF1B\u5B89\u88C5\u5141\u5DEE \xB120 mm\uFF08\u7B2C 5.10.2 \u6761\uFF09"
10
+ ],
11
+ references: [
12
+ "\u52FE\u80A1\u51E0\u4F55\u4E3A\u5E73\u9762\u51E0\u4F55\u6052\u7B49\u5F0F\uFF08\u51E0\u4F55\u81EA\u8BC1\uFF09",
13
+ "TB 10758-2018 \u7B2C 5.10.1/5.10.2 \u6761\uFF08\u9884\u914D/\u5B89\u88C5\u5141\u5DEE\u5206\u79BB\uFF09",
14
+ "\u7AEF\u90E8\u6263\u51CF \u0394c \u6309 TB/T 2075 \u7CFB\u5217\u96F6\u4EF6\u5C3A\u5BF8"
15
+ ],
16
+ scope: ["\u7AD6\u76F4\u8DDD h\uFF1A0.8~4 m", "\u6C34\u5E73\u6295\u5F71 d\uFF1A0.3~4 m", "\u7AEF\u90E8\u6263\u51CF\uFF1A0~0.6 m"],
17
+ disclaimer: "\u672C\u5DE5\u5177\u7ED3\u679C\u4EC5\u4F9B\u53C2\u8003\uFF0C\u5B9E\u9645\u9884\u914D\u4EE5\u7EBF\u8DEF\u88C5\u914D\u56FE\u4E0E\u96F6\u4EF6\u5B9E\u7269\u5C3A\u5BF8\u4E3A\u51C6\u3002\u8BE6\u89C1 DISCLAIMER.md\u3002",
18
+ online: "https://www.itswe.com/calculator/cantilever/"
19
+ };
20
+
21
+ // src/cantilever/index.ts
22
+ var ASSEMBLY_TOLERANCE_MM = 5;
23
+ function cantileverCut(input) {
24
+ const { verticalOffsetM, horizontalProjectionM, endDeductionM, regHeightM } = input;
25
+ if (!(verticalOffsetM > 0)) throw new RangeError("\u7AD6\u76F4\u8DDD\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + verticalOffsetM + " m");
26
+ if (!(horizontalProjectionM > 0)) throw new RangeError("\u6C34\u5E73\u6295\u5F71\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + horizontalProjectionM + " m");
27
+ const fullLengthM = Math.sqrt(verticalOffsetM * verticalOffsetM + horizontalProjectionM * horizontalProjectionM);
28
+ const cutLengthM = fullLengthM - (_nullishCoalesce(endDeductionM, () => ( 0)));
29
+ let regulatorPosM = null;
30
+ if (regHeightM !== void 0) {
31
+ if (regHeightM > verticalOffsetM) throw new RangeError("\u5B9A\u4F4D\u70B9\u9AD8\u5EA6 y_d \u5E94\u4E0D\u5927\u4E8E\u5E95\u5EA7\u7AD6\u76F4\u8DDD h");
32
+ regulatorPosM = regHeightM / verticalOffsetM * fullLengthM;
33
+ }
34
+ return { fullLengthM, cutLengthM, regulatorPosM, toleranceMM: ASSEMBLY_TOLERANCE_MM };
35
+ }
36
+
37
+
38
+
39
+
40
+
41
+ exports.cantileverMeta = cantileverMeta; exports.ASSEMBLY_TOLERANCE_MM = ASSEMBLY_TOLERANCE_MM; exports.cantileverCut = cantileverCut;
42
+ //# sourceMappingURL=chunk-WGTOBRYV.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-WGTOBRYV.cjs","../src/cantilever/meta.ts","../src/cantilever/index.ts"],"names":[],"mappings":"AAAA;ACEO,IAAM,eAAA,EAAiC;AAAA,EAC5C,IAAA,EAAM,gFAAA;AAAA,EACN,MAAA,EAAQ,uCAAA;AAAA,EACR,OAAA,EAAS,0LAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACP,uEAAA;AAAA,IACA,mEAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,8GAAA;AAAA,IACA,wGAAA;AAAA,IACA;AAAA,EACF,CAAA;AAAA,EACA,KAAA,EAAO,CAAC,mCAAA,EAAiB,yCAAA,EAAkB,uCAAc,CAAA;AAAA,EACzD,UAAA,EAAY,sNAAA;AAAA,EACZ,MAAA,EAAQ;AACV,CAAA;ADAA;AACA;AEjBO,IAAM,sBAAA,EAAwB,CAAA;AA0B9B,SAAS,aAAA,CAAc,KAAA,EAA0C;AACtE,EAAA,MAAM,EAAE,eAAA,EAAiB,qBAAA,EAAuB,aAAA,EAAe,WAAW,EAAA,EAAI,KAAA;AAC9E,EAAA,GAAA,CAAI,CAAA,CAAE,gBAAA,EAAkB,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,gEAAA,EAAgB,gBAAA,EAAkB,IAAI,CAAA;AACvF,EAAA,GAAA,CAAI,CAAA,CAAE,sBAAA,EAAwB,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,sEAAA,EAAiB,sBAAA,EAAwB,IAAI,CAAA;AACpG,EAAA,MAAM,YAAA,EAAc,IAAA,CAAK,IAAA,CAAK,gBAAA,EAAkB,gBAAA,EAAkB,sBAAA,EAAwB,qBAAqB,CAAA;AAC/G,EAAA,MAAM,WAAA,EAAa,YAAA,EAAA,kBAAe,aAAA,UAAiB,GAAA,CAAA;AACnD,EAAA,IAAI,cAAA,EAA+B,IAAA;AACnC,EAAA,GAAA,CAAI,WAAA,IAAe,KAAA,CAAA,EAAW;AAC5B,IAAA,GAAA,CAAI,WAAA,EAAa,eAAA,EAAiB,MAAM,IAAI,UAAA,CAAW,6FAAuB,CAAA;AAC9E,IAAA,cAAA,EAAiB,WAAA,EAAa,gBAAA,EAAmB,WAAA;AAAA,EACnD;AACA,EAAA,OAAO,EAAE,WAAA,EAAa,UAAA,EAAY,aAAA,EAAe,WAAA,EAAa,sBAAsB,CAAA;AACtF;AFNA;AACA;AACE;AACA;AACA;AACF,sIAAC","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-WGTOBRYV.cjs","sourcesContent":[null,"import type { CalculatorMeta } from '../types';\n\nexport const cantileverMeta: CalculatorMeta = {\n name: '腕臂预配(斜腕臂勾股下料)',\n nameEn: 'Cantilever Pre-assembly (Pythagorean)',\n summary: '按勾股几何计算斜腕臂下料长度与定位环安装位置,附 TB 10758 预配允差。',\n formula: [\n '斜腕臂管长 L = √(h²+d²) − Δc',\n '定位环位置 s = (y_d/h)·√(h²+d²)',\n '预配允差 ±5 mm(TB 10758-2018 第 5.10.1 条);安装允差 ±20 mm(第 5.10.2 条)',\n ],\n references: [\n '勾股几何为平面几何恒等式(几何自证)',\n 'TB 10758-2018 第 5.10.1/5.10.2 条(预配/安装允差分离)',\n '端部扣减 Δc 按 TB/T 2075 系列零件尺寸',\n ],\n scope: ['竖直距 h:0.8~4 m', '水平投影 d:0.3~4 m', '端部扣减:0~0.6 m'],\n disclaimer: '本工具结果仅供参考,实际预配以线路装配图与零件实物尺寸为准。详见 DISCLAIMER.md。',\n online: 'https://www.itswe.com/calculator/cantilever/',\n};\n","export { cantileverMeta } from './meta';\n\n/** 腕臂预配安装偏差(TB 10758-2018 第 5.10.1 条),mm */\nexport const ASSEMBLY_TOLERANCE_MM = 5;\n\n/** 斜腕臂勾股下料计算输入。单位:m。 */\nexport interface CantileverInput {\n /** 上下底座竖直距 h,m */\n readonly verticalOffsetM: number;\n /** 下底座至定位点水平投影 d,m */\n readonly horizontalProjectionM: number;\n /** 端部零件扣减 Δc,m */\n readonly endDeductionM?: number;\n /** 定位点至下底座竖直距 y_d,m */\n readonly regHeightM?: number;\n}\n\nexport interface CantileverResult {\n /** 理论斜长 √(h²+d²),m */\n readonly fullLengthM: number;\n /** 下料长度 L = √(h²+d²) − Δc,m */\n readonly cutLengthM: number;\n /** 定位环安装位置 s = (y_d/h)·√(h²+d²),m */\n readonly regulatorPosM: number | null;\n /** 安装允差,mm */\n readonly toleranceMM: number;\n}\n\n/** 斜腕臂勾股下料(几何自证) */\nexport function cantileverCut(input: CantileverInput): CantileverResult {\n const { verticalOffsetM, horizontalProjectionM, endDeductionM, regHeightM } = input;\n if (!(verticalOffsetM > 0)) throw new RangeError('竖直距必须为正,收到 ' + verticalOffsetM + ' m');\n if (!(horizontalProjectionM > 0)) throw new RangeError('水平投影必须为正,收到 ' + horizontalProjectionM + ' m');\n const fullLengthM = Math.sqrt(verticalOffsetM * verticalOffsetM + horizontalProjectionM * horizontalProjectionM);\n const cutLengthM = fullLengthM - (endDeductionM ?? 0);\n let regulatorPosM: number | null = null;\n if (regHeightM !== undefined) {\n if (regHeightM > verticalOffsetM) throw new RangeError('定位点高度 y_d 应不大于底座竖直距 h');\n regulatorPosM = (regHeightM / verticalOffsetM) * fullLengthM;\n }\n return { fullLengthM, cutLengthM, regulatorPosM, toleranceMM: ASSEMBLY_TOLERANCE_MM };\n}\n"]}