コード例 #1
0
        /// <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());
            }
        }
コード例 #2
0
        /// <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());
            }
        }