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