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