using System; namespace SHARP_CLAS_UI { #region Enum public enum En_AGV_Load { S0000_WAIT, S0100_EQP_LOAD_ENABLE_ON, S0110_EQP_LOAD_ENABLE_ON_CHECK, S0200_AGV_LOAD_STATUS_ON_CHECK, S0300_EQP_LOAD_STATUS_ON, S0310_EQP_LOAD_STATUS_ON_CHECK, S0400_AGV_LOAD_ENABLE_ON_STOP_REQUEST_OFF_CHECK, S0500_EQP_CONVEYOR_RUN_ON, S0510_EQP_CONVEYOR_RUN_ON_CHECK, S0600_EQP_LOAD_ENABLE_OFF, S0610_EQP_LOAD_ENABLE_OFF_CHECK, S0700_AGV_CONVEYOR_RUN_ON_CHECK, S0800_CONVEYOR_RUN, S0900_CONVEYOR_COMPLETE_SENSOR_ON_CHECK, S0910_CONVEYOR_STOP, S0920_CONVEYOR_STOP_CHECK, S1000_EQP_CONVEYOR_RUN_OFF, S1000_EQP_CONVEYOR_RUN_OFF_CHECK, S1100_EQP_LOAD_STATUS_OFF, S1110_EQP_LOAD_STATUS_OFF_CHECK, S1200_AGV_CONVEYOR_OFF_LOAD_STATUS_OFF_LOAD_ENABLE_OFF_CEHCK, S1999_AGV_LOAD_END, /* //*==== AGV 일시 정지 시 동작 ==== S1000_AGV_STOP_REQUEST_ON_CHECK, S1000_AGV_AUTO_MANUAL_OFF_CHECK <- 에러 Stop 인지 확인. S1000_AGV_LOAD_ENABLE_OFF_CONVEYOR_RUN_OFF_CHECK, EQP_LOAD_ENABLE_ON, EQP_LOAD_ENABLE_ON_CHECK, EQP_CONVEYOR_RUN_OFF, EQP_CONVEYOR_RUN_OFF_CHECK, -> S400 으로 //============================== //==== 장치 일시 정지 시 동작 ==== EQP_STOP_REQUEST_ON, EQP_STOP_REQUEST_ON_CHECK, EQP_AUTO_MANUAL_OFF, <- 에러 Stop 일 때 동작. EQP_AUTO_MANUAL_OFF_CHECK, <- 에러 Stop 일 때 동작. EQP_CONVEYOR_RUN_OFF, EQP_CONVEYOR_RUN_OFF_CHECK, AGV_LOAD_ENABLE_OFF_CONVEYOR_RUN_OFF_CHECK, //장비 정상화 확인. EQP_STOP_REQUEST_OFF, EQP_STOP_REQUEST_OFF_CHECK, EQP_LOAD_ENABLE_ON, EQP_LOAD_ENABLE_ON_CHECK, EQP_AUTO_MANUAL_ON, <- 에러 Stop 일 때 동작. EQP_AUTO_MANUAL_ON_CHECK, <- 에러 Stop 일 때 동작. -> S400으로 //============================== */ } public enum En_AGV_Unload { S0000_WAIT, S2000_AGV_UNLOADING_START, S2100_EQP_UNLOAD_ENABLE_ON, S2110_EQP_UNLOAD_ENABLE_ON_CHECK, S2120_AGV_UNLOAD_STATUS_ON_CHECK, S2130_EQP_UNLOAD_STATUS_ON, S2140_EQP_UNLOAD_STATUS_ON_CHECK, S2150_AGV_UNLOAD_ENABLE_CONVEYOR_RUN_ON_CHECK, S2200_EQP_CONVEYOR_RUN_ON, S2210_EQP_CONVEYOR_RUN_ON_CHECK, S2220_EQP_UNLOAD_ENABLE_OFF, S2230_EQP_UNLOAD_ENABLE_OFF_CHECK, S2240_CONVEYOR_RUN, S2300_AGV_CONVEYOR_RUN_UNLOAD_STATUS_UNLOAD_ENABLE_OFF_CHECK, S2310_CONVEYOR_STOP_CHECK, S2320_EQP_CONVEYOR_RUN_OFF, S2330_EQP_CONVEYOR_RUN_OFF_CHECK, S2340_EQP_UNLOAD_STATUS_OFF, S2350_EQP_UNLOAD_STATUS_OFF_CHECK, S2999_AGV_UNLOADING_END, } public enum ConveyorInSteps { S0000_WAIT, //Tray Agv Loading. S0100_AGV_LOADING_START, S0110_EQP_LOAD_ENABLE_ON, S0120_EQP_LOAD_ENABLE_ON_CHECK, S0130_AGV_LOAD_STATUS_ON_CHECK, S0140_EQP_LOAD_STATUS_ON, S0150_EQP_LOAD_STATUS_ON_CHECK, S0160_AGV_LOAD_ENABLE_ON_STOP_REQUEST_OFF_CHECK, S0200_EQP_CONVEYOR_RUN_ON, S0210_EQP_CONVEYOR_RUN_ON_CHECK, S0220_EQP_LOAD_ENABLE_OFF, S0230_EQP_LOAD_ENABLE_OFF_CHECK, S0240_AGV_CONVEYOR_RUN_ON_CHECK, S0250_CONVEYOR_RUN, S0300_CONVEYOR_COMPLETE_SENSOR_ON_CHECK, S0310_CONVEYOR_STOP, S0320_CONVEYOR_STOP_CHECK, S0330_EQP_CONVEYOR_RUN_OFF, S0340_EQP_CONVEYOR_RUN_OFF_CHECK, S0350_EQP_LOAD_STATUS_OFF, S0360_EQP_LOAD_STATUS_OFF_CHECK, S0370_AGV_CONVEYOR_OFF_LOAD_STATUS_OFF_LOAD_ENABLE_OFF_CEHCK, S0999_AGV_LOADING_END, //Tray Loading S1000_TRAY_LOADING_START, S1100_LIFT_POSITION_STAY_CHECK, S1110_CONVEYOR_IN_SENSOR_CHECK, S1120_LIFT_IN_SENSOR_CHECK, S1130_ALIGN_X_BWD, S1140_ALIGN_Y_FWD, S1200_CONVEYOR_MOVE_IN, S1210_LIFT_IN_SENSOR_CHECK, S1220_LIFT_COMPLETE_SENSOR_CHECK, S1230_CONVEYOR_STOP, S1300_ALIGN_X_FWD, S1320_ALIGN_Y_BWD, S1340_WAIT_TIME, S1400_ALIGN_Y_FWD, S1420_ALIGN_X_BWD, S1999_TRAY_LOADING_END, //Tray Unloading S2000_TRAY_UNLOADING_START, S2100_LIFT_POSITION_STAY_CHECK, S2110_LIFT_SENSOR_CHECK, S2120_CONVEYOR_SENSOR_CHECK, S2200_ALIGN_X_FWD, S2220_ALIGN_Y_BWD, S2240_WAIT_TIME, S2250_ALIGN_Y_FWD, S2270_ALIGN_X_BWD, S2300_CONVEYOR_MOVE_OUT, S2310_CONVEYOR_IN_COMPLETE_SENSOR_CHECK, S2320_CONVEYOR_IN_SENSOR_CHECK, S2330_CONVEYOR_STOP, S2340_CONVEYOR_STOP_CHECK, S2999_TRAY_UNLOADING_END, } public enum ConveyorOutSteps { S0000_WAIT, S1000_TRAY_UNLOADING_START, S1100_LIFT_POSITION_STAY_CHECK, S1110_CONVEYOR_SENSOR_CHECK, S1120_LIFT_SENSOR_CHECK, S1200_ALIGN_X_FWD, S1220_ALIGN_Y_BWD, S1240_WAIT_TIME, S1250_ALIGN_Y_FWD, S1270_ALIGN_X_BWD, S1300_CONVEYOR_MOVE_OUT, S1310_CONVEYOR_COMPLETE_SENSOR_CHECK, S1320_CONVEYOR_IN_SENSOR_CHECK, S1400_CONVEYOR_STOP, S1410_CONVEYOR_STOP_CHECK, S1999_TRAY_UNLOADING_END, //Tray Agv Unloading. S2000_AGV_UNLOADING_START, S2100_EQP_UNLOAD_ENABLE_ON, S2110_EQP_UNLOAD_ENABLE_ON_CHECK, S2120_AGV_UNLOAD_STATUS_ON_CHECK, S2130_EQP_UNLOAD_STATUS_ON, S2140_EQP_UNLOAD_STATUS_ON_CHECK, S2150_AGV_UNLOAD_ENABLE_CONVEYOR_RUN_ON_CHECK, S2200_EQP_CONVEYOR_RUN_ON, S2210_EQP_CONVEYOR_RUN_ON_CHECK, S2220_EQP_UNLOAD_ENABLE_OFF, S2230_EQP_UNLOAD_ENABLE_OFF_CHECK, S2240_CONVEYOR_RUN, S2300_AGV_CONVEYOR_RUN_UNLOAD_STATUS_UNLOAD_ENABLE_OFF_CHECK, S2310_CONVEYOR_STOP_CHECK, S2320_EQP_CONVEYOR_RUN_OFF, S2330_EQP_CONVEYOR_RUN_OFF_CHECK, S2340_EQP_UNLOAD_STATUS_OFF, S2350_EQP_UNLOAD_STATUS_OFF_CHECK, S2999_AGV_UNLOADING_END, } public enum ConveyorHomeStep { S0000_WAIT, S1000_STATUS_CHECK, S1100_CONVEYOR_SENSOR_CHECK, S1200_LIFT_SENSOR_CHECK, S2000_POSITION_CLEAR, S9999_END, } #endregion public abstract class Conveyor : Unit { #region Property public bool IsConveyorInSensor { get { return equipment.Board_Control.IO_manager.Get_Input(_isConveyorInSensor); } } public bool IsConveyorInCompleteSensor { get { return equipment.Board_Control.IO_manager.Get_Input(_isConveyorInCompleteSensor); } } public bool IsLiftInSensor { get { return equipment.Board_Control.IO_manager.Get_Input(_isLiftInSensor); } } public bool IsLiftInCompleteSensor { get { return equipment.Board_Control.IO_manager.Get_Input(_isLiftInCompleteSensor); } } public Axis MotorX { get { return _motorX; } set { _motorX = value; } } public Aligner AlignerX { get { return _alignerX; } set { _alignerX = value; } } public AlignerY AlignerY { get { return _alignerY; } set { _alignerY = value; } } public override bool IsHomeComplete { get { return MotorX.PowerOn && MotorX.ErrorStop == false && isHomeComplete; } } public override bool IsExist { get { return IsConveyorInSensor || IsConveyorInCompleteSensor || IsLiftInSensor || IsLiftInCompleteSensor; } } #endregion #region Field private Axis _motorX; private Aligner _alignerX; private AlignerY _alignerY; private InputData _isConveyorInSensor; private InputData _isConveyorInCompleteSensor; private InputData _isLiftInSensor; private InputData _isLiftInCompleteSensor; #endregion #region Construct public Conveyor(Equipment equipment, MotorAxis motorX, string unitName) : base(equipment, unitName) { _motorX = equipment.Board_Control.Motors[motorX]; AlignerX = new Aligner(equipment); AlignerY = new AlignerY(equipment); } #endregion #region Function public void Initialize(InputData isConveyorInSensor, InputData isConveyorInCompleteSensor, InputData isLiftInSensor, InputData isLiftInCompleteSensor) { _isConveyorInSensor = isConveyorInSensor; _isConveyorInCompleteSensor = isConveyorInCompleteSensor; _isLiftInSensor = isLiftInSensor; _isLiftInCompleteSensor = isLiftInCompleteSensor; } public bool JogPositive() { return MotorX.Positive_Zog(equipment.Setting.Conveyor_Speed); } public bool JogNegative() { return MotorX.Negative_Zog(equipment.Setting.Conveyor_Speed); } public bool Stop() { return MotorX.Move_Stop(equipment.Setting.Conveyor_Speed); } #endregion } }