ocs-calculators 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +27 -9
- package/dist/{chunk-VXVTT6WS.js → chunk-2YFKWFBJ.js} +2 -1
- package/dist/{chunk-VXVTT6WS.js.map → chunk-2YFKWFBJ.js.map} +1 -1
- package/dist/{chunk-CLVLOLUJ.js → chunk-3LUPNS4U.js} +2 -2
- package/dist/{chunk-CLVLOLUJ.js.map → chunk-3LUPNS4U.js.map} +1 -1
- package/dist/{chunk-LBGUOTCJ.cjs → chunk-AVQ4F6DF.cjs} +2 -2
- package/dist/chunk-AVQ4F6DF.cjs.map +1 -0
- package/dist/{chunk-PYNVEHGR.cjs → chunk-CF663UNG.cjs} +3 -1
- package/dist/chunk-CF663UNG.cjs.map +1 -0
- package/dist/{chunk-C2XU3XKP.js → chunk-Q7UD52SC.js} +3 -1
- package/dist/{chunk-C2XU3XKP.js.map → chunk-Q7UD52SC.js.map} +1 -1
- package/dist/{chunk-4344WWAF.cjs → chunk-R4IVRYJA.cjs} +2 -1
- package/dist/chunk-R4IVRYJA.cjs.map +1 -0
- package/dist/creepage/index.cjs +2 -2
- package/dist/creepage/index.js +1 -1
- package/dist/index.cjs +11 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +20 -20
- package/dist/pole-capacity/index.cjs +2 -2
- package/dist/pole-capacity/index.js +1 -1
- package/dist/sag/index.cjs +2 -2
- package/dist/sag/index.js +1 -1
- package/package.json +10 -10
- package/dist/chunk-4344WWAF.cjs.map +0 -1
- package/dist/chunk-LBGUOTCJ.cjs.map +0 -1
- package/dist/chunk-PYNVEHGR.cjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,31 @@
|
|
|
3
3
|
本文件格式遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),
|
|
4
4
|
版本号遵循[语义化版本](https://semver.org/lang/zh-CN/)。
|
|
5
5
|
|
|
6
|
+
## [0.2.2] - 2026-09-15
|
|
7
|
+
|
|
8
|
+
### 修复
|
|
9
|
+
|
|
10
|
+
- **输入防护补齐**:`sag` 的 `maxSpanFromSagM` 对张力/单位重非正值抛 `RangeError`
|
|
11
|
+
(此前 0 或负数会静默返回 `0` / `NaN` / `Infinity`);`pole-capacity` 的
|
|
12
|
+
`poleCapacityCheck` 对零跨距抛 `RangeError`(此前除零静默返回 `Infinity`)
|
|
13
|
+
- `creepage` 移除比距三档折算中的等值分支死代码(行为不变,统一取档位下限折算)
|
|
14
|
+
|
|
15
|
+
## [0.2.1] - 2026-09-14
|
|
16
|
+
|
|
17
|
+
### 修复
|
|
18
|
+
|
|
19
|
+
- **子路径导出回归**:v0.2.0 新增 8 个模块的 `exports` 键缺 `./` 前缀,
|
|
20
|
+
子路径导入(如 `ocs-calculators/steady-arm`)全部抛
|
|
21
|
+
`ERR_PACKAGE_PATH_NOT_EXPORTED`,已逐键修正
|
|
22
|
+
|
|
23
|
+
## [0.2.0] - 2026-09-14
|
|
24
|
+
|
|
25
|
+
### 新增
|
|
26
|
+
|
|
27
|
+
- **8 个新计算器模块**:steady-arm(定位器坡度)、cross-span(软横跨负载)、
|
|
28
|
+
bvalue(坠砣高度)、sag(弛度)、anchor-length(锚段校核)、creepage(爬电选型)、
|
|
29
|
+
pole-capacity(支柱容量)、cantilever(腕臂预配),共 20 模块 212 测试
|
|
30
|
+
|
|
6
31
|
## [0.1.3] - 2026-09-07
|
|
7
32
|
|
|
8
33
|
### 修复
|
package/README.md
CHANGED
|
@@ -29,6 +29,8 @@
|
|
|
29
29
|
npm install ocs-calculators
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
+
> ⚠️ **请使用 ≥ 0.2.1**。`0.2.0` 曾因子路径 exports 键写错(缺少 `./` 前缀)导致 `import 'ocs-calculators'` 报 `ERR_INVALID_PACKAGE_CONFIG`,已由 `0.2.1` 修复。裸 `npm install ocs-calculators` 会取 latest(0.2.1),无需特殊处理;若你的依赖显式锁了 `@0.2.0`,请升级到 `@0.2.1`。
|
|
33
|
+
|
|
32
34
|
## 快速开始
|
|
33
35
|
|
|
34
36
|
```ts
|
|
@@ -67,11 +69,19 @@ for (const p of curve) {
|
|
|
67
69
|
```ts
|
|
68
70
|
import { windClearanceCheck } from 'ocs-calculators/wind';
|
|
69
71
|
import { wearRatio } from 'ocs-calculators/wear';
|
|
72
|
+
import { steadyArmAngleDeg } from 'ocs-calculators/steady-arm';
|
|
73
|
+
import { crossSpanAnalyze } from 'ocs-calculators/cross-span';
|
|
74
|
+
import { bValue } from 'ocs-calculators/bvalue';
|
|
75
|
+
import { sagMM } from 'ocs-calculators/sag';
|
|
76
|
+
import { anchorLengthCheck } from 'ocs-calculators/anchor-length';
|
|
77
|
+
import { creepageCheck } from 'ocs-calculators/creepage';
|
|
78
|
+
import { poleCapacityCheck } from 'ocs-calculators/pole-capacity';
|
|
79
|
+
import { cantileverCut } from 'ocs-calculators/cantilever';
|
|
70
80
|
```
|
|
71
81
|
|
|
72
|
-
##
|
|
82
|
+
## 20 个计算器(全部实现)
|
|
73
83
|
|
|
74
|
-
对应 <https://www.itswe.com/Category:tools> 的
|
|
84
|
+
对应 <https://www.itswe.com/Category:tools> 的 20 个在线计算器,全部已实现并逐项回归。
|
|
75
85
|
|
|
76
86
|
| 状态 | 计算器 | 模块 | 在线地址 |
|
|
77
87
|
|---|---|---|---|
|
|
@@ -87,9 +97,17 @@ import { wearRatio } from 'ocs-calculators/wear';
|
|
|
87
97
|
| ✅ 已实现 | 电压降校核 | `voltage-drop` | [/calculator/voltage-drop/](https://www.itswe.com/calculator/voltage-drop/) |
|
|
88
98
|
| ✅ 已实现 | 曲线拉出值校核 | `curve-stagger` | [/calculator/curve-stagger/](https://www.itswe.com/calculator/curve-stagger/) |
|
|
89
99
|
| ✅ 已实现 | 覆冰荷载校核 | `icing` | [/calculator/icing/](https://www.itswe.com/calculator/icing/) |
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
100
|
+
| ✅ 已实现 | 弛度速算 | `sag` | [/calculator/sag/](https://www.itswe.com/calculator/sag/) |
|
|
101
|
+
| ✅ 已实现 | b 值(坠砣高度)安装曲线 | `bvalue` | [/calculator/bvalue/](https://www.itswe.com/calculator/bvalue/) |
|
|
102
|
+
| ✅ 已实现 | 绝缘子爬电距离选型校核 | `creepage` | [/calculator/creepage/](https://www.itswe.com/calculator/creepage/) |
|
|
103
|
+
| ✅ 已实现 | 锚段长度张力差校核 | `anchor-length` | [/calculator/anchor-length/](https://www.itswe.com/calculator/anchor-length/) |
|
|
104
|
+
| ✅ 已实现 | 定位器坡度校核 | `steady-arm` | [/calculator/steady-arm/](https://www.itswe.com/calculator/steady-arm/) |
|
|
105
|
+
| ✅ 已实现 | 软横跨负载计算 | `cross-span` | [/calculator/cross-span/](https://www.itswe.com/calculator/cross-span/) |
|
|
106
|
+
| ✅ 已实现 | 支柱容量选型校核 | `pole-capacity` | [/calculator/pole-capacity/](https://www.itswe.com/calculator/pole-capacity/) |
|
|
107
|
+
| ✅ 已实现 | 腕臂预配(勾股下料) | `cantilever` | [/calculator/cantilever/](https://www.itswe.com/calculator/cantilever/) |
|
|
108
|
+
|
|
109
|
+
原 12 个模块的公式与默认参数取自站点 `/calculator/assets/calc-core.js` 源码;
|
|
110
|
+
新增的 8 个模块(sag/bvalue/creepage/anchor-length/steady-arm/cross-span/pole-capacity/cantilever)为站点**内联引擎计算器**(引擎直嵌页面 HTML,不经 calc-core),本仓库按其 online 页面公式提炼,单元测试期望值由公式独立算出,未从服务器渲染结果反推。
|
|
93
111
|
|
|
94
112
|
## 单位约定
|
|
95
113
|
|
|
@@ -118,15 +136,15 @@ console.log(tensionMeta.disclaimer); // 免责声明
|
|
|
118
136
|
|
|
119
137
|
## 与站点实现的同步政策
|
|
120
138
|
|
|
121
|
-
本仓库是 [itswe.com](https://www.itswe.com)
|
|
122
|
-
[`calculator/assets/calc-core.js`](https://www.itswe.com/calculator/assets/calc-core.js):
|
|
139
|
+
本仓库是 [itswe.com](https://www.itswe.com) 在线计算器的公式算法层,同步基准为站点资产:
|
|
123
140
|
|
|
124
|
-
-
|
|
141
|
+
- 原 12 个模块以 [`calculator/assets/calc-core.js`](https://www.itswe.com/calculator/assets/calc-core.js) 为准;
|
|
142
|
+
- 新增 8 个模块(`sag`/`bvalue`/`creepage`/`anchor-length`/`steady-arm`/`cross-span`/`pole-capacity`/`cantilever`)为站点**内联引擎计算器**(引擎直嵌页面 HTML,不经 calc-core),以其 online 页面公式为基准;
|
|
125
143
|
- 站点侧公式变更时,本仓库同步更新并补充/修订对应测试;
|
|
126
144
|
- 本仓库的公式变更同样会回流站点,两边的计算结果保持一致;
|
|
127
145
|
- `meta.ts` 中的参考依据(标准号 + 年份)随两侧更新同步修订。
|
|
128
146
|
|
|
129
|
-
|
|
147
|
+
当前同步状态:20 个模块与站点一致(2026-09-14 校验,212 项测试全绿)。
|
|
130
148
|
|
|
131
149
|
## ⚠️ 免责声明
|
|
132
150
|
|
|
@@ -24,6 +24,7 @@ var TEST_MOMENT_FACTOR = 1.5;
|
|
|
24
24
|
function poleCapacityCheck(input) {
|
|
25
25
|
const { section, contactWireTensionKN, messengerTensionKN, staggerMM, spanM, resultantHeightM, windPressurePa, poleWidthM, poleHeightM, wireWindLoadN } = input;
|
|
26
26
|
if (!(contactWireTensionKN >= 0) || !(messengerTensionKN >= 0)) throw new RangeError("\u5F20\u529B\u4E0D\u80FD\u4E3A\u8D1F");
|
|
27
|
+
if (!(spanM > 0)) throw new RangeError("\u8DE8\u8DDD\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + spanM + " m");
|
|
27
28
|
const T = contactWireTensionKN + messengerTensionKN;
|
|
28
29
|
const a = staggerMM / 1e3;
|
|
29
30
|
const Fz = 4 * T * a / spanM;
|
|
@@ -55,4 +56,4 @@ export {
|
|
|
55
56
|
TEST_MOMENT_FACTOR,
|
|
56
57
|
poleCapacityCheck
|
|
57
58
|
};
|
|
58
|
-
//# sourceMappingURL=chunk-
|
|
59
|
+
//# sourceMappingURL=chunk-2YFKWFBJ.js.map
|
|
@@ -1 +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":[]}
|
|
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 if (!(spanM > 0)) throw new RangeError('跨距必须为正,收到 ' + spanM + ' m');\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,MAAI,EAAE,QAAQ,GAAI,OAAM,IAAI,WAAW,4DAAe,QAAQ,IAAI;AAClE,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":[]}
|
|
@@ -30,7 +30,7 @@ function creepageCheck(input) {
|
|
|
30
30
|
const kv = input.maxVoltageKV ?? 29;
|
|
31
31
|
const uscdBands = USCD_BANDS.map((b) => ({
|
|
32
32
|
label: b.label,
|
|
33
|
-
mm:
|
|
33
|
+
mm: Math.round(b.min * kv)
|
|
34
34
|
}));
|
|
35
35
|
return { floorMM, passes: input.creepageMM >= floorMM, uscdBands };
|
|
36
36
|
}
|
|
@@ -42,4 +42,4 @@ export {
|
|
|
42
42
|
USCD_BANDS,
|
|
43
43
|
creepageCheck
|
|
44
44
|
};
|
|
45
|
-
//# sourceMappingURL=chunk-
|
|
45
|
+
//# sourceMappingURL=chunk-3LUPNS4U.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/creepage/meta.ts","../src/creepage/index.ts"],"sourcesContent":["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:
|
|
1
|
+
{"version":3,"sources":["../src/creepage/meta.ts","../src/creepage/index.ts"],"sourcesContent":["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: Math.round(b.min * kv),\n }));\n return { floorMM, passes: input.creepageMM >= floorMM, uscdBands };\n}\n"],"mappings":";AAEO,IAAM,eAA+B;AAAA,EAC1C,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,IACP;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,OAAO,CAAC,6CAAoB,sDAAmB;AAAA,EAC/C,YAAY;AAAA,EACZ,QAAQ;AACV;;;ACfO,IAAM,yBAAyB;AAE/B,IAAM,sBAAsB;AAG5B,IAAM,aAAa;AAAA,EACxB,EAAE,OAAO,gBAAM,KAAK,IAAI,KAAK,GAAG;AAAA,EAChC,EAAE,OAAO,sBAAO,KAAK,IAAI,KAAK,GAAG;AAAA,EACjC,EAAE,OAAO,gBAAM,KAAK,IAAI,KAAK,SAAS;AACxC;AAGO,SAAS,cAAc,OAS5B;AACA,QAAM,UAAW,MAAM,aAAa,SAAS,sBAAsB;AACnE,QAAM,KAAK,MAAM,gBAAgB;AACjC,QAAM,YAAY,WAAW,IAAI,CAAC,OAAO;AAAA,IACvC,OAAO,EAAE;AAAA,IACT,IAAI,KAAK,MAAM,EAAE,MAAM,EAAE;AAAA,EAC3B,EAAE;AACF,SAAO,EAAE,SAAS,QAAQ,MAAM,cAAc,SAAS,UAAU;AACnE;","names":[]}
|
|
@@ -30,7 +30,7 @@ function creepageCheck(input) {
|
|
|
30
30
|
const kv = _nullishCoalesce(input.maxVoltageKV, () => ( 29));
|
|
31
31
|
const uscdBands = USCD_BANDS.map((b) => ({
|
|
32
32
|
label: b.label,
|
|
33
|
-
mm:
|
|
33
|
+
mm: Math.round(b.min * kv)
|
|
34
34
|
}));
|
|
35
35
|
return { floorMM, passes: input.creepageMM >= floorMM, uscdBands };
|
|
36
36
|
}
|
|
@@ -42,4 +42,4 @@ function creepageCheck(input) {
|
|
|
42
42
|
|
|
43
43
|
|
|
44
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-
|
|
45
|
+
//# sourceMappingURL=chunk-AVQ4F6DF.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-AVQ4F6DF.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,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,IAAA,EAAM,EAAE;AAAA,EAC3B,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-AVQ4F6DF.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: Math.round(b.min * kv),\n }));\n return { floorMM, passes: input.creepageMM >= floorMM, uscdBands };\n}\n"]}
|
|
@@ -32,6 +32,8 @@ function tensionFromSagKN(weightNPerM, spanM, sagMM2) {
|
|
|
32
32
|
return weightNPerM * spanM * spanM / (8 * sagM) / 1e3;
|
|
33
33
|
}
|
|
34
34
|
function maxSpanFromSagM(weightNPerM, tensionKN, sagLimitMM) {
|
|
35
|
+
if (!(tensionKN > 0)) throw new RangeError("\u5F20\u529B\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + tensionKN + " kN");
|
|
36
|
+
if (!(weightNPerM > 0)) throw new RangeError("\u5355\u4F4D\u91CD\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + weightNPerM + " N/m");
|
|
35
37
|
if (!(sagLimitMM > 0)) throw new RangeError("\u9650\u503C\u5F1B\u5EA6\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + sagLimitMM + " mm");
|
|
36
38
|
const sagM = sagLimitMM / 1e3;
|
|
37
39
|
return Math.sqrt(8 * tensionKN * 1e3 * sagM / weightNPerM);
|
|
@@ -43,4 +45,4 @@ function maxSpanFromSagM(weightNPerM, tensionKN, sagLimitMM) {
|
|
|
43
45
|
|
|
44
46
|
|
|
45
47
|
exports.sagMeta = sagMeta; exports.sagMM = sagMM; exports.tensionFromSagKN = tensionFromSagKN; exports.maxSpanFromSagM = maxSpanFromSagM;
|
|
46
|
-
//# sourceMappingURL=chunk-
|
|
48
|
+
//# sourceMappingURL=chunk-CF663UNG.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-CF663UNG.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,UAAA,EAAY,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,0DAAA,EAAe,UAAA,EAAY,KAAK,CAAA;AAC3E,EAAA,GAAA,CAAI,CAAA,CAAE,YAAA,EAAc,CAAA,CAAA,EAAI,MAAM,IAAI,UAAA,CAAW,gEAAA,EAAgB,YAAA,EAAc,MAAM,CAAA;AACjF,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-CF663UNG.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 (!(tensionKN > 0)) throw new RangeError('张力必须为正,收到 ' + tensionKN + ' kN');\n if (!(weightNPerM > 0)) throw new RangeError('单位重必须为正,收到 ' + weightNPerM + ' N/m');\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"]}
|
|
@@ -32,6 +32,8 @@ function tensionFromSagKN(weightNPerM, spanM, sagMM2) {
|
|
|
32
32
|
return weightNPerM * spanM * spanM / (8 * sagM) / 1e3;
|
|
33
33
|
}
|
|
34
34
|
function maxSpanFromSagM(weightNPerM, tensionKN, sagLimitMM) {
|
|
35
|
+
if (!(tensionKN > 0)) throw new RangeError("\u5F20\u529B\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + tensionKN + " kN");
|
|
36
|
+
if (!(weightNPerM > 0)) throw new RangeError("\u5355\u4F4D\u91CD\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + weightNPerM + " N/m");
|
|
35
37
|
if (!(sagLimitMM > 0)) throw new RangeError("\u9650\u503C\u5F1B\u5EA6\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + sagLimitMM + " mm");
|
|
36
38
|
const sagM = sagLimitMM / 1e3;
|
|
37
39
|
return Math.sqrt(8 * tensionKN * 1e3 * sagM / weightNPerM);
|
|
@@ -43,4 +45,4 @@ export {
|
|
|
43
45
|
tensionFromSagKN,
|
|
44
46
|
maxSpanFromSagM
|
|
45
47
|
};
|
|
46
|
-
//# sourceMappingURL=chunk-
|
|
48
|
+
//# sourceMappingURL=chunk-Q7UD52SC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sag/meta.ts","../src/sag/index.ts"],"sourcesContent":["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"],"mappings":";AAEO,IAAM,UAA0B;AAAA,EACrC,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,EACF;AAAA,EACA,OAAO,CAAC,+BAAgB,8BAAe,oCAAgB;AAAA,EACvD,YAAY;AAAA,EACZ,QAAQ;AACV;;;ACLO,SAAS,MAAM,OAAyB;AAC7C,QAAM,EAAE,WAAW,OAAO,YAAY,IAAI;AAC1C,MAAI,EAAE,YAAY,GAAI,OAAM,IAAI,WAAW,4DAAe,YAAY,KAAK;AAC3E,MAAI,EAAE,QAAQ,GAAI,OAAM,IAAI,WAAW,4DAAe,QAAQ,IAAI;AAClE,MAAI,EAAE,eAAe,GAAI,OAAM,IAAI,WAAW,kEAAgB,cAAc,MAAM;AAClF,QAAM,OAAQ,cAAc,QAAQ,SAAU,IAAI,YAAY;AAC9D,SAAO,OAAO;AAChB;AAGO,SAAS,iBAAiB,aAAqB,OAAeA,QAAuB;AAC1F,MAAI,EAAEA,SAAQ,GAAI,OAAM,IAAI,WAAW,4DAAeA,SAAQ,KAAK;AACnE,QAAM,OAAOA,SAAQ;AACrB,SAAQ,cAAc,QAAQ,SAAU,IAAI,QAAQ;AACtD;AAGO,SAAS,gBAAgB,aAAqB,WAAmB,YAA4B;AAClG,MAAI,EAAE,aAAa,GAAI,OAAM,IAAI,WAAW,wEAAiB,aAAa,KAAK;AAC/E,QAAM,OAAO,aAAa;AAC1B,SAAO,KAAK,KAAM,IAAI,YAAY,MAAM,OAAQ,WAAW;AAC7D;","names":["sagMM"]}
|
|
1
|
+
{"version":3,"sources":["../src/sag/meta.ts","../src/sag/index.ts"],"sourcesContent":["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 (!(tensionKN > 0)) throw new RangeError('张力必须为正,收到 ' + tensionKN + ' kN');\n if (!(weightNPerM > 0)) throw new RangeError('单位重必须为正,收到 ' + weightNPerM + ' N/m');\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"],"mappings":";AAEO,IAAM,UAA0B;AAAA,EACrC,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,EACF;AAAA,EACA,OAAO,CAAC,+BAAgB,8BAAe,oCAAgB;AAAA,EACvD,YAAY;AAAA,EACZ,QAAQ;AACV;;;ACLO,SAAS,MAAM,OAAyB;AAC7C,QAAM,EAAE,WAAW,OAAO,YAAY,IAAI;AAC1C,MAAI,EAAE,YAAY,GAAI,OAAM,IAAI,WAAW,4DAAe,YAAY,KAAK;AAC3E,MAAI,EAAE,QAAQ,GAAI,OAAM,IAAI,WAAW,4DAAe,QAAQ,IAAI;AAClE,MAAI,EAAE,eAAe,GAAI,OAAM,IAAI,WAAW,kEAAgB,cAAc,MAAM;AAClF,QAAM,OAAQ,cAAc,QAAQ,SAAU,IAAI,YAAY;AAC9D,SAAO,OAAO;AAChB;AAGO,SAAS,iBAAiB,aAAqB,OAAeA,QAAuB;AAC1F,MAAI,EAAEA,SAAQ,GAAI,OAAM,IAAI,WAAW,4DAAeA,SAAQ,KAAK;AACnE,QAAM,OAAOA,SAAQ;AACrB,SAAQ,cAAc,QAAQ,SAAU,IAAI,QAAQ;AACtD;AAGO,SAAS,gBAAgB,aAAqB,WAAmB,YAA4B;AAClG,MAAI,EAAE,YAAY,GAAI,OAAM,IAAI,WAAW,4DAAe,YAAY,KAAK;AAC3E,MAAI,EAAE,cAAc,GAAI,OAAM,IAAI,WAAW,kEAAgB,cAAc,MAAM;AACjF,MAAI,EAAE,aAAa,GAAI,OAAM,IAAI,WAAW,wEAAiB,aAAa,KAAK;AAC/E,QAAM,OAAO,aAAa;AAC1B,SAAO,KAAK,KAAM,IAAI,YAAY,MAAM,OAAQ,WAAW;AAC7D;","names":["sagMM"]}
|
|
@@ -24,6 +24,7 @@ var TEST_MOMENT_FACTOR = 1.5;
|
|
|
24
24
|
function poleCapacityCheck(input) {
|
|
25
25
|
const { section, contactWireTensionKN, messengerTensionKN, staggerMM, spanM, resultantHeightM, windPressurePa, poleWidthM, poleHeightM, wireWindLoadN } = input;
|
|
26
26
|
if (!(contactWireTensionKN >= 0) || !(messengerTensionKN >= 0)) throw new RangeError("\u5F20\u529B\u4E0D\u80FD\u4E3A\u8D1F");
|
|
27
|
+
if (!(spanM > 0)) throw new RangeError("\u8DE8\u8DDD\u5FC5\u987B\u4E3A\u6B63\uFF0C\u6536\u5230 " + spanM + " m");
|
|
27
28
|
const T = contactWireTensionKN + messengerTensionKN;
|
|
28
29
|
const a = staggerMM / 1e3;
|
|
29
30
|
const Fz = 4 * T * a / spanM;
|
|
@@ -55,4 +56,4 @@ function poleCapacityCheck(input) {
|
|
|
55
56
|
|
|
56
57
|
|
|
57
58
|
exports.poleCapacityMeta = poleCapacityMeta; exports.STEEL_POLE_SERIES_KNM = STEEL_POLE_SERIES_KNM; exports.TEST_MOMENT_FACTOR = TEST_MOMENT_FACTOR; exports.poleCapacityCheck = poleCapacityCheck;
|
|
58
|
-
//# sourceMappingURL=chunk-
|
|
59
|
+
//# sourceMappingURL=chunk-R4IVRYJA.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-R4IVRYJA.cjs","../src/pole-capacity/meta.ts","../src/pole-capacity/index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-R4IVRYJA.cjs","sourcesContent":[null,"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 if (!(spanM > 0)) throw new RangeError('跨距必须为正,收到 ' + spanM + ' m');\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"]}
|
package/dist/creepage/index.cjs
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunkAVQ4F6DFcjs = require('../chunk-AVQ4F6DF.cjs');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
exports.CREEPAGE_FLOOR_GENERAL =
|
|
14
|
+
exports.CREEPAGE_FLOOR_GENERAL = _chunkAVQ4F6DFcjs.CREEPAGE_FLOOR_GENERAL; exports.CREEPAGE_FLOOR_VCUT = _chunkAVQ4F6DFcjs.CREEPAGE_FLOOR_VCUT; exports.USCD_BANDS = _chunkAVQ4F6DFcjs.USCD_BANDS; exports.creepageCheck = _chunkAVQ4F6DFcjs.creepageCheck; exports.creepageMeta = _chunkAVQ4F6DFcjs.creepageMeta;
|
|
15
15
|
//# sourceMappingURL=index.cjs.map
|
package/dist/creepage/index.js
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -25,14 +25,14 @@ var _chunkNBHEOJ5Acjs = require('./chunk-NBHEOJ5A.cjs');
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
var _chunk5INEDXRYcjs = require('./chunk-5INEDXRY.cjs');
|
|
29
28
|
|
|
29
|
+
var _chunkFVESJBUDcjs = require('./chunk-FVESJBUD.cjs');
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
var
|
|
35
|
+
var _chunk5INEDXRYcjs = require('./chunk-5INEDXRY.cjs');
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
|
|
@@ -47,34 +47,34 @@ var _chunk4UU7WA7Ncjs = require('./chunk-4UU7WA7N.cjs');
|
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
|
|
50
|
-
var _chunkJ2UXRMTUcjs = require('./chunk-J2UXRMTU.cjs');
|
|
51
50
|
|
|
51
|
+
var _chunkRPKDEFSJcjs = require('./chunk-RPKDEFSJ.cjs');
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
|
|
58
|
-
var
|
|
58
|
+
var _chunkP6KUGPHDcjs = require('./chunk-P6KUGPHD.cjs');
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
|
|
65
|
-
var
|
|
65
|
+
var _chunkJ2UXRMTUcjs = require('./chunk-J2UXRMTU.cjs');
|
|
66
66
|
|
|
67
67
|
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
|
|
71
|
-
var
|
|
71
|
+
var _chunkR4IVRYJAcjs = require('./chunk-R4IVRYJA.cjs');
|
|
72
72
|
|
|
73
73
|
|
|
74
74
|
|
|
75
75
|
|
|
76
76
|
|
|
77
|
-
var
|
|
77
|
+
var _chunkCF663UNGcjs = require('./chunk-CF663UNG.cjs');
|
|
78
78
|
|
|
79
79
|
|
|
80
80
|
|
|
@@ -105,12 +105,12 @@ var _chunkCSLI5HEJcjs = require('./chunk-CSLI5HEJ.cjs');
|
|
|
105
105
|
|
|
106
106
|
|
|
107
107
|
|
|
108
|
-
var _chunkHXALVJ4Gcjs = require('./chunk-HXALVJ4G.cjs');
|
|
109
108
|
|
|
109
|
+
var _chunkWGTOBRYVcjs = require('./chunk-WGTOBRYV.cjs');
|
|
110
110
|
|
|
111
111
|
|
|
112
112
|
|
|
113
|
-
var
|
|
113
|
+
var _chunkHXALVJ4Gcjs = require('./chunk-HXALVJ4G.cjs');
|
|
114
114
|
|
|
115
115
|
|
|
116
116
|
|
|
@@ -127,7 +127,7 @@ var _chunkDGO2DCO5cjs = require('./chunk-DGO2DCO5.cjs');
|
|
|
127
127
|
|
|
128
128
|
|
|
129
129
|
|
|
130
|
-
var
|
|
130
|
+
var _chunkAVQ4F6DFcjs = require('./chunk-AVQ4F6DF.cjs');
|
|
131
131
|
|
|
132
132
|
|
|
133
133
|
|
|
@@ -333,5 +333,5 @@ function findAmpacityA(params) {
|
|
|
333
333
|
|
|
334
334
|
|
|
335
335
|
|
|
336
|
-
exports.AIR_DENSITY_KG_PER_M3 = _chunkFVESJBUDcjs.AIR_DENSITY_KG_PER_M3; exports.ASSEMBLY_TOLERANCE_MM = _chunkWGTOBRYVcjs.ASSEMBLY_TOLERANCE_MM; exports.CONVENTIONAL_MARGIN_MM = _chunk5Q6IASB2cjs.CONVENTIONAL_MARGIN_MM; exports.COPPER_ALLOY_ALPHA_PER_DEG_C = COPPER_ALLOY_ALPHA_PER_DEG_C; exports.COPPER_ALPHA_PER_DEG_C = _chunkDGO2DCO5cjs.COPPER_ALPHA_PER_DEG_C; exports.CREEPAGE_FLOOR_GENERAL =
|
|
336
|
+
exports.AIR_DENSITY_KG_PER_M3 = _chunkFVESJBUDcjs.AIR_DENSITY_KG_PER_M3; exports.ASSEMBLY_TOLERANCE_MM = _chunkWGTOBRYVcjs.ASSEMBLY_TOLERANCE_MM; exports.CONVENTIONAL_MARGIN_MM = _chunk5Q6IASB2cjs.CONVENTIONAL_MARGIN_MM; exports.COPPER_ALLOY_ALPHA_PER_DEG_C = COPPER_ALLOY_ALPHA_PER_DEG_C; exports.COPPER_ALPHA_PER_DEG_C = _chunkDGO2DCO5cjs.COPPER_ALPHA_PER_DEG_C; exports.CREEPAGE_FLOOR_GENERAL = _chunkAVQ4F6DFcjs.CREEPAGE_FLOOR_GENERAL; exports.CREEPAGE_FLOOR_VCUT = _chunkAVQ4F6DFcjs.CREEPAGE_FLOOR_VCUT; exports.DEFAULT_BASE_AMBIENT_TEMP_DEG_C = _chunkNBFOB2PIcjs.DEFAULT_BASE_AMBIENT_TEMP_DEG_C; exports.DEFAULT_ICE_DENSITY_KG_PER_M3 = _chunkP6KUGPHDcjs.DEFAULT_ICE_DENSITY_KG_PER_M3; exports.DEFAULT_MIN_END_VOLTAGE_V = _chunkRVP3IU2Lcjs.DEFAULT_MIN_END_VOLTAGE_V; exports.DEFAULT_PANTOGRAPH_HEIGHT_M = _chunk4UU7WA7Ncjs.DEFAULT_PANTOGRAPH_HEIGHT_M; exports.DEFAULT_REPLACEMENT_THRESHOLD_PERCENT = _chunk5INEDXRYcjs.DEFAULT_REPLACEMENT_THRESHOLD_PERCENT; exports.DEFAULT_WARN_THRESHOLD = _chunkNBHEOJ5Acjs.DEFAULT_WARN_THRESHOLD; exports.G0 = _chunkP6KUGPHDcjs.G0; exports.IACS_RESISTIVITY_OHM_MM2_PER_M = _chunkDGO2DCO5cjs.IACS_RESISTIVITY_OHM_MM2_PER_M; exports.MIN_MARGIN_MM = _chunk5Q6IASB2cjs.MIN_MARGIN_MM; exports.REFERENCE_DENSITY_G_PER_CM3 = REFERENCE_DENSITY_G_PER_CM3; exports.REF_TARGET_COEFF = _chunkRPKDEFSJcjs.REF_TARGET_COEFF; exports.REF_TARGET_OFFSET_N = _chunkRPKDEFSJcjs.REF_TARGET_OFFSET_N; exports.STANDARD_GAUGE_M = _chunk4UU7WA7Ncjs.STANDARD_GAUGE_M; exports.STANDARD_UNIT_WEIGHT_KG_PER_KM = STANDARD_UNIT_WEIGHT_KG_PER_KM; exports.STEEL_POLE_SERIES_KNM = _chunkR4IVRYJAcjs.STEEL_POLE_SERIES_KNM; exports.TB2809_AMPACITY_A = TB2809_AMPACITY_A; exports.TB2809_WIRE_PARAMS = _chunkMTAYG3U2cjs.TB2809_WIRE_PARAMS; exports.TENSION_DIFF_RATIO = _chunkCSLI5HEJcjs.TENSION_DIFF_RATIO; exports.TEST_MOMENT_FACTOR = _chunkR4IVRYJAcjs.TEST_MOMENT_FACTOR; exports.TRANSMISSION_RATIOS = _chunk5Q6IASB2cjs.TRANSMISSION_RATIOS; exports.USCD_BANDS = _chunkAVQ4F6DFcjs.USCD_BANDS; exports.WIRE_PRESETS = WIRE_PRESETS; exports.ampacityDeratingFactor = _chunkNBFOB2PIcjs.ampacityDeratingFactor; exports.ampacityMeta = _chunkNBFOB2PIcjs.ampacityMeta; exports.anchorLengthCheck = _chunkCSLI5HEJcjs.anchorLengthCheck; exports.anchorLengthMeta = _chunkCSLI5HEJcjs.anchorLengthMeta; exports.assessContactForce = _chunkRPKDEFSJcjs.assessContactForce; exports.bValue = _chunkHXALVJ4Gcjs.bValue; exports.bvalueMeta = _chunkHXALVJ4Gcjs.bvalueMeta; exports.cantShiftM = _chunk4UU7WA7Ncjs.cantShiftM; exports.cantileverCut = _chunkWGTOBRYVcjs.cantileverCut; exports.cantileverMeta = _chunkWGTOBRYVcjs.cantileverMeta; exports.copperMeta = _chunkMTAYG3U2cjs.copperMeta; exports.creepageCheck = _chunkAVQ4F6DFcjs.creepageCheck; exports.creepageMeta = _chunkAVQ4F6DFcjs.creepageMeta; exports.crossSpanAnalyze = _chunkX25CXRVEcjs.crossSpanAnalyze; exports.crossSpanMeta = _chunkX25CXRVEcjs.crossSpanMeta; exports.curveStaggerCheck = _chunk4UU7WA7Ncjs.curveStaggerCheck; exports.curveStaggerMeta = _chunk4UU7WA7Ncjs.curveStaggerMeta; exports.deratedAmpacityA = _chunkNBFOB2PIcjs.deratedAmpacityA; exports.deriveLinearMassKgPerM = deriveLinearMassKgPerM; exports.dropperLengths = _chunkJ2UXRMTUcjs.dropperLengths; exports.dropperMeta = _chunkJ2UXRMTUcjs.dropperMeta; exports.dropperPositionsM = _chunkJ2UXRMTUcjs.dropperPositionsM; exports.elongationMM = _chunk5Q6IASB2cjs.elongationMM; exports.equivalentSpanM = _chunk3ERFRRHZcjs.equivalentSpanM; exports.findAmpacityA = findAmpacityA; exports.findWirePreset = findWirePreset; exports.forceMeta = _chunkRPKDEFSJcjs.forceMeta; exports.iceLoadNPerM = _chunkP6KUGPHDcjs.iceLoadNPerM; exports.icingCheck = _chunkP6KUGPHDcjs.icingCheck; exports.icingMeta = _chunkP6KUGPHDcjs.icingMeta; exports.kmHToMPerS = _chunkNBHEOJ5Acjs.kmHToMPerS; exports.maxParabolaSagM = _chunkJ2UXRMTUcjs.maxParabolaSagM; exports.maxSpanFromSagM = _chunkCF663UNGcjs.maxSpanFromSagM; exports.naturalFrequencyHz = _chunkNBHEOJ5Acjs.naturalFrequencyHz; exports.parabolaSagM = _chunkJ2UXRMTUcjs.parabolaSagM; exports.poleCapacityCheck = _chunkR4IVRYJAcjs.poleCapacityCheck; exports.poleCapacityMeta = _chunkR4IVRYJAcjs.poleCapacityMeta; exports.referenceTargetForceN = _chunkRPKDEFSJcjs.referenceTargetForceN; exports.requiredStrokeMM = _chunk5Q6IASB2cjs.requiredStrokeMM; exports.resistanceAtTempOhmPerKm = _chunkDGO2DCO5cjs.resistanceAtTempOhmPerKm; exports.sagM = _chunk3ERFRRHZcjs.sagM; exports.sagMM = _chunkCF663UNGcjs.sagMM; exports.sagMeta = _chunkCF663UNGcjs.sagMeta; exports.sectionFromDiameterMM2 = _chunk5INEDXRYcjs.sectionFromDiameterMM2; exports.shortCircuitCheck = _chunkNBFOB2PIcjs.shortCircuitCheck; exports.shortCircuitMinSectionMM2 = _chunkNBFOB2PIcjs.shortCircuitMinSectionMM2; exports.solveTensionN = _chunk3ERFRRHZcjs.solveTensionN; exports.stateCoefficientK = _chunk3ERFRRHZcjs.stateCoefficientK; exports.statisticalForcesN = _chunkRPKDEFSJcjs.statisticalForcesN; exports.steadyArmAngleDeg = _chunk57J7I6JAcjs.steadyArmAngleDeg; exports.steadyArmCheck = _chunk57J7I6JAcjs.steadyArmCheck; exports.steadyArmMeta = _chunk57J7I6JAcjs.steadyArmMeta; exports.strokeCheck = _chunk5Q6IASB2cjs.strokeCheck; exports.strokeMeta = _chunk5Q6IASB2cjs.strokeMeta; exports.tensionAt = _chunk3ERFRRHZcjs.tensionAt; exports.tensionCurve = _chunk3ERFRRHZcjs.tensionCurve; exports.tensionFromSagKN = _chunkCF663UNGcjs.tensionFromSagKN; exports.tensionMeta = _chunk3ERFRRHZcjs.tensionMeta; exports.unitWeightToKgPerM = unitWeightToKgPerM; exports.versineM = _chunk4UU7WA7Ncjs.versineM; exports.voltageDropCheck = _chunkRVP3IU2Lcjs.voltageDropCheck; exports.voltageDropMeta = _chunkRVP3IU2Lcjs.voltageDropMeta; exports.wavePropagationSpeedMPerS = _chunkNBHEOJ5Acjs.wavePropagationSpeedMPerS; exports.waveSpeedCheck = _chunkNBHEOJ5Acjs.waveSpeedCheck; exports.wavespeedMeta = _chunkNBHEOJ5Acjs.wavespeedMeta; exports.wearMeta = _chunk5INEDXRYcjs.wearMeta; exports.wearRatio = _chunk5INEDXRYcjs.wearRatio; exports.weightOfPresetNPerM = weightOfPresetNPerM; exports.weightPerLengthNPerM = weightPerLengthNPerM; exports.windClearanceCheck = _chunkFVESJBUDcjs.windClearanceCheck; exports.windDeflectionM = _chunkFVESJBUDcjs.windDeflectionM; exports.windLoadNPerM = _chunkFVESJBUDcjs.windLoadNPerM; exports.windMeta = _chunkFVESJBUDcjs.windMeta; exports.wireLookup = _chunkMTAYG3U2cjs.wireLookup;
|
|
337
337
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/index.cjs","../src/data/wire-specs.ts","../src/data/tb2809-ampacity.ts"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACA;AC5FO,IAAM,4BAAA,EAA8B,IAAA;AAUpC,IAAM,+BAAA,EAAyE;AAAA,EACpF,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,EAAS;AACX,CAAA;AAGO,SAAS,kBAAA,CAAmB,OAAA,EAAyB;AAC1D,EAAA,OAAO,QAAA,EAAU,GAAA;AACnB;AAYO,SAAS,sBAAA,CACd,eAAA,EACA,eAAA,EAAyB,2BAAA,EACjB;AAER,EAAA,OAAO,gBAAA,EAAkB,KAAA,EAAO,eAAA,EAAiB,GAAA;AACnD;AAGO,IAAM,6BAAA,EAA+B,KAAA;AAErC,IAAM,aAAA,EAAoC;AAAA,EAC/C;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA,EAAM,sCAAA;AAAA,IACN,MAAA,EAAQ,4BAAA;AAAA,IACR,eAAA,EAAiB,GAAA;AAAA,IACjB,oBAAA,EAAsB,GAAA;AAAA,IACtB,iBAAA,EAAmB,GAAA;AAAA,IACnB,gBAAA,EAAkB,4BAAA;AAAA,IAClB,gBAAA,EAAkB,kBAAA,CAAmB,8BAAA,CAA+B,OAAO;AAAA,EAC7E,CAAA;AAAA,EACA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA,EAAM,sCAAA;AAAA,IACN,MAAA,EAAQ,4BAAA;AAAA,IACR,eAAA,EAAiB,GAAA;AAAA,IACjB,oBAAA,EAAsB,GAAA;AAAA,IACtB,iBAAA,EAAmB,GAAA;AAAA,IACnB,gBAAA,EAAkB,4BAAA;AAAA,IAClB,gBAAA,EAAkB,kBAAA,CAAmB,8BAAA,CAA+B,OAAO;AAAA,EAC7E,CAAA;AAAA,EACA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA,EAAM,sCAAA;AAAA,IACN,MAAA,EAAQ,4BAAA;AAAA,IACR,eAAA,EAAiB,GAAA;AAAA,IACjB,oBAAA,EAAsB,GAAA;AAAA,IACtB,iBAAA,EAAmB,GAAA;AAAA,IACnB,gBAAA,EAAkB,4BAAA;AAAA,IAClB,gBAAA,EAAkB,kBAAA,CAAmB,8BAAA,CAA+B,OAAO;AAAA,EAC7E;AACF,CAAA;AAGO,SAAS,cAAA,CAAe,EAAA,EAAkC;AAC/D,EAAA,OAAO,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,GAAA,IAAO,EAAE,CAAA;AAC7C;AAMO,SAAS,oBAAA,CAAqB,gBAAA,EAAkC;AACrE,EAAA,OAAO,iBAAA,EAAmB,oBAAA;AAC5B;AAKO,SAAS,mBAAA,CAAoB,IAAA,EAAwB;AAC1D,EAAA,OAAO,oBAAA,CAAqB,IAAA,CAAK,gBAAgB,CAAA;AACnD;ADsDA;AACA;AEnJA,IAAM,EAAA,EAAI,CACR,IAAA,EACA,UAAA,EACA,QAAA,EACA,QAAA,EACA,SAAA,EACA,SAAA,EACA,UAAA,EAAA,GACoB;AACpB,EAAA,MAAM,WAAA,EAAuE;AAAA,IAC3E,CAAC,WAAA,EAAa,QAAQ,CAAA;AAAA,IACtB,CAAC,YAAA,EAAc,SAAS,CAAA;AAAA,IACxB,CAAC,YAAA,EAAc,SAAS,CAAA;AAAA,IACxB,CAAC,aAAA,EAAe,UAAU;AAAA,EAC5B,CAAA;AACA,EAAA,MAAM,IAAA,EAAuB,CAAC,CAAA;AAC9B,EAAA,IAAA,CAAA,MAAW,QAAA,GAAW,QAAA,EAAU;AAC9B,IAAA,IAAA,CAAA,MAAW,CAAC,SAAA,EAAW,IAAI,EAAA,GAAK,UAAA,EAAY;AAC1C,MAAA,MAAM,MAAA,EAAQ,QAAA,IAAY,IAAA,EAAM,IAAA,CAAK,CAAC,EAAA,EAAI,IAAA,CAAK,CAAC,CAAA;AAChD,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,IAAA;AAAA,QACA,UAAA;AAAA,QACA,eAAA,EAAiB,OAAA;AAAA,QACjB,SAAA;AAAA,QACA,SAAA,mBAAW,KAAA,UAAS;AAAA,MACtB,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT,CAAA;AAEO,IAAM,kBAAA,EAA8C;AAAA,EACzD,GAAG,CAAA,CAAE,IAAA,EAAM,QAAA,EAAK,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,IAAA,EAAM,IAAI,CAAA,EAAG,CAAC,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,EAC9E,GAAG,CAAA,CAAE,KAAA,EAAO,cAAA,EAAM,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAC,CAAA;AAAA,EAC5E,GAAG,CAAA,CAAE,KAAA,EAAO,cAAA,EAAM,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAC,CAAA;AAAA,EAC5E,GAAG,CAAA,CAAE,MAAA,EAAQ,cAAA,EAAM,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAC,CAAA;AAAA,EAC7E,GAAG,CAAA,CAAE,MAAA,EAAQ,cAAA,EAAM,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAC,CAAA;AAAA,EAC7E,GAAG,CAAA,CAAE,KAAA,EAAO,cAAA,EAAM,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAC,CAAA;AAAA,EAC5E,GAAG,CAAA,CAAE,MAAA,EAAQ,cAAA,EAAM,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAC,CAAA;AAAA,EAC7E,GAAG,CAAA,CAAE,MAAA,EAAQ,cAAA,EAAM,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAC,CAAA;AAAA,EAC7E,GAAG,CAAA,CAAE,MAAA,EAAQ,oBAAA,EAAO,CAAC,GAAG,CAAA,EAAG,CAAC,IAAA,EAAM,GAAG,CAAA,EAAG,CAAC,IAAA,EAAM,GAAG,CAAA,EAAG,CAAC,IAAA,EAAM,GAAG,CAAA,EAAG,CAAC,IAAA,EAAM,GAAG,CAAC;AAC/E,CAAA;AAMO,SAAS,aAAA,CAAc,MAAA,EAIA;AAC5B,EAAA,MAAM,IAAA,EAAM,iBAAA,CAAkB,IAAA;AAAA,IAC5B,CAAC,CAAA,EAAA,GACC,CAAA,CAAE,KAAA,IAAS,MAAA,CAAO,KAAA,GAClB,CAAA,CAAE,gBAAA,IAAoB,MAAA,CAAO,gBAAA,GAC7B,CAAA,CAAE,UAAA,IAAc,MAAA,CAAO;AAAA,EAC3B,CAAA;AACA,EAAA,OAAO,IAAA,IAAQ,KAAA,EAAA,EAAY,KAAA,EAAA,EAAY,GAAA,CAAI,SAAA;AAC7C;AFgIA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,gqMAAC","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/index.cjs","sourcesContent":[null,"import { G0 } from '../types';\n\n/**\n * 接触线线材参数预设。\n *\n * ⚠️ 全部为标称参考值,实际取值以产品技术条件与设计文件为准。\n * ⚠️ 本站计算器的参数界面支持手工覆盖这些值 —— 那才是工程上正确的用法。\n *\n * 自重口径(2026-08-31 已确定):\n * 线密度取标准「参考单位质量」表值,而非由标称截面推算。标准表分两列:\n * 型号|标称截面|计算截面|参考单位质量\n * CT 120|120|121|1082 kg/km\n * 注:参考单位质量按密度 8.94 g/cm³ 计算\n * 即标准的 8.94 g/cm³ 是配「计算截面」(把尺寸公差计入后的截面)用的,\n * 不是配「标称截面」用的:121 × 8.94 × 1e-3 = 1.0817 ≈ 1.082 kg/m。\n * 因此 CTMH-120 自重 g = 1.082 × 9.81 = 10.61442 N/m,\n * 与站点 /calculator/tension/ 预设 rho=1.082、COPPER_TABLE.unitWeight=1082 一致。\n * 早期版本用标称截面 120 直接推算得 1.0728 kg/m,偏低约 0.85%,已废弃。\n *\n * 依据:TB/T 2810-2017(纯铜)、TB/T 2821-2017(铜银)规格尺寸表;\n * CTMH/CTAH 型号口径与 TB/T 2809-2017 的对应关系见 copper 模块 note 字段。\n */\n\nexport interface WireSpec {\n /** 唯一标识 */\n readonly id: WirePresetId;\n /** 中文名 */\n readonly name: string;\n /** 英文名 */\n readonly nameEn: string;\n /** 标称截面积 A,mm² */\n readonly crossSectionMM2: number;\n /** 计算截面积,mm²(标准表列,自重按此值 × 8.94 g/cm³ 计) */\n readonly calculatedSectionMM2: number;\n /** 弹性模量 E,GPa(标称参考值) */\n readonly elasticModulusGPa: number;\n /** 线膨胀系数 α,1/℃(标称参考值) */\n readonly expansionPerDegC: number;\n /** 线密度,kg/m(标准参考单位质量) */\n readonly linearMassKgPerM: number;\n}\n\n/** 参考密度,g/cm³(标准注:参考单位质量按此密度计) */\nexport const REFERENCE_DENSITY_G_PER_CM3 = 8.94;\n\n/** 线材预设 id */\nexport type WirePresetId = 'cthm120' | 'cthm150' | 'ctha120';\n\n/**\n * 标准「参考单位质量」表,kg/km。\n * 与 `src/copper/index.ts` 的 TB2809_WIRE_PARAMS.unitWeightKgPerKm 同源\n * (站点 /calculator/assets/calc-core.js 的 COPPER_TABLE)。\n */\nexport const STANDARD_UNIT_WEIGHT_KG_PER_KM: Readonly<Record<WirePresetId, number>> = {\n cthm120: 1082,\n cthm150: 1350,\n ctha120: 1070,\n};\n\n/** 由标准参考单位质量换算线密度,kg/m */\nexport function unitWeightToKgPerM(kgPerKm: number): number {\n return kgPerKm / 1000;\n}\n\n/**\n * 由截面积与密度反算线密度。\n *\n * ⚠️ 传入的必须是「计算截面」而非「标称截面」,否则结果偏低约 0.85%。\n * 120 mm² 标称对应计算截面 121 mm²;150 mm² 标称对应 151 mm²。\n *\n * @param crossSectionMM2 计算截面积,mm²\n * @param densityGPerCm3 密度,g/cm³\n * @returns 线密度,kg/m\n */\nexport function deriveLinearMassKgPerM(\n crossSectionMM2: number,\n densityGPerCm3: number = REFERENCE_DENSITY_G_PER_CM3,\n): number {\n // A[mm²] × 1e-6 [m²/mm²] × ρ[g/cm³] × 1000 [kg/m³ per g/cm³]\n return crossSectionMM2 * 1e-6 * densityGPerCm3 * 1000;\n}\n\n/** 铜及铜合金接触线的常用线膨胀系数,1/℃ */\nexport const COPPER_ALLOY_ALPHA_PER_DEG_C = 1.7e-5;\n\nexport const WIRE_PRESETS: readonly WireSpec[] = [\n {\n id: 'cthm120',\n name: 'CTMH-120(铜镁 120)',\n nameEn: 'CTMH-120 (CuMg 120 mm²)',\n crossSectionMM2: 120,\n calculatedSectionMM2: 121,\n elasticModulusGPa: 120,\n expansionPerDegC: COPPER_ALLOY_ALPHA_PER_DEG_C,\n linearMassKgPerM: unitWeightToKgPerM(STANDARD_UNIT_WEIGHT_KG_PER_KM.cthm120),\n },\n {\n id: 'cthm150',\n name: 'CTMH-150(铜镁 150)',\n nameEn: 'CTMH-150 (CuMg 150 mm²)',\n crossSectionMM2: 150,\n calculatedSectionMM2: 151,\n elasticModulusGPa: 120,\n expansionPerDegC: COPPER_ALLOY_ALPHA_PER_DEG_C,\n linearMassKgPerM: unitWeightToKgPerM(STANDARD_UNIT_WEIGHT_KG_PER_KM.cthm150),\n },\n {\n id: 'ctha120',\n name: 'CTAH-120(铜银 120)',\n nameEn: 'CTAH-120 (CuAg 120 mm²)',\n crossSectionMM2: 120,\n calculatedSectionMM2: 121,\n elasticModulusGPa: 120,\n expansionPerDegC: COPPER_ALLOY_ALPHA_PER_DEG_C,\n linearMassKgPerM: unitWeightToKgPerM(STANDARD_UNIT_WEIGHT_KG_PER_KM.ctha120),\n },\n];\n\n/** 按 id 取线材预设,找不到返回 undefined */\nexport function findWirePreset(id: string): WireSpec | undefined {\n return WIRE_PRESETS.find((w) => w.id === id);\n}\n\n/**\n * 由线密度求单位自重荷载 g,N/m。\n * @param linearMassKgPerM 线密度,kg/m\n */\nexport function weightPerLengthNPerM(linearMassKgPerM: number): number {\n return linearMassKgPerM * G0;\n}\n\n/**\n * 由线材预设直接取单位自重荷载 g,N/m。\n */\nexport function weightOfPresetNPerM(spec: WireSpec): number {\n return weightPerLengthNPerM(spec.linearMassKgPerM);\n}\n","/**\n * TB/T 2809-2017 表5 持续载流量参考值(A)。\n *\n * 来源:itswe.com 标准规范库,据 TB/T 2809-2017 无水印全文扫描件逐格复核。\n *\n * 查表语义:\n * - 返回数值:该项载流量\n * - 返回 null:该 (材质, 截面) 规格存在,但该工况按标准原文注\"不需要考核\"\n * (如纯铜接触线不考核 150℃ 工况)\n * - 返回 undefined:该材质无此截面规格(如铜铬锆无 120 mm²)\n *\n * ⚠️ 表中为室内(无风无日照试验条件)值与室外值;工程取值请以标准原文与\n * 产品技术条件为准。高海拔、隧道内等场景须另行叠加散热修正。\n */\n\nexport type ContactWireTypeCode =\n | 'CT'\n | 'CTA'\n | 'CTS'\n | 'CTSM'\n | 'CTSH'\n | 'CTM'\n | 'CTMM'\n | 'CTMH'\n | 'CTCZ';\n\n/** 载流量考核工况 */\nexport type AmpacityCondition = 'indoor-95' | 'outdoor-95' | 'indoor-150' | 'outdoor-150';\n\nexport type CrossSectionMM2 = 120 | 150;\n\n/** 按截面索引的载流量对,[120 mm², 150 mm²] */\ntype SectionPair = readonly [number | null, number | null];\n\nexport interface AmpacityEntry {\n readonly type: ContactWireTypeCode;\n readonly materialZh: string;\n /** 标称截面,mm² */\n readonly crossSectionMM2: CrossSectionMM2;\n readonly condition: AmpacityCondition;\n /** 持续载流量,A。null 表示该项不需要考核 */\n readonly ampacityA: number | null;\n}\n\nconst M = (\n type: ContactWireTypeCode,\n materialZh: string,\n sections: readonly CrossSectionMM2[],\n indoor95: SectionPair,\n outdoor95: SectionPair,\n indoor150: SectionPair,\n outdoor150: SectionPair,\n): AmpacityEntry[] => {\n const conditions: ReadonlyArray<readonly [AmpacityCondition, SectionPair]> = [\n ['indoor-95', indoor95],\n ['outdoor-95', outdoor95],\n ['indoor-150', indoor150],\n ['outdoor-150', outdoor150],\n ];\n const out: AmpacityEntry[] = [];\n for (const section of sections) {\n for (const [condition, pair] of conditions) {\n const value = section === 120 ? pair[0] : pair[1];\n out.push({\n type,\n materialZh,\n crossSectionMM2: section,\n condition,\n ampacityA: value ?? null,\n });\n }\n }\n return out;\n};\n\nexport const TB2809_AMPACITY_A: readonly AmpacityEntry[] = [\n ...M('CT', '铜', [120, 150], [360, 425], [495, 570], [null, null], [null, null]),\n ...M('CTA', '铜银', [120, 150], [360, 425], [495, 570], [515, 620], [680, 785]),\n ...M('CTS', '铜锡', [120, 150], [360, 425], [490, 565], [515, 620], [680, 790]),\n ...M('CTSM', '铜锡', [120, 150], [330, 400], [455, 525], [490, 560], [630, 730]),\n ...M('CTSH', '铜锡', [120, 150], [310, 360], [420, 480], [450, 520], [580, 670]),\n ...M('CTM', '铜镁', [120, 150], [330, 400], [455, 525], [490, 560], [630, 730]),\n ...M('CTMM', '铜镁', [120, 150], [310, 360], [420, 480], [450, 520], [580, 670]),\n ...M('CTMH', '铜镁', [120, 150], [300, 340], [410, 460], [430, 500], [560, 650]),\n ...M('CTCZ', '铜铬锆', [150], [null, 395], [null, 505], [null, 580], [null, 710]),\n];\n\n/**\n * 查表。\n * @returns 载流量 A;该规格存在但不考核时为 null;该材质无此截面时为 undefined\n */\nexport function findAmpacityA(params: {\n type: ContactWireTypeCode;\n crossSectionMM2: CrossSectionMM2;\n condition: AmpacityCondition;\n}): number | null | undefined {\n const row = TB2809_AMPACITY_A.find(\n (e) =>\n e.type === params.type &&\n e.crossSectionMM2 === params.crossSectionMM2 &&\n e.condition === params.condition,\n );\n return row === undefined ? undefined : row.ampacityA;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/index.cjs","../src/data/wire-specs.ts","../src/data/tb2809-ampacity.ts"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACA;AC5FO,IAAM,4BAAA,EAA8B,IAAA;AAUpC,IAAM,+BAAA,EAAyE;AAAA,EACpF,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,EAAS;AACX,CAAA;AAGO,SAAS,kBAAA,CAAmB,OAAA,EAAyB;AAC1D,EAAA,OAAO,QAAA,EAAU,GAAA;AACnB;AAYO,SAAS,sBAAA,CACd,eAAA,EACA,eAAA,EAAyB,2BAAA,EACjB;AAER,EAAA,OAAO,gBAAA,EAAkB,KAAA,EAAO,eAAA,EAAiB,GAAA;AACnD;AAGO,IAAM,6BAAA,EAA+B,KAAA;AAErC,IAAM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AM,GAAG,CAAC;AAC/E,CAAA;AAMO,SAAS,aAAA,CAAc,MAAA,EAIA;AAC5B,EAAA,MAAM,IAAA,EAAM,iBAAA,CAAkB,IAAA;AAAA,IAC5B,CAAC,CAAA,EAAA,GACC,CAAA,CAAE,KAAA,IAAS,MAAA,CAAO,KAAA,GAClB,CAAA,CAAE,gBAAA,IAAoB,MAAA,CAAO,gBAAA,GAC7B,CAAA,CAAE,UAAA,IAAc,MAAA,CAAO;AAAA,EAC3B,CAAA;AACA,EAAA,OAAO,IAAA,IAAQ,KAAA,EAAA,EAAY,KAAA,EAAA,EAAY,GAAA,CAAI,SAAA;AAC7C;AFgIA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,gqMAAC","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/index.cjs","sourcesContent":[null,"import { G0 } from '../types';\n\n/**\n * 接触线线材参数预设。\n *\n * ⚠️ 全部为标称参考值,实际取值以产品技术条件与设计文件为准。\n * ⚠️ 本站计算器的参数界面支持手工覆盖这些值 —— 那才是工程上正确的用法。\n *\n * 自重口径(2026-08-31 已确定):\n * 线密度取标准「参考单位质量」表值,而非由标称截面推算。标准表分两列:\n * 型号|标称截面|计算截面|参考单位质量\n * CT 120|120|121|1082 kg/km\n * 注:参考单位质量按密度 8.94 g/cm³ 计算\n * 即标准的 8.94 g/cm³ 是配「计算截面」(把尺寸公差计入后的截面)用的,\n * 不是配「标称截面」用的:121 × 8.94 × 1e-3 = 1.0817 ≈ 1.082 kg/m。\n * 因此 CTMH-120 自重 g = 1.082 × 9.81 = 10.61442 N/m,\n * 与站点 /calculator/tension/ 预设 rho=1.082、COPPER_TABLE.unitWeight=1082 一致。\n * 早期版本用标称截面 120 直接推算得 1.0728 kg/m,偏低约 0.85%,已废弃。\n *\n * 依据:TB/T 2810-2017(纯铜)、TB/T 2821-2017(铜银)规格尺寸表;\n * CTMH/CTAH 型号口径与 TB/T 2809-2017 的对应关系见 copper 模块 note 字段。\n */\n\nexport interface WireSpec {\n /** 唯一标识 */\n readonly id: WirePresetId;\n /** 中文名 */\n readonly name: string;\n /** 英文名 */\n readonly nameEn: string;\n /** 标称截面积 A,mm² */\n readonly crossSectionMM2: number;\n /** 计算截面积,mm²(标准表列,自重按此值 × 8.94 g/cm³ 计) */\n readonly calculatedSectionMM2: number;\n /** 弹性模量 E,GPa(标称参考值) */\n readonly elasticModulusGPa: number;\n /** 线膨胀系数 α,1/℃(标称参考值) */\n readonly expansionPerDegC: number;\n /** 线密度,kg/m(标准参考单位质量) */\n readonly linearMassKgPerM: number;\n}\n\n/** 参考密度,g/cm³(标准注:参考单位质量按此密度计) */\nexport const REFERENCE_DENSITY_G_PER_CM3 = 8.94;\n\n/** 线材预设 id */\nexport type WirePresetId = 'cthm120' | 'cthm150' | 'ctha120';\n\n/**\n * 标准「参考单位质量」表,kg/km。\n * 与 `src/copper/index.ts` 的 TB2809_WIRE_PARAMS.unitWeightKgPerKm 同源\n * (站点 /calculator/assets/calc-core.js 的 COPPER_TABLE)。\n */\nexport const STANDARD_UNIT_WEIGHT_KG_PER_KM: Readonly<Record<WirePresetId, number>> = {\n cthm120: 1082,\n cthm150: 1350,\n ctha120: 1070,\n};\n\n/** 由标准参考单位质量换算线密度,kg/m */\nexport function unitWeightToKgPerM(kgPerKm: number): number {\n return kgPerKm / 1000;\n}\n\n/**\n * 由截面积与密度反算线密度。\n *\n * ⚠️ 传入的必须是「计算截面」而非「标称截面」,否则结果偏低约 0.85%。\n * 120 mm² 标称对应计算截面 121 mm²;150 mm² 标称对应 151 mm²。\n *\n * @param crossSectionMM2 计算截面积,mm²\n * @param densityGPerCm3 密度,g/cm³\n * @returns 线密度,kg/m\n */\nexport function deriveLinearMassKgPerM(\n crossSectionMM2: number,\n densityGPerCm3: number = REFERENCE_DENSITY_G_PER_CM3,\n): number {\n // A[mm²] × 1e-6 [m²/mm²] × ρ[g/cm³] × 1000 [kg/m³ per g/cm³]\n return crossSectionMM2 * 1e-6 * densityGPerCm3 * 1000;\n}\n\n/** 铜及铜合金接触线的常用线膨胀系数,1/℃ */\nexport const COPPER_ALLOY_ALPHA_PER_DEG_C = 1.7e-5;\n\nexport const WIRE_PRESETS: readonly WireSpec[] = [\n {\n id: 'cthm120',\n name: 'CTMH-120(铜镁 120)',\n nameEn: 'CTMH-120 (CuMg 120 mm²)',\n crossSectionMM2: 120,\n calculatedSectionMM2: 121,\n elasticModulusGPa: 120,\n expansionPerDegC: COPPER_ALLOY_ALPHA_PER_DEG_C,\n linearMassKgPerM: unitWeightToKgPerM(STANDARD_UNIT_WEIGHT_KG_PER_KM.cthm120),\n },\n {\n id: 'cthm150',\n name: 'CTMH-150(铜镁 150)',\n nameEn: 'CTMH-150 (CuMg 150 mm²)',\n crossSectionMM2: 150,\n calculatedSectionMM2: 151,\n elasticModulusGPa: 120,\n expansionPerDegC: COPPER_ALLOY_ALPHA_PER_DEG_C,\n linearMassKgPerM: unitWeightToKgPerM(STANDARD_UNIT_WEIGHT_KG_PER_KM.cthm150),\n },\n {\n id: 'ctha120',\n name: 'CTAH-120(铜银 120)',\n nameEn: 'CTAH-120 (CuAg 120 mm²)',\n crossSectionMM2: 120,\n calculatedSectionMM2: 121,\n elasticModulusGPa: 120,\n expansionPerDegC: COPPER_ALLOY_ALPHA_PER_DEG_C,\n linearMassKgPerM: unitWeightToKgPerM(STANDARD_UNIT_WEIGHT_KG_PER_KM.ctha120),\n },\n];\n\n/** 按 id 取线材预设,找不到返回 undefined */\nexport function findWirePreset(id: string): WireSpec | undefined {\n return WIRE_PRESETS.find((w) => w.id === id);\n}\n\n/**\n * 由线密度求单位自重荷载 g,N/m。\n * @param linearMassKgPerM 线密度,kg/m\n */\nexport function weightPerLengthNPerM(linearMassKgPerM: number): number {\n return linearMassKgPerM * G0;\n}\n\n/**\n * 由线材预设直接取单位自重荷载 g,N/m。\n */\nexport function weightOfPresetNPerM(spec: WireSpec): number {\n return weightPerLengthNPerM(spec.linearMassKgPerM);\n}\n","/**\n * TB/T 2809-2017 表5 持续载流量参考值(A)。\n *\n * 来源:itswe.com 标准规范库,据 TB/T 2809-2017 无水印全文扫描件逐格复核。\n *\n * 查表语义:\n * - 返回数值:该项载流量\n * - 返回 null:该 (材质, 截面) 规格存在,但该工况按标准原文注\"不需要考核\"\n * (如纯铜接触线不考核 150℃ 工况)\n * - 返回 undefined:该材质无此截面规格(如铜铬锆无 120 mm²)\n *\n * ⚠️ 表中为室内(无风无日照试验条件)值与室外值;工程取值请以标准原文与\n * 产品技术条件为准。高海拔、隧道内等场景须另行叠加散热修正。\n */\n\nexport type ContactWireTypeCode =\n | 'CT'\n | 'CTA'\n | 'CTS'\n | 'CTSM'\n | 'CTSH'\n | 'CTM'\n | 'CTMM'\n | 'CTMH'\n | 'CTCZ';\n\n/** 载流量考核工况 */\nexport type AmpacityCondition = 'indoor-95' | 'outdoor-95' | 'indoor-150' | 'outdoor-150';\n\nexport type CrossSectionMM2 = 120 | 150;\n\n/** 按截面索引的载流量对,[120 mm², 150 mm²] */\ntype SectionPair = readonly [number | null, number | null];\n\nexport interface AmpacityEntry {\n readonly type: ContactWireTypeCode;\n readonly materialZh: string;\n /** 标称截面,mm² */\n readonly crossSectionMM2: CrossSectionMM2;\n readonly condition: AmpacityCondition;\n /** 持续载流量,A。null 表示该项不需要考核 */\n readonly ampacityA: number | null;\n}\n\nconst M = (\n type: ContactWireTypeCode,\n materialZh: string,\n sections: readonly CrossSectionMM2[],\n indoor95: SectionPair,\n outdoor95: SectionPair,\n indoor150: SectionPair,\n outdoor150: SectionPair,\n): AmpacityEntry[] => {\n const conditions: ReadonlyArray<readonly [AmpacityCondition, SectionPair]> = [\n ['indoor-95', indoor95],\n ['outdoor-95', outdoor95],\n ['indoor-150', indoor150],\n ['outdoor-150', outdoor150],\n ];\n const out: AmpacityEntry[] = [];\n for (const section of sections) {\n for (const [condition, pair] of conditions) {\n const value = section === 120 ? pair[0] : pair[1];\n out.push({\n type,\n materialZh,\n crossSectionMM2: section,\n condition,\n ampacityA: value ?? null,\n });\n }\n }\n return out;\n};\n\nexport const TB2809_AMPACITY_A: readonly AmpacityEntry[] = [\n ...M('CT', '铜', [120, 150], [360, 425], [495, 570], [null, null], [null, null]),\n ...M('CTA', '铜银', [120, 150], [360, 425], [495, 570], [515, 620], [680, 785]),\n ...M('CTS', '铜锡', [120, 150], [360, 425], [490, 565], [515, 620], [680, 790]),\n ...M('CTSM', '铜锡', [120, 150], [330, 400], [455, 525], [490, 560], [630, 730]),\n ...M('CTSH', '铜锡', [120, 150], [310, 360], [420, 480], [450, 520], [580, 670]),\n ...M('CTM', '铜镁', [120, 150], [330, 400], [455, 525], [490, 560], [630, 730]),\n ...M('CTMM', '铜镁', [120, 150], [310, 360], [420, 480], [450, 520], [580, 670]),\n ...M('CTMH', '铜镁', [120, 150], [300, 340], [410, 460], [430, 500], [560, 650]),\n ...M('CTCZ', '铜铬锆', [150], [null, 395], [null, 505], [null, 580], [null, 710]),\n];\n\n/**\n * 查表。\n * @returns 载流量 A;该规格存在但不考核时为 null;该材质无此截面时为 undefined\n */\nexport function findAmpacityA(params: {\n type: ContactWireTypeCode;\n crossSectionMM2: CrossSectionMM2;\n condition: AmpacityCondition;\n}): number | null | undefined {\n const row = TB2809_AMPACITY_A.find(\n (e) =>\n e.type === params.type &&\n e.crossSectionMM2 === params.crossSectionMM2 &&\n e.condition === params.condition,\n );\n return row === undefined ? undefined : row.ampacityA;\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -20,12 +20,6 @@ import {
|
|
|
20
20
|
waveSpeedCheck,
|
|
21
21
|
wavespeedMeta
|
|
22
22
|
} from "./chunk-VAHQDIMW.js";
|
|
23
|
-
import {
|
|
24
|
-
DEFAULT_REPLACEMENT_THRESHOLD_PERCENT,
|
|
25
|
-
sectionFromDiameterMM2,
|
|
26
|
-
wearMeta,
|
|
27
|
-
wearRatio
|
|
28
|
-
} from "./chunk-LDSV3U4M.js";
|
|
29
23
|
import {
|
|
30
24
|
AIR_DENSITY_KG_PER_M3,
|
|
31
25
|
windClearanceCheck,
|
|
@@ -33,6 +27,12 @@ import {
|
|
|
33
27
|
windLoadNPerM,
|
|
34
28
|
windMeta
|
|
35
29
|
} from "./chunk-RVG3LEZQ.js";
|
|
30
|
+
import {
|
|
31
|
+
DEFAULT_REPLACEMENT_THRESHOLD_PERCENT,
|
|
32
|
+
sectionFromDiameterMM2,
|
|
33
|
+
wearMeta,
|
|
34
|
+
wearRatio
|
|
35
|
+
} from "./chunk-LDSV3U4M.js";
|
|
36
36
|
import {
|
|
37
37
|
DEFAULT_PANTOGRAPH_HEIGHT_M,
|
|
38
38
|
STANDARD_GAUGE_M,
|
|
@@ -41,13 +41,6 @@ import {
|
|
|
41
41
|
curveStaggerMeta,
|
|
42
42
|
versineM
|
|
43
43
|
} from "./chunk-IFVYGNT3.js";
|
|
44
|
-
import {
|
|
45
|
-
dropperLengths,
|
|
46
|
-
dropperMeta,
|
|
47
|
-
dropperPositionsM,
|
|
48
|
-
maxParabolaSagM,
|
|
49
|
-
parabolaSagM
|
|
50
|
-
} from "./chunk-UO2PHBC3.js";
|
|
51
44
|
import {
|
|
52
45
|
REF_TARGET_COEFF,
|
|
53
46
|
REF_TARGET_OFFSET_N,
|
|
@@ -63,18 +56,25 @@ import {
|
|
|
63
56
|
icingCheck,
|
|
64
57
|
icingMeta
|
|
65
58
|
} from "./chunk-GN6QNOUL.js";
|
|
59
|
+
import {
|
|
60
|
+
dropperLengths,
|
|
61
|
+
dropperMeta,
|
|
62
|
+
dropperPositionsM,
|
|
63
|
+
maxParabolaSagM,
|
|
64
|
+
parabolaSagM
|
|
65
|
+
} from "./chunk-UO2PHBC3.js";
|
|
66
66
|
import {
|
|
67
67
|
STEEL_POLE_SERIES_KNM,
|
|
68
68
|
TEST_MOMENT_FACTOR,
|
|
69
69
|
poleCapacityCheck,
|
|
70
70
|
poleCapacityMeta
|
|
71
|
-
} from "./chunk-
|
|
71
|
+
} from "./chunk-2YFKWFBJ.js";
|
|
72
72
|
import {
|
|
73
73
|
maxSpanFromSagM,
|
|
74
74
|
sagMM,
|
|
75
75
|
sagMeta,
|
|
76
76
|
tensionFromSagKN
|
|
77
|
-
} from "./chunk-
|
|
77
|
+
} from "./chunk-Q7UD52SC.js";
|
|
78
78
|
import {
|
|
79
79
|
steadyArmAngleDeg,
|
|
80
80
|
steadyArmCheck,
|
|
@@ -102,15 +102,15 @@ import {
|
|
|
102
102
|
anchorLengthCheck,
|
|
103
103
|
anchorLengthMeta
|
|
104
104
|
} from "./chunk-75EGROQB.js";
|
|
105
|
-
import {
|
|
106
|
-
bValue,
|
|
107
|
-
bvalueMeta
|
|
108
|
-
} from "./chunk-3GREMF76.js";
|
|
109
105
|
import {
|
|
110
106
|
ASSEMBLY_TOLERANCE_MM,
|
|
111
107
|
cantileverCut,
|
|
112
108
|
cantileverMeta
|
|
113
109
|
} from "./chunk-HZWNKKIB.js";
|
|
110
|
+
import {
|
|
111
|
+
bValue,
|
|
112
|
+
bvalueMeta
|
|
113
|
+
} from "./chunk-3GREMF76.js";
|
|
114
114
|
import {
|
|
115
115
|
TB2809_WIRE_PARAMS,
|
|
116
116
|
copperMeta,
|
|
@@ -127,7 +127,7 @@ import {
|
|
|
127
127
|
USCD_BANDS,
|
|
128
128
|
creepageCheck,
|
|
129
129
|
creepageMeta
|
|
130
|
-
} from "./chunk-
|
|
130
|
+
} from "./chunk-3LUPNS4U.js";
|
|
131
131
|
import {
|
|
132
132
|
crossSpanAnalyze,
|
|
133
133
|
crossSpanMeta
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkR4IVRYJAcjs = require('../chunk-R4IVRYJA.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
exports.STEEL_POLE_SERIES_KNM =
|
|
12
|
+
exports.STEEL_POLE_SERIES_KNM = _chunkR4IVRYJAcjs.STEEL_POLE_SERIES_KNM; exports.TEST_MOMENT_FACTOR = _chunkR4IVRYJAcjs.TEST_MOMENT_FACTOR; exports.poleCapacityCheck = _chunkR4IVRYJAcjs.poleCapacityCheck; exports.poleCapacityMeta = _chunkR4IVRYJAcjs.poleCapacityMeta;
|
|
13
13
|
//# sourceMappingURL=index.cjs.map
|
package/dist/sag/index.cjs
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkCF663UNGcjs = require('../chunk-CF663UNG.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
exports.maxSpanFromSagM =
|
|
12
|
+
exports.maxSpanFromSagM = _chunkCF663UNGcjs.maxSpanFromSagM; exports.sagMM = _chunkCF663UNGcjs.sagMM; exports.sagMeta = _chunkCF663UNGcjs.sagMeta; exports.tensionFromSagKN = _chunkCF663UNGcjs.tensionFromSagKN;
|
|
13
13
|
//# sourceMappingURL=index.cjs.map
|
package/dist/sag/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ocs-calculators",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "铁路接触网(OCS)工程计算工具集 —— 张力、弛度、吊弦、风偏移等计算,零依赖纯函数实现 / Railway overhead contact system (OCS) engineering calculators as zero-dependency pure functions",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"catenary",
|
|
@@ -88,42 +88,42 @@
|
|
|
88
88
|
"require": "./dist/wear/index.cjs"
|
|
89
89
|
},
|
|
90
90
|
"./package.json": "./package.json",
|
|
91
|
-
"steady-arm": {
|
|
91
|
+
"./steady-arm": {
|
|
92
92
|
"types": "./dist/steady-arm/index.d.ts",
|
|
93
93
|
"import": "./dist/steady-arm/index.js",
|
|
94
94
|
"require": "./dist/steady-arm/index.cjs"
|
|
95
95
|
},
|
|
96
|
-
"cross-span": {
|
|
96
|
+
"./cross-span": {
|
|
97
97
|
"types": "./dist/cross-span/index.d.ts",
|
|
98
98
|
"import": "./dist/cross-span/index.js",
|
|
99
99
|
"require": "./dist/cross-span/index.cjs"
|
|
100
100
|
},
|
|
101
|
-
"bvalue": {
|
|
101
|
+
"./bvalue": {
|
|
102
102
|
"types": "./dist/bvalue/index.d.ts",
|
|
103
103
|
"import": "./dist/bvalue/index.js",
|
|
104
104
|
"require": "./dist/bvalue/index.cjs"
|
|
105
105
|
},
|
|
106
|
-
"sag": {
|
|
106
|
+
"./sag": {
|
|
107
107
|
"types": "./dist/sag/index.d.ts",
|
|
108
108
|
"import": "./dist/sag/index.js",
|
|
109
109
|
"require": "./dist/sag/index.cjs"
|
|
110
110
|
},
|
|
111
|
-
"anchor-length": {
|
|
111
|
+
"./anchor-length": {
|
|
112
112
|
"types": "./dist/anchor-length/index.d.ts",
|
|
113
113
|
"import": "./dist/anchor-length/index.js",
|
|
114
114
|
"require": "./dist/anchor-length/index.cjs"
|
|
115
115
|
},
|
|
116
|
-
"creepage": {
|
|
116
|
+
"./creepage": {
|
|
117
117
|
"types": "./dist/creepage/index.d.ts",
|
|
118
118
|
"import": "./dist/creepage/index.js",
|
|
119
119
|
"require": "./dist/creepage/index.cjs"
|
|
120
120
|
},
|
|
121
|
-
"pole-capacity": {
|
|
121
|
+
"./pole-capacity": {
|
|
122
122
|
"types": "./dist/pole-capacity/index.d.ts",
|
|
123
123
|
"import": "./dist/pole-capacity/index.js",
|
|
124
124
|
"require": "./dist/pole-capacity/index.cjs"
|
|
125
125
|
},
|
|
126
|
-
"cantilever": {
|
|
126
|
+
"./cantilever": {
|
|
127
127
|
"types": "./dist/cantilever/index.d.ts",
|
|
128
128
|
"import": "./dist/cantilever/index.js",
|
|
129
129
|
"require": "./dist/cantilever/index.cjs"
|
|
@@ -161,4 +161,4 @@
|
|
|
161
161
|
"url": "https://github.com/showhoo/ocs-calculators/issues"
|
|
162
162
|
},
|
|
163
163
|
"author": "思维接触网百科"
|
|
164
|
-
}
|
|
164
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-4344WWAF.cjs","../src/pole-capacity/meta.ts","../src/pole-capacity/index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/ocs-calculators/ocs-calculators/dist/chunk-4344WWAF.cjs","sourcesContent":[null,"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"]}
|
|
@@ -1 +0,0 @@
|
|
|
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"]}
|
|
@@ -1 +0,0 @@
|
|
|
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"]}
|