public void On_Connection_Message(object MsgObj)
        {
            try
            {
                List <ReturnMessage> ReturnMsgList;
                string Msg = MsgObj.ToString();

                logger.Debug(_Config.DeviceName + "Recieve:" + Msg.Replace("\r", ""));


                //lock (_Decoder)
                //{
                ReturnMsgList = _Decoder.GetMessage(Msg);
                //}
                if (ReturnMsgList == null)
                {
                    logger.Debug(_Config.DeviceName + " Decode parse error:" + Msg.Replace("\r", ""));
                    return;
                }
                if (ReturnMsgList.Count == 0)
                {
                    logger.Debug(_Config.DeviceName + " Decode parse error:" + Msg.Replace("\r", ""));
                }
                foreach (ReturnMessage ReturnMsg in ReturnMsgList)
                {
                    logger.Debug(_Config.DeviceName + "Each ReturnMsg:" + JsonConvert.SerializeObject(ReturnMsg));
                    try
                    {
                        Transaction Txn;
                        Node        Node;
                        if (ReturnMsg != null)
                        {
                            Node = NodeManagement.GetByController(_Config.DeviceName, ReturnMsg.NodeAdr);

                            if (Node == null)
                            {
                                logger.Debug("Node not found!" + _Config.DeviceName + " - " + ReturnMsg.NodeAdr);
                                return;
                            }
                            //lock (TransactionList)
                            //{
                            lock (Node)
                            {
                                if (ReturnMsg.Type == ReturnMessage.ReturnType.Event)
                                {
                                    _ReportTarget.On_Event_Trigger(Node, ReturnMsg);
                                }
                                else if (TransactionList.TryRemove(ReturnMsg.NodeAdr + ReturnMsg.IsInterrupt.ToString(), out Txn))
                                {
                                    logger.Debug("Txn removed.");
                                    switch (ReturnMsg.Type)
                                    {
                                    case ReturnMessage.ReturnType.Excuted:
                                        if (!Txn.CommandType.Equals("CMD") && !Txn.CommandType.Equals("MOV"))
                                        {
                                            logger.Debug("Txn timmer stoped.");
                                            Txn.SetTimeOutMonitor(false);
                                        }
                                        else
                                        {
                                            Txn.SetTimeOutMonitor(false);
                                            Txn.SetTimeOut(15000);
                                            Txn.SetTimeOutMonitor(true);
                                            TransactionList.TryAdd(ReturnMsg.NodeAdr + ReturnMsg.IsInterrupt.ToString(), Txn);
                                        }
                                        _ReportTarget.On_Command_Excuted(Node, Txn, ReturnMsg);
                                        break;

                                    case ReturnMessage.ReturnType.Finished:
                                        logger.Debug("Txn timmer stoped.");
                                        Txn.SetTimeOutMonitor(false);
                                        _ReportTarget.On_Command_Finished(Node, Txn, ReturnMsg);
                                        break;

                                    case ReturnMessage.ReturnType.Error:
                                        Txn.SetTimeOutMonitor(false);
                                        _ReportTarget.On_Command_Error(Node, Txn, ReturnMsg);
                                        break;

                                    case ReturnMessage.ReturnType.Information:
                                        logger.Debug("Txn timmer stoped.");
                                        Txn.SetTimeOutMonitor(false);

                                        _ReportTarget.On_Command_Finished(Node, Txn, ReturnMsg);
                                        //SpinWait.SpinUntil(() => false, 300);
                                        ThreadPool.QueueUserWorkItem(new WaitCallback(conn.Send), ReturnMsg.FinCommand);
                                        logger.Debug(_Config.DeviceName + "Send:" + ReturnMsg.FinCommand);
                                        break;
                                    }
                                }
                                else
                                {
                                    logger.Debug(_Config.DeviceName + "(On_Connection_Message Txn is not found. msg:" + Msg);
                                    switch (ReturnMsg.Type)
                                    {
                                    case ReturnMessage.ReturnType.Information:
                                    case ReturnMessage.ReturnType.ReInformation:
                                        ThreadPool.QueueUserWorkItem(new WaitCallback(conn.Send), ReturnMsg.FinCommand);
                                        logger.Debug(_Config.DeviceName + "Send:" + ReturnMsg.FinCommand);
                                        break;
                                    }
                                }
                            }
                            //}
                        }
                        else
                        {
                            logger.Debug(_Config.DeviceName + "(On_Connection_Message Message decode fail:" + Msg);
                        }
                    }
                    catch (Exception e)
                    {
                        logger.Error(_Config.DeviceName + "(On_Connection_Message " + _Config.IPAdress + ":" + _Config.Port.ToString() + ")" + e.Message + "\n" + e.StackTrace);
                    }
                }
            }
            catch (Exception e)
            {
                logger.Error(_Config.DeviceName + "(On_Connection_Message " + _Config.IPAdress + ":" + _Config.Port.ToString() + ")" + e.Message + "\n" + e.StackTrace);
            }
        }
Beispiel #2
0
        public bool DoWork(Transaction Txn)
        {
            bool result = false;

            // lock (TransactionList)
            if (!Txn.NodeType.Equals("OCR"))
            {
                List <ReturnMessage> msgList = _Decoder.GetMessage(Txn.CommandEncodeStr);
                if (msgList.Count != 0)
                {
                    Txn.Type        = msgList[0].Command;
                    Txn.CommandType = msgList[0].CommandType;
                }
            }
            else
            {
                Txn.Type = "";
                //Txn.CommandType = "";
            }
            string key = "";

            if (_Config.Vendor.ToUpper().Equals("KAWASAKI"))
            {
                key = Txn.Seq;
            }
            else if (_Config.Vendor.ToUpper().Equals("HST") || _Config.Vendor.ToUpper().Equals("COGNEX"))
            {
                key = "1" + Txn.Type;
            }
            else
            {
                key = Txn.AdrNo + Txn.Type;
            }
            if (TransactionList.TryAdd(key, Txn))
            {
                Txn.SetTimeOutReport(this);
                Txn.SetTimeOutMonitor(true);
                TransactionRecord.New(Txn);
                conn.Send(Txn.CommandEncodeStr);

                string waferids = "";
                foreach (Job each in Txn.TargetJobs)
                {
                    waferids += each.Job_Id + " ";
                }
                logger.Debug(_Config.DeviceName + " Send:" + Txn.CommandEncodeStr.Replace("\r", "") + " Wafer:" + waferids);
                result = true;
            }
            else
            {
                Transaction workingTxn;
                TransactionList.TryGetValue(Txn.AdrNo + Txn.Type, out workingTxn);
                logger.Debug(_Config.DeviceName + "(DoWork " + _Config.IPAdress + ":" + _Config.Port.ToString() + ":" + Txn.CommandEncodeStr + ") Same type command " + workingTxn.CommandEncodeStr + " is already excuting.");

                result = false;
            }



            //}
            return(result);
        }