IT Story/C# & WPF

Example source of processing when EQP State is changed

Hoyami7 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());
            }
        }
반응형