using System; namespace SHARP_CLAS_UI { public class UnloaderTrayTransfer : TrayTransfer { #region Enum #endregion #region Property public bool is_Tray_Pick_Enable { get { if (Step != TrayTransferSteps.S0000_WAIT) return false; if (!IsStayPosition) return false; if (Get_Vacuum_Check()) return false; return true; } } public bool is_Tray_Place_Enable { get { if (Step != TrayTransferSteps.S0000_WAIT) return false; if (!IsStayPosition) return false; if (!Get_Vacuum_Check()) return false; return true; } } public TrayTransferSteps Step { get { return _step; } set { _step = value; } } public override bool IsWorkEnd { get { if(Step == TrayTransferSteps.S0000_WAIT) { return true; } else { return false; } } } public override bool IsStayPosition { get { object value; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Tray_X_Empty_Position, out value); var position = double.Parse($"{value}"); return MotorX.Is_Inposition(position, equipment.Setting.Inposition_Offset); } } public bool isLiftNgPosition { get { object value; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Tray_X_NG_Position, out value); var position = double.Parse($"{value}"); return MotorX.Is_Inposition(position, equipment.Setting.Inposition_Offset); } } public bool isLiftOkPosition { get { object value; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Tray_X_OK_Position, out value); var position = double.Parse($"{value}"); return MotorX.Is_Inposition(position, equipment.Setting.Inposition_Offset); } } #endregion #region Field private TrayTransferSteps _step; private TrayTransferSteps _oldStep; private TrayTransferHomeSteps _homeStep; private SequenceTimer _tactTime = new SequenceTimer(); #endregion #region Construct public UnloaderTrayTransfer(Equipment equipment) : base(equipment, MotorAxis.ULD_Tray_TR_X, "UnloaderTrayTransfer") { Step = TrayTransferSteps.S0000_WAIT; _oldStep = TrayTransferSteps.S0000_WAIT; Picker.Initialize(OutputData.ULD_Tray_TR_Down, InputData.ULD_Tray_Transfer_Up_Sensor, InputData.ULD_Tray_Transfer_Down_Sensor, En_Alarm_List.AL_0810_ULD_TRAY_TR_UP_SENSOR_CHECK, En_Alarm_List.AL_0811_ULD_TRAY_TR_DOWN_SENSOR_CHECK, OutputData.ULD_Tray_Transfer_Vaccum_On_Sol_Valve, OutputData.ULD_Tray_Transfer_Blow_On_Sol_Valve, InputData.ULD_Tray_Transfer_Vaccum_On_Check, En_Alarm_List.AL_0812_ULD_TRAY_TR_VACUUM_ON_CHECK); pauseDisableList.Add(TrayTransferSteps.S1205_MOVE_STAY_POSITION_CHECK); pauseDisableList.Add(TrayTransferSteps.S2205_MOVE_PICK_POSITION_CHECK); pauseDisableList.Add(TrayTransferSteps.S3205_MOVE_PLACE_POSITION_CHECK); MotorX.Check_Jog_Interlock = Jog_Interlock; MotorX.Check_Move_Interlock = Move_Interlock; MotorX.Check_Home_Interlock = Home_Interlock; _tactTime.Reset(); } #endregion #region Function private bool Home_Interlock() { if (Get_Picker_Down_Sensor_Check()) { Interlock_Manager.Add_Interlock_Msg("ULD Tray Tr", "Picker is Down, Can't Move."); return true; } return false; } private bool Move_Interlock() { if (Picker.IsDownSensor) { Interlock_Manager.Add_Interlock_Msg("ULD Tray Tr", "Picker is Down, Can't Move."); return true; } if (equipment.User.Level != En_User_Level.Master && equipment.Door_Opened) { return true; } return false; } private bool Jog_Interlock(bool positive) { if (Picker.IsDownSensor) { Interlock_Manager.Add_Interlock_Msg("ULD Tray Tr", "Picker is Down, Can't Move."); return true; } if (equipment.User.Level != En_User_Level.Master && equipment.Door_Opened) { return true; } return false; } public void Init_Seq() { Step = TrayTransferSteps.S0000_WAIT; _homeStep = TrayTransferHomeSteps.S0000_WAIT; } public void ExecuteAuto() { if (IsWorkEnd) { if(IsStayPosition == false) { Step = TrayTransferSteps.S1000_MOVE_STAY_POSITION_START; } else { if (Picker.IsVacuumSensor) { if (equipment.unloader.LiftOk.Step != LiftOutSteps.S1520_TRAY_ID_READ_WAIT && equipment.unloader.LiftNg.Step != LiftOutSteps.S1520_TRAY_ID_READ_WAIT) { if (equipment.unloader.LiftOk.Step == LiftOutSteps.S1400_TRAY_TRANSFER_PLACE_WAIT) { Step = TrayTransferSteps.S3000_PLACE_TRAY_START; } if (equipment.unloader.LiftNg.Step == LiftOutSteps.S1400_TRAY_TRANSFER_PLACE_WAIT) { Step = TrayTransferSteps.S4000_PLACE_TRAY_START; } } } else { if (equipment.unloader.LiftIn.is_Tray_Place_Enable) { Step = TrayTransferSteps.S2000_PICK_TRAY_START; } } } } } public override void MonitoringStatus() { if (UnitMode == En_Equipment_Mode.Auto || UnitMode == En_Equipment_Mode.Manual) { if (IsWorkEnd) { if (Get_Vacuum_On_Check() && !Get_Vacuum_Check()) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0812_ULD_TRAY_TR_VACUUM_ON_CHECK); } } } 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.Start(); _oldStep = Step; WriteSequenceLog(Step.ToString()); } Picker.ExecuteProcess(); 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(); } MoveStay(); PickTray(); PlaceTrayOk(); PlaceTrayNg(); } } public void ExecuteHome() { switch(_homeStep) { case TrayTransferHomeSteps.S0000_WAIT: { _homeStep = TrayTransferHomeSteps.S1000_STATUS_CHECK; break; } case TrayTransferHomeSteps.S1000_STATUS_CHECK: { if (MotorX.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0481_ULD_TRAY_TR_X_ERROR_STOP); } else if (MotorX.PowerOn == false) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0480_ULD_TRAY_TR_X_POWER_OFF); } else if (Picker.IsUp == false) { Interlock_Manager.Add_Interlock_Msg("ULD Tray TR Home can't run.", "Picker is Down."); } else { _homeStep = TrayTransferHomeSteps.S1100_LIFT_LIMIT_SENSOR_CHECK; } break; } case TrayTransferHomeSteps.S1100_LIFT_LIMIT_SENSOR_CHECK: { if (equipment.unloader.LiftIn.IsLiftLimitSensor1 || equipment.unloader.LiftIn.IsLiftLimitSensor2 || equipment.unloader.LiftOk.IsLiftLimitSensor1 || equipment.unloader.LiftOk.IsLiftLimitSensor2 || equipment.unloader.LiftNg.IsLiftLimitSensor1 || equipment.unloader.LiftNg.IsLiftLimitSensor2) { if (equipment.unloader.LiftIn.IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0713_ULD_TRAY_EMPTY_LIFT_UP_1_1_SENSOR_CHECK); } if (equipment.unloader.LiftIn.IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0714_ULD_TRAY_EMPTY_LIFT_UP_1_2_SENSOR_CHECK); } if (equipment.unloader.LiftOk.IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0753_ULD_TRAY_OK_LIFT_UP_1_1_SENSOR_CHECK); } if (equipment.unloader.LiftOk.IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0754_ULD_TRAY_OK_LIFT_UP_1_2_SENSOR_CHECK); } if (equipment.unloader.LiftNg.IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0780_ULD_TRAY_NG_LIFT_UP_1_1_SENSOR_CHECK); } if (equipment.unloader.LiftNg.IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0781_ULD_TRAY_NG_LIFT_UP_1_2_SENSOR_CHECK); } } else { _homeStep = TrayTransferHomeSteps.S2000_X_HOME_START; } break; } case TrayTransferHomeSteps.S2000_X_HOME_START: { if (MotorX.Home()) { homeCheckedTime.Restart(); _homeStep = TrayTransferHomeSteps.S2100_X_HOME_CHECK; } break; } case TrayTransferHomeSteps.S2100_X_HOME_CHECK: { if (homeCheckedTime.Seconds < 1) return; if (!MotorX.IsHomed) { if (MotorX.Homing == false && MotorX.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0481_ULD_TRAY_TR_X_ERROR_STOP); _homeStep = TrayTransferHomeSteps.S0000_WAIT; } } else { _homeStep = TrayTransferHomeSteps.S3000_MOVE_STAY_POSITION; } break; } case TrayTransferHomeSteps.S3000_MOVE_STAY_POSITION: { if (MoveLiftInPosition()) { homeCheckedTime.Restart(); _homeStep = TrayTransferHomeSteps.S3100_POSITION_CHECK; } break; } case TrayTransferHomeSteps.S3100_POSITION_CHECK: { if (homeCheckedTime.Seconds < 1) return; if (MotorX.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0481_ULD_TRAY_TR_X_ERROR_STOP); _homeStep = TrayTransferHomeSteps.S0000_WAIT; } else if (MotorX.MotionComplete) { if (IsStayPosition) { _homeStep = TrayTransferHomeSteps.S9999_END; } else { Interlock_Manager.Add_Interlock_Msg("ULD Tray TR Home can't run.", "Position is not empty."); _homeStep = TrayTransferHomeSteps.S0000_WAIT; } } break; } case TrayTransferHomeSteps.S9999_END: { isHomeComplete = true; _homeStep = TrayTransferHomeSteps.S0000_WAIT; break; } } } public void MoveStay() { switch (Step) { case TrayTransferSteps.S1000_MOVE_STAY_POSITION_START: { _tactTime.Restart(); Step = TrayTransferSteps.S1100_PICKER_UP; break; } case TrayTransferSteps.S1100_PICKER_UP: { if (Picker.IsWorkEnd) { if (Picker.IsUp) { Step = TrayTransferSteps.S1110_LIFT_LIMIT_SENSOR_CHECK; } else { Picker.Up(); } } break; } case TrayTransferSteps.S1110_LIFT_LIMIT_SENSOR_CHECK: { if (equipment.unloader.LiftIn.IsLiftLimitSensor1 || equipment.unloader.LiftIn.IsLiftLimitSensor2 || equipment.unloader.LiftOk.IsLiftLimitSensor1 || equipment.unloader.LiftOk.IsLiftLimitSensor2 || equipment.unloader.LiftNg.IsLiftLimitSensor1 || equipment.unloader.LiftNg.IsLiftLimitSensor2) { if (equipment.unloader.LiftIn.IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0713_ULD_TRAY_EMPTY_LIFT_UP_1_1_SENSOR_CHECK); } if (equipment.unloader.LiftIn.IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0714_ULD_TRAY_EMPTY_LIFT_UP_1_2_SENSOR_CHECK); } if (equipment.unloader.LiftOk.IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0753_ULD_TRAY_OK_LIFT_UP_1_1_SENSOR_CHECK); } if (equipment.unloader.LiftOk.IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0754_ULD_TRAY_OK_LIFT_UP_1_2_SENSOR_CHECK); } if (equipment.unloader.LiftNg.IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0780_ULD_TRAY_NG_LIFT_UP_1_1_SENSOR_CHECK); } if (equipment.unloader.LiftNg.IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0781_ULD_TRAY_NG_LIFT_UP_1_2_SENSOR_CHECK); } } else { Step = TrayTransferSteps.S1200_MOVE_STAY_POSITION; } break; } case TrayTransferSteps.S1200_MOVE_STAY_POSITION: { if (MoveLiftInPosition()) { Step = TrayTransferSteps.S1205_MOVE_STAY_POSITION_CHECK; } break; } case TrayTransferSteps.S1205_MOVE_STAY_POSITION_CHECK: { if (MotorX.MotionComplete) { if (IsStayPosition) { Step = TrayTransferSteps.S1999_MOVE_STAY_POSITION_END; } else { Step = TrayTransferSteps.S1200_MOVE_STAY_POSITION; } } break; } case TrayTransferSteps.S1999_MOVE_STAY_POSITION_END: { _tactTime.Stop(); Step = TrayTransferSteps.S0000_WAIT; break; } } } public void PickTray() { switch(Step) { case TrayTransferSteps.S2000_PICK_TRAY_START: { _tactTime.Restart(); Step = TrayTransferSteps.S2100_PICKER_UP; break; } case TrayTransferSteps.S2100_PICKER_UP: { if (Picker.IsWorkEnd) { if (Picker.IsUp) { Step = TrayTransferSteps.S2110_LIFT_LIMIT_SENSOR_CHECK; } else { Picker.Up(); } } break; } case TrayTransferSteps.S2110_LIFT_LIMIT_SENSOR_CHECK: { if (equipment.unloader.LiftIn.IsLiftLimitSensor1 || equipment.unloader.LiftIn.IsLiftLimitSensor2) { if (equipment.unloader.LiftIn.IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0713_ULD_TRAY_EMPTY_LIFT_UP_1_1_SENSOR_CHECK); } if (equipment.unloader.LiftIn.IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0714_ULD_TRAY_EMPTY_LIFT_UP_1_2_SENSOR_CHECK); } } else { Step = TrayTransferSteps.S2120_HANDLER_POSITION_CHECK; } break; } case TrayTransferSteps.S2120_HANDLER_POSITION_CHECK: { double position = equipment.unloader.Handler1.Get_Position_Y_Stay(); if (position <= equipment.unloader.Handler1.MotorY.Position || equipment.unloader.Handler1.MotorY.Is_Inposition(position, equipment.Setting.Inposition_Offset)) { Step = TrayTransferSteps.S2130_LIFT_IN_SENSOR_CHECK; } break; } case TrayTransferSteps.S2130_LIFT_IN_SENSOR_CHECK: { if (equipment.unloader.LiftIn.IsLiftInSensor1 && equipment.unloader.LiftIn.IsLiftInSensor2) { Step = TrayTransferSteps.S2200_MOVE_PICK_POSITION; } else { if (equipment.unloader.LiftIn.IsLiftInSensor1 == false) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0715_ULD_TRAY_EMPTY_LIFT_UP_2_1_SENSOR_CHECK); } if (equipment.unloader.LiftIn.IsLiftInSensor2 == false) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0716_ULD_TRAY_EMPTY_LIFT_UP_2_2_SENSOR_CHECK); } } break; } case TrayTransferSteps.S2200_MOVE_PICK_POSITION: { if (MoveLiftInPosition()) { Step = TrayTransferSteps.S2205_MOVE_PICK_POSITION_CHECK; } break; } case TrayTransferSteps.S2205_MOVE_PICK_POSITION_CHECK: { if (MotorX.MotionComplete) { if (IsStayPosition) { Step = TrayTransferSteps.S2300_PICKER_DOWN; } else { Step = TrayTransferSteps.S2200_MOVE_PICK_POSITION; } } break; } case TrayTransferSteps.S2300_PICKER_DOWN: { if (Picker.IsWorkEnd) { if (Picker.IsDown) { Step = TrayTransferSteps.S2310_VACUUM_ON; } else { Picker.Down(); } } break; } case TrayTransferSteps.S2310_VACUUM_ON: { if (Picker.IsWorkEnd) { if (Picker.IsVacuumSensor) { Step = TrayTransferSteps.S2320_ALIGN_TOP_BACKWARD; } else { Picker.VacuumOn(); } } break; } case TrayTransferSteps.S2320_ALIGN_TOP_BACKWARD: { if (equipment.unloader.LiftIn.AlignerTop.IsWorkEnd) { if (equipment.unloader.LiftIn.AlignerTop.IsBackward) { Step = TrayTransferSteps.S2330_STACKER_BACKWARD; } else { equipment.unloader.LiftIn.AlignerTop.Backward(); } } break; } case TrayTransferSteps.S2330_STACKER_BACKWARD: { if (equipment.unloader.LiftIn.Stacker.IsWorkEnd) { if (equipment.unloader.LiftIn.Stacker.IsBackward) { Step = TrayTransferSteps.S2340_UNCLAMP; } else { equipment.unloader.LiftIn.Stacker.Backward(); } } break; } case TrayTransferSteps.S2340_UNCLAMP: { if (equipment.unloader.LiftIn.Clamper.IsWorkEnd) { if (equipment.unloader.LiftIn.Clamper.IsUnclamp) { Step = TrayTransferSteps.S2350_PICKER_UP; } else { equipment.unloader.LiftIn.Clamper.Unclamp(); } } break; } case TrayTransferSteps.S2350_PICKER_UP: { if (Picker.IsWorkEnd) { if (Picker.IsUp) { Step = TrayTransferSteps.S2360_VACUUM_CHECK; } else { Picker.Up(); } } break; } case TrayTransferSteps.S2360_VACUUM_CHECK: { if (Picker.IsVacuumSensor) { Step = TrayTransferSteps.S2370_TRAY_COUNT_SET; } else { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0812_ULD_TRAY_TR_VACUUM_ON_CHECK); } break; } case TrayTransferSteps.S2370_TRAY_COUNT_SET: { if (equipment.unloader.LiftIn.IsFirstTray) { equipment.unloader.LiftIn.IsFirstTray = false; } equipment.UnloaderInTrayCount = equipment.UnloaderInTrayCount - 1; Step = TrayTransferSteps.S2999_PICK_TRAY_END; break; } case TrayTransferSteps.S2999_PICK_TRAY_END: { _tactTime.Stop(); Step = TrayTransferSteps.S0000_WAIT; break; } } } public void PlaceTrayOk() { switch (Step) { case TrayTransferSteps.S3000_PLACE_TRAY_START: { _tactTime.Start(); Step = TrayTransferSteps.S3100_PICKER_UP; break; } case TrayTransferSteps.S3100_PICKER_UP: { if (Picker.IsWorkEnd) { if (Picker.IsUp) { Step = TrayTransferSteps.S3110_LIFT_LIMIT_SENSOR_CHECK; } else { Picker.Up(); } } break; } case TrayTransferSteps.S3110_LIFT_LIMIT_SENSOR_CHECK: { if (equipment.unloader.LiftIn.IsLiftLimitSensor1 || equipment.unloader.LiftIn.IsLiftLimitSensor2 || equipment.unloader.LiftOk.IsLiftLimitSensor1 || equipment.unloader.LiftOk.IsLiftLimitSensor2) { if (equipment.unloader.LiftIn.IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0713_ULD_TRAY_EMPTY_LIFT_UP_1_1_SENSOR_CHECK); } if (equipment.unloader.LiftIn.IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0714_ULD_TRAY_EMPTY_LIFT_UP_1_2_SENSOR_CHECK); } if (equipment.unloader.LiftOk.IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0753_ULD_TRAY_OK_LIFT_UP_1_1_SENSOR_CHECK); } if (equipment.unloader.LiftOk.IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0754_ULD_TRAY_OK_LIFT_UP_1_2_SENSOR_CHECK); } } else { Step = TrayTransferSteps.S3120_HANDLER_POSITION_CHECK; } break; } case TrayTransferSteps.S3120_HANDLER_POSITION_CHECK: { double position = equipment.unloader.Handler1.Get_Position_Y_Stay(); if (position <= equipment.unloader.Handler1.MotorY.Position || equipment.unloader.Handler1.MotorY.Is_Inposition(position, equipment.Setting.Inposition_Offset)) { Step = TrayTransferSteps.S3200_MOVE_PLACE_POSITION; } break; } case TrayTransferSteps.S3200_MOVE_PLACE_POSITION: { if (MoveLiftOkPosition()) { Step = TrayTransferSteps.S3205_MOVE_PLACE_POSITION_CHECK; } break; } case TrayTransferSteps.S3205_MOVE_PLACE_POSITION_CHECK: { if (MotorX.MotionComplete) { if (isLiftOkPosition) { Step = TrayTransferSteps.s3300_ALIGN_TOP_BACKWARD; } else { Step = TrayTransferSteps.S3200_MOVE_PLACE_POSITION; } } break; } case TrayTransferSteps.s3300_ALIGN_TOP_BACKWARD: { if (equipment.unloader.LiftOk.AlignerTop.IsWorkEnd) { if (equipment.unloader.LiftOk.AlignerTop.IsBackward) { Step = TrayTransferSteps.s3310_STACKER_BACKWARD; } else { equipment.unloader.LiftOk.AlignerTop.Backward(); } } break; } case TrayTransferSteps.s3310_STACKER_BACKWARD: { if (equipment.unloader.LiftOk.Stacker.IsWorkEnd) { if (equipment.unloader.LiftOk.Stacker.IsBackward) { Step = TrayTransferSteps.s3320_UNCLAMP; } else { equipment.unloader.LiftOk.Stacker.Backward(); } } break; } case TrayTransferSteps.s3320_UNCLAMP: { if (equipment.unloader.LiftOk.Clamper.IsWorkEnd) { if (equipment.unloader.LiftOk.Clamper.IsUnclamp) { Step = TrayTransferSteps.S3330_PICKER_DOWN; } else { equipment.unloader.LiftOk.Clamper.Unclamp(); } } break; } case TrayTransferSteps.S3330_PICKER_DOWN: { if (Picker.IsWorkEnd) { if (Picker.IsDown) { Step = TrayTransferSteps.S3340_VACUUM_OFF; } else { Picker.Down(); } } break; } case TrayTransferSteps.S3340_VACUUM_OFF: { if (Picker.IsWorkEnd) { if (Picker.VacuumSolOn == false) { Step = TrayTransferSteps.S3350_PICKER_UP; } else { Picker.VacuumOff(); } } break; } case TrayTransferSteps.S3350_PICKER_UP: { if (Picker.IsWorkEnd) { if (Picker.IsUp) { Step = TrayTransferSteps.S3360_VACUUM_CHECK; } else { Picker.Up(); } } break; } case TrayTransferSteps.S3360_VACUUM_CHECK: { if (Picker.IsVacuumSensor == false) { Step = TrayTransferSteps.S3370_TRAY_COUNT_SET; } else { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0812_ULD_TRAY_TR_VACUUM_ON_CHECK); } break; } case TrayTransferSteps.S3370_TRAY_COUNT_SET: { equipment.UnloaderOkTrayCount = equipment.UnloaderOkTrayCount + 1; Step = TrayTransferSteps.S3999_PLACE_TRAY_END; break; } case TrayTransferSteps.S3999_PLACE_TRAY_END: { _tactTime.Stop(); Step = TrayTransferSteps.S1000_MOVE_STAY_POSITION_START; break; } } } public void PlaceTrayNg() { switch (Step) { case TrayTransferSteps.S4000_PLACE_TRAY_START: { _tactTime.Start(); Step = TrayTransferSteps.S4100_PICKER_UP; break; } case TrayTransferSteps.S4100_PICKER_UP: { if (Picker.IsWorkEnd) { if (Picker.IsUp) { Step = TrayTransferSteps.S4110_LIFT_LIMIT_SENSOR_CHECK; } else { Picker.Up(); } } break; } case TrayTransferSteps.S4110_LIFT_LIMIT_SENSOR_CHECK: { if (equipment.unloader.LiftIn.IsLiftLimitSensor1 || equipment.unloader.LiftIn.IsLiftLimitSensor2 || equipment.unloader.LiftNg.IsLiftLimitSensor1 || equipment.unloader.LiftNg.IsLiftLimitSensor2) { if (equipment.unloader.LiftIn.IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0713_ULD_TRAY_EMPTY_LIFT_UP_1_1_SENSOR_CHECK); } if (equipment.unloader.LiftIn.IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0714_ULD_TRAY_EMPTY_LIFT_UP_1_2_SENSOR_CHECK); } if (equipment.unloader.LiftNg.IsLiftLimitSensor1) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0780_ULD_TRAY_NG_LIFT_UP_1_1_SENSOR_CHECK); } if (equipment.unloader.LiftNg.IsLiftLimitSensor2) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0781_ULD_TRAY_NG_LIFT_UP_1_2_SENSOR_CHECK); } } else { Step = TrayTransferSteps.S4120_HANDLER_POSITION_CHECK; } break; } case TrayTransferSteps.S4120_HANDLER_POSITION_CHECK: { double position = equipment.unloader.Handler1.Get_Position_Y_Stay(); if (position <= equipment.unloader.Handler1.MotorY.Position || equipment.unloader.Handler1.MotorY.Is_Inposition(position, equipment.Setting.Inposition_Offset)) { Step = TrayTransferSteps.S4200_MOVE_PLACE_POSITION; } break; } case TrayTransferSteps.S4200_MOVE_PLACE_POSITION: { if (MoveLiftNgPosition()) { Step = TrayTransferSteps.S4205_MOVE_PLACE_POSITION_CHECK; } break; } case TrayTransferSteps.S4205_MOVE_PLACE_POSITION_CHECK: { if (MotorX.MotionComplete) { if (isLiftNgPosition) { Step = TrayTransferSteps.S4300_ALIGN_TOP_BACKWARD; } else { Step = TrayTransferSteps.S4200_MOVE_PLACE_POSITION; } } break; } case TrayTransferSteps.S4300_ALIGN_TOP_BACKWARD: { if (equipment.unloader.LiftNg.AlignerTop.IsWorkEnd) { if (equipment.unloader.LiftNg.AlignerTop.IsBackward) { Step = TrayTransferSteps.S4310_STACKER_BACKWARD; } else { equipment.unloader.LiftNg.AlignerTop.Backward(); } } break; } case TrayTransferSteps.S4310_STACKER_BACKWARD: { if (equipment.unloader.LiftNg.Stacker.IsWorkEnd) { if (equipment.unloader.LiftNg.Stacker.IsBackward) { Step = TrayTransferSteps.S4320_UNCLAMP; } else { equipment.unloader.LiftNg.Stacker.Backward(); } } break; } case TrayTransferSteps.S4320_UNCLAMP: { if (equipment.unloader.LiftNg.Clamper.IsWorkEnd) { if (equipment.unloader.LiftNg.Clamper.IsUnclamp) { Step = TrayTransferSteps.S4330_PICKER_DOWN; } else { equipment.unloader.LiftNg.Clamper.Unclamp(); } } break; } case TrayTransferSteps.S4330_PICKER_DOWN: { if (Picker.IsWorkEnd) { if (Picker.IsDown) { Step = TrayTransferSteps.S4340_VACUUM_OFF; } else { Picker.Down(); } } break; } case TrayTransferSteps.S4340_VACUUM_OFF: { if (Picker.IsWorkEnd) { if (Picker.VacuumSolOn == false) { Step = TrayTransferSteps.S4350_PICKER_UP; } else { Picker.VacuumOff(); } } break; } case TrayTransferSteps.S4350_PICKER_UP: { if (Picker.IsWorkEnd) { if (Picker.IsUp) { Step = TrayTransferSteps.S4360_VACUUM_CHECK; } else { Picker.Up(); } } break; } case TrayTransferSteps.S4360_VACUUM_CHECK: { if (Picker.IsVacuumSensor == false) { Step = TrayTransferSteps.S4370_TRAY_COUNT_SET; } else { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0812_ULD_TRAY_TR_VACUUM_ON_CHECK); } break; } case TrayTransferSteps.S4370_TRAY_COUNT_SET: { equipment.UnloaderNgTrayCount = equipment.UnloaderNgTrayCount + 1; Step = TrayTransferSteps.S4999_PLACE_TRAY_END; break; } case TrayTransferSteps.S4999_PLACE_TRAY_END: { _tactTime.Stop(); Step = TrayTransferSteps.S1000_MOVE_STAY_POSITION_START; break; } } } public double Get_Current_Position_X_1() { double position; position = double.Parse(MotorX.Position.ToString("F3")); return position; } public bool Get_Vacuum_On_Check() { return equipment.sm.Get_Bit(Output_Memory_Address.ULD_Tray_Transfer_Vaccum_On_Sol_Valve); } public bool Get_Blow_On_Check() { return equipment.sm.Get_Bit(Output_Memory_Address.ULD_Tray_Transfer_Blow_On_Sol_Valve); } public bool Get_Vacuum_Check() { return equipment.sm.Get_Bit(Input_Memory_Address.ULD_Tray_Transfer_Vaccum_On_Check); } public bool Get_Picker_Down_On_Check() { return equipment.sm.Get_Bit(Output_Memory_Address.ULD_Tray_TR_Down); } public bool Get_Picker_Down_Sensor_Check() { return equipment.sm.Get_Bit(Input_Memory_Address.ULD_Tray_Transfer_Down_Sensor); } public bool Get_Picker_Up_Sensor_Check() { return equipment.sm.Get_Bit(Input_Memory_Address.ULD_Tray_Transfer_Up_Sensor); } public bool MoveLiftOkPosition() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Tray_X_OK_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.ULD_Tray_X_OK_Velocity, out value); velocity = double.Parse($"{value}"); return MotorX.Move_Absolute_Pos(position, velocity); } public bool MoveLiftNgPosition() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Tray_X_NG_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.ULD_Tray_X_NG_Velocity, out value); velocity = double.Parse($"{value}"); return MotorX.Move_Absolute_Pos(position, velocity); } public bool MoveLiftInPosition() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Tray_X_Empty_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.ULD_Tray_X_Empty_Velocity, out value); velocity = double.Parse($"{value}"); return MotorX.Move_Absolute_Pos(position, velocity); } public bool Set_Vacuum_On(bool onoff) { return equipment.Board_Control.IO_manager.Set_Output(OutputData.ULD_Tray_Transfer_Vaccum_On_Sol_Valve, onoff); } public bool Set_Blow_On(bool onoff) { return equipment.Board_Control.IO_manager.Set_Output(OutputData.ULD_Tray_Transfer_Blow_On_Sol_Valve, onoff); } public bool Set_Picker_Down(bool onoff) { return equipment.Board_Control.IO_manager.Set_Output(OutputData.ULD_Tray_TR_Down, onoff); } #endregion } }