using System; using System.Windows.Forms; namespace SHARP_CLAS_UI { public class UnloaderLiftIn : Lift { #region Enum #endregion #region Property public override bool IsPanelEmpty { get { return true; } } public override bool IsPanelFull { get { return false; } } protected override double UpPosition { get { object value; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Tray_Empty_Z_Process_Position, out value); var position = double.Parse($"{value}"); return position; } } 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.ULD_Tray_Empty_Z_Wait_Position, out value); var get_position = double.Parse($"{value}"); return MotorZ.Is_Inposition(get_position, equipment.Setting.Inposition_Offset); } } public LiftInSteps Step { get { return _step; } set { _step = value; } } public override double TrayInPosition { get { if (equipment.Cur_Main_Recipe.tray_info == null) return 0; var position = UpPosition - (equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Empty_Tray_Pitch * equipment.UnloaderInTrayCount); 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 = UpPosition - (equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Empty_Tray_Pitch * (equipment.UnloaderInTrayCount + 1)); position = double.Parse(position.ToString("F3")); return position; } } public bool is_Tray_Place_Enable { get { if(IsWorkEnd && equipment.UnloaderInTrayCount > 0 &&_trayCount == equipment.UnloaderInTrayCount && MotorZ.Is_Inposition(TrayInPosition, equipment.Setting.Inposition_Offset + equipment.Setting.Tray_Alarm_Range)) { return true; } else { return false; } } } public override string TrayID { get { return string.Empty; } set { } } #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 UnloaderLiftIn(Equipment equipment) : base(equipment, MotorAxis.ULD_Tray_IN_Lift_Z, "UnloaderLiftIn") { Step = LiftInSteps.S0000_WAIT; _oldStep = LiftInSteps.S0000_WAIT; Initialize(InputData.ULD_Empty_In_Lift_Up_1_1_Sensor, InputData.ULD_Empty_In_Lift_Up_1_2_Sensor, InputData.ULD_Empty_In_Lift_Up_2_1_Sensor, InputData.ULD_Empty_In_Lift_Up_2_2_Sensor); AlignerTop.Initialize(OutputData.ULD_Empty_In_Align_Top_Sol_Valve, InputData.ULD_Empty_In_Align_Top_1_Fwd_Sensor, InputData.ULD_Empty_In_Align_Top_2_Fwd_Sensor, InputData.ULD_Empty_In_Align_Top_1_Bwd_Sensor, InputData.ULD_Empty_In_Align_Top_2_Bwd_Sensor, En_Alarm_List.AL_0717_ULD_TRAY_EMPTY_ALIGN_TOP_1_FWD_SENSOR_CHECK, En_Alarm_List.AL_0718_ULD_TRAY_EMPTY_ALIGN_TOP_2_FWD_SENSOR_CHECK, En_Alarm_List.AL_0719_ULD_TRAY_EMPTY_ALIGN_TOP_1_BWD_SENSOR_CHECK, En_Alarm_List.AL_0720_ULD_TRAY_EMPTY_ALIGN_TOP_2_BWD_SENSOR_CHECK); Clamper.Initialize(OutputData.ULD_Empty_In_Clamp_Sol_Valve, InputData.ULD_Empty_In_Clamp_1_Clamp_Sensor, InputData.ULD_Empty_In_Clamp_2_Clamp_Sensor, InputData.ULD_Empty_In_Clamp_1_Unclamp_Sensor, InputData.ULD_Empty_In_Clamp_2_Unclamp_Sensor, En_Alarm_List.AL_0721_ULD_TRAY_EMPTY_CLAMP_1_SENSOR_CHECK, En_Alarm_List.AL_0722_ULD_TRAY_EMPTY_CLAMP_2_SENSOR_CHECK, En_Alarm_List.AL_0723_ULD_TRAY_EMPTY_UNCLAMP_1_SENSOR_CHECK, En_Alarm_List.AL_0724_ULD_TRAY_EMPTY_UNCLAMP_2_SENSOR_CHECK); Stacker.Initialize(OutputData.ULD_Empty_In_Stacker_Sol_Valve, InputData.ULD_Empty_In_Stacker_1_Fwd_Sensor, InputData.ULD_Empty_In_Stacker_2_Fwd_Sensor, InputData.ULD_Empty_In_Stacker_3_Fwd_Sensor, InputData.ULD_Empty_In_Stacker_4_Fwd_Sensor, InputData.ULD_Empty_In_Stacker_1_Bwd_Sensor, InputData.ULD_Empty_In_Stacker_2_Bwd_Sensor, InputData.ULD_Empty_In_Stacker_3_Bwd_Sensor, InputData.ULD_Empty_In_Stacker_4_Bwd_Sensor, En_Alarm_List.AL_0725_ULD_TRAY_EMPTY_STACKER_1_FWD_SENSOR_CHECK, En_Alarm_List.AL_0726_ULD_TRAY_EMPTY_STACKER_2_FWD_SENSOR_CHECK, En_Alarm_List.AL_0727_ULD_TRAY_EMPTY_STACKER_3_FWD_SENSOR_CHECK, En_Alarm_List.AL_0728_ULD_TRAY_EMPTY_STACKER_4_FWD_SENSOR_CHECK, En_Alarm_List.AL_0729_ULD_TRAY_EMPTY_STACKER_1_BWD_SENSOR_CHECK, En_Alarm_List.AL_0730_ULD_TRAY_EMPTY_STACKER_2_BWD_SENSOR_CHECK, En_Alarm_List.AL_0731_ULD_TRAY_EMPTY_STACKER_3_BWD_SENSOR_CHECK, En_Alarm_List.AL_0732_ULD_TRAY_EMPTY_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.UnloaderInTrayCount <= 0) { if (IsStayPosition == false) { Step = LiftInSteps.S3000_TRAY_UNLOADING_START; } } else { if(IsFirstTray) { if(equipment.unloader.ConveyorIn.IsWorkEnd) { if(equipment.unloader.ConveyorIn.IsLiftInSensor || equipment.unloader.ConveyorIn.IsLiftInCompleteSensor) { Step = LiftInSteps.S1000_LIFT_LOAD_START; } } } else { if(_trayCount != equipment.UnloaderInTrayCount) { if(equipment.unloader.TrayTransfer.IsStayPosition) { 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) { Seq_Home(); } 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 Seq_Home() { 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_0471_ULD_TRAY_EMPTY_LIFT_Z_ERROR_STOP); } else if (!MotorZ.PowerOn) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0470_ULD_TRAY_EMPTY_LIFT_Z_POWER_OFF); } else { _homeStep = LiftHomeSteps.S1100_CONVEYOR_HOME_CHECK; } break; } case LiftHomeSteps.S1100_CONVEYOR_HOME_CHECK: { if (equipment.unloader.ConveyorIn.IsHomeComplete) { _homeStep = LiftHomeSteps.S1110_CONVEYOR_LIFT_SENSOR_CHECK; } break; } case LiftHomeSteps.S1110_CONVEYOR_LIFT_SENSOR_CHECK: { if (equipment.unloader.ConveyorIn.IsLiftInSensor || equipment.unloader.ConveyorIn.IsLiftInCompleteSensor) { if (equipment.unloader.ConveyorIn.IsLiftInSensor) { Interlock_Manager.Add_Interlock_Msg("ULD Tray Empty Lift Home can't run.", "Lift in sensor is detected."); } if (equipment.unloader.ConveyorIn.IsLiftInCompleteSensor) { Interlock_Manager.Add_Interlock_Msg("ULD Tray Empty Lift Home can't run.", "Lift in complete sensor is 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_0471_ULD_TRAY_EMPTY_LIFT_Z_ERROR_STOP); } } else { if (equipment.unloader.ConveyorIn.IsLiftInSensor || equipment.unloader.ConveyorIn.IsLiftInCompleteSensor) { if (equipment.unloader.ConveyorIn.IsLiftInSensor) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0702_ULD_TRAY_EMPTY_CONVEYOR_LIFT_IN_SENSOR_CHECK); } if (equipment.unloader.ConveyorIn.IsLiftInCompleteSensor) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0703_ULD_TRAY_EMPTY_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_0471_ULD_TRAY_EMPTY_LIFT_Z_ERROR_STOP); } else if (MotorZ.MotionComplete) { if (IsStayPosition) { _homeStep = LiftHomeSteps.S9999_END; } else { Interlock_Manager.Add_Interlock_Msg("ULD Tray Empty Lift Home can't run.", "Position is not wait."); } } break; } case LiftHomeSteps.S9999_END: { isHomeComplete = true; _homeStep = LiftHomeSteps.S0000_WAIT; break; } } } private 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.ULD_Tray_Empty_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) { //Lift Limit Sensor Check. if (MotorZ.Move_Stop()) { //count_set_view = new Form_Tray_Count_Set("ULD TRAY EMPTY", equipment.UnloaderInTrayCount, true); //tray_count_set_show = true; if (IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0713_ULD_TRAY_EMPTY_LIFT_UP_1_1_SENSOR_CHECK); } if (IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0714_ULD_TRAY_EMPTY_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("ULD TRAY EMPTY", equipment.UnloaderInTrayCount, false); //tray_count_set_show = true; Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0954_ULD_TRAY_EMPTY_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("781, ULD Tray Empty 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("ULD TRAY EMPTY", equipment.UnloaderInTrayCount, false); //tray_count_set_show = true; Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0954_ULD_TRAY_EMPTY_PITCH_RANGE_ALARM); Step = LiftInSteps.S1340_LIFT_DOWN; } else { _pitchPosition += equipment.Setting.Tray_Move_Pitch; 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("ULD TRAY EMPTY", equipment.UnloaderInTrayCount, true); //tray_count_set_show = true; if (IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0713_ULD_TRAY_EMPTY_LIFT_UP_1_1_SENSOR_CHECK); } if (IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0714_ULD_TRAY_EMPTY_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("858, ULD Tray Empty 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.ULD_Empty_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("ULD TRAY EMPTY", equipment.UnloaderInTrayCount, true); //tray_count_set_show = true; if (IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0713_ULD_TRAY_EMPTY_LIFT_UP_1_1_SENSOR_CHECK); } if (IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0714_ULD_TRAY_EMPTY_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("ULD TRAY EMPTY", equipment.UnloaderInTrayCount, false); //tray_count_set_show = true; if (!IsLiftInSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0565_LD_TRAY_IN_LIFT_UP_2_1_SENSOR_CHECK); } if (!IsLiftInSensor2) { 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("914, ULD Tray Empty 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("ULD Tray Empty Lift Loading can't run.", $"ULD 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.ULD_Tray_Empty_Z_Process_Position, out value); double position = double.Parse($"{value}"); int count = (int)((position - MotorZ.Position) / equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Empty_Tray_Pitch); equipment.UnloaderInTrayCount = 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) { Step = LiftInSteps.S1420_STACKER_FORWARD; } else { AlignerTop.Forward(); } } break; } case LiftInSteps.S1420_STACKER_FORWARD: { if (Stacker.IsWorkEnd) { if (Stacker.IsForward) { if (IsFirstTray) { Step = LiftInSteps.S1520_PORT_STATUS_CIM_SEND; } else { Step = LiftInSteps.S1999_LIFT_LOAD_END; } } else { Stacker.Forward(); } } 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.P05, En_Tray_Code.P, true, 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.S1999_LIFT_LOAD_END; } else { Step = LiftInSteps.S1520_PORT_STATUS_CIM_SEND; } } break; } case LiftInSteps.S1999_LIFT_LOAD_END: { Step = LiftInSteps.S0000_WAIT; break; } } } private 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: { 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) { //Lift Limit Sensor Check. if (MotorZ.Move_Stop()) { //count_set_view = new Form_Tray_Count_Set("ULD TRAY EMPTY", equipment.UnloaderInTrayCount, true); //tray_count_set_show = true; if (IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0713_ULD_TRAY_EMPTY_LIFT_UP_1_1_SENSOR_CHECK); } if (IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0714_ULD_TRAY_EMPTY_LIFT_UP_1_2_SENSOR_CHECK); } Step = LiftInSteps.S1340_LIFT_DOWN; return; } } if (MotorZ.MotionComplete) { _pitchPosition = 0; if (MotorZ.Is_Inposition(TrayInPosition, 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("ULD Tray Empty Lift Loading can't run.", $"ULD Tray Lift is not up 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("ULD TRAY EMPTY", equipment.UnloaderInTrayCount, false); //tray_count_set_show = true; //Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0954_ULD_TRAY_EMPTY_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("781, ULD Tray Empty 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("ULD TRAY EMPTY", equipment.UnloaderInTrayCount, false); //tray_count_set_show = true; //Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0954_ULD_TRAY_EMPTY_PITCH_RANGE_ALARM); Step = LiftInSteps.S1340_LIFT_DOWN; } else { _pitchPosition += equipment.Setting.Tray_Move_Pitch; 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("ULD TRAY EMPTY", equipment.UnloaderInTrayCount, true); //tray_count_set_show = true; if (IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0713_ULD_TRAY_EMPTY_LIFT_UP_1_1_SENSOR_CHECK); } if (IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0714_ULD_TRAY_EMPTY_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("858, ULD Tray Empty 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.ULD_Empty_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("ULD TRAY EMPTY", equipment.UnloaderInTrayCount, true); //tray_count_set_show = true; if (IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0713_ULD_TRAY_EMPTY_LIFT_UP_1_1_SENSOR_CHECK); } if (IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0714_ULD_TRAY_EMPTY_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.UnloaderInTrayCount; Step = LiftInSteps.S2400_CLAMP; } else { count_set_view = new Form_Tray_Count_Set("ULD TRAY EMPTY", equipment.UnloaderInTrayCount, false); tray_count_set_show = true; if (!IsLiftInSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0565_LD_TRAY_IN_LIFT_UP_2_1_SENSOR_CHECK); } if (!IsLiftInSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0566_LD_TRAY_IN_LIFT_UP_2_2_SENSOR_CHECK); } Step = LiftInSteps.S2340_LIFT_DOWN; } } else { Interlock_Manager.Add_Interlock_Msg("914, ULD Tray Empty 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("ULD Tray Empty Lift Loading can't run.", $"ULD 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.UnloaderInTrayCount = 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) { Step = LiftInSteps.S2420_STACKER_FORWARD; } else { AlignerTop.Forward(); } } break; } case LiftInSteps.S2420_STACKER_FORWARD: { if (Stacker.IsWorkEnd) { if (Stacker.IsForward) { if (IsFirstTray) { Step = LiftInSteps.S2520_PORT_STATUS_CIM_SEND; } else { Step = LiftInSteps.S2999_LIFT_UP_END; } } else { Stacker.Forward(); } } 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.P05, En_Tray_Code.P, true, 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.S2999_LIFT_UP_END; } else { Step = LiftInSteps.S2520_PORT_STATUS_CIM_SEND; } } break; } case LiftInSteps.S2999_LIFT_UP_END: { Step = LiftInSteps.S0000_WAIT; break; } } } private 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.unloader.ConveyorIn.IsLiftInCompleteSensor || equipment.unloader.ConveyorIn.IsLiftInSensor) { if (equipment.unloader.ConveyorIn.IsLiftInSensor) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0702_ULD_TRAY_EMPTY_CONVEYOR_LIFT_IN_SENSOR_CHECK); } if (equipment.unloader.ConveyorIn.IsLiftInCompleteSensor) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0703_ULD_TRAY_EMPTY_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.Backward()) { if (AlignerTop.Backward()) { 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.unloader.ConveyorIn.AlignerX.IsWorkEnd) { if (equipment.unloader.ConveyorIn.AlignerX.IsBackward) { Step = LiftInSteps.S3300_LIFT_DOWN; } else { equipment.unloader.ConveyorIn.AlignerX.Backward(); } } break; } case LiftInSteps.S3300_LIFT_DOWN: { if (equipment.unloader.ConveyorIn.IsLiftInSensor || equipment.unloader.ConveyorIn.IsLiftInCompleteSensor || !equipment.unloader.ConveyorIn.MotorX.MotionComplete) { if(equipment.unloader.ConveyorIn.IsLiftInSensor) { Interlock_Manager.Add_Interlock_Msg("ULD Tray Empty Lift Unloading can't run.", "Lift in sensor is detected."); } if(equipment.unloader.ConveyorIn.IsLiftInCompleteSensor) { Interlock_Manager.Add_Interlock_Msg("ULD Tray Empty Lift Unloading can't run.", "Lift in Complete sensor is detected."); } if(!equipment.unloader.ConveyorIn.MotorX.MotionComplete) { Interlock_Manager.Add_Interlock_Msg("ULD Tray Empty Lift Unloading can't run.", "ULD Empty 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.UnloaderInTrayCount = 0; _trayCount = 0; if (equipment.unloader.ConveyorIn.IsLiftInSensor || equipment.unloader.ConveyorIn.IsLiftInCompleteSensor) { Step = LiftInSteps.S3400_CONVEYOR_UNLOAD; } else { Step = LiftInSteps.S3500_PORT_STATUS_CIM_SEND; } } else { Interlock_Manager.Add_Interlock_Msg("ULD Tray Empty Lift Unloading can't run.", $"Lift is not wait position."); Step = LiftInSteps.S3300_LIFT_DOWN; } } break; } case LiftInSteps.S3400_CONVEYOR_UNLOAD: { equipment.unloader.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.P05, En_Tray_Code.P, true, 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 MoveStayPosition() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Tray_Empty_Z_Wait_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.ULD_Tray_Empty_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.ULD_Tray_Empty_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 } }