using System;
|
using System.Collections.Generic;
|
using System.Windows.Forms;
|
|
namespace SHARP_CLAS_UI
|
{
|
public class AblationStage1 : AblationStage
|
{
|
#region Enum
|
private enum StageSteps
|
{
|
S0000_WAIT,
|
|
S9000_SCRAP_START,
|
S9100_VACUUM_OFF,
|
S9110_DATA_SET,
|
S9999_SCRAP_END,
|
}
|
#endregion
|
|
#region Property
|
public bool IsPlaceEnable
|
{
|
get
|
{
|
if(IsExist == false && Step == AblationStageSteps.S1200_PANEL_EXIST_CHECK)
|
{
|
return true;
|
}
|
else
|
{
|
return false;
|
}
|
}
|
}
|
|
public bool IsPickEnable
|
{
|
get
|
{
|
if (IsExist && Step == AblationStageSteps.S6200_PANEL_EMPTY_CHECK)
|
{
|
return true;
|
}
|
else
|
{
|
return false;
|
}
|
}
|
}
|
|
public override Panel_Info Panel1
|
{
|
get
|
{
|
return Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.Ablation_1_1);
|
}
|
set
|
{
|
Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.Ablation_1_1, value);
|
}
|
}
|
|
public override Panel_Info Panel2
|
{
|
get
|
{
|
return Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.Ablation_1_2);
|
}
|
set
|
{
|
Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.Ablation_1_2, value);
|
}
|
}
|
|
public override bool IsStayPosition
|
{
|
get
|
{
|
object value;
|
double get_position;
|
|
equipment.sm.Get_Value(Position_Parameter_Address.Ablation_Stage_1_Y_Load_Position, out value);
|
get_position = double.Parse($"{value}");
|
|
return MotorY.Is_Inposition(get_position, equipment.Setting.Inposition_Offset);
|
}
|
}
|
|
public bool IsUnloadPosition
|
{
|
get
|
{
|
object value;
|
|
equipment.sm.Get_Value(Position_Parameter_Address.Ablation_Stage_1_Y_Unload_Position, out value);
|
var position = double.Parse($"{value}");
|
|
return MotorY.Is_Inposition(position, equipment.Setting.Inposition_Offset);
|
}
|
}
|
|
public override bool IsWorkEnd
|
{
|
get
|
{
|
if (Step == AblationStageSteps.S0000_WAIT)
|
{
|
return true;
|
}
|
else
|
{
|
return false;
|
}
|
}
|
}
|
|
public AblationStageSteps Step
|
{
|
get
|
{
|
return _step;
|
}
|
|
set
|
{
|
_step = value;
|
}
|
}
|
#endregion
|
|
#region Field
|
private Timer tmrUi = new Timer();
|
public Time_Checker Tact_Move = new Time_Checker();
|
private Form_User_Command_Set _fineAlignUserCommand;
|
|
private AblationStageSteps _step;
|
private AblationStageSteps _oldStep;
|
public AblationStageHomeSteps _homeStep;
|
|
private StageSteps _stage1Step;
|
private StageSteps _stage2Step;
|
|
|
private int _fineAlignRetryCount;
|
private bool _fineAlignCommandShowBit;
|
#endregion
|
|
#region Construct
|
public AblationStage1(Equipment equipment) : base(equipment, MotorAxis.Ablation_Y_1, "Ablation_Stage_1")
|
{
|
Step = AblationStageSteps.S0000_WAIT;
|
_oldStep = AblationStageSteps.S0000_WAIT;
|
|
Stage1.Initialize(OutputData.Ablation_Stage_1_1_Vaccum_On_Sol_Valve, OutputData.Ablation_Stage_1_2_Vaccum_On_Sol_Valve, OutputData.Ablation_Stage_1_1_Blow_On_Sol_Valve, OutputData.Ablation_Stage_1_2_Blow_On_Sol_Valve, InputData.Ablation_Stage_1_1_Vaccum_On_Check, InputData.Ablation_Stage_1_2_Vaccum_On_Check, En_Alarm_List.AL_0680_ABLATION_STAGE_1_1_VACUUM_ON_CHECK, En_Alarm_List.AL_0681_ABLATION_STAGE_1_2_VACUUM_ON_CHECK);
|
Stage2.Initialize(OutputData.Ablation_Stage_2_1_Vaccum_On_Sol_Valve, OutputData.Ablation_Stage_2_2_Vaccum_On_Sol_Valve, OutputData.Ablation_Stage_2_1_Blow_On_Sol_Valve, OutputData.Ablation_Stage_2_2_Blow_On_Sol_Valve, InputData.Ablation_Stage_2_1_Vaccum_On_Check, InputData.Ablation_Stage_2_2_Vaccum_On_Check, En_Alarm_List.AL_0682_ABLATION_STAGE_2_1_VACUUM_ON_CHECK, En_Alarm_List.AL_0683_ABLATION_STAGE_2_2_VACUUM_ON_CHECK);
|
|
pauseDisableList.Add(AblationStageSteps.S1105_POSITION_CHECK);
|
pauseDisableList.Add(AblationStageSteps.S2105_POSITION_CHECK);
|
pauseDisableList.Add(AblationStageSteps.S3105_POSITION_CHECK);
|
pauseDisableList.Add(AblationStageSteps.S3205_POSITION_CHECK);
|
pauseDisableList.Add(AblationStageSteps.S4105_POSITION_CHECK);
|
pauseDisableList.Add(AblationStageSteps.S4205_POSITION_CHECK);
|
pauseDisableList.Add(AblationStageSteps.S5105_POSITION_CHECK);
|
pauseDisableList.Add(AblationStageSteps.S5205_POSITION_CHECK);
|
pauseDisableList.Add(AblationStageSteps.S6105_POSITION_CHECK);
|
|
MotorY.Check_Jog_Interlock = Jog_Interlock;
|
MotorY.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 (_fineAlignCommandShowBit && _fineAlignUserCommand != null)
|
{
|
_fineAlignUserCommand.Show();
|
_fineAlignCommandShowBit = false;
|
}
|
}
|
|
public void Init_Seq()
|
{
|
Step = AblationStageSteps.S0000_WAIT;
|
_homeStep = AblationStageHomeSteps.S0000_WAIT;
|
|
Tact_Move.Reset();
|
}
|
|
private void ExecuteAuto()
|
{
|
if (Step == AblationStageSteps.S0000_WAIT)
|
{
|
if (IsExist)
|
{
|
if (equipment.Mode.Cell_Id_Bcr_Skip == false && ((Stage1.IsExist && Panel1.IsPanelIdReadWorked == false) || (Stage2.IsExist && Panel2.IsPanelIdReadWorked == false)))
|
{
|
Step = AblationStageSteps.S2000_PANEL_ID_READ_START;
|
}
|
else if (equipment.Mode.Fine_Align_Skip == false && ((Stage1.IsExist && Panel1.Fine_Align_Ack == false) || (Stage2.IsExist && Panel2.Fine_Align_Ack == false)))
|
{
|
Step = AblationStageSteps.S3000_FINE_ALIGN_START;
|
}
|
else if (equipment.Mode.Ablation_Skip == false && ((Stage1.IsExist && Panel1.IsAblationWorked == false && Panel1.Ablation_Run == true) || (Stage2.IsExist && Panel2.IsAblationWorked == false && Panel2.Ablation_Run == true)))
|
{
|
Step = AblationStageSteps.S4000_ABLATION_START;
|
}
|
else if (equipment.Mode.Plasma_Skip == false && ((Stage1.IsExist && Panel1.IsPlasmaWorked == false && Panel1.Ablation_Run == true) || (Stage2.IsExist && Panel2.IsPlasmaWorked == false && Panel2.Ablation_Run == true)))
|
{
|
Step = AblationStageSteps.S5000_PLASMA_START;
|
}
|
else
|
{
|
Step = AblationStageSteps.S6000_PANEL_UNLOAD_START;
|
}
|
}
|
else
|
{
|
Step = AblationStageSteps.S1000_PANEL_LOAD_START;
|
}
|
}
|
}
|
|
public override void MonitoringStatus()
|
{
|
if (UnitMode == En_Equipment_Mode.Auto || UnitMode == En_Equipment_Mode.Manual)
|
{
|
if (Stage1.IsWorkEnd)
|
{
|
if (Stage1.VacuumSol1On && Stage1.IsVacuum1Sensor == false)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0680_ABLATION_STAGE_1_1_VACUUM_ON_CHECK);
|
}
|
|
if (Stage1.VacuumSol2On && Stage1.IsVacuum2Sensor == false)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0681_ABLATION_STAGE_1_2_VACUUM_ON_CHECK);
|
}
|
}
|
|
if (Stage2.IsWorkEnd)
|
{
|
if (Stage2.VacuumSol1On && Stage2.IsVacuum1Sensor == false)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0682_ABLATION_STAGE_2_1_VACUUM_ON_CHECK);
|
}
|
|
if (Stage2.VacuumSol2On && Stage2.IsVacuum2Sensor == false)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0683_ABLATION_STAGE_2_2_VACUUM_ON_CHECK);
|
}
|
}
|
}
|
|
if (equipment.User.Level != En_User_Level.Master && equipment.Door_Opened)
|
{
|
if (MotorY.MotionComplete == false)
|
{
|
MotorY.Move_Stop();
|
}
|
}
|
}
|
|
public override void ExecuteStep()
|
{
|
if (_oldStep != Step)
|
{
|
sequenceChangedTime.Restart();
|
_oldStep = Step;
|
WriteSequenceLog(Step.ToString());
|
}
|
|
Stage1.ExecuteProcess();
|
Stage2.ExecuteProcess();
|
|
Seq_Stage1Step();
|
Seq_Stage2Step();
|
|
if (UnitMode == En_Equipment_Mode.Stop)
|
{
|
Init_Seq();
|
equipment.process.TactTime1.Reset();
|
isHomeComplete = false;
|
return;
|
}
|
else if (UnitMode == En_Equipment_Mode.Pause)
|
{
|
sequenceChangedTime.Stop();
|
|
return;
|
}
|
else if (UnitMode == En_Equipment_Mode.Home)
|
{
|
if (IsHomeComplete == false)
|
{
|
ExecuteHome();
|
}
|
|
return;
|
}
|
else if (UnitMode == En_Equipment_Mode.Auto || UnitMode == En_Equipment_Mode.Manual)
|
{
|
sequenceChangedTime.Start();
|
|
if (equipment.equip_mode == En_Equipment_Mode.Pause)
|
{
|
if (pauseDisableList.Contains(Step) == false)
|
{
|
UnitMode = En_Equipment_Mode.Pause;
|
return;
|
}
|
}
|
|
if (UnitMode == En_Equipment_Mode.Auto)
|
ExecuteAuto();
|
|
Seq_Load();
|
Seq_PanelIdRead();
|
Seq_FineAlign();
|
Seq_Ablation();
|
Seq_Plasma();
|
Seq_Unload();
|
}
|
}
|
|
private void ExecuteHome()
|
{
|
switch(_homeStep)
|
{
|
case AblationStageHomeSteps.S0000_WAIT:
|
{
|
_homeStep = AblationStageHomeSteps.S1000_STATUS_CHECK;
|
break;
|
}
|
case AblationStageHomeSteps.S1000_STATUS_CHECK:
|
{
|
if (MotorY.ErrorStop)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0291_ABLATION_Y_1_ERROR_STOP);
|
}
|
else if (!MotorY.PowerOn)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0290_ABLATION_Y_1_POWER_OFF);
|
}
|
else
|
{
|
_homeStep = AblationStageHomeSteps.S2000_Y_HOME_START;
|
}
|
break;
|
}
|
case AblationStageHomeSteps.S2000_Y_HOME_START:
|
{
|
if (MotorY.Home())
|
{
|
homeCheckedTime.Restart();
|
_homeStep = AblationStageHomeSteps.S2100_Y_HOME_CHECK;
|
}
|
break;
|
}
|
case AblationStageHomeSteps.S2100_Y_HOME_CHECK:
|
{
|
if (homeCheckedTime.Seconds < 1) return;
|
|
if (!MotorY.IsHomed)
|
{
|
if (MotorY.Homing == false && MotorY.ErrorStop)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0291_ABLATION_Y_1_ERROR_STOP);
|
}
|
}
|
else
|
{
|
_homeStep = AblationStageHomeSteps.S3000_MOVE_LOAD_POSITION;
|
}
|
break;
|
}
|
case AblationStageHomeSteps.S3000_MOVE_LOAD_POSITION:
|
{
|
if (Move_Y_Load_Position())
|
{
|
homeCheckedTime.Restart();
|
_homeStep = AblationStageHomeSteps.S3100_POSITION_CHECK;
|
}
|
break;
|
}
|
case AblationStageHomeSteps.S3100_POSITION_CHECK:
|
{
|
if (homeCheckedTime.Seconds < 1) return;
|
|
if (MotorY.ErrorStop)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0291_ABLATION_Y_1_ERROR_STOP);
|
}
|
else if (MotorY.MotionComplete)
|
{
|
if (IsStayPosition)
|
{
|
_homeStep = AblationStageHomeSteps.S9999_END;
|
}
|
else
|
{
|
Interlock_Manager.Add_Interlock_Msg("Ablation Stage 1 Home can't run.", "Ablation Stage Y 1 is not load position.");
|
}
|
}
|
break;
|
}
|
case AblationStageHomeSteps.S9999_END:
|
{
|
isHomeComplete = true;
|
_homeStep = AblationStageHomeSteps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
private void Seq_Load()
|
{
|
switch (Step)
|
{
|
case AblationStageSteps.S1000_PANEL_LOAD_START:
|
{
|
Step = AblationStageSteps.S1100_MOVE_STAY_POSITION;
|
break;
|
}
|
case AblationStageSteps.S1100_MOVE_STAY_POSITION:
|
{
|
if (Move_Y_Load_Position())
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Loading Position [Start]");
|
Step = AblationStageSteps.S1105_POSITION_CHECK;
|
}
|
break;
|
}
|
case AblationStageSteps.S1105_POSITION_CHECK:
|
{
|
if (MotorY.MotionComplete)
|
{
|
if (IsStayPosition)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Loading Position [End]");
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Loading Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = AblationStageSteps.S1200_PANEL_EXIST_CHECK;
|
}
|
else
|
{
|
Step = AblationStageSteps.S1100_MOVE_STAY_POSITION;
|
}
|
}
|
break;
|
}
|
case AblationStageSteps.S1200_PANEL_EXIST_CHECK:
|
{
|
if (IsExist && equipment.before.Handler2.Picker1.IsUp && equipment.before.Handler2.Picker2.IsUp)
|
{
|
equipment.process.TactTime1.Restart();
|
Step = AblationStageSteps.S1999_PANEL_LOAD_END;
|
}
|
break;
|
}
|
case AblationStageSteps.S1999_PANEL_LOAD_END:
|
{
|
Tact_Move.Stop();
|
Step = AblationStageSteps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
private void Seq_PanelIdRead()
|
{
|
switch (Step)
|
{
|
case AblationStageSteps.S2000_PANEL_ID_READ_START:
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Panel ID Position [Start]");
|
Step = AblationStageSteps.S2100_MOVE_STAGE_BCR_POSITION;
|
break;
|
}
|
case AblationStageSteps.S2100_MOVE_STAGE_BCR_POSITION:
|
{
|
if (MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Ablation_MCR_1_Y, 500))
|
{
|
Step = AblationStageSteps.S2105_POSITION_CHECK;
|
}
|
break;
|
}
|
case AblationStageSteps.S2105_POSITION_CHECK:
|
{
|
if (MotorY.MotionComplete)
|
{
|
if (MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Ablation_MCR_1_Y, equipment.Setting.Inposition_Offset))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Panel ID Position [End]");
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Panel ID Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = AblationStageSteps.S2100_FINE_ALIGN_STATUS_CHECK;
|
}
|
else
|
{
|
Step = AblationStageSteps.S2100_MOVE_STAGE_BCR_POSITION;
|
}
|
}
|
break;
|
}
|
case AblationStageSteps.S2100_FINE_ALIGN_STATUS_CHECK:
|
{
|
if (AblationStageSteps.S2100_FINE_ALIGN_STATUS_CHECK < equipment.process.ablation_stage_2.Step && equipment.process.ablation_stage_2.Step <= AblationStageSteps.S3999_FINE_ALIGN_END)
|
{
|
|
}
|
else
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Panel ID Reading [Start]");
|
Step = AblationStageSteps.S2300_READ_BCR_START;
|
}
|
break;
|
}
|
case AblationStageSteps.S2300_READ_BCR_START:
|
{
|
if (equipment.process.fine_align.Stage1PanelIdReadStart())
|
{
|
Step = AblationStageSteps.S2310_READ_BCR_WAIT;
|
}
|
break;
|
}
|
case AblationStageSteps.S2310_READ_BCR_WAIT:
|
{
|
if (equipment.process.fine_align.IsWorkEnd)
|
{
|
Step = AblationStageSteps.S2999_PANEL_ID_READ_END;
|
}
|
break;
|
}
|
case AblationStageSteps.S2999_PANEL_ID_READ_END:
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Panel ID Reading [End]");
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Panel ID Reading [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = AblationStageSteps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
private void Seq_FineAlign()
|
{
|
switch (Step)
|
{
|
case AblationStageSteps.S3000_FINE_ALIGN_START:
|
{
|
Tact_Move.Start();
|
_fineAlignRetryCount = 0;
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, FineAlign [Start]");
|
Step = AblationStageSteps.S3100_MOVE_STAGE_FINE_ALIGN_LEFT_POSITION;
|
break;
|
}
|
case AblationStageSteps.S3100_MOVE_STAGE_FINE_ALIGN_LEFT_POSITION:
|
{
|
if (MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Fine_Align_1_Left_Y, 500))
|
{
|
Step = AblationStageSteps.S3105_POSITION_CHECK;
|
}
|
break;
|
}
|
case AblationStageSteps.S3105_POSITION_CHECK:
|
{
|
if (MotorY.MotionComplete)
|
{
|
if (MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Fine_Align_1_Left_Y, equipment.Setting.Inposition_Offset))
|
{
|
Step = AblationStageSteps.S3110_FINE_ALIGN_LEFT_START;
|
}
|
else
|
{
|
Step = AblationStageSteps.S3100_MOVE_STAGE_FINE_ALIGN_LEFT_POSITION;
|
}
|
}
|
break;
|
}
|
case AblationStageSteps.S3110_FINE_ALIGN_LEFT_START:
|
{
|
if (AblationStageSteps.S3110_FINE_ALIGN_LEFT_START < equipment.process.ablation_stage_2.Step && equipment.process.ablation_stage_2.Step <= AblationStageSteps.S3999_FINE_ALIGN_END)
|
{
|
|
}
|
else
|
{
|
if (equipment.process.fine_align.Stage1FineAlignLeftStart())
|
{
|
Step = AblationStageSteps.S3120_FINE_ALIGN_LEFT_WAIT;
|
}
|
}
|
break;
|
}
|
case AblationStageSteps.S3120_FINE_ALIGN_LEFT_WAIT:
|
{
|
if (equipment.process.fine_align.IsWorkEnd)
|
{
|
Step = AblationStageSteps.S3200_MOVE_STAGE_FINE_ALIGN_RIGHT_POSITION;
|
}
|
break;
|
}
|
case AblationStageSteps.S3200_MOVE_STAGE_FINE_ALIGN_RIGHT_POSITION:
|
{
|
if (MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Fine_Align_1_Right_Y, 500))
|
{
|
Step = AblationStageSteps.S3205_POSITION_CHECK;
|
}
|
break;
|
}
|
case AblationStageSteps.S3205_POSITION_CHECK:
|
{
|
if (MotorY.MotionComplete)
|
{
|
if (MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Fine_Align_1_Right_Y, equipment.Setting.Inposition_Offset))
|
{
|
Step = AblationStageSteps.S3210_FINE_ALIGN_RIGHT_START;
|
}
|
else
|
{
|
Step = AblationStageSteps.S3200_MOVE_STAGE_FINE_ALIGN_RIGHT_POSITION;
|
}
|
}
|
break;
|
}
|
case AblationStageSteps.S3210_FINE_ALIGN_RIGHT_START:
|
{
|
if (equipment.process.fine_align.Stage1FineAlignRightStart())
|
{
|
Step = AblationStageSteps.S3220_FINE_ALIGN_RIGHT_WAIT;
|
}
|
break;
|
}
|
case AblationStageSteps.S3220_FINE_ALIGN_RIGHT_WAIT:
|
{
|
if (equipment.process.fine_align.IsWorkEnd)
|
{
|
Step = AblationStageSteps.S3300_FINE_ALIGN_CHECK;
|
}
|
break;
|
}
|
case AblationStageSteps.S3300_FINE_ALIGN_CHECK:
|
{
|
object value_offset;
|
|
var info1 = Panel1;
|
var info2 = Panel2;
|
|
var isPanel1FineAlignResult = Stage1.IsExist == false || info1.Fine_Align_Result;
|
var isPanel2FineAlignResult = Stage2.IsExist == false || info2.Fine_Align_Result;
|
|
var max = equipment.Cur_Main_Recipe.vision_info.Fine_Align_Mark_Distance + equipment.Setting.Fine_Align_Mark_Offset_Range;
|
var min = equipment.Cur_Main_Recipe.vision_info.Fine_Align_Mark_Distance - equipment.Setting.Fine_Align_Mark_Offset_Range;
|
|
if((isPanel1FineAlignResult || equipment.sm.Get_Bit(Vision_Address.Fine_Align_Left_Ack))
|
&& (isPanel2FineAlignResult || equipment.sm.Get_Bit(Vision_Address.Fine_Align_Right_Ack)))
|
{
|
if(Stage1.IsExist && info1.Fine_Align_Result == false)
|
{
|
info1.Fine_Align_Ack = true;
|
info1.Fine_Align_Result = equipment.sm.Get_Bit(Vision_Address.Fine_Align_Left_Result);
|
equipment.Write_Exception_Log($"Fine Align Result Left {info1.Fine_Align_Result}");
|
Panel1 = info1;
|
isPanel1FineAlignResult = Stage1.IsExist == false || info1.Fine_Align_Result;
|
}
|
|
if (Stage2.IsExist && info2.Fine_Align_Result == false)
|
{
|
info2.Fine_Align_Ack = true;
|
info2.Fine_Align_Result = equipment.sm.Get_Bit(Vision_Address.Fine_Align_Right_Result);
|
equipment.Write_Exception_Log($"Fine Align Result Right {info2.Fine_Align_Result}");
|
Panel2 = info2;
|
isPanel2FineAlignResult = Stage2.IsExist == false || info2.Fine_Align_Result;
|
}
|
|
if(isPanel1FineAlignResult && isPanel2FineAlignResult)
|
{
|
if(Stage1.IsExist && info1.Fine_Align_Result && info1.Ablation_Run)
|
{
|
equipment.sm.Get_Value(Vision_Address.Fine_Align_Left_Offset_X, out value_offset);
|
info1.Fine_Align_X_Offset = double.Parse(value_offset.ToString());
|
info1.Fine_Align_X_Offset = double.Parse(info1.Fine_Align_X_Offset.ToString("F3"));
|
|
equipment.sm.Get_Value(Vision_Address.Fine_Align_Left_Offset_Y, out value_offset);
|
info1.Fine_Align_Y_Offset = double.Parse(value_offset.ToString());
|
info1.Fine_Align_Y_Offset = double.Parse(info1.Fine_Align_Y_Offset.ToString("F3"));
|
|
equipment.sm.Get_Value(Vision_Address.Fine_Align_Left_Offset_T, out value_offset);
|
info1.Fine_Align_T_Offset = double.Parse(value_offset.ToString());
|
info1.Fine_Align_T_Offset = double.Parse(info1.Fine_Align_T_Offset.ToString("F3"));
|
|
equipment.sm.Get_Value(Vision_Address.Fine_Align_Left_Mark_Distance, out value_offset);
|
info1.Fine_Align_Distatnce = double.Parse(value_offset.ToString());
|
|
Panel1 = info1;
|
}
|
|
if(Stage2.IsExist && info2.Fine_Align_Result && info2.Ablation_Run)
|
{
|
equipment.sm.Get_Value(Vision_Address.Fine_Align_Right_Offset_X, out value_offset);
|
info2.Fine_Align_X_Offset = double.Parse(value_offset.ToString());
|
info2.Fine_Align_X_Offset = double.Parse(info2.Fine_Align_X_Offset.ToString("F3"));
|
|
equipment.sm.Get_Value(Vision_Address.Fine_Align_Right_Offset_Y, out value_offset);
|
info2.Fine_Align_Y_Offset = double.Parse(value_offset.ToString());
|
info2.Fine_Align_Y_Offset = double.Parse(info2.Fine_Align_Y_Offset.ToString("F3"));
|
|
equipment.sm.Get_Value(Vision_Address.Fine_Align_Right_Offset_T, out value_offset);
|
info2.Fine_Align_T_Offset = double.Parse(value_offset.ToString());
|
info2.Fine_Align_T_Offset = double.Parse(info2.Fine_Align_T_Offset.ToString("F3"));
|
|
equipment.sm.Get_Value(Vision_Address.Fine_Align_Right_Mark_Distance, out value_offset);
|
info2.Fine_Align_Distatnce = double.Parse(value_offset.ToString());
|
|
Panel2 = info2;
|
}
|
|
double leftDistatnce = info1.Fine_Align_Distatnce;
|
|
double rightDistatnce = info2.Fine_Align_Distatnce;
|
|
if((Stage1.IsExist && info1.Ablation_Run && (leftDistatnce < min || max < leftDistatnce)) || (Stage2.IsExist && info2.Ablation_Run && (rightDistatnce < min || max < rightDistatnce)))
|
{
|
if (Stage1.IsExist && info1.Ablation_Run && (leftDistatnce < min || max < leftDistatnce))
|
{
|
info1.Fine_Align_Result = false;
|
Panel1 = info1;
|
equipment.Write_Exception_Log($"Fine Align Distance Error, Distance : {leftDistatnce}, Min : {min} Max : {max}");
|
Interlock_Manager.Add_Interlock_Msg("Ablation 1-1 Fine Align Distance Error", $"Distance : {leftDistatnce}, Min : {min} Max : {max}");
|
}
|
|
if (Stage2.IsExist && info2.Ablation_Run && (rightDistatnce < min || max < rightDistatnce))
|
{
|
info2.Fine_Align_Result = false;
|
Panel2 = info2;
|
equipment.Write_Exception_Log($"Fine Align Distance Error, Distance : {rightDistatnce}, Min : {min} Max : {max}");
|
Interlock_Manager.Add_Interlock_Msg("Ablation 1-2 Fine Align Distance Error", $"Distance : {rightDistatnce}, Min : {min} Max : {max}");
|
}
|
|
Step = AblationStageSteps.S3310_USER_COMMAND_START;
|
}
|
else
|
{
|
Step = AblationStageSteps.S3999_FINE_ALIGN_END;
|
}
|
}
|
else
|
{
|
_fineAlignRetryCount++;
|
|
if (_fineAlignRetryCount >= equipment.Setting.Vision_Retry_Count)
|
{
|
Step = AblationStageSteps.S3310_USER_COMMAND_START;
|
}
|
else
|
{
|
Step = AblationStageSteps.S3100_MOVE_STAGE_FINE_ALIGN_LEFT_POSITION;
|
}
|
}
|
}
|
else
|
{
|
if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
_fineAlignRetryCount++;
|
|
if (_fineAlignRetryCount > equipment.Setting.Vision_Retry_Count)
|
{
|
if (sequenceChangedTime.Minute > 5)
|
{
|
Step = AblationStageSteps.S3310_USER_COMMAND_START;
|
}
|
}
|
else if (_fineAlignRetryCount == equipment.Setting.Vision_Retry_Count)
|
{
|
Step = AblationStageSteps.S3310_USER_COMMAND_START;
|
}
|
else
|
{
|
Step = AblationStageSteps.S3100_MOVE_STAGE_FINE_ALIGN_LEFT_POSITION;
|
}
|
}
|
}
|
break;
|
}
|
case AblationStageSteps.S3310_USER_COMMAND_START:
|
{
|
if (Stage1.IsExist && Panel1.Fine_Align_Result == false)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0884_FINE_ALIGN_LEFT_ERROR);
|
}
|
|
if (Stage2.IsExist && Panel2.Fine_Align_Result == false)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0885_FINE_ALIGN_RIGHT_ERROR);
|
}
|
|
_fineAlignUserCommand = new Form_User_Command_Set("Ablation 1 Fine Align");
|
_fineAlignCommandShowBit = true;
|
|
Step = AblationStageSteps.S3320_USER_COMMAND_WAIT;
|
break;
|
}
|
case AblationStageSteps.S3320_USER_COMMAND_WAIT:
|
{
|
Panel_Info info1 = Panel1;
|
|
Panel_Info info2 = Panel2;
|
|
if (_fineAlignUserCommand.Command_Type == En_User_Command.Scrap)
|
{
|
if (Stage1.IsExist && info1.Fine_Align_Result == false)
|
{
|
Panel1 = new Panel_Info();
|
equipment.Align_vision.Send_Fine_Align_Command(0, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (Stage2.IsExist && info2.Fine_Align_Result == false)
|
{
|
Panel1 = new Panel_Info();
|
equipment.Align_vision.Send_Fine_Align_Command(0, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Step = AblationStageSteps.S3999_FINE_ALIGN_END;
|
}
|
else if (_fineAlignUserCommand.Command_Type == En_User_Command.Retry)
|
{
|
if (Stage1.IsExist && info1.Fine_Align_Result == false)
|
{
|
equipment.Align_vision.Send_Fine_Align_Command(1, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (Stage2.IsExist && info2.Fine_Align_Result == false)
|
{
|
equipment.Align_vision.Send_Fine_Align_Command(1, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
_fineAlignRetryCount = 0;
|
Step = AblationStageSteps.S3100_MOVE_STAGE_FINE_ALIGN_LEFT_POSITION;
|
}
|
else if (_fineAlignUserCommand.Command_Type == En_User_Command.Skip)
|
{
|
if (Stage1.IsExist && info1.Fine_Align_Result == false)
|
{
|
info1.Fine_Align_Ack = true;
|
info1.Fine_Align_Result = true;
|
info1.Ablation_Run = false;
|
Panel1 = info1;
|
equipment.Align_vision.Send_Fine_Align_Command(2, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (Stage2.IsExist && info2.Fine_Align_Result == false)
|
{
|
info2.Fine_Align_Ack = true;
|
info2.Fine_Align_Result = true;
|
info2.Ablation_Run = false;
|
Panel2 = info2;
|
equipment.Align_vision.Send_Fine_Align_Command(2, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Step = AblationStageSteps.S3300_FINE_ALIGN_CHECK;
|
}
|
else if (_fineAlignUserCommand.Command_Type == En_User_Command.Pass)
|
{
|
if (Stage1.IsExist && info1.Fine_Align_Result == false)
|
{
|
info1.Fine_Align_Ack = true;
|
Panel1 = info1;
|
equipment.Align_vision.Send_Fine_Align_Command(3, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (Stage2.IsExist && info2.Fine_Align_Result == false)
|
{
|
info2.Fine_Align_Ack = true;
|
Panel2 = info2;
|
equipment.Align_vision.Send_Fine_Align_Command(3, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
|
Step = AblationStageSteps.S3999_FINE_ALIGN_END;
|
}
|
else if (_fineAlignUserCommand.Command_Type == En_User_Command.Manual)
|
{
|
if (Stage1.IsExist && info1.Fine_Align_Result == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Fine_Align_Left_Ack, false);
|
equipment.sm.Set_Bit(Vision_Address.Fine_Align_Left_Result, false);
|
equipment.Align_vision.Send_Fine_Align_Command(4, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (Stage2.IsExist && info2.Fine_Align_Result == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Fine_Align_Right_Ack, false);
|
equipment.sm.Set_Bit(Vision_Address.Fine_Align_Right_Result, false);
|
equipment.Align_vision.Send_Fine_Align_Command(4, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Step = AblationStageSteps.S3300_FINE_ALIGN_CHECK;
|
}
|
break;
|
}
|
case AblationStageSteps.S3999_FINE_ALIGN_END:
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, FineAlign [End]");
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, FineAlign [Tact : {Tact_Move.Seconds} (sec)]");
|
|
if (equipment.Mode.Ablation_Stage_2_1_Skip == false || equipment.Mode.Ablation_Stage_2_1_Skip == false)
|
{
|
equipment.process.fine_align.Stage2WaitPositionMove();
|
}
|
|
Step = AblationStageSteps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
private void Seq_Ablation()
|
{
|
switch (Step)
|
{
|
case AblationStageSteps.S4000_ABLATION_START:
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Ablation Position [Start]");
|
|
if(Stage1.IsExist && (Panel1.IsAblationWorked == false && Panel1.Ablation_Run == true))
|
{
|
Step = AblationStageSteps.S4100_MOVE_STAGE_ABLATION_LEFT_POSITION;
|
}
|
else if(Stage2.IsExist && (Panel2.IsAblationWorked == false && Panel2.Ablation_Run == true))
|
{
|
Step = AblationStageSteps.S4200_MOVE_STAGE_ABLATION_RIGHT_POSITION;
|
}
|
else
|
{
|
Step = AblationStageSteps.S4999_ABLATION_END;
|
}
|
break;
|
}
|
case AblationStageSteps.S4100_MOVE_STAGE_ABLATION_LEFT_POSITION:
|
{
|
double position = Panel1.Fine_Align_Y_Offset + equipment.Cur_Main_Recipe.process_info.Scanner_Y_A1 + equipment.Cur_Main_Recipe.panel_type_info.Scanner_Offset_Y_A1;
|
position = double.Parse(position.ToString("F3"));
|
|
if (MotorY.Move_Absolute_Pos(position, 500))
|
{
|
Step = AblationStageSteps.S4105_POSITION_CHECK;
|
}
|
break;
|
}
|
case AblationStageSteps.S4105_POSITION_CHECK:
|
{
|
double position = Panel1.Fine_Align_Y_Offset + equipment.Cur_Main_Recipe.process_info.Scanner_Y_A1 + equipment.Cur_Main_Recipe.panel_type_info.Scanner_Offset_Y_A1;
|
position = double.Parse(position.ToString("F3"));
|
|
if (MotorY.MotionComplete)
|
{
|
if (MotorY.Is_Inposition(position, equipment.Setting.Inposition_Offset))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Ablation Position [End]");
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Ablation Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = AblationStageSteps.S4110_ABLATION_STATUS_CHECK;
|
}
|
else
|
{
|
Step = AblationStageSteps.S4100_MOVE_STAGE_ABLATION_LEFT_POSITION;
|
}
|
}
|
break;
|
}
|
case AblationStageSteps.S4110_ABLATION_STATUS_CHECK:
|
{
|
if (equipment.process.ablation.Step != AblationSteps.S0000_WAIT || (AblationStageSteps.S4105_POSITION_CHECK < equipment.process.ablation_stage_2.Step && equipment.process.ablation_stage_2.Step <= AblationStageSteps.S4999_ABLATION_END))
|
{
|
|
}
|
else
|
{
|
Step = AblationStageSteps.S4120_ABLATION_LEFT_START;
|
}
|
break;
|
}
|
case AblationStageSteps.S4120_ABLATION_LEFT_START:
|
{
|
if(equipment.process.ablation.StageA1AblationStart())
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Ablation Start [Start]");
|
Step = AblationStageSteps.S4130_ABLATION_WAIT;
|
}
|
break;
|
}
|
case AblationStageSteps.S4130_ABLATION_WAIT:
|
{
|
if (equipment.process.ablation.IsWorkEnd)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Ablation Start [End]");
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Ablation Start [Tact : {Tact_Move.Seconds} (sec)]");
|
Step = AblationStageSteps.S4200_MOVE_STAGE_ABLATION_RIGHT_POSITION;
|
}
|
break;
|
}
|
case AblationStageSteps.S4200_MOVE_STAGE_ABLATION_RIGHT_POSITION:
|
{
|
if (Stage2.IsExist && (Panel2.IsAblationWorked == false && Panel2.Ablation_Run == true))
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Ablation Position [Start]");
|
|
double position = Panel2.Fine_Align_Y_Offset + equipment.Cur_Main_Recipe.process_info.Scanner_Y_A2 + equipment.Cur_Main_Recipe.panel_type_info.Scanner_Offset_Y_A2;
|
position = double.Parse(position.ToString("F3"));
|
|
if (MotorY.Move_Absolute_Pos(position, 500))
|
{
|
equipment.process.ablation.StageA2AblationStart();
|
Step = AblationStageSteps.S4205_POSITION_CHECK;
|
}
|
}
|
else
|
{
|
Step = AblationStageSteps.S4999_ABLATION_END;
|
}
|
|
break;
|
}
|
case AblationStageSteps.S4205_POSITION_CHECK:
|
{
|
double position = Panel2.Fine_Align_Y_Offset + equipment.Cur_Main_Recipe.process_info.Scanner_Y_A2 + equipment.Cur_Main_Recipe.panel_type_info.Scanner_Offset_Y_A2;
|
position = double.Parse(position.ToString("F3"));
|
|
if (MotorY.MotionComplete)
|
{
|
if (MotorY.Is_Inposition(position, equipment.Setting.Inposition_Offset))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Ablation Position [End]");
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Ablation Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = AblationStageSteps.S4210_ABLATION_STATUS_CHECK;
|
}
|
else
|
{
|
Step = AblationStageSteps.S4200_MOVE_STAGE_ABLATION_RIGHT_POSITION;
|
}
|
}
|
break;
|
}
|
case AblationStageSteps.S4210_ABLATION_STATUS_CHECK:
|
{
|
if (equipment.process.ablation.Step != AblationSteps.S0000_WAIT)
|
{
|
Step = AblationStageSteps.S4220_ABLATION_RIGHT_START;
|
}
|
else
|
{
|
if (equipment.process.ablation.StageA2AblationStart())
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Ablation Start [Start]");
|
}
|
}
|
break;
|
}
|
case AblationStageSteps.S4220_ABLATION_RIGHT_START:
|
{
|
Step = AblationStageSteps.S4230_ABLATION_WAIT;
|
break;
|
}
|
case AblationStageSteps.S4230_ABLATION_WAIT:
|
{
|
if (equipment.process.ablation.IsWorkEnd)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Ablation Start [End]");
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Ablation Start [Tact : {Tact_Move.Seconds} (sec)]");
|
Step = AblationStageSteps.S4999_ABLATION_END;
|
}
|
break;
|
}
|
case AblationStageSteps.S4999_ABLATION_END:
|
{
|
if (equipment.Mode.Ablation_Stage_2_1_Skip == false || equipment.Mode.Ablation_Stage_2_2_Skip == false)
|
{
|
equipment.process.ablation.Stage2WaitPositionMove();
|
}
|
|
Step = AblationStageSteps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
private void Seq_Plasma()
|
{
|
switch (Step)
|
{
|
case AblationStageSteps.S5000_PLASMA_START:
|
{
|
Step = AblationStageSteps.S5100_MOVE_STAGE_PLASMA_LEFT_POSITION;
|
break;
|
}
|
case AblationStageSteps.S5100_MOVE_STAGE_PLASMA_LEFT_POSITION:
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Plasma Position [Start]");
|
|
double position = Panel1.Fine_Align_Y_Offset + equipment.Cur_Main_Recipe.process_info.Plasma_Y_A1;
|
position = double.Parse(position.ToString("F3"));
|
|
if (MotorY.Move_Absolute_Pos(position, 500))
|
{
|
Step = AblationStageSteps.S5105_POSITION_CHECK;
|
}
|
break;
|
}
|
case AblationStageSteps.S5105_POSITION_CHECK:
|
{
|
double position = Panel1.Fine_Align_Y_Offset + equipment.Cur_Main_Recipe.process_info.Plasma_Y_A1;
|
position = double.Parse(position.ToString("F3"));
|
|
if (MotorY.MotionComplete)
|
{
|
if (MotorY.Is_Inposition(position, equipment.Setting.Inposition_Offset))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Plasma Position [End]");
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Plasma Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = AblationStageSteps.S5110_PLASMA_STATUS_CHECK;
|
}
|
else
|
{
|
Step = AblationStageSteps.S5100_MOVE_STAGE_PLASMA_LEFT_POSITION;
|
}
|
}
|
break;
|
}
|
case AblationStageSteps.S5110_PLASMA_STATUS_CHECK:
|
{
|
if (AblationStageSteps.S5110_PLASMA_STATUS_CHECK < equipment.process.ablation_stage_2.Step && equipment.process.ablation_stage_2.Step < AblationStageSteps.S5999_PLASMA_END)
|
{
|
|
}
|
else
|
{
|
Step = AblationStageSteps.S5120_PLASMA_LEFT_START;
|
}
|
break;
|
}
|
case AblationStageSteps.S5120_PLASMA_LEFT_START:
|
{
|
if (equipment.process.plasma.StageA1PlasmaStart())
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Plasma Start [Start]");
|
Step = AblationStageSteps.S5130_PLASMA_WAIT;
|
}
|
break;
|
}
|
case AblationStageSteps.S5130_PLASMA_WAIT:
|
{
|
if (equipment.process.plasma.IsWorkEnd)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Plasma Start [End]");
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Plasma Start [Tact : {Tact_Move.Seconds} (sec)]");
|
Step = AblationStageSteps.S5200_MOVE_STAGE_PLASMA_RIGHT_POSITION;
|
}
|
break;
|
}
|
case AblationStageSteps.S5200_MOVE_STAGE_PLASMA_RIGHT_POSITION:
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Plasma Position [Start]");
|
|
double position = Panel2.Fine_Align_Y_Offset + equipment.Cur_Main_Recipe.process_info.Plasma_Y_A2;
|
position = double.Parse(position.ToString("F3"));
|
|
if (MotorY.Move_Absolute_Pos(position, 500))
|
{
|
Step = AblationStageSteps.S5205_POSITION_CHECK;
|
}
|
|
break;
|
}
|
case AblationStageSteps.S5205_POSITION_CHECK:
|
{
|
double position = Panel2.Fine_Align_Y_Offset + equipment.Cur_Main_Recipe.process_info.Plasma_Y_A2;
|
position = double.Parse(position.ToString("F3"));
|
|
if (MotorY.MotionComplete)
|
{
|
if (MotorY.Is_Inposition(position, equipment.Setting.Inposition_Offset))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Plasma Position [End]");
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Plasma Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = AblationStageSteps.S5210_PLASMA_STATUS_CHECK;
|
}
|
else
|
{
|
Step = AblationStageSteps.S5200_MOVE_STAGE_PLASMA_RIGHT_POSITION;
|
}
|
}
|
break;
|
}
|
case AblationStageSteps.S5210_PLASMA_STATUS_CHECK:
|
{
|
Step = AblationStageSteps.S5220_PLASMA_RIGHT_START;
|
break;
|
}
|
case AblationStageSteps.S5220_PLASMA_RIGHT_START:
|
{
|
if (equipment.process.plasma.StageA2PlasmaStart())
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Plasma Start [Start]");
|
Step = AblationStageSteps.S5230_PLASMA_WAIT;
|
}
|
break;
|
}
|
case AblationStageSteps.S5230_PLASMA_WAIT:
|
{
|
if (equipment.process.plasma.IsWorkEnd)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Plasma Start [End]");
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Plasma Start [Tact : {Tact_Move.Seconds} (sec)]");
|
Step = AblationStageSteps.S5999_PLASMA_END;
|
}
|
break;
|
}
|
case AblationStageSteps.S5999_PLASMA_END:
|
{
|
Step = AblationStageSteps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
private void Seq_Unload()
|
{
|
switch (Step)
|
{
|
case AblationStageSteps.S6000_PANEL_UNLOAD_START:
|
{
|
Step = AblationStageSteps.S6100_MOVE_UNLOAD_POSITION;
|
break;
|
}
|
case AblationStageSteps.S6100_MOVE_UNLOAD_POSITION:
|
{
|
if (Move_Y_Unload_Position())
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Unloading Position [Start]");
|
Step = AblationStageSteps.S6105_POSITION_CHECK;
|
}
|
break;
|
}
|
case AblationStageSteps.S6105_POSITION_CHECK:
|
{
|
if (MotorY.MotionComplete)
|
{
|
if (IsUnloadPosition)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Unloading Position [End]");
|
equipment.Write_Tact_Time_Log($"Ablation Stage 1, Unloading Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = AblationStageSteps.S6200_PANEL_EMPTY_CHECK;
|
}
|
else
|
{
|
Step = AblationStageSteps.S6100_MOVE_UNLOAD_POSITION;
|
}
|
}
|
break;
|
}
|
case AblationStageSteps.S6200_PANEL_EMPTY_CHECK:
|
{
|
if(IsExist == false && equipment.after.Handler2.Picker1.IsUp && equipment.after.Handler2.Picker2.IsUp)
|
{
|
equipment.process.TactTime1.Stop();
|
Step = AblationStageSteps.S6999_PANEL_UNLOAD_END;
|
}
|
break;
|
}
|
case AblationStageSteps.S6999_PANEL_UNLOAD_END:
|
{
|
Step = AblationStageSteps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
public void Seq_Stage1Step()
|
{
|
switch (_stage1Step)
|
{
|
case StageSteps.S9000_SCRAP_START:
|
{
|
_stage1Step = StageSteps.S9100_VACUUM_OFF;
|
break;
|
}
|
case StageSteps.S9100_VACUUM_OFF:
|
{
|
if (Stage1.IsWorkEnd)
|
{
|
if (Stage1.VacuumSol1On == false && Stage1.VacuumSol2On == false)
|
{
|
_stage1Step = StageSteps.S9110_DATA_SET;
|
}
|
else
|
{
|
Stage1.VacuumOff();
|
}
|
}
|
break;
|
}
|
case StageSteps.S9110_DATA_SET:
|
{
|
Panel1 = new Panel_Info();
|
_stage1Step = StageSteps.S9999_SCRAP_END;
|
break;
|
}
|
case StageSteps.S9999_SCRAP_END:
|
{
|
_stage1Step = StageSteps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
public void Seq_Stage2Step()
|
{
|
switch (_stage2Step)
|
{
|
case StageSteps.S9000_SCRAP_START:
|
{
|
_stage2Step = StageSteps.S9100_VACUUM_OFF;
|
break;
|
}
|
case StageSteps.S9100_VACUUM_OFF:
|
{
|
if (Stage2.IsWorkEnd)
|
{
|
if (Stage2.VacuumSol1On == false && Stage2.VacuumSol2On == false)
|
{
|
_stage2Step = StageSteps.S9110_DATA_SET;
|
}
|
else
|
{
|
Stage2.VacuumOff();
|
}
|
}
|
break;
|
}
|
case StageSteps.S9110_DATA_SET:
|
{
|
Panel2 = new Panel_Info();
|
_stage2Step = StageSteps.S9999_SCRAP_END;
|
break;
|
}
|
case StageSteps.S9999_SCRAP_END:
|
{
|
_stage2Step = StageSteps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
public bool Move_Y_Load_Position()
|
{
|
object value;
|
double position;
|
double velocity;
|
equipment.sm.Get_Value(Position_Parameter_Address.Ablation_Stage_1_Y_Load_Position, out value);
|
position = double.Parse($"{value}");
|
equipment.sm.Get_Value(Position_Parameter_Address.Ablation_Stage_1_Y_Load_Velocity, out value);
|
velocity = double.Parse($"{value}");
|
|
return MotorY.Move_Absolute_Pos(position, velocity);
|
}
|
|
public bool Move_Y_Unload_Position()
|
{
|
object value;
|
double position;
|
double velocity;
|
equipment.sm.Get_Value(Position_Parameter_Address.Ablation_Stage_1_Y_Unload_Position, out value);
|
position = double.Parse($"{value}");
|
equipment.sm.Get_Value(Position_Parameter_Address.Ablation_Stage_1_Y_Unload_Velocity, out value);
|
velocity = double.Parse($"{value}");
|
|
return MotorY.Move_Absolute_Pos(position, velocity);
|
}
|
|
public bool Stage_1_Scrap()
|
{
|
if (UnitMode == En_Equipment_Mode.Auto || equipment.Auto_Mode)
|
{
|
Interlock_Manager.Add_Interlock_Msg("Ablation_1_1 Scrap Can't Start", "Equipment mode is Auto.");
|
return false;
|
}
|
|
_stage1Step = StageSteps.S9000_SCRAP_START;
|
|
return true;
|
}
|
|
public bool Stage_2_Scrap()
|
{
|
if (UnitMode == En_Equipment_Mode.Auto || equipment.Auto_Mode)
|
{
|
Interlock_Manager.Add_Interlock_Msg("Ablation_1_2 Scrap Can't Start", "Equipment mode is Auto.");
|
return false;
|
}
|
|
_stage2Step = StageSteps.S9000_SCRAP_START;
|
|
return true;
|
}
|
#endregion
|
}
|
}
|