namespace SHARP_CLAS_UI { public class VacuumStageCh1 { #region Enum private enum ProcessSteps { Wait, BeforeBlowSolOn, BeforeBlowSolOnCheck, BeforeBlowSolOff, BeforeBlowSolOffCheck, VacuumSolOn, VacuumSolOnCheck, IsVacuumSensorCheck, VacuumSolOff, VacuumSolOffCheck, AfterBlowSolOn, AfterBlowSolOnCheck, AfterBlowSolOff, AfterBlowSolOffCheck, IsVacuumOffCheck, } #endregion #region Property public bool VacuumSolOn { get { return _equipment.Board_Control.IO_manager.Get_Output(_vacuumSolOn); } set { _equipment.Board_Control.IO_manager.Set_Output(_vacuumSolOn, value); } } public bool BlowSolOn { get { return _equipment.Board_Control.IO_manager.Get_Output(_blowSolOn); } set { _equipment.Board_Control.IO_manager.Set_Output(_blowSolOn, value); } } public bool IsVacuumSensor { get { return _equipment.Board_Control.IO_manager.Get_Input(_isVacuumOn); } } public bool IsExist { get { return VacuumSolOn && IsVacuumSensor; } } public bool IsWorkEnd { get { if (_step == ProcessSteps.Wait) { return true; } else { return false; } } } #endregion #region Field private Equipment _equipment; private Panel_Info_Names _panelInfoName; private OutputData _vacuumSolOn; private OutputData _blowSolOn; private InputData _isVacuumOn; private En_Alarm_List _vacuumSensorAlarm; private ProcessSteps _step; private SequenceTimer _sequenceTimer; private readonly int _retryLimitCount = 3; private int _retryCount; #endregion #region Construct public VacuumStageCh1(Equipment equipment) { _equipment = equipment; _sequenceTimer = new SequenceTimer(); _retryCount = 0; _step = ProcessSteps.Wait; } #endregion #region Function public void Initialize(OutputData vacuumSolOn, OutputData blowSolOn, InputData isVacuumOn, En_Alarm_List vacuumSensorAlarm) { _vacuumSolOn = vacuumSolOn; _blowSolOn = blowSolOn; _isVacuumOn = isVacuumOn; _vacuumSensorAlarm = vacuumSensorAlarm; } public void ExecuteProcess() { switch (_step) { case ProcessSteps.Wait: { break; } case ProcessSteps.BeforeBlowSolOn: { BlowSolOn = true; _sequenceTimer.Restart(); _step = ProcessSteps.BeforeBlowSolOnCheck; break; } case ProcessSteps.BeforeBlowSolOnCheck: { if (BlowSolOn == true) { _retryCount = 0; _sequenceTimer.Restart(); _step = ProcessSteps.BeforeBlowSolOff; } else { if (_sequenceTimer.Seconds > 3) { if (_retryCount < _retryLimitCount) { _retryCount++; _step = ProcessSteps.BeforeBlowSolOn; } else { _retryCount = 0; Interlock_Manager.Add_Interlock_Msg($"{_blowSolOn} on fail.", $"{_blowSolOn} on is fail (retry 3)."); _step = ProcessSteps.Wait; } } } break; } case ProcessSteps.BeforeBlowSolOff: { BlowSolOn = false; _sequenceTimer.Restart(); _step = ProcessSteps.BeforeBlowSolOffCheck; break; } case ProcessSteps.BeforeBlowSolOffCheck: { if (BlowSolOn == false) { _retryCount = 0; _sequenceTimer.Restart(); _step = ProcessSteps.VacuumSolOn; } else { if (_sequenceTimer.Seconds > 3) { if (_retryCount < _retryLimitCount) { _retryCount++; _step = ProcessSteps.BeforeBlowSolOff; } else { _retryCount = 0; Interlock_Manager.Add_Interlock_Msg($"{_blowSolOn} off fail.", $"{_blowSolOn} off is fail (retry 3)."); _step = ProcessSteps.Wait; } } } break; } case ProcessSteps.VacuumSolOn: { VacuumSolOn = true; _sequenceTimer.Restart(); _step = ProcessSteps.VacuumSolOnCheck; break; } case ProcessSteps.VacuumSolOnCheck: { if (VacuumSolOn == true) { _retryCount = 0; _sequenceTimer.Restart(); _step = ProcessSteps.IsVacuumSensorCheck; } else { if (_sequenceTimer.Seconds > 3) { if (_retryCount < _retryLimitCount) { _retryCount++; _step = ProcessSteps.VacuumSolOn; } else { _retryCount = 0; Interlock_Manager.Add_Interlock_Msg($"{_vacuumSolOn} on fail.", $"{_vacuumSolOn} on is fail (retry 3)."); _step = ProcessSteps.Wait; } } } break; } case ProcessSteps.IsVacuumSensorCheck: { if (IsVacuumSensor == true) { _sequenceTimer.Reset(); _step = ProcessSteps.Wait; } else { if (_sequenceTimer.Seconds > _equipment.Setting.Vacuum_Timeout) { Alarm_Manager.Instance.Occurred(_vacuumSensorAlarm); _step = ProcessSteps.Wait; } } break; } case ProcessSteps.VacuumSolOff: { VacuumSolOn = false; _sequenceTimer.Restart(); _step = ProcessSteps.VacuumSolOffCheck; break; } case ProcessSteps.VacuumSolOffCheck: { if (VacuumSolOn == false) { _retryCount = 0; _sequenceTimer.Restart(); _step = ProcessSteps.AfterBlowSolOn; } else { if (_sequenceTimer.Seconds > 3) { if (_retryCount < _retryLimitCount) { _retryCount++; _step = ProcessSteps.VacuumSolOff; } else { _retryCount = 0; Interlock_Manager.Add_Interlock_Msg($"{_vacuumSolOn} off fail.", $"{_vacuumSolOn} off is fail (retry 3)."); _step = ProcessSteps.Wait; } } } break; } case ProcessSteps.AfterBlowSolOn: { BlowSolOn = true; _sequenceTimer.Restart(); _step = ProcessSteps.AfterBlowSolOnCheck; break; } case ProcessSteps.AfterBlowSolOnCheck: { if (BlowSolOn == true) { _retryCount = 0; _sequenceTimer.Restart(); _step = ProcessSteps.AfterBlowSolOff; } else { if (_sequenceTimer.Seconds > 3) { if (_retryCount < _retryLimitCount) { _retryCount++; _step = ProcessSteps.AfterBlowSolOn; } else { _retryCount = 0; Interlock_Manager.Add_Interlock_Msg($"{_blowSolOn} on fail.", $"{_blowSolOn} on is fail (retry 3)."); _step = ProcessSteps.Wait; } } } break; } case ProcessSteps.AfterBlowSolOff: { BlowSolOn = false; _sequenceTimer.Restart(); _step = ProcessSteps.AfterBlowSolOffCheck; break; } case ProcessSteps.AfterBlowSolOffCheck: { if (BlowSolOn == false) { _retryCount = 0; _sequenceTimer.Reset(); _step = ProcessSteps.IsVacuumOffCheck; } else { if (_sequenceTimer.Seconds > 3) { if (_retryCount < _retryLimitCount) { _retryCount++; _step = ProcessSteps.AfterBlowSolOff; } else { _retryCount = 0; Interlock_Manager.Add_Interlock_Msg($"{_blowSolOn} off fail.", $"{_blowSolOn} off is fail (retry 3)."); _step = ProcessSteps.Wait; _retryCount = 0; } } } break; } case ProcessSteps.IsVacuumOffCheck: { if (IsVacuumSensor == false) { _sequenceTimer.Reset(); _step = ProcessSteps.Wait; } else { if (_sequenceTimer.Seconds > _equipment.Setting.Vacuum_Timeout) { Alarm_Manager.Instance.Occurred(_vacuumSensorAlarm); _step = ProcessSteps.Wait; } } break; } } } public bool VacuumOn() { if (IsWorkEnd) { if (VacuumSolOn && IsVacuumSensor) { return true; } else { _step = ProcessSteps.BeforeBlowSolOn; return true; } } else { return false; } } public bool VacuumOff() { if (IsWorkEnd) { if (VacuumSolOn == false && IsVacuumSensor == false) { return true; } else { _step = ProcessSteps.VacuumSolOff; return true; } } else { return false; } } #endregion } }