Files
test_demo/MX-PD-盘古 - new/PanGu.DieBonderApp/MainShell/PageCalib/HeightMeasure/Model/DiastimeterHeightMeasure.cs
Shi.Ji e31d3560bb 添加 MX-PD-盘古 项目文件
将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
2026-05-18 11:43:09 +08:00

109 lines
4.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using MainShell.Common.Extension;
using MainShell.DeviceMaintance.Model;
using MainShell.Hardware;
using MainShell.Parameter;
using MainShell.Recipe.Models;
using MaxwellFramework.Core.Interfaces;
using MwFramework.Device;
using MwFramework.ManagerService;
using MXJM.Parameter.Maintance;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MainShell.HeightMeasure.Model
{
public class DiastimeterHeightMeasure : IHeightMeasure
{
public HeightBaseItem HeightBaseItem { get; set; }
public DiaHeightItem DiaHeightItem { get; set; }
public CapHeightItem CapHeightItem { get; set; }
private HardwareManager _hardwareManager;
private readonly IDiastimeter _diastimeter;
private readonly IParamList _paramlist;
public DiastimeterHeightMeasure(GlobalParameterContext globalParam, HardwareManager hardwareManager, IParameterManager paramList)
{
_hardwareManager = hardwareManager;
_diastimeter = _hardwareManager.Diastimeter;
_paramlist = paramList as IParamList;
DiaHeightItem = globalParam.HeightBaseSetting.DiaHeightItem;
HeightBaseItem = globalParam.HeightBaseSetting.HeightBaseItem;
}
public double GetDistance()
{
_hardwareManager.Diastimeter.GetLastSamples(out double Distance);
if (double.IsNaN(Distance))
{
throw new Exception("测距仪反馈数据为NAN请检查测距仪状态");
}
return Distance;
}
public void CalculateHeight()
{
double glassHeightAverage = HeightBaseItem.GlassHeightMeasureList.Average(m => m.Height);
double glassZAverage = HeightBaseItem.GlassHeightMeasureList.Average(m => m.Z);
double waferHeightAverage = HeightBaseItem.WaferHeightMeasureList.Average(m => m.Height);
double waferZAverage = HeightBaseItem.WaferHeightMeasureList.Average(m => m.Z);
HeightBaseItem.GlassZHeight = glassZAverage + glassHeightAverage;
HeightBaseItem.WaferZHeight = waferZAverage + waferHeightAverage;
if (_paramlist == null)
{
throw new InvalidOperationException("IParamList 未初始化,无法计算测高标定参数。");
}
var needleZCalibrationItem = _paramlist.GetParameter<NeedleCalibrationSetting>().NeedleZCalibrationItem;
DiaHeightItem.NeedleTouchHeight = needleZCalibrationItem.NeedleTouchHeight;
DiaHeightItem.KnifeOffset = needleZCalibrationItem.KnifeOffset;
//Gap2
HeightBaseItem.FromDieToPadDistance = GetGap2(HeightBaseItem.DieThickness, HeightBaseItem.WaferFilmThickness);
//激光与刺晶头偏差
DiaHeightItem.LaserToZ1Offset = DiaHeightItem.NeedleTouchHeight -
(DiaHeightItem.CaliZHeightLaserReading + DiaHeightItem.CaliZHeightPositionZ) + DiaHeightItem.KnifeOffset;
//刺晶头接触到方片高度
HeightBaseItem.NeedleTouchWaferZHeight = HeightBaseItem.WaferZHeight + DiaHeightItem.LaserToZ1Offset;
}
public double GetGap2(double dieThickness, double waferFilmThickness)
{
double height = 0.0;
height = HeightBaseItem.WaferZHeight - HeightBaseItem.GlassZHeight
- dieThickness - waferFilmThickness;
return Math.Abs(height);
}
//public double GetZStageTheoryWorkHeight(double glassThickness, double carrierThickness, WaferRecipeContentItem currentWaferRecipe = null)
//{
// double calibWaferToStageDis = HeightBaseItem.WaferFilmThickness + HeightBaseItem.DieThickness +
// HeightBaseItem.FromDieToPadDistance + HeightBaseItem.GlassThickness + HeightBaseItem.CarrierThickness;
// double actualWaferToStageDis = currentWaferRecipe.WaferFilmThickness + currentWaferRecipe.DieThickness +
// currentWaferRecipe.FromDieToPadDistance + glassThickness + carrierThickness;
// double height = HeightBaseItem.StageDatumHeight + calibWaferToStageDis - actualWaferToStageDis;
// return height;
//}
//public double GetZ1WorkHeight(BondingCraftRecipeContentItem currentWaferRecipe = null)
//{
// double height = 0.0;
// //2.针尖的工作高度
// height = HeightBaseItem.NeedleTouchWaferZHeight + currentWaferRecipe.Gap1;
// return height;
//}
}
}