using MwFramework.Controls.UIControl; using MwFramework.ManagerService; using Stylet; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel.Composition; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MainShell.DeviceMaintance.Model { [Export(typeof(IParameter))] public class NeedleCalibrationSetting : ParameterBase { public NeedleZCalibrationItem NeedleZCalibrationItem { get; set; } = new NeedleZCalibrationItem(); public NeedleXYCalibrationItem NeedleXYCalibrationItem { get; set; } = new NeedleXYCalibrationItem(); public NeedleXYCalibrationItemNew NeedleXYCalibrationItemNew { get; set; } = new NeedleXYCalibrationItemNew(); public override void Copy(IParameter source) { NeedleCalibrationSetting setting = source as NeedleCalibrationSetting; if (setting != null) { ReflectionExtension.Copy(NeedleZCalibrationItem, setting.NeedleZCalibrationItem); ReflectionExtension.Copy(NeedleXYCalibrationItem, setting.NeedleXYCalibrationItem); ReflectionExtension.Copy(NeedleXYCalibrationItemNew, setting.NeedleXYCalibrationItemNew); } } } public class NeedleZCalibrationItem : PropertyChangedBase, IParameterItem { private double _supportPinPositionX; [WatchValue("针尖对准对刀仪X1位置")] public double SupportPinPositionX { get { return _supportPinPositionX; } set { if (_supportPinPositionX != value) { _supportPinPositionX = value; OnPropertyChanged(nameof(SupportPinPositionX)); } } } private double _supportPinPositionY; [WatchValue("针尖对准对刀仪Y1位置")] public double SupportPinPositionY { get { return _supportPinPositionY; } set { if (_supportPinPositionY != value) { _supportPinPositionY = value; OnPropertyChanged(nameof(SupportPinPositionY)); } } } private double _knifeOffset; [WatchValue("对刀仪偏差")] /// /// 对刀仪偏差 /// public double KnifeOffset { get { return _knifeOffset; } set { if (_knifeOffset != value) { _knifeOffset = value; OnPropertyChanged(nameof(KnifeOffset)); } } } private double _cZHeight = -0.725; [WatchValue("SZ高度")] public double CZHeight { get { return _cZHeight; } set { if (_cZHeight != value) { _cZHeight = value; OnPropertyChanged(nameof(CZHeight)); } } } private double _stageHeight; [WatchValue("载台高度")] public double StageHeight { get { return _stageHeight; } set { if (_stageHeight != value) { _stageHeight = value; OnPropertyChanged(nameof(StageHeight)); } } } private double _gantry2AvoidPositionX = 10; [WatchValue("对刀时龙门X2的避让位置")] public double Gantry2AvoidPositionX { get { return _gantry2AvoidPositionX; } set { if (_gantry2AvoidPositionX != value) { _gantry2AvoidPositionX = value; OnPropertyChanged(nameof(Gantry2AvoidPositionX)); } } } private double _gantry2AvoidPositionY = 200; [WatchValue("对刀时龙门Y2的避让位置")] public double Gantry2AvoidPositionY { get { return _gantry2AvoidPositionY; } set { if (_gantry2AvoidPositionY != value) { _gantry2AvoidPositionY = value; OnPropertyChanged(nameof(Gantry2AvoidPositionY)); } } } private double _z1StartPosition; [WatchValue("Z1开始位置")] public double Z1StartPosition { get { return _z1StartPosition; } set { if (_z1StartPosition != value) { _z1StartPosition = value; OnPropertyChanged(nameof(Z1StartPosition)); } } } private double _z1Speed; [WatchValue("Z1速度")] public double Z1Speed { get { return _z1Speed; } set { if (_z1Speed != value) { _z1Speed = value; OnPropertyChanged(nameof(Z1Speed)); } } } private double _z1DropMaxPosition; [WatchValue("Z1下降距离")] public double Z1DropMaxPosition { get { return _z1DropMaxPosition; } set { if (_z1DropMaxPosition != value) { _z1DropMaxPosition = value; OnPropertyChanged(nameof(Z1DropMaxPosition)); } } } private int _needleTouchCount = 1; [WatchValue("对刀次数")] public int NeedleTouchCount { get { return _needleTouchCount; } set { if (_needleTouchCount != value) { _needleTouchCount = value; OnPropertyChanged(nameof(NeedleTouchCount)); } } } private double _needleTouchHeight = 14; /// /// Z1接触对刀仪高度 /// [WatchValue("Z1接触对刀仪高度")] public double NeedleTouchHeight { get { return _needleTouchHeight; } set { if (_needleTouchHeight != value) { _needleTouchHeight = value; OnPropertyChanged(nameof(NeedleTouchHeight)); } } } private double _needleTouchHeightBase; /// /// 基准值 /// [WatchValue("基准值")] public double NeedleTouchHeightBase { get { return _needleTouchHeightBase; } set { if (_needleTouchHeightBase != value) { _needleTouchHeightBase = value; OnPropertyChanged(nameof(NeedleTouchHeightBase)); } } } private double _currentNeedleTouchHeight; [WatchValue("当前使用对刀高度")] /// /// 当前使用对刀高度 /// public double CurrentNeedleTouchHeight { get { return _currentNeedleTouchHeight; } set { if (_currentNeedleTouchHeight != value) { _currentNeedleTouchHeight = value; OnPropertyChanged(nameof(CurrentNeedleTouchHeight)); } } } private double _needleTouchOffset; [WatchValue("对刀与基准偏差")] /// /// 对刀与基准偏差 /// public double NeedleTouchOffset { get { return _needleTouchOffset; } set { if (_needleTouchOffset != value) { _needleTouchOffset = value; OnPropertyChanged(nameof(NeedleTouchOffset)); } } } private double _needleTouchHeightAve; [WatchValue("Z1对刀平均高度")] /// /// Z1对刀平均高度 /// public double NeedleTouchHeightAve { get { return _needleTouchHeightAve; } set { if (_needleTouchHeightAve != value) { _needleTouchHeightAve = value; OnPropertyChanged(nameof(NeedleTouchHeightAve)); } } } private ObservableCollection _needleTouchRecords = new ObservableCollection(); public ObservableCollection NeedleTouchRecords { get { return _needleTouchRecords; } set { _needleTouchRecords = value; OnPropertyChanged(nameof(NeedleTouchRecords)); } } private double _laserToNeedleOffset = 0; public double LaserToNeedleOffset { get { return _laserToNeedleOffset; } set { if (_laserToNeedleOffset != value) { _laserToNeedleOffset = value; OnPropertyChanged(nameof(LaserToNeedleOffset)); } } } private double _needleCameraHeightOffset; public double NeedleCameraHeightOffset { get { return _needleCameraHeightOffset; } set { if (_needleCameraHeightOffset != value) { _needleCameraHeightOffset = value; OnPropertyChanged(nameof(NeedleCameraHeightOffset)); } } } public IParameterItem Clone() { NeedleZCalibrationItem clone = new NeedleZCalibrationItem(); clone.CurrentNeedleTouchHeight = _needleCameraHeightOffset; clone.CZHeight = CZHeight; clone.Gantry2AvoidPositionX = Gantry2AvoidPositionX; clone.Gantry2AvoidPositionY = Gantry2AvoidPositionY; clone.LaserToNeedleOffset = LaserToNeedleOffset; clone.NeedleCameraHeightOffset = NeedleCameraHeightOffset; clone.NeedleTouchCount = NeedleTouchCount; clone.NeedleTouchHeight = NeedleTouchHeight; clone.NeedleTouchHeightAve = NeedleTouchHeightAve; clone.NeedleTouchHeightBase = NeedleTouchHeightBase; clone.NeedleTouchOffset = NeedleTouchOffset; clone.StageHeight = StageHeight; clone.SupportPinPositionX = SupportPinPositionX; clone.SupportPinPositionY = SupportPinPositionY; clone.Z1DropMaxPosition = Z1DropMaxPosition; clone.Z1Speed = Z1Speed; clone.Z1StartPosition = Z1StartPosition; if (this.NeedleTouchRecords != null) { foreach (var item in this.NeedleTouchRecords) { clone.NeedleTouchRecords.Add(item.Clone() as NeedleTouchRecord); } } return clone; } } public class NeedleXYCalibrationItem : PropertyChangedBase, IParameterItem { private double _needleX; [WatchValue("设置—刺晶头X")] public double NeedleX { get { return _needleX; } set { if (_needleX != value) { _needleX = value; OnPropertyChanged(nameof(NeedleX)); } } } private double _needleY; [WatchValue("设置—刺晶头Y")] public double NeedleY { get { return _needleY; } set { if (_needleY != value) { _needleY = value; OnPropertyChanged(nameof(NeedleY)); } } } private double _cameraX; [WatchValue("设置—相机X")] public double CameraX { get { return _cameraX; } set { if (_cameraX != value) { _cameraX = value; OnPropertyChanged(nameof(CameraX)); } } } private double _cameraY; [WatchValue("设置—相机Y")] public double CameraY { get { return _cameraY; } set { if (_cameraY != value) { _cameraY = value; OnPropertyChanged(nameof(CameraY)); } } } private double _needleZ1 = 0.0; [WatchValue("设置—刺晶头Z1")] public double NeedleZ1 { get { return _needleZ1; } set { if (_needleZ1 != value) { _needleZ1 = value; OnPropertyChanged(nameof(NeedleZ1)); } } } private double _offsetX; [WatchValue("X方向偏差")] public double OffsetX { get { return _offsetX; } set { if (_offsetX != value) { _offsetX = value; OnPropertyChanged(nameof(OffsetX)); } } } private double _offsetY; [WatchValue("Y方向偏差")] public double OffsetY { get { return _offsetY; } set { if (_offsetY != value) { _offsetY = value; OnPropertyChanged(nameof(OffsetY)); } } } private double _initialOffsetX; /// /// 针和相机之间的X初始偏差,不加补偿 /// [WatchValue("X方向初始偏差")] public double InitialOffsetX { get { return _initialOffsetX; } set { if (_initialOffsetX != value) { _initialOffsetX = value; OnPropertyChanged(nameof(InitialOffsetX)); } } } private double _initialOffsetY; /// /// 针和相机之间的Y初始偏差,不加补偿 /// [WatchValue("Y方向初始偏差")] public double InitialOffsetY { get { return _initialOffsetY; } set { if (_initialOffsetY != value) { _initialOffsetY = value; OnPropertyChanged(nameof(InitialOffsetY)); } } } private double _compensateX; /// /// 针和相机之间的X方向偏差补偿 /// [WatchValue("X方向补偿")] public double CompensateX { get { return _compensateX; } set { if (_compensateX != value) { _compensateX = value; OnPropertyChanged(nameof(CompensateX)); } } } private double _compensateY; /// /// 针和相机之间的Y方向偏差补偿 /// [WatchValue("Y方向补偿")] public double CompensateY { get { return _compensateY; } set { if (_compensateY != value) { _compensateY = value; OnPropertyChanged(nameof(CompensateY)); } } } private double _offsetXMax; [WatchValue("偏差限制—X偏差最大值")] public double OffsetXMax { get { return _offsetXMax; } set { if (_offsetXMax != value) { _offsetXMax = value; OnPropertyChanged(nameof(OffsetXMax)); } } } private double _offsetXMin; [WatchValue("偏差限制—X偏差最小值")] public double OffsetXMin { get { return _offsetXMin; } set { if (_offsetXMin != value) { _offsetXMin = value; OnPropertyChanged(nameof(OffsetXMin)); } } } private double _offsetYMax; [WatchValue("偏差限制—Y偏差最大值")] public double OffsetYMax { get { return _offsetYMax; } set { if (_offsetYMax != value) { _offsetYMax = value; OnPropertyChanged(nameof(OffsetYMax)); } } } private double _offsetYMin; [WatchValue("偏差限制—Y偏差最小值")] public double OffsetYMin { get { return _offsetYMin; } set { if (_offsetYMin != value) { _offsetYMin = value; OnPropertyChanged(nameof(OffsetYMin)); } } } /// /// 扎铜箔时龙门X2避让位置 /// private double _x2AvoidPosition; [WatchValue("扎铜箔时龙门X2避让位置")] public double X2AvoidPosition { get { return _x2AvoidPosition; } set { if (_x2AvoidPosition != value) { _x2AvoidPosition = value; OnPropertyChanged(nameof(X2AvoidPosition)); } } } /// /// 扎铜箔时龙门Y2避让位置 /// private double _y2AvoidPosition; [WatchValue("扎铜箔时龙门Y2避让位置")] public double Y2AvoidPosition { get { return _y2AvoidPosition; } set { if (_y2AvoidPosition != value) { _y2AvoidPosition = value; OnPropertyChanged(nameof(Y2AvoidPosition)); } } } /// /// 扎铜箔时Stage的位置 /// private double _stagePosition; [WatchValue("扎铜箔时Stage的位置")] public double StagePosition { get { return _stagePosition; } set { if (_stagePosition != value) { _stagePosition = value; OnPropertyChanged(nameof(StagePosition)); } } } public IParameterItem Clone() { NeedleXYCalibrationItem clone = new NeedleXYCalibrationItem(); clone.NeedleX = this.NeedleX; clone.NeedleY = this.NeedleY; clone.CameraX = this.CameraY; clone.CameraY = this.CameraY; clone.OffsetX = this.OffsetX; clone.OffsetY = this.OffsetY; clone.OffsetXMax = this.OffsetXMax; clone.OffsetXMin = this.OffsetXMin; clone.OffsetYMax = this.OffsetYMax; clone.OffsetYMin = this.OffsetYMin; return this.MemberwiseClone() as IParameterItem; } } public class NeedleXYCalibrationItemNew : PropertyChangedBase, IParameterItem { //private VisionParData _needleVisionParData; //public VisionParData NeedleVisionParData //{ // get { return _needleVisionParData ?? new VisionParData() { Exposure = 2000 }; } // set { SetAndNotify(ref _needleVisionParData, value); } //} private double _x1Calib; /// /// 相机标定位X1 /// [WatchValue("相机标定位X1")] public double X1Calib { get { return _x1Calib; } set { if (_x1Calib != value) { _x1Calib = value; OnPropertyChanged(nameof(X1Calib)); } } } private double _x1MechanicalOffset = 0.0; /// /// 机械X1Offset /// [WatchValue("机械X1Offset")] public double X1MechanicalOffset { get { return _x1MechanicalOffset; } set { if (_x1MechanicalOffset != value) { _x1MechanicalOffset = value; OnPropertyChanged(nameof(X1MechanicalOffset)); } } } private double _wSCalibX2; /// /// 方片标定位X2 /// [WatchValue("方片标定位X2")] public double WSCalibX2 { get { return _wSCalibX2; } set { if (_wSCalibX2 != value) { _wSCalibX2 = value; OnPropertyChanged(nameof(WSCalibX2)); } } } private double _wSCalibY2; /// /// 方片标定位Y2 /// [WatchValue("方片标定位Y2")] public double WSCalibY2 { get { return _wSCalibY2; } set { if (_wSCalibY2 != value) { _wSCalibY2 = value; OnPropertyChanged(nameof(WSCalibY2)); } } } private double _needleX1; [WatchValue("刺晶头X1")] public double NeedleX1 { get { return _needleX1; } set { if (_needleX1 != value) { _needleX1 = value; OnPropertyChanged(nameof(NeedleX1)); } } } private double _needleZ1 = 0.0; [WatchValue("刺晶头Z1")] public double NeedleZ1 { get { return _needleZ1; } set { if (_needleZ1 != value) { _needleZ1 = value; OnPropertyChanged(nameof(NeedleZ1)); } } } private int _z1WorkTime = 0; /// /// Z1保持下扎时长 /// [WatchValue("Z1保持下扎时长")] public int Z1WorkTime { get { return _z1WorkTime; } set { if (_z1WorkTime != value) { _z1WorkTime = value; OnPropertyChanged(nameof(Z1WorkTime)); } } } private double _offsetX; /// /// 针和相机之间的X初始偏差,不加补偿 /// [WatchValue("X方向偏差")] public double OffsetX { get { return _offsetX; } set { if (_offsetX != value) { _offsetX = value; OnPropertyChanged(nameof(OffsetX)); } } } private double _offsetY; /// /// 针和相机之间的Y初始偏差,不加补偿 /// [WatchValue("Y方向偏差")] public double OffsetY { get { return _offsetY; } set { if (_offsetY != value) { _offsetY = value; OnPropertyChanged(nameof(OffsetY)); } } } private double _compensateX; /// /// 针和相机之间的X方向偏差补偿 /// [WatchValue("X方向补偿")] public double CompensateX { get { return _compensateX; } set { if (_compensateX != value) { _compensateX = value; OnPropertyChanged(nameof(CompensateX)); } } } private double _compensateY; /// /// 针和相机之间的Y方向偏差补偿 /// [WatchValue("Y方向补偿")] public double CompensateY { get { return _compensateY; } set { if (_compensateY != value) { _compensateY = value; OnPropertyChanged(nameof(CompensateY)); } } } private double _offsetXMax; [WatchValue("偏差限制—X偏差最大值")] public double OffsetXMax { get { return _offsetXMax; } set { if (_offsetXMax != value) { _offsetXMax = value; OnPropertyChanged(nameof(OffsetXMax)); } } } private double _offsetXMin; [WatchValue("偏差限制—X偏差最小值")] public double OffsetXMin { get { return _offsetXMin; } set { if (_offsetXMin != value) { _offsetXMin = value; OnPropertyChanged(nameof(OffsetXMin)); } } } private double _offsetYMax; [WatchValue("偏差限制—Y偏差最大值")] public double OffsetYMax { get { return _offsetYMax; } set { if (_offsetYMax != value) { _offsetYMax = value; OnPropertyChanged(nameof(OffsetYMax)); } } } private double _offsetYMin; [WatchValue("偏差限制—Y偏差最小值")] public double OffsetYMin { get { return _offsetYMin; } set { if (_offsetYMin != value) { _offsetYMin = value; OnPropertyChanged(nameof(OffsetYMin)); } } } private double _wSApproachX2; /// /// 方片逼近位X2 /// [WatchValue("方片逼近位X2")] public double WSApproachX2 { get { return _wSApproachX2; } set { if (_wSApproachX2 != value) { _wSApproachX2 = value; OnPropertyChanged(nameof(WSApproachX2)); } } } private double _wSApproachY2; /// /// 方片逼近位Y2 /// [WatchValue("方片逼近位Y2")] public double WSApproachY2 { get { return _wSApproachY2; } set { if (_wSApproachY2 != value) { _wSApproachY2 = value; OnPropertyChanged(nameof(WSApproachY2)); } } } private double _stampThreRadius; /// /// 针印理论半径 /// [WatchValue("针印理论半径")] public double StampThreRadius { get { return _stampThreRadius; } set { if (_stampThreRadius != value) { _stampThreRadius = value; OnPropertyChanged(nameof(StampThreRadius)); } } } private double _stampThreErrorRange; /// /// 针印误差范围 /// [WatchValue("针印误差范围")] public double StampThreErrorRange { get { return _stampThreErrorRange; } set { if (_stampThreErrorRange != value) { _stampThreErrorRange = value; OnPropertyChanged(nameof(StampThreErrorRange)); } } } private double _stampMinCircularity; /// /// 针印最小圆度 /// [WatchValue("针印最小圆度")] public double StampMinCircularity { get { return _stampMinCircularity; } set { if (_stampMinCircularity != value) { _stampMinCircularity = value; OnPropertyChanged(nameof(StampMinCircularity)); } } } private double _stampPolarity; /// /// 针印颜色,0黑1白 /// [WatchValue("针印理论半径")] public double StampPolarity { get { return _stampPolarity; } set { if (_stampPolarity != value) { _stampPolarity = value; OnPropertyChanged(nameof(StampPolarity)); } } } private bool _isBlack = false; public bool IsBlack { get { return _isBlack; } set { _isBlack = value; StampPolarityUpdate(); OnPropertyChanged(nameof(IsBlack)); } } public void StampPolarityUpdate() { if (IsBlack) { StampPolarity = 0; } else { StampPolarity = 1; } } public IParameterItem Clone() { NeedleXYCalibrationItemNew clone = new NeedleXYCalibrationItemNew(); clone.NeedleX1 = this.NeedleX1; clone.NeedleZ1 = this.NeedleZ1; clone.WSApproachX2 = this.WSApproachX2; clone.WSApproachY2 = this.WSApproachY2; clone.Z1WorkTime = Z1WorkTime; clone.X1MechanicalOffset = X1MechanicalOffset; clone.X1Calib = X1Calib; clone.WSCalibX2 = WSCalibX2; clone.WSCalibY2 = WSCalibY2; clone.CompensateX = CompensateX; clone.CompensateY = CompensateY; clone.OffsetX = this.OffsetX; clone.OffsetY = this.OffsetY; clone.OffsetXMax = this.OffsetXMax; clone.OffsetXMin = this.OffsetXMin; clone.OffsetYMax = this.OffsetYMax; clone.OffsetYMin = this.OffsetYMin; clone.IsBlack = this.IsBlack; clone.StampMinCircularity = this.StampMinCircularity; clone.StampPolarity = this.StampPolarity; clone.StampThreErrorRange = this.StampThreErrorRange; clone.StampThreRadius = this.StampThreRadius; //clone.NeedleVisionParData.Exposure = this.NeedleVisionParData.Exposure; //clone.NeedleVisionParData.Gain = this.NeedleVisionParData.Gain; //clone.NeedleVisionParData.LightSourceBack = this.NeedleVisionParData.LightSourceBack; //clone.NeedleVisionParData.LightSourcePointBlue = this.NeedleVisionParData.LightSourcePointBlue; //clone.NeedleVisionParData.LightSourcePointRed = this.NeedleVisionParData.LightSourcePointRed; //clone.NeedleVisionParData.LightSourceRingBlue = this.NeedleVisionParData.LightSourceRingBlue; //clone.NeedleVisionParData.LightSourceRingRed = this.NeedleVisionParData.LightSourceRingRed; //clone.NeedleVisionParData.Z2 = this.NeedleVisionParData.Z2; return this.MemberwiseClone() as IParameterItem; } } public class NeedleTouchRecord : PropertyChangedBase, IParameterItem { private int _CurrentCount; /// /// 当前次数 /// public int CurrentCount { get { return _CurrentCount; } set { SetAndNotify(ref _CurrentCount, value); } } private double _Height; /// /// 高度 /// public double Height { get { return _Height; } set { SetAndNotify(ref _Height, value); } } public NeedleTouchRecord() { } public NeedleTouchRecord(int count, double height) { CurrentCount = count; Height = height; } public IParameterItem Clone() { return this.MemberwiseClone() as IParameterItem; } } }