109 lines
4.5 KiB
C#
109 lines
4.5 KiB
C#
|
|
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;
|
|||
|
|
//}
|
|||
|
|
}
|
|||
|
|
}
|