using System; namespace SHARP_CLAS_UI { public class UnloaderConveyorIn : Conveyor { #region Property public ConveyorInSteps Step { get { return _step; } private set { _step = value; } } public override bool IsWorkEnd { get { if(Step == ConveyorInSteps.S0000_WAIT) { return true; } else { return false; } } } public override bool IsStayPosition { get { return true; } } #endregion #region Field private ConveyorInSteps _step; private ConveyorInSteps _oldStep; private ConveyorHomeStep _homeStep; #endregion #region Construct public UnloaderConveyorIn(Equipment equipment) : base(equipment, MotorAxis.ULD_Tray_IN_Port, "UnloaderConveyorIn") { Initialize(InputData.ULD_Empty_In_Conveyor_In_Sensor, InputData.ULD_Empty_In_Conveyor_In_Complete_Sensor, InputData.ULD_Empty_In_Conveyor_Lift_In_Sensor, InputData.ULD_Empty_In_Conveyor_Lift_In_Complete_Sensor); pauseDisableList.Add(ConveyorInSteps.S1210_LIFT_IN_SENSOR_CHECK); pauseDisableList.Add(ConveyorInSteps.S1220_LIFT_COMPLETE_SENSOR_CHECK); pauseDisableList.Add(ConveyorInSteps.S1230_CONVEYOR_STOP); pauseDisableList.Add(ConveyorInSteps.S2310_CONVEYOR_IN_COMPLETE_SENSOR_CHECK); pauseDisableList.Add(ConveyorInSteps.S2320_CONVEYOR_IN_SENSOR_CHECK); pauseDisableList.Add(ConveyorInSteps.S2330_CONVEYOR_STOP); AlignerX.Initialize(OutputData.ULD_Empty_In_Align_X_Sol_Valve, InputData.ULD_Empty_In_Align_X_1_Fwd_Sensor, InputData.ULD_Empty_In_Align_X_2_Fwd_Sensor, InputData.ULD_Empty_In_Align_X_1_Bwd_Sensor, InputData.ULD_Empty_In_Align_X_2_Bwd_Sensor, En_Alarm_List.AL_0704_ULD_TRAY_EMPTY_ALIGN_X_1_FWD_SENSOR_CHECK, En_Alarm_List.AL_0705_ULD_TRAY_EMPTY_ALIGN_X_2_FWD_SENSOR_CHECK, En_Alarm_List.AL_0706_ULD_TRAY_EMPTY_ALIGN_X_1_BWD_SENSOR_CHECK, En_Alarm_List.AL_0707_ULD_TRAY_EMPTY_ALIGN_X_2_BWD_SENSOR_CHECK); AlignerY.Initialize(OutputData.ULD_Empty_In_Align_Y_Sol_Valve, InputData.ULD_Empty_In_Align_Y_1_Fwd_Sensor, InputData.ULD_Empty_In_Align_Y_2_Fwd_Sensor, InputData.ULD_Empty_In_Align_Y_1_Bwd_Sensor, InputData.ULD_Empty_In_Align_Y_2_Bwd_Sensor, En_Alarm_List.AL_0708_ULD_TRAY_EMPTY_ALIGN_Y_1_FWD_SENSOR_CHECK, En_Alarm_List.AL_0709_ULD_TRAY_EMPTY_ALIGN_Y_2_FWD_SENSOR_CHECK, En_Alarm_List.AL_0710_ULD_TRAY_EMPTY_ALIGN_Y_1_BWD_SENSOR_CHECK, En_Alarm_List.AL_0711_ULD_TRAY_EMPTY_ALIGN_Y_2_BWD_SENSOR_CHECK); MotorX.Check_Jog_Interlock = Jog_Interlock; MotorX.Check_Move_Interlock = Move_Interlock; } #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; } public void Init_Seq() { if(Step < ConveyorInSteps.S2000_TRAY_UNLOADING_START || ConveyorInSteps.S2999_TRAY_UNLOADING_END < Step) Step = ConveyorInSteps.S0000_WAIT; _homeStep = ConveyorHomeStep.S0000_WAIT; } public void ExecuteStepAuto() { if(Step == ConveyorInSteps.S0000_WAIT) { if (equipment.UnloaderInTrayCount <= 0 && equipment.unloader.LiftIn.IsStayPosition && IsLiftInSensor == false && IsLiftInCompleteSensor == false) { if(equipment.Mode.Agv_Skip) { Step = ConveyorInSteps.S1000_TRAY_LOADING_START; } else { //AGV Load μΆ”κ°€. if (IsConveyorInCompleteSensor || IsConveyorInSensor) { Step = ConveyorInSteps.S1000_TRAY_LOADING_START; } else { Step = ConveyorInSteps.S0100_AGV_LOADING_START; } } } } } public override void MonitoringStatus() { if (((ConveyorInSteps.S1000_TRAY_LOADING_START <= Step && Step < ConveyorInSteps.S1200_CONVEYOR_MOVE_IN) && (ConveyorInSteps.S1230_CONVEYOR_STOP <= Step && Step <= ConveyorInSteps.S1999_TRAY_LOADING_END)) || Step == ConveyorInSteps.S0000_WAIT) { if (!MotorX.MotionComplete) MotorX.Move_Stop(); } else { if (Alarm_Manager.Instance.Occured_List.Exists(X => X.Heavy == true) || Alarm_Manager.Instance.Occured_List.Exists(X => X.Code == En_Alarm_List.AL_0053_ULD_LIGHT_CURTAIN_ALARM)) { sequenceChangedTime.Start(); if (!MotorX.MotionComplete) { if (Alarm_Manager.Instance.Occured_List.Exists(x => x.Code == En_Alarm_List.AL_0053_ULD_LIGHT_CURTAIN_ALARM)) { equipment.Write_Exception_Log($"ULD Conveyor Empty Light Curtain!, conveyor sensor : {IsConveyorInSensor}, conveyor in sensor : {IsConveyorInCompleteSensor}"); } MotorX.Move_Stop(); } } } if (equipment.User.Level != En_User_Level.Master && equipment.Door_Opened) { if (MotorX.MotionComplete == false) { MotorX.Move_Stop(); } } } public override void ExecuteStep() { if (_oldStep != Step) { sequenceChangedTime.Restart(); _oldStep = Step; WriteSequenceLog(Step.ToString()); } AlignerX.ExecuteProcess(); AlignerY.ExecuteProcess(); //μƒμ‹œ Run. if (UnitMode != En_Equipment_Mode.Home) { UnloadingTray(); AgvLoading(); } 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; } else 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) ExecuteStepAuto(); LoadingTray(); } } private void ExecuteHome() { switch(_homeStep) { case ConveyorHomeStep.S0000_WAIT: { _homeStep = ConveyorHomeStep.S1000_STATUS_CHECK; break; } case ConveyorHomeStep.S1000_STATUS_CHECK: { if (MotorX.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0501_ULD_TRAY_EMPTY_ERROR_STOP); } else if (!MotorX.PowerOn) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0500_ULD_TRAY_EMPTY_POWER_OFF); } else { _homeStep = ConveyorHomeStep.S1200_LIFT_SENSOR_CHECK; } break; } case ConveyorHomeStep.S1100_CONVEYOR_SENSOR_CHECK: { if (IsConveyorInSensor || IsConveyorInCompleteSensor) { if (IsConveyorInSensor) { Interlock_Manager.Add_Interlock_Msg("ULD Conveyor Empty Home can't run.", "Conveyor in sensor is detected."); } if (IsConveyorInCompleteSensor) { Interlock_Manager.Add_Interlock_Msg("ULD Conveyor Empty Home can't run.", "Conveyor in complete sensor is detected."); } } else { _homeStep = ConveyorHomeStep.S1200_LIFT_SENSOR_CHECK; } break; } case ConveyorHomeStep.S1200_LIFT_SENSOR_CHECK: { if (IsLiftInSensor || IsLiftInCompleteSensor) { if (IsLiftInSensor) { Interlock_Manager.Add_Interlock_Msg("ULD Conveyor Empty Home can't run.", "Lift in sensor is detected."); } if (IsLiftInCompleteSensor) { Interlock_Manager.Add_Interlock_Msg("ULD Conveyor Empty Home can't run.", "Lift in complete sensor is detected."); } } else { _homeStep = ConveyorHomeStep.S2000_POSITION_CLEAR; } break; } case ConveyorHomeStep.S2000_POSITION_CLEAR: { if (MotorX.Position_Clear()) { _homeStep = ConveyorHomeStep.S9999_END; } break; } case ConveyorHomeStep.S9999_END: { isHomeComplete = true; _homeStep = ConveyorHomeStep.S0000_WAIT; break; } } } private void AgvLoading() { switch (Step) { case ConveyorInSteps.S0100_AGV_LOADING_START: { Step = ConveyorInSteps.S0110_EQP_LOAD_ENABLE_ON; break; } case ConveyorInSteps.S0110_EQP_LOAD_ENABLE_ON: { equipment.Board_Control.IO_manager.Set_Output(OutputData.AGV_ULD_Empty_Request_For_Transfer_LD_ULD, true); Step = ConveyorInSteps.S0120_EQP_LOAD_ENABLE_ON_CHECK; break; } case ConveyorInSteps.S0120_EQP_LOAD_ENABLE_ON_CHECK: { if (equipment.Board_Control.IO_manager.Get_Output(OutputData.AGV_ULD_Empty_Request_For_Transfer_LD_ULD)) { Step = ConveyorInSteps.S0130_AGV_LOAD_STATUS_ON_CHECK; } else { Step = ConveyorInSteps.S0110_EQP_LOAD_ENABLE_ON; } break; } case ConveyorInSteps.S0130_AGV_LOAD_STATUS_ON_CHECK: { if (equipment.Mode.Agv_Skip) { equipment.Board_Control.IO_manager.Set_Output(OutputData.AGV_ULD_Empty_Request_For_Transfer_LD_ULD, false); Step = ConveyorInSteps.S0000_WAIT; } else { if (equipment.Board_Control.IO_manager.Get_Input(InputData.AGV_ULD_Empty_Moving_Load_Status)) { Step = ConveyorInSteps.S0140_EQP_LOAD_STATUS_ON; } } break; } case ConveyorInSteps.S0140_EQP_LOAD_STATUS_ON: { equipment.Board_Control.IO_manager.Set_Output(OutputData.AGV_ULD_Empty_Moving_Load_Status, true); Step = ConveyorInSteps.S0150_EQP_LOAD_STATUS_ON_CHECK; break; } case ConveyorInSteps.S0150_EQP_LOAD_STATUS_ON_CHECK: { if (equipment.Board_Control.IO_manager.Get_Output(OutputData.AGV_ULD_Empty_Moving_Load_Status)) { Step = ConveyorInSteps.S0160_AGV_LOAD_ENABLE_ON_STOP_REQUEST_OFF_CHECK; } else { Step = ConveyorInSteps.S0140_EQP_LOAD_STATUS_ON; } break; } case ConveyorInSteps.S0160_AGV_LOAD_ENABLE_ON_STOP_REQUEST_OFF_CHECK: { if (equipment.Board_Control.IO_manager.Get_Input(InputData.AGV_ULD_Empty_Request_For_Transfer_LD_ULD)) { Step = ConveyorInSteps.S0200_EQP_CONVEYOR_RUN_ON; } break; } case ConveyorInSteps.S0200_EQP_CONVEYOR_RUN_ON: { equipment.Board_Control.IO_manager.Set_Output(OutputData.AGV_ULD_Empty_Conveyor_In_Operation, true); Step = ConveyorInSteps.S0210_EQP_CONVEYOR_RUN_ON_CHECK; break; } case ConveyorInSteps.S0210_EQP_CONVEYOR_RUN_ON_CHECK: { if (equipment.Board_Control.IO_manager.Get_Output(OutputData.AGV_ULD_Empty_Conveyor_In_Operation)) { JogNegative(); Step = ConveyorInSteps.S0220_EQP_LOAD_ENABLE_OFF; } else { Step = ConveyorInSteps.S0200_EQP_CONVEYOR_RUN_ON; } break; } case ConveyorInSteps.S0220_EQP_LOAD_ENABLE_OFF: { equipment.Board_Control.IO_manager.Set_Output(OutputData.AGV_ULD_Empty_Request_For_Transfer_LD_ULD, false); Step = ConveyorInSteps.S0230_EQP_LOAD_ENABLE_OFF_CHECK; break; } case ConveyorInSteps.S0230_EQP_LOAD_ENABLE_OFF_CHECK: { if (equipment.Board_Control.IO_manager.Get_Output(OutputData.AGV_ULD_Empty_Conveyor_In_Operation)) { Step = ConveyorInSteps.S0240_AGV_CONVEYOR_RUN_ON_CHECK; } else { Step = ConveyorInSteps.S0220_EQP_LOAD_ENABLE_OFF; } break; } case ConveyorInSteps.S0240_AGV_CONVEYOR_RUN_ON_CHECK: { if (equipment.Board_Control.IO_manager.Get_Input(InputData.AGV_ULD_Empty_Conveyor_In_Operation)) { Step = ConveyorInSteps.S0250_CONVEYOR_RUN; } break; } case ConveyorInSteps.S0250_CONVEYOR_RUN: { Step = ConveyorInSteps.S0300_CONVEYOR_COMPLETE_SENSOR_ON_CHECK; break; } case ConveyorInSteps.S0300_CONVEYOR_COMPLETE_SENSOR_ON_CHECK: { if (IsConveyorInCompleteSensor) { Step = ConveyorInSteps.S0310_CONVEYOR_STOP; } break; } case ConveyorInSteps.S0310_CONVEYOR_STOP: { if (Stop()) { Step = ConveyorInSteps.S0320_CONVEYOR_STOP_CHECK; } break; } case ConveyorInSteps.S0320_CONVEYOR_STOP_CHECK: { if (MotorX.MotionComplete) { Step = ConveyorInSteps.S0330_EQP_CONVEYOR_RUN_OFF; } else { Step = ConveyorInSteps.S0310_CONVEYOR_STOP; } break; } case ConveyorInSteps.S0330_EQP_CONVEYOR_RUN_OFF: { equipment.Board_Control.IO_manager.Set_Output(OutputData.AGV_ULD_Empty_Conveyor_In_Operation, false); Step = ConveyorInSteps.S0340_EQP_CONVEYOR_RUN_OFF_CHECK; break; } case ConveyorInSteps.S0340_EQP_CONVEYOR_RUN_OFF_CHECK: { if (equipment.Board_Control.IO_manager.Get_Output(OutputData.AGV_ULD_Empty_Conveyor_In_Operation) == false) { Step = ConveyorInSteps.S0350_EQP_LOAD_STATUS_OFF; } else { Step = ConveyorInSteps.S0330_EQP_CONVEYOR_RUN_OFF; } break; } case ConveyorInSteps.S0350_EQP_LOAD_STATUS_OFF: { equipment.Board_Control.IO_manager.Set_Output(OutputData.AGV_ULD_Empty_Request_For_Transfer_LD_ULD, false); Step = ConveyorInSteps.S0360_EQP_LOAD_STATUS_OFF_CHECK; break; } case ConveyorInSteps.S0360_EQP_LOAD_STATUS_OFF_CHECK: { if (equipment.Board_Control.IO_manager.Get_Output(OutputData.AGV_ULD_Empty_Request_For_Transfer_LD_ULD) == false) { Step = ConveyorInSteps.S0370_AGV_CONVEYOR_OFF_LOAD_STATUS_OFF_LOAD_ENABLE_OFF_CEHCK; } else { Step = ConveyorInSteps.S0350_EQP_LOAD_STATUS_OFF; } break; } case ConveyorInSteps.S0370_AGV_CONVEYOR_OFF_LOAD_STATUS_OFF_LOAD_ENABLE_OFF_CEHCK: { if (equipment.Board_Control.IO_manager.Get_Input(InputData.AGV_ULD_Empty_Conveyor_In_Operation) == false && equipment.Board_Control.IO_manager.Get_Input(InputData.AGV_ULD_Empty_Request_For_Transfer_LD_ULD) == false && equipment.Board_Control.IO_manager.Get_Input(InputData.AGV_ULD_Empty_Moving_Load_Status) == false) { Step = ConveyorInSteps.S0999_AGV_LOADING_END; } break; } case ConveyorInSteps.S0999_AGV_LOADING_END: { Step = ConveyorInSteps.S0000_WAIT; break; } } } public void LoadingTray() { switch (Step) { case ConveyorInSteps.S1000_TRAY_LOADING_START: { Step = ConveyorInSteps.S1100_LIFT_POSITION_STAY_CHECK; break; } case ConveyorInSteps.S1100_LIFT_POSITION_STAY_CHECK: { if (equipment.unloader.LiftIn.IsStayPosition) { Step = ConveyorInSteps.S1110_CONVEYOR_IN_SENSOR_CHECK; } break; } case ConveyorInSteps.S1110_CONVEYOR_IN_SENSOR_CHECK: { if (IsConveyorInSensor || IsConveyorInCompleteSensor) { Step = ConveyorInSteps.S1120_LIFT_IN_SENSOR_CHECK; } else { if(sequenceChangedTime.Seconds > 10) { sequenceChangedTime.Start(); Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0912_ULD_TRAY_EMPTY_IS_EMPTY); } } break; } case ConveyorInSteps.S1120_LIFT_IN_SENSOR_CHECK: { if (IsLiftInSensor || IsLiftInCompleteSensor) { if (IsLiftInSensor) Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0702_ULD_TRAY_EMPTY_CONVEYOR_LIFT_IN_SENSOR_CHECK); if (IsLiftInCompleteSensor) Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0703_ULD_TRAY_EMPTY_CONVEYOR_LIFT_IN_COMPLETE_SENSOR_CHECK); } else { Step = ConveyorInSteps.S1130_ALIGN_X_BWD; } break; } case ConveyorInSteps.S1130_ALIGN_X_BWD: { if (AlignerX.IsWorkEnd) { if (AlignerX.IsBackward) { Step = ConveyorInSteps.S1140_ALIGN_Y_FWD; } else { AlignerX.Backward(); } } break; } case ConveyorInSteps.S1140_ALIGN_Y_FWD: { if (AlignerY.IsWorkEnd) { if (AlignerY.IsForward) { Step = ConveyorInSteps.S1200_CONVEYOR_MOVE_IN; } else { AlignerY.Forward(); } } break; } case ConveyorInSteps.S1200_CONVEYOR_MOVE_IN: { if (equipment.sm.Get_Bit(Input_Memory_Address.UnLoading_Light_Curtain_Det)) { if (JogPositive()) { Step = ConveyorInSteps.S1210_LIFT_IN_SENSOR_CHECK; } } break; } case ConveyorInSteps.S1210_LIFT_IN_SENSOR_CHECK: { if (MotorX.MotionComplete) { if (!(Alarm_Manager.Instance.Occured_List.Exists(X => X.Heavy == true) || Alarm_Manager.Instance.Occured_List.Exists(X => X.Code == En_Alarm_List.AL_0053_ULD_LIGHT_CURTAIN_ALARM))) { JogPositive(); } } else { if (IsLiftInSensor) { Step = ConveyorInSteps.S1220_LIFT_COMPLETE_SENSOR_CHECK; } if (sequenceChangedTime.Seconds > equipment.Setting.Conveyor_Timeout) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0872_ULD_TRAY_EMPTY_CONVEYOR_TIMEOUT); Step = ConveyorInSteps.S1230_CONVEYOR_STOP; } } break; } case ConveyorInSteps.S1220_LIFT_COMPLETE_SENSOR_CHECK: { if (MotorX.MotionComplete) { if (!(Alarm_Manager.Instance.Occured_List.Exists(X => X.Heavy == true) || Alarm_Manager.Instance.Occured_List.Exists(X => X.Code == En_Alarm_List.AL_0053_ULD_LIGHT_CURTAIN_ALARM))) { JogPositive(); } } else { if (IsLiftInCompleteSensor) { Step = ConveyorInSteps.S1230_CONVEYOR_STOP; } else if (sequenceChangedTime.Seconds > equipment.Setting.Conveyor_Timeout) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0872_ULD_TRAY_EMPTY_CONVEYOR_TIMEOUT); Step = ConveyorInSteps.S1230_CONVEYOR_STOP; } } break; } case ConveyorInSteps.S1230_CONVEYOR_STOP: { if (Stop()) { Step = ConveyorInSteps.S1300_ALIGN_X_FWD; } break; } case ConveyorInSteps.S1300_ALIGN_X_FWD: { if (AlignerX.IsWorkEnd) { if (AlignerX.IsForward) { Step = ConveyorInSteps.S1320_ALIGN_Y_BWD; } else { AlignerX.Forward(); } } break; } case ConveyorInSteps.S1320_ALIGN_Y_BWD: { if (AlignerY.IsWorkEnd) { if (AlignerY.IsBackward) { Step = ConveyorInSteps.S1340_WAIT_TIME; } else { AlignerY.Backward(); } } break; } case ConveyorInSteps.S1340_WAIT_TIME: { if (sequenceChangedTime.Seconds > 2) { Step = ConveyorInSteps.S1400_ALIGN_Y_FWD; } break; } case ConveyorInSteps.S1400_ALIGN_Y_FWD: { if (AlignerY.IsWorkEnd) { if (AlignerY.IsForward) { Step = ConveyorInSteps.S1420_ALIGN_X_BWD; } else { AlignerY.Forward(); } } break; } case ConveyorInSteps.S1420_ALIGN_X_BWD: { if (AlignerX.IsWorkEnd) { if (AlignerX.IsBackward) { Step = ConveyorInSteps.S1999_TRAY_LOADING_END; } else { AlignerX.Backward(); } } break; } case ConveyorInSteps.S1999_TRAY_LOADING_END: { if (IsLiftInSensor || IsLiftInCompleteSensor) { equipment.unloader.LiftIn.IsFirstTray = true; equipment.sm.Set_Value(Process_Memory_Address.ULD_Tray_Empty_Count, equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Empty_Tray_Count); } Step = ConveyorInSteps.S0000_WAIT; break; } } } public void UnloadingTray() { switch (Step) { case ConveyorInSteps.S2000_TRAY_UNLOADING_START: { Step = ConveyorInSteps.S2100_LIFT_POSITION_STAY_CHECK; break; } case ConveyorInSteps.S2100_LIFT_POSITION_STAY_CHECK: { if (equipment.unloader.LiftIn.IsStayPosition) { Step = ConveyorInSteps.S2110_LIFT_SENSOR_CHECK; } break; } case ConveyorInSteps.S2110_LIFT_SENSOR_CHECK: { if (IsLiftInSensor || IsLiftInCompleteSensor) { Step = ConveyorInSteps.S2120_CONVEYOR_SENSOR_CHECK; } else { Step = ConveyorInSteps.S2330_CONVEYOR_STOP; } break; } case ConveyorInSteps.S2120_CONVEYOR_SENSOR_CHECK: { if (IsConveyorInSensor || IsConveyorInCompleteSensor) { if (IsConveyorInSensor) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0700_ULD_TRAY_EMPTY_CONVEYOR_IN_SENSOR_CHECK); } if (IsConveyorInCompleteSensor) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0701_ULD_TRAY_EMPTY_CONVEYOR_IN_COMPLETE_SENSOR_CHECK); } } else { Step = ConveyorInSteps.S2200_ALIGN_X_FWD; } break; } case ConveyorInSteps.S2200_ALIGN_X_FWD: { if (AlignerX.IsWorkEnd) { if (AlignerX.IsForward) { Step = ConveyorInSteps.S2220_ALIGN_Y_BWD; } else { AlignerX.Forward(); } } break; } case ConveyorInSteps.S2220_ALIGN_Y_BWD: { if (AlignerY.IsWorkEnd) { if (AlignerY.IsBackward) { Step = ConveyorInSteps.S2240_WAIT_TIME; } else { AlignerY.Backward(); } } break; } case ConveyorInSteps.S2240_WAIT_TIME: { if (sequenceChangedTime.Seconds > 2) { Step = ConveyorInSteps.S2250_ALIGN_Y_FWD; } break; } case ConveyorInSteps.S2250_ALIGN_Y_FWD: { if (AlignerY.IsWorkEnd) { if (AlignerY.IsForward) { Step = ConveyorInSteps.S2270_ALIGN_X_BWD; } else { AlignerY.Forward(); } } break; } case ConveyorInSteps.S2270_ALIGN_X_BWD: { if (AlignerX.IsWorkEnd) { if (AlignerX.IsBackward) { Step = ConveyorInSteps.S2300_CONVEYOR_MOVE_OUT; } else { AlignerX.Backward(); } } break; } case ConveyorInSteps.S2300_CONVEYOR_MOVE_OUT: { if (JogNegative()) { Step = ConveyorInSteps.S2310_CONVEYOR_IN_COMPLETE_SENSOR_CHECK; } break; } case ConveyorInSteps.S2310_CONVEYOR_IN_COMPLETE_SENSOR_CHECK: { if (MotorX.MotionComplete) { if (!(Alarm_Manager.Instance.Occured_List.Exists(X => X.Heavy == true) || Alarm_Manager.Instance.Occured_List.Exists(X => X.Code == En_Alarm_List.AL_0053_ULD_LIGHT_CURTAIN_ALARM))) { JogNegative(); } } else { if (IsConveyorInCompleteSensor || IsConveyorInSensor) { Step = ConveyorInSteps.S2320_CONVEYOR_IN_SENSOR_CHECK; } else if (sequenceChangedTime.Seconds > equipment.Setting.Conveyor_Timeout) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0872_ULD_TRAY_EMPTY_CONVEYOR_TIMEOUT); Step = ConveyorInSteps.S2330_CONVEYOR_STOP; } } break; } case ConveyorInSteps.S2320_CONVEYOR_IN_SENSOR_CHECK: { if (MotorX.MotionComplete) { if (!(Alarm_Manager.Instance.Occured_List.Exists(X => X.Heavy == true) || Alarm_Manager.Instance.Occured_List.Exists(X => X.Code == En_Alarm_List.AL_0053_ULD_LIGHT_CURTAIN_ALARM))) { JogNegative(); } } else { if (IsConveyorInSensor || (IsConveyorInCompleteSensor == false && IsConveyorInSensor == false && IsLiftInSensor == false && IsLiftInCompleteSensor == false)) { Step = ConveyorInSteps.S2330_CONVEYOR_STOP; } else if (sequenceChangedTime.Seconds > equipment.Setting.Conveyor_Timeout) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0872_ULD_TRAY_EMPTY_CONVEYOR_TIMEOUT); Step = ConveyorInSteps.S2330_CONVEYOR_STOP; } } break; } case ConveyorInSteps.S2330_CONVEYOR_STOP: { if (Stop()) { Step = ConveyorInSteps.S2340_CONVEYOR_STOP_CHECK; } break; } case ConveyorInSteps.S2340_CONVEYOR_STOP_CHECK: { if (MotorX.MotionComplete) { Step = ConveyorInSteps.S2999_TRAY_UNLOADING_END; } else { Step = ConveyorInSteps.S2330_CONVEYOR_STOP; } break; } case ConveyorInSteps.S2999_TRAY_UNLOADING_END: { Step = ConveyorInSteps.S0000_WAIT; break; } } } public void Load() { Step = ConveyorInSteps.S1000_TRAY_LOADING_START; } public void Unload() { Step = ConveyorInSteps.S2000_TRAY_UNLOADING_START; } #endregion } }