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
|
{
|
_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;
|
|
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
|
}
|
}
|