Files
Mr.Xia 8d6efa9e86 fix: 修复EA刀叠板查表直径区间匹配,叠板区改为折叠输入即算
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>
2026-06-29 22:01:15 +08:00

13 KiB
Raw Permalink Blame History

基础信息叠板计算功能

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 刀对应尾号 26,槽刀排除 EA 类型。
  • 现有 StartupSelectionWindow 使用匿名对象作为 DataContext,无法承载双向输入、动态结果和属性变更通知。
  • 现有最小直径显示口径会排除 0.749mm;该排除只适合显示用途,叠板计算应按实际刀具参与计算,否则可能得到偏大的叠板数。
  • 项目文档已明确粉尘刀、去毛刺刀的大类都是槽刀。

Assumptions

  • 叠板计算只在启动选择窗口中做即时辅助显示,不写回钻带文件。
  • EA 刀按规则表中的”短槽刀”规则计算。

Open Questions

无(全部已确认)。

Requirements (finalized)

  • 在启动功能菜单的”基础信息”区域增加叠板计算输入和结果显示。
  • 本次 MVP 只做启动菜单即时计算,不做输入记忆,不在主窗口增加入口。
  • 叠板计算区域使用 Expander 折叠控件,默认收折,仅显示”▸ 叠板计算”标题行;展开后显示输入框、结果和明细,不占用启动菜单的默认视觉面积。
  • 输入即计算:板厚和铜厚输入框使用 UpdateSourceTrigger=PropertyChanged,任一输入变化时自动计算;不设”计算叠板”按钮;输入不完整时静默清空结果,不报错。
  • 铜厚输入为单张板总铜厚,最终叠板后的总铜厚按 单张板总铜厚 × 候选叠板数 计算。
  • 用户输入板厚和铜厚后,系统使用当前钻带中实际参与加工的最小钻咀、最小槽刀、最小 EA 刀分别查表。
  • 叠板计算的最小刀径口径独立于现有“最小钻咀/槽刀/EA刀”显示口径0.749mm 不得因显示排除规则而被排除。
  • 槽刀分类映射:SlotDustSlotDeburrSlot 均按规则表“槽刀”计算;EASlotEASlot2 按规则表“短槽刀”计算;Drill 按规则表“钻针”计算。
  • 当前钻带缺少某类刀具时,该类别不参与最终叠板数计算,结果明细显示该类别为“无”。
  • 如果某类刀具在当前钻带中存在但无法匹配规则、规则格为 /-、或刀具直径落在规则能力外,则整体显示无法计算,并在明细中标出失败类别和原因;不得跳过已存在但失败的类别。
  • 如果三类刀具都不存在,则显示无法计算。
  • 规则匹配严格照表执行:板厚不在表格区间、规则格为 /-、刀具直径没有对应列时,显示无法计算原因,不自动取邻近规则。
  • 多个刀具类别得到不同叠板数时,最终结果取最小叠板数。
  • 不增加板类型输入,默认当前输入都是双面或多层 PCB始终按 16oz 总铜厚限制递减叠板数,最小保留 1 张。
  • 计算过程需要能说明最终结果来自哪个限制钻咀、槽刀、EA 刀或铜厚递减。
  • 输入校验先于查表执行:板厚和单张总铜厚不能为空,必须为大于 0 的数字;板厚必须落在规则表总范围 0.4mm3.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.600.650.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.500.550.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.2250.250.275-0.300.35-0.400.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.xaml
    • StartupSelectionWindow.xaml.cs
    • App.xaml.cs
    • StartupSelectionViewModel.cs
    • StackCountCalculator.cs
  • 规则来源文件:C:\Users\14244\source\repos\Aoh\DrillTools\1009B-2013钻机参数表(D2-f)A1A2厂 (1).doc
  • 项目是 .NET 6 WPF,目标平台 net6.0-windowsx86
  • 项目没有测试框架;现有质量验证以 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";当两个输入框均有有效正数时自动计算并显示结果,输入不完整时静默清空。计算按钮已移除。