数据 (CLM 气动夹紧缸分类): - 1 系列 demo -> 11 个官方系列, 6 型号 -> 859 个真实型号 - 参数化升级: 仅缸径 -> 最多 5 维 (缸径/臂位置/臂类型/臂样式/传感器) - 11 系列各含官方图册附图 (84 张) + datasheet PDF - 修复: 枚举维度空串必须为合法值 (否则级联过滤后下拉全空) - 修复: catalog.json 分类 series 数组未更新导致新系列不进包 - 修复: _step 副本后缀归一化错误 (产生假型号) 工具: - gen-clamp-series.py 数据清洗 (X盘数模 -> CSV/meta/STEP) - copy-clamp-step.py 8线程并行复制 (网络盘 I/O 优化) - gen-clamp-manual.py 官方图册 PDF -> 附图 - update-clamp-meta-attach.py / fix-clamp-meta-empty-enum.py 仓库瘦身: - .gitignore 排除数模(5GB)/.opc(1.2GB)/编译产物/发布产物 - 移出索引: release/ bin产物 STEP数模 .opc 大型PDF 等 - 提交体积 17MB (原 15.97GB) 其他: SelfTest.cs 可解析选型逻辑放宽 (稀疏数据用真实变体回验) Co-Authored-By: Claude Code <noreply@anthropic.com>
203 lines
10 KiB
Markdown
203 lines
10 KiB
Markdown
# 夹紧缸模块数据替换 —— 工作交接
|
||
|
||
> 交接时间:2026-09-14
|
||
> 项目:`D:\开发\OnebotCatalog`(欧霓博气动元件电子目录软件)
|
||
> 本次任务:把 CLM 气动夹紧缸分类从 demo 占位数据替换为 Univer 真实数据
|
||
|
||
---
|
||
|
||
## 一、任务目标(用户原话)
|
||
|
||
> "我这个是开发的对气缸的选型,你看下目前的夹紧缸名称种类,能否完善一下夹紧缸模块的分类选型及数模替换,原来的数据都是生产的 demo 数据不是真实数据,请你就 25/32/40/50/63/80 6 个系列的种类进行细化并将 demo 数据替换一下"
|
||
|
||
用户后续拍板的三个决策:
|
||
1. **系列划分**:完整建官方全部系列(不是只建有数模的)
|
||
2. **旧命名处理**:UBM/UBP 等无 `UC` 前缀的旧码 → 归一化到官方 UC 前缀
|
||
3. **参数维度**:五维全拆(缸径/臂位置/臂类型/臂样式/传感器)
|
||
4. **停产老型号**:UFL450/UHL463 → 单独建系列(不并入 UCBP)
|
||
5. **附图**:用 X 盘官方图册 PDF 生成
|
||
|
||
---
|
||
|
||
## 二、已完成 ✅
|
||
|
||
### 2.1 数据成果
|
||
|
||
| 项 | 替换前(demo) | 替换后(真实) |
|
||
|---|---|---|
|
||
| 系列数 | 1 个(UCBM) | **11 个** |
|
||
| 型号数 | 6 个占位 | **862 个真实** |
|
||
| 参数 | 仅"缸径" | **5 维**(缸径/臂位置/臂类型/臂样式/传感器) |
|
||
| STEP 数模 | 6 个占位 | **862 个真实**(4GB) |
|
||
| 附图 | 1 个占位 | **11 个系列**(官方图册 p01.png + _manual.pdf) |
|
||
|
||
### 2.2 11 个系列清单
|
||
|
||
| 系列 | 含义 | 缸径 | 型号数 | 官方图册 PDF |
|
||
|---|---|---|---|---|
|
||
| UCBP | 标准气动夹紧缸 | 25/32/40/50/63/80 | 358 | ucbp25/40/50/63/80 |
|
||
| UCBM | 带手杆 | 25/32/40/50/63/80 | 268 | ucbm32/50/63/80 |
|
||
| UCBH | Ø63/Ø22 | 40/63 | 61 | ucbh63 |
|
||
| UCBQ | 带手杆+补偿 | 40/63 | 45 | ucbq63 |
|
||
| UFL | 停产老型号(原 UFL450/UHL463) | 50/63 | 38 | 无(停产) |
|
||
| UCIP | 可互换 | 40 | 22 | ucip40 |
|
||
| UCIM | 可互换带手杆 | 40 | 19 | ucim40 |
|
||
| UCBT | 带中央手杆 | 40 | 19 | 主目录第42页 |
|
||
| UCDP | 双夹臂 | 40/63 | 17 | ucdp40/63 |
|
||
| UCNP | NAAMS 标准 | 50/63/80 | 10 | ucnp50/63/80 |
|
||
| UCNM | NAAMS 带手杆 | 50/63 | 5 | ucnm50/63/80 |
|
||
|
||
### 2.3 官方订购码结构(从图册 CODIFICATION KEY 提取,权威依据)
|
||
|
||
```
|
||
UC - B - M - 0 - E - O - A - K - 63
|
||
│ │ │ │ │ │ │ │ └ 缸径 (25/32/40/50/63/80)
|
||
│ │ │ │ │ │ │ └ 传感器 N=无 K=电子PNP M12 Y=白LED D=气动
|
||
│ │ │ │ │ │ └ 臂样式 A=铝 S=钢 N=无
|
||
│ │ │ │ │ └ 臂类型 C=中央15mm D=右15mm S=左15mm E=中央45mm F=右45mm L=左45mm N=无
|
||
│ │ │ │ └ 臂位置 V=90° O=180° N=无臂
|
||
│ │ │ └ 产品版本 0
|
||
│ │ └ 子系列 P/M/T/Q/H/D/I/N
|
||
│ └ 标准 B=欧洲标准
|
||
└ UC = UNICLAMP
|
||
```
|
||
|
||
### 2.4 产物状态
|
||
|
||
- **.opc 数据包**:`sample/OnebotCatalog_2026.08.opc`(**1210MB**,2026-09-14 重建)
|
||
- **27 系列** / 53,047 变体 / 校验 0 错误 0 警告
|
||
- 体积主要来自 40缸 UCBM40 的装配体数模(单个 20~54MB),用户已确认保留原样
|
||
- **自测**:`sample/selftest.log` —— **46 通过 0 失败**
|
||
- **构建日志**:`sample/build.log`
|
||
|
||
### 2.5 本次改动/新增文件
|
||
|
||
**新增数据(`onebot-data/catalog/`)**
|
||
- `csv/` 下 11 个新 CSV:UCBP/UCBM/UCBT/UCBQ/UCBH/UCDP/UCIM/UCIP/UCNM/UCNP/UFL
|
||
- `series/` 下 11 个新 meta.json(5 维参数定义)
|
||
- `step/` 下 862 个真实 STEP(归一化命名 `.step`)
|
||
- `manual/` 下 11 个系列目录(各含 `p01.png` + `<系列>_manual.pdf`)
|
||
- `catalog.json`:CLM 分类 series 数组更新为 11 系列顺序
|
||
|
||
**新增工具(`onebot-data/tools/`)**
|
||
- `gen-clamp-series.py` —— 数据清洗主脚本(扫描 X 盘数模 → 归一化 → 生成 CSV/meta/复制 STEP)
|
||
- `--dry-run` 只分析打印
|
||
- `copy-clamp-step.py` —— 8 线程并行复制 STEP(复用上面脚本的 collect())
|
||
- `gen-clamp-manual.py` —— 从官方图册 PDF 渲染 p01.png + 生成 _manual.pdf
|
||
|
||
**代码改动**
|
||
- `src/CatalogCore/SelfTest.cs`(第 111-127 行附近):自测"可解析出完整选型"逻辑
|
||
- 原:取各参数第一个允许值组合 Resolve
|
||
- 改:取第一个**真实变体**的完整参数组合 Resolve(稀疏数据下前者必然落空)
|
||
- 改后已跑 `fix-bom.ps1` 并重新编译
|
||
|
||
**清理**
|
||
- `crossref.csv`:移除 491 行失效的 UCBM 旧平替引用(引用的是 demo 型号 UCBM40/50/63/80,现已被细化型号取代),保留 12 行有效(KCS 4 + UAGP 8)
|
||
- 备份:`crossref.csv.bak_*`
|
||
|
||
**备份(可回退)**
|
||
- `onebot-data/catalog/_backup_clamp_20260913_222631/`(原 catalog.json + UCBM.csv + UCBM.meta.json)
|
||
|
||
---
|
||
|
||
## 三、未完成 / 待办 ⚠️
|
||
|
||
### 3.0 【已修复】三个曾导致数据没进包的坑(务必记住)
|
||
|
||
这三个坑在 2026-09-14 后续排查中发现并修复,但**极易复发**:
|
||
|
||
1. **catalog.json 的 CLM.series 必须列出全部系列**
|
||
- 构建器(`FullCatalogBuilder.cs:49`)**只遍历 `catalog.json` 各分类的 series 数组**来发现系列
|
||
- 只写 `series/*.meta.json` 而不改 catalog.json → 构建"成功"但系列**根本不在包里**(build.log 报的系列数不会增加,极易漏看)
|
||
- 自查方法:`python -c "import zipfile,json; z=zipfile.ZipFile('sample/OnebotCatalog_2026.08.opc'); print([c['series'] for c in json.loads(z.read('catalog.json').decode('utf-8-sig'))['categories'] if c['code']=='CLM'])"`
|
||
|
||
2. **参数值域为空的维度必须剔除**
|
||
- 若某系列数据里某参数(如 `style`)全为空,meta 里会生成 `values: []` → 自测报"参数 X 初始可选值非空"失败 → UI 出现无值下拉
|
||
- 处理:meta 里删掉该参数 + CSV 删对应列(`gen-clamp-series.py` 已内置 `params = [p for p in params if p['values']]`)
|
||
- 本次涉及:UCBT / UCNM / UCNP / UFL 四个系列(都无 style 维度)
|
||
|
||
3. **`_step` 副本后缀必须在去下划线之前剥离**
|
||
- `gen-clamp-series.py` 原先先 `.replace('_','')` 再 `re.sub(r'_STEP$')` → 永远匹配不到
|
||
- 导致 `UCBM40OESK0_step.stp` 被归一化成假型号 `UCBM40OESK0STEP`(与真型号 `UCBM40OESK0` 重复)
|
||
- 已修:改为先去后缀再去下划线
|
||
|
||
### 3.1 未发布(重要)
|
||
|
||
**只重建了 .opc,没有跑 publish**。也就是说:
|
||
- `release/OnebotCatalog_2026.08/`(客户版目录)
|
||
- `release/update_2026.08/catalog.opc`(增量包)
|
||
- `release/web_2026.08/`(网页站)
|
||
|
||
**三份产物还是旧数据**。发布前必须先关掉运行中的 exe 和 serve-web:
|
||
|
||
```powershell
|
||
powershell -NoProfile -ExecutionPolicy Bypass -File tools\publish.ps1
|
||
```
|
||
|
||
### 3.2 附图状态(已完成,备注)
|
||
|
||
11 个系列共 **84 张附图 + 11 个 datasheet**,全部来自 X 盘官方图册,按内容标记(CHARACTERISTICS/DIMENSIONS/CLAMPING ARMS)排序,多缸径系列的页面合并。
|
||
|
||
- **UCBT** 无独立图册 → 从主目录 `katalog-pneumatische-spanner-...pdf` 提取第 41-43 页;datasheet 裁成 606KB(原整本 54MB)
|
||
- **UFL/UHL** 经核实**就是官方 UCBL**(Manual power clamps Ø50/Ø63,缸径编号 450→Ø50、463→Ø63),已用官方 `ucbl450/463` 图册,不再是占位图
|
||
- 生成工具:`onebot-data/tools/gen-clamp-manual.py`(支持 `--clean`)
|
||
- meta 附件引用更新工具:`onebot-data/tools/update-clamp-meta-attach.py`(按 manual 目录实际 png 数量重写 attachments)
|
||
|
||
**注意**:主目录 PDF 54MB 在网络盘上逐页取文本极慢(360 页),若需再处理,先 `cp` 到本地临时盘再操作。
|
||
|
||
### 3.3 已知数据特性(非 bug)
|
||
|
||
- **参数稀疏**:并非所有 5 维组合都有真实数模(Univer 是离散有限型号清单)。例如 UCBM bore=25 只有 3 个型号。选型时靠级联过滤收敛,部分组合会落空——这是数据本身的特性。
|
||
- **型号数 859**(归一化去重后),CSV 与 STEP 100% 对齐。
|
||
- **单文件体积大**:40缸 UCBM40 系列有完整装配体导出(单个 20~54MB),这是**源文件本身的体积**,用户已确认保留原样。.opc 因此为 ~1.2GB。
|
||
|
||
### 3.4 其他系列未动
|
||
|
||
本次只处理**夹紧缸(CLM 分类)**。其他分类的空壳/样板系列(ULP 定位销、USP 勾销缸、UGP 夹爪缸、UAGP 翻转缸、LAE 电缸)**仍是 demo 数据**,未替换。用户可能后续要求同样的处理。
|
||
|
||
---
|
||
|
||
## 四、下个会话怎么接续
|
||
|
||
开场直接说:
|
||
|
||
> 读一下 `D:\开发\OnebotCatalog\交接-夹紧缸数据替换.md`,我们继续。
|
||
|
||
关键上下文:
|
||
- 源数据在 `X:\新开发产品-Research and Development\1_产品3D数模(发客户仿真)\1-夹紧缸\`(按缸径分 25缸/32缸/40缸/50缸/63缸/80缸)
|
||
- 官方图册在 `X:\新开发产品-Research and Development\2_产品资料\Univer资料\官方图册\`
|
||
- 项目文档:`项目总览.md`、`数据维护说明书.md`、`README.md`
|
||
|
||
**环境陷阱(必读)**
|
||
- **X 盘是网络盘,读取极慢**(单文件 5MB 约 6 秒)。批量复制务必多线程(参考 `copy-clamp-step.py`),并行数 8 合适。复制偶发 `WinError 31/1006`,重试即可成功。
|
||
- 编辑含中文的 `.ps1/.cs/.vb` **必须**先跑 `sample-data\tools\fix-bom.ps1 -Files @('路径')` 再编译
|
||
- PowerShell 输出中文在 bash 里显示乱码(GBK),但文件内容正常
|
||
- 跑 python 脚本要加 `PYTHONUTF8=1` 前缀(避免 GBK 编码错误)
|
||
|
||
**常用命令**
|
||
```bash
|
||
# 重建全量目录(改数据后必跑)
|
||
./bin/OnebotCatalog.exe --buildfull onebot-data/catalog sample/OnebotCatalog_2026.08.opc
|
||
|
||
# 自测(结果看 sample/selftest.log)
|
||
./bin/OnebotCatalog.exe --selftest sample/OnebotCatalog_2026.08.opc
|
||
|
||
# 编译(改代码后)
|
||
powershell -NoProfile -ExecutionPolicy Bypass -File tools/build.ps1
|
||
|
||
# 发布三份产物(★先关 exe 和 serve-web★)
|
||
powershell -NoProfile -ExecutionPolicy Bypass -File tools/publish.ps1
|
||
```
|
||
|
||
---
|
||
|
||
## 五、给用户的建议下一步
|
||
|
||
按优先级:
|
||
|
||
1. **验收**:打开 `bin\OnebotCatalog.exe` 加载新 .opc,检查夹紧缸 11 个系列的选型、3D、附图是否正常
|
||
2. **决定是否发布**(发布后客户版/网页站才更新)
|
||
3. **补 UFL 正式图**(当前是占位)
|
||
4. **决定是否对其他分类(定位销/勾销缸/夹爪缸/翻转缸/电缸)做同样的真实数据替换**
|
||
5. (可选)更新 `crossref.csv` 里被移除的 491 行 UCBM 平替映射——现在型号细化了,可以重新建立更精确的竞品对照
|