-
Example source of processing when EQP State is changedIT Story/C# & WPF 2022. 7. 3. 17:37반응형
/// <param name="nUnitID"></param> /// <param name="sEQPState"></param> private void s_ChangeEQPStatus(int nUnitID, int EQPState) { Structure.classStructure.EQPState sBackupOLDState = Structure.classStructure.EQPState.NONE; Structure.classStructure.EQPState eEQPState = Structure.classStructure.EQPState.NONE; try { eEQPState = (Structure.classStructure.EQPState)EQPState; if (this.m_Info.Unit(nUnitID).SubUnit(0).EQPState == eEQPState) return; //이전 상태를 백업 sBackupOLDState = this.m_Info.Unit(nUnitID).SubUnit(0).EQPState; this.m_Info.Unit(nUnitID).SubUnit(0).EQPStateOLD = sBackupOLDState; //이전 this.m_Info.Unit(nUnitID).SubUnit(0).EQPState = eEQPState; //현재 //HOST나 OP가 이벤트를 발생시키지 않았다면 장비가 발생시킨것임. if (this.m_Info.Unit(nUnitID).SubUnit(0).EQPStateChangeBYWHO == Structure.classStructure.BYWHO.ByHost || this.m_Info.Unit(nUnitID).SubUnit(0).EQPStateChangeBYWHO == Structure.classStructure.BYWHO.ByOperator) { } else { this.m_Info.Unit(nUnitID).SubUnit(0).EQPStateChangeBYWHO = Structure.classStructure.BYWHO.ByEQP; //By Equipment } // 이전 상태가 MANUAL 이고, if (sBackupOLDState == Structure.classStructure.EQPState.DOWN) { // 현재 상태가 IDLE or BUSY이면 JOB RESTART 보고 if (eEQPState == Structure.classStructure.EQPState.IDLE || eEQPState == Structure.classStructure.EQPState.BUSY) { this.m_Info.Set_SendSF(Structure.classStructure.SFName.S6F11EQPEventRequest, 52, nUnitID, 0); this.m_Info.Unit(nUnitID).SubUnit(0).EQPStateChangeBYWHO = Structure.classStructure.BYWHO.None; } else { this.m_Info.Set_SendSF(Structure.classStructure.SFName.S6F11EQPEventRequest, 53, nUnitID, 0); this.m_Info.Unit(nUnitID).SubUnit(0).EQPStateChangeBYWHO = Structure.classStructure.BYWHO.None; } } else if (sBackupOLDState == Structure.classStructure.EQPState.STOP) { if (eEQPState == Structure.classStructure.EQPState.DOWN) { this.m_Info.Set_SendSF(Structure.classStructure.SFName.S6F11EQPEventRequest, 51, nUnitID, 0); this.m_Info.Unit(nUnitID).SubUnit(0).EQPStateChangeBYWHO = Structure.classStructure.BYWHO.None; } else { this.m_Info.Set_SendSF(Structure.classStructure.SFName.S6F11EQPEventRequest, 54, nUnitID, 0); this.m_Info.Unit(nUnitID).SubUnit(0).EQPStateChangeBYWHO = Structure.classStructure.BYWHO.None; } } else { // 현재 상태가 MANUAL으로 바뀐 것이면, if (eEQPState == Structure.classStructure.EQPState.DOWN) { this.m_Info.Set_SendSF(Structure.classStructure.SFName.S6F11EQPEventRequest, 51, nUnitID, 0); this.m_Info.Unit(nUnitID).SubUnit(0).EQPStateChangeBYWHO = Structure.classStructure.BYWHO.None; } else if (eEQPState == Structure.classStructure.EQPState.STOP) { this.m_Info.Set_SendSF(Structure.classStructure.SFName.S6F11EQPEventRequest, 53, nUnitID, 0); this.m_Info.Unit(nUnitID).SubUnit(0).EQPStateChangeBYWHO = Structure.classStructure.BYWHO.None; } } } catch (Exception ex) { this.m_Info.Set_Log(Common.EnuCommon.LogType.CIM, ex.ToString()); } }
반응형'IT Story > C# & WPF' 카테고리의 다른 글
Sending commands in queue to equipment Example source (0) 2022.07.03 PSecsDrv_S10F3 processing example source (0) 2022.07.03 SecsDrv_S3F105CellSize processing example source (0) 2022.07.03 SecsDrv_S2F18 and S2F101 processing example (0) 2022.07.03 SECS S1F15 and S1F17 processing example source (0) 2022.07.03