350 lines
11 KiB
C#
350 lines
11 KiB
C#
using MainShell.AlgorithmCalib.Model;
|
||
using MainShell.AlgorithmCalib.Service;
|
||
using MainShell.Common;
|
||
using MainShell.Common.Display.ViewModel;
|
||
using MainShell.Filewritable;
|
||
using MainShell.Hardware;
|
||
using Maxwell.SemiFramework.WaferCalibration.ViewModel;
|
||
using MaxwellFramework.Core.Interfaces;
|
||
using MwFramework.Controls.SystemCalib;
|
||
using MwFramework.Controls.UIControl;
|
||
using MwFramework.ManagerService;
|
||
using Stylet;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using System.Windows;
|
||
using CameraAxisViewModel = MainShell.Common.Display.ViewModel.CameraAxisViewModel;
|
||
|
||
namespace MainShell.AlgorithmCalib.ViewModel
|
||
{
|
||
public class CameraFusionPadCalibViewModel:Screen,IPage
|
||
{
|
||
private bool _stopMotion = false;
|
||
public string Name { get; set; } = "CameraFusionPadCalib";
|
||
|
||
public string CameraName { get; set; }
|
||
|
||
private readonly FusionCalibMotionService _fusionCalibMotionService;
|
||
|
||
private HardwareManager _hardware;
|
||
private string _fileSaveDir = Paths.CalibSettingPath;
|
||
public string FileSaveDir
|
||
{
|
||
get { return _fileSaveDir; }
|
||
set { SetAndNotify(ref _fileSaveDir, value); }
|
||
}
|
||
private CameraAxisViewModel _cameraAxisViewModelSevice;
|
||
public CameraAxisViewModel CameraAxisViewModelSevice
|
||
{
|
||
get { return _cameraAxisViewModelSevice; }
|
||
set
|
||
{
|
||
_cameraAxisViewModelSevice = value;
|
||
OnPropertyChanged(nameof(CameraAxisViewModelSevice));
|
||
}
|
||
}
|
||
|
||
private FusionCalibParItem _fusionCalibParItem = new FusionCalibParItem();
|
||
public FusionCalibParItem FusionCalibParItem
|
||
{
|
||
get { return _fusionCalibParItem; }
|
||
set
|
||
{
|
||
_fusionCalibParItem = value;
|
||
OnPropertyChanged(nameof(FusionCalibParItem));
|
||
}
|
||
}
|
||
|
||
private FusionCalibParItem _inputParam;
|
||
public FusionCalibParItem InputParam
|
||
{
|
||
get { return _inputParam; }
|
||
set { SetAndNotify(ref _inputParam, value); }
|
||
}
|
||
|
||
private FusionCalibParItem _resultParam;
|
||
public FusionCalibParItem ResultParam
|
||
{
|
||
get { return _resultParam; }
|
||
set { SetAndNotify(ref _resultParam, value); }
|
||
}
|
||
|
||
//private CameraFusionPadCalibViewModel _service;
|
||
//public CameraFusionPadCalibViewModel Service
|
||
//{
|
||
// get { return _service; }
|
||
// set
|
||
// {
|
||
// _service = value;
|
||
// NotifyOfPropertyChange();
|
||
// }
|
||
//}
|
||
|
||
private bool _isInitialized=false;
|
||
|
||
public CameraFusionPadCalibViewModel()
|
||
{
|
||
|
||
}
|
||
|
||
public CameraFusionPadCalibViewModel(HardwareManager hardware, FusionCalibMotionService fusionCalibMotionService)
|
||
{
|
||
_hardware = hardware;
|
||
_fusionCalibMotionService = fusionCalibMotionService ?? throw new ArgumentNullException(nameof(fusionCalibMotionService));
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 弹窗专用工厂方法(新增):传入标定参数
|
||
/// </summary>
|
||
public static CameraFusionPadCalibViewModel Create(
|
||
string cameraName, string fileSaveName, List<HardwareDevice> device, FusionCalibParItem param, HardwareManager hardware, FusionCalibMotionService fusionCalibMotionService)
|
||
{
|
||
var vm = new CameraFusionPadCalibViewModel(hardware,fusionCalibMotionService);
|
||
vm.InputParam = param;
|
||
vm.ResultParam = param;
|
||
vm.Initialize(cameraName, fileSaveName, device, true);
|
||
return vm;
|
||
}
|
||
|
||
public void viewLoad()
|
||
{
|
||
base.OnViewLoaded();
|
||
|
||
if (_isInitialized)
|
||
{
|
||
return;
|
||
}
|
||
|
||
if (_hardware != null)
|
||
{
|
||
_cameraAxisViewModelSevice = new CameraAxisViewModel();
|
||
_cameraAxisViewModelSevice.CameraAxisDevices.HardwareDeviceList = _hardware.CameraAxisManager.TopPositionCameraAxisDevices;
|
||
NotifyOfPropertyChange(nameof(CameraAxisViewModelSevice));
|
||
}
|
||
|
||
//RebuildModuleViewModels();
|
||
_isInitialized = true;
|
||
}
|
||
|
||
public void viewUnLoad()
|
||
{
|
||
ResultParam = FusionCalibParItem;
|
||
}
|
||
private void Initialize(string cameraName, string fileSaveName, List<HardwareDevice> device, bool isSignUp)
|
||
{
|
||
//if (isSignUp)
|
||
//{
|
||
// IoC.Get<IEventAggregator>().Unsubscribe(this);
|
||
// IoC.Get<IEventAggregator>().Subscribe(this);
|
||
//}
|
||
//CameraName = cameraName;
|
||
Name = cameraName;
|
||
//FileSaveName = fileSaveName;
|
||
var paramList = IoC.Get<IParameterManager>() as IParamList;
|
||
|
||
//Service = new CameraFusionPadCalibViewModel();
|
||
FusionCalibParItem = InputParam;
|
||
//string pathSavePath = Path.Combine(FileSaveDir, FileSaveName + ".xml");
|
||
//Service.SetParaSavePath(pathSavePath);
|
||
//Service.IsShowSolidLine = true;
|
||
//Service.ShapeThickness = 1;
|
||
//Service.DrawInConcurrency = false;
|
||
//Service.IsAxisControlLDBVisible = Visibility.Visible;
|
||
}
|
||
|
||
public void btnMovePhsCalibPosPosition()
|
||
{
|
||
System.Threading.Tasks.Task.Factory.StartNew(() =>
|
||
{
|
||
try
|
||
{
|
||
_fusionCalibMotionService.SafeMove(_hardware.Axis_Y1, FusionCalibParItem.MoveAxisPos);
|
||
_fusionCalibMotionService.MovePhsAvoidance(FusionCalibParItem.ApproachXPos, FusionCalibParItem.ApproachYPos);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
}
|
||
});
|
||
}
|
||
|
||
public void btnApproachPhsCalibPosition()
|
||
{
|
||
System.Threading.Tasks.Task.Factory.StartNew(() =>
|
||
{
|
||
try
|
||
{
|
||
|
||
//if (FindPointWSCircle())
|
||
//{
|
||
FusionCalibParItem.ApproachXPos = _hardware.Axis_X1.State.ActualPos;
|
||
FusionCalibParItem.ApproachYPos = _hardware.Axis_Y2.State.ActualPos;
|
||
//CameraWaferFusionCalibrationItem.CenterX = _gs.Axis_X21.State.ActualPos;
|
||
//CameraWaferFusionCalibrationItem.CenterY = _gs.Axis_Y21.State.ActualPos;
|
||
MessageBox.Show($"对齐值,X1:{FusionCalibParItem.ApproachXPos},Y2:{FusionCalibParItem.ApproachYPos}");
|
||
//}
|
||
//else
|
||
//{
|
||
// MessageBox.Show("对齐失败!");
|
||
//}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
}
|
||
});
|
||
}
|
||
|
||
public void btnCalculateCameraPosition()
|
||
{
|
||
try
|
||
{
|
||
//起点覆盖标定范围,起点往负方向6mm
|
||
int offset = -10;
|
||
double Y2MinPos = 0;
|
||
_hardware.Axis_Y2.GetSoftMel(ref Y2MinPos);
|
||
var delx = FusionCalibParItem.ApproachYPos - Y2MinPos + offset;
|
||
FusionCalibParItem.CameraAxisPos = FusionCalibParItem.MoveAxisPos - delx;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
}
|
||
}
|
||
|
||
public void btnSetCameraPosition()
|
||
{
|
||
|
||
var result = MwMessageBox.Show("是否使用当前位置?", "确认", MessageBoxButton.YesNo, MessageBoxImage.Information);
|
||
if (result == MessageBoxResult.Yes)
|
||
{
|
||
try
|
||
{
|
||
FusionCalibParItem.CameraAxisPos = _hardware.Axis_Y1.State.ActualPos;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
public void btnMoveCameraPosition()
|
||
{
|
||
var result = MwMessageBox.Show("是否移动到该点?", "确认", MessageBoxButton.YesNo, MessageBoxImage.Information);
|
||
if (result == MessageBoxResult.Yes)
|
||
{
|
||
System.Threading.Tasks.Task.Factory.StartNew(() =>
|
||
{
|
||
try
|
||
{
|
||
_fusionCalibMotionService.SafeMove(_hardware.Axis_Y1, FusionCalibParItem.CameraAxisPos);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
}
|
||
});
|
||
|
||
}
|
||
}
|
||
|
||
public void btnCalculatePhsPosition()
|
||
{
|
||
try
|
||
{
|
||
//起点覆盖标定范围,起点往负方向6mm
|
||
int offset = -10;
|
||
double Y2MinPos = 0;
|
||
_hardware.Axis_Y2.GetSoftMel(ref Y2MinPos);
|
||
|
||
var delx = FusionCalibParItem.ApproachXPos - Y2MinPos + offset;
|
||
FusionCalibParItem.CameraAxisPos = FusionCalibParItem.MoveAxisPos - delx;
|
||
|
||
double y11Offset = FusionCalibParItem.CameraAxisPos - FusionCalibParItem.MoveAxisPos;
|
||
FusionCalibParItem.StartX = FusionCalibParItem.ApproachXPos;
|
||
FusionCalibParItem.StartY = FusionCalibParItem.ApproachYPos + y11Offset;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
}
|
||
}
|
||
|
||
public void btnSetStageStartPosition()
|
||
{
|
||
var result = MwMessageBox.Show("是否使用当前位置?", "确认", MessageBoxButton.YesNo, MessageBoxImage.Information);
|
||
if (result == MessageBoxResult.Yes)
|
||
{
|
||
System.Threading.Tasks.Task.Factory.StartNew(() =>
|
||
{
|
||
try
|
||
{
|
||
FusionCalibParItem.StartX = _hardware.Axis_X1.State.ActualPos;
|
||
FusionCalibParItem.StartY = _hardware.Axis_Y2.State.ActualPos;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
}
|
||
});
|
||
|
||
}
|
||
}
|
||
|
||
public void btnMoveStageStartPosition()
|
||
{
|
||
var result = MwMessageBox.Show("是否移动到该点?", "确认", MessageBoxButton.YesNo, MessageBoxImage.Information);
|
||
if (result == MessageBoxResult.Yes)
|
||
{
|
||
try
|
||
{
|
||
_fusionCalibMotionService.MovePhsAvoidance(FusionCalibParItem.StartX, FusionCalibParItem.StartY);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
public void btnMoveToCenter()
|
||
{
|
||
System.Threading.Tasks.Task.Factory.StartNew(() =>
|
||
{
|
||
try
|
||
{
|
||
//if (ApproachPointWS(1))
|
||
//{
|
||
// CameraWaferFusionCalibrationItem.WaferStartVerifyX = _gs.Axis_X21.State.ActualPos;
|
||
// CameraWaferFusionCalibrationItem.WaferStartVerifyY = _gs.Axis_Y21.State.ActualPos;
|
||
// MwMessageBox.Show("中心对齐完成");
|
||
//}
|
||
//else
|
||
//{
|
||
// MwMessageBox.Show("逼近失败!");
|
||
//}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
}
|
||
});
|
||
}
|
||
|
||
public void btnStart()
|
||
{
|
||
|
||
}
|
||
|
||
public void btnStop()
|
||
{
|
||
|
||
}
|
||
}
|
||
}
|