Esempio n. 1
0
        private void DoSendImsMsg(ImsResponse responseMsg)
        {
            try
            {
                if (ImsNetManager.Instance.IsImsSocketConnect())
                {
                    IMsgInfo msg     = responseMsg;
                    MsgSend  msgSend = new MsgSend();
                    int      res     = msgSend.ConvertFrom(msg);
                    if (0 == res)
                    {
                        byte[] data = msgSend.CloneBytes();
                        ImsNetManager.Instance.NowImsStation.SendBytes(data);

                        //  Logger.LogInfo(null, "向IMS发送响应消息 :【" + BitConverter.ToString(responseMsg.CloneMsgBytes()) + "】");
                    }
                    else
                    {
                        //  Logger.LogError(null, "向IMS发送响应消息 :【" + "消息不合法" + "】");
                    }
                }
            }
            catch (SocketException ex)
            {
                ImsNetManager.Instance.NowImsStation.CloseImsConn();
                // Logger.LogError(null, "IMS发送响应消息时捕获到SOCKET异常:【" + ex.Message+"】");
            }
            catch (Exception ex)
            {
                ImsNetManager.Instance.NowImsStation.CloseImsConn();
                // Logger.LogError(null, "IMS发送响应消息时捕获到未知异常:【" + ex.Message+"】");
            }
        }
Esempio n. 2
0
 //入队操作,增加数据
 public void AddMyMessageList(ImsResponse agvMap)
 {
     lock (this.MyMessageLock)
     {
         this.MyMessage.Enqueue(agvMap);
     }
 }
Esempio n. 3
0
        public ImsResponse GetResponseFromImsSendList()
        {
            ImsResponse msg = null;

            lock (this.imsResponseMsgListLock)
            {
                msg = this.imsResponseMsgList.Dequeue() as ImsResponse;
            }
            return(msg);
        }
Esempio n. 4
0
        private ImsResponse GetResponseFromSendList()
        {
            ImsResponse sendMsg = null;

            if (ImsNetManager.Instance.IsImsSendListHasData())
            {
                sendMsg = ImsNetManager.Instance.GetResponseFromImsSendList();
            }
            return(sendMsg);
        }
Esempio n. 5
0
 void PostData(object state)
 {
     if (QueueInstance.Instance.GetMyMessageCount() > 0)
     {
         ImsResponse sendMsg = QueueInstance.Instance.GetMyMessageList();
         string      str     = sendMsg.data;
         // byte[] buffer = System.Text.Encoding.ASCII.GetBytes(str);
         cm.Send(MessageType.msg, str);
         string mstr = System.DateTime.Now.ToString() + ":-》》》》" + str + "\n";
         QueueInstance.Instance.AddMessageShowList(mstr);
     }
 }
Esempio n. 6
0
        //出队操作,获得数据
        public ImsResponse GetMyMessageList()
        {
            ImsResponse agvmap = null;

            lock (this.MyMessageLock)
            {
                bool has = (this.MyMessage != null && this.MyMessage.Count > 0);
                if (has)
                {
                    agvmap = this.MyMessage.Dequeue() as ImsResponse;
                }
            }
            return(agvmap);
        }
Esempio n. 7
0
        public override void ExecuteTask()
        {
            String methodStr = "ImsMsgSendTask.ExecuteTask";

            try
            {
                ImsResponse sendcmd = GetResponseFromSendList();

                if (sendcmd != null)
                {
                    DoSendImsMsg(sendcmd);
                }
                else
                {
                    Thread.Sleep(1000);
                }
            }
            catch (Exception ex)
            {
                //  Logger.LogError(methodStr, "发送响应消息给IMS时捕获异常:" + ex.Message);
                Thread.Sleep(1000);
            }
        }
Esempio n. 8
0
        public override void ExecuteTask()
        {
            String methodStr = "ImsMsgSendTask.ExecuteTask";

            try
            {
                ImsResponse sendcmd = GetResponseFromSendList();

                if (sendcmd != null)
                {
                    DoSendImsMsg(sendcmd);
                }
                else
                {
                    Thread.Sleep(ServiceConstantsDef.SEND_MSG_TO_IMS_INTERVIEW_TIME);
                }
            }
            catch (Exception ex)
            {
                Logger.LogError(methodStr, "发送响应消息给IMS时捕获异常:" + ex.Message);
                Thread.Sleep(ServiceConstantsDef.SEND_MSG_TO_IMS_EXCEPTION_INTERVIEW_TIME);
            }
        }
Esempio n. 9
0
        public void timer1_Tick(object sender, EventArgs e)
        {
            if (QueueInstance.Instance.IsMessageShowHasData())
            {
                //增加方法
                //_del = new showdelegate(UpdateBox);
                _del = UpdateBox;
                // string mmstr = ImsRecvTask.getstring();
                string mmstr = QueueInstance.Instance.GetMessageShowList();
                //应用
                _del(mmstr);
            }

            //出队
            //对每一个arrive之后的字符串进行处理
            for (int i = 0; i < 100; i++)
            {
                if (QueueInstance.Instance.IsYourMessageHasData())
                {
                    string str = QueueInstance.Instance.GetYourMessageList();
                    //if (str != null)
                    //{
                    //   // MessageBox.Show(str);
                    //}
                    //将得到的数据转换成json对象
                    AGV_V1._0.SendData dataObj;
                    dataObj = (AGV_V1._0.SendData)JsonConvert.DeserializeObject(str, typeof(AGV_V1._0.SendData));
                    if (dataObj.State == Const.State.cannotToDestination)
                    {
                        dataObj.EndLoc = "RestArea";
                    }
                    else
                    {
                        if (msflag == 0)
                        { //工作
                            #region
                            dataObj = (AGV_V1._0.SendData)JsonConvert.DeserializeObject(str, typeof(AGV_V1._0.SendData));
                            if (dataObj.Arrive == true)
                            {
                                if (dataObj.StartLoc == "RestArea")
                                {
                                    dataObj.EndLoc = "WaitArea";
                                }
                                else if (dataObj.StartLoc == "WaitArea")
                                {
                                    dataObj.EndLoc = "ScanArea";
                                    dataObj.State  = Const.State.free;
                                }
                                else if (dataObj.StartLoc == "ScanArea")
                                {
                                    dataObj.EndLoc = "DestArea";
                                    dataObj.State  = Const.State.carried;
                                    // Thread.Sleep(AGVConstDefine.AfterScanPause_Time);
                                }
                                else if (dataObj.EndLoc == "DestArea" && dataObj.State == Const.State.carried)
                                {
                                    dataObj.EndLoc = "DestArea";
                                    dataObj.State  = Const.State.carried;
                                }
                                else if (dataObj.EndLoc == "DestArea" && dataObj.State == Const.State.unloading)
                                {
                                    dataObj.EndLoc = "DestArea";
                                    dataObj.State  = Const.State.unloading;
                                }
                                else if (dataObj.EndLoc == "DestArea" && dataObj.State == Const.State.free)
                                {
                                    dataObj.EndLoc = "WaitArea";
                                    dataObj.State  = Const.State.free;
                                }
                            }
                            #endregion
                        }
                        else
                        {
                            //休息
                            dataObj = (AGV_V1._0.SendData)JsonConvert.DeserializeObject(str, typeof(AGV_V1._0.SendData));
                            if (dataObj.Arrive == true)
                            {
                                if (dataObj.StartLoc == "RestArea")
                                {
                                    //dataObj.EndLoc = "";
                                    //break;
                                }
                                else if (dataObj.EndLoc == "DestArea" && dataObj.State == Const.State.carried)
                                {
                                    dataObj.EndLoc = "DestArea";
                                    dataObj.State  = Const.State.carried;
                                }
                                else if (dataObj.EndLoc == "DestArea" && dataObj.State == Const.State.unloading)
                                {
                                    dataObj.EndLoc = "DestArea";
                                    dataObj.State  = Const.State.unloading;
                                }
                                else if (dataObj.EndLoc == "DestArea" && dataObj.State == Const.State.free)
                                {
                                    dataObj.EndLoc = "RestArea";
                                    dataObj.State  = Const.State.free;
                                }
                            }
                        }
                    }
                    if (dataObj.StartLoc == "DestArea" && dataObj.EndLoc == "DestArea")
                    {
                    }
                    else if (dataObj.StartLoc == "RestArea" && msflag == 1)
                    {
                    }
                    else
                    {
                        AGVConstDefine.AGV[dataObj.Num].BeginX   = dataObj.BeginX;
                        AGVConstDefine.AGV[dataObj.Num].BeginY   = dataObj.BeginY;
                        AGVConstDefine.AGV[dataObj.Num].StartLoc = dataObj.StartLoc;
                        AGVConstDefine.AGV[dataObj.Num].EndLoc   = dataObj.EndLoc;
                        AGVConstDefine.AGV[dataObj.Num].State    = dataObj.State;
                        AGVDestination.Confirm_EndPoint(AGVConstDefine.AGV[dataObj.Num], AGVConstDefine.AGV[dataObj.Num].StartLoc, AGVConstDefine.AGV[dataObj.Num].BeginX, AGVConstDefine.AGV[dataObj.Num].BeginY, AGVConstDefine.AGV[dataObj.Num].EndLoc);

                        AGV_V1._0.SendData sd     = JsonHelper.GetSendObj(AGVConstDefine.AGV[dataObj.Num]);
                        string             sendjs = Newtonsoft.Json.JsonConvert.SerializeObject(sd);
                        //出队
                        if (AGVConstDefine.AGV[i].StartLoc == "ScanArea")
                        {
                            Task.Factory.StartNew(() => { Thread.Sleep(AGVConstDefine.AfterScanPause_Time); });
                        }
                        ImsResponse pathmessage = new ImsResponse();
                        pathmessage.obj  = "PATH";
                        pathmessage.data = sendjs;
                        QueueInstance.Instance.AddMyMessageList(pathmessage);
                    }
                }
            }
        }
Esempio n. 10
0
        void HandleData(object sender, MessageEventArgs e)
        {
            if (e.Type == MessageType.move)
            {
                //工作
                msflag = 0;
                #region
                string mstr = System.DateTime.Now.ToString() + ":" + "工作";
                QueueInstance.Instance.AddMessageShowList(mstr);
                // #region 与界面建立socket连接,归位,所有小车回到RestArea

                //工作消息,所有小车去往RestArea,将处理得到的数据放到队列里
                for (int i = 0; i < AGVConstDefine.AGV.Count(); i++)
                {
                    if (AGVConstDefine.AGV[i].State == Const.State.free && AGVConstDefine.AGV[i].StartLoc != "WaitArea")
                    {
                        AGVDestination.Confirm_EndPoint(AGVConstDefine.AGV[i], "", AGVConstDefine.AGV[i].BeginX, AGVConstDefine.AGV[i].BeginY, "WaitArea");
                    }
                    //else if (AGVConstDefine.AGV[i].StartLoc=="WaitArea")
                    //{
                    //    AGVDestination.Confirm_EndPoint(AGVConstDefine.AGV[i], "WaitArea", AGVConstDefine.AGV[i].BeginX, AGVConstDefine.AGV[i].BeginY, "ScanArea");
                    //}
                    //else if(AGVConstDefine.AGV[i].State == Const.State.carried)
                    //{
                    //    AGVConstDefine.AGV[i].StartLoc = "ScanArea";
                    //    AGVConstDefine.AGV[i].EndLoc = "DestArea";
                    //}
                    AGV_V1._0.SendData sd     = JsonHelper.GetSendObj(AGVConstDefine.AGV[i]);
                    string             sendjs = Newtonsoft.Json.JsonConvert.SerializeObject(sd);
                    //放进队列里
                    if (sendjs.Trim() != "")
                    {
                        if (AGVConstDefine.AGV[i].StartLoc == "ScanArea")
                        {
                            Task.Factory.StartNew(() => { Thread.Sleep(AGVConstDefine.AfterScanPause_Time); });
                        }
                        ImsResponse pathmessage = new ImsResponse();
                        pathmessage.obj  = "PATH";
                        pathmessage.data = sendjs;
                        //一个一个入队
                        QueueInstance.Instance.AddMyMessageList(pathmessage);
                    }
                }
                #endregion
            }
            if (e.Type == MessageType.reStart)
            {
                //去休息
                msflag = 1;
                #region
                string mstr = System.DateTime.Now.ToString() + ":" + "休息";
                QueueInstance.Instance.AddMessageShowList(mstr);
                // #region 与界面建立socket连接,归位,所有小车回到RestArea

                //归位消息,所有小车去往RestArea,将处理得到的数据放到队列里
                for (int i = 0; i < AGVConstDefine.AGV.Count(); i++)
                {
                    if (AGVConstDefine.AGV[i].State == Const.State.free)
                    {
                        AGVDestination.Confirm_EndPoint(AGVConstDefine.AGV[i], "", AGVConstDefine.AGV[i].BeginX, AGVConstDefine.AGV[i].BeginY, "RestArea");
                    }
                    else if (AGVConstDefine.AGV[i].State == Const.State.carried)
                    {
                        AGVConstDefine.AGV[i].StartLoc = "ScanArea";
                        AGVConstDefine.AGV[i].EndLoc   = "DestArea";
                    }
                    AGV_V1._0.SendData sd     = JsonHelper.GetSendObj(AGVConstDefine.AGV[i]);
                    string             sendjs = Newtonsoft.Json.JsonConvert.SerializeObject(sd);
                    //放进队列里
                    if (sendjs.Trim() != "")
                    {
                        if (AGVConstDefine.AGV[i].StartLoc == "ScanArea")
                        {
                            Task.Factory.StartNew(() => { Thread.Sleep(AGVConstDefine.AfterScanPause_Time); });
                        }
                        ImsResponse pathmessage = new ImsResponse();
                        pathmessage.obj  = "PATH";
                        pathmessage.data = sendjs;
                        //一个一个入队
                        QueueInstance.Instance.AddMyMessageList(pathmessage);
                    }
                }
                #endregion
            }
            else if (e.Type == MessageType.arrived)
            {
                #region
                string strContent = e.Message;//Encoding.ASCII.GetString(bRecTmp, 1, receiveNumber - 1);
                string mstr       = System.DateTime.Now.ToString() + ":Arrive消息" + strContent + "\n";
                QueueInstance.Instance.AddMessageShowList(mstr);

                List <AGV_V1._0.SendData> jsonObj = new List <AGV_V1._0.SendData>();
                //从第0个位置开始查找json数据对象
                int start = strContent.IndexOf("{", 0);
                int endx  = strContent.IndexOf("}", 0);
                while (start >= 0)
                {
                    string str = strContent.Substring(start, endx - start + 1);
                    //对收到的消息进行处理
                    QueueInstance.Instance.AddYourMessageList(str);

                    start = strContent.IndexOf("{", endx);
                    endx  = strContent.IndexOf("}", endx + 1);
                }
                #endregion
            }

            else if (e.Type == MessageType.msg)
            {
            }
            else if (e.Type == MessageType.AgvFile)
            {
                //  Response.Write(e.Message);
                string agvpath = System.Configuration.ConfigurationManager.AppSettings["AGVPath"].ToString().Trim();


                string[] xmlstr = new string[1];
                xmlstr[0] = e.Message;
                //System.IO.File.WriteAllLines(agvpath, xmlstr, Encoding.UTF8);
                //  System.IO.File.WriteAllLines(agvpath, xmlstr);
                using (FileStream fswrite = new FileStream(agvpath, FileMode.Create, FileAccess.Write))
                {
                    StreamWriter sw = new StreamWriter(fswrite);
                    sw.Write(e.Message);
                    sw.Flush();
                    sw.Close();
                }
                AgvLoad();
            }
            else if (e.Type == MessageType.mapFile)
            {
                //  Response.Write(e.Message);
                string mappath = System.Configuration.ConfigurationManager.AppSettings["MAPPath"].ToString().Trim();


                string[] xmlstr = new string[1];
                xmlstr[0] = e.Message;
                //System.IO.File.WriteAllLines(agvpath, xmlstr, Encoding.UTF8);
                System.IO.File.WriteAllLines(mappath, xmlstr);
                MapLoad();
            }
        }