添加 MX-PD-盘古 项目文件

将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
This commit is contained in:
Shi.Ji
2026-05-18 11:43:09 +08:00
parent 03632a379d
commit e31d3560bb
739 changed files with 99783 additions and 0 deletions

View File

@@ -0,0 +1,108 @@
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;
//}
}
}

View File

@@ -0,0 +1,441 @@
using MwFramework.Controls.UIControl;
using MwFramework.ManagerService;
using Stylet;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MaxwellFramework.Core.Attributes;
using System.ComponentModel.Composition;
namespace MXJM.Parameter.Maintance
{
[Export(typeof(IParameter))]
public class HeightBaseSetting : ParameterBase
{
public HeightBaseItem HeightBaseItem { get; set; } = new HeightBaseItem();
public DiaHeightItem DiaHeightItem { get; set; } = new DiaHeightItem();
public CapHeightItem CapHeightItem { get; set; } = new CapHeightItem();
public override void Copy(IParameter source)
{
HeightBaseSetting setting = source as HeightBaseSetting;
if (setting != null)
{
ReflectionExtension.Copy<HeightBaseItem>(HeightBaseItem, setting.HeightBaseItem);
ReflectionExtension.Copy<DiaHeightItem>(DiaHeightItem, setting.DiaHeightItem);
ReflectionExtension.Copy<CapHeightItem>(CapHeightItem, setting.CapHeightItem);
}
}
}
public class HeightBaseItem : PropertyChangedBase, IParameterItem
{
private double _measureWaferHeightX11;
/// <summary>
/// 测量方片时X11坐标
/// </summary>
[WatchValue("测量方片时X11坐标")]
public double MeasureWaferHeightX11
{
get { return _measureWaferHeightX11; }
set { if (_measureWaferHeightX11 != value) { _measureWaferHeightX11 = value; OnPropertyChanged(nameof(MeasureWaferHeightX11)); } }
}
private double _measureWaferHeightY11;
/// <summary>
/// 测量方片时Y11坐标
/// </summary>
[WatchValue("测量方片时Y11坐标")]
public double MeasureWaferHeightY11
{
get { return _measureWaferHeightY11; }
set { if (_measureWaferHeightY11 != value) { _measureWaferHeightY11 = value; OnPropertyChanged(nameof(MeasureWaferHeightY11)); } }
}
//龙门2避让位
private double _avoidancePositionX21;
[WatchValue("龙门X21的避让位")]
public double AvoidancePositionX21
{
get { return _avoidancePositionX21; }
set { if (_avoidancePositionX21 != value) { _avoidancePositionX21 = value; OnPropertyChanged(nameof(AvoidancePositionX21)); } }
}
private double _avoidancePositionY21;
[WatchValue("龙门Y21的避让位")]
public double AvoidancePositionY21
{
get { return _avoidancePositionY21; }
set { if (_avoidancePositionY21 != value) { _avoidancePositionY21 = value; OnPropertyChanged(nameof(AvoidancePositionY21)); } }
}
private double _stageDatumHeight;
[WatchValue("载台基准高度")]
/// <summary>
/// 载台基准高度
/// </summary>
public double StageDatumHeight
{
get { return _stageDatumHeight; }
set { if (_stageDatumHeight != value) { _stageDatumHeight = value; OnPropertyChanged(nameof(StageDatumHeight)); } }
}
private double _needleTouchWaferZHeight;
[WatchValue("刺晶头接触到Wafer高度")]
/// <summary>
/// 刺晶头接触到Wafer高度
/// </summary>
public double NeedleTouchWaferZHeight
{
get { return _needleTouchWaferZHeight; }
set { if (_needleTouchWaferZHeight != value) { _needleTouchWaferZHeight = value; OnPropertyChanged(nameof(NeedleTouchWaferZHeight)); } }
}
private double _cZCalibrationHeight;
/// <summary>
/// CZ标定高度
/// </summary>
[WatchValue("CZ标定高度")]
public double CZCalibrationHeight
{
get { return _cZCalibrationHeight; }
set { if (_cZCalibrationHeight != value) { _cZCalibrationHeight = value; OnPropertyChanged(nameof(CZCalibrationHeight)); } }
}
private double _waferFilmThickness;
/// <summary>
/// 方片膜厚度
/// </summary>
[WatchValue("方片膜厚度")]
public double WaferFilmThickness
{
get { return _waferFilmThickness; }
set { if (_waferFilmThickness != value) { _waferFilmThickness = value; OnPropertyChanged(nameof(WaferFilmThickness)); } }
}
private double _dieThickness;
/// <summary>
/// 晶粒厚度
/// </summary>
[WatchValue("晶粒厚度")]
public double DieThickness
{
get { return _dieThickness; }
set { if (_dieThickness != value) { _dieThickness = value; OnPropertyChanged(nameof(DieThickness)); } }
}
private double _glassThickness = 0.5;
[WatchValue("Glass厚度")]
/// <summary>
/// //Glass厚度
/// </summary>
public double GlassThickness
{
get { return _glassThickness; }
set { if (_glassThickness != value) { _glassThickness = value; OnPropertyChanged(nameof(GlassThickness)); } }
}
private double _carrierThickness = 0.5;
[WatchValue("Carrier厚度")]
/// <summary>
/// Carrier厚度
/// </summary>
public double CarrierThickness
{
get { return _carrierThickness; }
set { if (_carrierThickness != value) { _carrierThickness = value; OnPropertyChanged(nameof(CarrierThickness)); } }
}
private double _fromDieToPadDistance;
/// <summary>
/// Gap2:Die到Pad的距离
/// </summary>
[WatchValue("Gap2:Die到Pad的距离")]
public double FromDieToPadDistance
{
get { return _fromDieToPadDistance; }
set { if (_fromDieToPadDistance != value) { _fromDieToPadDistance = value; OnPropertyChanged(nameof(FromDieToPadDistance)); } }
}
private double _gap1;
/// <summary>
/// Gap1
/// </summary>
[WatchValue("Gap1")]
public double Gap1
{
get { return _gap1; }
set { if (_gap1 != value) { _gap1 = value; OnPropertyChanged(nameof(Gap1)); } }
}
private double _glassZHeight;
/// <summary>
/// 测Glass时Z高度
/// </summary>
[WatchValue("测Glass时Z高度")]
public double GlassZHeight
{
get { return _glassZHeight; }
set { if (_glassZHeight != value) { _glassZHeight = value; OnPropertyChanged(nameof(GlassZHeight)); } }
}
private double _waferZHeight;
/// <summary>
/// 测Wafer时Z高度
/// </summary>
[WatchValue("测Wafer时Z高度")]
public double WaferZHeight
{
get { return _waferZHeight; }
set { if (_waferZHeight != value) { _waferZHeight = value; OnPropertyChanged(nameof(WaferZHeight)); } }
}
private ObservableCollection<TeachPoint> _glassHeightMeasureList = new ObservableCollection<TeachPoint>();
public ObservableCollection<TeachPoint> GlassHeightMeasureList
{
get { return _glassHeightMeasureList; }
set { if (_glassHeightMeasureList != value) { _glassHeightMeasureList = value; OnPropertyChanged(nameof(GlassHeightMeasureList)); } }
}
private ObservableCollection<TeachPoint> _waferHeightMeasureList = new ObservableCollection<TeachPoint>();
public ObservableCollection<TeachPoint> WaferHeightMeasureList
{
get { return _waferHeightMeasureList; }
set { if (_waferHeightMeasureList != value) { _waferHeightMeasureList = value; OnPropertyChanged(nameof(WaferHeightMeasureList)); } }
}
public IParameterItem Clone()
{
HeightBaseItem clone = new HeightBaseItem();
if (this.GlassHeightMeasureList != null && this.GlassHeightMeasureList.Count != 0)
{
foreach (var item in this.GlassHeightMeasureList)
{
clone.GlassHeightMeasureList.Add(item.Clone() as TeachPoint);
}
}
if (this.WaferHeightMeasureList != null && this.WaferHeightMeasureList.Count != 0)
{
foreach (var item in this.WaferHeightMeasureList)
{
clone.WaferHeightMeasureList.Add(item.Clone() as TeachPoint);
}
}
clone.NeedleTouchWaferZHeight = this.NeedleTouchWaferZHeight;
return clone;
}
}
public class DiaHeightItem : PropertyChangedBase, IParameterItem
{
public IParameterItem Clone()
{
return this.MemberwiseClone() as IParameterItem;
//DiaHeightItem clone = new DiaHeightItem();
//clone.CaliZHeightPositionX = this.CaliZHeightPositionX;
//clone.CaliZHeightPositionY = this.CaliZHeightPositionY;
//clone.CaliZHeightPositionZ = this.CaliZHeightPositionZ;
//clone.GlassZHeight = this.GlassZHeight;
//clone.WaferZHeight = this.WaferZHeight;
//return clone;
}
private double _needleTouchHeight;
/// <summary>
/// 标定时对刀高度
/// </summary>
[WatchValue("标定时对刀高度")]
public double NeedleTouchHeight
{
get { return _needleTouchHeight; }
set { if (_needleTouchHeight != value) { _needleTouchHeight = value; OnPropertyChanged(nameof(NeedleTouchHeight)); } }
}
private double _knifeOffset;
[WatchValue("对刀偏差值")]
/// <summary>
/// 对刀偏差值
/// </summary>
public double KnifeOffset
{
get { return _knifeOffset; }
set { if (_knifeOffset != value) { _knifeOffset = value; OnPropertyChanged(nameof(KnifeOffset)); } }
}
private double _laserToZ1Offset;
[WatchValue("激光与刺晶头偏差")]
/// <summary>
/// 激光与刺晶头偏差
/// </summary>
public double LaserToZ1Offset
{
get { return _laserToZ1Offset; }
set { if (_laserToZ1Offset != value) { _laserToZ1Offset = value; OnPropertyChanged(nameof(LaserToZ1Offset)); } }
}
private double _caliZHeightPositionX;
[WatchValue("激光打到对刀仪上X坐标")]
/// <summary>
/// 激光打到对刀仪上X坐标
/// </summary>
public double CaliZHeightPositionX
{
get { return _caliZHeightPositionX; }
set { if (_caliZHeightPositionX != value) { _caliZHeightPositionX = value; OnPropertyChanged(nameof(CaliZHeightPositionX)); } }
}
private double _caliZHeightPositionY;
[WatchValue("激光打到对刀仪上Y坐标")]
/// <summary>
/// 激光打到对刀仪上Y坐标
/// </summary>
public double CaliZHeightPositionY
{
get { return _caliZHeightPositionY; }
set { if (_caliZHeightPositionY != value) { _caliZHeightPositionY = value; OnPropertyChanged(nameof(CaliZHeightPositionY)); } }
}
public double CaliZHeight;
private double _caliZHeightPositionZ;
[WatchValue("激光打到对刀仪上Z坐标")]
/// <summary>
/// 激光打到对刀仪上Z坐标
/// </summary>
public double CaliZHeightPositionZ
{
get { return _caliZHeightPositionZ; }
set { if (_caliZHeightPositionZ != value) { _caliZHeightPositionZ = value; OnPropertyChanged(nameof(CaliZHeightPositionZ)); } }
}
private double _caliZHeightLaserReading;
[WatchValue("激光打到对刀仪上时激光读数")]
/// <summary>
/// 激光打到对刀仪上时激光读数
/// </summary>
public double CaliZHeightLaserReading
{
get { return _caliZHeightLaserReading; }
set { if (_caliZHeightLaserReading != value) { _caliZHeightLaserReading = value; OnPropertyChanged(nameof(CaliZHeightLaserReading)); } }
}
}
public class CapHeightItem : PropertyChangedBase, IParameterItem
{
public IParameterItem Clone()
{
return this.MemberwiseClone() as IParameterItem;
}
private double _capInitialValue;
/// <summary>
/// 电容初始值
/// </summary>
[WatchValue("电容初始值")]
public double CapInitialValue
{
get { return _capInitialValue; }
set { if (_capInitialValue != value) { _capInitialValue = value; OnPropertyChanged(nameof(CapInitialValue)); } }
}
}
public class TeachPoint : PropertyChangedBase, IParameterItem
{
private int _id = 1;
public int Id
{
get { return _id; }
set { if (_id != value) { _id = value; OnPropertyChanged(nameof(Id)); } }
}
private double _x = 0.0;
public double X
{
get { return _x; }
set { if (_x != value) { _x = value; OnPropertyChanged(nameof(X)); } }
}
private double _y = 0.0;
public double Y
{
get { return _y; }
set { if (_y != value) { _y = value; OnPropertyChanged(nameof(Y)); } }
}
private double _z = 5.0;
public double Z
{
get { return _z; }
set { if (_z != value) { _z = value; OnPropertyChanged(nameof(Z)); } }
}
private double _laserZ = 0.0;
public double LaserZ
{
get { return _laserZ; }
set { if (_laserZ != value) { _laserZ = value; OnPropertyChanged(nameof(LaserZ)); } }
}
private double _height = 0.0;
public double Height
{
get { return _height; }
set { if (_height != value) { _height = value; OnPropertyChanged(nameof(Height)); } }
}
private double _laserAndZHeightSum = 0.0;
public double LaserAndZHeightSum
{
get { return _laserAndZHeightSum; }
set { if (_laserAndZHeightSum != value) { _laserAndZHeightSum = value; OnPropertyChanged(nameof(LaserAndZHeightSum)); } }
}
private int _row = 1;
public int Row
{
get { return _row; }
set { SetAndNotify(ref _row, value); }
}
private int _column = 1;
public int Column
{
get { return _column; }
set { SetAndNotify(ref _column, value); }
}
private int _regionIndex;
public int RegionIndex
{
get { return _regionIndex; }
set { SetAndNotify(ref _regionIndex, value); }
}
public TeachPoint(double x, double y)
{
_x = x;
_y = y;
}
public TeachPoint()
{
}
IParameterItem IParameterItem.Clone()
{
return this.MemberwiseClone() as IParameterItem;
}
}
}

View File

@@ -0,0 +1,29 @@
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 interface IHeightMeasure
{
HeightBaseItem HeightBaseItem { get; set; }
CapHeightItem CapHeightItem { get; set; }
DiaHeightItem DiaHeightItem { get; set; }
double GetDistance();
void CalculateHeight();
double GetGap2(double dieThickness, double waferFilmThickness);
//double GetZStageTheoryWorkHeight(double glassThickness, double carrierThickness, WaferRecipeContentItem currentWaferRecipe = null);
//double GetZ1WorkHeight(BondingCraftRecipeContentItem currentWaferRecipe = null);
}
}