/// <summary> /// Primary Message에 대해 처리한 후 Secondary Message를 Biuld하여 Driver에 전송한다. /// </summary> /// <param name="msgTran">Primary Message의 Transaction</param> public void funPrimaryReceive(Transaction msgTran) { string dstrModuleID = ""; string[] dstrDATATYPE; string[] dstrITEMNAME; string[] dstrITEMVALUE; string[] dstrREFERENCE; string[] dstrArrTemp; int dintDATACOUNT = 0; int dintACK = 0; int dintTemp = 0; int[] dintEAC; bool dbolNACK = false; try { dstrModuleID = msgTran.Primary().Item("MODULEID").Getvalue().ToString().Trim(); dintDATACOUNT = Convert.ToInt32(msgTran.Primary().Item("L2").Getvalue()); msgTran.Secondary().Item("L2").Putvalue(dintDATACOUNT); dstrDATATYPE = new string[dintDATACOUNT]; dstrITEMNAME = new string[dintDATACOUNT]; dstrITEMVALUE = new string[dintDATACOUNT]; dstrREFERENCE = new string[dintDATACOUNT]; dintEAC = new int[dintDATACOUNT]; //ModuleID가 존재하지 않는 경우 if (dstrModuleID != this.pInfo.Unit(3).SubUnit(0).ModuleID) { msgTran.Secondary().Item("ACK").Putvalue("1"); funSendReply(msgTran); return; } //Secondary에 Data 저장 for (int dintLoop = 0; dintLoop < dintDATACOUNT; dintLoop++) { dstrDATATYPE[dintLoop] = msgTran.Primary().Item("DATA_TYPE" + dintLoop).Getvalue().ToString().Trim(); dstrITEMNAME[dintLoop] = msgTran.Primary().Item("ITEM_NAME" + dintLoop).Getvalue().ToString().Trim(); dstrITEMVALUE[dintLoop] = msgTran.Primary().Item("ITEM_VALUE" + dintLoop).Getvalue().ToString().Trim(); dstrREFERENCE[dintLoop] = msgTran.Primary().Item("REFERENCE" + dintLoop).Getvalue().ToString().Trim(); InfoAct.clsMultiUseDataByTYPE clsTYPE = this.pInfo.Unit(0).SubUnit(0).MultiData.TYPES(dstrDATATYPE[dintLoop]); if (clsTYPE != null) { InfoAct.clsMultiUseDataByITEM clsITEM = clsTYPE.ITEMS(dstrITEMNAME[dintLoop]); if (clsITEM != null) { if (dstrREFERENCE[dintLoop] != clsITEM.REFERENCE) { dintACK = 2; dintEAC[dintLoop] = 4; } else { dintEAC[dintLoop] = 0; #region IP check if (clsITEM.REFERENCE.Contains("IP") || clsITEM.ITEM.Contains("IP")) { dstrArrTemp = dstrITEMVALUE[dintLoop].Split('.'); if (dstrArrTemp.Length != 4) { dintACK = 2; dintEAC[dintLoop] = 3; } else { for (int dintLoopTemp = 0; dintLoopTemp < dstrArrTemp.Length; dintLoopTemp++) { int dintIPTemp = 0; if (int.TryParse(dstrArrTemp[dintLoopTemp], out dintIPTemp)) { if (dintIPTemp > 255 || dintIPTemp < 0) { dintACK = 2; dintEAC[dintLoop] = 3; break; } } else { dintACK = 2; dintEAC[dintLoop] = 3; break; } } } } #endregion #region TIME check else if (clsITEM.REFERENCE.Equals("MINUTE") || clsITEM.ITEM.Contains("TIME")) { int dintTimeTemp = 0; if (int.TryParse(dstrITEMVALUE[dintLoop], out dintTimeTemp)) { dintEAC[dintLoop] = 0; } else { dintACK = 2; dintEAC[dintLoop] = 3; } } #endregion } } else { dintACK = 2; dintEAC[dintLoop] = 2; } } else { dintACK = 2; dintEAC[dintLoop] = 1; } if (dintACK != 0) { dbolNACK = true; } } for (int dintLoop = 0; dintLoop < dintDATACOUNT; dintLoop++) { msgTran.Secondary().Item("DATA_TYPE" + dintLoop).Putvalue(dstrDATATYPE[dintLoop]); msgTran.Secondary().Item("ITEM_NAME" + dintLoop).Putvalue(dstrITEMNAME[dintLoop]); msgTran.Secondary().Item("ITEM_VALUE" + dintLoop).Putvalue(dstrITEMVALUE[dintLoop]); msgTran.Secondary().Item("REFERENCE" + dintLoop).Putvalue(dstrREFERENCE[dintLoop]); msgTran.Secondary().Item("EAC" + dintLoop).Putvalue(dintEAC[dintLoop]); } msgTran.Secondary().Item("ACK").Putvalue(dintACK); funSendReply(msgTran); if (!dbolNACK) { StringBuilder sb = new StringBuilder("SET;"); for (int dintLoop = 0; dintLoop < dstrITEMNAME.Length; dintLoop++) { pInfo.Unit(0).SubUnit(0).MultiData.TYPES("MCC").ITEMS(dstrITEMNAME[dintLoop].Trim()).VALUE = dstrITEMVALUE[dintLoop].Trim(); //sb.Append(dstrITEMNAME[dintLoop].Trim()); //sb.Append("="); //sb.Append(dstrITEMVALUE[dintLoop].Trim()); //if (dintLoop < dstrITEMNAME.Length - 1) sb.Append(","); } //this.pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.Msg2MCC, sb.ToString()); } } catch (Exception ex) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString()); } }
/// <summary> /// Primary Message에 대해 처리한 후 Secondary Message를 Biuld하여 Driver에 전송한다. /// </summary> /// <param name="msgTran">Primary Message의 Transaction</param> public void funPrimaryReceive(Transaction msgTran) { List <MultiUseDataBody> dListReceiveData = new List <MultiUseDataBody>(); //List<List<string>> dListBodyOfType = new List<List<string>>(); ACK ack = ACK.OK; try { if (this.pInfo.All.HostConnect == false) { return; } #region ModuleID Check string dstrModuleID = msgTran.Primary().Item("MODULEID").Getvalue().ToString().Trim(); if (!dstrModuleID.Equals(this.pInfo.Unit(3).SubUnit(0).ModuleID)) // 모듈아이디 나크 { msgTran.Secondary().Item("L2").Putvalue(0); msgTran.Secondary().Item("ACK").Putvalue((int)ACK.ModuleID_msMatch); funSendReply(msgTran); return; } #endregion int dintTypeCount = Convert.ToInt32(msgTran.Primary().Item("L2").Getvalue()); // 타입 카운트 #region 장비 전체 리스트 조회 시 if (dintTypeCount == 0) // 모두 조회 { foreach (string dstrTYPE in this.pInfo.Unit(0).SubUnit(0).MultiData.TYPES()) { foreach (string dstrITEM in this.pInfo.Unit(0).SubUnit(0).MultiData.TYPES(dstrTYPE).ITEMS()) { dListReceiveData.Add(new MultiUseDataBody(dstrTYPE, dstrITEM)); } } //dListReceiveData.Add(new MultiUseDataBody("MCC", "MCC_BASIC_PATH")); //dListReceiveData.Add(new MultiUseDataBody("MCC", "MCC_SAMPLING_TIME")); //dListReceiveData.Add(new MultiUseDataBody("MCC", "MCC_HOST_IP")); //dListReceiveData.Add(new MultiUseDataBody("MCC", "MCC_LOGIN_ID")); //dListReceiveData.Add(new MultiUseDataBody("MCC", "MCC_LOGIN_PW")); } #endregion #region 일부 타입 리스트 조회시 else // n 개 조회 { for (int i = 0; i < dintTypeCount; i++) { string dstrType = msgTran.Primary().Item("DATA_TYPE" + i.ToString()).Getvalue().ToString().Trim(); InfoAct.clsMultiUseDataByTYPE clsTYPE = this.pInfo.Unit(0).SubUnit(0).MultiData.TYPES(dstrType); if (clsTYPE != null) { int dintBodyCount = int.Parse(msgTran.Primary().Item("L4" + i.ToString()).Getvalue().ToString().Trim()); if (dintBodyCount == 0) { foreach (string dstrITEM in this.pInfo.Unit(0).SubUnit(0).MultiData.TYPES(dstrType).ITEMS()) { dListReceiveData.Add(new MultiUseDataBody(dstrType, dstrITEM)); } //dListReceiveData.Add(new MultiUseDataBody("MCC", "MCC_BASIC_PATH")); //dListReceiveData.Add(new MultiUseDataBody("MCC", "MCC_SAMPLING_TIME")); //dListReceiveData.Add(new MultiUseDataBody("MCC", "MCC_HOST_IP")); //dListReceiveData.Add(new MultiUseDataBody("MCC", "MCC_LOGIN_ID")); //dListReceiveData.Add(new MultiUseDataBody("MCC", "MCC_LOGIN_PW")); } else // n 의 n 개 조회 { for (int j = 0; j < dintBodyCount; j++) { //string dstrBodyName = msgTran.Primary().Item("ITEM_NAME" + i.ToString()).Getvalue().ToString().Trim(); string dstrBodyName = msgTran.Primary().Item("ITEM_NAME" + i.ToString() + j.ToString()).Getvalue().ToString().Trim(); dListReceiveData.Add(new MultiUseDataBody(dstrType, dstrBodyName)); if (!clsTYPE.ItemContains(dstrBodyName)) { ack = ACK.At_least_One_data_invalid; break; } //switch (dstrBodyName) //{ // case "MCC_BASIC_PATH": // dListReceiveData.Add(new MultiUseDataBody("MCC", "MCC_BASIC_PATH")); // break; // case "MCC_SAMPLING_TIME": // dListReceiveData.Add(new MultiUseDataBody("MCC", "MCC_SAMPLING_TIME")); // break; // case "MCC_HOST_IP": // dListReceiveData.Add(new MultiUseDataBody("MCC", "MCC_HOST_IP")); // break; // case "MCC_LOGIN_ID": // dListReceiveData.Add(new MultiUseDataBody("MCC", "MCC_LOGIN_ID")); // break; // case "MCC_LOGIN_PW": // dListReceiveData.Add(new MultiUseDataBody("MCC", "MCC_LOGIN_PW")); // break; // default: // ack = ACK.At_least_One_data_invalid; // 지정된 네임이 아니면 나크 // break; //} } } } else // 타입이 MCC가 아니면 나크 { ack = ACK.At_least_One_data_invalid; break; } } } #endregion if (ack == ACK.At_least_One_data_invalid) { msgTran.Secondary().Item("L2").Putvalue(0); msgTran.Secondary().Item("ACK").Putvalue((int)ack); } else if (ack == ACK.OK) { #region MultiUseData Read this.pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.Msg2MCC, "GET"); subWaitDuring(1); #endregion #region ITEM Setting msgTran.Secondary().Item("L2").Putvalue(dListReceiveData.Count); msgTran.Secondary().Item("ACK").Putvalue((int)ack); for (int i = 0; i < dListReceiveData.Count; i++) { InfoAct.clsMultiUseDataByITEM clsITEM = this.pInfo.Unit(0).SubUnit(0).MultiData.TYPES(dListReceiveData[i].type).ITEMS(dListReceiveData[i].name); if (clsITEM != null) { msgTran.Secondary().Item("DATA_TYPE" + i.ToString()).Putvalue(clsITEM.DATA_TYPE); msgTran.Secondary().Item("ITEM_NAME" + i.ToString()).Putvalue(clsITEM.ITEM); msgTran.Secondary().Item("ITEM_VALUE" + i.ToString()).Putvalue(clsITEM.VALUE); msgTran.Secondary().Item("REFERENCE" + i.ToString()).Putvalue(clsITEM.REFERENCE); } else { msgTran.Secondary().Item("L2").Putvalue(0); msgTran.Secondary().Item("ACK").Putvalue((int)ack); } //switch (dListReceiveData[i].name) //{ // case "MCC_BASIC_PATH": // msgTran.Secondary().Item("DATA_TYPE" + i.ToString()).Putvalue(dListReceiveData[i].type); // msgTran.Secondary().Item("ITEM_NAME" + i.ToString()).Putvalue(dListReceiveData[i].name); // msgTran.Secondary().Item("ITEM_VALUE" + i.ToString()).Putvalue(pInfo.All.MCCNetworkBasicPath); // msgTran.Secondary().Item("REFERENCE" + i.ToString()).Putvalue("PATH"); // break; // case "MCC_HOST_IP": // msgTran.Secondary().Item("DATA_TYPE" + i.ToString()).Putvalue(dListReceiveData[i].type); // msgTran.Secondary().Item("ITEM_NAME" + i.ToString()).Putvalue(dListReceiveData[i].name); // msgTran.Secondary().Item("ITEM_VALUE" + i.ToString()).Putvalue(pInfo.All.MCCNetworkPath); // msgTran.Secondary().Item("REFERENCE" + i.ToString()).Putvalue("IP"); // break; // case "MCC_LOGIN_ID": // msgTran.Secondary().Item("DATA_TYPE" + i.ToString()).Putvalue(dListReceiveData[i].type); // msgTran.Secondary().Item("ITEM_NAME" + i.ToString()).Putvalue(dListReceiveData[i].name); // msgTran.Secondary().Item("ITEM_VALUE" + i.ToString()).Putvalue(pInfo.All.MCCNetworkUserID); // msgTran.Secondary().Item("REFERENCE" + i.ToString()).Putvalue("ID"); // break; // case "MCC_LOGIN_PW": // msgTran.Secondary().Item("DATA_TYPE" + i.ToString()).Putvalue(dListReceiveData[i].type); // msgTran.Secondary().Item("ITEM_NAME" + i.ToString()).Putvalue(dListReceiveData[i].name); // msgTran.Secondary().Item("ITEM_VALUE" + i.ToString()).Putvalue(pInfo.All.MCCNetworkPassword); // msgTran.Secondary().Item("REFERENCE" + i.ToString()).Putvalue("PW"); // break; // case "MCC_SAMPLING_TIME": // msgTran.Secondary().Item("DATA_TYPE" + i.ToString()).Putvalue(dListReceiveData[i].type); // msgTran.Secondary().Item("ITEM_NAME" + i.ToString()).Putvalue(dListReceiveData[i].name); // msgTran.Secondary().Item("ITEM_VALUE" + i.ToString()).Putvalue(pInfo.All.MCCFileUploadTime); // msgTran.Secondary().Item("REFERENCE" + i.ToString()).Putvalue("MINUTE"); // break; //} } #endregion } funSendReply(msgTran); return; } catch (Exception ex) { this.pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString()); } }