/// <summary> /// Primary Message에 대해 처리한 후 Secondary Message를 Biuld하여 Driver에 전송한다. /// </summary> /// <param name="msgTran">Primary Message의 Transaction</param> public void funPrimaryReceive(Transaction msgTran) { string dstrModuleID = ""; int dintECIDCount = 0; int dintECID = 0; Boolean dbolLayerExist = false; int dintIndex = 0; try { dstrModuleID = msgTran.Primary().Item("MODULEID").Getvalue().ToString().Trim(); //for (int dintUnit = 0; dintUnit <= pInfo.UnitCount; dintUnit++) //{ if (dstrModuleID == pInfo.Unit(3).SubUnit(0).ModuleID) { dbolLayerExist = true; //break; } //} //ModuleID가 존재하지 않는 경우(Layer2도 비교한다.) if (dbolLayerExist == false) { msgTran.Secondary().Item("MODULEID").Putvalue(dstrModuleID); msgTran.Secondary().Item("ECCOUNT").Putvalue(0); funSendReply(msgTran); return; } dintECIDCount = Convert.ToInt32(msgTran.Primary().Item("ECIDCNT").Getvalue()); ArrayList arrCon = new ArrayList(); //받은 ECID중에 존재하지 않는것이 하나라도 있으면 L,0으로 보고한다. for (int dintLoop = 1; dintLoop <= dintECIDCount; dintLoop++) { dintECID = Convert.ToInt32(msgTran.Primary().Item("ECID" + (dintLoop - 1)).Getvalue()); if (pInfo.Unit(0).SubUnit(0).ECID(dintECID) == null) { msgTran.Secondary().Item("MODULEID").Putvalue(dstrModuleID); msgTran.Secondary().Item("ECCOUNT").Putvalue(0); funSendReply(msgTran); return; } if (arrCon.Contains(dintECID) == true) { msgTran.Secondary().Item("MODULEID").Putvalue(dstrModuleID); msgTran.Secondary().Item("ECCOUNT").Putvalue(0); funSendReply(msgTran); return; } arrCon.Add(dintECID); } msgTran.Secondary().Item("MODULEID").Putvalue(dstrModuleID); //ECID를 PLC에서 읽는다. //this.PInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, "시작(subS2F29): " + DateTime.Now.ToString("yyyyMMddHHmmss") + ": " + DateTime.Now.Millisecond.ToString()); if (pInfo.EQP("Main").DummyPLC == false) { pInfo.All.isReceivedFromHOST = true; //HOST로 부터 S2F29를 받았음을 저장 pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.ECIDRead); //ECID를 PLC로 부터 읽는다. pHost.subWaitDuringReadFromPLC(); //바로 위에 PLC로 준 명령이 완료될때까지 이 함수에서 대기한다. pInfo.All.isReceivedFromHOST = false; //HOST로 부터 S2F29를 받지 않았음을 저장(초기화) } //this.PInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, "종료(subS2F29): " + DateTime.Now.ToString("yyyyMMddHHmmss") + ": " + DateTime.Now.Millisecond.ToString()); //dstrModuleID = pInfo.Unit(0).SubUnit(0).ModuleID; //HOST로 부터 받은 List가 L, 0이면 모든 ECID 보고 if (dintECIDCount == 0) { int ecidCount = pInfo.Unit(0).SubUnit(0).ECIDCount; msgTran.Secondary().Item("ECCOUNT").Putvalue(ecidCount); for (int dintLoop = 1; dintLoop <= ecidCount; dintLoop++) { //ECID 중 사용하지 않는것(Spare)는 제외하고 보고한다. if (pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ModuleID.Contains(dstrModuleID) == true) //&& pInfo.Unit(0).SubUnit(0).ECID(dintLoop).Use == true) { InfoAct.clsECID currentECID = pInfo.Unit(0).SubUnit(0).ECID(dintIndex + 1); msgTran.Secondary().Item("ECID" + dintIndex).Putvalue(currentECID.Index); msgTran.Secondary().Item("ECNAME" + dintIndex).Putvalue(currentECID.Name); msgTran.Secondary().Item("ECDEF" + dintIndex).Putvalue(FunStringH.funPoint(currentECID.ECDEF, currentECID.Format)); msgTran.Secondary().Item("ECSLL" + dintIndex).Putvalue(FunStringH.funPoint(currentECID.ECSLL, currentECID.Format)); msgTran.Secondary().Item("ECSUL" + dintIndex).Putvalue(FunStringH.funPoint(currentECID.ECSUL, currentECID.Format)); msgTran.Secondary().Item("ECWLL" + dintIndex).Putvalue(FunStringH.funPoint(currentECID.ECWLL, currentECID.Format)); msgTran.Secondary().Item("ECWUL" + dintIndex).Putvalue(FunStringH.funPoint(currentECID.ECWUL, currentECID.Format)); dintIndex = dintIndex + 1; } } } else { msgTran.Secondary().Item("ECCOUNT").Putvalue(dintECIDCount); if (dstrModuleID == this.pInfo.Unit(0).SubUnit(0).ModuleID) //Layer1단 모두 보고 { for (int dintLoop = 1; dintLoop <= dintECIDCount; dintLoop++) { dintECID = Convert.ToInt32(msgTran.Primary().Item("ECID" + (dintLoop - 1)).Getvalue()); InfoAct.clsECID currentECID = pInfo.Unit(0).SubUnit(0).ECID(dintECID); msgTran.Secondary().Item("ECID" + (dintLoop - 1)).Putvalue(currentECID.Index); msgTran.Secondary().Item("ECNAME" + (dintLoop - 1)).Putvalue(currentECID.Name); msgTran.Secondary().Item("ECDEF" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECDEF, currentECID.Format)); msgTran.Secondary().Item("ECSLL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECSLL, currentECID.Format)); msgTran.Secondary().Item("ECSUL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECSUL, currentECID.Format)); msgTran.Secondary().Item("ECWLL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECWLL, currentECID.Format)); msgTran.Secondary().Item("ECWUL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECWUL, currentECID.Format)); } } else //Layer2단 해당 되는것만 보고 { for (int dintLoop = 1; dintLoop <= dintECIDCount; dintLoop++) { dintECID = Convert.ToInt32(msgTran.Primary().Item("ECID" + (dintLoop - 1)).Getvalue()); if (dstrModuleID != this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).ModuleID) { if (this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).ModuleID.Length > 13) { if (dstrModuleID != this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).ModuleID.Substring(0, 13)) { dintECIDCount = 0; break; } else { InfoAct.clsECID currentECID = pInfo.Unit(0).SubUnit(0).ECID(dintECID); msgTran.Secondary().Item("ECID" + (dintLoop - 1)).Putvalue(currentECID.Index); msgTran.Secondary().Item("ECNAME" + (dintLoop - 1)).Putvalue(currentECID.Name); msgTran.Secondary().Item("ECDEF" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECDEF, currentECID.Format)); msgTran.Secondary().Item("ECSLL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECSLL, currentECID.Format)); msgTran.Secondary().Item("ECSUL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECSUL, currentECID.Format)); msgTran.Secondary().Item("ECWLL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECWLL, currentECID.Format)); msgTran.Secondary().Item("ECWUL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECWUL, currentECID.Format)); } } else { dintECIDCount = 0; break; } } else { InfoAct.clsECID currentECID = pInfo.Unit(0).SubUnit(0).ECID(dintECID); msgTran.Secondary().Item("ECID" + (dintLoop - 1)).Putvalue(currentECID.Index); msgTran.Secondary().Item("ECNAME" + (dintLoop - 1)).Putvalue(currentECID.Name); msgTran.Secondary().Item("ECDEF" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECDEF, currentECID.Format)); msgTran.Secondary().Item("ECSLL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECSLL, currentECID.Format)); msgTran.Secondary().Item("ECSUL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECSUL, currentECID.Format)); msgTran.Secondary().Item("ECWLL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECWLL, currentECID.Format)); msgTran.Secondary().Item("ECWUL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECWUL, currentECID.Format)); } } } } funSendReply(msgTran); } catch (Exception error) { funSetLog(InfoAct.clsInfo.LogType.CIM, error.ToString()); return; } finally { this.pInfo.All.isReceivedFromHOST = false; //초기화 this.pInfo.All.PLCActionEnd = false; //초기화 } }
/// <summary> /// Primary Message를 Biuld하여 Transaction을 Return한다. /// </summary> /// <param name="strParameters">Parameter 문자열</param> public Transaction funPrimarySend(string strParameters) { string[] arrayEvent; try { arrayEvent = strParameters.Split(','); int dintBYWHO = 0; int dintIndex = 0; int dintEOIDSingleCount = 0; int dintSendIndex = 0; int dintECID = 0; int dintCount = 0; string[] dstrData; Queue dqEOIDIndex = new Queue(); int dintCEID = Convert.ToInt32(arrayEvent[1]); //CEID string dstrValue = arrayEvent[2]; //Value(102는 ECID값(KEY값), EOID의 경우 Index이다.) pMsgTran = pSecsDrv.MakeTransaction(this.StrPrimaryMsgName); pMsgTran.Primary().Item("DATAID").Putvalue(0); //Fixed Value pMsgTran.Primary().Item("CEID").Putvalue(dintCEID); pMsgTran.Primary().Item("RPTID").Putvalue(1); //Fixed Value pMsgTran.Primary().Item("MODULEID").Putvalue(pInfo.Unit(3).SubUnit(0).ModuleID); pMsgTran.Primary().Item("MCMD").Putvalue(pInfo.All.ControlState); pMsgTran.Primary().Item("MODULE_STATE").Putvalue(pInfo.Unit(3).SubUnit(0).EQPState); pMsgTran.Primary().Item("PROC_STATE").Putvalue(pInfo.Unit(3).SubUnit(0).EQPProcessState); //각 CEID별로 BYWHO값을 설정한다. switch (dintCEID) { case 101: { dintBYWHO = Convert.ToInt32(pInfo.All.EOIDChangeBYWHO); pMsgTran.Primary().Item("ECCOUNT").Putvalue(0); dstrValue = dstrValue.Remove(dstrValue.LastIndexOf(';')); dstrData = dstrValue.Split(';'); //보고할 EOID Index 값 //EOID Index가 4~9, 그 이외의 값 개수 체크 for (int dintLoop = 0; dintLoop <= dstrData.Length - 1; dintLoop++) { dintIndex = Convert.ToInt32(dstrData[dintLoop]); dintEOIDSingleCount = dintEOIDSingleCount + 1; //EOID Index가 4~9 이외의 값 개수 if (dqEOIDIndex.Contains(pInfo.Unit(0).SubUnit(0).EOID(dintIndex).EOID) == false) { dqEOIDIndex.Enqueue(pInfo.Unit(0).SubUnit(0).EOID(dintIndex).EOID); } } pMsgTran.Primary().Item("EOCOUNT").Putvalue(dqEOIDIndex.Count); for (int dintLoop = 1; dintLoop <= dstrData.Length; dintLoop++) { dintIndex = Convert.ToInt32(dstrData[dintLoop - 1]); int dintEOID = pInfo.Unit(0).SubUnit(0).EOID(dintIndex).EOID; int dintEOMD = pInfo.Unit(0).SubUnit(0).EOID(dintIndex).EOMD; int dintEOV = pInfo.Unit(0).SubUnit(0).EOID(dintIndex).EOV; pMsgTran.Primary().Item("EOMDCOUNT" + (dintLoop - 1)).Putvalue(1); pMsgTran.Primary().Item("EOID" + (dintLoop - 1)).Putvalue(dintEOID); pMsgTran.Primary().Item("EOMD" + (dintLoop - 1) + 0).Putvalue(dintEOMD); pMsgTran.Primary().Item("EOV" + (dintLoop - 1) + 0).Putvalue(dintEOV); } } break; case 102: { dintBYWHO = Convert.ToInt32(pInfo.All.ECIDChangeBYWHO); pMsgTran.Primary().Item("EOCOUNT").Putvalue(0); dintCount = dstrValue.Split(';').Length - 1; //보고할 List 개수 dstrData = dstrValue.Split(';'); pMsgTran.Primary().Item("ECCOUNT").Putvalue(dintCount); for (int dintLoop = 1; dintLoop <= dintCount; dintLoop++) { dintECID = Convert.ToInt32(dstrData[dintLoop - 1]); pMsgTran.Primary().Item("ECID" + (dintLoop - 1)).Putvalue(dintECID); InfoAct.clsECID currentECID = pInfo.Unit(0).SubUnit(0).ECID(dintECID); pMsgTran.Primary().Item("ECNAME" + (dintLoop - 1)).Putvalue(currentECID.Name); pMsgTran.Primary().Item("ECDEF" + (dintLoop - 1)).Putvalue(currentECID.ECDEF); pMsgTran.Primary().Item("ECSLL" + (dintLoop - 1)).Putvalue(currentECID.ECSLL); pMsgTran.Primary().Item("ECSUL" + (dintLoop - 1)).Putvalue(currentECID.ECSUL); pMsgTran.Primary().Item("ECWLL" + (dintLoop - 1)).Putvalue(currentECID.ECWLL); pMsgTran.Primary().Item("ECWUL" + (dintLoop - 1)).Putvalue(currentECID.ECWUL); } } break; default: break; } pMsgTran.Primary().Item("BYWHO").Putvalue(dintBYWHO); pMsgTran.Primary().Item("OPERID").Putvalue(pInfo.All.UserID); pMsgTran.Primary().Item("RPTID1").Putvalue(5); //Fixed Value pMsgTran.Primary().Item("RPTID2").Putvalue(6); //Fixed Value pInfo.All.ECIDChangeBYWHO = ""; //초기화 return(pMsgTran); } catch (Exception error) { funSetLog(InfoAct.clsInfo.LogType.CIM, error.ToString()); return(null); } }
/// <summary> /// Primary Message에 대해 처리한 후 Secondary Message를 Biuld하여 Driver에 전송한다. /// </summary> /// <param name="msgTran">Primary Message의 Transaction</param> public void funPrimaryReceive(Transaction msgTran) { string dstrModuleID = ""; int dintECIDCount = 0; int dintECID = 0; string dstrECName = ""; Boolean dbolFail = false; bool dbolECNameFail = false; bool dbolECIDFail = false; int dintFailCount = 0; //int dintECSLL = 0; //int dintECWLL = 0; //int dintECDEF = 0; //int dintECWUL = 0; //int dintECSUL = 0; float dintECSLL = 0; float dintECWLL = 0; float dintECDEF = 0; float dintECWUL = 0; float dintECSUL = 0; int dintEAC = 0; int dintEACName = 0; int dintEACECID = 0; int dintTEAC = 0; int dintEAC_SLL = 0; int dintEAC_WLL = 0; int dintEAC_DEF = 0; int dintEAC_WUL = 0; int dintEAC_SUL = 0; bool dbolErrorCheck = true; Boolean dbolLayerExist = false; Queue dqECID = new Queue(); try { dstrModuleID = msgTran.Primary().Item("MODULEID").Getvalue().ToString().Trim(); //for (int dintUnit = 0; dintUnit <= this.pInfo.UnitCount; dintUnit++) //{ if (dstrModuleID == pInfo.Unit(3).SubUnit(0).ModuleID) { dbolLayerExist = true; //break; } //} //ModuleID가 존재하지 않는 경우 if (dbolLayerExist == false) { msgTran.Secondary().Item("MODULEID").Putvalue(dstrModuleID); msgTran.Secondary().Item("MIACK").Putvalue(1); //1 : There is no such a MOUDLEID msgTran.Secondary().Item("ECCOUNT").Putvalue(0); funSendReply(msgTran); return; } msgTran.Secondary().Item("MODULEID").Putvalue(dstrModuleID); msgTran.Secondary().Item("MIACK").Putvalue(0); dintECIDCount = Convert.ToInt32(msgTran.Primary().Item("ECCOUNT").Getvalue()); msgTran.Secondary().Item("ECCOUNT").Putvalue(dintECIDCount); //받은 ECID중에 존재하지 않는것이 하나라도 있으면 NAK으로 보고하고 PLC에 모두 적용하지 않는다. for (int dintLoop = 1; dintLoop <= dintECIDCount; dintLoop++) { dintECID = Convert.ToInt32(msgTran.Primary().Item("ECID" + (dintLoop - 1)).Getvalue()); dstrECName = msgTran.Primary().Item("ECNAME" + (dintLoop - 1)).Getvalue().ToString().Trim(); //존재하지 않는 ECID가 왔을때 if (pInfo.Unit(0).SubUnit(0).ECID(dintECID) == null) { dbolECIDFail = true; } else { if (dstrECName != this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).Name) //존재하지 않는 ECID가 왔을때 { dbolECNameFail = true; } else if (this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).ModuleID.Contains(dstrModuleID) == false) { dbolFail = true; } else { string dstrFormat = this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).Format; dintECSLL = Convert.ToSingle(FunStringH.funMakeRound(msgTran.Primary().Item("ECSLL" + (dintLoop - 1)).Getvalue().ToString().Trim(), dstrFormat)); dintECWLL = Convert.ToSingle(FunStringH.funMakeRound(msgTran.Primary().Item("ECWLL" + (dintLoop - 1)).Getvalue().ToString().Trim(), dstrFormat)); dintECDEF = Convert.ToSingle(FunStringH.funMakeRound(msgTran.Primary().Item("ECDEF" + (dintLoop - 1)).Getvalue().ToString().Trim(), dstrFormat)); dintECWUL = Convert.ToSingle(FunStringH.funMakeRound(msgTran.Primary().Item("ECWUL" + (dintLoop - 1)).Getvalue().ToString().Trim(), dstrFormat)); dintECSUL = Convert.ToSingle(FunStringH.funMakeRound(msgTran.Primary().Item("ECSUL" + (dintLoop - 1)).Getvalue().ToString().Trim(), dstrFormat)); Single dSingleMin = Convert.ToSingle(this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).Min); Single dSingleMax = Convert.ToSingle(this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).Max); if (Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSLL) != dintECSLL) { dbolFail = true; dintEAC_SLL = 2; } else if (Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSUL) != dintECSUL) { dbolFail = true; dintEAC_SUL = 2; } else #region Min & Max 값 확인 if ((dintECDEF < dSingleMin) || (dintECDEF > dSingleMax)) { dbolFail = true; dintEAC_DEF = 2; } else if ((dintECSUL < dSingleMin) || (dintECSUL > dSingleMax)) { dbolFail = true; dintEAC_SUL = 2; } else if ((dintECSLL < dSingleMin) || (dintECSLL > dSingleMax)) { dbolFail = true; dintEAC_SLL = 2; } else if ((dintECWUL < dSingleMin) || (dintECWUL > dSingleMax)) { dbolFail = true; dintEAC_WUL = 2; } else if ((dintECWLL < dSingleMin) || (dintECWLL > dSingleMax)) { dbolFail = true; dintEAC_WLL = 2; } //if ((dintECWUL < dSingleMin) || (dintECWUL > dSingleMax)) //{ // dbolFail = true; // dintEAC_WUL = 2; //} //if ((dintECWLL < dSingleMin) || (dintECWLL > dSingleMax)) //{ // dbolFail = true; // dintEAC_WLL = 2; //} #endregion if (!dbolFail) { dbolErrorCheck = false; // 각 항목별 Data 확인 if (dintECSUL >= dintECWUL && dintECSUL >= dintECDEF && dintECSUL >= dintECWLL && dintECSUL >= dintECSLL) { if (dintECWUL >= dintECDEF && dintECWUL >= dintECWLL && dintECWLL >= dintECSLL) { if (dintECDEF >= dintECWLL && dintECDEF >= dintECSLL) { if (dintECWLL < dintECSLL) { dbolFail = true; dintEAC_WLL = 2; } else { dqECID.Enqueue(dintECID); //Update를 위해 Queue에 저장 } } else { if (!(dintECDEF > dintECWLL)) { dintEAC_DEF = 2; dintEAC_WLL = 2; } else { dintEAC_DEF = 2; dintEAC_SLL = 2; } dbolFail = true; //dintEAC_DEF = 2; } } else { if (!(dintECWUL > dintECDEF)) { dintEAC_WUL = 2; dintEAC_DEF = 2; } else if (!(dintECWUL > dintECWLL)) { dintEAC_WUL = 2; dintEAC_WLL = 2; } else { dintEAC_WUL = 2; dintEAC_SLL = 2; } dbolFail = true; //dintEAC_DEF = 2; } } else { if (!(dintECSUL > dintECWUL)) { dintEAC_SUL = 2; dintEAC_WUL = 2; } else if (!(dintECSUL > dintECDEF)) { dintEAC_SUL = 2; dintEAC_DEF = 2; } else if (!(dintECSUL > dintECWLL)) { dintEAC_SUL = 2; dintEAC_WLL = 2; } else { dintEAC_SUL = 2; dintEAC_SLL = 2; } dbolFail = true; //dintEAC_DEF = 2; } } } } if (dbolFail == true) //Validation 체크 에러 { dintFailCount = dintFailCount + 1; //각 항목별로 Fail이 났을때 1씩 증가 dintEAC = 2; if (dbolErrorCheck == false) { if (Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSLL) != dintECSLL) { dintEAC_SLL = 2; } else if (Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSUL) != dintECSUL) { dintEAC_SUL = 2; } else { //dintEAC_SLL = 0; //dintEAC_WLL = 0; //dintEAC_DEF = 0; //dintEAC_SUL = 0; //dintEAC_WUL = 0; //WLL 확인 if (!(Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSLL) <= dintECWLL && dintECWLL <= Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECDEF))) { dintEAC_WLL = 2; dintEAC_SLL = 0; //dintEAC_WLL = 0; dintEAC_DEF = 0; dintEAC_SUL = 0; dintEAC_WUL = 0; } else { if (!(Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECWLL) <= dintECDEF && dintECDEF <= Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECWUL))) { dintEAC_DEF = 2; dintEAC_SLL = 0; dintEAC_WLL = 0; //dintEAC_DEF = 0; dintEAC_SUL = 0; dintEAC_WUL = 0; } else { if (!(Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECDEF) <= dintECWUL && dintECWUL <= Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSUL))) { dintEAC_WUL = 2; dintEAC_SLL = 0; dintEAC_WLL = 0; dintEAC_DEF = 0; dintEAC_SUL = 0; //dintEAC_WUL = 0; } else { int a = 0; } } } } } } else { dintEAC = 0; } if (dbolECIDFail == true) { dintEACECID = 2; } else { dintEACECID = 0; } if (dbolECNameFail == true) { dintEACName = 2; } else { dintEACName = 0; } if (dbolFail || dbolECIDFail || dbolECNameFail) { dintTEAC = 1; } else { dintTEAC = 0; } dbolFail = false; dbolECIDFail = false; dbolECNameFail = false; msgTran.Secondary().Item("TEAC" + (dintLoop - 1)).Putvalue(dintTEAC); msgTran.Secondary().Item("ECID" + (dintLoop - 1)).Putvalue(dintECID); msgTran.Secondary().Item("EAC1" + (dintLoop - 1)).Putvalue(dintEACECID); msgTran.Secondary().Item("ECNAME" + (dintLoop - 1)).Putvalue(dstrECName); msgTran.Secondary().Item("EAC2" + (dintLoop - 1)).Putvalue(dintEACName); msgTran.Secondary().Item("ECDEF" + (dintLoop - 1)).Putvalue(dintECDEF); msgTran.Secondary().Item("EAC3" + (dintLoop - 1)).Putvalue(dintEAC_DEF); msgTran.Secondary().Item("ECSLL" + (dintLoop - 1)).Putvalue(dintECSLL); msgTran.Secondary().Item("EAC4" + (dintLoop - 1)).Putvalue(dintEAC_SLL); msgTran.Secondary().Item("ECSUL" + (dintLoop - 1)).Putvalue(dintECSUL); msgTran.Secondary().Item("EAC5" + (dintLoop - 1)).Putvalue(dintEAC_SUL); msgTran.Secondary().Item("ECWLL" + (dintLoop - 1)).Putvalue(dintECWLL); msgTran.Secondary().Item("EAC6" + (dintLoop - 1)).Putvalue(dintEAC_WLL); msgTran.Secondary().Item("ECWUL" + (dintLoop - 1)).Putvalue(dintECWUL); msgTran.Secondary().Item("EAC7" + (dintLoop - 1)).Putvalue(dintEAC_WUL); dintEAC_SLL = 0; dintEAC_WLL = 0; dintEAC_DEF = 0; dintEAC_WUL = 0; dintEAC_SUL = 0; } //HOST로 S2F16 보고 funSendReply(msgTran); if (dintFailCount > 0) { //Error가 발생한것임. dqECID.Clear(); return; } ////NACK값이 하나라도 존재하면 PLC에 적용하지 않느다. ////2011.01.13 송은선 //if (dintEAC != 0 && dintTEAC != 0) //{ // dqECID.Clear(); // return; //} //카운트가 0이상이면 맞는게 있음 if (dqECID.Count > 0) { this.pInfo.All.ECIDChangeBYWHO = "1"; //BY HOST this.pInfo.All.ECIDChange.Clear(); //초기화 this.pInfo.All.ECIDChangeHOSTReport.Clear(); //초기화 this.pInfo.All.ECIDChangeFromHost = ""; string dstrECSLL = string.Empty; string dstrECWLL = string.Empty; string dstrECDEF = string.Empty; string dstrECWUL = string.Empty; string dstrECSUL = string.Empty; //PLC에 Write할 ECID를 저장한다. for (int dintLoop = 1; dintLoop <= dintECIDCount; dintLoop++) { dintECID = Convert.ToInt32(msgTran.Primary().Item("ECID" + (dintLoop - 1)).Getvalue()); if (dqECID.Contains(dintECID) == true) { string dstrFormat = this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).Format; dstrECSLL = FunStringH.funMakePLCData(FunStringH.funMakeRound(msgTran.Primary().Item("ECSLL" + (dintLoop - 1)).Getvalue().ToString(), dstrFormat)); dstrECWLL = FunStringH.funMakePLCData(FunStringH.funMakeRound(msgTran.Primary().Item("ECWLL" + (dintLoop - 1)).Getvalue().ToString(), dstrFormat)); dstrECDEF = FunStringH.funMakePLCData(FunStringH.funMakeRound(msgTran.Primary().Item("ECDEF" + (dintLoop - 1)).Getvalue().ToString(), dstrFormat)); dstrECWUL = FunStringH.funMakePLCData(FunStringH.funMakeRound(msgTran.Primary().Item("ECWUL" + (dintLoop - 1)).Getvalue().ToString(), dstrFormat)); dstrECSUL = FunStringH.funMakePLCData(FunStringH.funMakeRound(msgTran.Primary().Item("ECSUL" + (dintLoop - 1)).Getvalue().ToString(), dstrFormat)); this.pInfo.All.ECIDChange.Add(dintECID, dstrECSLL + "," + dstrECWLL + "," + dstrECDEF + "," + dstrECWUL + "," + dstrECSUL); this.pInfo.All.ECIDChangeFromHost += dintECID + ";"; this.pInfo.All.ECIDChangeHOSTReport.Add(dintECID, dstrECSLL + "," + dstrECWLL + "," + dstrECDEF + "," + dstrECWUL + "," + dstrECSUL); } } //HOST에서 받은것외에 없는 항목은 CIM이 가지고 있는 Data를 써준다. //변경할 ECID만 써주는게 아니고 모든 ECID를 써주기 때문임 for (int dintLoop = 1; dintLoop <= this.pInfo.Unit(0).SubUnit(0).ECIDCount; dintLoop++) { if (this.pInfo.All.ECIDChange.ContainsKey(dintLoop) == true) { } else { InfoAct.clsECID pECID = pInfo.Unit(0).SubUnit(0).ECID(dintLoop); this.pInfo.All.ECIDChange.Add(dintLoop, FunStringH.funMakePLCData(FunStringH.funMakeRound(pECID.ECSLL, pECID.Format)) + "," + FunStringH.funMakePLCData(FunStringH.funMakeRound(pECID.ECWLL, pECID.Format)) + "," + FunStringH.funMakePLCData(FunStringH.funMakeRound(pECID.ECDEF, pECID.Format)) + "," + FunStringH.funMakePLCData(FunStringH.funMakeRound(pECID.ECWUL, pECID.Format)) + "," + FunStringH.funMakePLCData(FunStringH.funMakeRound(pECID.ECSUL, pECID.Format))); } } //PLC로 ECID 변경 Write this.pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.ECIDChange); } } catch (Exception error) { funSetLog(InfoAct.clsInfo.LogType.CIM, error.ToString()); return; } }