717:回调r=>{};norice;fov;pcb;寸动距离;背钻主钻孔;

1

shareDialogService.ShowDialogModal(nameof(SettingView), para, r => { });

shareDialogService.ShowDialogModal(

"SettingView", → 打开哪个窗口

para, → 带什么数据过去

r => { } → 窗口关了之后干啥(这里啥也不干)

);

2

csharp 复制代码
{
    //配置参数
    shareDialogService.ShowDialogModal(nameof(SettingView), para, async r =>
    {
     
    }, "notitle");
}

参数 4:"notitle"弹窗样式标识:隐藏标题栏,无关闭按钮、无标题文字;

常见配套标识:"normal"(正常带标题)、"min"、"fullscreen" 等。

3

没懂 dialogService.ShowDialogModal(nameof(NewView), r => nameof(NewView)

nameof(NewView) 就是字符串 "NewView"

csharp 复制代码
nameof(NewView)   →   等同于写   "NewView"

框架收到这个字符串,去容器里找到对应的 View 和 ViewModel,创建出来显示。

4

if (NewProduct != null)

{

NewProduct.ScanDirection = value;

OnPropertyChanged();

} value?

value 是 C# 的关键字,就是你赋给它的值:

csharp 复制代码
ScanDirectionIndex = 0;     // value = 0
ScanDirectionIndex = 2;     // value = 2

你选 ComboBox "左上"(第0个),SelectedIndex 变成 0,自动调 setter,value 就是 0。

5

fov?

FOV = Field of View(视野/视场)

在 XRay 这个工业 X 射线检测设备中,FOV 指的是 检测视野面板,是导航图上用于标记 X 射线扫描覆盖区域的矩形框。

项目中的 FOV

方面 说明
控件 XRayFovBoardControl.xaml --- 紫色矩形面板
颜色系 紫色 #702caf(边框 #60702caf,填充 #33702caf
View/VM XRayFovBoardControl.xaml / XRayFovBoardViewModel.cs
配置开关 PDModeConfig.ShowFov = true --- 生产模式下显示 FOV 边框

为什么 FOV 单独特化

FovConverter 是 FOV 专用的背景色转换器,和普通元件用的 MultiConverter 分开。区别在于:

  • 普通元件 :扫描/重建时显示橙褐色 #80d87a16
  • FOV 面板 :扫描/重建时始终透明 --- 因为它只是一个区域标记框,不需要像元件一样高亮填充

FOV 的核心作用是告诉操作员"当前正在检测哪个区域",而不是表示检测结果,所以它的视觉表现更低调。

6

  1. PCB 电子制造(机械三点定位)

PCB机械三点定位详细解释(SMT/检测治具通用)

一、作用核心逻辑

一块PCB是平面薄板,机械固定只靠1点会旋转、2点会左右滑动;3个不共线的定位点能唯一锁定一块板子的平面位置,完全限制6个自由度(上下、左右、前后、旋转、倾斜、偏移),设备才能精准贴元件、X光检测、分板、测试。

二、PCB上的定位点两种形式

1. 定位孔(最常用,机械销钉定位)

PCB出厂前蚀刻3个圆孔,分布在板子对角/边缘,三点连线形成三角形,不能排成一条直线。

设备载具上有3根金属定位销,PCB放上去后销钉穿进定位孔,卡死板子:

  1. 2个孔限制左右、前后平移;
  2. 第三个孔杜绝板子绕前两孔旋转;
    最终板子每次放置坐标完全一致,不会偏位。

2. Mark点(光学三点定位,你做X光检测上位机最常用)

就是电路板上圆形铜基准点,分全局MARK ,一般设计3颗,对应三点定位逻辑:

X光机、SMT贴片机相机拍照抓取3个Mark坐标,设备软件根据三点坐标自动算出PCB当前偏移、旋转角度,补偿运动轴,实现精准对位。

三、为什么必须是3点,不能2点/4点?

  1. 2点定位缺陷
    两点只能固定直线位置,PCB能绕两点连线转圈,轻微旋转就会导致元件贴偏、X光检测图像错位,BGA、IGBT检测直接报废。
  2. 3点最优
    最少数量、最低成本,完全锁死平面位置,治具加工、相机算法计算最简单;工业标准首选。
  3. 4点多余
    四点容易出现加工公差导致板子压变形,增加计算量,只有超大尺寸PCB才会辅助加支撑点,基准定位仍以3个主Mark为准。

四、和你工作相关场景(X光半导体检测设备)

你开发的X光/CT检测设备,DBC基板、BGA、QFN、IGBT检测流程:

  1. 相机拍摄PCB上3个基准Mark点;
  2. 上位机软件读取三点像素坐标,通过三点定位算法计算板子实际旋转、XY偏移;
  3. 自动控制平台轴移动补偿偏差,保证CT断层扫描、焊点尺寸测量坐标统一;
  4. 如果只用2个Mark,板子轻微旋转后,芯片焊点坐标全部计算错误,良率分析数据失真。

五、工艺硬性要求

  1. 三点禁止共线,尽量分散在电路板三个角落,三角形面积越大,定位精度越高;
  2. 三个定位孔/Mark尺寸统一,避免识别、卡料偏差;
  3. 治具销钉、相机视觉三点定位配套使用:机械粗定位+光学三点精定位。

六、简单总结

PCB机械三点定位,本质用不共线三个基准点消除电路板平移、旋转偏差,是SMT贴片、X光半导体检测、电路板测试的基础对位方案,是上位机视觉坐标换算的核心依据。

7

寸动距离

寸动距离(JOG Step / 步进距离)

一、核心定义

工业数控、运动控制、起重设备术语,英文常称 Jog Step Distance

单次触发寸动(点动/步进)指令时,轴固定移动的预设位移值

分两种寸动模式,对应两种"寸动距离"含义:

  1. 步进寸动(点一次走固定长度)
    按一下方向键/按钮,轴自动走完设定寸动距离后立刻停止;再按再走一段,适合精密微调对位。
    例:寸动距离设0.1mm,点一次X+,X轴精确移动0.1mm停下。
  2. 连续寸动(按住就走)
    部分控制器参数里的"寸动距离"为单次最长移动限位,按住按键持续低速运动,松开即停,不会超出该距离,防止撞机。

二、参数换算逻辑

寸动距离由控制器脉冲参数换算得出:

寸动距离=寸动脉冲数÷每毫米脉冲数\text{寸动距离} = \text{寸动脉冲数} \div \text{每毫米脉冲数}寸动距离=寸动脉冲数÷每毫米脉冲数

  • 每毫米脉冲:丝杆导程、电机细分决定;
  • 修改寸动距离只需修改HMI/参数表里的长度数值,控制器自动换算脉冲输出。

三、常见取值范围

  1. 精密设备(半导体检测、CNC、视觉对位):0.001mm ~ 1mm
  2. 普通机床、自动化流水线:0.1mm ~ 10mm
  3. 行车、起重机重载对位:2mm ~ 100mm(最小可3mm微寸动)

四、作用场景

  1. 模具、工件、相机Mark点精准对位;
  2. 换模、调试前低速短距离试运行,避免碰撞;
  3. 重载起重微调吊具位置,降低操作难度;
  4. 设备回零、坐标偏移修正。

五、易混区分

  • 寸动距离(Step):点一下固定走一段,定量微调;
  • 寸动速度(JOG速度):寸动模式下轴运行快慢,和距离无关;
  • 连续点动(自由JOG):无固定寸动距离,按住持续移动。

8

背钻主钻孔

背钻主钻孔(PCB背钻工艺:主钻=一次通孔钻)

一、定义区分

1. 主钻孔(一钻/主钻)

背钻流程里第一道钻孔工序 ,行业简称主钻

  • 用小号钻头,一次性钻穿整板,生成完整PTH电镀通孔
  • 孔径为有效导电孔径,孔壁后续沉铜、电镀,实现全层导通;
  • 作用:建立层间导电通道,是背钻的基础孔;
  • 俗称:一次钻、通孔主钻。

2. 背钻孔(二钻/背钻)

主钻电镀完成后的二次定深钻孔

  • 钻头直径比主钻大0.15~0.3mm
  • 从板子反面(无信号层一侧)精准控深钻削;
  • 目标:把通孔多余的铜柱(残桩Stub)钻掉,只保留需要导通的孔段;
  • 不能钻穿、不能伤到目标导通层,预留安全残桩(5~10mil)。

二、完整工艺流程(主钻+背钻)

  1. 主钻孔(核心第一步)
    CNC钻机按Gerber钻孔文件钻通整板,形成原始通孔;
  2. 沉铜+全板电镀,通孔内壁镀铜,全层电气连通;
  3. 背钻孔(二次加工)
    大钻头对位原主钻孔,反向定深钻除无用铜壁;
  4. 清洗、蚀刻去除钻屑,保留有效导电段。

三、核心参数对比

项目 主钻孔(一次钻) 背钻孔(二次钻)
钻孔顺序 第一道基础工序 电镀后二次加工
钻头大小 基础小孔(成品导电孔径) 比主钻大0.15~0.3mm
钻孔深度 贯穿整板 可控深度,不钻到目标导通层
孔壁铜 完整保留,导电 多余铜壁被钻除,仅上段有铜
功能 建立层间导电通路 消除过孔残桩,优化高速信号完整性

四、为什么必须分主钻+背钻,不能直接定深盲孔?

  1. 成本更低:无需顺序压合盲埋孔,多层背板、高速服务器板首选;
  2. 布线灵活:通孔布线自由度高,再背钻切除多余残桩;
  3. 适用场景:10G/25G/56G高速差分、PCIe、光纤信号,残桩过长会引发反射、眼图恶化、EMI干扰。

五、设计与生产关键要求

  1. 孔径搭配:背钻孔径 ≥ 主钻孔径+0.15mm,保证完全切除铜壁;
  2. 残桩控制:行业标准剩余Stub<10mil(0.25mm);
  3. 深度公差:±0.05mm,过深会切断有效层铜箔,造成开路;
  4. 设计标注:PCB文件需分开输出主钻钻孔层背钻钻孔层,标注背钻起止层。

六、通俗总结

主钻孔是打底的完整通孔,背钻是反向扩孔修掉没用的铜柱子;没有主钻,就不存在背钻。

高速PCB里说"背钻孔",整套结构都要先做主钻通孔,再二次背钻。

通俗拆解:残桩Stub、主钻通孔、背钻去除多余铜柱

1. 先搞懂:通孔做完是什么样子(只主钻、不背钻)

一块多层PCB,比如8层板,只做一次主钻通孔

钻头直接钻穿所有板材,沉铜电镀后,整个孔内壁全部镀上铜,整根孔从头到尾全导电

假设需求:信号只需要第1层 ↔ 第4层 导通,5~8层不需要连这条线路。

此时通孔结构:

  • 1~4层:有用,需要保留铜壁导电;
  • 4~8层:一整段空心铜管子悬空,没有任何线路连接,这一段悬空铜壁就叫残桩Stub

这段悬空铜柱等于一根无用短截传输线,高速信号走的时候会产生信号反射、干扰、眼图变差,高速板必须删掉。

2. 背钻怎么"只保留需要导通的孔段"

  1. 主钻先钻通整板,电镀完整铜壁;
  2. 从板子背面(第8层那一面)用更大钻头对准原孔,精准控制钻孔深度
  3. 钻削深度刚好钻到第4层下方一点点,把4~8层那一段多余的铜管壁全部钻碎清除;
  4. 严格控制不能钻穿到1~4层区域,这一段铜壁完整保留,维持1-4层导通。

3. 一句话直白总结

通孔电镀后整根孔全是铜,不需要导通的下半截铜管子就是残桩;

背钻从反面定深钻掉下半截无用铜柱,只留下上层需要导电的那段铜壁,消除高速信号干扰。

补充示意图文字版

不背钻:

层1\]铜 → \[层4\]铜 → 【残桩铜柱】→ \[层8

背钻后:

层1铜 → 层4铜 (到此截止),下方残桩全部钻空无铜

9

代码逐行解析(C#)

完整代码

csharp 复制代码
    if (values[9] is bool d && d)
    {
        status |= ShapeStatus.DrillConfigured;
    }
}

逐行拆解

  1. if (values.Length >= 10)

    判断数组 values 长度是否大于等于10,保证下标9存在 ,防止索引越界报错。

    数组下标从0开始,第10个元素对应索引 9

  2. values[9] is bool d

    C# 模式匹配语法:

    • 校验 values[9] 的数据类型是否为 bool
    • 如果是,把值取出赋值给局部变量 d
    • 类型不匹配时,整个表达式直接返回 false,不会进入内层逻辑。
  3. && d

    类型匹配通过后,再判断布尔值是否为 true

    只有 values[9] 是布尔 true 才满足条件。

  4. status |= ShapeStatus.DrillConfigured;

    位运算赋值:等价于 status = status | ShapeStatus.DrillConfigured

    • ShapeStatus 是枚举,标记图形状态;
    • |=status 追加「钻孔已配置」状态位,不清除原有其他状态。

逻辑总结

当满足全部3个条件时,给图形状态打上钻孔配置标记:

  1. values数组至少有10个元素;
  2. 第10个元素(索引9)是布尔类型;
  3. 该布尔值为true。

等价老式写法(无模式匹配,兼容低版本C#)

csharp 复制代码
if (values.Length >= 10)
{
    object val = values[9];
    if (val is bool)
    {
        bool d = (bool)val;
        if (d)
        {
            status = status | ShapeStatus.DrillConfigured;
        }
    }
}

简化优化写法

csharp 复制代码
if (values.Length >= 10 && values[9] is true)
{
    status |= ShapeStatus.DrillConfigured;
}

is true 直接同时完成类型校验+真值判断,省去中间变量。

相关推荐
北域码匠6 小时前
Karatsuba乘法超详细解析(原理+流程+性能分析+纯原生C#无第三方库完整实现)
算法·c#·大数乘法·高精度计算·数据结构与算法·分治算法·karatsuba 乘法
syker8 小时前
WinMaster v0.3.3 完整使用手册
c#
Risehuxyc10 小时前
C# 将doc转换为docx
开发语言·c#·xhtml
henreash13 小时前
Orleans10的非对称部署(部署更友好的方式)
c#
geovindu14 小时前
CSharp: Recursion Algorithm
开发语言·后端·算法·c#·递归算法
geats人山人海15 小时前
c# 第八章 多态与案例
开发语言·c#
F202269748616 小时前
西门子 PLC 与 C# 通信_项目实战
大数据·c#