EA刀/短槽刀列按参数表下限区间 [0.60,0.65)/[0.65,0.70)/[0.70,0.75)/>=0.75 匹配,修复 0.706mm 等刀径查表失败;叠板计算改为 Expander 默认收折、移除计算按钮、输入变化自动计算。 Co-authored-by: Cursor <cursoragent@cursor.com>
13 KiB
13 KiB
基础信息叠板计算功能
Goal
在启动功能菜单的“基础信息”区域添加叠板计算能力,让用户输入板厚和单张板总铜厚后,系统根据当前钻孔文件解析出的最小钻咀、最小槽刀、最小 EA 刀,按《钻孔叠板参数表》计算建议叠板块数,帮助用户在打开钻带时快速判断生产叠板数量。
What I already know
- 用户提供的规则来源是
1009B-2013钻机参数表(D2-f)(A1A2厂) (1).doc,文档主体是《钻孔叠板参数表》。 - 规则表按板材厚度和刀具直径给出叠板片数,分为短槽刀、槽刀、钻针三类。
- 备注规则包含:双面、多层板叠板后的总铜厚大于
16oz时,叠板数需逐张递减,直到总铜厚不超过16oz或叠板数降到1。 - 当前工具场景基本只有双面或多层 PCB,不需要在界面增加板类型选择。
- 如果钻咀、槽刀、短槽刀叠板数冲突,以最小叠板数为准。
D表示刀具直径;/表示加工能力无法达到;如果板厚没有对应叠板数,由工程部提出、工艺部验证。- 当前启动流程已在
App.xaml.cs中读取并解析钻带一次,再把最小钻咀、最小槽刀、最小 EA 刀传给StartupSelectionWindow。 StartupSelectionWindow.xaml的“基础信息”已经显示文件名、最小钻咀、最小槽刀、最小 EA 刀、PP 间距和 3.175 外围孔间距。MainWindowViewModel.UpdateMinDiameterInfo()已负责计算三类最小直径;EA 刀对应尾号2或6,槽刀排除 EA 类型。- 现有
StartupSelectionWindow使用匿名对象作为DataContext,无法承载双向输入、动态结果和属性变更通知。 - 现有最小直径显示口径会排除
0.749mm;该排除只适合显示用途,叠板计算应按实际刀具参与计算,否则可能得到偏大的叠板数。 - 项目文档已明确粉尘刀、去毛刺刀的大类都是槽刀。
Assumptions
- 叠板计算只在启动选择窗口中做即时辅助显示,不写回钻带文件。
- EA 刀按规则表中的”短槽刀”规则计算。
Open Questions
无(全部已确认)。
Requirements (finalized)
- 在启动功能菜单的”基础信息”区域增加叠板计算输入和结果显示。
- 本次 MVP 只做启动菜单即时计算,不做输入记忆,不在主窗口增加入口。
- 叠板计算区域使用
Expander折叠控件,默认收折,仅显示”▸ 叠板计算”标题行;展开后显示输入框、结果和明细,不占用启动菜单的默认视觉面积。 - 输入即计算:板厚和铜厚输入框使用
UpdateSourceTrigger=PropertyChanged,任一输入变化时自动计算;不设”计算叠板”按钮;输入不完整时静默清空结果,不报错。 - 铜厚输入为单张板总铜厚,最终叠板后的总铜厚按
单张板总铜厚 × 候选叠板数计算。 - 用户输入板厚和铜厚后,系统使用当前钻带中实际参与加工的最小钻咀、最小槽刀、最小 EA 刀分别查表。
- 叠板计算的最小刀径口径独立于现有“最小钻咀/槽刀/EA刀”显示口径:
0.749mm不得因显示排除规则而被排除。 - 槽刀分类映射:
Slot、DustSlot、DeburrSlot均按规则表“槽刀”计算;EASlot、EASlot2按规则表“短槽刀”计算;Drill按规则表“钻针”计算。 - 当前钻带缺少某类刀具时,该类别不参与最终叠板数计算,结果明细显示该类别为“无”。
- 如果某类刀具在当前钻带中存在但无法匹配规则、规则格为
/或-、或刀具直径落在规则能力外,则整体显示无法计算,并在明细中标出失败类别和原因;不得跳过已存在但失败的类别。 - 如果三类刀具都不存在,则显示无法计算。
- 规则匹配严格照表执行:板厚不在表格区间、规则格为
/或-、刀具直径没有对应列时,显示无法计算原因,不自动取邻近规则。 - 多个刀具类别得到不同叠板数时,最终结果取最小叠板数。
- 不增加板类型输入,默认当前输入都是双面或多层 PCB,始终按
16oz总铜厚限制递减叠板数,最小保留1张。 - 计算过程需要能说明最终结果来自哪个限制:钻咀、槽刀、EA 刀或铜厚递减。
- 输入校验先于查表执行:板厚和单张总铜厚不能为空,必须为大于
0的数字;板厚必须落在规则表总范围0.4mm到3.4mm内。
Acceptance Criteria (finalized)
- 启动选择窗口的”基础信息”中能输入板厚和铜厚。
- 叠板计算区域默认折叠,展开后输入板厚和铜厚自动计算,无需点击按钮。
- 输入有效且当前钻带存在可参与计算的最小刀具时,显示建议叠板块数。
- 叠板计算使用包含
0.749mm的实际最小刀径口径,不受现有显示排除规则影响。 - 铜厚限制使用单张板总铜厚乘以候选叠板数计算。
- 钻咀、槽刀、EA 刀结果冲突时,显示取最小值后的最终结果。
- 铜厚限制始终生效;触发时结果按每次减
1张直到不超过16oz或保留1张。 - 当前钻带缺少某类刀具时,该类不影响最终结果,结果明细显示为”无”。
- 当前钻带存在某类刀具但该类无法匹配规则时,整体显示无法计算,不使用剩余类别继续给建议张数。
- 三类刀具都不存在时,显示无法计算。
- 板厚或刀具直径超出规则表、或规则为
//-时,界面显示无法计算原因,不默默给兜底值。 - 非数字、空输入、
0或负数输入时,静默清空结果区域,不进入查表逻辑。
Technical Approach
- 将
StartupSelectionWindow的匿名DataContext替换为正式StartupSelectionViewModel,实现INotifyPropertyChanged,承载文件信息、最小直径显示值、板厚输入、铜厚输入、计算结果和明细文本。 - 保持现有 code-behind 风格;叠板计算不再使用按钮事件,改为输入属性 setter 中调用 ViewModel 的
TryCalculateStackCount()方法。 - 新增独立叠板计算类,封装规则表、输入校验、三类刀具查表、取最小值和
16oz铜厚递减逻辑;不建模板类型。 StartupSelectionWindow仅负责输入、点击按钮和显示结果,不承载规则表算法。App.xaml.cs继续沿用现有启动流程,同时把MainWindowViewModel.Tools或由其派生出的叠板计算用最小刀径传入启动窗口;叠板计算不得复用排除0.749mm后的显示最小值。- 计算类放在项目根目录
StackCountCalculator.cs,命名空间使用现有主命名空间DrillTools,避免引入新的分层目录和依赖。 - 规则表在代码中以明确的厚度区间、直径区间和单元格值表达;每个失败路径返回中文原因,避免空结果。
- EA 刀按规则表中的“短槽刀”规则计算;普通槽刀按“槽刀”规则计算;钻咀按“钻针”规则计算。
- 规则录入验收:实现时必须用本文档“数字化规则表”逐项核对代码常量,并补充覆盖边界区间、
-//单元格、缺失类别和0.749mm参与计算的验证样例。
Digital Rule Tables
短槽刀 / EA 刀
| 板厚范围 mm | D=0.60 | D=0.65 | D=0.70 | D>=0.75 |
|---|---|---|---|---|
| 0.40-0.65 | 5 | 5 | 5 | 5 |
| 0.66-0.85 | 4 | 4 | 5 | 5 |
| 0.86-0.95 | 3 | 4 | 5 | 5 |
| 0.96-1.05 | 3 | 3 | 4 | 4 |
| 1.06-1.15 | 3 | 3 | 4 | 4 |
| 1.16-1.35 | 2 | 3 | 4 | 4 |
| 1.36-1.65 | 2 | 2 | 3 | 3 |
| 1.66-2.05 | 1 | 2 | 2 | 2 |
| 2.06-2.55 | 1 | 1 | 1 | 1 |
| 2.56-3.40 | 1 | 1 | 1 | 1 |
短槽刀直径匹配为精确列或下限列:0.60、0.65、0.70、>=0.75;其它直径视为无对应列,显示无法计算。
槽刀
| 板厚范围 mm | D=0.50 | D=0.55 | D=0.60-0.65 | D>=0.70 |
|---|---|---|---|---|
| 0.40-0.65 | 5 | 5 | 5 | - |
| 0.66-0.85 | 5 | 5 | 5 | 5 |
| 0.86-0.95 | 5 | 5 | 5 | 5 |
| 0.96-1.05 | 4 | 5 | 5 | 5 |
| 1.06-1.15 | 3 | 4 | 4 | 5 |
| 1.16-1.35 | 3 | 4 | 4 | 5 |
| 1.36-1.65 | 2 | 3 | 3 | 4 |
| 1.66-2.05 | 2 | 2 | 2 | 3 |
| 2.06-2.55 | 1 | 2 | 2 | 2 |
| 2.56-3.40 | 1 | 1 | 1 | 2 |
槽刀直径匹配为精确列或范围列:0.50、0.55、0.60-0.65、>=0.70;其它直径视为无对应列,显示无法计算。
钻针
| 板厚范围 mm | D=0.20-0.225 | D=0.25 | D=0.275-0.30 | D=0.35-0.40 | D=0.45 | D>=0.50 |
|---|---|---|---|---|---|---|
| 0.40-0.65 | 5 | 5 | 5 | 5 | 5 | 5 |
| 0.66-0.85 | 4 | 5 | 5 | 5 | 5 | 5 |
| 0.86-0.95 | 3 | 5 | 5 | 5 | 5 | 5 |
| 0.96-1.05 | 3 | 5 | 5 | 5 | 5 | 5 |
| 1.06-1.15 | 2 | 4 | 4 | 4 | 5 | 5 |
| 1.16-1.35 | 2 | 3 | 3 | 4 | 4 | 5 |
| 1.36-1.65 | 2 | 3 | 3 | 3 | 3 | 4 |
| 1.66-2.05 | 1 | 2 | 2 | 2 | 2 | 3 |
| 2.06-2.55 | 1 | 2 | 2 | 2 | 2 | 2 |
| 2.56-3.40 | 1 | 1 | 1 | 1 | 1 | 2 |
钻针直径匹配为范围列:0.20-0.225、0.25、0.275-0.30、0.35-0.40、0.45、>=0.50;其它直径视为无对应列,显示无法计算。
Decision (ADR-lite)
Context: 叠板规则来自受控作业文件,且备注要求无对应板厚时由工程/工艺验证,不能由程序自行推断邻近值。
Decision: 只在启动菜单”基础信息”做叠板计算;规则严格照表;缺失刀具类别跳过;当前存在但规则失败的类别使整体无法计算;最终叠板数取当前存在且全部成功类别的最小规则值后,再套用 16oz 总铜厚递减限制。由于当前业务基本只有双面或多层 PCB,界面不增加板类型选择,铜厚限制始终生效。叠板计算区域改为 Expander 折叠式,默认收折,输入即计算,不设按钮,避免干扰启动菜单的快速择路动线。
Consequences: 功能改动面较小,计算口径可追溯;后续若规则频繁变化,可以再把规则表外置为配置。
Definition of Done (team quality bar)
- Tests added/updated where appropriate;本项目未配置测试框架时至少补充可手工验证的样例。
dotnet build通过。- UI 文案为简体中文。
- 不引入第三方依赖,不改变既有启动流程入口。
- 文档或说明同步更新,如果行为对用户可见。
Out of Scope (explicit)
- 不自动修改钻带文件或导出生产工单。
- 不新增规则配置编辑器。
- 不记忆上次输入的板厚和铜厚。
- 不在主窗口“基础信息”区域增加同步入口。
- 不增加单面/双面/多层板类型选择。
- 不按邻近板厚或邻近刀具直径自动推断规则。
- 不改变最小钻咀、最小槽刀、最小 EA 刀的现有解析口径,除非实现时发现现有计算与规则冲突并另行确认。
Technical Notes
- 可能影响文件:
StartupSelectionWindow.xamlStartupSelectionWindow.xaml.csApp.xaml.csStartupSelectionViewModel.csStackCountCalculator.cs
- 规则来源文件:
C:\Users\14244\source\repos\Aoh\DrillTools\1009B-2013钻机参数表(D2-f)(A1A2厂) (1).doc。 - 项目是
.NET 6 WPF,目标平台net6.0-windows、x86。 - 项目没有测试框架;现有质量验证以
dotnet build和真实钻带样例为主。 - 相关规范索引:
.trellis/spec/backend/index.md.trellis/spec/frontend/index.md
UI Sketch
默认收折状态:
基础信息
┌────────────────────────────────────────────────────────────────────┐
│ 文件名:xxx │
│ 最小钻咀:0.250 最小槽刀:0.600 最小EA刀:0.650 │
│ ▸ 叠板计算 │
└────────────────────────────────────────────────────────────────────┘
展开后(输入即计算,无需按钮):
基础信息
┌────────────────────────────────────────────────────────────────────┐
│ 文件名:xxx │
│ 最小钻咀:0.250 最小槽刀:0.600 最小EA刀:0.650 │
│ ▾ 叠板计算 │
│ 板厚(mm):[ 0.80 ] 铜厚(oz):[ 2 ] │
│ 建议叠板:4 张 │
│ 钻针 4 / 槽刀 5 / EA 5 / 铜厚通过,最终取 4 张 │
└────────────────────────────────────────────────────────────────────┘
叠板区域使用 Expander 控件,IsExpanded="False";当两个输入框均有有效正数时自动计算并显示结果,输入不完整时静默清空。计算按钮已移除。