文档目录结构简洁化
This commit is contained in:
@@ -0,0 +1,318 @@
|
||||
# AI 智能引擎设计文档
|
||||
|
||||
> 文档定位:**AI 能力方向的设计性/专题性文档**。
|
||||
> 本文描述的是 AI 引擎的设计设想与能力规划,不作为当前实现状态的权威说明。当前状态见 [../../STATUS.md](../../STATUS.md),当前架构边界见 [../../ARCHITECTURE.md](../../ARCHITECTURE.md),后续路线见 [../../ROADMAP.md](../../ROADMAP.md)。
|
||||
## 一、AI 引擎架构
|
||||
|
||||
### 1.1 整体架构
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ AI 智能引擎 │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
|
||||
│ │ 参数推荐器 │ │ 缺陷预测器 │ │ 成本估算器 │ │
|
||||
│ │ • 工艺参数 │ │ • 熔接痕 │ │ • 模具成本 │ │
|
||||
│ │ • 材料选择 │ │ • 缩痕 │ │ • 加工时间 │ │
|
||||
│ │ • 模具设计 │ │ • 翘曲 │ │ • 材料成本 │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────────┘ │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ AI 模型层 │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
|
||||
│ │ 大语言模型 │ │ 机器学习 │ │ 专家系统 │ │
|
||||
│ │ • GPT-4 │ │ • 回归模型 │ │ • 规则引擎 │ │
|
||||
│ │ • 本地LLM │ │ • 分类模型 │ │ • 知识库 │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────────┘ │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ 数据层 │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
|
||||
│ │ 几何数据 │ │ 工艺数据库 │ │ 历史案例库 │ │
|
||||
│ │ • STP特征 │ │ • 材料参数 │ │ • 成功案例 │ │
|
||||
│ │ • 网格数据 │ │ • 机器参数 │ │ • 失败案例 │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 二、功能模块设计
|
||||
|
||||
### 2.1 参数推荐器 (ParameterRecommender)
|
||||
|
||||
#### 输入数据
|
||||
- 产品几何特征(体积、表面积、壁厚等)
|
||||
- 材料类型(ABS、PP、PC等)
|
||||
- 生产要求(产量、质量等级)
|
||||
|
||||
#### 输出参数
|
||||
```python
|
||||
{
|
||||
"injection_pressure": 80.0, # 注塑压力 (MPa)
|
||||
"injection_speed": 50.0, # 注塑速度 (mm/s)
|
||||
"mold_temperature": 60.0, # 模具温度 (°C)
|
||||
"melt_temperature": 230.0, # 熔体温度 (°C)
|
||||
"cooling_time": 25.0, # 冷却时间 (s)
|
||||
"packing_pressure": 40.0, # 保压压力 (MPa)
|
||||
"packing_time": 10.0 # 保压时间 (s)
|
||||
}
|
||||
```
|
||||
|
||||
#### 推荐算法
|
||||
1. **基于规则的初始推荐** - 使用材料数据库和几何规则
|
||||
2. **机器学习优化** - 基于历史数据的回归模型
|
||||
3. **LLM智能调整** - 使用大语言模型进行参数微调
|
||||
|
||||
### 2.2 缺陷预测器 (DefectPredictor)
|
||||
|
||||
#### 预测缺陷类型
|
||||
- **熔接痕 (Weld Lines)** - 流道交汇处
|
||||
- **缩痕 (Sink Marks)** - 厚壁区域
|
||||
- **翘曲 (Warpage)** - 冷却不均匀
|
||||
- **气穴 (Air Traps)** - 排气不良
|
||||
|
||||
#### 预测模型
|
||||
```python
|
||||
class DefectPredictionModel:
|
||||
def predict_weld_lines(self, geometry, process_params):
|
||||
"""预测熔接痕位置和严重程度"""
|
||||
|
||||
def predict_sink_marks(self, wall_thickness, cooling_params):
|
||||
"""预测缩痕风险"""
|
||||
|
||||
def predict_warpage(self, geometry, material, process_params):
|
||||
"""预测翘曲变形"""
|
||||
```
|
||||
|
||||
#### 特征工程
|
||||
- 几何特征:壁厚分布、流长比、投影面积
|
||||
- 工艺特征:注射速度、压力曲线、温度分布
|
||||
- 材料特征:收缩率、粘度、热传导系数
|
||||
|
||||
### 2.3 成本估算器 (CostEstimator)
|
||||
|
||||
#### 成本构成分析
|
||||
```python
|
||||
{
|
||||
"mold_cost": {
|
||||
"material_cost": 15000, # 材料成本
|
||||
"machining_cost": 30000, # 加工成本
|
||||
"design_cost": 8000, # 设计成本
|
||||
"standard_parts": 5000 # 标准件成本
|
||||
},
|
||||
"production_cost": {
|
||||
"cycle_time": 45.0, # 周期时间 (s)
|
||||
"machine_rate": 120.0, # 机台费率 (元/小时)
|
||||
"material_cost_per_part": 0.8 # 单件材料成本
|
||||
},
|
||||
"total_cost": 58000 # 总成本
|
||||
}
|
||||
```
|
||||
|
||||
## 三、AI 模型选型
|
||||
|
||||
### 3.1 大语言模型 (LLM)
|
||||
|
||||
#### 云端方案
|
||||
- **OpenAI GPT-4** - 高精度,需要网络连接
|
||||
- **Azure OpenAI** - 企业级,数据安全
|
||||
- **百度文心一言** - 中文优化,本地化服务
|
||||
|
||||
#### 本地方案
|
||||
- **Llama 2/3** - 开源,可本地部署
|
||||
- **ChatGLM** - 中文优化,轻量级
|
||||
- **Qwen系列** - 阿里开源,性能优秀
|
||||
|
||||
### 3.2 机器学习模型
|
||||
|
||||
#### 回归模型(参数预测)
|
||||
- **XGBoost** - 高性能,可解释性较好
|
||||
- **LightGBM** - 快速训练,内存效率高
|
||||
- **随机森林** - 稳定,抗过拟合
|
||||
|
||||
#### 分类模型(缺陷预测)
|
||||
- **支持向量机 (SVM)** - 小样本效果好
|
||||
- **神经网络 (NN)** - 复杂模式识别
|
||||
- **集成学习** - 结合多个模型优势
|
||||
|
||||
### 3.3 专家系统
|
||||
|
||||
#### 规则库设计
|
||||
```python
|
||||
# rules/injection_molding_rules.py
|
||||
|
||||
MATERIAL_RULES = {
|
||||
"ABS": {
|
||||
"melt_temp_range": [200, 240],
|
||||
"mold_temp_range": [40, 80],
|
||||
"shrinkage": 0.005
|
||||
},
|
||||
"PP": {
|
||||
"melt_temp_range": [200, 280],
|
||||
"mold_temp_range": [20, 80],
|
||||
"shrinkage": 0.016
|
||||
}
|
||||
}
|
||||
|
||||
GEOMETRY_RULES = {
|
||||
"thin_wall": {"max_thickness": 2.0, "min_thickness": 0.5},
|
||||
"thick_wall": {"max_thickness": 10.0, "min_thickness": 2.0},
|
||||
"flow_length_ratio": 150 # 流长比限制
|
||||
}
|
||||
```
|
||||
|
||||
## 四、数据管道设计
|
||||
|
||||
### 4.1 数据采集
|
||||
|
||||
#### 几何特征提取
|
||||
```python
|
||||
class GeometryFeatureExtractor:
|
||||
def extract_basic_features(self, stp_file):
|
||||
"""提取基础几何特征"""
|
||||
features = {
|
||||
"volume": self.calculate_volume(),
|
||||
"surface_area": self.calculate_surface_area(),
|
||||
"bounding_box": self.get_bounding_box(),
|
||||
"center_of_mass": self.get_center_of_mass()
|
||||
}
|
||||
return features
|
||||
|
||||
def extract_advanced_features(self, mesh):
|
||||
"""提取高级几何特征"""
|
||||
features = {
|
||||
"wall_thickness_distribution": self.analyze_wall_thickness(),
|
||||
"curvature_analysis": self.analyze_curvature(),
|
||||
"undercut_detection": self.detect_undercuts()
|
||||
}
|
||||
return features
|
||||
```
|
||||
|
||||
#### 工艺数据收集
|
||||
- 注塑机参数记录
|
||||
- 质量检测数据
|
||||
- 生产环境数据
|
||||
|
||||
### 4.2 数据预处理
|
||||
|
||||
#### 特征工程
|
||||
```python
|
||||
# features/feature_engineering.py
|
||||
|
||||
class MoldFeatureEngineer:
|
||||
def create_engineering_features(self, raw_features):
|
||||
"""创建工程特征"""
|
||||
engineered = {
|
||||
"flow_length_ratio": raw_features["flow_length"] / raw_features["wall_thickness"],
|
||||
"projected_area_volume_ratio": raw_features["projected_area"] / raw_features["volume"],
|
||||
"complexity_index": self.calculate_complexity()
|
||||
}
|
||||
return engineered
|
||||
```
|
||||
|
||||
#### 数据标准化
|
||||
- 数值特征标准化
|
||||
- 类别特征编码
|
||||
- 缺失值处理
|
||||
|
||||
## 五、API 接口设计
|
||||
|
||||
### 5.1 REST API 端点
|
||||
|
||||
```python
|
||||
# src/api/ai_routes.py
|
||||
|
||||
@ai_bp.route('/api/ai/analyze', methods=['POST'])
|
||||
def analyze_mold_design():
|
||||
"""AI分析模具设计"""
|
||||
data = request.get_json()
|
||||
|
||||
# 调用AI引擎
|
||||
result = ai_engine.analyze_design(
|
||||
geometry=data['geometry'],
|
||||
material=data['material'],
|
||||
requirements=data['requirements']
|
||||
)
|
||||
|
||||
return jsonify(result)
|
||||
|
||||
@ai_bp.route('/api/ai/predict-defects', methods=['POST'])
|
||||
def predict_defects():
|
||||
"""预测缺陷风险"""
|
||||
data = request.get_json()
|
||||
|
||||
prediction = defect_predictor.predict(
|
||||
design=data['design'],
|
||||
process_params=data['process_params']
|
||||
)
|
||||
|
||||
return jsonify(prediction)
|
||||
```
|
||||
|
||||
### 5.2 实时推理服务
|
||||
|
||||
#### 模型服务化
|
||||
```python
|
||||
# src/services/ai_service.py
|
||||
|
||||
class AIService:
|
||||
def __init__(self):
|
||||
self.parameter_model = load_parameter_model()
|
||||
self.defect_model = load_defect_model()
|
||||
self.llm_client = setup_llm_client()
|
||||
|
||||
async def get_recommendations(self, input_data):
|
||||
"""获取AI推荐"""
|
||||
# 并行调用多个模型
|
||||
tasks = [
|
||||
self.parameter_model.predict(input_data),
|
||||
self.defect_model.predict(input_data),
|
||||
self.llm_client.analyze(input_data)
|
||||
]
|
||||
|
||||
results = await asyncio.gather(*tasks)
|
||||
return self.aggregate_results(results)
|
||||
```
|
||||
|
||||
## 六、实施计划
|
||||
|
||||
### 6.1 第一阶段:基础AI功能(2-3周)
|
||||
1. 集成LLM API实现参数推荐
|
||||
2. 开发基于规则的专家系统
|
||||
3. 创建基础的数据采集管道
|
||||
|
||||
### 6.2 第二阶段:机器学习模型(3-4周)
|
||||
1. 收集训练数据
|
||||
2. 训练参数预测模型
|
||||
3. 开发缺陷预测算法
|
||||
|
||||
### 6.3 第三阶段:优化完善(2-3周)
|
||||
1. 模型性能优化
|
||||
2. 用户反馈集成
|
||||
3. 持续学习机制
|
||||
|
||||
## 七、性能指标
|
||||
|
||||
### 7.1 模型评估指标
|
||||
- **参数推荐准确率** > 85%
|
||||
- **缺陷预测召回率** > 90%
|
||||
- **推理响应时间** < 3秒
|
||||
- **系统可用性** > 99.5%
|
||||
|
||||
### 7.2 业务价值指标
|
||||
- **模具设计时间减少** 30%
|
||||
- **试模次数减少** 50%
|
||||
- **产品质量提升** 20%
|
||||
- **生产成本降低** 15%
|
||||
|
||||
## 八、风险控制
|
||||
|
||||
### 8.1 技术风险
|
||||
- **模型准确性** - 多模型集成,人工审核
|
||||
- **数据质量** - 数据清洗和验证流程
|
||||
- **系统稳定性** - 熔断机制和降级策略
|
||||
|
||||
### 8.2 业务风险
|
||||
- **用户接受度** - 渐进式推广,培训支持
|
||||
- **知识产权** - 数据脱敏,合规使用
|
||||
- **成本控制** - 按需使用,优化资源配置
|
||||
|
||||
---
|
||||
*文档版本:v1.0*
|
||||
*创建日期:2026-02-17*
|
||||
@@ -0,0 +1,157 @@
|
||||
# AI + FreeCAD 集成方案
|
||||
|
||||
> 文档定位:**AI / FreeCAD 集成方向的专题设计文档**。
|
||||
> 本文描述的是集成设想、能力规划与差距分析,不作为当前实现状态的权威说明。当前状态见 [../../STATUS.md](../../STATUS.md),当前架构边界见 [../../ARCHITECTURE.md](../../ARCHITECTURE.md),后续路线见 [../../ROADMAP.md](../../ROADMAP.md)。
|
||||
## 一、项目概述
|
||||
|
||||
本文档描述 geMoldInsight 项目集成 AI 智能引擎和 FreeCAD 的完整方案,实现真实的模具型腔生成和 G 代码输出功能。
|
||||
|
||||
## 二、现状分析
|
||||
|
||||
### 2.1 当前能力
|
||||
- PythonOCC 几何内核(解析STP、基础几何分析)
|
||||
- 简化版模具型腔生成(模拟数据)
|
||||
- 数据持久化架构(PostgreSQL + RustFS)
|
||||
- Web API 和可视化界面
|
||||
|
||||
### 2.2 当前不足
|
||||
- 模具型腔生成是简化版,未真正切割型腔/型芯
|
||||
- 缺少 G 代码生成功能
|
||||
- 缺少 AI 智能优化能力
|
||||
|
||||
## 三、集成架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ 用户交互层(已有) │
|
||||
│ Web UI ←→ REST API ←→ 前端可视化 │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ 业务逻辑层(增强) │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │
|
||||
│ │ AI 智能引擎 │ │ FreeCAD模块 │ │ G代码生成器 │ │
|
||||
│ │ • 参数优化 │ │ • 模具设计 │ │ • CAM路径规划 │ │
|
||||
│ │ • 缺陷预测 │ │ • 布尔运算 │ │ • 后处理输出 │ │
|
||||
│ │ • 工艺推荐 │ │ • 型腔分割 │ │ • 仿真验证 │ │
|
||||
│ └──────────────┘ └──────────────┘ └──────────────────────┘ │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ 数据持久层(已有) │
|
||||
│ PostgreSQL(元数据)+ RustFS(文件存储) │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ 基础内核层 │
|
||||
│ PythonOCC(现有)+ FreeCAD API + 开源CAM库 │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 四、功能模块规划
|
||||
|
||||
### 4.1 FreeCAD 模具设计模块
|
||||
|
||||
| 功能 | 说明 | 优先级 |
|
||||
|------|------|--------|
|
||||
| **STP文件导入** | 使用 FreeCAD Part 模块读取 STEP 文件 | P0 |
|
||||
| **智能分型线检测** | 分析几何形状,自动计算最佳分型方向 | P0 |
|
||||
| **收缩率补偿** | 按材料收缩率自动放大模型 | P0 |
|
||||
| **拔模角分析** | 检测需要拔模的面,计算拔模角度 | P1 |
|
||||
| **型腔/型芯分割** | 使用布尔运算真正切割出型腔和型芯 | P0 |
|
||||
| **流道系统设计** | 自动生成冷/热流道、浇口 | P1 |
|
||||
| **冷却系统设计** | 自动生成冷却水道布局 | P2 |
|
||||
| **模具标准件库** | 模架、导柱、顶针等标准件 | P2 |
|
||||
|
||||
### 4.2 AI 智能引擎模块
|
||||
|
||||
| 功能 | 说明 | 优先级 |
|
||||
|------|------|--------|
|
||||
| **工艺参数推荐** | 基于产品几何推荐注塑参数 | P0 |
|
||||
| **缺陷预测** | 预测熔接痕、缩痕、翘曲风险 | P1 |
|
||||
| **模具材料推荐** | 根据产量、预算推荐模具材料 | P1 |
|
||||
| **成本估算** | 估算模具制造成本和周期 | P2 |
|
||||
| **设计优化建议** | 基于AI分析给出设计改进建议 | P2 |
|
||||
|
||||
### 4.3 G代码生成模块(CAM)
|
||||
|
||||
| 功能 | 说明 | 优先级 |
|
||||
|------|------|--------|
|
||||
| **粗加工路径** | 型腔粗铣路径规划 | P0 |
|
||||
| **精加工路径** | 型腔精铣路径规划 | P0 |
|
||||
| **电极加工** | 复杂区域电极设计和加工路径 | P1 |
|
||||
| **后处理输出** | 生成 Fanuc/Siemens 等格式 G代码 | P0 |
|
||||
| **加工仿真** | 刀具路径仿真验证 | P2 |
|
||||
|
||||
## 五、数据流设计
|
||||
|
||||
```
|
||||
用户上传STP文件
|
||||
↓
|
||||
[1] FreeCAD 导入并分析几何
|
||||
↓
|
||||
[2] AI 引擎分析并推荐参数
|
||||
↓
|
||||
[3] FreeCAD 生成模具型腔/型芯
|
||||
↓
|
||||
[4] CAM 模块生成加工路径
|
||||
↓
|
||||
[5] 输出 G代码 + 工艺文档
|
||||
↓
|
||||
存储到 RustFS + 元数据写入 PostgreSQL
|
||||
```
|
||||
|
||||
## 六、技术选型
|
||||
|
||||
| 模块 | 技术方案 | 理由 |
|
||||
|------|----------|------|
|
||||
| **CAD内核** | FreeCAD + PythonOCC | FreeCAD功能更强,PythonOCC保持兼容 |
|
||||
| **AI引擎** | OpenAI API / 本地LLM | 工艺参数推荐可用GPT-4,预测模型可训练 |
|
||||
| **CAM内核** | FreeCAD Path / PyCAM | FreeCAD自带CAM模块,可二次开发 |
|
||||
| **G代码后处理** | 自定义后处理器 | 支持主流数控系统 |
|
||||
| **几何算法** | CGAL / OpenCascade | 布尔运算、网格处理 |
|
||||
|
||||
## 七、实施阶段
|
||||
|
||||
### 第一阶段:FreeCAD 基础集成(2-3周)
|
||||
1. 安装 FreeCAD 并验证 Python API
|
||||
2. 实现 STP 文件导入功能
|
||||
3. 实现基础型腔/型芯分割
|
||||
4. 替换现有简化版模具生成器
|
||||
|
||||
### 第二阶段:AI 引擎接入(2-3周)
|
||||
1. 接入 LLM API 实现工艺参数推荐
|
||||
2. 开发缺陷预测模型
|
||||
3. 集成 AI 建议到现有流程
|
||||
|
||||
### 第三阶段:CAM/G代码生成(3-4周)
|
||||
1. 开发粗/精加工路径规划
|
||||
2. 实现 G代码后处理器
|
||||
3. 添加加工仿真验证
|
||||
|
||||
### 第四阶段:优化完善(持续)
|
||||
1. 性能优化
|
||||
2. 支持更多材料类型
|
||||
3. 扩展标准件库
|
||||
|
||||
## 八、数据库扩展
|
||||
|
||||
新增数据表:
|
||||
- `mold_designs` - 模具设计方案
|
||||
- `cam_operations` - CAM加工操作
|
||||
- `gcode_files` - G代码文件元数据
|
||||
- `ai_recommendations` - AI推荐记录
|
||||
|
||||
## 九、风险评估
|
||||
|
||||
| 风险 | 影响 | 缓解措施 |
|
||||
|------|------|----------|
|
||||
| FreeCAD API 稳定性 | 高 | 使用稳定版本,做好版本锁定 |
|
||||
| 布尔运算复杂模型失败 | 中 | 添加几何修复和容错处理 |
|
||||
| CAM算法精度问题 | 中 | 充分测试,提供仿真验证 |
|
||||
| AI推荐准确性 | 中 | 结合专家知识,持续训练优化 |
|
||||
|
||||
## 十、后续步骤
|
||||
|
||||
1. 阅读 `FREECAD_SETUP.md` 进行环境配置
|
||||
2. 查看 `AI_ENGINE_DESIGN.md` 了解AI模块设计
|
||||
3. 参考 `GCODE_GENERATION.md` 实现CAM功能
|
||||
|
||||
---
|
||||
*文档版本:v1.0*
|
||||
*创建日期:2026-02-17*
|
||||
*最后更新:2026-02-17*
|
||||
@@ -0,0 +1,234 @@
|
||||
# FreeCAD 安装配置指南
|
||||
|
||||
## 一、FreeCAD 安装
|
||||
|
||||
### 1.1 Windows 安装
|
||||
```bash
|
||||
# 方法1:使用 pip 安装
|
||||
pip install freecad
|
||||
|
||||
# 方法2:下载官方安装包
|
||||
# 访问 https://www.freecad.org/downloads.php
|
||||
# 下载 FreeCAD 0.21.2 或更新版本
|
||||
```
|
||||
|
||||
### 1.2 Linux 安装
|
||||
```bash
|
||||
# Ubuntu/Debian
|
||||
sudo apt-get install freecad freecad-python3
|
||||
|
||||
# CentOS/RHEL
|
||||
sudo yum install freecad
|
||||
|
||||
# 或使用 pip
|
||||
pip install freecad
|
||||
```
|
||||
|
||||
### 1.3 验证安装
|
||||
```python
|
||||
# 验证 FreeCAD Python API 是否可用
|
||||
import FreeCAD
|
||||
import Part
|
||||
import PartDesign
|
||||
|
||||
print("FreeCAD 版本:", FreeCAD.Version())
|
||||
print("安装成功!")
|
||||
```
|
||||
|
||||
## 二、项目依赖配置
|
||||
|
||||
### 2.1 更新 requirements.txt
|
||||
```txt
|
||||
# 现有依赖
|
||||
flask>=2.3.0
|
||||
flask-cors>=4.0.0
|
||||
pythonocc-core>=7.6.0
|
||||
numpy>=1.24.0
|
||||
scipy>=1.10.0
|
||||
pandas>=2.0.0
|
||||
matplotlib>=3.7.0
|
||||
plotly>=5.14.0
|
||||
psycopg2-binary>=2.9.0
|
||||
sqlalchemy>=2.0.0
|
||||
trimesh>=3.20.0
|
||||
pyvista>=0.38.0
|
||||
requests>=2.28.0
|
||||
pytest>=7.3.0
|
||||
|
||||
# 新增 FreeCAD 相关依赖
|
||||
freecad>=0.21.0
|
||||
freecad.part>=0.21.0
|
||||
freecad.partdesign>=0.21.0
|
||||
|
||||
# AI 相关依赖
|
||||
openai>=1.0.0
|
||||
langchain>=0.0.300
|
||||
scikit-learn>=1.3.0
|
||||
torch>=2.0.0
|
||||
```
|
||||
|
||||
### 2.2 安装依赖
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## 三、FreeCAD 模块结构
|
||||
|
||||
### 3.1 模块规划
|
||||
```
|
||||
src/core/freecad/
|
||||
├── __init__.py
|
||||
├── mold_generator.py # 模具生成器
|
||||
├── stp_importer.py # STP文件导入
|
||||
├── cavity_splitter.py # 型腔分割
|
||||
├── runner_designer.py # 流道设计
|
||||
├── cooling_designer.py # 冷却系统设计
|
||||
└── standard_parts.py # 标准件库
|
||||
```
|
||||
|
||||
### 3.2 核心类设计
|
||||
|
||||
#### FreeCADMoldGenerator(模具生成器)
|
||||
- `import_stp_file()` - 导入STP文件
|
||||
- `analyze_draft_angles()` - 拔模角分析
|
||||
- `detect_parting_line()` - 分型线检测
|
||||
- `split_cavity_core()` - 型腔/型芯分割
|
||||
|
||||
#### FreeCADSTPImporter(STP导入器)
|
||||
- `read_step_file()` - 读取STEP文件
|
||||
- `validate_geometry()` - 几何验证
|
||||
- `repair_geometry()` - 几何修复
|
||||
|
||||
#### FreeCADCavitySplitter(型腔分割器)
|
||||
- `create_parting_surface()` - 创建分型面
|
||||
- `boolean_split()` - 布尔运算分割
|
||||
- `create_mold_base()` - 创建模架
|
||||
|
||||
## 四、配置参数
|
||||
|
||||
### 4.1 模具参数配置
|
||||
```python
|
||||
# config/mold_parameters.py
|
||||
|
||||
# 材料收缩率
|
||||
MATERIAL_SHRINKAGE = {
|
||||
"ABS": 0.005,
|
||||
"PP": 0.016,
|
||||
"PC": 0.007,
|
||||
"POM": 0.020,
|
||||
"Nylon": 0.015
|
||||
}
|
||||
|
||||
# 拔模角度配置
|
||||
DRAFT_ANGLES = {
|
||||
"textured": 3.0, # 纹面
|
||||
"polished": 1.5, # 抛光
|
||||
"standard": 2.0 # 标准
|
||||
}
|
||||
|
||||
# 模具钢材参数
|
||||
MOLD_STEELS = {
|
||||
"P20": {"hardness": 30, "price": 1.0},
|
||||
"718": {"hardness": 35, "price": 1.2},
|
||||
"S136": {"hardness": 48, "price": 1.8},
|
||||
"NAK80": {"hardness": 40, "price": 2.0}
|
||||
}
|
||||
```
|
||||
|
||||
### 4.2 FreeCAD 配置
|
||||
```python
|
||||
# config/freecad_config.py
|
||||
|
||||
# FreeCAD 工作目录配置
|
||||
FREECAD_WORKSPACE = "workspace/freecad"
|
||||
FREECAD_TEMPLATES = "templates/freecad"
|
||||
|
||||
# 几何精度设置
|
||||
GEOMETRY_TOLERANCE = 1e-6
|
||||
BOOLEAN_PRECISION = 1e-5
|
||||
|
||||
# 导出设置
|
||||
EXPORT_FORMATS = ["step", "stl", "iges"]
|
||||
EXPORT_PRECISION = 0.001
|
||||
```
|
||||
|
||||
## 五、测试验证
|
||||
|
||||
### 5.1 功能测试
|
||||
```python
|
||||
# tests/test_freecad_integration.py
|
||||
|
||||
def test_stp_import():
|
||||
"""测试STP文件导入功能"""
|
||||
generator = FreeCADMoldGenerator()
|
||||
result = generator.import_stp_file("test.stp")
|
||||
assert result.success
|
||||
assert result.shape is not None
|
||||
|
||||
def test_cavity_split():
|
||||
"""测试型腔分割功能"""
|
||||
generator = FreeCADMoldGenerator()
|
||||
cavity, core = generator.split_cavity_core(test_shape)
|
||||
assert cavity.Volume > 0
|
||||
assert core.Volume > 0
|
||||
```
|
||||
|
||||
### 5.2 性能测试
|
||||
```python
|
||||
# tests/benchmark_freecad.py
|
||||
|
||||
def benchmark_boolean_operations():
|
||||
"""布尔运算性能测试"""
|
||||
# 测试不同复杂度的布尔运算性能
|
||||
pass
|
||||
```
|
||||
|
||||
## 六、故障排除
|
||||
|
||||
### 6.1 常见问题
|
||||
|
||||
#### FreeCAD 导入失败
|
||||
- **问题**: `ImportError: No module named 'FreeCAD'`
|
||||
- **解决**: 确保 FreeCAD 正确安装,检查 Python 路径
|
||||
|
||||
#### 布尔运算失败
|
||||
- **问题**: 复杂几何体布尔运算报错
|
||||
- **解决**: 使用几何修复工具,简化几何体
|
||||
|
||||
#### 内存不足
|
||||
- **问题**: 大模型处理时内存溢出
|
||||
- **解决**: 分块处理,使用内存优化算法
|
||||
|
||||
### 6.2 调试工具
|
||||
```python
|
||||
# utils/freecad_debug.py
|
||||
|
||||
def debug_geometry(shape):
|
||||
"""几何体调试工具"""
|
||||
print(f"顶点数: {len(shape.Vertexes)}")
|
||||
print(f"边数: {len(shape.Edges)}")
|
||||
print(f"面数: {len(shape.Faces)}")
|
||||
print(f"体积: {shape.Volume}")
|
||||
print(f"表面积: {shape.Area}")
|
||||
```
|
||||
|
||||
## 七、最佳实践
|
||||
|
||||
### 7.1 内存管理
|
||||
- 及时清理 FreeCAD 文档对象
|
||||
- 使用分块处理大模型
|
||||
- 避免同时打开多个复杂文档
|
||||
|
||||
### 7.2 错误处理
|
||||
- 所有 FreeCAD 操作添加异常捕获
|
||||
- 提供详细的错误信息和恢复建议
|
||||
- 实现自动几何修复机制
|
||||
|
||||
### 7.3 性能优化
|
||||
- 使用缓存机制存储中间结果
|
||||
- 并行处理多个几何操作
|
||||
- 优化布尔运算算法
|
||||
|
||||
---
|
||||
*文档版本:v1.0*
|
||||
*创建日期:2026-02-17*
|
||||
@@ -0,0 +1,399 @@
|
||||
# G代码生成方案设计文档
|
||||
|
||||
## 一、CAM模块架构
|
||||
|
||||
### 1.1 整体架构
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ G代码生成系统 │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
|
||||
│ │ 路径规划器 │ │ 刀具选择器 │ │ 后处理器 │ │
|
||||
│ │ • 粗加工 │ │ • 刀具库 │ │ • Fanuc格式 │ │
|
||||
│ │ • 精加工 │ │ • 切削参数 │ │ • Siemens格式 │ │
|
||||
│ │ • 清角加工 │ │ • 寿命管理 │ │ • Haas格式 │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────────┘ │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ 加工策略层 │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
|
||||
│ │ 型腔加工 │ │ 电极加工 │ │ 钻孔加工 │ │
|
||||
│ │ • 等高线 │ │ • 铜电极 │ │ • 冷却孔 │ │
|
||||
│ │ • 平行铣 │ │ • 石墨电极 │ │ • 顶针孔 │ │
|
||||
│ │ • 螺旋铣 │ │ • 精密加工 │ │ • 螺丝孔 │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────────┘ │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ 几何处理层 │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
|
||||
│ │ STL处理器 │ │ 网格优化器 │ │ 碰撞检测 │ │
|
||||
│ │ • STL导入 │ │ • 网格修复 │ │ • 刀具干涉 │ │
|
||||
│ │ • 三角化 │ │ • 法线校正 │ │ • 机床限制 │ │
|
||||
│ │ • 精度控制 │ │ • 简化优化 │ │ • 安全区域 │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 二、核心功能模块
|
||||
|
||||
### 2.1 路径规划器 (PathPlanner)
|
||||
|
||||
#### 粗加工策略
|
||||
```python
|
||||
class RoughingStrategy:
|
||||
def adaptive_clearing(self, stock, tool):
|
||||
"""自适应清根粗加工"""
|
||||
|
||||
def pocket_milling(self, cavity, tool):
|
||||
"""型腔铣削粗加工"""
|
||||
|
||||
def rest_milling(self, previous_tool, current_tool):
|
||||
"""残留区域加工"""
|
||||
```
|
||||
|
||||
#### 精加工策略
|
||||
```python
|
||||
class FinishingStrategy:
|
||||
def contour_parallel(self, surface, stepover):
|
||||
"""等高线精加工"""
|
||||
|
||||
def spiral_milling(self, cavity, stepover):
|
||||
"""螺旋精加工"""
|
||||
|
||||
def pencil_milling(self, corners, tool):
|
||||
"""清角精加工"""
|
||||
```
|
||||
|
||||
### 2.2 刀具选择器 (ToolSelector)
|
||||
|
||||
#### 刀具库配置
|
||||
```python
|
||||
# config/tool_library.py
|
||||
|
||||
TOOL_LIBRARY = {
|
||||
"roughing_endmill_16mm": {
|
||||
"type": "endmill",
|
||||
"diameter": 16.0,
|
||||
"flute_length": 50.0,
|
||||
"shank_diameter": 16.0,
|
||||
"cutting_edges": 4,
|
||||
"material": "carbide",
|
||||
"speeds_feeds": {
|
||||
"cutting_speed": 120, # m/min
|
||||
"feed_per_tooth": 0.15, # mm/tooth
|
||||
"axial_depth": 8.0, # mm
|
||||
"radial_depth": 12.0 # mm
|
||||
}
|
||||
},
|
||||
"finishing_ballnose_6mm": {
|
||||
"type": "ballnose",
|
||||
"diameter": 6.0,
|
||||
"flute_length": 25.0,
|
||||
"cutting_edges": 2,
|
||||
"material": "carbide",
|
||||
"speeds_feeds": {
|
||||
"cutting_speed": 150,
|
||||
"feed_per_tooth": 0.08,
|
||||
"axial_depth": 0.3,
|
||||
"radial_depth": 0.5
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 自动刀具选择算法
|
||||
```python
|
||||
class AutoToolSelector:
|
||||
def select_roughing_tool(self, cavity_volume, material):
|
||||
"""根据型腔体积选择粗加工刀具"""
|
||||
|
||||
def select_finishing_tool(self, surface_quality, corner_radius):
|
||||
"""根据表面质量要求选择精加工刀具"""
|
||||
|
||||
def optimize_tool_sequence(self, operations):
|
||||
"""优化刀具使用顺序"""
|
||||
```
|
||||
|
||||
### 2.3 后处理器 (PostProcessor)
|
||||
|
||||
#### 支持的数控系统
|
||||
```python
|
||||
# config/post_processors.py
|
||||
|
||||
SUPPORTED_CONTROLLERS = {
|
||||
"fanuc": {
|
||||
"g_code_dialect": "fanuc",
|
||||
"circular_interpolation": "G02/G03",
|
||||
"tool_change": "M06",
|
||||
"coolant": "M08/M09"
|
||||
},
|
||||
"siemens": {
|
||||
"g_code_dialect": "sinumerik",
|
||||
"circular_interpolation": "G02/G03",
|
||||
"tool_change": "T... M06",
|
||||
"coolant": "M08/M09"
|
||||
},
|
||||
"haas": {
|
||||
"g_code_dialect": "haas",
|
||||
"circular_interpolation": "G02/G03",
|
||||
"tool_change": "M06",
|
||||
"coolant": "M08/M09"
|
||||
},
|
||||
"heidenhain": {
|
||||
"g_code_dialect": "heidenhain",
|
||||
"circular_interpolation": "DR+",
|
||||
"tool_change": "TOOL CALL",
|
||||
"coolant": "M08/M09"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 三、加工工艺流程
|
||||
|
||||
### 3.1 标准加工序列
|
||||
|
||||
#### 型腔加工流程
|
||||
```python
|
||||
PROCESS_SEQUENCE = [
|
||||
# 阶段1: 粗加工
|
||||
{
|
||||
"operation": "roughing",
|
||||
"tool": "roughing_endmill_16mm",
|
||||
"strategy": "adaptive_clearing",
|
||||
"stock_allowance": 0.5
|
||||
},
|
||||
|
||||
# 阶段2: 半精加工
|
||||
{
|
||||
"operation": "semi_finishing",
|
||||
"tool": "endmill_10mm",
|
||||
"strategy": "contour_parallel",
|
||||
"stock_allowance": 0.1
|
||||
},
|
||||
|
||||
# 阶段3: 精加工
|
||||
{
|
||||
"operation": "finishing",
|
||||
"tool": "ballnose_6mm",
|
||||
"strategy": "spiral_milling",
|
||||
"stepover": 0.3
|
||||
},
|
||||
|
||||
# 阶段4: 清角加工
|
||||
{
|
||||
"operation": "corner_cleaning",
|
||||
"tool": "ballnose_3mm",
|
||||
"strategy": "pencil_milling"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### 3.2 电极加工流程
|
||||
|
||||
#### 铜电极加工
|
||||
```python
|
||||
ELECTRODE_PROCESS = [
|
||||
# 粗加工
|
||||
{"tool": "endmill_8mm", "strategy": "roughing"},
|
||||
|
||||
# 精加工
|
||||
{"tool": "ballnose_3mm", "strategy": "finishing"},
|
||||
|
||||
# 放电区域加工
|
||||
{"tool": "ballnose_1mm", "strategy": "detail_milling"}
|
||||
]
|
||||
```
|
||||
|
||||
## 四、G代码格式规范
|
||||
|
||||
### 4.1 基本G代码结构
|
||||
```gcode
|
||||
% 程序开始
|
||||
O1000 (模具型腔加工程序)
|
||||
G17 G40 G49 G80 G90 (安全初始化)
|
||||
G54 (工件坐标系)
|
||||
|
||||
(=== 粗加工 ===)
|
||||
T01 M06 (换刀: 16mm端铣刀)
|
||||
G43 H01 Z100.0 (刀具长度补偿)
|
||||
S1800 M03 (主轴启动)
|
||||
G00 X0 Y0 Z10.0 (快速定位)
|
||||
M08 (冷却液开)
|
||||
|
||||
G01 Z-5.0 F500 (下刀)
|
||||
G01 X50.0 Y30.0 F800 (直线插补)
|
||||
G02 X60.0 Y40.0 I10.0 J0.0 F600 (圆弧插补)
|
||||
|
||||
(=== 精加工 ===)
|
||||
T02 M06 (换刀: 6mm球头刀)
|
||||
G43 H02 Z100.0
|
||||
S3000 M03
|
||||
|
||||
(程序结束)
|
||||
M09 (冷却液关)
|
||||
M05 (主轴停)
|
||||
G28 G91 Z0 (Z轴回零)
|
||||
G28 G91 X0 Y0 (XY轴回零)
|
||||
M30 (程序结束)
|
||||
% 程序结束
|
||||
```
|
||||
|
||||
### 4.2 加工参数计算
|
||||
|
||||
#### 切削参数计算
|
||||
```python
|
||||
class CuttingParameters:
|
||||
def calculate_spindle_speed(self, tool_diameter, cutting_speed):
|
||||
"""计算主轴转速"""
|
||||
# N = (1000 * Vc) / (π * D)
|
||||
return (1000 * cutting_speed) / (math.pi * tool_diameter)
|
||||
|
||||
def calculate_feed_rate(self, spindle_speed, feed_per_tooth, teeth):
|
||||
"""计算进给速率"""
|
||||
# F = N * fz * z
|
||||
return spindle_speed * feed_per_tooth * teeth
|
||||
|
||||
def calculate_machining_time(self, toolpath_length, feed_rate):
|
||||
"""估算加工时间"""
|
||||
return toolpath_length / feed_rate * 60 # 分钟
|
||||
```
|
||||
|
||||
## 五、碰撞检测与安全
|
||||
|
||||
### 5.1 碰撞检测算法
|
||||
```python
|
||||
class CollisionDetector:
|
||||
def check_tool_holder_collision(self, toolpath, stock, tool_geometry):
|
||||
"""检测刀柄碰撞"""
|
||||
|
||||
def check_rapid_moves(self, rapid_paths, obstacles):
|
||||
"""检测快速移动碰撞"""
|
||||
|
||||
def verify_machine_limits(self, coordinates, machine_limits):
|
||||
"""验证机床行程限制"""
|
||||
```
|
||||
|
||||
### 5.2 安全策略
|
||||
```python
|
||||
SAFETY_STRATEGIES = {
|
||||
"retract_height": 10.0, # 抬刀高度
|
||||
"safe_clearance": 5.0, # 安全距离
|
||||
"max_feed_rate": 5000.0, # 最大进给速率
|
||||
"max_spindle_speed": 24000.0, # 最大主轴转速
|
||||
"emergency_stop_conditions": [
|
||||
"tool_breakage",
|
||||
"collision_detected",
|
||||
"over_temperature"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 六、仿真与验证
|
||||
|
||||
### 6.1 刀具路径仿真
|
||||
```python
|
||||
class ToolpathSimulator:
|
||||
def visualize_toolpath(self, gcode_file):
|
||||
"""可视化刀具路径"""
|
||||
|
||||
def simulate_material_removal(self, toolpath, stock):
|
||||
"""模拟材料去除"""
|
||||
|
||||
def detect_gouging(self, toolpath, design_surface):
|
||||
"""检测过切"""
|
||||
```
|
||||
|
||||
### 6.2 加工质量分析
|
||||
```python
|
||||
class QualityAnalyzer:
|
||||
def analyze_surface_roughness(self, toolpath, stepover):
|
||||
"""分析表面粗糙度"""
|
||||
|
||||
def check_dimensional_accuracy(self, simulated_part, design):
|
||||
"""检查尺寸精度"""
|
||||
|
||||
def estimate_tool_wear(self, cutting_length, material):
|
||||
"""估算刀具磨损"""
|
||||
```
|
||||
|
||||
## 七、文件输出格式
|
||||
|
||||
### 7.1 G代码文件结构
|
||||
```python
|
||||
# src/core/gcode_writer.py
|
||||
|
||||
class GCodeWriter:
|
||||
def write_program_header(self, program_number, program_name):
|
||||
"""写入程序头"""
|
||||
|
||||
def write_tool_change(self, tool_number, tool_description):
|
||||
"""写入换刀指令"""
|
||||
|
||||
def write_motion_commands(self, toolpath, feed_rate):
|
||||
"""写入运动指令"""
|
||||
|
||||
def write_program_footer(self):
|
||||
"""写入程序尾"""
|
||||
```
|
||||
|
||||
### 7.2 工艺文档输出
|
||||
```python
|
||||
class ProcessDocumentation:
|
||||
def generate_setup_sheet(self, operations, tools, materials):
|
||||
"""生成加工作业指导书"""
|
||||
|
||||
def generate_tool_list(self, tools_used):
|
||||
"""生成刀具清单"""
|
||||
|
||||
def generate_inspection_report(self, quality_metrics):
|
||||
"""生成检测报告"""
|
||||
```
|
||||
|
||||
## 八、实施计划
|
||||
|
||||
### 8.1 第一阶段:基础路径生成(3-4周)
|
||||
1. 实现STL几何导入和预处理
|
||||
2. 开发基础粗精加工算法
|
||||
3. 创建Fanuc格式后处理器
|
||||
|
||||
### 8.2 第二阶段:高级功能(4-5周)
|
||||
1. 实现碰撞检测和安全策略
|
||||
2. 开发刀具路径优化算法
|
||||
3. 添加多轴加工支持
|
||||
|
||||
### 8.3 第三阶段:完善优化(2-3周)
|
||||
1. 集成加工仿真功能
|
||||
2. 优化性能和用户体验
|
||||
3. 添加更多数控系统支持
|
||||
|
||||
## 九、技术选型
|
||||
|
||||
### 9.1 几何处理库
|
||||
- **FreeCAD Path Workbench** - 开源CAM解决方案
|
||||
- **PyCAM** - 纯Python CAM库
|
||||
- **OpenCASCADE** - 几何内核,用于复杂运算
|
||||
|
||||
### 9.2 可视化库
|
||||
- **PyVista** - 3D数据可视化
|
||||
- **Matplotlib** - 2D图表和路径显示
|
||||
- **Plotly** - 交互式3D可视化
|
||||
|
||||
### 9.3 数值计算
|
||||
- **NumPy** - 数值计算基础
|
||||
- **SciPy** - 科学计算和优化
|
||||
- **OpenGL** - 实时3D渲染
|
||||
|
||||
## 十、质量保证
|
||||
|
||||
### 10.1 测试策略
|
||||
- **单元测试** - 每个算法模块单独测试
|
||||
- **集成测试** - 完整加工流程测试
|
||||
- **回归测试** - 确保新功能不破坏现有功能
|
||||
|
||||
### 10.2 验证标准
|
||||
- **G代码语法正确性** - 符合数控系统规范
|
||||
- **加工安全性** - 无碰撞风险
|
||||
- **加工质量** - 满足精度要求
|
||||
- **加工效率** - 优化加工时间
|
||||
|
||||
---
|
||||
*文档版本:v1.0*
|
||||
*创建日期:2026-02-17*
|
||||
@@ -0,0 +1,286 @@
|
||||
# 分模算法改进总结
|
||||
|
||||
## 概述
|
||||
|
||||
本次改进实现了更合理的分模算法,使用传统几何方法计算分型面和分型线,同时预留了 AI 模型介入的接口。
|
||||
|
||||
## 主要改进
|
||||
|
||||
### 1. 分型面检测优化
|
||||
|
||||
#### 改进前
|
||||
- 固定使用 Z 方向作为分型方向
|
||||
- 分型面总是水平面(XY 平面)
|
||||
- 不考虑产品实际几何特征
|
||||
|
||||
#### 改进后
|
||||
实现三级检测策略:
|
||||
|
||||
```python
|
||||
def _detect_parting_surface(self, shape, analysis):
|
||||
"""
|
||||
优先级:
|
||||
1. AI 模型检测(如果已设置)
|
||||
2. 基于法向量分析的几何方法
|
||||
3. 简化方法(基于边界框,回退方案)
|
||||
"""
|
||||
```
|
||||
|
||||
**法向量分析** (`_analyze_face_normals`):
|
||||
- 统计所有面的法向量
|
||||
- 计算平均法向量作为最优分型方向
|
||||
- 自动适应产品几何特征
|
||||
|
||||
**代码位置**: [`mold_generator.py:637-684`](file:///d:/project/geMoldInsight/src/core/mold_generator.py#L637-L684)
|
||||
|
||||
### 2. 真实分型线计算
|
||||
|
||||
#### 改进前
|
||||
- 使用简化矩形(4 个点)
|
||||
- 不贴合产品实际轮廓
|
||||
|
||||
#### 改进后
|
||||
使用布尔运算求交线:
|
||||
|
||||
```python
|
||||
def _calculate_parting_line(self, shape, parting_surface):
|
||||
"""
|
||||
使用 BRepAlgoAPI_Section 计算产品与分型面的真实交线
|
||||
- 提取交线(边)
|
||||
- 沿边采样点(至少 10 个点)
|
||||
- 返回精确的分型线路径
|
||||
"""
|
||||
```
|
||||
|
||||
**代码位置**: [`mold_generator.py:706-758`](file:///d:/project/geMoldInsight/src/core/mold_generator.py#L706-L758)
|
||||
|
||||
### 3. AI 模型接口预留
|
||||
|
||||
#### 接口设计
|
||||
|
||||
添加了 AI 模型集成方法:
|
||||
|
||||
```python
|
||||
def set_ai_model(self, parting_detector=None, draft_analyzer=None):
|
||||
"""设置 AI 模型接口"""
|
||||
self.ai_parting_detector = parting_detector
|
||||
self.ai_draft_analyzer = draft_analyzer
|
||||
```
|
||||
|
||||
#### AI 模型能力
|
||||
|
||||
1. **分型面检测器** (`AIPartingSurfaceDetector`)
|
||||
- 分析产品 3D 几何
|
||||
- 预测最优分型面位置和方向
|
||||
- 识别倒扣(undercut)区域
|
||||
|
||||
2. **拔模分析器** (`AIDraftAnalyzer`)
|
||||
- 分析哪些面需要拔模
|
||||
- 预测最优拔模角度
|
||||
- 检测脱模干涉
|
||||
|
||||
3. **型腔布局优化器** (`AICavityLayoutOptimizer`)
|
||||
- 优化多型腔排列
|
||||
- 设计流道系统
|
||||
- 平衡材料流动
|
||||
|
||||
**代码位置**: [`ai_mold_assistant.py`](file:///d:/project/geMoldInsight/src/core/ai_mold_assistant.py)
|
||||
|
||||
#### 集成方式
|
||||
|
||||
```python
|
||||
from core.mold_generator import MoldCavityGenerator
|
||||
from core.ai_mold_assistant import AIPartingSurfaceDetector
|
||||
|
||||
# 创建 AI 模型
|
||||
parting_detector = AIPartingSurfaceDetector(model_path="models/parting_surface.pth")
|
||||
|
||||
# 设置到模具生成器
|
||||
generator = MoldCavityGenerator()
|
||||
generator.set_ai_model(parting_detector=parting_detector)
|
||||
|
||||
# 使用时会自动调用 AI 模型
|
||||
result = generator.generate_mold_cavities(product_shape)
|
||||
```
|
||||
|
||||
### 4. 拔模角处理改进
|
||||
|
||||
#### 改进前
|
||||
- 简化实现,直接返回原始形状
|
||||
- 记录警告日志
|
||||
|
||||
#### 改进后
|
||||
- 支持 AI 模型分析拔模
|
||||
- 使用几何方法计算拔模方向
|
||||
- 为完整实现预留接口(`BRepOffsetAPI_DraftAngle`)
|
||||
|
||||
**代码位置**: [`mold_generator.py:829-859`](file:///d:/project/geMoldInsight/src/core/mold_generator.py#L829-L859)
|
||||
|
||||
### 5. 分型线长度精确计算
|
||||
|
||||
#### 改进前
|
||||
```python
|
||||
def _calculate_parting_line_length(self, parting_line: List) -> float:
|
||||
return 250.0 # mm # 固定值
|
||||
```
|
||||
|
||||
#### 改进后
|
||||
```python
|
||||
def _calculate_parting_line_length(self, parting_line: List) -> float:
|
||||
"""计算折线总长度"""
|
||||
total_length = 0.0
|
||||
for i in range(1, len(parting_line)):
|
||||
p1 = np.array(parting_line[i-1])
|
||||
p2 = np.array(parting_line[i])
|
||||
total_length += np.linalg.norm(p2 - p1)
|
||||
return total_length
|
||||
```
|
||||
|
||||
**代码位置**: [`mold_generator.py:861-869`](file:///d:/project/geMoldInsight/src/core/mold_generator.py#L861-L869)
|
||||
|
||||
## 新增文件
|
||||
|
||||
### 1. `src/core/ai_mold_assistant.py`
|
||||
|
||||
AI 模型接口示例类:
|
||||
- `AIPartingSurfaceDetector` - 分型面检测器
|
||||
- `AIDraftAnalyzer` - 拔模分析器
|
||||
- `AICavityLayoutOptimizer` - 型腔布局优化器
|
||||
|
||||
### 2. `scripts/test_mold_splitting.py`
|
||||
|
||||
完整的分模算法测试脚本:
|
||||
- 测试简单长方体分模
|
||||
- 测试 STEP 文件分模
|
||||
- 测试 AI 模型接口
|
||||
- 测试分型线计算算法
|
||||
|
||||
### 3. `scripts/simple_test.py`
|
||||
|
||||
简化的测试脚本(用于快速验证)
|
||||
|
||||
## 使用示例
|
||||
|
||||
### 基本使用(几何方法)
|
||||
|
||||
```python
|
||||
from core.mold_generator import MoldCavityGenerator
|
||||
|
||||
# 创建模具生成器
|
||||
generator = MoldCavityGenerator(
|
||||
shrinkage_rate=0.005, # 0.5% 收缩率
|
||||
draft_angle=2.0, # 2 度拔模角
|
||||
material_density=1.05 # ABS 密度
|
||||
)
|
||||
|
||||
# 生成模具型腔
|
||||
result = generator.generate_mold_cavities(product_shape)
|
||||
|
||||
# 获取详细信息
|
||||
detailed_json = generator.generate_detailed_cavity_json(result)
|
||||
```
|
||||
|
||||
### 使用 AI 辅助
|
||||
|
||||
```python
|
||||
from core.mold_generator import MoldCavityGenerator
|
||||
from core.ai_mold_assistant import AIPartingSurfaceDetector
|
||||
|
||||
# 创建 AI 模型
|
||||
parting_detector = AIPartingSurfaceDetector(model_path="models/model.pth")
|
||||
|
||||
# 设置 AI 模型
|
||||
generator = MoldCavityGenerator()
|
||||
generator.set_ai_model(parting_detector=parting_detector)
|
||||
|
||||
# 使用时 AI 会自动介入
|
||||
result = generator.generate_mold_cavities(product_shape)
|
||||
```
|
||||
|
||||
## 技术细节
|
||||
|
||||
### 法向量分析算法
|
||||
|
||||
```python
|
||||
def _analyze_face_normals(self, shape):
|
||||
# 1. 遍历所有面
|
||||
for face in shape.faces:
|
||||
# 2. 获取面的法向量
|
||||
normal = surface.Plane().Position().Direction()
|
||||
face_normals.append(normal)
|
||||
|
||||
# 3. 计算平均法向量
|
||||
avg_normal = sum(face_normals) / len(face_normals)
|
||||
|
||||
# 4. 归一化
|
||||
return normalized(avg_normal)
|
||||
```
|
||||
|
||||
### 分型线计算流程
|
||||
|
||||
```
|
||||
产品形状 + 分型面
|
||||
↓
|
||||
BRepAlgoAPI_Section (布尔截面运算)
|
||||
↓
|
||||
提取交线 (TopExp_Explorer)
|
||||
↓
|
||||
沿边采样 (BRepAdaptor_Curve)
|
||||
↓
|
||||
点列表 [[x,y,z], ...]
|
||||
```
|
||||
|
||||
## 性能对比
|
||||
|
||||
| 功能 | 改进前 | 改进后 |
|
||||
|------|--------|--------|
|
||||
| 分型面方向 | 固定 Z 方向 | 自动适应产品几何 |
|
||||
| 分型线点数 | 4 点(矩形) | 10+ 点(真实轮廓) |
|
||||
| 分型线长度 | 固定 250mm | 精确计算 |
|
||||
| AI 集成 | 无 | 完整接口预留 |
|
||||
| 拔模分析 | 简化 | 支持 AI 和几何方法 |
|
||||
|
||||
## 后续优化方向
|
||||
|
||||
### 短期(无需 AI)
|
||||
1. 改进法向量计算精度(使用高斯权重)
|
||||
2. 优化分型面位置(考虑脱模方向)
|
||||
3. 完整实现拔模角处理(使用 `BRepOffsetAPI_DraftAngle`)
|
||||
|
||||
### 中期(机器学习)
|
||||
1. 收集模具设计案例数据
|
||||
2. 训练分型面识别模型(PointNet++)
|
||||
3. 集成到现有系统
|
||||
|
||||
### 长期(深度学习 + 仿真)
|
||||
1. 端到端模具生成
|
||||
2. 结合 Moldflow 物理仿真
|
||||
3. 数字孪生系统
|
||||
|
||||
## 代码变更总结
|
||||
|
||||
### 修改文件
|
||||
- `src/core/mold_generator.py` - 核心分模算法改进
|
||||
|
||||
### 新增文件
|
||||
- `src/core/ai_mold_assistant.py` - AI 模型接口
|
||||
- `scripts/test_mold_splitting.py` - 完整测试脚本
|
||||
- `scripts/simple_test.py` - 简化测试脚本
|
||||
|
||||
### 新增导入
|
||||
```python
|
||||
from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Section
|
||||
from OCC.Core.BRepAdaptor import BRepAdaptor_Surface, BRepAdaptor_Curve
|
||||
from OCC.Core.TopExp import TopExp_Explorer
|
||||
from OCC.Core.TopAbs import TopAbs_FACE, TopAbs_EDGE, TopAbs_VERTEX
|
||||
```
|
||||
|
||||
## 总结
|
||||
|
||||
本次改进实现了:
|
||||
1. ✅ **更合理的分型面检测** - 基于法向量分析,自动适应产品几何
|
||||
2. ✅ **真实的分型线计算** - 使用布尔运算求交线,不是简化矩形
|
||||
3. ✅ **AI 模型接口预留** - 可随时集成 AI 辅助功能
|
||||
4. ✅ **精确的参数计算** - 分型线长度、拔模方向等
|
||||
|
||||
所有改进都使用了 OpenCASCADE 的几何算法,保证了计算的准确性和可靠性。AI 接口的设计使得未来可以轻松集成深度学习模型,提升分模智能化水平。
|
||||
@@ -0,0 +1,601 @@
|
||||
# 铝制家电包装泡沫模具分模功能技术规格说明书
|
||||
|
||||
> 文档定位:**铝泡沫模具分模方向的专题规格文档**。
|
||||
> 本文保留该方向的需求背景、规格设想与能力边界,不作为当前项目整体状态的权威说明。当前状态见 [../../STATUS.md](../../STATUS.md),总体架构见 [../../ARCHITECTURE.md](../../ARCHITECTURE.md),活跃技术债见 [../../TECH_DEBT.md](../../TECH_DEBT.md)。
|
||||
|
||||
## 文档信息
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| **文档名称** | 铝制家电包装泡沫模具分模功能技术规格说明书 |
|
||||
| **版本** | 1.0 |
|
||||
| **日期** | 2026-03-13 |
|
||||
| **项目** | geMoldInsight 模具分模功能增强 |
|
||||
|
||||
---
|
||||
|
||||
## 1. 项目背景与目标
|
||||
|
||||
### 1.1 项目背景
|
||||
|
||||
铝制家电包装泡沫是一种广泛应用于家电产品缓冲包装的特殊材料,其模具设计具有以下特点:
|
||||
|
||||
- **材料特性**:铝泡沫密度低(0.4-0.8 g/cm³),发泡倍率高,需要特殊的成型工艺
|
||||
- **产品特性**:壁厚较大(通常 20-100mm),形状复杂,表面质量要求高
|
||||
- **模具特性**:需要耐腐蚀模具材料,加强排气系统,特殊的浇注系统
|
||||
|
||||
### 1.2 项目目标
|
||||
|
||||
开发一套专业的铝制家电包装泡沫模具分模系统,实现:
|
||||
|
||||
1. **自动分模算法** - 针对铝泡沫产品结构特性的智能分模
|
||||
2. **参数自定义** - 分模角度、分型线精度、型腔匹配度等
|
||||
3. **三维可视化** - 实时显示分模效果,支持交互调整
|
||||
4. **质量检测** - 自动验证分模面质量、结构合理性、生产可行性
|
||||
5. **数据接口** - 兼容现有软件,标准数据导出
|
||||
|
||||
---
|
||||
|
||||
## 2. 功能需求规格
|
||||
|
||||
### 2.1 自动分模算法
|
||||
|
||||
#### 2.1.1 分型面自动检测
|
||||
|
||||
**功能描述**:自动分析产品几何特征,计算最优分型面位置和方向
|
||||
|
||||
**需求规格**:
|
||||
|
||||
| 需求项 | 详细说明 | 优先级 |
|
||||
|--------|----------|--------|
|
||||
| 表面法向量分析 | 统计产品所有面的法向量分布 | P0 |
|
||||
| 最优方向计算 | 基于法向量统计计算最优分型方向 | P0 |
|
||||
| 多分型面支持 | 支持复杂产品的多个分型面 | P1 |
|
||||
| 倒扣检测 | 自动识别产品倒扣区域 | P1 |
|
||||
| 分型面优化 | 平滑处理分型面,减少毛刺 | P2 |
|
||||
|
||||
**算法输入**:
|
||||
- 产品 3D 模型 (STEP/IGES 格式)
|
||||
- 产品材料类型
|
||||
- 产品尺寸参数
|
||||
|
||||
**算法输出**:
|
||||
- 分型面方程 (平面参数)
|
||||
- 分型面位置 (Z 坐标或自定义)
|
||||
- 置信度评分 (0-100%)
|
||||
|
||||
#### 2.1.2 铝泡沫特性适配
|
||||
|
||||
**功能描述**:针对铝泡沫材料的特殊参数设置
|
||||
|
||||
**需求规格**:
|
||||
|
||||
| 参数 | 范围 | 默认值 | 说明 |
|
||||
|------|------|--------|------|
|
||||
| 发泡倍率 | 1.5-4.0 | 2.5 | 铝泡沫发泡倍率 |
|
||||
| 目标密度 | 0.3-0.8 g/cm³ | 0.5 | 成型后泡沫密度 |
|
||||
| 收缩率 | 0.5%-3.0% | 1.5% | 铝泡沫收缩率(较大) |
|
||||
| 成型温度 | 300-450°C | 380°C | 发泡成型温度 |
|
||||
|
||||
**材料数据库**:
|
||||
|
||||
```python
|
||||
foam_materials = {
|
||||
"AlSi10Mg": {
|
||||
"density": 0.45,
|
||||
"expansion_ratio": 2.5,
|
||||
"shrinkage_rate": 0.015,
|
||||
"molding_temp": 380,
|
||||
"description": "常用铝硅泡沫"
|
||||
},
|
||||
"AlSi12": {
|
||||
"density": 0.50,
|
||||
"expansion_ratio": 2.2,
|
||||
"shrinkage_rate": 0.012,
|
||||
"molding_temp": 360,
|
||||
"description": "高强度铝泡沫"
|
||||
},
|
||||
"Pure Al Foam": {
|
||||
"density": 0.35,
|
||||
"expansion_ratio": 3.0,
|
||||
"shrinkage_rate": 0.020,
|
||||
"molding_temp": 400,
|
||||
"description": "纯铝泡沫"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.1.3 拔模角优化
|
||||
|
||||
**功能描述**:针对铝泡沫产品的拔模角计算
|
||||
|
||||
**需求规格**:
|
||||
|
||||
| 需求项 | 详细说明 | 优先级 |
|
||||
|--------|----------|--------|
|
||||
| 最小拔模角计算 | 基于产品高度和材料摩擦系数 | P0 |
|
||||
| 拔模方向检测 | 自动确定脱模方向 | P0 |
|
||||
| 拔模干涉检测 | 检测脱模过程中的干涉区域 | P1 |
|
||||
| 拔模补偿 | 自动补偿拔模引起的尺寸变化 | P1 |
|
||||
|
||||
**拔模角参数**:
|
||||
|
||||
| 参数 | 范围 | 默认值 | 说明 |
|
||||
|------|------|--------|------|
|
||||
| 最小拔模角 | 1°-10° | 3° | 铝泡沫建议 3-5° |
|
||||
| 拔模方向 | X/Y/Z/自定义 | 自动 | 脱模方向 |
|
||||
| 摩擦系数 | 0.1-0.5 | 0.3 | 材料摩擦系数 |
|
||||
|
||||
### 2.2 参数自定义设置
|
||||
|
||||
#### 2.2.1 分模参数配置
|
||||
|
||||
**功能描述**:用户可自定义分模过程的各项参数
|
||||
|
||||
**需求规格**:
|
||||
|
||||
| 参数名称 | 参数类型 | 取值范围 | 默认值 | 说明 |
|
||||
|----------|----------|----------|--------|------|
|
||||
| 分模方式 | 枚举 | 单分型面/多分型面/自动 | 自动 | 分模策略 |
|
||||
| 分型线精度 | 浮点数 | 0.01-1.0 mm | 0.1 mm | 分型线采样精度 |
|
||||
| 分型面容差 | 浮点数 | 0.01-2.0 mm | 0.5 mm | 分型面拟合容差 |
|
||||
| 型腔匹配度 | 浮点数 | 80%-100% | 95% | 型腔与产品匹配度 |
|
||||
| 收缩补偿 | 布尔 | 是/否 | 是 | 是否应用收缩补偿 |
|
||||
| 拔模处理 | 布尔 | 是/否 | 是 | 是否应用拔模角 |
|
||||
|
||||
#### 2.2.2 高级参数设置
|
||||
|
||||
**功能描述**:专家级用户可调整的高级参数
|
||||
|
||||
**参数面板**:
|
||||
|
||||
```python
|
||||
advanced_params = {
|
||||
"mold_parameters": {
|
||||
"cavity_count": 1, # 型腔数量
|
||||
"mold_material": "P20", # 模具材料
|
||||
"surface_finish": "SPI A2", # 表面粗糙度
|
||||
"ejection_system": "pin", # 顶出系统
|
||||
},
|
||||
"processing_params": {
|
||||
"injection_pressure": "80-120 MPa",
|
||||
"molding_temp": "350-400 °C",
|
||||
"cooling_time": "30-60 秒",
|
||||
"ejection_temp": "60-80 °C",
|
||||
},
|
||||
"quality_params": {
|
||||
"warpage_tolerance": 0.5, # 翘曲容差 mm
|
||||
"sink_mark_depth": 0.1, # 缩痕深度 mm
|
||||
"weld_line_gap": 0.05, # 熔接缝间隙 mm
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2.3 三维可视化界面
|
||||
|
||||
#### 2.3.1 分模过程可视化
|
||||
|
||||
**功能描述**:实时显示分模过程和结果
|
||||
|
||||
**需求规格**:
|
||||
|
||||
| 功能 | 说明 | 优先级 |
|
||||
|------|------|--------|
|
||||
| 产品模型显示 | 加载并显示原始产品 3D 模型 | P0 |
|
||||
| 分型面可视化 | 在产品上显示分型面位置 | P0 |
|
||||
| 分型线可视化 | 显示计算得到的分型线路径 | P0 |
|
||||
| 型腔/型芯显示 | 分别高亮显示型腔和型芯 | P0 |
|
||||
| 模具块显示 | 显示完整的模具块结构 | P1 |
|
||||
| 剖视图 | 沿分型面剖切显示内部结构 | P1 |
|
||||
|
||||
#### 2.3.2 交互调整功能
|
||||
|
||||
**功能描述**:支持用户交互调整分模参数
|
||||
|
||||
**需求规格**:
|
||||
|
||||
| 功能 | 说明 | 交互方式 |
|
||||
|------|------|----------|
|
||||
| 分型面拖拽 | 沿法线方向移动分型面 | 鼠标拖拽 |
|
||||
| 分型角度调整 | 调整分型面角度 | 滑块控制 |
|
||||
| 视图旋转 | 360° 查看模型 | 鼠标拖拽 |
|
||||
| 缩放 | 放大/缩小视图 | 滚轮 |
|
||||
| 剖面切换 | 切换不同剖面视图 | 按钮切换 |
|
||||
| 透明度调整 | 调整模型透明度 | 滑块控制 |
|
||||
| 测量工具 | 测量距离、角度 | 点击测量 |
|
||||
|
||||
#### 2.3.3 可视化参数
|
||||
|
||||
| 参数 | 取值范围 | 默认值 |
|
||||
|------|----------|--------|
|
||||
| 分型面颜色 | #FF0000 (红色) | #00FF00 (绿色) |
|
||||
| 分型线颜色 | #FFFF00 (黄色) | #FF00FF (品红) |
|
||||
| 型腔颜色 | #0000FF (蓝色) | #00FFFF (青色) |
|
||||
| 型芯颜色 | #FF8800 (橙色) | #8800FF (紫色) |
|
||||
| 网格密度 | 1000-50000 点 | 10000 点 |
|
||||
|
||||
### 2.4 质量检测模块
|
||||
|
||||
#### 2.4.1 分模面质量检测
|
||||
|
||||
**功能描述**:自动检测分模面的质量
|
||||
|
||||
**检测项目**:
|
||||
|
||||
| 检测项 | 检测方法 | 质量标准 | 优先级 |
|
||||
|--------|----------|----------|--------|
|
||||
| 平滑度 | 曲率分析 | 无明显凹凸 | P0 |
|
||||
| 连续性 | 边界检查 | 无间隙 | P0 |
|
||||
| 几何精度 | 偏差测量 | < 0.1mm | P1 |
|
||||
| 表面缺陷 | 三角网格检查 | 无破面 | P1 |
|
||||
|
||||
**检测输出**:
|
||||
|
||||
```python
|
||||
quality_report = {
|
||||
"surface_quality": {
|
||||
"smoothness_score": 95, # 平滑度评分 0-100
|
||||
"continuity_score": 100, # 连续性评分
|
||||
"defects": [], # 发现的缺陷列表
|
||||
"overall_score": 97 # 综合评分
|
||||
},
|
||||
"geometry_check": {
|
||||
"deviation": 0.05, # 偏差 mm
|
||||
"tolerance_met": True # 是否符合容差
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.4.2 模具结构合理性检测
|
||||
|
||||
**功能描述**:检测模具结构的合理性
|
||||
|
||||
**检测项目**:
|
||||
|
||||
| 检测项 | 说明 | 判定标准 |
|
||||
|--------|------|----------|
|
||||
| 模具尺寸 | 模具是否足够大 | 产品尺寸 + 余量 |
|
||||
| 壁厚检测 | 模具壁厚是否足够 | > 10mm |
|
||||
| 拔模检测 | 是否有倒扣无法脱模 | 无倒扣或已处理 |
|
||||
| 干涉检测 | 运动件是否干涉 | 无干涉 |
|
||||
| 冷却系统 | 冷却通道是否合理 | 分布均匀 |
|
||||
|
||||
#### 2.4.3 生产可行性评估
|
||||
|
||||
**功能描述**:评估模具的生产可行性
|
||||
|
||||
**评估项目**:
|
||||
|
||||
| 评估项 | 评估方法 | 输出 |
|
||||
|--------|----------|------|
|
||||
| 注塑压力 | 投影面积 × 压力系数 | 压力值 (MPa) |
|
||||
| 锁模力 | 投影面积 × 材料压力 | 力值 (吨) |
|
||||
| 成型周期 | 体积/冷却速度 | 时间 (秒) |
|
||||
| 材料利用率 | 流道体积/产品体积 | 百分比 |
|
||||
| 生产成本 | 材料+工艺+时间 | 估算成本 |
|
||||
|
||||
### 2.5 数据接口
|
||||
|
||||
#### 2.5.1 导入接口
|
||||
|
||||
**支持的格式**:
|
||||
|
||||
| 格式 | 说明 | 优先级 |
|
||||
|------|------|--------|
|
||||
| STEP | 标准 CAD 交换格式 | P0 |
|
||||
| IGES | 另一种 CAD 交换格式 | P1 |
|
||||
| BREP | OpenCASCADE 原生格式 | P1 |
|
||||
| STL | 三角网格格式 | P2 |
|
||||
|
||||
#### 2.5.2 导出接口
|
||||
|
||||
**导出格式**:
|
||||
|
||||
| 格式 | 说明 | 用途 |
|
||||
|------|------|------|
|
||||
| STEP | 分模后模具模型 | CAD 软件 |
|
||||
| IGES | 分模后模具模型 | CAM 软件 |
|
||||
| STL | 3D 打印/快速成型 | 3D 打印 |
|
||||
| JSON | 分模参数和结果 | 数据交换 |
|
||||
| PDF | 质量检测报告 | 文档输出 |
|
||||
|
||||
#### 2.5.3 API 接口
|
||||
|
||||
**内部 API**:
|
||||
|
||||
```python
|
||||
# 分模分析 API
|
||||
POST /api/mold/analyze
|
||||
{
|
||||
"product_file": "file",
|
||||
"material": "AlSi10Mg",
|
||||
"params": {
|
||||
"draft_angle": 3.0,
|
||||
"parting_tolerance": 0.1,
|
||||
"cavity_match": 95
|
||||
}
|
||||
}
|
||||
|
||||
# 获取分模结果
|
||||
GET /api/mold/result/{task_id}
|
||||
|
||||
# 导出分模结果
|
||||
GET /api/mold/export/{task_id}?format=step
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. 技术架构规格
|
||||
|
||||
### 3.1 系统架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 表示层 (Presentation) │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||||
│ │ Web 界面 │ │ 3D 可视化 │ │ 参数面板 │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
│
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 业务层 (Business Logic) │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||||
│ │ 分模算法 │ │ 质量检测 │ │ 参数优化 │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
│
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 数据层 (Data Layer) │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||||
│ │ PythonOCC │ │ 数据库 │ │ 文件存储 │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 3.2 模块设计
|
||||
|
||||
#### 3.2.1 分模算法模块
|
||||
|
||||
**模块职责**:核心分模算法实现
|
||||
|
||||
**主要类**:
|
||||
|
||||
```python
|
||||
class AluminumFoamMoldGenerator:
|
||||
"""铝泡沫模具分模生成器"""
|
||||
|
||||
def __init__(self, params: MoldParams):
|
||||
self.params = params
|
||||
self.material_db = FoamMaterialDatabase()
|
||||
|
||||
def analyze_product(self, shape: TopoDS_Shape) -> ProductAnalysis:
|
||||
"""分析产品几何特征"""
|
||||
pass
|
||||
|
||||
def detect_parting_surface(self, shape, analysis) -> PartingSurface:
|
||||
"""检测分型面"""
|
||||
pass
|
||||
|
||||
def calculate_parting_line(self, shape, surface) -> PartingLine:
|
||||
"""计算分型线"""
|
||||
pass
|
||||
|
||||
def apply_draft_angles(self, shape, direction) -> Shape:
|
||||
"""应用拔模角"""
|
||||
pass
|
||||
|
||||
def split_cavity_core(self, shape, surface) -> Tuple[Shape, Shape]:
|
||||
"""分离型腔和型芯"""
|
||||
pass
|
||||
|
||||
def generate_mold_block(self, cavity, params) -> Shape:
|
||||
"""生成模具块"""
|
||||
pass
|
||||
```
|
||||
|
||||
#### 3.2.2 质量检测模块
|
||||
|
||||
**模块职责**:分模质量检测和评估
|
||||
|
||||
**主要类**:
|
||||
|
||||
```python
|
||||
class MoldQualityInspector:
|
||||
"""模具质量检测器"""
|
||||
|
||||
def inspect_surface(self, surface) -> SurfaceQualityReport:
|
||||
"""检测分模面质量"""
|
||||
pass
|
||||
|
||||
def inspect_structure(self, mold) -> StructureQualityReport:
|
||||
"""检测模具结构"""
|
||||
pass
|
||||
|
||||
def assess_feasibility(self, mold, params) -> FeasibilityReport:
|
||||
"""评估生产可行性"""
|
||||
pass
|
||||
|
||||
def generate_report(self) -> QualityReport:
|
||||
"""生成质量报告"""
|
||||
pass
|
||||
```
|
||||
|
||||
#### 3.2.3 可视化模块
|
||||
|
||||
**模块职责**:3D 可视化渲染和交互
|
||||
|
||||
**主要类**:
|
||||
|
||||
```python
|
||||
class MoldVisualizationController:
|
||||
"""模具可视化控制器"""
|
||||
|
||||
def load_model(self, shape):
|
||||
"""加载 3D 模型"""
|
||||
pass
|
||||
|
||||
def render_parting_surface(self, surface):
|
||||
"""渲染分型面"""
|
||||
pass
|
||||
|
||||
def render_parting_line(self, line):
|
||||
"""渲染分型线"""
|
||||
pass
|
||||
|
||||
def render_cavity_core(self, cavity, core):
|
||||
"""渲染型腔/型芯"""
|
||||
pass
|
||||
|
||||
def set_interaction_mode(self, mode):
|
||||
"""设置交互模式"""
|
||||
pass
|
||||
|
||||
def export_view(self, format):
|
||||
"""导出视图"""
|
||||
pass
|
||||
```
|
||||
|
||||
### 3.3 数据结构
|
||||
|
||||
#### 3.3.1 分模参数
|
||||
|
||||
```python
|
||||
@dataclass
|
||||
class MoldSplitParams:
|
||||
"""分模参数"""
|
||||
# 分模参数
|
||||
split_mode: SplitMode = SplitMode.AUTO
|
||||
parting_tolerance: float = 0.1 # mm
|
||||
parting_line_precision: float = 0.1 # mm
|
||||
cavity_match_rate: float = 95.0 # %
|
||||
|
||||
# 铝泡沫参数
|
||||
foam_material: str = "AlSi10Mg"
|
||||
target_density: float = 0.5 # g/cm³
|
||||
expansion_ratio: float = 2.5
|
||||
molding_temp: float = 380 # °C
|
||||
|
||||
# 拔模参数
|
||||
min_draft_angle: float = 3.0 # °
|
||||
draft_direction: str = "auto"
|
||||
friction_coefficient: float = 0.3
|
||||
|
||||
# 收缩补偿
|
||||
apply_shrinkage: bool = True
|
||||
shrinkage_rate: float = 0.015 # 1.5%
|
||||
|
||||
# 高级参数
|
||||
cavity_count: int = 1
|
||||
mold_material: str = "P20"
|
||||
ejection_system: str = "pin"
|
||||
|
||||
# 质量标准
|
||||
warpage_tolerance: float = 0.5 # mm
|
||||
sink_mark_tolerance: float = 0.1 # mm
|
||||
```
|
||||
|
||||
#### 3.3.2 分模结果
|
||||
|
||||
```python
|
||||
@dataclass
|
||||
class MoldSplitResult:
|
||||
"""分模结果"""
|
||||
# 几何数据
|
||||
product_shape: TopoDS_Shape
|
||||
cavity_shape: TopoDS_Shape
|
||||
core_shape: TopoDS_Shape
|
||||
parting_surface: TopoDS_Shape
|
||||
parting_line: List[Point3D]
|
||||
mold_block: TopoDS_Shape
|
||||
|
||||
# 分析数据
|
||||
product_analysis: ProductAnalysis
|
||||
quality_report: QualityReport
|
||||
|
||||
# 参数数据
|
||||
params_used: MoldSplitParams
|
||||
warnings: List[str]
|
||||
suggestions: List[str]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. 验收标准
|
||||
|
||||
### 4.1 功能验收
|
||||
|
||||
| 序号 | 验收项 | 验收标准 | 测试方法 |
|
||||
|------|--------|----------|----------|
|
||||
| 1 | 分型面检测 | 能正确分析产品几何并给出分型面建议 | 导入测试产品验证 |
|
||||
| 2 | 分型线计算 | 计算得到真实的分型线路径(非简化矩形) | 对比验证 |
|
||||
| 3 | 参数自定义 | 所有参数可自定义设置且生效 | 参数修改测试 |
|
||||
| 4 | 3D 可视化 | 正确显示分模各组件 | 目视检查 |
|
||||
| 5 | 交互调整 | 拖拽/滑块等交互响应正常 | 操作测试 |
|
||||
| 6 | 质量检测 | 输出正确的质量报告 | 报告验证 |
|
||||
| 7 | 数据导出 | 支持 STEP/JSON 格式导出 | 导出测试 |
|
||||
|
||||
### 4.2 性能验收
|
||||
|
||||
| 指标 | 目标值 | 说明 |
|
||||
|------|--------|------|
|
||||
| 分模速度 | < 30 秒 | 典型产品 |
|
||||
| 渲染帧率 | > 30 FPS | 交互操作时 |
|
||||
| 内存占用 | < 2 GB | 典型产品 |
|
||||
| 并发支持 | 5 用户 | 同时使用 |
|
||||
|
||||
### 4.3 质量验收
|
||||
|
||||
| 指标 | 目标值 | 说明 |
|
||||
|------|--------|------|
|
||||
| 分型面准确率 | > 95% | 自动检测准确率 |
|
||||
| 质量检测覆盖率 | 100% | 所有检测项 |
|
||||
| 导出格式兼容 | STEP/IGES | 主流 CAD/CAM |
|
||||
|
||||
---
|
||||
|
||||
## 5. 实施计划
|
||||
|
||||
### 5.1 阶段划分
|
||||
|
||||
| 阶段 | 时间 | 内容 |
|
||||
|------|------|------|
|
||||
| 第一阶段 | 1-2 周 | 基础框架搭建,参数系统 |
|
||||
| 第二阶段 | 3-4 周 | 分模算法优化,质量检测 |
|
||||
| 第三阶段 | 5-6 周 | 可视化增强,交互功能 |
|
||||
| 第四阶段 | 7-8 周 | 数据接口,测试集成 |
|
||||
|
||||
### 5.2 里程碑
|
||||
|
||||
- [ ] M1: 完成参数系统 (第 2 周)
|
||||
- [ ] M2: 完成改进的分模算法 (第 4 周)
|
||||
- [ ] M3: 完成质量检测模块 (第 6 周)
|
||||
- [ ] M4: 完成可视化功能 (第 6 周)
|
||||
- [ ] M5: 完成数据接口 (第 7 周)
|
||||
- [ ] M6: 完成集成测试 (第 8 周)
|
||||
|
||||
---
|
||||
|
||||
## 6. 附录
|
||||
|
||||
### 6.1 术语表
|
||||
|
||||
| 术语 | 英文 | 说明 |
|
||||
|------|------|------|
|
||||
| 分型面 | Parting Surface | 模具中分离型腔和型芯的平面 |
|
||||
| 分型线 | Parting Line | 产品与分型面的交线 |
|
||||
| 型腔 | Cavity | 模具中形成产品外形的空腔 |
|
||||
| 型芯 | Core | 模具中形成产品内形的凸起 |
|
||||
| 拔模角 | Draft Angle | 便于脱模的倾斜角度 |
|
||||
| 收缩率 | Shrinkage Rate | 冷却后尺寸收缩比例 |
|
||||
| 发泡倍率 | Expansion Ratio | 发泡前后的体积比 |
|
||||
|
||||
### 6.2 参考资料
|
||||
|
||||
1. 《塑料模具设计手册》
|
||||
2. 《铝泡沫材料成型工艺》
|
||||
3. PythonOCC 官方文档
|
||||
4. Three.js 官方文档
|
||||
|
||||
---
|
||||
|
||||
**文档结束**
|
||||
@@ -0,0 +1,32 @@
|
||||
# 性能基准定义(建议)
|
||||
|
||||
> 文档定位:**性能基准与压测口径的专题参考文档**。
|
||||
> 本文给出建议性性能指标与测试数据口径,不作为当前实现状态的权威说明。当前状态见 [../../STATUS.md](../../STATUS.md),后续路线见 [../../ROADMAP.md](../../ROADMAP.md)。
|
||||
## 1. 核心接口基准
|
||||
|
||||
| 场景 | 接口 | 指标 |
|
||||
|---|---|---|
|
||||
| 单订单创建 | POST /api/sales-orders | RT <= 300ms;P95 <= 500ms |
|
||||
| 单订单修改 | PUT /api/sales-orders/{id} | RT <= 300ms;P95 <= 500ms |
|
||||
| 采购收货入库 | POST /api/purchase-orders/{id}/receive | RT <= 300ms;P95 <= 500ms |
|
||||
| 物料计划计算 | GET /api/sales-orders/{id}/production-plan | RT <= 300ms;P95 <= 500ms |
|
||||
|
||||
## 2. 压测资源与容量门槛
|
||||
|
||||
| 并发/吞吐 | CPU | 内存 | 错误率 |
|
||||
|---|---|---|---|
|
||||
| 200 TPS(持续) | <= 60% | <= 70% | <= 0.1% |
|
||||
|
||||
## 3. 测试数据要求
|
||||
|
||||
- 物料数 >= 10万
|
||||
- 客户订单量 >= 1000万(或等比例分区仿真数据)
|
||||
- 采购单量 >= 1000万
|
||||
- 库存流水量 >= 1亿(用于验证索引与分区收益)
|
||||
|
||||
## 4. 报告产出
|
||||
|
||||
- pg_stat_statements TopN
|
||||
- 接口 RT 分布(P50/P95/P99)
|
||||
- 锁等待与死锁统计
|
||||
- 索引命中率与缓存命中率
|
||||
@@ -0,0 +1,52 @@
|
||||
# 性能与扩展性评估补充(模具订单/采购主线)
|
||||
|
||||
> 文档定位:**性能与扩展性方向的专题规划文档**。
|
||||
> 本文描述的是性能评估、慢 SQL 发现、扩展路线等补充规划,不作为当前实现状态的权威说明。当前状态见 [../../STATUS.md](../../STATUS.md),后续路线见 [../../ROADMAP.md](../../ROADMAP.md)。
|
||||
## 1. 高并发冲突面与加固点
|
||||
|
||||
### 1.1 新增/修改模具订单的锁冲突来源
|
||||
|
||||
- 冲突对象:同一仓库同一物料的 `inventory` 行。
|
||||
- 冲突操作:创建订单自动扣料、按单领料、修改订单回补再扣减。
|
||||
|
||||
### 1.2 已落地的并发加固
|
||||
|
||||
- 对库存扣减采用原子更新(`UPDATE ... SET quantity = quantity - :qty WHERE quantity >= :qty RETURNING quantity`),避免“读-改-写”丢失更新与超卖。
|
||||
|
||||
## 2. 慢 SQL 发现与清单产出方法
|
||||
|
||||
### 2.1 生产环境抓取
|
||||
|
||||
- 启用 `pg_stat_statements` 并定期采样均值/最大耗时 TopN。
|
||||
- 参考脚本:`scripts/db/030_pg_stat_statements.sql`。
|
||||
|
||||
### 2.2 代码层高风险查询点(需要重点盯)
|
||||
|
||||
- 订单列表/详情:按 `customer_id/status/order_date` 过滤 + 明细表 join。
|
||||
- 库存流水:按 `warehouse_id/created_at` 分页、按 `reference_type/reference_id` 追溯。
|
||||
- 物料需求计算:必须避免 N+1(已将 BOM 查询批量化)。
|
||||
|
||||
## 3. 索引与查询重写(可执行脚本)
|
||||
|
||||
- `scripts/db/002_indexes_and_constraints.sql` 覆盖:
|
||||
- 订单头状态/客户组合索引
|
||||
- 明细表 `order_id/product_id` 索引
|
||||
- 流水 `warehouse_id+created_at`、`reference_type+reference_id` 索引
|
||||
- 库存唯一约束与关键 check 约束
|
||||
|
||||
## 4. 千万级订单量扩展路线
|
||||
|
||||
### 4.1 优先方案:PostgreSQL 分区
|
||||
|
||||
- 表:`sales_orders`、`purchase_orders` 按 `order_date` 月分区。
|
||||
- 参考模板:`scripts/db/010_partitioning_template.sql`。
|
||||
|
||||
### 4.2 分库分表(必要时)
|
||||
|
||||
- 拆分键:`org_id`(库路由)+ `order_date`(表分区)。
|
||||
- 灰度步骤:双写→读切换→写切换→数据校验→下线旧库。
|
||||
|
||||
## 5. 缓存建议(可选)
|
||||
|
||||
- 读多写少:产品/BOM/供应商/客户可使用本地缓存(Caffeine 类似策略在 Python 可用 LRU/TTL)或 Redis。
|
||||
- 幂等:新增订单建议引入 `idempotency_key`(请求头/字段),避免重复提交造成重复扣料与重复下单。
|
||||
@@ -0,0 +1,467 @@
|
||||
# RustFS 对象存储集成说明
|
||||
|
||||
> 文档定位:**RustFS / 对象存储集成的专题说明文档**。
|
||||
> 本文解释对象存储侧的接口与集成思路,不作为当前部署入口文档。当前部署方式见 [../../DEPLOYMENT.md](../../DEPLOYMENT.md) 与 [../../deployment/LINUX_SETUP.md](../../deployment/LINUX_SETUP.md),当前状态见 [../../STATUS.md](../../STATUS.md)。
|
||||
## 架构概述
|
||||
|
||||
本项目采用 **RustFS** 作为对象存储和 **PostgreSQL** 作为元数据存储的双层存储架构。
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 应用层 (FastAPI) │
|
||||
└──────────────────────┬──────────────────────────────────────┘
|
||||
│
|
||||
┌──────────────┴──────────────┐
|
||||
│ │
|
||||
┌───────▼────────┐ ┌─────────▼─────────┐
|
||||
│ PostgreSQL │ │ RustFS │
|
||||
│ (元数据) │ │ (对象存储) │
|
||||
│ │ │ │
|
||||
│ - users │ │ - stp-files │
|
||||
│ - stp_files │ │ - geometry │
|
||||
│ - geometry_data│ │ - mold-cavities │
|
||||
│ - mold_cavity │ │ - html-files │
|
||||
│ - features │ │ - user-files │
|
||||
│ - logs │ │ │
|
||||
└────────────────┘ └──────────────────┘
|
||||
```
|
||||
|
||||
## RustFS API 端点
|
||||
|
||||
假设 RustFS 运行在 `http://localhost:8080`,需要实现以下 REST API:
|
||||
|
||||
### 1. 健康检查
|
||||
```
|
||||
GET /health
|
||||
返回: 200 OK
|
||||
```
|
||||
|
||||
### 2. 初始化上传
|
||||
```
|
||||
POST /api/v1/upload/init
|
||||
Content-Type: application/json
|
||||
Authorization: Bearer <api_key>
|
||||
|
||||
请求体:
|
||||
{
|
||||
"namespace": "moldinsight/stp-files",
|
||||
"key": "stp-files/abc123.stp",
|
||||
"file_size": 1234567,
|
||||
"file_hash": "sha256_hash",
|
||||
"metadata": {
|
||||
"original_filename": "model.stp",
|
||||
"user_id": "1"
|
||||
}
|
||||
}
|
||||
|
||||
响应:
|
||||
{
|
||||
"upload_id": "unique-upload-id",
|
||||
"upload_url": "https://rustfs/upload/xyz",
|
||||
"expires_at": "2024-01-01T00:00:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 上传文件内容
|
||||
```
|
||||
PUT <upload_url>
|
||||
Content-Type: application/octet-stream
|
||||
Content-Length: 1234567
|
||||
X-File-Hash: sha256_hash
|
||||
|
||||
请求体: <文件二进制数据>
|
||||
|
||||
响应: 201 Created
|
||||
```
|
||||
|
||||
### 4. 完成上传
|
||||
```
|
||||
POST /api/v1/upload/complete
|
||||
Content-Type: application/json
|
||||
Authorization: Bearer <api_key>
|
||||
|
||||
请求体:
|
||||
{
|
||||
"upload_id": "unique-upload-id",
|
||||
"namespace": "moldinsight/stp-files",
|
||||
"key": "stp-files/abc123.stp"
|
||||
}
|
||||
|
||||
响应:
|
||||
{
|
||||
"object_key": "moldinsight/stp-files/abc123.stp",
|
||||
"etag": "d41d8cd98f00b204e9800998ecf8427e",
|
||||
"created_at": "2024-01-01T00:00:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
### 5. 上传 JSON(小文件,直接上传)
|
||||
```
|
||||
PUT /api/v1/objects/<namespace>/<key>
|
||||
Content-Type: application/json
|
||||
Authorization: Bearer <api_key>
|
||||
X-File-Hash: sha256_hash
|
||||
|
||||
请求体: <JSON字符串>
|
||||
|
||||
响应: 201 Created
|
||||
{
|
||||
"object_key": "moldinsight/geometry/abc123.json",
|
||||
"etag": "d41d8cd98f00b204e9800998ecf8427e",
|
||||
"created_at": "2024-01-01T00:00:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
### 6. 下载文件
|
||||
```
|
||||
GET /api/v1/objects/<namespace>/<key>
|
||||
Authorization: Bearer <api_key>
|
||||
|
||||
响应: <文件二进制数据>
|
||||
Content-Type: <原上传时的内容类型>
|
||||
Content-Length: <文件大小>
|
||||
ETag: <文件etag>
|
||||
```
|
||||
|
||||
### 7. 获取文件信息
|
||||
```
|
||||
GET /api/v1/objects/<namespace>/<key>/info
|
||||
Authorization: Bearer <api_key>
|
||||
|
||||
响应:
|
||||
{
|
||||
"object_key": "moldinsight/stp-files/abc123.stp",
|
||||
"namespace": "moldinsight/stp-files",
|
||||
"file_size": 1234567,
|
||||
"file_hash": "sha256_hash",
|
||||
"content_type": "application/octet-stream",
|
||||
"created_at": "2024-01-01T00:00:00Z",
|
||||
"last_modified": "2024-01-01T00:00:00Z",
|
||||
"metadata": {
|
||||
"original_filename": "model.stp",
|
||||
"user_id": "1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 8. 删除文件
|
||||
```
|
||||
DELETE /api/v1/objects/<namespace>/<key>
|
||||
Authorization: Bearer <api_key>
|
||||
|
||||
响应: 204 No Content
|
||||
```
|
||||
|
||||
### 9. 列出文件
|
||||
```
|
||||
GET /api/v1/buckets/<namespace>/objects?prefix=stp-files
|
||||
Authorization: Bearer <api_key>
|
||||
|
||||
响应:
|
||||
{
|
||||
"namespace": "moldinsight/stp-files",
|
||||
"prefix": "stp-files",
|
||||
"objects": [
|
||||
{
|
||||
"object_key": "moldinsight/stp-files/abc123.stp",
|
||||
"file_size": 1234567,
|
||||
"file_hash": "sha256_hash",
|
||||
"created_at": "2024-01-01T00:00:00Z"
|
||||
},
|
||||
...
|
||||
],
|
||||
"is_truncated": false,
|
||||
"next_marker": null
|
||||
}
|
||||
```
|
||||
|
||||
### 10. 生成预签名 URL
|
||||
```
|
||||
POST /api/v1/presigned-url
|
||||
Content-Type: application/json
|
||||
Authorization: Bearer <api_key>
|
||||
|
||||
请求体:
|
||||
{
|
||||
"namespace": "moldinsight/stp-files",
|
||||
"key": "stp-files/abc123.stp",
|
||||
"expires": 3600,
|
||||
"method": "GET"
|
||||
}
|
||||
|
||||
响应:
|
||||
{
|
||||
"url": "https://rustfs/objects/moldinsight/stp-files/abc123.stp?signature=xyz&expires=123",
|
||||
"expires_at": "2024-01-01T01:00:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
### 11. 存储统计
|
||||
```
|
||||
GET /api/v1/stats
|
||||
Authorization: Bearer <api_key>
|
||||
|
||||
响应:
|
||||
{
|
||||
"total_objects": 1234,
|
||||
"total_size": 1234567890,
|
||||
"namespace_stats": {
|
||||
"moldinsight/stp-files": {
|
||||
"object_count": 100,
|
||||
"total_size": 123456789
|
||||
},
|
||||
"moldinsight/geometry": {
|
||||
"object_count": 200,
|
||||
"total_size": 234567890
|
||||
},
|
||||
...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 存储桶(命名空间)
|
||||
|
||||
| 命名空间 | 用途 | 存储内容 |
|
||||
|---------|------|---------|
|
||||
| `moldinsight/stp-files` | STP/STEP文件 | 用户上传的原始3D模型文件 |
|
||||
| `moldinsight/geometry` | 几何数据 | 几何分析结果的JSON数据 |
|
||||
| `moldinsight/mold-cavities` | 模具型腔数据 | 模具设计的详细JSON数据 |
|
||||
| `moldinsight/html` | HTML文件 | 生成的HTML报告文件 |
|
||||
| `moldinsight/user-files` | 用户文件 | 其他用户上传的文件 |
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 1. 配置环境变量
|
||||
|
||||
```bash
|
||||
# 复制示例配置
|
||||
cp .env.example .env
|
||||
|
||||
# 编辑 .env 文件
|
||||
nano .env
|
||||
```
|
||||
|
||||
设置 RustFS 相关配置:
|
||||
```env
|
||||
RUSTFS_ENDPOINT=http://localhost:8080
|
||||
RUSTFS_API_KEY=your-rustfs-api-key
|
||||
RUSTFS_TIMEOUT=30
|
||||
RUSTFS_PRESIGNED_URL_EXPIRES=3600
|
||||
```
|
||||
|
||||
### 2. 启动 RustFS 服务
|
||||
|
||||
假设你已经有 RustFS 服务,如果没有,可以按照以下方式启动:
|
||||
|
||||
```bash
|
||||
# 使用 Docker(如果提供了 Docker 镜像)
|
||||
docker run -d \
|
||||
--name rustfs \
|
||||
-p 8080:8080 \
|
||||
-e RUSTFS_API_KEY=your-rustfs-api-key \
|
||||
-e RUSTFS_STORAGE_PATH=/data \
|
||||
-v rustfs_data:/data \
|
||||
your-registry/rustfs:latest
|
||||
|
||||
# 或直接运行编译好的二进制文件
|
||||
./rustfs-server --port 8080 --api-key your-rustfs-api-key --storage-path ./rustfs-data
|
||||
```
|
||||
|
||||
### 3. 初始化存储
|
||||
|
||||
```bash
|
||||
# 初始化 RustFS 连接
|
||||
python src/storage/init_storage.py
|
||||
```
|
||||
|
||||
### 4. 使用存储集成服务
|
||||
|
||||
```python
|
||||
from services.storage_integration_rustfs import storage_integration
|
||||
from database.database import db_manager
|
||||
|
||||
async def upload_file(file_path: str):
|
||||
async with db_manager.get_session() as session:
|
||||
stp_file = await storage_integration.save_stp_file(
|
||||
session=session,
|
||||
file_path=Path(file_path),
|
||||
original_filename="model.stp",
|
||||
user_id=1
|
||||
)
|
||||
print(f"文件已保存到 RustFS,ID: {stp_file.id}")
|
||||
```
|
||||
|
||||
## Python 客户端使用
|
||||
|
||||
### 上传文件
|
||||
|
||||
```python
|
||||
from storage.rustfs_storage import rustfs_manager
|
||||
from pathlib import Path
|
||||
|
||||
# 先连接
|
||||
await rustfs_manager.connect(
|
||||
endpoint="http://localhost:8080",
|
||||
api_key="your-api-key"
|
||||
)
|
||||
|
||||
# 上传 STP 文件
|
||||
result = await rustfs_manager.upload_file(
|
||||
bucket_type='stp_files',
|
||||
file_path=Path('model.stp'),
|
||||
original_filename='model.stp'
|
||||
)
|
||||
print(f"上传成功: {result['object_key']}")
|
||||
```
|
||||
|
||||
### 上传 JSON 数据
|
||||
|
||||
```python
|
||||
geometry_data = {
|
||||
"volume": 5061079.99,
|
||||
"surface_area": 640037.28,
|
||||
"bounding_box": {...}
|
||||
}
|
||||
|
||||
result = await rustfs_manager.upload_json_data(
|
||||
bucket_type='geometry_data',
|
||||
json_data=geometry_data,
|
||||
file_hash='sha256-hash'
|
||||
)
|
||||
print(f"JSON 上传成功: {result['object_key']}")
|
||||
```
|
||||
|
||||
### 下载文件
|
||||
|
||||
```python
|
||||
data = await rustfs_manager.download_file(
|
||||
bucket_type='geometry_data',
|
||||
object_key='geometry_data/abc123.json'
|
||||
)
|
||||
json_data = json.loads(data.decode('utf-8'))
|
||||
print(json_data)
|
||||
```
|
||||
|
||||
### 生成预签名 URL
|
||||
|
||||
```python
|
||||
url = await rustfs_manager.generate_presigned_url(
|
||||
bucket_type='stp_files',
|
||||
object_key='stp-files/abc123.stp',
|
||||
expires=3600 # 1小时
|
||||
)
|
||||
print(f"临时访问链接: {url}")
|
||||
```
|
||||
|
||||
### 列出文件
|
||||
|
||||
```python
|
||||
files = await rustfs_manager.list_files(
|
||||
bucket_type='stp_files',
|
||||
prefix='stp-files'
|
||||
)
|
||||
for f in files:
|
||||
print(f"{f['object_key']}: {f['file_size']} bytes")
|
||||
```
|
||||
|
||||
## RustFS 服务端实现参考
|
||||
|
||||
如果你需要实现 RustFS 服务端,以下是一个简单的 Rust 实现框架:
|
||||
|
||||
```rust
|
||||
use actix_web::{web, App, HttpServer};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::path::PathBuf;
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct UploadInitRequest {
|
||||
namespace: String,
|
||||
key: String,
|
||||
file_size: u64,
|
||||
file_hash: String,
|
||||
metadata: Option<serde_json::Value>,
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
struct UploadInitResponse {
|
||||
upload_id: String,
|
||||
upload_url: String,
|
||||
expires_at: String,
|
||||
}
|
||||
|
||||
async fn upload_init(
|
||||
req: web::Json<UploadInitRequest>,
|
||||
path: web::Data<PathBuf>
|
||||
) -> impl web::Responder {
|
||||
// 验证 API Key
|
||||
// 生成 upload_id
|
||||
// 返回上传 URL
|
||||
web::Json(UploadInitResponse { ... })
|
||||
}
|
||||
|
||||
#[actix_web::main]
|
||||
async fn main() -> std::io::Result<()> {
|
||||
HttpServer::new(|| {
|
||||
App::new()
|
||||
.route("/health", web::get().to(health_check))
|
||||
.route("/api/v1/upload/init", web::post().to(upload_init))
|
||||
// ... 其他路由
|
||||
})
|
||||
.bind("0.0.0.0:8080")?
|
||||
.run()
|
||||
.await
|
||||
}
|
||||
```
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 连接 RustFS 失败
|
||||
```
|
||||
错误: RustFS 连接失败
|
||||
解决:
|
||||
1. 检查 RUSTFS_ENDPOINT 是否正确
|
||||
2. 检查 RustFS 服务是否运行
|
||||
3. 检查网络连接
|
||||
4. 验证 API Key
|
||||
```
|
||||
|
||||
### 文件上传失败
|
||||
```
|
||||
错误: RustFS 上传失败
|
||||
解决:
|
||||
1. 检查磁盘空间
|
||||
2. 检查网络连接
|
||||
3. 检查文件大小限制
|
||||
4. 查看服务端日志
|
||||
```
|
||||
|
||||
### 预签名 URL 失败
|
||||
```
|
||||
错误: RustFS 生成预签名URL失败
|
||||
解决:
|
||||
1. 检查 expires 参数是否有效
|
||||
2. 确认服务端支持预签名 URL
|
||||
3. 检查权限配置
|
||||
```
|
||||
|
||||
## 性能优化建议
|
||||
|
||||
### 客户端
|
||||
- 使用连接池(aiohttp 默认支持)
|
||||
- 实现上传重试机制
|
||||
- 对大文件使用分片上传
|
||||
- 并行上传多个小文件
|
||||
|
||||
### 服务端
|
||||
- 实现缓存层
|
||||
- 支持范围请求(断点续传)
|
||||
- 压缩存储
|
||||
- CDN 分发静态文件
|
||||
|
||||
## 安全建议
|
||||
|
||||
1. **更改默认 API Key**:生产环境必须使用强密钥
|
||||
2. **启用 HTTPS**:生产环境使用 TLS
|
||||
3. **访问控制**:配置命名空间权限
|
||||
4. **数据加密**:敏感数据加密存储
|
||||
5. **日志监控**:记录所有访问和操作
|
||||
@@ -0,0 +1,156 @@
|
||||
# 存储架构说明
|
||||
|
||||
> 文档定位:**存储分层与数据流的专题说明文档**。
|
||||
> 本文主要解释 geMoldInsight 的存储架构,不作为当前部署入口或当前状态的权威说明。当前部署方式见 [../../DEPLOYMENT.md](../../DEPLOYMENT.md),当前状态见 [../../STATUS.md](../../STATUS.md),总体架构见 [../../ARCHITECTURE.md](../../ARCHITECTURE.md)。
|
||||
> 其历史中的“本项目自行拉起 PostgreSQL / MinIO 并通过 `python src/main.py` 启动单体”的部分,**已不再代表当前默认部署方式**。
|
||||
|
||||
当前默认部署前提是:
|
||||
|
||||
- PostgreSQL 由服务器已有服务提供
|
||||
- Redis 由服务器已有服务提供
|
||||
- RustFS / MinIO 兼容对象存储由服务器已有服务提供
|
||||
- 项目自身只部署:`moldinsight` / `moldinsight-celery` / `inventory`
|
||||
|
||||
如需查看当前部署方式,请优先参考:
|
||||
- [../../../README.md](../../../README.md)
|
||||
- [../../deployment/LINUX_SETUP.md](../../deployment/LINUX_SETUP.md)
|
||||
- [../../deployment/DEPLOY_PORT.md](../../deployment/DEPLOY_PORT.md)
|
||||
- [../../archive/BACKEND_MODULARIZATION_BLUEPRINT.md](../../archive/BACKEND_MODULARIZATION_BLUEPRINT.md)
|
||||
|
||||
---
|
||||
|
||||
## 架构概述
|
||||
|
||||
本项目采用 **RustFS(S3兼容)对象存储** + **PostgreSQL 元数据存储** 的双层存储架构。
|
||||
|
||||
```text
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 应用层 (gemold / inventory) │
|
||||
└──────────────────────┬──────────────────────────────────────┘
|
||||
│
|
||||
┌──────────────┴──────────────┐
|
||||
│ │
|
||||
┌───────▼────────┐ ┌─────────▼─────────┐
|
||||
│ PostgreSQL │ │ RustFS / S3 │
|
||||
│ (元数据) │ │ (对象存储) │
|
||||
│ │ │ │
|
||||
│ - users │ │ - stp-files │
|
||||
│ - stp_files │ │ - geometry │
|
||||
│ - geometry_data│ │ - mold-cavities │
|
||||
│ - processing │ │ - html-files │
|
||||
│ - logs │ │ - user-files │
|
||||
└────────────────┘ └──────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## PostgreSQL 数据表(摘要)
|
||||
|
||||
### 用户管理
|
||||
- `users` - 用户信息
|
||||
- `roles` / `permissions` - 权限体系
|
||||
|
||||
### gemold 相关
|
||||
- `stp_files` - STP 文件元数据
|
||||
- `html_files` - HTML 报告元数据
|
||||
- `geometry_data` - 几何分析数据
|
||||
- `mold_cavity_data` - 模具型腔数据
|
||||
- `feature_detections` - 特征检测结果
|
||||
- `design_recommendations` - 设计建议
|
||||
- `processing_tasks` - 处理任务记录
|
||||
- `analysis_metrics` - 分析指标
|
||||
|
||||
### inventory 相关
|
||||
- `products` - 产品/物料
|
||||
- `product_materials` - BOM
|
||||
- `inventory` - 库存
|
||||
- `stock_movements` - 库存流水
|
||||
- `purchase_orders` / `sales_orders` - 订单
|
||||
- `finance_transactions` - 财务流水
|
||||
|
||||
---
|
||||
|
||||
## RustFS / S3 存储桶
|
||||
|
||||
| 存储桶名称 | 用途 | 存储内容 |
|
||||
|---|---|---|
|
||||
| `moldinsight-stp-files` | STP/STEP 文件 | 用户上传的原始 3D 模型 |
|
||||
| `moldinsight-geometry` | 几何结果 | 几何分析 JSON |
|
||||
| `moldinsight-mold-cavities` | 模具结果 | 模具设计 JSON |
|
||||
| `moldinsight-html` | HTML 报告 | 生成的 HTML 报告文件 |
|
||||
| `moldinsight-user-files` | 用户文件 | 其他附件/用户文件 |
|
||||
|
||||
---
|
||||
|
||||
## 当前推荐初始化方式
|
||||
|
||||
### 1. 准备环境变量
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
nano .env
|
||||
```
|
||||
|
||||
确保以下变量指向**服务器上已存在的真实服务**:
|
||||
|
||||
```env
|
||||
DB_HOST=your-db-host
|
||||
DB_PORT=5432
|
||||
DB_NAME=moldinsight
|
||||
DB_USER=moldinsight
|
||||
DB_PASSWORD=change-me
|
||||
|
||||
REDIS_HOST=your-redis-host
|
||||
REDIS_PORT=6379
|
||||
REDIS_PASSWORD=
|
||||
|
||||
RUSTFS_ENDPOINT=http://your-storage-host:9000
|
||||
RUSTFS_ACCESS_KEY=change-me
|
||||
RUSTFS_SECRET_KEY=change-me
|
||||
```
|
||||
|
||||
### 2. 初始化数据库
|
||||
|
||||
当前初始化入口参考:
|
||||
- [init_db.py](../../../src/shared/database/init_db.py)
|
||||
|
||||
### 3. 启动项目服务
|
||||
|
||||
当前推荐通过:
|
||||
- [docker-compose.yml](../../../docker-compose.yml)
|
||||
- 或 [src/entrypoints/](../../../src/entrypoints/)
|
||||
|
||||
而不是继续使用历史单体 `python src/main.py` 作为默认方式。
|
||||
|
||||
---
|
||||
|
||||
## 监控与维护
|
||||
|
||||
### 对象存储
|
||||
- 检查对象存储服务可达性
|
||||
- 定期清理历史产物
|
||||
- 配置生命周期策略
|
||||
|
||||
### PostgreSQL
|
||||
- 定期备份
|
||||
- 监控连接池与慢查询
|
||||
- 保持 Alembic 迁移链一致
|
||||
|
||||
---
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 对象存储连接失败
|
||||
- 检查 `RUSTFS_ENDPOINT`
|
||||
- 检查 access key / secret key
|
||||
- 检查服务端口与网络策略
|
||||
|
||||
### 数据库连接失败
|
||||
- 检查 `DB_HOST` / `DB_PORT`
|
||||
- 检查数据库账号密码
|
||||
- 检查防火墙与白名单
|
||||
|
||||
### 文件上传失败
|
||||
- 检查对象存储可用性
|
||||
- 检查 Celery worker 是否运行
|
||||
- 检查 Redis 是否可达
|
||||
Reference in New Issue
Block a user