223 lines
7.0 KiB
Markdown
223 lines
7.0 KiB
Markdown
# 刀具尾号类型功能实现说明
|
||
|
||
## 功能概述
|
||
|
||
根据**钻孔孔径的尾号**来判断刀具类型,并在界面上显示。这个功能帮助用户更直观地了解每个刀具的具体类型和用途。
|
||
|
||
## 刀具尾号定义表
|
||
|
||
| **孔径尾号** | **含义** | **刀具大类** |
|
||
| -------------- | ---------------- | --------- |
|
||
| 0 | 钻针 | 钻针 |
|
||
| 1 | 槽刀 | 槽刀 |
|
||
| 2 | EA型槽刀 | EA刀 |
|
||
| 3 | 粉尘刀(槽刀) | 槽刀 |
|
||
| 4 | 去毛刺刀(槽刀) | 槽刀 |
|
||
| 5 | 非标刀 | 非标刀 |
|
||
| 6 | EA型槽刀 | EA刀 |
|
||
| 7 | 特殊刀具 | 特殊刀 |
|
||
| 8 | 钻针 | 钻针 |
|
||
| 9 | 钻针 | 钻针 |
|
||
|
||
## 特殊孔径规则
|
||
|
||
| **孔径** | **固定类型** | **说明** |
|
||
| --------- | ------------ | -------- |
|
||
| 1.049 | 圆孔 | 特殊孔径 |
|
||
| 3.175 | 圆孔 | 特殊孔径 |
|
||
| 0.499 | 圆孔 | 机台码孔径 |
|
||
|
||
## 技术实现
|
||
|
||
### 1. 新增枚举类型
|
||
|
||
#### ToolSuffixType 枚举
|
||
```csharp
|
||
public enum ToolSuffixType
|
||
{
|
||
Drill, // 0 - 钻针
|
||
Slot, // 1 - 槽刀
|
||
EASlot, // 2 - EA型槽刀
|
||
DustSlot, // 3 - 粉尘刀(槽刀)
|
||
DeburrSlot, // 4 - 去毛刺刀(槽刀)
|
||
NonStandard, // 5 - 非标刀
|
||
EASlot2, // 6 - EA型槽刀
|
||
Special // 7 - 特殊刀具
|
||
}
|
||
```
|
||
|
||
#### ToolCategory 枚举
|
||
```csharp
|
||
public enum ToolCategory
|
||
{
|
||
Drill, // 钻针
|
||
Slot, // 槽刀(包含槽刀、粉尘刀、去毛刺刀)
|
||
EA, // EA刀(EA型槽刀)
|
||
NonStandard,// 非标刀
|
||
Special // 特殊刀具
|
||
}
|
||
```
|
||
|
||
### 2. 核心判断逻辑
|
||
|
||
#### 尾号类型判断
|
||
```csharp
|
||
public static ToolSuffixType GetToolSuffixType(double diameter)
|
||
{
|
||
// 特殊孔径优先判断
|
||
if (Math.Abs(diameter - 1.049) < 0.001 ||
|
||
Math.Abs(diameter - 3.175) < 0.001 ||
|
||
Math.Abs(diameter - 0.499) < 0.001)
|
||
{
|
||
return ToolSuffixType.Drill; // 固定为圆孔
|
||
}
|
||
|
||
// 获取孔径的小数部分最后一位
|
||
string diameterStr = diameter.ToString("F3");
|
||
if (diameterStr.Length >= 4 && diameterStr.Contains('.'))
|
||
{
|
||
char lastChar = diameterStr[diameterStr.Length - 1];
|
||
int suffix = int.Parse(lastChar.ToString());
|
||
|
||
return suffix switch
|
||
{
|
||
0 => ToolSuffixType.Drill,
|
||
1 => ToolSuffixType.Slot,
|
||
2 => ToolSuffixType.EASlot,
|
||
3 => ToolSuffixType.DustSlot,
|
||
4 => ToolSuffixType.DeburrSlot,
|
||
5 => ToolSuffixType.NonStandard,
|
||
6 => ToolSuffixType.EASlot2,
|
||
7 => ToolSuffixType.Special,
|
||
8 => ToolSuffixType.Drill,
|
||
9 => ToolSuffixType.Drill,
|
||
_ => ToolSuffixType.NonStandard
|
||
};
|
||
}
|
||
|
||
return ToolSuffixType.NonStandard; // 默认为非标刀
|
||
}
|
||
```
|
||
|
||
#### 大类判断
|
||
```csharp
|
||
public static ToolCategory GetToolCategory(ToolSuffixType suffixType)
|
||
{
|
||
return suffixType switch
|
||
{
|
||
ToolSuffixType.Drill => ToolCategory.Drill,
|
||
ToolSuffixType.Slot or ToolSuffixType.DustSlot or ToolSuffixType.DeburrSlot => ToolCategory.Slot,
|
||
ToolSuffixType.EASlot or ToolSuffixType.EASlot2 => ToolCategory.EA,
|
||
ToolSuffixType.NonStandard => ToolCategory.NonStandard,
|
||
ToolSuffixType.Special => ToolCategory.Special,
|
||
_ => ToolCategory.NonStandard
|
||
};
|
||
}
|
||
```
|
||
|
||
### 3. UI界面更新
|
||
|
||
在刀具列表中新增了"尾号类型"列,显示在"类型"列后面:
|
||
|
||
| 刀具编号 | 孔径(mm) | 类型 | 尾号类型 | 孔数 |
|
||
|---------|----------|------|----------|------|
|
||
| T01 | 0.799 | 圆孔 | 槽刀 | 7 |
|
||
| T02 | 0.656 | 圆孔 | EA型槽刀 | 5 |
|
||
| T03 | 1.601 | 槽孔 | 粉尘刀 | 529 |
|
||
| T04 | 0.499 | 机台码 | 去毛刺刀 | 57 |
|
||
|
||
### 4. 数据流程
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[钻带文件输入] --> B[解析刀具信息]
|
||
B --> C[计算孔径尾号]
|
||
C --> D[判断尾号类型]
|
||
D --> E[设置刀具大类]
|
||
E --> F[处理钻孔数据]
|
||
F --> G[生成ToolResult]
|
||
G --> H[创建ToolItem]
|
||
H --> I[UI显示]
|
||
|
||
C --> C1[特殊孔径检查]
|
||
C1 -->|1.049/3.175/0.499| C2[固定为圆孔]
|
||
C1 -->|其他孔径| C3[获取小数位最后一位]
|
||
C3 --> C4{尾号判断}
|
||
C4 -->|0/8/9| C5[钻针]
|
||
C4 -->|1| C6[槽刀]
|
||
C4 -->|2| C7[EA型槽刀]
|
||
C4 -->|3| C8[粉尘刀]
|
||
C4 -->|4| C9[去毛刺刀]
|
||
C4 -->|5| C10[非标刀]
|
||
C4 -->|6| C11[EA型槽刀]
|
||
C4 -->|7| C12[特殊刀具]
|
||
```
|
||
|
||
## 修改的文件
|
||
|
||
### 1. ToolItem.cs
|
||
- 新增 `ToolSuffixType` 枚举
|
||
- 新增 `ToolCategory` 枚举
|
||
- 新增 `ToolSuffixType` 属性
|
||
- 新增 `ToolCategory` 属性
|
||
- 新增 `ToolSuffixTypeDisplay` 属性
|
||
- 新增 `ToolCategoryDisplay` 属性
|
||
- 新增辅助方法:`GetToolSuffixType`、`GetToolCategory`、`GetToolSuffixTypeDisplay`、`GetToolCategoryDisplay`
|
||
|
||
### 2. DrillTapeProcessor.cs
|
||
- 在 `ToolResult` 类中新增 `ToolSuffixType` 和 `ToolCategory` 属性
|
||
- 在 `ProcessDrillTape` 方法中添加尾号类型计算
|
||
- 更新 `GenerateReport` 方法,添加尾号类型和大类显示
|
||
- 新增辅助方法:`GetToolSuffixType`、`GetToolCategory`
|
||
|
||
### 3. MainWindow.xaml
|
||
- 窗口宽度从 900 调整为 1000
|
||
- 在 ListView 中新增"尾号类型"列
|
||
- 调整各列宽度以适应新布局
|
||
|
||
### 4. MainWindowViewModel.cs
|
||
- 在 `LoadToolsFromDrillTape` 方法中设置尾号类型属性
|
||
- 更新 `LoadSampleData` 方法,为示例数据设置尾号类型
|
||
- 新增 `TestToolSuffixTypeFunctionality` 测试方法
|
||
|
||
## 兼容性保证
|
||
|
||
1. **向后兼容**:保留现有的 `ToolType` 枚举和属性,不影响现有功能
|
||
2. **数据完整性**:新功能作为补充信息,不修改现有数据结构
|
||
3. **功能独立**:尾号类型判断逻辑独立,不影响现有的槽孔计算和机台码处理
|
||
|
||
## 测试验证
|
||
|
||
### 1. 单元测试
|
||
- 验证不同尾号的刀具类型判断
|
||
- 验证刀具大类分组逻辑
|
||
- 验证显示文本的正确性
|
||
|
||
### 2. 集成测试
|
||
- 验证钻带处理器的集成
|
||
- 验证UI显示的正确性
|
||
- 验证现有功能不受影响
|
||
|
||
### 3. 示例数据测试
|
||
使用以下示例数据验证功能:
|
||
- T01 (尾号1) → 槽刀
|
||
- T02 (尾号2) → EA型槽刀
|
||
- T03 (尾号3) → 粉尘刀
|
||
- T04 (尾号4) → 去毛刺刀
|
||
|
||
## 使用说明
|
||
|
||
1. **自动识别**:系统会根据刀具编号的尾号自动识别刀具类型
|
||
2. **界面显示**:在刀具列表的"尾号类型"列中显示具体的刀具类型
|
||
3. **报告生成**:在钻带处理报告中包含尾号类型和大类信息
|
||
4. **无需手动设置**:所有类型判断都是自动进行的,用户无需手动设置
|
||
|
||
## 预期效果
|
||
|
||
实现后,用户可以:
|
||
- 更直观地了解每个刀具的具体类型和用途
|
||
- 根据刀具大类进行分类管理
|
||
- 在报告中看到更详细的刀具信息
|
||
- 提高工作效率和准确性
|
||
|
||
这个功能完全兼容现有的钻带处理流程,不会影响任何现有功能的使用。 |