namespace SHARP_CLAS_UI { #region Enum public enum LoaderHandler1Steps { S0000_WAIT, S1000_MOVE_STAY_POSITION_START, S1100_REVERSE_STAGE_POSITION_CHECK, S1110_PICKER_UP, S1200_MOVE_STAY_POSITION, S1220_POSITION_CHECK, S1999_MOVE_STAY_POSITION_END, S2000_TRAY_ID_READ_START, S2100_PICKER_UP, S2200_TRAY_TRANSFER_POSITION_CHECK, S2210_MOVE_TRAY_BCR_POS, S2230_POSITION_CHECK, S2240_BCR_DATA_READ, S2245_BCR_DATA_READ_WAIT, S2250_BCR_USER_COMMAND_START, S2260_BCR_USER_COMMAND_CHECK, S2999_TRAY_ID_READ_END, S3000_TRAY_FILM_JUDGE_START, S3110_PICKER_UP, S3150_TRAY_TRANSFER_POSITION_CHECK, S3200_PICKER1_GET_PANEL_NUM, S3210_PICKER1_GET_FILM_JUDGE_POITION, S3220_MOVE_PICKER1_FILM_JUDGE_POSITION, S3230_POSITION_CHECK, S3300_LEFT_CAMERA_GRAB_READY, S3310_LEFT_CAMERA_GRAB_READY_WAIT, S3320_LEFT_CAMERA_MARK_GRAB_START, S3330_LEFT_CAMERA_MARK_GRAB_WAIT, S3340_FILM_JUDGE_LEFT_CHECK, S3400_USER_COMMAND_START, S3410_USER_COMMAND_WAIT, S3500_PICKER2_GET_PANEL_NUM, S3510_PICKER2_GET_FILM_JUDGE_POITION, S3520_MOVE_PICKER2_FILM_JUDGE_POS, S3530_POSITION_CHECK, S3600_RIGHT_CAMERA_GRAB_READY, S3610_RIGHT_CAMERA_GRAB_READY_WAIT, S3620_RIGHT_CAMERA_MARK_GRAB_START, S3630_RIGHT_CAMERA_MARK_GRAB_WAIT, S3640_FILM_JUDGE_RIGHT_CHECK, S3700_USER_COMMAND_START, S3710_USER_COMMAND_WAIT, S3999_TRAY_FILM_JUDGE_END, S4000_PICK_TRAY_PANEL_START, S4100_PICKER_UP, S4110_TRAY_TRANSFER_POSITION_CHECK, S4200_GET_PICKER1_PANEL_NUM, S4210_GET_PICKER1_PICK_POITION, S4300_MOVE_PICKER1_PICK_POSITION, S4305_POSITION_CHECK, S4310_PICKER1_PICK_START, S4320_PICKER1_PICK_WAIT, S4330_PICKER1_COMMAND_WAIT, S4400_GET_PICKER2_PANEL_NUM, S4410_GET_PICKER2_PICK_POITION, S4500_MOVE_PICKER2_PICK_POSITION, S4505_POSITION_CHECK, S4510_PICKER2_PICK_START, S4520_PICKER2_PICK_WAIT, S4530_PICKER2_COMMAND_WAIT, S4999_PICK_TRAY_PANEL_END, S5000_PLACE_PRE_ALIGN_START, S5100_HANDLER2_POSITION_CHECK, S5110_REVERSE_STAGE_POSITION_CHECK, S5120_PRE_ALIGN_POSITION_CHECK, S5140_PICKER_UP, S5200_MOVE_PRE_ALIGN_STAGE, S5220_POSITION_CHECK, S5300_PLACE_START, S5310_PLACE_WAIT, S5999_PLACE_PRE_ALIGN_END, S6000_PRE_ALIGN_FILM_JUDGE_START, S6100_HANDLER2_POSITION_CHECK, S6110_REVERSE_STAGE_POSITION_CHECK, S6120_PICKER_UP, S6130_MOVE_FILM_JUGE_POS, S6135_POSITION_CHECK, S6200_LEFT_CAMERA_GRAB_READY, S6210_LEFT_CAMERA_GRAB_READY_WAIT, S6220_RIGHT_CAMERA_GRAB_READY, S6230_RIGHT_CAMERA_GRAB_READY_WAIT, S6240_LEFT_CAMERA_MARK_GRAB_START, S6250_LEFT_CAMERA_MARK_GRAB_WAIT, S6260_RIGHT_CAMERA_MARK_GRAB_START, S6270_RIGHT_CAMERA_MARK_GRAB_WAIT, S6280_FILM_JUDGE_CHECK, S6290_PANEL_INFO_CHECK, S6300_USER_COMMAND_START, S6310_USER_COMMAND_WAIT, S6400_MOVE_PRE_ALIGN_STAGE, S6405_POSITION_CHECK, S6410_PICK_START, S6420_PICK_WAIT, S6999_PRE_ALIGN_FILM_JUDGE_END, S7000_PLACE_REVERSE_STAGE_START, S7100_HANDLER2_POSITION_CHECK, S7110_REVERSE_STAGE_POSITION_CHECK, S7130_PICKER_UP, S7200_MOVE_REVERSE_STAGE, S7220_POSITION_CHECK, S7300_PLACE_START, S7310_PLACE_WAIT, S7999_PLACE_REVERSE_STAGE_END, S8000_PRE_ALIGN_START, S8100_HANDLER2_POSITION_CHECK, S8110_REVERSE_STAGE_POSITION_CHECK, S8120_PICKER_UP, S8130_LEFT_CAMERA_GRAB_READY, S8140_LEFT_CAMERA_GRAB_READY_WAIT, S8150_RIGHT_CAMERA_GRAB_READY, S8160_RIGHT_CAMERA_GRAB_READY_WAIT, S8200_MOVE_PRE_ALIGN_LEFT_POS, S8205_POSITION_CHECK, S8210_LEFT_CAMERA_MARK_1_GRAB_START, S8220_LEFT_CAMERA_MARK_1_GRAB_WAIT, S8230_RIGHT_CAMERA_MARK_1_GRAB_START, S8240_RIGHT_CAMERA_MARK_1_GRAB_WAIT, S8300_MOVE_PRE_ALIGN_RIGHT_POS, S8305_POSITION_CHECK, S8310_LEFT_CAMERA_MARK_2_GRAB_START, S8320_LEFT_CAMERA_MARK_2_GRAB_WAIT, S8330_RIGHT_CAMERA_MARK_2_GRAB_START, S8340_RIGHT_CAMERA_MARK_2_GRAB_WAIT, S8350_PRE_ALIGN_CHECK, S8400_USER_COMMAND_START, S8410_USER_COMMAND_WAIT, S8999_PRE_ALIGN_END, } public enum LoaderHandler2Steps { S0000_WAIT, S1000_MOVE_STAY_POSITION_START, S1100_REVERSE_STAGE_POSITION_CHECK, S1110_PICKER_UP, S1200_MOVE_STAY_POSITION, S1220_POSITION_CHECK, S1999_MOVE_STAY_POSITION_END, S2000_PICK_PRE_ALIGN_STAGE_START, S2100_HANDLER1_POSITION_CHECK, S2110_LD_REVERSE_POSITION_CHECK, S2120_PRE_ALIGN_POSITION_CHECK, S2130_PICKER_UP, S2200_MOVE_PRE_ALIGN_STAGE_POSITION, S2205_POSITION_CHECK, S2210_PICK_START, S2220_PICK_WAIT, S2999_PICK_PRE_ALIGN_STAGE_END, S3000_PLACE_ABLATION_STAGE_1_START, S3110_ABLATION_STAGE_1_POSITION_CHECK, S3120_PICKER_UP, S3200_MOVE_ABLATION_STAGE_1, S3205_POSITION_CHECK, S3210_PLACE_START, S3220_PLACE_WAIT, S3999_PLACE_ABLATION_STAGE_1_END, S4000_PLACE_ABLATION_STAGE_2_START, S4110_ABLATION_STAGE_2_POSITION_CHECK, S4120_PICKER_UP, S4200_MOVE_ABLATION_STAGE_2, S4205_POSITION_CHECK, S4210_PLACE_START, S4220_PLACE_WAIT, S4999_PLACE_ABLATION_STAGE_2_END, } public enum UnloaderHandler1Steps { S0000_WAIT, //======================== STAY POSITION ============================ S1000_MOVE_TO_STAY_START, S1100_PICKER_UP, S1200_MOVE_X_STAY, // NG 시 동작 S1205_POSITION_CHECK, S1210_MOVE_Y_STAY, S1215_POSITION_CHECK, S1300_MOVE_STAY_POSITION, // 그외 동작 S1305_POSITION_CHECK, S1999_MOVE_TO_STAY_END, //======================== TRAY OK ID READ ============================ S2000_TRAY_OK_ID_READ_START, S2100_PICKER_UP, S2200_ULD_TRAY_TR_POSITION_CHECK, S2210_MOVE_TRAY_OK_BCR_POS, S2230_POSITION_CHECK, S2240_BCR_DATA_READ, S2245_BCR_DATA_READ_WAIT, S2250_BCR_USER_COMMAND_START, S2260_BCR_USER_COMMAND_CHECK, S2999_TRAY_OK_ID_READ_END, //======================== TRAY NG ID READ ============================ S3000_TRAY_NG_ID_READ_START, S3100_PICKER_UP, S3200_ULD_TRAY_TR_POSITION_CHECK, S3210_MOVE_TRAY_NG_BCR_POS, S3230_POSITION_CHECK, S3240_BCR_DATA_READ, S3245_BCR_DATA_READ_WAIT, S3250_BCR_USER_COMMAND_START, S3260_BCR_USER_COMMAND_CHECK, S3999_TRAY_NG_ID_READ_END, //======================== MEASUREMENT ============================ S4000_MEASUREMENT_START, S4100_ULD_HANDLER_2_POSITION_CHECK, S4110_REVERSE_POSITION_CHECK, S4120_PICKER_UP, S4130_LEFT_CAMERA_GRAB_READY, S4140_LEFT_CAMERA_GRAB_READY_WAIT, S4150_RIGHT_CAMERA_GRAB_READY, S4160_RIGHT_CAMERA_GRAB_READY_WAIT, S4200_MOVE_MEASUREMENT_MARK1_POSITION, S4205_POSITION_CHECK, S4210_LEFT_CAMERA_MARK_1_GRAB_START, S4220_LEFT_CAMERA_MARK_1_GRAB_WAIT, S4230_RIGHT_CAMERA_MARK_1_GRAB_START, S4240_RIGHT_CAMERA_MARK_1_GRAB_WAIT, S4300_MOVE_MEASUREMENT_MARK2_POSITION, S4305_POSITION_CHECK, S4310_LEFT_CAMERA_MARK_2_GRAB_START, S4320_LEFT_CAMERA_MARK_2_GRAB_WAIT, S4330_RIGHT_CAMERA_MARK_2_GRAB_START, S4340_RIGHT_CAMERA_MARK_2_GRAB_WAIT, S4400_MOVE_MEASUREMENT_MARK3_POSITION, S4405_POSITION_CHECK, S4410_LEFT_CAMERA_MARK_3_GRAB_START, S4420_LEFT_CAMERA_MARK_3_GRAB_WAIT, S4430_RIGHT_CAMERA_MARK_3_GRAB_START, S4440_RIGHT_CAMERA_MARK_3_GRAB_WAIT, S4500_MOVE_MEASUREMENT_MARK4_POSITION, S4505_POSITION_CHECK, S4510_LEFT_CAMERA_MARK_4_GRAB_START, S4520_LEFT_CAMERA_MARK_4_GRAB_WAIT, S4530_RIGHT_CAMERA_MARK_4_GRAB_START, S4540_RIGHT_CAMERA_MARK_4_GRAB_WAIT, S4550_MEASUREMENT_CHECK, S4600_PANEL_LEFT_CIM_SEND, S4610_PANEL_LEFT_CIM_SEND_WAIT, S4620_PANEL_RIGHT_CIM_SEND, S4630_PANEL_RIGHT_CIM_SEND_WAIT, S4700_USER_COMMAND_START, S4710_USER_COMMAND_WAIT, S4999_MEASUREMENT_END, //======================== AOI PICK ============================ S5000_PICK_TO_AOI_STAGE_START, S5100_ULD_HANDLER_2_POSITION_CHECK, S5110_REVERSE_STAGE_POSITION_CHECK, S5120_PICKER_UP, S5200_MOVE_AOI_STAGE_POSITION, S5205_POSITION_CHECK, S5210_PICK_START, S5220_PICK_WAIT, S5999_PICK_TO_AOI_STAGE_END, //======================== REVERSE STAGE PICK ============================ S6000_PICK_TO_REVERSE_STAGE_START, S6100_ULD_HANDLER_2_POSITION_CHECK, S6110_REVERSE_STAGE_POSITION_CHECK, S6120_PICKER_UP, S6200_MOVE_REVERSE_STAGE_POSITION, S6205_POSITION_CHECK, S6210_PICK_START, S6220_PICK_WAIT, S6999_PICK_TO_REVERSE_STAGE_END, //======================== REVERSE STAGE BUFFER FUNCTION ============================ S7000_PLACE_TO_REVERSE_STAGE_CHANGE_START, S7100_ULD_HANDLER_2_POSITION_CHECK, S7110_REVERSE_STAGE_POSITION_CHECK, S7120_PICKER_UP, S7130_VACUUM_CHECK, S7200_MOVE_PICKER1_REVERSE_STAGE_POSITION, S7205_POSITION_CHECK, S7210_PICKER1_PLACE_START, S7220_PICKER1_PLACE_WAIT, S7300_MOVE_PICKER2_REVERSE_STAGE_POSITION, S7305_POSITION_CHECK, S7310_PICKER2_PLACE_START, S7320_PICKER2_PLACE_WAIT, S7999_PLACE_TO_REVERSE_STAGE_CHANGE_END, //======================== PLACE TRAY PICK ============================ S8000_PLACE_TO_TRAY_START, S8100_ULD_TRAY_TR_POSITION_CHECK, S8110_PICKER_UP, S8200_PICKER1_DATA_CHECK, // PICKER 1 CHECK S8210_PICKER1_GET_OK_PANEL_NUM, // PICKER 1 OK S8220_PICKER1_GET_PLACE_POSITION, S8300_MOVE_PLACE_POSITION, S8305_POSITION_CHECK, S8310_PICKER1_PLACE_START, S8315_PICKER1_PLACE_WAIT, S8320_TRAY_OK_DATA_SET, S8330_TRAY_IN_CIM_SEND, S8340_TRAY_IN_CIM_SEND_WAIT, S8400_PICKER1_GET_NG_PANEL_NUM, // PICKER 1 NG S8410_PICKER1_GET_PLACE_POSITION, S8500_MOVE_Y_PLACE_POSITION, S8505_POSITION_CHECK, S8510_MOVE_X_PLACE_POSITION, S8515_POSITION_CHECK, S8520_PICKER1_PLACE_START, S8525_PICKER1_PLACE_WAIT, S8530_TRAY_NG_DATA_SET, S8540_TRAY_IN_CIM_SEND, S8550_TRAY_IN_CIM_SEND_WAIT, S8600_PICKER2_DATA_CHECK, // PICKER 2 CHECK S8610_PICKER2_GET_OK_PANEL_NUM, // PICKER 2 OK S8620_PICKER2_GET_PLACE_POSITION, S8700_MOVE_PLACE_POSITION, S8705_POSITION_CHECK, S8710_PICKER2_PLACE_START, S8715_PICKER2_PLACE_WAIT, S8720_TRAY_OK_DATA_SET, S8730_TRAY_IN_CIM_SEND, S8740_TRAY_IN_CIM_SEND_WAIT, S8800_PICKER2_GET_NG_PANEL_NUM, // PICKER 2 NG S8810_PICKER2_GET_PLACE_POSITION, S8900_MOVE_Y_PLACE_POSITION, S8905_POSITION_CHECK, S8910_MOVE_X_PLACE_POSITION, S8915_POSITION_CHECK, S8920_PICKER2_PLACE_START, S8925_PICKER2_PLACE_WAIT, S8930_TRAY_NG_DATA_SET, S8940_TRAY_IN_CIM_SEND, S8950_TRAY_IN_CIM_SEND_WAIT, S8999_PLACE_TO_TRAY_END, } public enum UnloaderHandler2Steps { S0000_WAIT, S1000_MOVE_STAY_POSITION_START, S1100_PICKER_UP, S1200_MOVE_STAY_POSITION, S1205_POSITION_CHECK, S1999_MOVE_STAY_POSITION_END, S2000_PICK_ABLATION_STAGE_1_START, S2100_ABLATION_STAGE_1_POSITION_CHECK, S2200_PICKER_UP, S2210_MOVE_ABLATION_STAGE_1, S2215_POSITION_CHECK, S2220_PLACE_START, S2225_PLACE_WAIT, S2999_PICK_ABLATION_STAGE_1_END, S3000_PICK_ABLATION_STAGE_2_START, S3100_ABLATION_STAGE_2_POSITION_CHECK, S3230_PICKER_UP, S3200_MOVE_ABLATION_STAGE_2, S3220_POSITION_CHECK, S3300_PLACE_START, S3310_PLACE_WAIT, S3999_PICK_ABLATION_STAGE_2_END, S4000_PLACE_AOI_STAGE_START, S4100_ULD_HANDLER_1_POSITION_CHECK, S4110_ULD_REVERSE_STAGE_POSITION_CHECK, S4220_PICKER_UP, S4200_MOVE_AOI_STAGE, S4220_POSITION_CHECK, S4300_PLACE_START, S4310_PLACE_WAIT, S4999_PLACE_AOI_STAGE_END, } public enum HandlerHomeSteps { S0000_WAIT, S1000_STATUS_CHECK, S1100_TRAY_TRANSFER_HOME_CHECK, S1200_TRAY_TRANSFER_POSITION_CHECK, S1300_MOTOR_Y_HOME, S1305_MOTOR_Y_HOME_CHECK, S1310_MOTOR_X_HOME, S1315_MOTOR_X_HOME_CHECK, S1400_MOVE_STAY_POSITION, S1405_POSITION_CHECK, S1999_END, } #endregion public abstract class Handler : Unit { #region Property public Axis MotorX { get { return _motorX; } set { _motorX = value; } } public Axis MotorY { get { return _motorY; } set { _motorY = value; } } public Picker Picker1 { get { return _picker1; } set { _picker1 = value; } } public Picker Picker2 { get { return _picker2; } set { _picker2 = value; } } public override bool IsHomeComplete { get { return MotorX.PowerOn && MotorX.IsHomed && MotorX.ErrorStop == false && MotorY.PowerOn && MotorY.IsHomed && MotorY.ErrorStop == false && isHomeComplete; } } public override bool IsExist { get { if(Picker1.IsVacuumSensor || Picker2.IsVacuumSensor) { return true; } else { return false; } } } public abstract Panel_Info Panel1 { get; set; } public abstract Panel_Info Panel2 { get; set; } #endregion #region Field private Axis _motorX; private Axis _motorY; private Picker _picker1; private Picker _picker2; protected SequenceTimer picker1Timer = new SequenceTimer(); protected SequenceTimer picker2Timer = new SequenceTimer(); protected double pickerUpWaitTime = 0.5; #endregion #region Construct public Handler(Equipment equipment, MotorAxis motorX, MotorAxis motorY, string unitName) : base(equipment, unitName) { _motorX = equipment.Board_Control.Motors[motorX]; _motorY = equipment.Board_Control.Motors[motorY]; _picker1 = new Picker(equipment); _picker2 = new Picker(equipment); } #endregion } }