using SA_LTT.Info.WaferInfo; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SA_LTT.Module { public class Chamber { private Equipment _equipment; public bool IsGateOpen { get { return _equipment.crevis.DigitalInputs[Crevis.DigitalInput.CMB_GATE_OPEN]; } } public bool IsGateClose { get { return _equipment.crevis.DigitalInputs[Crevis.DigitalInput.CMB_GATE_CLOSE]; } } public bool IsGateOpenValve { get { return _equipment.crevis.DigitalOutputs[Crevis.DigitalOutput.CMB_GATE_OPEN_VALVE]; } } public bool IsGateCloseValve { get { return _equipment.crevis.DigitalOutputs[Crevis.DigitalOutput.CMB_GATE_CLOSE_VALVE]; } } public bool IsLiftPinUp { get { return _equipment.crevis.DigitalInputs[Crevis.DigitalInput.WAFER_UP_CYLINDER]; } } public bool IsLiftPinDown { get { return _equipment.crevis.DigitalInputs[Crevis.DigitalInput.WAFER_DOWN_CYLINDER]; } } public bool IsChuckVacuumOn { get { return _equipment.crevis.DigitalOutputs[Crevis.DigitalOutput.VAC_CHUCK_ON]; } } public bool IsChuckVacuumSensorOn { get { return _equipment.crevis.DigitalInputs[Crevis.DigitalInput.CMB_VACUUM_PRESSURE]; } } public bool IsN2ChamberValveOn { get { return _equipment.crevis.DigitalOutputs[Crevis.DigitalOutput.N2_CHAMBER_VALVE_ON_SOL]; } } public bool IsInposition { get { bool isInposition = true; isInposition &= _equipment.powerPmac.GetAxisStatus(PmacAxis.Y_Axis, AxisStatus.InPos); isInposition &= _equipment.powerPmac.GetAxisStatus(PmacAxis.X_Axis, AxisStatus.InPos); isInposition &= _equipment.powerPmac.GetAxisStatus(PmacAxis.T_Axis, AxisStatus.InPos); return isInposition; } } public bool IsN2MFCValveOn { get { return _equipment.crevis.DigitalOutputs[Crevis.DigitalOutput.N2_MFC_VALVE_ON_SOL]; } } public bool IsByPassValveOn { get { return _equipment.crevis.DigitalOutputs[Crevis.DigitalOutput.CMB_BYPASS_ON_SOL]; } } public bool IsAirBlowOn { get { return _equipment.crevis.DigitalOutputs[Crevis.DigitalOutput.AIR_BLOW_ON]; } } public double MFCFlow { get { return _equipment.crevis.AnalogInputs[Crevis.AnalogInput.MFC_FLOW_OUT]; } } public double MFCSetPoint { get { return _equipment.crevis.AnalogOutputs[Crevis.AnalogOutput.MFC_SET_POINT]; } } public float MainCDAPressure { get { return _equipment.gr200.MainCDAPressure; } } public float MainVacuumPressure { get { return _equipment.gr200.MainVacuumPressure; } } public float N2PTPressure { get { return _equipment.gr200.N2PTPressure; } } public float MainCDAFlow { get { return _equipment.gr200.MainCDAFlow; } } public float ChamberVacuumPressure { get { return _equipment.gr200.ChamberVacuumPressure; } } public bool IsLoadPosition { get { return _equipment.powerPmac.IsLoadPosition(); } } public bool IsCenterPosition { get { return _equipment.powerPmac.IsCenterPosition(); } } public bool IsPowerMeterPosition { get { return _equipment.powerPmac.IsPowerMeterPosition(); } } public bool IsAlignPosition { get { return _equipment.powerPmac.IsAlignPosition(); } } public bool IsBeamProfilePosition { get { return _equipment.powerPmac.IsBeamProfilePosition(); } } public WaferInfo WaferInfo { get { return _equipment.waferInfoManager.GetWaferInfo(WaferInfoManager.WaferNumbers.Chamber); } } public Chamber(Equipment equipment) { _equipment = equipment; } public void GateOpen() { _equipment.crevis.WriteOutput(Crevis.DigitalOutput.CMB_GATE_CLOSE_VALVE, false); _equipment.crevis.WriteOutput(Crevis.DigitalOutput.CMB_GATE_OPEN_VALVE, true); } public void GateClose() { _equipment.crevis.WriteOutput(Crevis.DigitalOutput.CMB_GATE_OPEN_VALVE, false); _equipment.crevis.WriteOutput(Crevis.DigitalOutput.CMB_GATE_CLOSE_VALVE, true); } public void LiftPinUp() { _equipment.crevis.WriteOutput(Crevis.DigitalOutput.WAFER_DOWN_SOL, false); _equipment.crevis.WriteOutput(Crevis.DigitalOutput.WAFER_UP_SOL, true); } public void LiftPinDown() { _equipment.crevis.WriteOutput(Crevis.DigitalOutput.WAFER_UP_SOL, false); _equipment.crevis.WriteOutput(Crevis.DigitalOutput.WAFER_DOWN_SOL, true); } public void ChuckVacuumOn() { _equipment.crevis.WriteOutput(Crevis.DigitalOutput.VAC_CHUCK_ON, true); } public void ChuckVacuumOff() { _equipment.crevis.WriteOutput(Crevis.DigitalOutput.VAC_CHUCK_ON, false); } public void SetMFCFlow(double flow) { _equipment.crevis.WriteAnalog(Crevis.AnalogOutput.MFC_SET_POINT, flow); } public void N2ChamberValveOn() { _equipment.crevis.WriteOutput(Crevis.DigitalOutput.N2_CHAMBER_VALVE_ON_SOL, true); } public void N2ChamberValveOff() { _equipment.crevis.WriteOutput(Crevis.DigitalOutput.N2_CHAMBER_VALVE_ON_SOL, false); } public void N2MFCValveOn() { _equipment.crevis.WriteOutput(Crevis.DigitalOutput.N2_MFC_VALVE_ON_SOL, true); } public void N2MFCValveOff() { _equipment.crevis.WriteOutput(Crevis.DigitalOutput.N2_MFC_VALVE_ON_SOL, false); } public void ByPassValveOn() { _equipment.crevis.WriteOutput(Crevis.DigitalOutput.CMB_BYPASS_ON_SOL, true); } public void ByPassValveOff() { _equipment.crevis.WriteOutput(Crevis.DigitalOutput.CMB_BYPASS_ON_SOL, false); } public void AirBlowOn() { _equipment.crevis.WriteOutput(Crevis.DigitalOutput.AIR_BLOW_ON, true); } public void AirBlowOff() { _equipment.crevis.WriteOutput(Crevis.DigitalOutput.AIR_BLOW_ON, false); } public bool MoveLoadPosition() { double loadPositionX = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.X_Axis].TeachList[(int)EnTeachData.LoadPosX].Position; double loadPositionY = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.Y_Axis].TeachList[(int)EnTeachData.LoadPosY].Position; double loadPositionT = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.T_Axis].TeachList[(int)EnTeachData.LoadPosT].Position; double speedX = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.X_Axis].TeachList[(int)EnTeachData.LoadPosX].Speed; double speedY = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.Y_Axis].TeachList[(int)EnTeachData.LoadPosY].Speed; double speedT = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.T_Axis].TeachList[(int)EnTeachData.LoadPosT].Speed; double accX = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.X_Axis].TeachList[(int)EnTeachData.LoadPosX].Accel; double accY = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.Y_Axis].TeachList[(int)EnTeachData.LoadPosY].Accel; double accT = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.T_Axis].TeachList[(int)EnTeachData.LoadPosT].Accel; bool result = _equipment.powerPmac.MoveAbs(PmacAxis.X_Axis, loadPositionX, speedX, accX); result &= _equipment.powerPmac.MoveAbs(PmacAxis.Y_Axis, loadPositionY, speedY, accY); result &= _equipment.powerPmac.MoveAbs(PmacAxis.T_Axis, loadPositionT, speedT, accT); return result; } public bool MoveCenterPosition() { double loadPositionX = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.X_Axis].TeachList[(int)EnTeachData.CenterPosX].Position; double loadPositionY = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.Y_Axis].TeachList[(int)EnTeachData.CenterPosY].Position; double loadPositionT = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.T_Axis].TeachList[(int)EnTeachData.CenterPosT].Position; double speedX = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.X_Axis].TeachList[(int)EnTeachData.CenterPosX].Speed; double speedY = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.Y_Axis].TeachList[(int)EnTeachData.CenterPosY].Speed; double speedT = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.T_Axis].TeachList[(int)EnTeachData.CenterPosT].Speed; double accX = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.X_Axis].TeachList[(int)EnTeachData.CenterPosX].Accel; double accY = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.Y_Axis].TeachList[(int)EnTeachData.CenterPosY].Accel; double accT = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.T_Axis].TeachList[(int)EnTeachData.CenterPosT].Accel; bool result = _equipment.powerPmac.MoveAbs(PmacAxis.X_Axis, loadPositionX, speedX, accX); result &= _equipment.powerPmac.MoveAbs(PmacAxis.Y_Axis, loadPositionY, speedY, accY); result &= _equipment.powerPmac.MoveAbs(PmacAxis.T_Axis, loadPositionT, speedT, accT); return result; } public bool MovePowerMeterPosition() { double powerMeterPositionX = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.X_Axis].TeachList[(int)EnTeachData.PowerMeterX].Position; double powerMeterPositionY = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.Y_Axis].TeachList[(int)EnTeachData.PowerMeterY].Position; double powerMeterPositionT = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.T_Axis].TeachList[(int)EnTeachData.PowerMeterT].Position; double speedX = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.X_Axis].TeachList[(int)EnTeachData.PowerMeterX].Speed; double speedY = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.Y_Axis].TeachList[(int)EnTeachData.PowerMeterY].Speed; double speedT = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.T_Axis].TeachList[(int)EnTeachData.PowerMeterT].Speed; double accX = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.X_Axis].TeachList[(int)EnTeachData.PowerMeterX].Accel; double accY = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.Y_Axis].TeachList[(int)EnTeachData.PowerMeterY].Accel; double accT = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.T_Axis].TeachList[(int)EnTeachData.PowerMeterT].Accel; bool result = _equipment.powerPmac.MoveAbs(PmacAxis.X_Axis, powerMeterPositionX, speedX, accX); result &= _equipment.powerPmac.MoveAbs(PmacAxis.Y_Axis, powerMeterPositionY, speedY, accY); result &= _equipment.powerPmac.MoveAbs(PmacAxis.T_Axis, powerMeterPositionT, speedT, accT); return result; } public bool MoveAlignPosition() { double AlignPositionX = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.X_Axis].TeachList[(int)EnTeachData.AlignX].Position; double AlignPositionY = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.Y_Axis].TeachList[(int)EnTeachData.AlignY].Position; double AlignPositionT = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.T_Axis].TeachList[(int)EnTeachData.AlignT].Position; double speedX = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.X_Axis].TeachList[(int)EnTeachData.AlignX].Speed; double speedY = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.Y_Axis].TeachList[(int)EnTeachData.AlignY].Speed; double speedT = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.T_Axis].TeachList[(int)EnTeachData.AlignT].Speed; double accX = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.X_Axis].TeachList[(int)EnTeachData.AlignX].Accel; double accY = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.Y_Axis].TeachList[(int)EnTeachData.AlignY].Accel; double accT = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.T_Axis].TeachList[(int)EnTeachData.AlignT].Accel; bool result = _equipment.powerPmac.MoveAbs(PmacAxis.X_Axis, AlignPositionX, speedX, accX); result &= _equipment.powerPmac.MoveAbs(PmacAxis.Y_Axis, AlignPositionY, speedY, accY); result &= _equipment.powerPmac.MoveAbs(PmacAxis.T_Axis, AlignPositionT, speedT, accT); return result; } public bool MoveBeamProfilePosition() { double beamProfilePositionX = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.X_Axis].TeachList[(int)EnTeachData.BeamProfileX].Position; double beamProfilePositionY = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.Y_Axis].TeachList[(int)EnTeachData.BeamProfileY].Position; double beamProfilePositionT = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.T_Axis].TeachList[(int)EnTeachData.BeamProfileT].Position; double speedX = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.X_Axis].TeachList[(int)EnTeachData.BeamProfileX].Speed; double speedY = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.Y_Axis].TeachList[(int)EnTeachData.BeamProfileY].Speed; double speedT = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.T_Axis].TeachList[(int)EnTeachData.BeamProfileT].Speed; double accX = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.X_Axis].TeachList[(int)EnTeachData.BeamProfileX].Accel; double accY = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.Y_Axis].TeachList[(int)EnTeachData.BeamProfileY].Accel; double accT = _equipment.powerPmac.m_AxisAllList[(int)PmacAxis.T_Axis].TeachList[(int)EnTeachData.BeamProfileT].Accel; bool result = _equipment.powerPmac.MoveAbs(PmacAxis.X_Axis, beamProfilePositionX, speedX, accX); result &= _equipment.powerPmac.MoveAbs(PmacAxis.Y_Axis, beamProfilePositionY, speedY, accY); result &= _equipment.powerPmac.MoveAbs(PmacAxis.T_Axis, beamProfilePositionT, speedT, accT); return result; } public bool AllStop() { bool result = _equipment.powerPmac.MoveStop(PmacAxis.X_Axis); result &= _equipment.powerPmac.MoveStop(PmacAxis.Y_Axis); result &= _equipment.powerPmac.MoveStop(PmacAxis.T_Axis); return result; } } }