From 556d7d6884594bf4d3ca2902d562a13c049e39f2 Mon Sep 17 00:00:00 2001 From: Zhaowenlong Date: Wed, 27 May 2026 20:18:25 +0800 Subject: [PATCH] docs: add FreeCAD cabinet assembly guide --- docs/FreeCAD 机柜装配操作文档.md | 797 +++++++++++++++++++++++ 1 file changed, 797 insertions(+) create mode 100644 docs/FreeCAD 机柜装配操作文档.md diff --git a/docs/FreeCAD 机柜装配操作文档.md b/docs/FreeCAD 机柜装配操作文档.md new file mode 100644 index 0000000..363f827 --- /dev/null +++ b/docs/FreeCAD 机柜装配操作文档.md @@ -0,0 +1,797 @@ +# FreeCAD 机柜装配与布线操作文档 + +本文档说明如何在 LightWork3D / FreeCAD 中,从一个空机柜开始,逐步放置导轨、线槽、电流互感器、小型断路器、接线端子、接地排等设备,并完成端子生成和 3D 布线。 + +适用范围: + +- 机柜内部 3D 装配 +- FCStd 设备模板使用 +- 导轨、线槽等柜内附件摆放 +- 工程端子生成 +- 手动布线与保存回写 +- 自动布线的基础准备 + +本文档遵守当前第一版 2D/3D 协同约束: + +- 3D 位姿和装配状态以 FreeCAD 文档 `scene.FCStd` 为准。 +- 数据库第一版只保留最小绑定,不保存 3D 位姿。 +- 有接线点的设备优先使用 `.FCStd` 设备模板。 +- STEP 只作为几何输入或交换格式,不作为正式电气语义资产。 +- 工程布线连接的是工程端子,不直接连接模板端子。 + +--- + +## 1. 先理解几个工作台分别做什么 + +### 1.1 `Assembly` + +用途:机械装配。 + +用它处理: + +- 空机柜作为基准件。 +- 导轨安装到机柜背板。 +- 线槽安装到导轨上下或柜内侧边。 +- 断路器、互感器、端子排、接地排等设备摆放到导轨或安装板上。 +- 对齐面、固定距离、移动/旋转设备。 + +不要用它处理: + +- 端子语义。 +- 电气连接关系。 +- 导线任务回写。 + +你截图右侧出现的 `Gears` 是齿轮约束任务,适合齿轮运动,不适合机柜装配。遇到这种界面,先点 `Cancel` 退出。 + +### 1.2 `QET模板` + +用途:QET/FreeCAD 电气模板、端子和布线。 + +用它处理: + +- 制作设备模板端子。 +- 导入 FCStd 设备模板实例。 +- 从模板端子生成工程端子。 +- 打开 `3D手动布线` 面板。 +- 打开 `3D自动布线` 面板。 +- 保存并回写。 + +当前工具栏/菜单中常见命令: + +| 命令 | 用途 | +| --- | --- | +| `设备模板端子制作` | 打开模板端子制作面板 | +| `添加模板端子` | 在模板里添加端子 LCS | +| `校验模板端子` | 检查模板端子是否有效 | +| `保存模板为 FCStd` | 保存可复用设备模板 | +| `导入模板实例` | 把 FCStd 设备模板导入当前工程场景 | +| `生成工程端子` | 把模板端子转换成当前工程里的可布线端子 | +| `连接选中端子` | 连接两个已选工程端子 | +| `3D手动布线` | 打开手动布线面板 | +| `3D自动布线` | 打开自动布线面板 | + +### 1.3 `Draft` + +用途:辅助建模和批量摆放。 + +推荐用它处理: + +- 阵列复制端子片。 +- 按固定间距复制相同设备。 +- 辅助画线、点、草图路径。 +- 对象移动、旋转、捕捉。 + +例如端子片宽度为 `5.2 mm`,可以用 Draft 阵列按 X 方向复制成端子排。 + +### 1.4 `Part` / `Part Design` + +用途:模型检查和简单几何编辑。 + +推荐用它处理: + +- 检查导入模型。 +- 简单切割、合并、测量。 +- 给 STEP 几何补一些基础外形。 + +不建议把日常机柜装配都放在 Part Design 里做。Part Design 更适合制作单个零件,不适合管理整柜装配关系。 + +--- + +## 2. 推荐总流程 + +完整流程建议按下面顺序做: + +```text +准备资产 + -> 创建或打开工程 scene.FCStd + -> 放置空机柜 + -> 放置导轨和线槽 + -> 放置设备 + -> 为设备生成工程端子 + -> 标记线槽/导轨/柜面 + -> 手动布线或自动布线 + -> 保存并回写 +``` + +关键原则: + +- `Assembly` 管“东西放哪儿”。 +- `QET模板` 管“哪里能接线”。 +- `3D手动布线` / `3D自动布线` 管“线怎么走”。 +- `scene.FCStd` 是 3D 状态真相源。 + +--- + +## 3. 准备资产 + +### 3.1 空机柜 + +空机柜可以是: + +- `.FCStd` +- `.step` +- `.stp` + +空机柜通常不需要端子 LCS,因为它不是电气接线设备。它主要作为装配基准。 + +建议机柜模型包含: + +- 外壳 +- 背板或安装板 +- 门板 +- 安装孔或安装条 +- 柜内坐标方向清晰 + +### 3.2 导轨 + +导轨也通常不需要端子 LCS。它是安装基准件。 + +本仓库已有示例资产: + +```text +data/examples/qet_cabinet_assets/qet_din_rail.FCStd +data/examples/qet_cabinet_assets/qet_din_rail.step +``` + +推荐用 `.FCStd`,因为 FreeCAD 打开后对象层级和颜色更清楚。 + +### 3.3 线槽 + +线槽通常不接线,但它是布线路径载体。 + +本仓库已有示例资产: + +```text +data/examples/qet_cabinet_assets/qet_wire_duct.FCStd +data/examples/qet_cabinet_assets/qet_wire_duct.step +``` + +线槽需要在工程里标记为“线槽”,这样自动布线或路径分析才能把它当作走线路径参考。 + +### 3.4 有接线点的设备 + +下面这些设备建议做成 `.FCStd` 设备模板: + +- 电流互感器 +- 小型断路器 +- 接线端子 +- 接地排 +- 继电器 +- 电源模块 +- PLC 模块 + +这些设备如果要参与布线,必须有模板端子 LCS。 + +模板端子至少包含: + +| 属性 | 值 | +| --- | --- | +| `Role` | `Terminal` | +| `CanWire` | `true` | +| `QetTemplateSlotName` | 例如 `P1`、`P2`、`A1`、`PE` | +| `QetTerminalLabel` | 显示名称 | +| `QetTerminalType` | `generic`、`power`、`primary`、`ground` 等 | + +模板端子禁止写入: + +```text +QetProjectUuid +QetElementUuid +QetTerminalUuid +QetInstanceId +``` + +这些字段属于工程实例,不属于可复用设备模板。 + +--- + +## 4. 制作一个可接线设备模板 + +如果你手里只有 STEP 模型,例如一个小型断路器: + +1. 打开 FreeCAD。 +2. 导入该 STEP。 +3. 切换到 `QET模板` 工作台。 +4. 点击 `设备模板端子制作`。 +5. 在模型上选择真实接线孔、接线螺钉中心或附近的点。 +6. 在面板中输入端子名,例如 `L1`、`L2`、`T1`、`T2`。 +7. 点击 `添加端子`。 +8. 重复选择和添加,直到所有需要布线的位置都有端子。 +9. 点击 `校验端子`。 +10. 校验通过后点击 `保存为 FCStd`。 + +保存后的 `.FCStd` 就是正式设备模板。 + +建议命名: + +```text +assets/devices/mini_breaker_2p.FCStd +assets/devices/current_transformer.FCStd +assets/devices/terminal_block_slice.FCStd +assets/devices/ground_bar.FCStd +``` + +--- + +## 5. 创建或打开机柜工程场景 + +### 5.1 从 QET 打开 + +正式流程建议从 QET 的 `3D视图` 打开 FreeCAD。 + +QET 会准备: + +```text +/.qet_freecad/2d_to_3d.json +/.qet_freecad/scene.FCStd +``` + +并设置环境变量: + +```text +QET_2D_TO_3D_JSON +QET_FREECAD_SCENE_FILE +``` + +FreeCAD 启动后会导入 2D 侧设备、端子和导线任务。 + +### 5.2 手动创建场景 + +如果只是验证装配,也可以手动: + +1. FreeCAD 新建文档。 +2. 保存为 `scene.FCStd`。 +3. 手动导入机柜、导轨、线槽和设备。 +4. 后续用 `QET模板` 的命令生成工程端子和布线。 + +手动场景适合验证几何和摆放,不适合做可靠的 2D/3D 回写测试。 + +--- + +## 6. 放置空机柜 + +### 6.1 导入机柜 + +如果机柜是 STEP: + +1. 菜单 `文件 -> 导入`。 +2. 选择机柜 `.step` / `.stp`。 +3. 导入后保存文档。 + +如果机柜是 FCStd: + +1. 菜单 `文件 -> 打开`,或复制对象到当前 `scene.FCStd`。 +2. 保持机柜作为基准对象。 + +### 6.2 建议坐标约定 + +为了后续设备摆放、导轨阵列和布线更稳定,建议统一: + +| 轴 | 含义 | +| --- | --- | +| X | 机柜左右方向 | +| Y | 机柜深度方向 | +| Z | 机柜高度方向 | + +建议把机柜背板作为 `Y` 方向的基准面,把底部作为 `Z=0` 附近。 + +### 6.3 固定机柜 + +在 `Assembly` 中: + +1. 选择机柜对象。 +2. 使用固定/锁定基准件的操作。 +3. 后续导轨、线槽、设备都相对机柜摆放。 + +如果只是快速摆放,也可以不用约束,直接在属性面板里设置 `Placement`。 + +--- + +## 7. 放置导轨 + +### 7.1 导入导轨 + +推荐方式一:通过 `3D手动布线` 面板导入。 + +1. 切换到 `QET模板` 工作台。 +2. 点击 `3D手动布线`。 +3. 在面板中设置 `载体长度`,例如 `600 mm`。 +4. 点击 `导入导轨`。 +5. 选择导轨模型,或使用默认示例导轨。 +6. 导入后将其移动到机柜背板上。 + +推荐方式二:手动导入。 + +1. 菜单 `文件 -> 导入` 或打开 FCStd。 +2. 选择 `qet_din_rail.FCStd` 或自己的导轨模型。 +3. 调整 `Placement`。 + +### 7.2 设置导轨位置 + +常见位置: + +- 上排导轨:用于断路器、继电器、端子排。 +- 中排导轨:用于互感器、接线模块。 +- 下排导轨:用于接地排或辅助设备。 + +可以在属性面板中设置: + +```text +Placement.Base.x +Placement.Base.y +Placement.Base.z +``` + +例如: + +```text +X = 0 +Y = 背板前方 5 mm +Z = 1200 mm +``` + +具体值取决于机柜模型尺寸。 + +### 7.3 使用 Assembly 对齐 + +如果希望精确装配: + +1. 切换到 `Assembly`。 +2. 选择导轨安装面和机柜背板面。 +3. 使用平面对齐或距离约束。 +4. 设置导轨离背板的距离。 +5. 使用水平/边线对齐,让导轨保持水平。 + +不要选择 `Gears`。导轨不是运动部件。 + +--- + +## 8. 放置线槽 + +### 8.1 导入线槽 + +推荐通过 `3D手动布线` 面板: + +1. 切换到 `QET模板`。 +2. 点击 `3D手动布线`。 +3. 设置 `载体长度`,例如 `600 mm`。 +4. 点击 `导入线槽`。 +5. 选择线槽模型,或使用默认示例线槽。 +6. 调整线槽位置。 + +### 8.2 标记线槽 + +导入或选择线槽后: + +1. 在 3D 视图或树中选择线槽对象。 +2. 在 `3D手动布线` 面板点击 `标记为线槽`。 + +这一步会让 FreeCADExchange 把它识别为走线载体。 + +### 8.3 标记柜面 + +如果希望后续自动布线知道哪些面是柜内障碍或辅助区域: + +1. 选择机柜背板或安装板对象。 +2. 在 `3D手动布线` 面板点击 `标记为柜面`。 + +### 8.4 调整线槽长度 + +在 `3D手动布线` 面板: + +1. 输入 `载体长度`。 +2. 选择线槽或导轨对象。 +3. 点击 `应用载体长度`。 + +这适合快速把示例线槽改成现场需要的长度。 + +--- + +## 9. 放置设备 + +### 9.1 推荐导入方式 + +有端子语义的设备,优先使用: + +```text +QET模板 -> 导入模板实例 +``` + +操作: + +1. 切换到 `QET模板`。 +2. 点击 `导入模板实例`。 +3. 选择设备 `.FCStd` 模板。 +4. 导入后在树中会出现设备实例。 +5. 移动设备到导轨或安装板上。 + +如果设备来自 QET 的 2D/3D 数据流,QET 打开 3D 视图时会自动导入或更新设备实例。 + +### 9.2 摆放断路器 + +1. 导入小型断路器 FCStd 模板。 +2. 移动到导轨前方。 +3. 用 `Assembly` 对齐到导轨。 +4. 多个断路器并排时,使用固定间距复制。 + +常见间距: + +```text +1P 断路器宽度:约 18 mm +2P 断路器宽度:约 36 mm +3P 断路器宽度:约 54 mm +``` + +### 9.3 摆放接线端子 + +端子片可按固定间距复制。 + +例如本仓库生成的端子片: + +```text +data/examples/qet_terminal_block/qet_terminal_slice.FCStd +``` + +宽度为: + +```text +5.2 mm +``` + +操作建议: + +1. 导入一个端子片。 +2. 移动到导轨上。 +3. 用 Draft 阵列或 Link 复制。 +4. X 方向间距设为 `5.2 mm`。 +5. 需要端子排编号时,后续在 QET 2D 侧维护端子 UUID 和端子名称。 + +### 9.4 摆放电流互感器 + +电流互感器一般装在安装板或导轨附近。 + +建议: + +1. 使用带 `P1/P2` 或 `S1/S2` 模板端子的 FCStd。 +2. 放置到一次线穿过的位置。 +3. 生成工程端子后,再接二次线。 + +### 9.5 摆放接地排 + +接地排建议做成 FCStd 模板。 + +端子命名可用: + +```text +PE1 +PE2 +PE3 +... +``` + +如果只是视觉资产,可以不加端子。若要接线,必须加端子 LCS。 + +--- + +## 10. 生成工程端子 + +设备放好以后,如果设备模板里有端子 LCS,需要生成工程端子。 + +操作: + +1. 切换到 `QET模板`。 +2. 如果只处理某个设备,先在树中选择该设备组。 +3. 点击 `生成工程端子`。 +4. 查看报告视图或控制台输出。 + +成功时会看到类似信息: + +```text +工程端子生成完成:设备 N 个,新增 X 个,更新 Y 个,本地端子 Z 个,跳过无模板设备 K 个。 +``` + +说明: + +- 有 QET 真实 `terminal_uuid` 时,会生成可回写的工程端子。 +- 没有 QET 真实 `terminal_uuid` 时,手动生成的是 `local:*` 本地端子。 +- 本地端子可以用于 3D 验证,但不能可靠回写到 QET 2D 端子。 + +工程端子通常在树中位于: + +```text +QETExchangeDevices + QETDevice_ + QETTerminals_ + ... +``` + +--- + +## 11. 手动布线 + +### 11.1 打开手动布线面板 + +1. 切换到 `QET模板`。 +2. 点击 `3D手动布线`。 + +面板中常用按钮: + +| 按钮 | 用途 | +| --- | --- | +| `选择导线任务` | 使用 QET 导入的某条导线任务 | +| `刷新任务` | 重新读取导线任务 | +| `端子出线长度` | 设置从端子出来的第一段长度 | +| `导入线槽` | 导入线槽资产 | +| `导入导轨` | 导入导轨资产 | +| `应用载体长度` | 修改选中线槽/导轨长度 | +| `标记为线槽` | 把选中对象标记为线槽 | +| `标记为柜面` | 把选中对象标记为柜面 | +| `标记为导轨` | 把选中对象标记为导轨 | +| `设为起点` | 把选中工程端子作为起点 | +| `添加折点` | 添加一个路径折点 | +| `删除最后折点` | 删除最后一个路径折点 | +| `设为终点并生成` | 选择终点并生成导线 | +| `检查最近导线` | 诊断最近生成的导线 | +| `检查全部导线` | 检查所有导线 | +| `清除草稿` | 清除当前布线草稿 | +| `保存并回写` | 保存 scene.FCStd 并生成回写 JSON | + +### 11.2 通过导线任务布线 + +如果 QET 已导入导线任务: + +1. 打开 `3D手动布线` 面板。 +2. 在任务列表中选择一条任务。 +3. 点击 `选择导线任务`。 +4. 面板会根据任务记录起点/终点端子。 +5. 在 3D 视图中添加必要折点。 +6. 点击 `设为终点并生成`。 +7. 点击 `检查最近导线`。 +8. 没问题后点击 `保存并回写`。 + +### 11.3 手动选择两个端子布线 + +如果没有导线任务,或者只是验证: + +1. 在树中或 3D 视图选择一个工程端子。 +2. 点击 `设为起点`。 +3. 根据需要选择线槽附近的点或对象。 +4. 点击 `添加折点`。 +5. 重复添加折点,让线沿线槽走。 +6. 选择另一个工程端子。 +7. 点击 `设为终点并生成`。 +8. 检查导线。 +9. 保存并回写。 + +注意:必须选择工程端子,不要选择模板端子。 + +--- + +## 12. 自动布线 + +自动布线适合在端子和走线网络准备好后使用。 + +### 12.1 打开自动布线面板 + +1. 切换到 `QET模板`。 +2. 点击 `3D自动布线`。 + +常用按钮: + +| 按钮 | 用途 | +| --- | --- | +| `扫描端子/网络` | 统计端子、导线任务、走线路径 | +| `从线槽实体生成中心路径` | 从线槽实体生成可走线路径 | +| `从线槽/草图创建路由路径` | 从选中线槽或草图生成路径 | +| `从选中面创建辅助路由区域` | 生成辅助路由区域 | +| `测试布线选中两个端子` | 对两个选中端子做单条自动布线测试 | +| `按导线任务自动布线全部` | 根据 QET 导线任务批量布线 | +| `清除自动布线` | 删除自动生成导线 | +| `清除走线路径` | 删除路由载体 | +| `保存` | 保存文档和回写结果 | + +### 12.2 自动布线前置条件 + +自动布线前建议先满足: + +1. 设备已经摆放到位。 +2. 工程端子已经生成。 +3. 线槽已经导入并标记。 +4. 已从线槽生成中心路径。 +5. QET 导线任务存在,或手动选中了两个工程端子。 + +### 12.3 生成线槽中心路径 + +1. 选择线槽对象。 +2. 打开 `3D自动布线` 面板。 +3. 点击 `从线槽实体生成中心路径`。 +4. 点击 `扫描端子/网络`。 + +如果扫描结果显示有 carrier / segment / node,说明走线网络已建立。 + +### 12.4 批量自动布线 + +1. 确认 QET 已导入导线任务。 +2. 点击 `扫描端子/网络`。 +3. 点击 `按导线任务自动布线全部`。 +4. 查看状态中的 routed、collision_warnings、missing_terminals。 +5. 若有 missing terminals,说明某些 2D 端子没有对应工程端子。 +6. 保存。 + +--- + +## 13. 保存和回写 + +### 13.1 保存 FreeCAD 文档 + +装配和布线后必须保存: + +```text +scene.FCStd +``` + +因为当前第一版 3D 位姿、装配状态、线几何都以 FreeCAD 文档为准。 + +### 13.2 回写给 QET + +在 `3D手动布线` 面板中点击: + +```text +保存并回写 +``` + +或在自动布线面板点击: + +```text +保存 +``` + +FreeCADExchange 会生成 3D -> 2D 的回写结果。 + +第一版回写重点是最小绑定和导线结果,不把完整 3D 位姿写回数据库。 + +--- + +## 14. 推荐实际操作顺序示例 + +下面是从空机柜开始的一个典型操作: + +1. 从 QET 点击 `3D视图` 打开 FreeCAD。 +2. 保存或确认当前场景为 `scene.FCStd`。 +3. 导入空机柜。 +4. 切到 `Assembly`,固定空机柜。 +5. 切到 `QET模板 -> 3D手动布线`。 +6. 输入导轨长度,点击 `导入导轨`。 +7. 移动导轨到机柜背板。 +8. 选择导轨,点击 `标记为导轨`。 +9. 输入线槽长度,点击 `导入线槽`。 +10. 移动线槽到导轨上方或下方。 +11. 选择线槽,点击 `标记为线槽`。 +12. 用 `QET模板 -> 导入模板实例` 导入断路器、互感器、端子排等 FCStd 模板。 +13. 用 `Assembly` 或 `Placement` 把设备摆到导轨上。 +14. 点击 `QET模板 -> 生成工程端子`。 +15. 打开 `3D手动布线`。 +16. 选择导线任务,或手动选起点端子。 +17. 沿线槽添加折点。 +18. 选择终点端子并生成导线。 +19. 点击 `检查最近导线` 或 `检查全部导线`。 +20. 点击 `保存并回写`。 + +--- + +## 15. 常见问题 + +### 15.1 为什么设备导入后没有端子? + +常见原因: + +- 设备不是 FCStd 模板。 +- 模板里没有 LCS 端子。 +- LCS 没有 `Role="Terminal"`。 +- LCS 没有 `CanWire=true`。 +- 没有点击 `生成工程端子`。 + +处理: + +1. 打开设备模板。 +2. 使用 `设备模板端子制作` 添加端子。 +3. 校验端子。 +4. 保存为 FCStd。 +5. 回到工程场景重新导入或更新设备。 +6. 点击 `生成工程端子`。 + +### 15.2 为什么不能布线? + +常见原因: + +- 选中的是普通几何,不是工程端子。 +- 选中的是模板端子,不是工程端子。 +- 起点或终点没有 `CanWire=true`。 +- 导线任务里的 `terminal_uuid` 在 3D 场景里找不到。 + +处理: + +1. 在树中找到 `QETTerminals_*` 分组。 +2. 选择其中的工程端子。 +3. 再执行 `设为起点` / `设为终点并生成`。 + +### 15.3 为什么自动布线找不到路径? + +常见原因: + +- 没有导入线槽。 +- 线槽没有标记为线槽。 +- 没有从线槽实体生成中心路径。 +- 端子离线槽太远,缺少过渡路径。 + +处理: + +1. 选择线槽,点击 `标记为线槽`。 +2. 打开 `3D自动布线`。 +3. 点击 `从线槽实体生成中心路径`。 +4. 点击 `扫描端子/网络`。 +5. 再尝试自动布线。 + +### 15.4 为什么保存后 QET 看不到 3D 位姿? + +这是当前第一版设计决定的。 + +第一版不把 3D 位姿写入数据库。3D 位姿、装配状态和导线几何保存在: + +```text +scene.FCStd +``` + +QET 侧只依赖最小绑定字段找到对应设备和端子。 + +### 15.5 当前截图里的 `Gears` 应该怎么处理? + +这是 Assembly 的齿轮约束任务,不适合机柜装配。 + +处理: + +1. 点击右侧任务面板的 `Cancel`。 +2. 回到正常选择状态。 +3. 机柜装配使用固定、平面对齐、距离、同轴/共线等约束。 +4. 如果只是摆放,直接编辑 `Placement` 更快。 + +--- + +## 16. 推荐使用习惯 + +1. 先粗摆,再精确约束。 +2. 常用设备都整理成 FCStd 模板。 +3. 有接线点的设备一定补模板端子。 +4. 导轨、线槽、机柜可作为纯几何资产。 +5. 端子排优先用单片端子复制,不要每次重建。 +6. 每完成一段装配就保存一次 `scene.FCStd`。 +7. 布线前先生成工程端子。 +8. 自动布线前先建立线槽中心路径。 +9. 不要手动改工程绑定 UUID。 +10. 不要依赖旧 3D 场景表保存位姿。 + +--- + +## 17. 一句话总结 + +机柜装配用 `Assembly` 把设备放准;端子语义用 `QET模板` 写进 FCStd 模板;工程中点击 `生成工程端子` 后,再用 `3D手动布线` 或 `3D自动布线` 连接工程端子;最终保存的是 `scene.FCStd`,它是 3D 装配和布线状态的真相源。