531 扫描模式
扫描模式点位扫描定一个点 → 移过去停下 → 拍一张 X 光图查特定位置连续扫描不停车一直走 → 边走边连续拍 X 光图查整片区域点位扫描模式给芯片的某个固定位置拍特写你告诉设备「去 X50Y0 这个位置」设备精准移动过去停稳然后拍一张 X 光图像检测这个点有没有缺陷。关键特点有固定目标靠 TargetX、TargetY 定位移动后停止到点就不动了单次采图只拍一张图用途芯片特定位置复查、定点检测、精准缺陷排查连续扫描模式全域检测就像给芯片从头到尾扫一遍设备不停车以设定的速度一直匀速移动边走边不停拍 X 光图直到走完整个行程完成整片芯片的检测。关键特点无固定目标靠 ScanSpeed 控制移动速度持续移动全程不停车循环采图不停拍图用途芯片全域扫描、大面积缺陷筛查、批量检测半导体 X 光检测的真实用途点位扫描工程师发现芯片某个位置可能有缺陷输入坐标让设备精准定位到这个点拍高清 X 光图确认缺陷。连续扫描生产线上批量检测芯片让设备自动从头走到尾全程拍图快速筛查整片芯片的所有缺陷。1publicboolCanEditParamStatusSTATUS_READY||StatusSTATUS_STOP||StatusSTATUS_FAULT||StatusSTATUS_LIMIT;//表达式属性意思是直接返回后面的判断结果当设备状态 是 以下4种情况之一时1.已就绪STATUS_READY2.已停止STATUS_STOP3.故障STATUS_FAULT4.限位报警STATUS_LIMIT → CanEditParamtrue可以修改参数 其他所有状态运行中、点位到位、检测完成 → CanEditParamfalse禁止修改参数2这是一段**「广播监听」代码**专门监听扫描开始/停止的消息收到消息就打印日志提示用户→参数已锁定/已解锁。// 注册一个消息监听器打开收音机WeakReferenceMessenger.Default.RegisterValueChangedMessagestring(this,(sender,msg){// 收到消息X光扫描开始if(msg.ValueXrayScanStart){AddLog(参数已锁定不可修改);// 打印日志提示}// 收到消息X光扫描停止if(msg.ValueXrayScanStop){AddLog(参数已解锁);// 打印日志提示}});关键名词解释WeakReferenceMessengerMVVM工具包的全局广播器可以在代码的任何地方发消息也可以在任何地方收消息。Register注册监听 打开收音机等待接收指定的广播。ValueChangedMessagestring监听文本类型的消息这里是XrayScanStart/XrayScanStop。二、谁发的消息发信人在RunScan方法里扫描开始和结束时主动发消息// 扫描开始 → 发消息WeakReferenceMessenger.Default.Send(newValueChangedMessagestring(XrayScanStart));// 扫描结束 → 发消息finally{WeakReferenceMessenger.Default.Send(newValueChangedMessagestring(XrayScanStop));}三、这段代码只做一件事✅收到扫描开始 → 打印日志参数已锁定✅收到扫描结束 → 打印日志参数已解锁四、为什么注释掉CanEditParam true/falsepublicboolCanEditParam状态判断;这是只读属性不能赋值所以这两行被注释掉了只保留日志提示功能。真正的参数锁定/解锁是靠Status状态自动控制的这段代码只负责提示用户不负责控制五、通俗比喻RunScan 广播电台扫描开始时喊XrayScanStart扫描结束时喊XrayScanStop这段代码 收音机听到电台的声音就立刻播报参数已锁定不可修改/参数已解锁六、极简总结这是消息监听接收扫描的开始/停止通知唯一作用打印日志提示用户参数状态不控制参数锁定纯提示功能是MVVM模式中解耦代码的标准写法。3_scanAxisnewXYScanAxis();_halconWinFormsControlhalconControl??thrownewArgumentNullException(nameof(halconControl));TestImageCnewRelayCommand(TestShowImage);PointScanCnewRelayCommand(StartPointScan,CanStartScan);ContinueScanCnewRelayCommand(StartContinueScan,CanStartScan);//StartC new RelayCommand(Start, CanStart);StopCnewRelayCommand(NormalStop,CanStop);EmergencyStopCnewRelayCommand(EmergencyStop);ResetCnewRelayCommand(ResetAlarm,CanReset);SimulateXrayFaultCnewRelayCommand(SimulateXrayHardwareFault);Loading();StartAxisStatusRefresh();_scanAxis设备的 XY 轴电机控制器管移动、定位、扫描_scanAxis XY 运动轴控制器负责指挥设备的机械平台前后左右移动是点位扫描、连续扫描能运行的核心硬件逻辑层。二、通俗比喻_scanAxis 设备的司机 导航 安全员导航知道要去哪个坐标TargetX/Y司机负责开车移动点位 / 连续扫描安全员防止撞车、急停、报警保护三、极简总结管移动点位定位、连续行走管位置实时上报 X/Y 坐标管状态运行 / 到位 / 报警管安全急停、限位、复位4Application.Current.Dispatcher.Invoke((){_halconWinFormsControl.HalconWindow.ClearWindow();using(HImagerawImagenewHImage()){intgrayBase80ExposureTime/10;rawImage.GenImageConst(byte,800,500);using(HImagebrightImagerawImage.ScaleImage(1.0,grayBase-128)){using(HImagesmoothImagebrightImage.MeanImage(3,3)){using(HImageenhanceImagesmoothImage.ScaleImage(1.5,0.0)){_halconWinFormsControl.HalconWindow.DispObj(enhanceImage);_halconWinFormsControl.HalconWindow.SetColor(green);_halconWinFormsControl.HalconWindow.SetLineWidth(2);_halconWinFormsControl.HalconWindow.DispRectangle1(120.0,120,380,680);}}}}AddLog($X光图像采集成功|曝光:{ExposureTime}ms);在界面的Halcon窗口中清空画面 → 用曝光参数生成模拟X光图像 → 做滤波/增强处理 → 显示图像 → 画出绿色检测框 → 打印成功日志完全模拟真实X光探测器采图、图像处理的流程1. 跨线程操作UIApplication.Current.Dispatcher.Invoke((){全部代码});作用切回UI主线程更新界面原因扫描/图像处理在后台线程运行不能直接改界面必须用这句调用UI线程2. 清空图像窗口_halconWinFormsControl.HalconWindow.ClearWindow();清空上一次的X光图像/画面防止画面重叠、残留3. 创建基础X光图像模拟采集using(HImagerawImagenewHImage()){// 用曝光时间计算图像基础亮度intgrayBase80ExposureTime/10;// 创建 800x500 大小的空白灰度图模拟X光原始图像rawImage.GenImageConst(byte,800,500);using自动释放图像内存防止卡顿/内存泄漏grayBase曝光时间决定图像亮度曝光越高图越亮GenImageConst生成模拟的X光原始底片4. 三步图像处理工业X光标准流程第一步调整亮度绑定曝光参数using(HImagebrightImagerawImage.ScaleImage(1.0,grayBase-128))根据曝光时间把图像调到合适亮度你界面改ExposureTime这里实时生效第二步平滑去噪滤波using(HImagesmoothImagebrightImage.MeanImage(3,3))均值滤波去掉图像噪点模拟真实X光图像的平滑效果更清晰第三步对比度增强using(HImageenhanceImagesmoothImage.ScaleImage(1.5,0.0))增强图像对比度让芯片缺陷/细节更明显5. 显示最终图像 画检测框// 显示处理好的高清X光图像_halconWinFormsControl.HalconWindow.DispObj(enhanceImage);// 设置画笔绿色、2像素宽_halconWinFormsControl.HalconWindow.SetColor(green);_halconWinFormsControl.HalconWindow.SetLineWidth(2);// 画固定的检测矩形框X光检测的核心区域_halconWinFormsControl.HalconWindow.DispRectangle1(120.0,120,380,680);界面上你看到的绿色方框就是这行画的代表半导体芯片的检测区域6. 打印日志AddLog($X光图像采集成功|曝光:{ExposureTime}ms);日志框显示采图成功同步记录当前曝光参数Dispatcher.Invoke保证界面能正常刷新图像跨线程安全ExposureTime曝光时间直接控制X光图亮度3步图像处理去噪→调亮度→增强模拟真实X光成像绿色矩形芯片检测区域框全程using自动释放内存设备不卡顿