83 lines
3.4 KiB
C#
83 lines
3.4 KiB
C#
using MainShell.Hardware;
|
|
using MainShell.Motion;
|
|
using MainShell.HeightMeasure.Model;
|
|
using MaxwellFramework.Core.Attributes;
|
|
using MXJM.Parameter.Maintance;
|
|
using System;
|
|
|
|
namespace MainShell.HeightMeasure.Service
|
|
{
|
|
[Singleton]
|
|
public class HeightMeasureMotionService
|
|
{
|
|
private readonly HardwareManager _hardware;
|
|
private readonly SafeAxisMotion _safeAxisMotion;
|
|
private readonly StagePlatformMotionService _stagePlatformMotionService;
|
|
|
|
public HeightMeasureMotionService(HardwareManager hardware, SafeAxisMotion safeAxisMotion, StagePlatformMotionService stagePlatformMotionService)
|
|
{
|
|
_hardware = hardware ?? throw new ArgumentNullException(nameof(hardware));
|
|
_safeAxisMotion = safeAxisMotion ?? throw new ArgumentNullException(nameof(safeAxisMotion));
|
|
_stagePlatformMotionService = stagePlatformMotionService ?? throw new ArgumentNullException(nameof(stagePlatformMotionService));
|
|
}
|
|
|
|
public void MoveCalibrationAndStagePlatformHeights(double czCalibrationHeight, double stageDatumHeight)
|
|
{
|
|
_safeAxisMotion.MoveAbs(AxisName.Axis_SZ, czCalibrationHeight);
|
|
_stagePlatformMotionService.MoveFlat(stageDatumHeight);
|
|
}
|
|
|
|
public void MoveWsAvoidance(double xPosition, double yPosition)
|
|
{
|
|
_safeAxisMotion.SafeMove(
|
|
MotionMoveRequest.ForAxis(GetRequiredAxis(_hardware.Axis_X2, nameof(_hardware.Axis_X2)), xPosition),
|
|
MotionMoveRequest.ForAxis(GetRequiredAxis(_hardware.Axis_Y2, nameof(_hardware.Axis_Y2)), yPosition));
|
|
}
|
|
|
|
public void MovePhsAndNeedle(double xPosition, double yPosition, double zPosition)
|
|
{
|
|
_safeAxisMotion.SafeMove(
|
|
MotionMoveRequest.ForAxis(GetRequiredAxis(_hardware.Axis_X1, nameof(_hardware.Axis_X1)), xPosition),
|
|
MotionMoveRequest.ForAxis(GetRequiredAxis(_hardware.Axis_Y1, nameof(_hardware.Axis_Y1)), yPosition));
|
|
_safeAxisMotion.MoveAbs(GetRequiredAxis(_hardware.Axis_Z1, nameof(_hardware.Axis_Z1)), zPosition);
|
|
}
|
|
|
|
public void MoveGlassMeasurePoint(TeachPoint point)
|
|
{
|
|
if (point == null)
|
|
{
|
|
throw new ArgumentNullException(nameof(point));
|
|
}
|
|
|
|
MovePhsAndNeedle(point.X, point.Y, point.Z);
|
|
}
|
|
|
|
public void MoveWaferMeasurePoint(TeachPoint point)
|
|
{
|
|
if (point == null)
|
|
{
|
|
throw new ArgumentNullException(nameof(point));
|
|
}
|
|
|
|
MoveWsAvoidance(point.X, point.Y);
|
|
_safeAxisMotion.MoveAbs(GetRequiredAxis(_hardware.Axis_Z1, nameof(_hardware.Axis_Z1)), point.Z);
|
|
}
|
|
|
|
public void MoveWaferMeasurePose(double xPosition, double yPosition)
|
|
{
|
|
_safeAxisMotion.SafeMove(
|
|
MotionMoveRequest.ForAxis(GetRequiredAxis(_hardware.Axis_X1, nameof(_hardware.Axis_X1)), xPosition),
|
|
MotionMoveRequest.ForAxis(GetRequiredAxis(_hardware.Axis_Y1, nameof(_hardware.Axis_Y1)), yPosition));
|
|
}
|
|
|
|
private static MwFramework.Device.IAxis GetRequiredAxis(MwFramework.Device.IAxis axis, string axisPropertyName)
|
|
{
|
|
if (axis == null)
|
|
{
|
|
throw new InvalidOperationException(string.Format("Axis '{0}' is not available.", axisPropertyName));
|
|
}
|
|
|
|
return axis;
|
|
}
|
|
}
|
|
} |