Example #1
0
        /// <summary>
        /// 接收小车动作完成操作
        /// </summary>
        static void AgvDoTask(AgvMsg agvMsg, SocketOpt socketOpt)
        {
            Agv   agv   = socketOpt.agv;
            STask sTask = agv.sTaskList.FirstOrDefault(a => a.sID == agvMsg.SID);

            if (sTask == null)
            {
                throw new Exception("无法找到子任务!");
            }

            PathPoint pPoint = sTask.pathList.FirstOrDefault(a => a.point.barCode == agvMsg.Barcode);

            switch (agvMsg.sTaskType)
            {
            case STaskType.D1:
            case STaskType.D20:
            case STaskType.D21:
            case STaskType.D24:
                List <Motion> listMotion = GetNextListMotion(sTask, pPoint, agv);
                if (listMotion.Count == 0)
                {
                    throw new Exception("找到0条路径");
                }
                else if (listMotion.Count == 1)
                {
                    socketOpt.Data = SendData.GetRepeatData(agv.agvNo);
                }
                else
                {
                    socketOpt.Data = SendData.GetNewActionData(agvMsg, listMotion);
                }
                //除发送给AGV的点外,其它点全部解锁方向
                NoLock(agv, listMotion);
                break;

            case STaskType.D2:
            case STaskType.D3:
            case STaskType.D6:
            case STaskType.D15:
            case STaskType.D18:
            case STaskType.D22:
            case STaskType.D23:
                Task.FinishTask(agv, sTask);
                socketOpt.Data = SendData.GetFinishData(agv.agvNo);
                break;

            case STaskType.D25:
                //if (beginPoint.barCode != endPoint.barCode)
                throw new Exception("原地旋转,起点和终点必须一致!");
                break;

            default:
                throw new Exception("未找到此任务类型");
            }

            ManageTcp.Send(socketOpt);
        }
Example #2
0
        /// <summary>
        /// Tcp指令发送
        /// </summary>
        /// <param name="ClientSocket">自定义Socket对象</param>
        /// <returns>发送结果</returns>
        public static void Send(SocketOpt ClientSocket)
        {
            Socket s = ClientSocket.Sct;

            //try
            //{
            s.Send(ClientSocket.Data, ClientSocket.Data.Length, 0);
            //}
            //catch (Exception Ex)
            //{
            //    throw Ex;
            //}
            //finally
            //{
            //    s.Close();
            //}
        }
Example #3
0
        /// <summary>
        /// 线程-收发报文处理业务的开始
        /// </summary>
        /// <param name="ClientSocket">客户端对象</param>
        public static void MultiSocket(Object ClientSocket)
        {
            Socket cSocket = ClientSocket as Socket;

            //try
            //{
            byte[] ReceiveData = new byte[1024];
            cSocket.ReceiveTimeout = 3000;
            if (cSocket.Poll(3000000, SelectMode.SelectRead))
            {
                int DataLength = cSocket.Receive(ReceiveData);
                if (DataLength > 0)
                {
                    SocketOpt SRece = new SocketOpt(cSocket, ReceiveData);

                    if (SRece != null)
                    {
                        TimeSpan ts1 = new TimeSpan(DateTime.Now.Ticks);

                        MsgManage.DataTranslate(SRece);


                        TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks);
                        TimeSpan ts3 = ts2.Subtract(ts1).Duration();
                        //App.ExFile.MessageLog("处理Agv指令时间", "1|" + ts2.Milliseconds + "-" + ts1.Milliseconds + "=" + ts3.Milliseconds);
                    }
                }

                Thread.Sleep(20);
            }
            //}
            //catch (Exception Ex)
            //{
            //    App.ExFile.MessageError("TranMultiSocket", Ex.ToString());
            //}
            //finally
            //{
            //    cSocket.Close();
            //}
        }
Example #4
0
        /// <summary>
        /// 更新数据
        /// </summary>
        static void SendTask(AgvMsg agvMsg, SocketOpt socketOpt)
        {
            Agv agv = socketOpt.agv;

            if (agv.state != AgvState.D11 && agv.state != AgvState.D12)
            {
                return;
            }
            if (agv.errorMsg != 0 && agv.errorMsg != 19 && agv.errorMsg != 1900 && agv.errorMsg != 190000)
            {
                return;
            }

            if (agv.sTaskList.Count == 0)
            {
                return;
            }
            STask sTask = agv.sTaskList[0];

            if (sTask.state != TaskState.HavePath)
            {
                return;
            }

            byte SOri, EOri;

            if (sTask.dialDirection == 1)
            {
                SOri = 1;
            }
            else
            {
                SOri = 0;
            }
            EOri           = (byte)sTask.dialDirection;
            socketOpt.Data = SendData.GetNewTaskData(agvMsg.AgvNo, sTask.sID, SOri, EOri);
            ManageTcp.Send(socketOpt);
            Task.DoingTask(sTask);
        }
Example #5
0
        /// <summary>
        /// 指令解析
        /// </summary>
        /// <param name="socketOpt">自定义Socket对象</param>
        public static void DataTranslate(SocketOpt socketOpt)
        {
            byte[] DataRecv = socketOpt.Data;
            string AgvNo    = Encoding.ASCII.GetString(DataRecv, 3, 10).Replace("\0", "");

            //try
            //{
            AgvMsg agvMsg     = new AgvMsg();
            int    DataLength = DataRecv[2];

            agvMsg.AgvNo = Encoding.ASCII.GetString(DataRecv, 3, 10).Replace("\0", "");

            socketOpt.agv = App.AgvList.FirstOrDefault(a => a.agvNo == agvMsg.AgvNo);
            if (socketOpt.agv == null)
            {
                throw new Exception("更新状态失败:找不到小车号。");
            }

            agvMsg.Barcode  = BitConverter.ToUInt32(DataRecv, 13).ToString();
            agvMsg.Voltage  = BitConverter.ToInt16(DataRecv, 17) / 100;
            agvMsg.State    = DataRecv[19];
            agvMsg.Height   = (HeightEnum)DataRecv[20];
            agvMsg.ErrCode1 = DataRecv[21];
            agvMsg.ErrCode2 = DataRecv[22];
            agvMsg.ErrCode3 = DataRecv[23];

            string sid = Encoding.ASCII.GetString(DataRecv, 26, 20).Replace("\0", "");

            if (string.IsNullOrEmpty(sid))
            {
                agvMsg.SID = 0;
            }
            else
            {
                agvMsg.SID = int.Parse(sid);
            }
            agvMsg.sTaskType = (STaskType)DataRecv[46];

            int CrcR = DataRecv[47];
            int CrcC = Commond.CRC(DataRecv, DataLength + 14);

            if (CrcC == CrcR)
            {
                Agv agv = socketOpt.agv;
                UpdateAgvShelfPoint(agvMsg, agv);

                if (agvMsg.SID == 0)
                {
                    SendTask(agvMsg, socketOpt);
                }
                else
                {
                    UpdataPointOri(agvMsg, agv);
                    AgvDoTask(agvMsg, socketOpt);
                }
            }
            //}
            //catch (Exception ex)
            //{
            //    App.ExFile.MessageLog("DataTranslate", ex.Message + "\r"
            //              + Encoding.Default.GetString(DataRecv));
            //}

            socketOpt.Data = SendData.GetRepeatData(AgvNo);
            ManageTcp.Send(socketOpt);
        }