using System; using System.Collections.Generic; using System.Windows.Forms; namespace SHARP_CLAS_UI { public class LoaderLiftIn : Lift { #region Property public override bool IsWorkEnd { get { if (Step == LiftInSteps.S0000_WAIT) { return true; } else { return false; } } } public override bool IsStayPosition { get { object value; equipment.sm.Get_Value(Position_Parameter_Address.LD_Tray_In_Z_Wait_Position, out value); var position = double.Parse($"{value}"); return MotorZ.Is_Inposition(position, equipment.Setting.Inposition_Offset); } } public override bool IsPanelEmpty { get { if (equipment.LoaderInTrayCount <= 0) return true; int panel_num = 0; for (int i = 0; i < equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row; i++) { for (int j = 1; j <= equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row_Data[i].Column; j++) { panel_num++; var info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.LD_Tray_In, panel_num); if (!info.Blank) { return false; } } } return true; } } public override bool IsPanelFull { get { if (equipment.LoaderInTrayCount <= 0) return true; int panel_num = 0; for (int i = 0; i < equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row; i++) { for (int j = 1; j <= equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row_Data[i].Column; j++) { panel_num++; var info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.LD_Tray_In, panel_num); if (info.Blank) { return false; } } } return true; } } protected override double UpPosition { get { object value; equipment.sm.Get_Value(Position_Parameter_Address.LD_Tray_In_Z_Process_Position, out value); var position = double.Parse($"{value}"); return position; } } public override double TrayInPosition { get { if (equipment.Cur_Main_Recipe.tray_info == null) return 0; var position = double.Parse((UpPosition - (equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Tray_Pitch * equipment.LoaderInTrayCount)).ToString("F3")); position = double.Parse(position.ToString("F3")); return position; } } public override double TrayWaitPosition { get { if (equipment.Cur_Main_Recipe.tray_info == null) return 0; var position = double.Parse((UpPosition - (equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Tray_Pitch * (equipment.LoaderInTrayCount) + 1)).ToString("F3")); position = double.Parse(position.ToString("F3")); return position; } } public override string TrayID { get { object value; equipment.sm.Get_Value(Process_Memory_Address.LD_Tray_In_ID, out value); return value.ToString(); } set { equipment.sm.Set_Value(Process_Memory_Address.LD_Tray_In_ID, value); } } public LiftInSteps Step { get { return _step; } set { _step = value; } } public bool IsPickEnable { get { if(IsWorkEnd && equipment.LoaderInTrayCount > 0 && IsPanelEmpty == false && equipment.loader.TrayTransfer.IsStayPosition && MotorZ.Is_Inposition(TrayInPosition, equipment.Setting.Inposition_Offset + equipment.Setting.Tray_Alarm_Range)) { return true; } else { return false; } } } #endregion #region Field private LiftInSteps _step; private LiftInSteps _oldStep; private LiftHomeSteps _homeStep; Form_Tray_Count_Set count_set_view; Timer tmrUi = new Timer(); bool tray_count_set_show; double _loadTrayInPosition; #endregion #region Construct public LoaderLiftIn(Equipment equipment) : base(equipment, MotorAxis.LD_Tray_In_Lift, "LoaderLiftIn") { Step = LiftInSteps.S0000_WAIT; _oldStep = LiftInSteps.S0000_WAIT; Initialize(InputData.LD_Tray_In_Lift_Up_1_1_Sensor, InputData.LD_Tray_In_Lift_Up_1_2_Sensor, InputData.LD_Tray_In_Lift_Up_2_1_Sensor, InputData.LD_Tray_In_Lift_Up_2_2_Sensor); AlignerTop.Initialize(OutputData.LD_Tray_In_Align_Top_Sol_Valve, InputData.LD_Tray_In_Align_Top_1_Fwd_Sensor, InputData.LD_Tray_In_Align_Top_2_Fwd_Sensor, InputData.LD_Tray_In_Align_Top_1_Bwd_Sensor, InputData.LD_Tray_In_Align_Top_2_Bwd_Sensor, En_Alarm_List.AL_0567_LD_TRAY_IN_ALIGN_TOP_1_FWD_SENSOR_CHECK, En_Alarm_List.AL_0568_LD_TRAY_IN_ALIGN_TOP_2_FWD_SENSOR_CHECK, En_Alarm_List.AL_0569_LD_TRAY_IN_ALIGN_TOP_1_BWD_SENSOR_CHECK, En_Alarm_List.AL_0570_LD_TRAY_IN_ALIGN_TOP_2_BWD_SENSOR_CHECK); Clamper.Initialize(OutputData.LD_Tray_In_Clamp_Sol_Valve, InputData.LD_Tray_In_Clamp_1_Clamp_Sensor, InputData.LD_Tray_In_Clamp_2_Clamp_Sensor, InputData.LD_Tray_In_Clamp_1_Unclamp_Sensor, InputData.LD_Tray_In_Clamp_2_Unclamp_Sensor, En_Alarm_List.AL_0571_LD_TRAY_IN_CLAMP_1_SENSOR_CHECK, En_Alarm_List.AL_0572_LD_TRAY_IN_CLAMP_2_SENSOR_CHECK, En_Alarm_List.AL_0573_LD_TRAY_IN_UNCLAMP_1_SENSOR_CHECK, En_Alarm_List.AL_0574_LD_TRAY_IN_UNCLAMP_2_SENSOR_CHECK); Stacker.Initialize(OutputData.LD_Tray_In_Stacker_Sol_Valve, InputData.LD_Tray_In_Stacker_1_Fwd_Sensor, InputData.LD_Tray_In_Stacker_2_Fwd_Sensor, InputData.LD_Tray_In_Stacker_3_Fwd_Sensor, InputData.LD_Tray_In_Stacker_4_Fwd_Sensor, InputData.LD_Tray_In_Stacker_1_Bwd_Sensor, InputData.LD_Tray_In_Stacker_2_Bwd_Sensor, InputData.LD_Tray_In_Stacker_3_Bwd_Sensor, InputData.LD_Tray_In_Stacker_4_Bwd_Sensor, En_Alarm_List.AL_0575_LD_TRAY_IN_STACKER_1_FWD_SENSOR_CHECK, En_Alarm_List.AL_0576_LD_TRAY_IN_STACKER_2_FWD_SENSOR_CHECK, En_Alarm_List.AL_0577_LD_TRAY_IN_STACKER_3_FWD_SENSOR_CHECK, En_Alarm_List.AL_0578_LD_TRAY_IN_STACKER_4_FWD_SENSOR_CHECK, En_Alarm_List.AL_0579_LD_TRAY_IN_STACKER_1_BWD_SENSOR_CHECK, En_Alarm_List.AL_0580_LD_TRAY_IN_STACKER_2_BWD_SENSOR_CHECK, En_Alarm_List.AL_0581_LD_TRAY_IN_STACKER_3_BWD_SENSOR_CHECK, En_Alarm_List.AL_0582_LD_TRAY_IN_STACKER_4_BWD_SENSOR_CHECK); pauseDisableList.Add(LiftInSteps.S1305_LIFT_UP_CHECK); pauseDisableList.Add(LiftInSteps.S1315_LIFT_PITCH_DOWN_CHECK); pauseDisableList.Add(LiftInSteps.S1325_LIFT_PITCH_UP_CHECK); pauseDisableList.Add(LiftInSteps.S1335_LIFT_PITCH_LAST_UP_CHECK); pauseDisableList.Add(LiftInSteps.S1345_LIFT_DOWN_CHECK); pauseDisableList.Add(LiftInSteps.S2305_LIFT_UP_CHECK); pauseDisableList.Add(LiftInSteps.S2315_LIFT_PITCH_DOWN_CHECK); pauseDisableList.Add(LiftInSteps.S2325_LIFT_PITCH_UP_CHECK); pauseDisableList.Add(LiftInSteps.S2335_LIFT_PITCH_LAST_UP_CHECK); pauseDisableList.Add(LiftInSteps.S2345_LIFT_DOWN_CHECK); pauseDisableList.Add(LiftInSteps.S3305_LIFT_DOWN_CHECK); MotorZ.Check_Jog_Interlock = Jog_Interlock; MotorZ.Check_Move_Interlock = Move_Interlock; tmrUi.Tick += TmrUi_Tick; tmrUi.Interval = 5000; tmrUi.Start(); } #endregion #region Function private bool Move_Interlock() { if (equipment.User.Level != En_User_Level.Master && equipment.Door_Opened) { return true; } return false; } private bool Jog_Interlock(bool positive) { if (equipment.User.Level != En_User_Level.Master && equipment.Door_Opened) { return true; } return false; } private void TmrUi_Tick(object sender, EventArgs e) { if (tray_count_set_show && count_set_view != null) { count_set_view.Show(); tray_count_set_show = false; } } public void Init_Seq() { if(Step < LiftInSteps.S3000_TRAY_UNLOADING_START || LiftInSteps.S3999_TRAY_UNLOADING_END < Step) Step = LiftInSteps.S0000_WAIT; _homeStep = LiftHomeSteps.S0000_WAIT; } public void ExecuteAuto() { if(IsWorkEnd) { if(equipment.LoaderInTrayCount <= 0) { if(equipment.loader.ConveyorIn.IsWorkEnd) { if (IsStayPosition == false) { Step = LiftInSteps.S3000_TRAY_UNLOADING_START; } } } else { if(IsFirstTray) { if(equipment.loader.ConveyorIn.IsWorkEnd) { if(equipment.loader.ConveyorIn.IsLiftInSensor || equipment.loader.ConveyorIn.IsLiftInCompleteSensor) { Step = LiftInSteps.S1000_LIFT_LOAD_START; } } } else { if(IsPanelEmpty) { if(_trayCount != equipment.LoaderInTrayCount) { Step = LiftInSteps.S2000_LIFT_UP_START; } } } } } } public override void MonitoringStatus() { if(UnitMode == En_Equipment_Mode.Stop) { if(Step < LiftInSteps.S3000_TRAY_UNLOADING_START || LiftInSteps.S3999_TRAY_UNLOADING_END < Step) { MotorZ.Move_Stop(); } } if (equipment.User.Level != En_User_Level.Master && equipment.Door_Opened) { if (MotorZ.MotionComplete == false) { MotorZ.Move_Stop(); } } } public override void ExecuteStep() { if (_oldStep != Step) { sequenceChangedTime.Restart(); _oldStep = Step; WriteSequenceLog(Step.ToString()); } AlignerTop.ExecuteProcess(); Clamper.ExecuteProcess(); Stacker.ExecuteProcess(); //상시 Run. if (UnitMode != En_Equipment_Mode.Home) { UnloadingTray(); } if (UnitMode == En_Equipment_Mode.Stop) { Init_Seq(); isHomeComplete = false; return; } else if (UnitMode == En_Equipment_Mode.Pause) { sequenceChangedTime.Stop(); return; } else if (UnitMode == En_Equipment_Mode.Home) { if (IsHomeComplete == false) { ExecuteHome(); } return; } if (UnitMode == En_Equipment_Mode.Auto || UnitMode == En_Equipment_Mode.Manual) { sequenceChangedTime.Start(); if (equipment.equip_mode == En_Equipment_Mode.Pause) { if (pauseDisableList.Contains(Step) == false) { UnitMode = En_Equipment_Mode.Pause; return; } } if (UnitMode == En_Equipment_Mode.Auto) { ExecuteAuto(); } LoadingTray(); UpTray(); } } public void ExecuteHome() { switch (_homeStep) { case LiftHomeSteps.S0000_WAIT: { _homeStep = LiftHomeSteps.S1000_STATUS_CHECK; break; } case LiftHomeSteps.S1000_STATUS_CHECK: { if (MotorZ.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0121_LD_TRAT_IN_LIFT_Z_ERROR_STOP); } else if (!MotorZ.PowerOn) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0120_LD_TRAT_IN_LIFT_Z_POWER_OFF); } else if (IsLiftInSensor1 || IsLiftInSensor2) { Interlock_Manager.Add_Interlock_Msg("Loader Lift In", "Home can't run, Lift in sensor detected."); } else if (IsLiftLimitSensor1 || IsLiftLimitSensor2) { Interlock_Manager.Add_Interlock_Msg("Loader Lift In", "Home can't run, Lift limit sensor detected."); } else if (Clamper.ClampSol) { Interlock_Manager.Add_Interlock_Msg("Loader Lift In", "Home can't run, Clamp is clamped "); } else { _homeStep = LiftHomeSteps.S1100_CONVEYOR_HOME_CHECK; } break; } case LiftHomeSteps.S1100_CONVEYOR_HOME_CHECK: { if (equipment.loader.ConveyorIn.IsHomeComplete) { _homeStep = LiftHomeSteps.S1110_CONVEYOR_LIFT_SENSOR_CHECK; } break; } case LiftHomeSteps.S1110_CONVEYOR_LIFT_SENSOR_CHECK: { if (equipment.loader.ConveyorIn.IsLiftInSensor || equipment.loader.ConveyorIn.IsLiftInCompleteSensor) { if (equipment.loader.ConveyorIn.IsLiftInSensor) { Interlock_Manager.Add_Interlock_Msg("LD Tray In Lift Home can't run.", "Conveyor in sensor detected."); } if(equipment.loader.ConveyorIn.IsLiftInCompleteSensor) { Interlock_Manager.Add_Interlock_Msg("LD Tray In Lift Home can't run.", "Conveyor in complete sensor detected."); } } else { _homeStep = LiftHomeSteps.S1200_MOTOR_Z_HOME; } break; } case LiftHomeSteps.S1200_MOTOR_Z_HOME: { if (MotorZ.Home()) { homeCheckedTime.Restart(); _homeStep = LiftHomeSteps.S1205_MOTOR_Z_HOME_CHECK; } break; } case LiftHomeSteps.S1205_MOTOR_Z_HOME_CHECK: { if (homeCheckedTime.Seconds < 1) return; if (!MotorZ.IsHomed) { if(MotorZ.Homing == false && MotorZ.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0121_LD_TRAT_IN_LIFT_Z_ERROR_STOP); } } else { if (equipment.loader.ConveyorIn.IsLiftInSensor || equipment.loader.ConveyorIn.IsLiftInCompleteSensor) { if (equipment.loader.ConveyorIn.IsLiftInSensor) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0552_LD_TRAY_IN_CONVEYOR_LIFT_IN_SENSOR_CHECK); } if (equipment.loader.ConveyorIn.IsLiftInCompleteSensor) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0553_LD_TRAY_IN_CONVEYOR_LIFT_IN_COMPLETE_SENSOR_CHECK); } } else { _homeStep = LiftHomeSteps.S1300_MOVE_STAY_POSITION; } } break; } case LiftHomeSteps.S1300_MOVE_STAY_POSITION: { if(MoveStayPosition()) { homeCheckedTime.Restart(); _homeStep = LiftHomeSteps.S1305_POSITION_CHECK; } break; } case LiftHomeSteps.S1305_POSITION_CHECK: { if (homeCheckedTime.Seconds < 1) return; if (MotorZ.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0121_LD_TRAT_IN_LIFT_Z_ERROR_STOP); } else if (MotorZ.MotionComplete) { if (IsStayPosition) { _homeStep = LiftHomeSteps.S9999_END; } else { Interlock_Manager.Add_Interlock_Msg("LD Tray In Lift Home can't run.", "Position is not wait."); } } break; } case LiftHomeSteps.S9999_END: { isHomeComplete = true; _homeStep = LiftHomeSteps.S0000_WAIT; break; } } } public void LoadingTray() { switch (Step) { case LiftInSteps.S1000_LIFT_LOAD_START: { Step = LiftInSteps.S1100_TRAY_TRANSTER_POSITION_STAY_CHECK; break; } case LiftInSteps.S1100_TRAY_TRANSTER_POSITION_STAY_CHECK: { Step = LiftInSteps.S1200_ALIGN_TOP_BACKWARD; break; } case LiftInSteps.S1200_ALIGN_TOP_BACKWARD: { if (AlignerTop.IsWorkEnd) { if (AlignerTop.IsBackward) { Step = LiftInSteps.S1210_STACKER_BACKWARD; } else { AlignerTop.Backward(); } } break; } case LiftInSteps.S1210_STACKER_BACKWARD: { if (Stacker.IsWorkEnd) { if (Stacker.IsBackward) { Step = LiftInSteps.S1220_UNCLAMP; } else { Stacker.Backward(); } } break; } case LiftInSteps.S1220_UNCLAMP: { if (Clamper.IsWorkEnd) { if (Clamper.IsUnclamp) { Step = LiftInSteps.S1300_LIFT_UP; } else { Clamper.Unclamp(); } } break; } case LiftInSteps.S1300_LIFT_UP: { object value; equipment.sm.Get_Value(Position_Parameter_Address.LD_Tray_In_Z_Process_Position, out value); _loadTrayInPosition = double.Parse($"{value}"); if (MoveTrayInPosition(_loadTrayInPosition)) { Step = LiftInSteps.S1305_LIFT_UP_CHECK; } break; } case LiftInSteps.S1305_LIFT_UP_CHECK: { if (sequenceChangedTime.Seconds < 0.5) return; if (IsLiftLimitSensor1 || IsLiftLimitSensor2) { if (MotorZ.Move_Stop()) { //count_set_view = new Form_Tray_Count_Set("LD TRAY IN", equipment.LoaderInTrayCount, true); //tray_count_set_show = true; if (IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0563_LD_TRAY_IN_LIFT_UP_1_1_SENSOR_CHECK); } if (IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0564_LD_TRAY_IN_LIFT_UP_1_2_SENSOR_CHECK); } Step = LiftInSteps.S1340_LIFT_DOWN; return; } } if (MotorZ.MotionComplete && MotorZ.Position == _loadTrayInPosition) { Step = LiftInSteps.S3000_TRAY_UNLOADING_START; } else { if (IsLiftInSensor1 && IsLiftInSensor2) { if (MotorZ.Move_Stop()) { _pitchPosition = 0; _loadTrayInPosition = MotorZ.Position; Step = LiftInSteps.S1310_LIFT_PITCH_DOWN; } } } break; } case LiftInSteps.S1310_LIFT_PITCH_DOWN: { if (Math.Abs(_pitchPosition) > equipment.Setting.Tray_Alarm_Range) { //count_set_view = new Form_Tray_Count_Set("LD TRAY IN", equipment.LoaderInTrayCount, false); //tray_count_set_show = true; Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0950_LD_TRAY_IN_PITCH_RANGE_ALARM); Step = LiftInSteps.S1340_LIFT_DOWN; } else { _pitchPosition -= equipment.Setting.Tray_Move_Pitch; MoveTrayInPosition(_loadTrayInPosition + _pitchPosition); Step = LiftInSteps.S1315_LIFT_PITCH_DOWN_CHECK; } break; } case LiftInSteps.S1315_LIFT_PITCH_DOWN_CHECK: { if (sequenceChangedTime.Seconds < 0.5) return; if (MotorZ.MotionComplete) { if (MotorZ.Is_Inposition(_loadTrayInPosition + _pitchPosition, equipment.Setting.Inposition_Offset)) { if (IsLiftInSensor1 && IsLiftInSensor2) { Step = LiftInSteps.S1310_LIFT_PITCH_DOWN; } else { Step = LiftInSteps.S1320_LIFT_PITCH_UP; } } else { Interlock_Manager.Add_Interlock_Msg("929, LD Tray In Lift Loading can't run.", $"LD Tray Lift is not up position({MotorZ.Position}, {_loadTrayInPosition + _pitchPosition})."); Step = LiftInSteps.S1310_LIFT_PITCH_DOWN; } } break; } case LiftInSteps.S1320_LIFT_PITCH_UP: { if (Math.Abs(_pitchPosition) > equipment.Setting.Tray_Alarm_Range) { //count_set_view = new Form_Tray_Count_Set("LD TRAY IN", equipment.LoaderInTrayCount, false); //tray_count_set_show = true; Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0950_LD_TRAY_IN_PITCH_RANGE_ALARM); Step = LiftInSteps.S1340_LIFT_DOWN; } else { _pitchPosition += equipment.Setting.Tray_Move_Pitch; sequenceChangedTime.Start(); MoveTrayInPosition(_loadTrayInPosition + _pitchPosition); Step = LiftInSteps.S1325_LIFT_PITCH_UP_CHECK; } break; } case LiftInSteps.S1325_LIFT_PITCH_UP_CHECK: { if (sequenceChangedTime.Seconds < 0.5) return; if (IsLiftLimitSensor1 || IsLiftLimitSensor2) { if (MotorZ.Move_Stop()) { //count_set_view = new Form_Tray_Count_Set("LD TRAY IN", equipment.LoaderInTrayCount, true); //tray_count_set_show = true; if (IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0563_LD_TRAY_IN_LIFT_UP_1_1_SENSOR_CHECK); } if (IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0564_LD_TRAY_IN_LIFT_UP_1_2_SENSOR_CHECK); } Step = LiftInSteps.S1340_LIFT_DOWN; return; } } if (MotorZ.MotionComplete) { if (MotorZ.Is_Inposition(_loadTrayInPosition + _pitchPosition, equipment.Setting.Inposition_Offset)) { if (IsLiftInSensor1 && IsLiftInSensor2) { Step = LiftInSteps.S1330_LIFT_PITCH_LAST_UP; } else { Step = LiftInSteps.S1320_LIFT_PITCH_UP; } } else { Interlock_Manager.Add_Interlock_Msg("1008, LD Tray In Lift Loading can't run.", $"LD Tray Lift is not up position({MotorZ.Position}, {_loadTrayInPosition + _pitchPosition})."); Step = LiftInSteps.S1320_LIFT_PITCH_UP; } } break; } case LiftInSteps.S1330_LIFT_PITCH_LAST_UP: { _pitchPosition += equipment.Setting.LD_In_Tray_Move_Last_Pitch; MoveTrayInPosition(_loadTrayInPosition + _pitchPosition); Step = LiftInSteps.S1335_LIFT_PITCH_LAST_UP_CHECK; break; } case LiftInSteps.S1335_LIFT_PITCH_LAST_UP_CHECK: { if (sequenceChangedTime.Seconds < 0.5) return; if (IsLiftLimitSensor1 || IsLiftLimitSensor2) { if (MotorZ.Move_Stop()) { //count_set_view = new Form_Tray_Count_Set("LD TRAY IN", equipment.LoaderInTrayCount, true); //tray_count_set_show = true; if (IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0563_LD_TRAY_IN_LIFT_UP_1_1_SENSOR_CHECK); } if (IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0564_LD_TRAY_IN_LIFT_UP_1_2_SENSOR_CHECK); } Step = LiftInSteps.S1340_LIFT_DOWN; return; } } if (MotorZ.MotionComplete) { if (MotorZ.Is_Inposition(_loadTrayInPosition + _pitchPosition, equipment.Setting.Inposition_Offset)) { if (IsLiftInSensor1 && IsLiftInSensor2) { Step = LiftInSteps.S1350_TRAY_COUNT_SET; } else { //count_set_view = new Form_Tray_Count_Set("LD TRAY IN", equipment.LoaderInTrayCount, false); //tray_count_set_show = true; if (IsLiftInSensor1 == false) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0565_LD_TRAY_IN_LIFT_UP_2_1_SENSOR_CHECK); } if (IsLiftInSensor2 == false) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0566_LD_TRAY_IN_LIFT_UP_2_2_SENSOR_CHECK); } Step = LiftInSteps.S1340_LIFT_DOWN; } } else { Interlock_Manager.Add_Interlock_Msg("1064, LD Tray In Lift Loading can't run.", $"LD Tray Lift is not up position({MotorZ.Position}, {_loadTrayInPosition + _pitchPosition})."); Step = LiftInSteps.S1330_LIFT_PITCH_LAST_UP; } } break; } case LiftInSteps.S1340_LIFT_DOWN: { if (MoveStayPosition()) { Step = LiftInSteps.S1345_LIFT_DOWN_CHECK; } break; } case LiftInSteps.S1345_LIFT_DOWN_CHECK: { if (sequenceChangedTime.Seconds < 0.5) return; if (MotorZ.MotionComplete) { if (IsStayPosition) { Step = LiftInSteps.S1300_LIFT_UP; } else { Interlock_Manager.Add_Interlock_Msg("LD Tray In Lift Loading can't run.", $"LD Tray Lift is not Wait position."); Step = LiftInSteps.S1340_LIFT_DOWN; } } break; } case LiftInSteps.S1350_TRAY_COUNT_SET: { object value; equipment.sm.Get_Value(Position_Parameter_Address.LD_Tray_In_Z_Process_Position, out value); double position = double.Parse($"{value}"); int count = (int)((position - MotorZ.Position) / equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Tray_Pitch); equipment.LoaderInTrayCount = count; _trayCount = count; Step = LiftInSteps.S1400_CLAMP; break; } case LiftInSteps.S1400_CLAMP: { if (Clamper.IsWorkEnd) { if (Clamper.IsClamp) { Step = LiftInSteps.S1410_ALIGN_TOP_FORWARD; } else { Clamper.Clamp(); } } break; } case LiftInSteps.S1410_ALIGN_TOP_FORWARD: { if (AlignerTop.IsWorkEnd) { if (AlignerTop.IsForward) { if (equipment.Mode.LD_Stacker_Skip) { IsBcrReadBit = true; Step = LiftInSteps.S1500_TRAY_ID_READ_WAIT; } else { Step = LiftInSteps.S1420_STACKER_FORWARD; } } else { AlignerTop.Forward(); } } break; } case LiftInSteps.S1420_STACKER_FORWARD: { if (Stacker.IsWorkEnd) { if (Stacker.IsForward) { IsBcrReadBit = true; Step = LiftInSteps.S1500_TRAY_ID_READ_WAIT; } else { Stacker.Forward(); } } break; } case LiftInSteps.S1500_TRAY_ID_READ_WAIT: { if (IsBcrReadBit == false) { if (SetTrayId(TrayID)) { Step = LiftInSteps.S1510_TRAY_PANEL_DATA_SET; } } break; } case LiftInSteps.S1510_TRAY_PANEL_DATA_SET: { if (IsFirstTray) { SetPanelInfo(true); } else { SetPanelInfo(false); } Step = LiftInSteps.S1515_TRAY_PANEL_DATA_SET_CHECK; break; } case LiftInSteps.S1515_TRAY_PANEL_DATA_SET_CHECK: { if ((IsFirstTray && IsPanelEmpty) || IsPanelFull) { if (IsFirstTray && equipment.cim_mode == En_Cim_Mode.Online) { Step = LiftInSteps.S1520_PORT_STATUS_CIM_SEND; } else { Step = LiftInSteps.S1999_LIFT_LOAD_END; } } else { Step = LiftInSteps.S1510_TRAY_PANEL_DATA_SET; } break; } case LiftInSteps.S1520_PORT_STATUS_CIM_SEND: { if (equipment.cim_mode != En_Cim_Mode.Online) { Step = LiftInSteps.S1999_LIFT_LOAD_END; return; } if (equipment.cim_client.Send_Port_Status("E12345678", En_Port_ID.P01, En_Tray_Code.P, false, En_Port_Status.FUL)) { Step = LiftInSteps.S1525_PORT_STATUS_CIM_SEND_CHECK; } break; } case LiftInSteps.S1525_PORT_STATUS_CIM_SEND_CHECK: { if (equipment.cim_mode != En_Cim_Mode.Online) { Step = LiftInSteps.S1999_LIFT_LOAD_END; return; } if (equipment.cim_client.Get_Command_Ack(En_Cim_Command.PTSTR)) { if (equipment.cim_client.Get_Command_Result(En_Cim_Command.PTSTR)) { Step = LiftInSteps.S1530_PANEL_IN_DATA_CIM_SEND; } else { Step = LiftInSteps.S1520_PORT_STATUS_CIM_SEND; } } break; } case LiftInSteps.S1530_PANEL_IN_DATA_CIM_SEND: { if (equipment.cim_mode != En_Cim_Mode.Online) { Step = LiftInSteps.S1999_LIFT_LOAD_END; return; } if (equipment.cim_client.Send_Tray_In_Check("E123456", TrayID)) { Step = LiftInSteps.S1535_PANEL_IN_DATA_CIM_SEND_CHECK; } break; } case LiftInSteps.S1535_PANEL_IN_DATA_CIM_SEND_CHECK: { if (equipment.cim_mode != En_Cim_Mode.Online) { Step = LiftInSteps.S1999_LIFT_LOAD_END; return; } if (equipment.cim_client.Get_Command_Ack(En_Cim_Command.TINRQ)) { if (equipment.cim_client.Get_Command_Result(En_Cim_Command.TINRQ)) { // 현재 사용 하지 않음... 추후 CIM에서 값 보내주면 사용. // Step = LiftInSteps.S1540_CIM_SERVER_RESULT_CHECK; Step = LiftInSteps.S1999_LIFT_LOAD_END; } else { Step = LiftInSteps.S1530_PANEL_IN_DATA_CIM_SEND; } } break; } case LiftInSteps.S1540_CIM_SERVER_RESULT_CHECK: { if (equipment.cim_mode != En_Cim_Mode.Online) { Step = LiftInSteps.S1999_LIFT_LOAD_END; return; } if (equipment.cim_server.Get_Command_Ack(En_Cim_Command.TINRT)) { if (equipment.cim_server.Get_Command_Result(En_Cim_Command.TINRT) && equipment.cim_server.Tray_ID == TrayID) { Step = LiftInSteps.S1999_LIFT_LOAD_END; } else { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0960_LD_IN_TRAY_QR_MISS_MATCH_ERROR); Step = LiftInSteps.S3000_TRAY_UNLOADING_START; } } else { if (sequenceChangedTime.Seconds > 20) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0920_CIM_COMMUNICATION_ERROR); Step = LiftInSteps.S3000_TRAY_UNLOADING_START; } } break; } case LiftInSteps.S1999_LIFT_LOAD_END: { Step = LiftInSteps.S0000_WAIT; break; } } } public void UpTray() { switch(Step) { case LiftInSteps.S2000_LIFT_UP_START: { Step = LiftInSteps.S2100_TRAY_TRANSTER_POSITION_STAY_CHECK; break; } case LiftInSteps.S2100_TRAY_TRANSTER_POSITION_STAY_CHECK: { //굳이 없어두 될듯 ? 220523 //if (equipment.loader.TrayTransfer.IsStayPosition) //{ // Step = LiftInSteps.S2200_ALIGN_TOP_BACKWARD; //} //else if(sequenceChangedTime.Seconds > 30) //{ // Interlock_Manager.Add_Interlock_Msg("LD Tray In Lift Loading can't run.", "LD Tray X is not empty position."); //} Step = LiftInSteps.S2200_ALIGN_TOP_BACKWARD; break; } case LiftInSteps.S2200_ALIGN_TOP_BACKWARD: { if (AlignerTop.IsWorkEnd) { if (AlignerTop.IsBackward) { Step = LiftInSteps.S2210_STACKER_BACKWARD; } else { AlignerTop.Backward(); } } break; } case LiftInSteps.S2210_STACKER_BACKWARD: { if (Stacker.IsWorkEnd) { if (Stacker.IsBackward) { Step = LiftInSteps.S2220_UNCLAMP; } else { Stacker.Backward(); } } break; } case LiftInSteps.S2220_UNCLAMP: { if (Clamper.IsWorkEnd) { if (Clamper.IsUnclamp) { Step = LiftInSteps.S2300_LIFT_UP; } else { Clamper.Unclamp(); } } break; } case LiftInSteps.S2300_LIFT_UP: { if(MoveTrayInPosition(TrayInPosition)) { Step = LiftInSteps.S2305_LIFT_UP_CHECK; } break; } case LiftInSteps.S2305_LIFT_UP_CHECK: { if (sequenceChangedTime.Seconds < 0.5) return; if (IsLiftLimitSensor1 || IsLiftLimitSensor2) { if (MotorZ.Move_Stop()) { //count_set_view = new Form_Tray_Count_Set("LD TRAY IN", equipment.LoaderInTrayCount, true); //tray_count_set_show = true; if(IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0563_LD_TRAY_IN_LIFT_UP_1_1_SENSOR_CHECK); } if(IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0564_LD_TRAY_IN_LIFT_UP_1_2_SENSOR_CHECK); } Step = LiftInSteps.S1340_LIFT_DOWN; return; } } if(MotorZ.MotionComplete) { if(MotorZ.Is_Inposition(TrayInPosition, equipment.Setting.Inposition_Offset)) { _pitchPosition = 0; if(IsLiftInSensor1 && IsLiftInSensor2) { Step = LiftInSteps.S2310_LIFT_PITCH_DOWN; } else { Step = LiftInSteps.S2320_LIFT_PITCH_UP; } } else { Interlock_Manager.Add_Interlock_Msg("791, LD Tray In Lift Loading can't run.", $"LD Tray Lift is not up position({MotorZ.Position}, {TrayInPosition})."); Step = LiftInSteps.S2300_LIFT_UP; } } break; } case LiftInSteps.S2310_LIFT_PITCH_DOWN: { if (Math.Abs(_pitchPosition) > equipment.Setting.Tray_Alarm_Range) { //count_set_view = new Form_Tray_Count_Set("LD TRAY IN", equipment.LoaderInTrayCount, false); //tray_count_set_show = true; //Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0950_LD_TRAY_IN_PITCH_RANGE_ALARM); Step = LiftInSteps.S1340_LIFT_DOWN; } else { _pitchPosition -= equipment.Setting.Tray_Move_Pitch; MoveTrayInPosition(TrayInPosition + _pitchPosition); Step = LiftInSteps.S2315_LIFT_PITCH_DOWN_CHECK; } break; } case LiftInSteps.S2315_LIFT_PITCH_DOWN_CHECK: { if (sequenceChangedTime.Seconds < 0.5) return; if (MotorZ.MotionComplete) { if (MotorZ.Is_Inposition(TrayInPosition + _pitchPosition, equipment.Setting.Inposition_Offset)) { if (IsLiftInSensor1 && IsLiftInSensor2) { Step = LiftInSteps.S2310_LIFT_PITCH_DOWN; } else { Step = LiftInSteps.S2320_LIFT_PITCH_UP; } } else { Interlock_Manager.Add_Interlock_Msg("929, LD Tray In Lift Loading can't run.", $"LD Tray Lift is not up position({MotorZ.Position}, {TrayInPosition + _pitchPosition})."); Step = LiftInSteps.S2310_LIFT_PITCH_DOWN; } } break; } case LiftInSteps.S2320_LIFT_PITCH_UP: { if (Math.Abs(_pitchPosition) > equipment.Setting.Tray_Alarm_Range) { //count_set_view = new Form_Tray_Count_Set("LD TRAY IN", equipment.LoaderInTrayCount, false); //tray_count_set_show = true; //Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0950_LD_TRAY_IN_PITCH_RANGE_ALARM); Step = LiftInSteps.S1340_LIFT_DOWN; } else { _pitchPosition += equipment.Setting.Tray_Move_Pitch; sequenceChangedTime.Start(); MoveTrayInPosition(TrayInPosition + _pitchPosition); Step = LiftInSteps.S2325_LIFT_PITCH_UP_CHECK; } break; } case LiftInSteps.S2325_LIFT_PITCH_UP_CHECK: { if (sequenceChangedTime.Seconds < 0.5) return; if (IsLiftLimitSensor1 || IsLiftLimitSensor2) { if (MotorZ.Move_Stop()) { //count_set_view = new Form_Tray_Count_Set("LD TRAY IN", equipment.LoaderInTrayCount, true); //tray_count_set_show = true; if (IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0563_LD_TRAY_IN_LIFT_UP_1_1_SENSOR_CHECK); } if (IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0564_LD_TRAY_IN_LIFT_UP_1_2_SENSOR_CHECK); } Step = LiftInSteps.S1340_LIFT_DOWN; return; } } if (MotorZ.MotionComplete) { if (MotorZ.Is_Inposition(TrayInPosition + _pitchPosition, equipment.Setting.Inposition_Offset)) { if (IsLiftInSensor1 && IsLiftInSensor2) { Step = LiftInSteps.S2330_LIFT_PITCH_LAST_UP; } else { Step = LiftInSteps.S2320_LIFT_PITCH_UP; } } else { Interlock_Manager.Add_Interlock_Msg("1008, LD Tray In Lift Loading can't run.", $"LD Tray Lift is not up position({MotorZ.Position}, {TrayInPosition + _pitchPosition})."); Step = LiftInSteps.S2320_LIFT_PITCH_UP; } } break; } case LiftInSteps.S2330_LIFT_PITCH_LAST_UP: { _pitchPosition += equipment.Setting.LD_In_Tray_Move_Last_Pitch; MoveTrayInPosition(TrayInPosition + _pitchPosition); Step = LiftInSteps.S2335_LIFT_PITCH_LAST_UP_CHECK; break; } case LiftInSteps.S2335_LIFT_PITCH_LAST_UP_CHECK: { if (sequenceChangedTime.Seconds < 0.5) return; if (IsLiftLimitSensor1 || IsLiftLimitSensor2) { if (MotorZ.Move_Stop()) { //count_set_view = new Form_Tray_Count_Set("LD TRAY IN", equipment.LoaderInTrayCount, true); //tray_count_set_show = true; if (IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0563_LD_TRAY_IN_LIFT_UP_1_1_SENSOR_CHECK); } if (IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0564_LD_TRAY_IN_LIFT_UP_1_2_SENSOR_CHECK); } Step = LiftInSteps.S1340_LIFT_DOWN; return; } } if (MotorZ.MotionComplete) { if (MotorZ.Is_Inposition(TrayInPosition + _pitchPosition, equipment.Setting.Inposition_Offset)) { if (IsLiftInSensor1 && IsLiftInSensor2) { _trayCount = equipment.LoaderInTrayCount; Step = LiftInSteps.S2400_CLAMP; } else { //count_set_view = new Form_Tray_Count_Set("LD TRAY IN", equipment.LoaderInTrayCount, false); //tray_count_set_show = true; if (IsLiftInSensor1 == false) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0565_LD_TRAY_IN_LIFT_UP_2_1_SENSOR_CHECK); } if (IsLiftInSensor2 == false) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0566_LD_TRAY_IN_LIFT_UP_2_2_SENSOR_CHECK); } Step = LiftInSteps.S1340_LIFT_DOWN; } } else { Interlock_Manager.Add_Interlock_Msg("1064, LD Tray In Lift Loading can't run.", $"LD Tray Lift is not up position({MotorZ.Position}, {TrayInPosition + _pitchPosition})."); Step = LiftInSteps.S2330_LIFT_PITCH_LAST_UP; } } break; } case LiftInSteps.S2340_LIFT_DOWN: { if (MoveStayPosition()) { Step = LiftInSteps.S2345_LIFT_DOWN_CHECK; } break; } case LiftInSteps.S2345_LIFT_DOWN_CHECK: { if (sequenceChangedTime.Seconds < 0.5) return; if (MotorZ.MotionComplete) { if (IsStayPosition) { Step = LiftInSteps.S2350_TRAY_COUNT_SET; } else { Interlock_Manager.Add_Interlock_Msg("LD Tray In Lift Loading can't run.", $"LD Tray Lift is not Wait position."); Step = LiftInSteps.S2340_LIFT_DOWN; } } break; } case LiftInSteps.S2350_TRAY_COUNT_SET: { if(count_set_view.DialogResult == DialogResult.OK) { equipment.LoaderInTrayCount = count_set_view.Count; Step = LiftInSteps.S2300_LIFT_UP; } break; } case LiftInSteps.S2400_CLAMP: { if (Clamper.IsWorkEnd) { if (Clamper.IsClamp) { Step = LiftInSteps.S2410_ALIGN_TOP_FORWARD; } else { Clamper.Clamp(); } } break; } case LiftInSteps.S2410_ALIGN_TOP_FORWARD: { if (AlignerTop.IsWorkEnd) { if (AlignerTop.IsForward) { if (equipment.Mode.LD_Stacker_Skip) { IsBcrReadBit = true; Step = LiftInSteps.S2500_TRAY_ID_READ_WAIT; } else { Step = LiftInSteps.S2420_STACKER_FORWARD; } } else { AlignerTop.Forward(); } } break; } case LiftInSteps.S2420_STACKER_FORWARD: { if (Stacker.IsWorkEnd) { if (Stacker.IsForward) { IsBcrReadBit = true; Step = LiftInSteps.S2500_TRAY_ID_READ_WAIT; } else { Stacker.Forward(); } } break; } case LiftInSteps.S2500_TRAY_ID_READ_WAIT: { if (IsBcrReadBit == false) { if (SetTrayId(TrayID)) { Step = LiftInSteps.S2510_TRAY_PANEL_DATA_SET; } } break; } case LiftInSteps.S2510_TRAY_PANEL_DATA_SET: { if(IsFirstTray) { SetPanelInfo(true); } else { SetPanelInfo(false); } Step = LiftInSteps.S2515_TRAY_PANEL_DATA_SET_CHECK; break; } case LiftInSteps.S2515_TRAY_PANEL_DATA_SET_CHECK: { if((IsFirstTray && IsPanelEmpty) || IsPanelFull) { if (IsFirstTray && equipment.cim_mode == En_Cim_Mode.Online) { Step = LiftInSteps.S2520_PORT_STATUS_CIM_SEND; } else { Step = LiftInSteps.S2999_LIFT_UP_END; } } else { Step = LiftInSteps.S2510_TRAY_PANEL_DATA_SET; } break; } case LiftInSteps.S2520_PORT_STATUS_CIM_SEND: { if (equipment.cim_mode != En_Cim_Mode.Online) { Step = LiftInSteps.S2999_LIFT_UP_END; return; } if (equipment.cim_client.Send_Port_Status("E12345678", En_Port_ID.P01, En_Tray_Code.P, false, En_Port_Status.FUL)) { Step = LiftInSteps.S2525_PORT_STATUS_CIM_SEND_CHECK; } break; } case LiftInSteps.S2525_PORT_STATUS_CIM_SEND_CHECK: { if (equipment.cim_mode != En_Cim_Mode.Online) { Step = LiftInSteps.S2999_LIFT_UP_END; return; } if (equipment.cim_client.Get_Command_Ack(En_Cim_Command.PTSTR)) { if (equipment.cim_client.Get_Command_Result(En_Cim_Command.PTSTR)) { Step = LiftInSteps.S2530_PANEL_IN_DATA_CIM_SEND; } else { Step = LiftInSteps.S2520_PORT_STATUS_CIM_SEND; } } break; } case LiftInSteps.S2530_PANEL_IN_DATA_CIM_SEND: { if (equipment.cim_mode != En_Cim_Mode.Online) { Step = LiftInSteps.S2999_LIFT_UP_END; return; } if (equipment.cim_client.Send_Tray_In_Check("E123456", TrayID)) { Step = LiftInSteps.S2535_PANEL_IN_DATA_CIM_SEND_CHECK; } break; } case LiftInSteps.S2535_PANEL_IN_DATA_CIM_SEND_CHECK: { if (equipment.cim_mode != En_Cim_Mode.Online) { Step = LiftInSteps.S2999_LIFT_UP_END; return; } if (equipment.cim_client.Get_Command_Ack(En_Cim_Command.TINRQ)) { if (equipment.cim_client.Get_Command_Result(En_Cim_Command.TINRQ)) { // 현재 사용 하지 않음... 추후 CIM에서 값 보내주면 사용. // Step = LiftInSteps.S2540_CIM_SERVER_RESULT_CHECK; Step = LiftInSteps.S2999_LIFT_UP_END; } else { Step = LiftInSteps.S2530_PANEL_IN_DATA_CIM_SEND; } } break; } case LiftInSteps.S2540_CIM_SERVER_RESULT_CHECK: { if (equipment.cim_mode != En_Cim_Mode.Online) { Step = LiftInSteps.S2999_LIFT_UP_END; return; } if (equipment.cim_server.Get_Command_Ack(En_Cim_Command.TINRT)) { if (equipment.cim_server.Get_Command_Result(En_Cim_Command.TINRT) && equipment.cim_server.Tray_ID == TrayID) { Step = LiftInSteps.S2999_LIFT_UP_END; } else { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0960_LD_IN_TRAY_QR_MISS_MATCH_ERROR); Step = LiftInSteps.S3000_TRAY_UNLOADING_START; } } else { if (sequenceChangedTime.Seconds > 20) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0920_CIM_COMMUNICATION_ERROR); Step = LiftInSteps.S3000_TRAY_UNLOADING_START; } } break; } case LiftInSteps.S2999_LIFT_UP_END: { Step = LiftInSteps.S0000_WAIT; break; } } } public void UnloadingTray() { switch (Step) { case LiftInSteps.S3000_TRAY_UNLOADING_START: { Step = LiftInSteps.S3100_CONVEYOR_LIFT_SENSOR_CHECK; break; } case LiftInSteps.S3100_CONVEYOR_LIFT_SENSOR_CHECK: { if (equipment.loader.ConveyorIn.IsLiftInSensor || equipment.loader.ConveyorIn.IsLiftInCompleteSensor) { if(equipment.loader.ConveyorIn.IsLiftInSensor) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0552_LD_TRAY_IN_CONVEYOR_LIFT_IN_SENSOR_CHECK); } if(equipment.loader.ConveyorIn.IsLiftInCompleteSensor) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0553_LD_TRAY_IN_CONVEYOR_LIFT_IN_COMPLETE_SENSOR_CHECK); } } else { Step = LiftInSteps.S3200_UNCLAMP; } break; } case LiftInSteps.S3200_UNCLAMP: { if (Clamper.IsWorkEnd) { if (Clamper.IsUnclamp) { Step = LiftInSteps.S3210_STACKER_BACKWARD; } else { Clamper.Unclamp(); } } break; } case LiftInSteps.S3210_STACKER_BACKWARD: { if (Stacker.IsWorkEnd) { if (Stacker.IsBackward) { Step = LiftInSteps.S3220_ALIGN_TOP_BACKWARD; } else { Stacker.Backward(); } } break; } case LiftInSteps.S3220_ALIGN_TOP_BACKWARD: { if (AlignerTop.IsWorkEnd) { if (AlignerTop.IsBackward) { Step = LiftInSteps.S3230_ALIGN_Y_FORWARD; } else { AlignerTop.Backward(); } } break; } case LiftInSteps.S3230_ALIGN_Y_FORWARD: { if (equipment.loader.ConveyorIn.AlignerY.IsWorkEnd) { if (equipment.loader.ConveyorIn.AlignerY.IsForward) { Step = LiftInSteps.S3240_ALIGN_X_BACKWARD; } else { equipment.loader.ConveyorIn.AlignerY.Forward(); } } break; } case LiftInSteps.S3240_ALIGN_X_BACKWARD: { if (equipment.loader.ConveyorIn.AlignerX.IsWorkEnd) { if (equipment.loader.ConveyorIn.AlignerX.IsBackward) { Step = LiftInSteps.S3300_LIFT_DOWN; } else { equipment.loader.ConveyorIn.AlignerX.Backward(); } } break; } case LiftInSteps.S3300_LIFT_DOWN: { if(equipment.loader.ConveyorIn.IsLiftInSensor || equipment.loader.ConveyorIn.IsLiftInCompleteSensor || !equipment.loader.ConveyorIn.MotorX.MotionComplete) { if (equipment.loader.ConveyorIn.IsLiftInSensor) { Interlock_Manager.Add_Interlock_Msg("LD Tray In Lift Unloading can't run.", "Lift in sensor is detected."); } if (equipment.loader.ConveyorIn.IsLiftInCompleteSensor) { Interlock_Manager.Add_Interlock_Msg("LD Tray In Lift Unloading can't run.", "Lift in complete sensor is detected."); } if (!equipment.loader.ConveyorIn.MotorX.MotionComplete) { Interlock_Manager.Add_Interlock_Msg("LD Tray In Lift Unloading can't run.", "LD In Conveyor status is moving."); } } else { if (MoveStayPosition()) { Step = LiftInSteps.S3305_LIFT_DOWN_CHECK; } } break; } case LiftInSteps.S3305_LIFT_DOWN_CHECK: { if (sequenceChangedTime.Seconds < 0.5) return; if (MotorZ.MotionComplete) { if (IsStayPosition) { equipment.LoaderInTrayCount = 0; _trayCount = 0; if (equipment.loader.ConveyorIn.IsLiftInSensor || equipment.loader.ConveyorIn.IsLiftInCompleteSensor) { Step = LiftInSteps.S3400_CONVEYOR_UNLOAD; } else { Step = LiftInSteps.S3500_PORT_STATUS_CIM_SEND; } } else { Interlock_Manager.Add_Interlock_Msg("LD Tray In Lift Unloading can't run.", $"Lift is not wait position."); Step = LiftInSteps.S3300_LIFT_DOWN; } } break; } case LiftInSteps.S3400_CONVEYOR_UNLOAD: { equipment.loader.ConveyorIn.Unload(); Step = LiftInSteps.S3405_CONVEYOR_UNLOAD_CHECK; break; } case LiftInSteps.S3405_CONVEYOR_UNLOAD_CHECK: { if (equipment.loader.ConveyorIn.IsWorkEnd) { _trayCount = 0; Step = LiftInSteps.S3500_PORT_STATUS_CIM_SEND; } break; } case LiftInSteps.S3500_PORT_STATUS_CIM_SEND: { if (equipment.cim_mode != En_Cim_Mode.Online) { Step = LiftInSteps.S3999_TRAY_UNLOADING_END; return; } if (equipment.cim_client.Send_Port_Status("E12345678", En_Port_ID.P01, En_Tray_Code.P, false, En_Port_Status.AVL)) { Step = LiftInSteps.S3505_PORT_STATUS_CIM_SEND_CHECK; } break; } case LiftInSteps.S3505_PORT_STATUS_CIM_SEND_CHECK: { if (equipment.cim_mode != En_Cim_Mode.Online) { Step = LiftInSteps.S3999_TRAY_UNLOADING_END; return; } if (equipment.cim_client.Get_Command_Ack(En_Cim_Command.PTSTR)) { if (equipment.cim_client.Get_Command_Result(En_Cim_Command.PTSTR)) { Step = LiftInSteps.S3999_TRAY_UNLOADING_END; } else { Step = LiftInSteps.S3500_PORT_STATUS_CIM_SEND; } } break; } case LiftInSteps.S3999_TRAY_UNLOADING_END: { Step = LiftInSteps.S0000_WAIT; break; } } } public bool SetPanelInfo(bool blank) { if (equipment.Cur_Main_Recipe.tray_info== null) return false; bool check = true; int row = equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row; int panel_num = 0; Panel_Info panel = new Panel_Info(); panel.Blank = blank; if (blank == false) { panel.Tray_ID = TrayID; } for (int i = 0; i < row; i++) { for (int j = 1; j <= equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row_Data[i].Column; j++) { panel_num++; panel.Tray_Num = (equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Tray_Count - equipment.LoaderInTrayCount) + 1; panel.Panel_Num = panel_num; panel.Row_Num = i + 1; panel.Column_Num = j; check &= Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.LD_Tray_In, panel); } } return check; } public bool SetTrayId(string tray_id) { if (equipment.Cur_Main_Recipe.tray_info== null) return false; bool check = true; int row = equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row; int panel_num = 0; for (int i = 0; i < row; i++) { for (int j = 1; j <= equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row_Data[i].Column; j++) { panel_num++; Panel_Info panel = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.LD_Tray_In, panel_num); panel.Tray_ID = tray_id; check &= Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.LD_Tray_In, panel); } } return check; } public bool MoveStayPosition() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.LD_Tray_In_Z_Wait_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.LD_Tray_In_Z_Wait_Velocity, out value); velocity = double.Parse($"{value}"); return MotorZ.Move_Absolute_Pos(position, velocity); } public bool MoveTrayInPosition(double position) { object value; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.LD_Tray_In_Z_Process_Velocity, out value); velocity = double.Parse($"{value}"); return MotorZ.Move_Absolute_Pos(position, velocity); } public bool Unload() { if (UnitMode == En_Equipment_Mode.Stop) { Step = LiftInSteps.S3000_TRAY_UNLOADING_START; return true; } else return false; } #endregion } }